| // REQUIRES: aarch64-registered-target |
| // RUN: %clang -target aarch64-none-linux -march=armv9.3-a -o %t -c %s 2>&1 | FileCheck --allow-empty %s |
| |
| // Successor targets should be ableto call predecessor target functions. |
| __attribute__((__always_inline__,target("v8a"))) |
| int armv80(int i) { |
| return i + 42; |
| } |
| |
| __attribute__((__always_inline__,target("v8.1a"))) |
| int armv81(int i) { |
| return armv80(i); |
| } |
| |
| __attribute__((__always_inline__,target("v8.2a"))) |
| int armv82(int i) { |
| return armv81(i); |
| } |
| |
| __attribute__((__always_inline__,target("v8.3a"))) |
| int armv83(int i) { |
| return armv82(i); |
| } |
| |
| __attribute__((__always_inline__,target("v8.4a"))) |
| int armv84(int i) { |
| return armv83(i); |
| } |
| |
| __attribute__((__always_inline__,target("v8.5a"))) |
| int armv85(int i) { |
| return armv84(i); |
| } |
| |
| __attribute__((__always_inline__,target("v8.6a"))) |
| int armv86(int i) { |
| return armv85(i); |
| } |
| |
| __attribute__((__always_inline__,target("v8.7a"))) |
| int armv87(int i) { |
| return armv86(i); |
| } |
| |
| __attribute__((__always_inline__,target("v8.8a"))) |
| int armv88(int i) { |
| return armv87(i); |
| } |
| |
| __attribute__((__always_inline__,target("v9a"))) |
| int armv9(int i) { |
| return armv85(i); |
| } |
| |
| __attribute__((__always_inline__,target("v9.1a"))) |
| int armv91(int i) { |
| return armv9(i); |
| } |
| |
| __attribute__((__always_inline__,target("v9.2a"))) |
| int armv92(int i) { |
| return armv91(i); |
| } |
| |
| __attribute__((__always_inline__,target("v9.3a"))) |
| int armv93(int i) { |
| return armv92(i); |
| } |
| |
| // CHECK-NOT: always_inline function {{.*}} requires target feature {{.*}}, but would be inlined into function {{.*}} that is compiled without support for {{.*}} |
| // CHECK-NOT: {{.*}} is not a recognized feature for this target |