402 lines · c
1// REQUIRES: powerpc-registered-target2// RUN: %clang_cc1 -triple powerpc64-unknown-linux-gnu \3// RUN: -emit-llvm %s -o - -target-cpu pwr7 | FileCheck %s4// RUN: %clang_cc1 -triple powerpc64le-unknown-linux-gnu \5// RUN: -emit-llvm %s -o - -target-cpu pwr8 | FileCheck %s6// RUN: %clang_cc1 -triple powerpc64-unknown-aix \7// RUN: -emit-llvm %s -o - -target-cpu pwr7 | FileCheck %s8// RUN: %clang_cc1 -triple powerpc-unknown-aix \9// RUN: -emit-llvm %s -o - -target-cpu pwr7 | FileCheck %s --check-prefix=CHECK-3210 11extern unsigned long a;12extern const void *b;13extern void *c;14 15// CHECK-LABEL: @test_popcntb(16// CHECK: [[TMP0:%.*]] = load i64, ptr @a, align 817// CHECK-NEXT: [[POPCNTB:%.*]] = call i64 @llvm.ppc.popcntb.i64.i64(i64 [[TMP0]])18// CHECK-NEXT: ret i64 [[POPCNTB]]19//20// CHECK-32-LABEL: @test_popcntb(21// CHECK-32: [[TMP0:%.*]] = load i32, ptr @a, align 422// CHECK-32-NEXT: [[POPCNTB:%.*]] = call i32 @llvm.ppc.popcntb.i32.i32(i32 [[TMP0]])23// CHECK-32-NEXT: ret i32 [[POPCNTB]]24//25unsigned long test_popcntb() {26 return __popcntb(a);27}28 29// CHECK-LABEL: @test_eieio(30// CHECK: call void @llvm.ppc.eieio()31// CHECK-NEXT: ret void32//33// CHECK-32-LABEL: @test_eieio(34// CHECK-32: call void @llvm.ppc.eieio()35// CHECK-32-NEXT: ret void36//37void test_eieio() {38 __eieio();39}40 41// CHECK-LABEL: @test_iospace_eieio(42// CHECK: call void @llvm.ppc.iospace.eieio()43// CHECK-NEXT: ret void44//45// CHECK-32-LABEL: @test_iospace_eieio(46// CHECK-32: call void @llvm.ppc.iospace.eieio()47// CHECK-32-NEXT: ret void48//49void test_iospace_eieio() {50 __iospace_eieio();51}52 53// CHECK-LABEL: @test_isync(54// CHECK: call void @llvm.ppc.isync()55// CHECK-NEXT: ret void56//57// CHECK-32-LABEL: @test_isync(58// CHECK-32: call void @llvm.ppc.isync()59// CHECK-32-NEXT: ret void60//61void test_isync() {62 __isync();63}64 65// CHECK-LABEL: @test_lwsync(66// CHECK: call void @llvm.ppc.lwsync()67// CHECK-NEXT: ret void68//69// CHECK-32-LABEL: @test_lwsync(70// CHECK-32: call void @llvm.ppc.lwsync()71// CHECK-32-NEXT: ret void72//73void test_lwsync() {74 __lwsync();75}76 77// CHECK-LABEL: @test_iospace_lwsync(78// CHECK: call void @llvm.ppc.iospace.lwsync()79// CHECK-NEXT: ret void80//81// CHECK-32-LABEL: @test_iospace_lwsync(82// CHECK-32: call void @llvm.ppc.iospace.lwsync()83// CHECK-32-NEXT: ret void84//85void test_iospace_lwsync() {86 __iospace_lwsync();87}88 89// CHECK-LABEL: @test_sync(90// CHECK: call void @llvm.ppc.sync()91// CHECK-NEXT: ret void92//93// CHECK-32-LABEL: @test_sync(94// CHECK-32: call void @llvm.ppc.sync()95// CHECK-32-NEXT: ret void96//97void test_sync() {98 __sync();99}100 101// CHECK-LABEL: @test_iospace_sync(102// CHECK: call void @llvm.ppc.iospace.sync()103// CHECK-NEXT: ret void104//105// CHECK-32-LABEL: @test_iospace_sync(106// CHECK-32: call void @llvm.ppc.iospace.sync()107// CHECK-32-NEXT: ret void108//109void test_iospace_sync() {110 __iospace_sync();111}112 113// CHECK-LABEL: @test_dcbfl(114// CHECK: [[TMP0:%.*]] = load ptr, ptr @b, align 8115// CHECK-NEXT: call void @llvm.ppc.dcbfl(ptr [[TMP0]])116// CHECK-NEXT: ret void117//118// CHECK-32-LABEL: @test_dcbfl(119// CHECK-32: [[TMP0:%.*]] = load ptr, ptr @b, align 4120// CHECK-32-NEXT: call void @llvm.ppc.dcbfl(ptr [[TMP0]])121// CHECK-32-NEXT: ret void122//123void test_dcbfl() {124 __dcbfl(b);125}126 127// CHECK-LABEL: @test_dcbflp(128// CHECK: [[TMP0:%.*]] = load ptr, ptr @b, align 8129// CHECK-NEXT: call void @llvm.ppc.dcbflp(ptr [[TMP0]])130// CHECK-NEXT: ret void131//132// CHECK-32-LABEL: @test_dcbflp(133// CHECK-32: [[TMP0:%.*]] = load ptr, ptr @b, align 4134// CHECK-32-NEXT: call void @llvm.ppc.dcbflp(ptr [[TMP0]])135// CHECK-32-NEXT: ret void136//137void test_dcbflp() {138 __dcbflp(b);139}140 141// CHECK-LABEL: @test_dcbst(142// CHECK: [[TMP0:%.*]] = load ptr, ptr @b, align 8143// CHECK-NEXT: call void @llvm.ppc.dcbst(ptr [[TMP0]])144// CHECK-NEXT: ret void145//146// CHECK-32-LABEL: @test_dcbst(147// CHECK-32: [[TMP0:%.*]] = load ptr, ptr @b, align 4148// CHECK-32-NEXT: call void @llvm.ppc.dcbst(ptr [[TMP0]])149// CHECK-32-NEXT: ret void150//151void test_dcbst() {152 __dcbst(b);153}154 155// CHECK-LABEL: @test_dcbt(156// CHECK: [[TMP0:%.*]] = load ptr, ptr @c, align 8157// CHECK-NEXT: call void @llvm.ppc.dcbt(ptr [[TMP0]])158// CHECK-NEXT: ret void159//160// CHECK-32-LABEL: @test_dcbt(161// CHECK-32: [[TMP0:%.*]] = load ptr, ptr @c, align 4162// CHECK-32-NEXT: call void @llvm.ppc.dcbt(ptr [[TMP0]])163// CHECK-32-NEXT: ret void164//165void test_dcbt() {166 __dcbt(c);167}168 169// CHECK-LABEL: @test_dcbtst(170// CHECK: [[TMP0:%.*]] = load ptr, ptr @c, align 8171// CHECK-NEXT: call void @llvm.ppc.dcbtst(ptr [[TMP0]])172// CHECK-NEXT: ret void173//174// CHECK-32-LABEL: @test_dcbtst(175// CHECK-32: [[TMP0:%.*]] = load ptr, ptr @c, align 4176// CHECK-32-NEXT: call void @llvm.ppc.dcbtst(ptr [[TMP0]])177// CHECK-32-NEXT: ret void178//179void test_dcbtst() {180 __dcbtst(c);181}182 183// CHECK-LABEL: @test_dcbz(184// CHECK: [[TMP0:%.*]] = load ptr, ptr @c, align 8185// CHECK-NEXT: call void @llvm.ppc.dcbz(ptr [[TMP0]])186// CHECK-NEXT: ret void187//188// CHECK-32-LABEL: @test_dcbz(189// CHECK-32: [[TMP0:%.*]] = load ptr, ptr @c, align 4190// CHECK-32-NEXT: call void @llvm.ppc.dcbz(ptr [[TMP0]])191// CHECK-32-NEXT: ret void192//193void test_dcbz() {194 __dcbz(c);195}196 197// CHECK-LABEL: @test_fence(198// CHECK: call void @llvm.ppc.fence()199// CHECK-NEXT: ret void200//201// CHECK-32-LABEL: @test_fence(202// CHECK-32: call void @llvm.ppc.fence()203// CHECK-32-NEXT: ret void204//205void test_fence() {206 __fence();207}208 209// CHECK-LABEL: @test_builtin_ppc_popcntb(210// CHECK: [[TMP0:%.*]] = load i64, ptr @a, align 8211// CHECK-NEXT: [[POPCNTB:%.*]] = call i64 @llvm.ppc.popcntb.i64.i64(i64 [[TMP0]])212// CHECK-NEXT: ret i64 [[POPCNTB]]213//214// CHECK-32-LABEL: @test_builtin_ppc_popcntb(215// CHECK-32: [[TMP0:%.*]] = load i32, ptr @a, align 4216// CHECK-32-NEXT: [[POPCNTB:%.*]] = call i32 @llvm.ppc.popcntb.i32.i32(i32 [[TMP0]])217// CHECK-32-NEXT: ret i32 [[POPCNTB]]218//219unsigned long test_builtin_ppc_popcntb() {220 return __builtin_ppc_popcntb(a);221}222 223// CHECK-LABEL: @test_builtin_ppc_eieio(224// CHECK: call void @llvm.ppc.eieio()225// CHECK-NEXT: ret void226//227// CHECK-32-LABEL: @test_builtin_ppc_eieio(228// CHECK-32: call void @llvm.ppc.eieio()229// CHECK-32-NEXT: ret void230//231void test_builtin_ppc_eieio() {232 __builtin_ppc_eieio();233}234 235// CHECK-LABEL: @test_builtin_ppc_iospace_eieio(236// CHECK: call void @llvm.ppc.iospace.eieio()237// CHECK-NEXT: ret void238//239// CHECK-32-LABEL: @test_builtin_ppc_iospace_eieio(240// CHECK-32: call void @llvm.ppc.iospace.eieio()241// CHECK-32-NEXT: ret void242//243void test_builtin_ppc_iospace_eieio() {244 __builtin_ppc_iospace_eieio();245}246 247// CHECK-LABEL: @test_builtin_ppc_isync(248// CHECK: call void @llvm.ppc.isync()249// CHECK-NEXT: ret void250//251// CHECK-32-LABEL: @test_builtin_ppc_isync(252// CHECK-32: call void @llvm.ppc.isync()253// CHECK-32-NEXT: ret void254//255void test_builtin_ppc_isync() {256 __builtin_ppc_isync();257}258 259// CHECK-LABEL: @test_builtin_ppc_lwsync(260// CHECK: call void @llvm.ppc.lwsync()261// CHECK-NEXT: ret void262//263// CHECK-32-LABEL: @test_builtin_ppc_lwsync(264// CHECK-32: call void @llvm.ppc.lwsync()265// CHECK-32-NEXT: ret void266//267void test_builtin_ppc_lwsync() {268 __builtin_ppc_lwsync();269}270 271// CHECK-LABEL: @test_builtin_ppc_iospace_lwsync(272// CHECK: call void @llvm.ppc.iospace.lwsync()273// CHECK-NEXT: ret void274//275// CHECK-32-LABEL: @test_builtin_ppc_iospace_lwsync(276// CHECK-32: call void @llvm.ppc.iospace.lwsync()277// CHECK-32-NEXT: ret void278//279void test_builtin_ppc_iospace_lwsync() {280 __builtin_ppc_iospace_lwsync();281}282 283// CHECK-LABEL: @test_builtin_ppc_sync(284// CHECK: call void @llvm.ppc.sync()285// CHECK-NEXT: ret void286//287// CHECK-32-LABEL: @test_builtin_ppc_sync(288// CHECK-32: call void @llvm.ppc.sync()289// CHECK-32-NEXT: ret void290//291void test_builtin_ppc_sync() {292 __builtin_ppc_sync();293}294 295// CHECK-LABEL: @test_builtin_ppc_iospace_sync(296// CHECK: call void @llvm.ppc.iospace.sync()297// CHECK-NEXT: ret void298//299// CHECK-32-LABEL: @test_builtin_ppc_iospace_sync(300// CHECK-32: call void @llvm.ppc.iospace.sync()301// CHECK-32-NEXT: ret void302//303void test_builtin_ppc_iospace_sync() {304 __builtin_ppc_iospace_sync();305}306 307// CHECK-LABEL: @test_builtin_ppc_dcbfl(308// CHECK: [[TMP0:%.*]] = load ptr, ptr @b, align 8309// CHECK-NEXT: call void @llvm.ppc.dcbfl(ptr [[TMP0]])310// CHECK-NEXT: ret void311//312// CHECK-32-LABEL: @test_builtin_ppc_dcbfl(313// CHECK-32: [[TMP0:%.*]] = load ptr, ptr @b, align 4314// CHECK-32-NEXT: call void @llvm.ppc.dcbfl(ptr [[TMP0]])315// CHECK-32-NEXT: ret void316//317void test_builtin_ppc_dcbfl() {318 __builtin_ppc_dcbfl(b);319}320 321// CHECK-LABEL: @test_builtin_ppc_dcbflp(322// CHECK: [[TMP0:%.*]] = load ptr, ptr @b, align 8323// CHECK-NEXT: call void @llvm.ppc.dcbflp(ptr [[TMP0]])324// CHECK-NEXT: ret void325//326// CHECK-32-LABEL: @test_builtin_ppc_dcbflp(327// CHECK-32: [[TMP0:%.*]] = load ptr, ptr @b, align 4328// CHECK-32-NEXT: call void @llvm.ppc.dcbflp(ptr [[TMP0]])329// CHECK-32-NEXT: ret void330//331void test_builtin_ppc_dcbflp() {332 __builtin_ppc_dcbflp(b);333}334 335// CHECK-LABEL: @test_builtin_ppc_dcbst(336// CHECK: [[TMP0:%.*]] = load ptr, ptr @b, align 8337// CHECK-NEXT: call void @llvm.ppc.dcbst(ptr [[TMP0]])338// CHECK-NEXT: ret void339//340// CHECK-32-LABEL: @test_builtin_ppc_dcbst(341// CHECK-32: [[TMP0:%.*]] = load ptr, ptr @b, align 4342// CHECK-32-NEXT: call void @llvm.ppc.dcbst(ptr [[TMP0]])343// CHECK-32-NEXT: ret void344//345void test_builtin_ppc_dcbst() {346 __builtin_ppc_dcbst(b);347}348 349// CHECK-LABEL: @test_builtin_ppc_dcbt(350// CHECK: [[TMP0:%.*]] = load ptr, ptr @c, align 8351// CHECK-NEXT: call void @llvm.ppc.dcbt(ptr [[TMP0]])352// CHECK-NEXT: ret void353//354// CHECK-32-LABEL: @test_builtin_ppc_dcbt(355// CHECK-32: [[TMP0:%.*]] = load ptr, ptr @c, align 4356// CHECK-32-NEXT: call void @llvm.ppc.dcbt(ptr [[TMP0]])357// CHECK-32-NEXT: ret void358//359void test_builtin_ppc_dcbt() {360 __builtin_ppc_dcbt(c);361}362 363// CHECK-LABEL: @test_builtin_ppc_dcbtst(364// CHECK: [[TMP0:%.*]] = load ptr, ptr @c, align 8365// CHECK-NEXT: call void @llvm.ppc.dcbtst(ptr [[TMP0]])366// CHECK-NEXT: ret void367//368// CHECK-32-LABEL: @test_builtin_ppc_dcbtst(369// CHECK-32: [[TMP0:%.*]] = load ptr, ptr @c, align 4370// CHECK-32-NEXT: call void @llvm.ppc.dcbtst(ptr [[TMP0]])371// CHECK-32-NEXT: ret void372//373void test_builtin_ppc_dcbtst() {374 __builtin_ppc_dcbtst(c);375}376 377// CHECK-LABEL: @test_builtin_ppc_dcbz(378// CHECK: [[TMP0:%.*]] = load ptr, ptr @c, align 8379// CHECK-NEXT: call void @llvm.ppc.dcbz(ptr [[TMP0]])380// CHECK-NEXT: ret void381//382// CHECK-32-LABEL: @test_builtin_ppc_dcbz(383// CHECK-32: [[TMP0:%.*]] = load ptr, ptr @c, align 4384// CHECK-32-NEXT: call void @llvm.ppc.dcbz(ptr [[TMP0]])385// CHECK-32-NEXT: ret void386//387void test_builtin_ppc_dcbz() {388 __builtin_ppc_dcbz(c);389}390 391// CHECK-LABEL: @test_builtin_ppc_fence(392// CHECK: call void @llvm.ppc.fence()393// CHECK-NEXT: ret void394//395// CHECK-32-LABEL: @test_builtin_ppc_fence(396// CHECK-32: call void @llvm.ppc.fence()397// CHECK-32-NEXT: ret void398//399void test_builtin_ppc_fence() {400 __builtin_ppc_fence();401}402