xref: /llvm-project/clang/test/CodeGen/AArch64/subarch-compatbility.c (revision 207e5ccceec8d3cc3f32723e78f2a142bc61b07d)
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