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