1 // REQUIRES: aarch64-registered-target 2 // RUN: %clang -target aarch64-none-linux -march=armv9.3-a -o %t -c %s 2>&1 | FileCheck --allow-empty %s 3 4 // Successor targets should be ableto call predecessor target functions. 5 __attribute__((__always_inline__,target("v8a"))) 6 int armv80(int i) { 7 return i + 42; 8 } 9 10 __attribute__((__always_inline__,target("v8.1a"))) 11 int armv81(int i) { 12 return armv80(i); 13 } 14 15 __attribute__((__always_inline__,target("v8.2a"))) 16 int armv82(int i) { 17 return armv81(i); 18 } 19 20 __attribute__((__always_inline__,target("v8.3a"))) 21 int armv83(int i) { 22 return armv82(i); 23 } 24 25 __attribute__((__always_inline__,target("v8.4a"))) 26 int armv84(int i) { 27 return armv83(i); 28 } 29 30 __attribute__((__always_inline__,target("v8.5a"))) 31 int armv85(int i) { 32 return armv84(i); 33 } 34 35 __attribute__((__always_inline__,target("v8.6a"))) 36 int armv86(int i) { 37 return armv85(i); 38 } 39 40 __attribute__((__always_inline__,target("v8.7a"))) 41 int armv87(int i) { 42 return armv86(i); 43 } 44 45 __attribute__((__always_inline__,target("v8.8a"))) 46 int armv88(int i) { 47 return armv87(i); 48 } 49 50 __attribute__((__always_inline__,target("v9a"))) 51 int armv9(int i) { 52 return armv85(i); 53 } 54 55 __attribute__((__always_inline__,target("v9.1a"))) 56 int armv91(int i) { 57 return armv9(i); 58 } 59 60 __attribute__((__always_inline__,target("v9.2a"))) 61 int armv92(int i) { 62 return armv91(i); 63 } 64 65 __attribute__((__always_inline__,target("v9.3a"))) 66 int armv93(int i) { 67 return armv92(i); 68 } 69 70 // CHECK-NOT: always_inline function {{.*}} requires target feature {{.*}}, but would be inlined into function {{.*}} that is compiled without support for {{.*}} 71 // CHECK-NOT: {{.*}} is not a recognized feature for this target 72