xref: /llvm-project/clang/test/CodeGen/AArch64/mixed-target-attributes.c (revision 6f013dbced67948119fe9ca71336f0284975ba4f)
1207e5cccSFangrui Song // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --function-signature --check-attributes --check-globals --include-generated-funcs --global-value-regex ".*"
2207e5cccSFangrui Song // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature -v9.5a -emit-llvm -o - %s | FileCheck %s
3207e5cccSFangrui Song // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature -fmv -emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK-NOFMV
4207e5cccSFangrui Song 
5207e5cccSFangrui Song // The following is guarded because in NOFMV we get an error for redefining the default.
6207e5cccSFangrui Song #ifdef __HAVE_FUNCTION_MULTI_VERSIONING
7207e5cccSFangrui Song int explicit_default(void) { return 0; }
8207e5cccSFangrui Song __attribute__((target_version("jscvt"))) int explicit_default(void) { return 1; }
9207e5cccSFangrui Song __attribute__((target_clones("dotprod", "lse"))) int explicit_default(void) { return 2; }
10207e5cccSFangrui Song __attribute__((target_version("rdma"))) int explicit_default(void) { return 3; }
11207e5cccSFangrui Song 
12207e5cccSFangrui Song int foo(void) { return explicit_default(); }
13207e5cccSFangrui Song #endif
14207e5cccSFangrui Song 
15207e5cccSFangrui Song __attribute__((target_version("jscvt"))) int implicit_default(void) { return 1; }
16207e5cccSFangrui Song __attribute__((target_clones("dotprod", "lse"))) int implicit_default(void) { return 2; }
17207e5cccSFangrui Song __attribute__((target_version("rdma"))) int implicit_default(void) { return 3; }
18207e5cccSFangrui Song 
19207e5cccSFangrui Song int bar(void) { return implicit_default(); }
20207e5cccSFangrui Song 
21207e5cccSFangrui Song // These shouldn't generate anything.
22207e5cccSFangrui Song int unused_version_declarations(void);
23207e5cccSFangrui Song __attribute__((target_clones("dotprod", "lse"))) int unused_version_declarations(void);
24207e5cccSFangrui Song __attribute__((target_version("jscvt"))) int unused_version_declarations(void);
25207e5cccSFangrui Song 
26207e5cccSFangrui Song // These should generate the default (mangled) version and the resolver.
27207e5cccSFangrui Song int default_def_with_version_decls(void) { return 0; }
28207e5cccSFangrui Song __attribute__((target_clones("dotprod", "lse"))) int default_def_with_version_decls(void);
29207e5cccSFangrui Song __attribute__((target_version("jscvt"))) int default_def_with_version_decls(void);
30207e5cccSFangrui Song 
31207e5cccSFangrui Song //.
32207e5cccSFangrui Song // CHECK: @__aarch64_cpu_features = external dso_local global { i64 }
33207e5cccSFangrui Song // CHECK: @explicit_default = weak_odr ifunc i32 (), ptr @explicit_default.resolver
34207e5cccSFangrui Song // CHECK: @implicit_default = weak_odr ifunc i32 (), ptr @implicit_default.resolver
35207e5cccSFangrui Song // CHECK: @default_def_with_version_decls = weak_odr ifunc i32 (), ptr @default_def_with_version_decls.resolver
36207e5cccSFangrui Song //.
37207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone
38207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@explicit_default.default
39207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR0:[0-9]+]] {
40207e5cccSFangrui Song // CHECK-NEXT:  entry:
41207e5cccSFangrui Song // CHECK-NEXT:    ret i32 0
42207e5cccSFangrui Song //
43207e5cccSFangrui Song //
44207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone
45207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@explicit_default._Mjscvt
46207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR1:[0-9]+]] {
47207e5cccSFangrui Song // CHECK-NEXT:  entry:
48207e5cccSFangrui Song // CHECK-NEXT:    ret i32 1
49207e5cccSFangrui Song //
50207e5cccSFangrui Song //
51207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone
52207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@explicit_default._Mdotprod
53207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR2:[0-9]+]] {
54207e5cccSFangrui Song // CHECK-NEXT:  entry:
55207e5cccSFangrui Song // CHECK-NEXT:    ret i32 2
56207e5cccSFangrui Song //
57207e5cccSFangrui Song //
58207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone
59207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@explicit_default._Mlse
60207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR3:[0-9]+]] {
61207e5cccSFangrui Song // CHECK-NEXT:  entry:
62207e5cccSFangrui Song // CHECK-NEXT:    ret i32 2
63207e5cccSFangrui Song //
64207e5cccSFangrui Song //
65207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@explicit_default.resolver() comdat {
66207e5cccSFangrui Song // CHECK-NEXT:  resolver_entry:
67207e5cccSFangrui Song // CHECK-NEXT:    call void @__init_cpu_features_resolver()
68207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8
69*6f013dbcSAlexandros Lamprineas // CHECK-NEXT:    [[TMP1:%.*]] = and i64 [[TMP0]], 1048832
70*6f013dbcSAlexandros Lamprineas // CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i64 [[TMP1]], 1048832
71207e5cccSFangrui Song // CHECK-NEXT:    [[TMP3:%.*]] = and i1 true, [[TMP2]]
72207e5cccSFangrui Song // CHECK-NEXT:    br i1 [[TMP3]], label [[RESOLVER_RETURN:%.*]], label [[RESOLVER_ELSE:%.*]]
73207e5cccSFangrui Song // CHECK:       resolver_return:
74207e5cccSFangrui Song // CHECK-NEXT:    ret ptr @explicit_default._Mjscvt
75207e5cccSFangrui Song // CHECK:       resolver_else:
76207e5cccSFangrui Song // CHECK-NEXT:    [[TMP4:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8
77*6f013dbcSAlexandros Lamprineas // CHECK-NEXT:    [[TMP5:%.*]] = and i64 [[TMP4]], 832
78*6f013dbcSAlexandros Lamprineas // CHECK-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[TMP5]], 832
79207e5cccSFangrui Song // CHECK-NEXT:    [[TMP7:%.*]] = and i1 true, [[TMP6]]
80207e5cccSFangrui Song // CHECK-NEXT:    br i1 [[TMP7]], label [[RESOLVER_RETURN1:%.*]], label [[RESOLVER_ELSE2:%.*]]
81207e5cccSFangrui Song // CHECK:       resolver_return1:
82207e5cccSFangrui Song // CHECK-NEXT:    ret ptr @explicit_default._Mrdm
83207e5cccSFangrui Song // CHECK:       resolver_else2:
84207e5cccSFangrui Song // CHECK-NEXT:    [[TMP8:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8
85*6f013dbcSAlexandros Lamprineas // CHECK-NEXT:    [[TMP9:%.*]] = and i64 [[TMP8]], 784
86*6f013dbcSAlexandros Lamprineas // CHECK-NEXT:    [[TMP10:%.*]] = icmp eq i64 [[TMP9]], 784
87207e5cccSFangrui Song // CHECK-NEXT:    [[TMP11:%.*]] = and i1 true, [[TMP10]]
88207e5cccSFangrui Song // CHECK-NEXT:    br i1 [[TMP11]], label [[RESOLVER_RETURN3:%.*]], label [[RESOLVER_ELSE4:%.*]]
89207e5cccSFangrui Song // CHECK:       resolver_return3:
90207e5cccSFangrui Song // CHECK-NEXT:    ret ptr @explicit_default._Mdotprod
91207e5cccSFangrui Song // CHECK:       resolver_else4:
92207e5cccSFangrui Song // CHECK-NEXT:    [[TMP12:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8
93207e5cccSFangrui Song // CHECK-NEXT:    [[TMP13:%.*]] = and i64 [[TMP12]], 128
94207e5cccSFangrui Song // CHECK-NEXT:    [[TMP14:%.*]] = icmp eq i64 [[TMP13]], 128
95207e5cccSFangrui Song // CHECK-NEXT:    [[TMP15:%.*]] = and i1 true, [[TMP14]]
96207e5cccSFangrui Song // CHECK-NEXT:    br i1 [[TMP15]], label [[RESOLVER_RETURN5:%.*]], label [[RESOLVER_ELSE6:%.*]]
97207e5cccSFangrui Song // CHECK:       resolver_return5:
98207e5cccSFangrui Song // CHECK-NEXT:    ret ptr @explicit_default._Mlse
99207e5cccSFangrui Song // CHECK:       resolver_else6:
100207e5cccSFangrui Song // CHECK-NEXT:    ret ptr @explicit_default.default
101207e5cccSFangrui Song //
102207e5cccSFangrui Song //
103207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone
104207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@explicit_default._Mrdm
105207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR4:[0-9]+]] {
106207e5cccSFangrui Song // CHECK-NEXT:  entry:
107207e5cccSFangrui Song // CHECK-NEXT:    ret i32 3
108207e5cccSFangrui Song //
109207e5cccSFangrui Song //
110207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone
111207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@foo
112207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR0]] {
113207e5cccSFangrui Song // CHECK-NEXT:  entry:
114207e5cccSFangrui Song // CHECK-NEXT:    [[CALL:%.*]] = call i32 @explicit_default()
115207e5cccSFangrui Song // CHECK-NEXT:    ret i32 [[CALL]]
116207e5cccSFangrui Song //
117207e5cccSFangrui Song //
118207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone
119207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@implicit_default._Mjscvt
120207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR1]] {
121207e5cccSFangrui Song // CHECK-NEXT:  entry:
122207e5cccSFangrui Song // CHECK-NEXT:    ret i32 1
123207e5cccSFangrui Song //
124207e5cccSFangrui Song //
125207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone
126207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@implicit_default._Mdotprod
127207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR2]] {
128207e5cccSFangrui Song // CHECK-NEXT:  entry:
129207e5cccSFangrui Song // CHECK-NEXT:    ret i32 2
130207e5cccSFangrui Song //
131207e5cccSFangrui Song //
132207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone
133207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@implicit_default._Mlse
134207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR3]] {
135207e5cccSFangrui Song // CHECK-NEXT:  entry:
136207e5cccSFangrui Song // CHECK-NEXT:    ret i32 2
137207e5cccSFangrui Song //
138207e5cccSFangrui Song //
139207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@implicit_default.resolver() comdat {
140207e5cccSFangrui Song // CHECK-NEXT:  resolver_entry:
141207e5cccSFangrui Song // CHECK-NEXT:    call void @__init_cpu_features_resolver()
142207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8
143*6f013dbcSAlexandros Lamprineas // CHECK-NEXT:    [[TMP1:%.*]] = and i64 [[TMP0]], 1048832
144*6f013dbcSAlexandros Lamprineas // CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i64 [[TMP1]], 1048832
145207e5cccSFangrui Song // CHECK-NEXT:    [[TMP3:%.*]] = and i1 true, [[TMP2]]
146207e5cccSFangrui Song // CHECK-NEXT:    br i1 [[TMP3]], label [[RESOLVER_RETURN:%.*]], label [[RESOLVER_ELSE:%.*]]
147207e5cccSFangrui Song // CHECK:       resolver_return:
148207e5cccSFangrui Song // CHECK-NEXT:    ret ptr @implicit_default._Mjscvt
149207e5cccSFangrui Song // CHECK:       resolver_else:
150207e5cccSFangrui Song // CHECK-NEXT:    [[TMP4:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8
151*6f013dbcSAlexandros Lamprineas // CHECK-NEXT:    [[TMP5:%.*]] = and i64 [[TMP4]], 832
152*6f013dbcSAlexandros Lamprineas // CHECK-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[TMP5]], 832
153207e5cccSFangrui Song // CHECK-NEXT:    [[TMP7:%.*]] = and i1 true, [[TMP6]]
154207e5cccSFangrui Song // CHECK-NEXT:    br i1 [[TMP7]], label [[RESOLVER_RETURN1:%.*]], label [[RESOLVER_ELSE2:%.*]]
155207e5cccSFangrui Song // CHECK:       resolver_return1:
156207e5cccSFangrui Song // CHECK-NEXT:    ret ptr @implicit_default._Mrdm
157207e5cccSFangrui Song // CHECK:       resolver_else2:
158207e5cccSFangrui Song // CHECK-NEXT:    [[TMP8:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8
159*6f013dbcSAlexandros Lamprineas // CHECK-NEXT:    [[TMP9:%.*]] = and i64 [[TMP8]], 784
160*6f013dbcSAlexandros Lamprineas // CHECK-NEXT:    [[TMP10:%.*]] = icmp eq i64 [[TMP9]], 784
161207e5cccSFangrui Song // CHECK-NEXT:    [[TMP11:%.*]] = and i1 true, [[TMP10]]
162207e5cccSFangrui Song // CHECK-NEXT:    br i1 [[TMP11]], label [[RESOLVER_RETURN3:%.*]], label [[RESOLVER_ELSE4:%.*]]
163207e5cccSFangrui Song // CHECK:       resolver_return3:
164207e5cccSFangrui Song // CHECK-NEXT:    ret ptr @implicit_default._Mdotprod
165207e5cccSFangrui Song // CHECK:       resolver_else4:
166207e5cccSFangrui Song // CHECK-NEXT:    [[TMP12:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8
167207e5cccSFangrui Song // CHECK-NEXT:    [[TMP13:%.*]] = and i64 [[TMP12]], 128
168207e5cccSFangrui Song // CHECK-NEXT:    [[TMP14:%.*]] = icmp eq i64 [[TMP13]], 128
169207e5cccSFangrui Song // CHECK-NEXT:    [[TMP15:%.*]] = and i1 true, [[TMP14]]
170207e5cccSFangrui Song // CHECK-NEXT:    br i1 [[TMP15]], label [[RESOLVER_RETURN5:%.*]], label [[RESOLVER_ELSE6:%.*]]
171207e5cccSFangrui Song // CHECK:       resolver_return5:
172207e5cccSFangrui Song // CHECK-NEXT:    ret ptr @implicit_default._Mlse
173207e5cccSFangrui Song // CHECK:       resolver_else6:
174207e5cccSFangrui Song // CHECK-NEXT:    ret ptr @implicit_default.default
175207e5cccSFangrui Song //
176207e5cccSFangrui Song //
177207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone
178207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@implicit_default._Mrdm
179207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR4]] {
180207e5cccSFangrui Song // CHECK-NEXT:  entry:
181207e5cccSFangrui Song // CHECK-NEXT:    ret i32 3
182207e5cccSFangrui Song //
183207e5cccSFangrui Song //
184207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone
185207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@bar
186207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR0]] {
187207e5cccSFangrui Song // CHECK-NEXT:  entry:
188207e5cccSFangrui Song // CHECK-NEXT:    [[CALL:%.*]] = call i32 @implicit_default()
189207e5cccSFangrui Song // CHECK-NEXT:    ret i32 [[CALL]]
190207e5cccSFangrui Song //
191207e5cccSFangrui Song //
192207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone
193207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@default_def_with_version_decls.default
194207e5cccSFangrui Song // CHECK-SAME: () #[[ATTR0]] {
195207e5cccSFangrui Song // CHECK-NEXT:  entry:
196207e5cccSFangrui Song // CHECK-NEXT:    ret i32 0
197207e5cccSFangrui Song //
198207e5cccSFangrui Song //
199207e5cccSFangrui Song // CHECK: Function Attrs: noinline nounwind optnone
200207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@implicit_default.default
201461a0d6cSAlexandros Lamprineas // CHECK-SAME: () #[[ATTR6:[0-9]+]] {
202207e5cccSFangrui Song // CHECK-NEXT:  entry:
203207e5cccSFangrui Song // CHECK-NEXT:    ret i32 2
204207e5cccSFangrui Song //
205207e5cccSFangrui Song //
206207e5cccSFangrui Song // CHECK-LABEL: define {{[^@]+}}@default_def_with_version_decls.resolver() comdat {
207207e5cccSFangrui Song // CHECK-NEXT:  resolver_entry:
208207e5cccSFangrui Song // CHECK-NEXT:    call void @__init_cpu_features_resolver()
209207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8
210*6f013dbcSAlexandros Lamprineas // CHECK-NEXT:    [[TMP1:%.*]] = and i64 [[TMP0]], 1048832
211*6f013dbcSAlexandros Lamprineas // CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i64 [[TMP1]], 1048832
212207e5cccSFangrui Song // CHECK-NEXT:    [[TMP3:%.*]] = and i1 true, [[TMP2]]
213207e5cccSFangrui Song // CHECK-NEXT:    br i1 [[TMP3]], label [[RESOLVER_RETURN:%.*]], label [[RESOLVER_ELSE:%.*]]
214207e5cccSFangrui Song // CHECK:       resolver_return:
215207e5cccSFangrui Song // CHECK-NEXT:    ret ptr @default_def_with_version_decls._Mjscvt
216207e5cccSFangrui Song // CHECK:       resolver_else:
217207e5cccSFangrui Song // CHECK-NEXT:    [[TMP4:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8
218*6f013dbcSAlexandros Lamprineas // CHECK-NEXT:    [[TMP5:%.*]] = and i64 [[TMP4]], 784
219*6f013dbcSAlexandros Lamprineas // CHECK-NEXT:    [[TMP6:%.*]] = icmp eq i64 [[TMP5]], 784
220207e5cccSFangrui Song // CHECK-NEXT:    [[TMP7:%.*]] = and i1 true, [[TMP6]]
221207e5cccSFangrui Song // CHECK-NEXT:    br i1 [[TMP7]], label [[RESOLVER_RETURN1:%.*]], label [[RESOLVER_ELSE2:%.*]]
222207e5cccSFangrui Song // CHECK:       resolver_return1:
223207e5cccSFangrui Song // CHECK-NEXT:    ret ptr @default_def_with_version_decls._Mdotprod
224207e5cccSFangrui Song // CHECK:       resolver_else2:
225207e5cccSFangrui Song // CHECK-NEXT:    [[TMP8:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8
226207e5cccSFangrui Song // CHECK-NEXT:    [[TMP9:%.*]] = and i64 [[TMP8]], 128
227207e5cccSFangrui Song // CHECK-NEXT:    [[TMP10:%.*]] = icmp eq i64 [[TMP9]], 128
228207e5cccSFangrui Song // CHECK-NEXT:    [[TMP11:%.*]] = and i1 true, [[TMP10]]
229207e5cccSFangrui Song // CHECK-NEXT:    br i1 [[TMP11]], label [[RESOLVER_RETURN3:%.*]], label [[RESOLVER_ELSE4:%.*]]
230207e5cccSFangrui Song // CHECK:       resolver_return3:
231207e5cccSFangrui Song // CHECK-NEXT:    ret ptr @default_def_with_version_decls._Mlse
232207e5cccSFangrui Song // CHECK:       resolver_else4:
233207e5cccSFangrui Song // CHECK-NEXT:    ret ptr @default_def_with_version_decls.default
234207e5cccSFangrui Song //
235207e5cccSFangrui Song //
236207e5cccSFangrui Song // CHECK-NOFMV: Function Attrs: noinline nounwind optnone
237207e5cccSFangrui Song // CHECK-NOFMV-LABEL: define {{[^@]+}}@implicit_default
238207e5cccSFangrui Song // CHECK-NOFMV-SAME: () #[[ATTR0:[0-9]+]] {
239207e5cccSFangrui Song // CHECK-NOFMV-NEXT:  entry:
240207e5cccSFangrui Song // CHECK-NOFMV-NEXT:    ret i32 2
241207e5cccSFangrui Song //
242207e5cccSFangrui Song //
243207e5cccSFangrui Song // CHECK-NOFMV: Function Attrs: noinline nounwind optnone
244207e5cccSFangrui Song // CHECK-NOFMV-LABEL: define {{[^@]+}}@bar
245207e5cccSFangrui Song // CHECK-NOFMV-SAME: () #[[ATTR0]] {
246207e5cccSFangrui Song // CHECK-NOFMV-NEXT:  entry:
247207e5cccSFangrui Song // CHECK-NOFMV-NEXT:    [[CALL:%.*]] = call i32 @implicit_default()
248207e5cccSFangrui Song // CHECK-NOFMV-NEXT:    ret i32 [[CALL]]
249207e5cccSFangrui Song //
250207e5cccSFangrui Song //
251207e5cccSFangrui Song // CHECK-NOFMV: Function Attrs: noinline nounwind optnone
252207e5cccSFangrui Song // CHECK-NOFMV-LABEL: define {{[^@]+}}@default_def_with_version_decls
253207e5cccSFangrui Song // CHECK-NOFMV-SAME: () #[[ATTR0]] {
254207e5cccSFangrui Song // CHECK-NOFMV-NEXT:  entry:
255207e5cccSFangrui Song // CHECK-NOFMV-NEXT:    ret i32 0
256207e5cccSFangrui Song //
257207e5cccSFangrui Song //.
258207e5cccSFangrui Song // CHECK: [[META0:![0-9]+]] = !{i32 1, !"wchar_size", i32 4}
259207e5cccSFangrui Song // CHECK: [[META1:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"}
260207e5cccSFangrui Song //.
261207e5cccSFangrui Song // CHECK-NOFMV: [[META0:![0-9]+]] = !{i32 1, !"wchar_size", i32 4}
262207e5cccSFangrui Song // CHECK-NOFMV: [[META1:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"}
263207e5cccSFangrui Song //.
264