1 // REQUIRES: powerpc-registered-target
2 // RUN: %clang_cc1 -triple powerpc64-unknown-linux-gnu \
3 // RUN: -emit-llvm %s -o - -target-cpu pwr7 | FileCheck %s
4 // RUN: %clang_cc1 -triple powerpc64le-unknown-linux-gnu \
5 // RUN: -emit-llvm %s -o - -target-cpu pwr8 | FileCheck %s
6 // RUN: %clang_cc1 -triple powerpc64-unknown-aix \
7 // RUN: -emit-llvm %s -o - -target-cpu pwr7 | FileCheck %s
8 // RUN: %clang_cc1 -triple powerpc-unknown-aix \
9 // RUN: -emit-llvm %s -o - -target-cpu pwr7 | FileCheck %s --check-prefix=CHECK-32
11 extern unsigned long a
;
15 // CHECK-LABEL: @test_popcntb(
16 // CHECK: [[TMP0:%.*]] = load i64, ptr @a, align 8
17 // CHECK-NEXT: [[POPCNTB:%.*]] = call i64 @llvm.ppc.popcntb.i64.i64(i64 [[TMP0]])
18 // CHECK-NEXT: ret i64 [[POPCNTB]]
20 // CHECK-32-LABEL: @test_popcntb(
21 // CHECK-32: [[TMP0:%.*]] = load i32, ptr @a, align 4
22 // CHECK-32-NEXT: [[POPCNTB:%.*]] = call i32 @llvm.ppc.popcntb.i32.i32(i32 [[TMP0]])
23 // CHECK-32-NEXT: ret i32 [[POPCNTB]]
25 unsigned long test_popcntb() {
29 // CHECK-LABEL: @test_eieio(
30 // CHECK: call void @llvm.ppc.eieio()
31 // CHECK-NEXT: ret void
33 // CHECK-32-LABEL: @test_eieio(
34 // CHECK-32: call void @llvm.ppc.eieio()
35 // CHECK-32-NEXT: ret void
41 // CHECK-LABEL: @test_iospace_eieio(
42 // CHECK: call void @llvm.ppc.iospace.eieio()
43 // CHECK-NEXT: ret void
45 // CHECK-32-LABEL: @test_iospace_eieio(
46 // CHECK-32: call void @llvm.ppc.iospace.eieio()
47 // CHECK-32-NEXT: ret void
49 void test_iospace_eieio() {
53 // CHECK-LABEL: @test_isync(
54 // CHECK: call void @llvm.ppc.isync()
55 // CHECK-NEXT: ret void
57 // CHECK-32-LABEL: @test_isync(
58 // CHECK-32: call void @llvm.ppc.isync()
59 // CHECK-32-NEXT: ret void
65 // CHECK-LABEL: @test_lwsync(
66 // CHECK: call void @llvm.ppc.lwsync()
67 // CHECK-NEXT: ret void
69 // CHECK-32-LABEL: @test_lwsync(
70 // CHECK-32: call void @llvm.ppc.lwsync()
71 // CHECK-32-NEXT: ret void
77 // CHECK-LABEL: @test_iospace_lwsync(
78 // CHECK: call void @llvm.ppc.iospace.lwsync()
79 // CHECK-NEXT: ret void
81 // CHECK-32-LABEL: @test_iospace_lwsync(
82 // CHECK-32: call void @llvm.ppc.iospace.lwsync()
83 // CHECK-32-NEXT: ret void
85 void test_iospace_lwsync() {
89 // CHECK-LABEL: @test_sync(
90 // CHECK: call void @llvm.ppc.sync()
91 // CHECK-NEXT: ret void
93 // CHECK-32-LABEL: @test_sync(
94 // CHECK-32: call void @llvm.ppc.sync()
95 // CHECK-32-NEXT: ret void
101 // CHECK-LABEL: @test_iospace_sync(
102 // CHECK: call void @llvm.ppc.iospace.sync()
103 // CHECK-NEXT: ret void
105 // CHECK-32-LABEL: @test_iospace_sync(
106 // CHECK-32: call void @llvm.ppc.iospace.sync()
107 // CHECK-32-NEXT: ret void
109 void test_iospace_sync() {
113 // CHECK-LABEL: @test_dcbfl(
114 // CHECK: [[TMP0:%.*]] = load ptr, ptr @b, align 8
115 // CHECK-NEXT: call void @llvm.ppc.dcbfl(ptr [[TMP0]])
116 // CHECK-NEXT: ret void
118 // CHECK-32-LABEL: @test_dcbfl(
119 // CHECK-32: [[TMP0:%.*]] = load ptr, ptr @b, align 4
120 // CHECK-32-NEXT: call void @llvm.ppc.dcbfl(ptr [[TMP0]])
121 // CHECK-32-NEXT: ret void
127 // CHECK-LABEL: @test_dcbflp(
128 // CHECK: [[TMP0:%.*]] = load ptr, ptr @b, align 8
129 // CHECK-NEXT: call void @llvm.ppc.dcbflp(ptr [[TMP0]])
130 // CHECK-NEXT: ret void
132 // CHECK-32-LABEL: @test_dcbflp(
133 // CHECK-32: [[TMP0:%.*]] = load ptr, ptr @b, align 4
134 // CHECK-32-NEXT: call void @llvm.ppc.dcbflp(ptr [[TMP0]])
135 // CHECK-32-NEXT: ret void
141 // CHECK-LABEL: @test_dcbst(
142 // CHECK: [[TMP0:%.*]] = load ptr, ptr @b, align 8
143 // CHECK-NEXT: call void @llvm.ppc.dcbst(ptr [[TMP0]])
144 // CHECK-NEXT: ret void
146 // CHECK-32-LABEL: @test_dcbst(
147 // CHECK-32: [[TMP0:%.*]] = load ptr, ptr @b, align 4
148 // CHECK-32-NEXT: call void @llvm.ppc.dcbst(ptr [[TMP0]])
149 // CHECK-32-NEXT: ret void
155 // CHECK-LABEL: @test_dcbt(
156 // CHECK: [[TMP0:%.*]] = load ptr, ptr @c, align 8
157 // CHECK-NEXT: call void @llvm.ppc.dcbt(ptr [[TMP0]])
158 // CHECK-NEXT: ret void
160 // CHECK-32-LABEL: @test_dcbt(
161 // CHECK-32: [[TMP0:%.*]] = load ptr, ptr @c, align 4
162 // CHECK-32-NEXT: call void @llvm.ppc.dcbt(ptr [[TMP0]])
163 // CHECK-32-NEXT: ret void
169 // CHECK-LABEL: @test_dcbtst(
170 // CHECK: [[TMP0:%.*]] = load ptr, ptr @c, align 8
171 // CHECK-NEXT: call void @llvm.ppc.dcbtst(ptr [[TMP0]])
172 // CHECK-NEXT: ret void
174 // CHECK-32-LABEL: @test_dcbtst(
175 // CHECK-32: [[TMP0:%.*]] = load ptr, ptr @c, align 4
176 // CHECK-32-NEXT: call void @llvm.ppc.dcbtst(ptr [[TMP0]])
177 // CHECK-32-NEXT: ret void
183 // CHECK-LABEL: @test_dcbz(
184 // CHECK: [[TMP0:%.*]] = load ptr, ptr @c, align 8
185 // CHECK-NEXT: call void @llvm.ppc.dcbz(ptr [[TMP0]])
186 // CHECK-NEXT: ret void
188 // CHECK-32-LABEL: @test_dcbz(
189 // CHECK-32: [[TMP0:%.*]] = load ptr, ptr @c, align 4
190 // CHECK-32-NEXT: call void @llvm.ppc.dcbz(ptr [[TMP0]])
191 // CHECK-32-NEXT: ret void
197 // CHECK-LABEL: @test_builtin_ppc_popcntb(
198 // CHECK: [[TMP0:%.*]] = load i64, ptr @a, align 8
199 // CHECK-NEXT: [[POPCNTB:%.*]] = call i64 @llvm.ppc.popcntb.i64.i64(i64 [[TMP0]])
200 // CHECK-NEXT: ret i64 [[POPCNTB]]
202 // CHECK-32-LABEL: @test_builtin_ppc_popcntb(
203 // CHECK-32: [[TMP0:%.*]] = load i32, ptr @a, align 4
204 // CHECK-32-NEXT: [[POPCNTB:%.*]] = call i32 @llvm.ppc.popcntb.i32.i32(i32 [[TMP0]])
205 // CHECK-32-NEXT: ret i32 [[POPCNTB]]
207 unsigned long test_builtin_ppc_popcntb() {
208 return __builtin_ppc_popcntb(a
);
211 // CHECK-LABEL: @test_builtin_ppc_eieio(
212 // CHECK: call void @llvm.ppc.eieio()
213 // CHECK-NEXT: ret void
215 // CHECK-32-LABEL: @test_builtin_ppc_eieio(
216 // CHECK-32: call void @llvm.ppc.eieio()
217 // CHECK-32-NEXT: ret void
219 void test_builtin_ppc_eieio() {
220 __builtin_ppc_eieio();
223 // CHECK-LABEL: @test_builtin_ppc_iospace_eieio(
224 // CHECK: call void @llvm.ppc.iospace.eieio()
225 // CHECK-NEXT: ret void
227 // CHECK-32-LABEL: @test_builtin_ppc_iospace_eieio(
228 // CHECK-32: call void @llvm.ppc.iospace.eieio()
229 // CHECK-32-NEXT: ret void
231 void test_builtin_ppc_iospace_eieio() {
232 __builtin_ppc_iospace_eieio();
235 // CHECK-LABEL: @test_builtin_ppc_isync(
236 // CHECK: call void @llvm.ppc.isync()
237 // CHECK-NEXT: ret void
239 // CHECK-32-LABEL: @test_builtin_ppc_isync(
240 // CHECK-32: call void @llvm.ppc.isync()
241 // CHECK-32-NEXT: ret void
243 void test_builtin_ppc_isync() {
244 __builtin_ppc_isync();
247 // CHECK-LABEL: @test_builtin_ppc_lwsync(
248 // CHECK: call void @llvm.ppc.lwsync()
249 // CHECK-NEXT: ret void
251 // CHECK-32-LABEL: @test_builtin_ppc_lwsync(
252 // CHECK-32: call void @llvm.ppc.lwsync()
253 // CHECK-32-NEXT: ret void
255 void test_builtin_ppc_lwsync() {
256 __builtin_ppc_lwsync();
259 // CHECK-LABEL: @test_builtin_ppc_iospace_lwsync(
260 // CHECK: call void @llvm.ppc.iospace.lwsync()
261 // CHECK-NEXT: ret void
263 // CHECK-32-LABEL: @test_builtin_ppc_iospace_lwsync(
264 // CHECK-32: call void @llvm.ppc.iospace.lwsync()
265 // CHECK-32-NEXT: ret void
267 void test_builtin_ppc_iospace_lwsync() {
268 __builtin_ppc_iospace_lwsync();
271 // CHECK-LABEL: @test_builtin_ppc_sync(
272 // CHECK: call void @llvm.ppc.sync()
273 // CHECK-NEXT: ret void
275 // CHECK-32-LABEL: @test_builtin_ppc_sync(
276 // CHECK-32: call void @llvm.ppc.sync()
277 // CHECK-32-NEXT: ret void
279 void test_builtin_ppc_sync() {
280 __builtin_ppc_sync();
283 // CHECK-LABEL: @test_builtin_ppc_iospace_sync(
284 // CHECK: call void @llvm.ppc.iospace.sync()
285 // CHECK-NEXT: ret void
287 // CHECK-32-LABEL: @test_builtin_ppc_iospace_sync(
288 // CHECK-32: call void @llvm.ppc.iospace.sync()
289 // CHECK-32-NEXT: ret void
291 void test_builtin_ppc_iospace_sync() {
292 __builtin_ppc_iospace_sync();
295 // CHECK-LABEL: @test_builtin_ppc_dcbfl(
296 // CHECK: [[TMP0:%.*]] = load ptr, ptr @b, align 8
297 // CHECK-NEXT: call void @llvm.ppc.dcbfl(ptr [[TMP0]])
298 // CHECK-NEXT: ret void
300 // CHECK-32-LABEL: @test_builtin_ppc_dcbfl(
301 // CHECK-32: [[TMP0:%.*]] = load ptr, ptr @b, align 4
302 // CHECK-32-NEXT: call void @llvm.ppc.dcbfl(ptr [[TMP0]])
303 // CHECK-32-NEXT: ret void
305 void test_builtin_ppc_dcbfl() {
306 __builtin_ppc_dcbfl(b
);
309 // CHECK-LABEL: @test_builtin_ppc_dcbflp(
310 // CHECK: [[TMP0:%.*]] = load ptr, ptr @b, align 8
311 // CHECK-NEXT: call void @llvm.ppc.dcbflp(ptr [[TMP0]])
312 // CHECK-NEXT: ret void
314 // CHECK-32-LABEL: @test_builtin_ppc_dcbflp(
315 // CHECK-32: [[TMP0:%.*]] = load ptr, ptr @b, align 4
316 // CHECK-32-NEXT: call void @llvm.ppc.dcbflp(ptr [[TMP0]])
317 // CHECK-32-NEXT: ret void
319 void test_builtin_ppc_dcbflp() {
320 __builtin_ppc_dcbflp(b
);
323 // CHECK-LABEL: @test_builtin_ppc_dcbst(
324 // CHECK: [[TMP0:%.*]] = load ptr, ptr @b, align 8
325 // CHECK-NEXT: call void @llvm.ppc.dcbst(ptr [[TMP0]])
326 // CHECK-NEXT: ret void
328 // CHECK-32-LABEL: @test_builtin_ppc_dcbst(
329 // CHECK-32: [[TMP0:%.*]] = load ptr, ptr @b, align 4
330 // CHECK-32-NEXT: call void @llvm.ppc.dcbst(ptr [[TMP0]])
331 // CHECK-32-NEXT: ret void
333 void test_builtin_ppc_dcbst() {
334 __builtin_ppc_dcbst(b
);
337 // CHECK-LABEL: @test_builtin_ppc_dcbt(
338 // CHECK: [[TMP0:%.*]] = load ptr, ptr @c, align 8
339 // CHECK-NEXT: call void @llvm.ppc.dcbt(ptr [[TMP0]])
340 // CHECK-NEXT: ret void
342 // CHECK-32-LABEL: @test_builtin_ppc_dcbt(
343 // CHECK-32: [[TMP0:%.*]] = load ptr, ptr @c, align 4
344 // CHECK-32-NEXT: call void @llvm.ppc.dcbt(ptr [[TMP0]])
345 // CHECK-32-NEXT: ret void
347 void test_builtin_ppc_dcbt() {
348 __builtin_ppc_dcbt(c
);
351 // CHECK-LABEL: @test_builtin_ppc_dcbtst(
352 // CHECK: [[TMP0:%.*]] = load ptr, ptr @c, align 8
353 // CHECK-NEXT: call void @llvm.ppc.dcbtst(ptr [[TMP0]])
354 // CHECK-NEXT: ret void
356 // CHECK-32-LABEL: @test_builtin_ppc_dcbtst(
357 // CHECK-32: [[TMP0:%.*]] = load ptr, ptr @c, align 4
358 // CHECK-32-NEXT: call void @llvm.ppc.dcbtst(ptr [[TMP0]])
359 // CHECK-32-NEXT: ret void
361 void test_builtin_ppc_dcbtst() {
362 __builtin_ppc_dcbtst(c
);
365 // CHECK-LABEL: @test_builtin_ppc_dcbz(
366 // CHECK: [[TMP0:%.*]] = load ptr, ptr @c, align 8
367 // CHECK-NEXT: call void @llvm.ppc.dcbz(ptr [[TMP0]])
368 // CHECK-NEXT: ret void
370 // CHECK-32-LABEL: @test_builtin_ppc_dcbz(
371 // CHECK-32: [[TMP0:%.*]] = load ptr, ptr @c, align 4
372 // CHECK-32-NEXT: call void @llvm.ppc.dcbz(ptr [[TMP0]])
373 // CHECK-32-NEXT: ret void
375 void test_builtin_ppc_dcbz() {
376 __builtin_ppc_dcbz(c
);