xref: /llvm-project/clang/test/CodeGen/AArch64/fmv-features.c (revision 474f5d2aefb44430b89ed72774a3c1d26a0adfb1)
1 // Test all of the AArch64 fmv-features metadata without any dependency expansion.
2 // It is used to propagate the attribute string information from C/C++ source to LLVM IR.
3 
4 // RUN: %clang --target=aarch64-linux-gnu --rtlib=compiler-rt -emit-llvm -S -o - %s | FileCheck %s
5 
6 // CHECK: define dso_local i32 @fmv._Maes() #[[aes:[0-9]+]] {
7 // CHECK: define dso_local i32 @fmv._Mbf16() #[[bf16:[0-9]+]] {
8 __attribute__((target_clones("aes", "bf16"))) int fmv(void) { return 0; }
9 
10 // CHECK: define dso_local i32 @fmv._Mbti() #[[bti:[0-9]+]] {
11 __attribute__((target_version("bti"))) int fmv(void) { return 0; }
12 
13 // CHECK: define dso_local i32 @fmv._Mcrc() #[[crc:[0-9]+]] {
14 __attribute__((target_version("crc"))) int fmv(void) { return 0; }
15 
16 // CHECK: define dso_local i32 @fmv._Mdit() #[[dit:[0-9]+]] {
17 __attribute__((target_version("dit"))) int fmv(void) { return 0; }
18 
19 // CHECK: define dso_local i32 @fmv._Mdotprod() #[[dotprod:[0-9]+]] {
20 __attribute__((target_version("dotprod"))) int fmv(void) { return 0; }
21 
22 // CHECK: define dso_local i32 @fmv._Mdpb() #[[dpb:[0-9]+]] {
23 __attribute__((target_version("dpb"))) int fmv(void) { return 0; }
24 
25 // CHECK: define dso_local i32 @fmv._Mdpb2() #[[dpb2:[0-9]+]] {
26 __attribute__((target_version("dpb2"))) int fmv(void) { return 0; }
27 
28 // CHECK: define dso_local i32 @fmv._Mf32mm() #[[f32mm:[0-9]+]] {
29 __attribute__((target_version("f32mm"))) int fmv(void) { return 0; }
30 
31 // CHECK: define dso_local i32 @fmv._Mf64mm() #[[f64mm:[0-9]+]] {
32 __attribute__((target_version("f64mm"))) int fmv(void) { return 0; }
33 
34 // CHECK: define dso_local i32 @fmv._Mfcma() #[[fcma:[0-9]+]] {
35 __attribute__((target_version("fcma"))) int fmv(void) { return 0; }
36 
37 // CHECK: define dso_local i32 @fmv._Mflagm() #[[flagm:[0-9]+]] {
38 __attribute__((target_version("flagm"))) int fmv(void) { return 0; }
39 
40 // CHECK: define dso_local i32 @fmv._Mflagm2() #[[flagm2:[0-9]+]] {
41 __attribute__((target_version("flagm2"))) int fmv(void) { return 0; }
42 
43 // CHECK: define dso_local i32 @fmv._Mfp() #[[fp:[0-9]+]] {
44 __attribute__((target_version("fp"))) int fmv(void) { return 0; }
45 
46 // CHECK: define dso_local i32 @fmv._Mfp16() #[[fp16:[0-9]+]] {
47 __attribute__((target_version("fp16"))) int fmv(void) { return 0; }
48 
49 // CHECK: define dso_local i32 @fmv._Mfp16fml() #[[fp16fml:[0-9]+]] {
50 __attribute__((target_version("fp16fml"))) int fmv(void) { return 0; }
51 
52 // CHECK: define dso_local i32 @fmv._Mfrintts() #[[frintts:[0-9]+]] {
53 __attribute__((target_version("frintts"))) int fmv(void) { return 0; }
54 
55 // CHECK: define dso_local i32 @fmv._Mi8mm() #[[i8mm:[0-9]+]] {
56 __attribute__((target_version("i8mm"))) int fmv(void) { return 0; }
57 
58 // CHECK: define dso_local i32 @fmv._Mjscvt() #[[jscvt:[0-9]+]] {
59 __attribute__((target_version("jscvt"))) int fmv(void) { return 0; }
60 
61 // CHECK: define dso_local i32 @fmv._Mlse() #[[lse:[0-9]+]] {
62 __attribute__((target_version("lse"))) int fmv(void) { return 0; }
63 
64 // CHECK: define dso_local i32 @fmv._Mmemtag() #[[memtag:[0-9]+]] {
65 __attribute__((target_version("memtag"))) int fmv(void) { return 0; }
66 
67 // CHECK: define dso_local i32 @fmv._Mmops() #[[mops:[0-9]+]] {
68 __attribute__((target_version("mops"))) int fmv(void) { return 0; }
69 
70 // CHECK: define dso_local i32 @fmv._Mrcpc() #[[rcpc:[0-9]+]] {
71 __attribute__((target_version("rcpc"))) int fmv(void) { return 0; }
72 
73 // CHECK: define dso_local i32 @fmv._Mrcpc2() #[[rcpc2:[0-9]+]] {
74 __attribute__((target_version("rcpc2"))) int fmv(void) { return 0; }
75 
76 // CHECK: define dso_local i32 @fmv._Mrcpc3() #[[rcpc3:[0-9]+]] {
77 __attribute__((target_version("rcpc3"))) int fmv(void) { return 0; }
78 
79 // CHECK: define dso_local i32 @fmv._Mrdm() #[[rdm:[0-9]+]] {
80 __attribute__((target_version("rdm"))) int fmv(void) { return 0; }
81 
82 // CHECK: define dso_local i32 @fmv._Mrng() #[[rng:[0-9]+]] {
83 __attribute__((target_version("rng"))) int fmv(void) { return 0; }
84 
85 // CHECK: define dso_local i32 @fmv._Msb() #[[sb:[0-9]+]] {
86 __attribute__((target_version("sb"))) int fmv(void) { return 0; }
87 
88 // CHECK: define dso_local i32 @fmv._Msha2() #[[sha2:[0-9]+]] {
89 __attribute__((target_version("sha2"))) int fmv(void) { return 0; }
90 
91 // CHECK: define dso_local i32 @fmv._Msha3() #[[sha3:[0-9]+]] {
92 __attribute__((target_version("sha3"))) int fmv(void) { return 0; }
93 
94 // CHECK: define dso_local i32 @fmv._Msimd() #[[simd:[0-9]+]] {
95 __attribute__((target_version("simd"))) int fmv(void) { return 0; }
96 
97 // CHECK: define dso_local i32 @fmv._Msm4() #[[sm4:[0-9]+]] {
98 __attribute__((target_version("sm4"))) int fmv(void) { return 0; }
99 
100 // CHECK: define dso_local i32 @fmv._Msme() #[[sme:[0-9]+]] {
101 __attribute__((target_version("sme"))) int fmv(void) { return 0; }
102 
103 // CHECK: define dso_local i32 @fmv._Msme-f64f64() #[[sme_f64f64:[0-9]+]] {
104 __attribute__((target_version("sme-f64f64"))) int fmv(void) { return 0; }
105 
106 // CHECK: define dso_local i32 @fmv._Msme-i16i64() #[[sme_i16i64:[0-9]+]] {
107 __attribute__((target_version("sme-i16i64"))) int fmv(void) { return 0; }
108 
109 // CHECK: define dso_local i32 @fmv._Msme2() #[[sme2:[0-9]+]] {
110 __attribute__((target_version("sme2"))) int fmv(void) { return 0; }
111 
112 // CHECK: define dso_local i32 @fmv._Mssbs() #[[ssbs:[0-9]+]] {
113 __attribute__((target_version("ssbs"))) int fmv(void) { return 0; }
114 
115 // CHECK: define dso_local i32 @fmv._Msve() #[[sve:[0-9]+]] {
116 __attribute__((target_version("sve"))) int fmv(void) { return 0; }
117 
118 // CHECK: define dso_local i32 @fmv._Msve2() #[[sve2:[0-9]+]] {
119 __attribute__((target_version("sve2"))) int fmv(void) { return 0; }
120 
121 // CHECK: define dso_local i32 @fmv._Msve2-aes() #[[sve2_aes:[0-9]+]] {
122 __attribute__((target_version("sve2-aes"))) int fmv(void) { return 0; }
123 
124 // CHECK: define dso_local i32 @fmv._Msve2-bitperm() #[[sve2_bitperm:[0-9]+]] {
125 __attribute__((target_version("sve2-bitperm"))) int fmv(void) { return 0; }
126 
127 // CHECK: define dso_local i32 @fmv._Msve2-sha3() #[[sve2_sha3:[0-9]+]] {
128 __attribute__((target_version("sve2-sha3"))) int fmv(void) { return 0; }
129 
130 // CHECK: define dso_local i32 @fmv._Msve2-sm4() #[[sve2_sm4:[0-9]+]] {
131 __attribute__((target_version("sve2-sm4"))) int fmv(void) { return 0; }
132 
133 // CHECK: define dso_local i32 @fmv._Mwfxt() #[[wfxt:[0-9]+]] {
134 __attribute__((target_version("wfxt"))) int fmv(void) { return 0; }
135 
136 // CHECK: define dso_local i32 @fmv._MaesMbf16MbtiMcrc() #[[unordered_features_with_duplicates:[0-9]+]] {
137 __attribute__((target_version("crc+bti+bti+bti+aes+aes+bf16"))) int fmv(void) { return 0; }
138 
139 // CHECK-NOT: define dso_local i32 @fmv._M{{.*}}
140 __attribute__((target_version("non_existent_extension"))) int fmv(void);
141 
142 // CHECK: define dso_local i32 @fmv.default() #[[default:[0-9]+]] {
143 __attribute__((target_version("default"))) int fmv(void);
144 
145 int caller() {
146   return fmv();
147 }
148 
149 // CHECK: attributes #[[aes]] = {{.*}} "fmv-features"="aes"
150 // CHECK: attributes #[[bf16]] = {{.*}} "fmv-features"="bf16"
151 // CHECK: attributes #[[bti]] = {{.*}} "fmv-features"="bti"
152 // CHECK: attributes #[[crc]] = {{.*}} "fmv-features"="crc"
153 // CHECK: attributes #[[dit]] = {{.*}} "fmv-features"="dit"
154 // CHECK: attributes #[[dotprod]] = {{.*}} "fmv-features"="dotprod"
155 // CHECK: attributes #[[dpb]] = {{.*}} "fmv-features"="dpb"
156 // CHECK: attributes #[[dpb2]] = {{.*}} "fmv-features"="dpb2"
157 // CHECK: attributes #[[f32mm]] = {{.*}} "fmv-features"="f32mm"
158 // CHECK: attributes #[[f64mm]] = {{.*}} "fmv-features"="f64mm"
159 // CHECK: attributes #[[fcma]] = {{.*}} "fmv-features"="fcma"
160 // CHECK: attributes #[[flagm]] = {{.*}} "fmv-features"="flagm"
161 // CHECK: attributes #[[flagm2]] = {{.*}} "fmv-features"="flagm2"
162 // CHECK: attributes #[[fp]] = {{.*}} "fmv-features"="fp"
163 // CHECK: attributes #[[fp16]] = {{.*}} "fmv-features"="fp16"
164 // CHECK: attributes #[[fp16fml]] = {{.*}} "fmv-features"="fp16fml"
165 // CHECK: attributes #[[frintts]] = {{.*}} "fmv-features"="frintts"
166 // CHECK: attributes #[[i8mm]] = {{.*}} "fmv-features"="i8mm"
167 // CHECK: attributes #[[jscvt]] = {{.*}} "fmv-features"="jscvt"
168 // CHECK: attributes #[[lse]] = {{.*}} "fmv-features"="lse"
169 // CHECK: attributes #[[memtag]] = {{.*}} "fmv-features"="memtag"
170 // CHECK: attributes #[[mops]] = {{.*}} "fmv-features"="mops"
171 // CHECK: attributes #[[rcpc]] = {{.*}} "fmv-features"="rcpc"
172 // CHECK: attributes #[[rcpc2]] = {{.*}} "fmv-features"="rcpc2"
173 // CHECK: attributes #[[rcpc3]] = {{.*}} "fmv-features"="rcpc3"
174 // CHECK: attributes #[[rdm]] = {{.*}} "fmv-features"="rdm"
175 // CHECK: attributes #[[rng]] = {{.*}} "fmv-features"="rng"
176 // CHECK: attributes #[[sb]] = {{.*}} "fmv-features"="sb"
177 // CHECK: attributes #[[sha2]] = {{.*}} "fmv-features"="sha2"
178 // CHECK: attributes #[[sha3]] = {{.*}} "fmv-features"="sha3"
179 // CHECK: attributes #[[simd]] = {{.*}} "fmv-features"="simd"
180 // CHECK: attributes #[[sm4]] = {{.*}} "fmv-features"="sm4"
181 // CHECK: attributes #[[sme]] = {{.*}} "fmv-features"="sme"
182 // CHECK: attributes #[[sme_f64f64]] = {{.*}} "fmv-features"="sme-f64f64"
183 // CHECK: attributes #[[sme_i16i64]] = {{.*}} "fmv-features"="sme-i16i64"
184 // CHECK: attributes #[[sme2]] = {{.*}} "fmv-features"="sme2"
185 // CHECK: attributes #[[ssbs]] = {{.*}} "fmv-features"="ssbs"
186 // CHECK: attributes #[[sve]] = {{.*}} "fmv-features"="sve"
187 // CHECK: attributes #[[sve2]] = {{.*}} "fmv-features"="sve2"
188 // CHECK: attributes #[[sve2_aes]] = {{.*}} "fmv-features"="sve2-aes"
189 // CHECK: attributes #[[sve2_bitperm]] = {{.*}} "fmv-features"="sve2-bitperm"
190 // CHECK: attributes #[[sve2_sha3]] = {{.*}} "fmv-features"="sve2-sha3"
191 // CHECK: attributes #[[sve2_sm4]] = {{.*}} "fmv-features"="sve2-sm4"
192 // CHECK: attributes #[[wfxt]] = {{.*}} "fmv-features"="wfxt"
193 // CHECK: attributes #[[unordered_features_with_duplicates]] = {{.*}} "fmv-features"="aes,bf16,bti,crc"
194 // CHECK: attributes #[[default]] = {{.*}} "fmv-features"
195