forked from OSchip/llvm-project
382 lines
11 KiB
C
382 lines
11 KiB
C
// REQUIRES: powerpc-registered-target
|
|
// RUN: %clang_cc1 -triple powerpc64-unknown-linux-gnu \
|
|
// RUN: -emit-llvm %s -o - -target-cpu pwr7 | FileCheck %s
|
|
// RUN: %clang_cc1 -triple powerpc64le-unknown-linux-gnu \
|
|
// RUN: -emit-llvm %s -o - -target-cpu pwr8 | FileCheck %s
|
|
// RUN: %clang_cc1 -triple powerpc64-unknown-aix \
|
|
// RUN: -emit-llvm %s -o - -target-cpu pwr7 | FileCheck %s
|
|
// RUN: %clang_cc1 -triple powerpc-unknown-aix \
|
|
// RUN: -emit-llvm %s -o - -target-cpu pwr7 | FileCheck %s --check-prefix=CHECK-32
|
|
|
|
extern unsigned long a;
|
|
extern const void *b;
|
|
extern void *c;
|
|
|
|
// CHECK-LABEL: @test_popcntb(
|
|
// CHECK: [[TMP0:%.*]] = load i64, i64* @a, align 8
|
|
// CHECK-NEXT: [[TMP1:%.*]] = load i64, i64* @a, align 8
|
|
// CHECK-NEXT: [[POPCNTB:%.*]] = call i64 @llvm.ppc.popcntb.i64.i64(i64 [[TMP0]])
|
|
// CHECK-NEXT: ret i64 [[POPCNTB]]
|
|
//
|
|
// CHECK-32-LABEL: @test_popcntb(
|
|
// CHECK-32: [[TMP0:%.*]] = load i32, i32* @a, align 4
|
|
// CHECK-32-NEXT: [[TMP1:%.*]] = load i32, i32* @a, align 4
|
|
// CHECK-32-NEXT: [[POPCNTB:%.*]] = call i32 @llvm.ppc.popcntb.i32.i32(i32 [[TMP0]])
|
|
// CHECK-32-NEXT: ret i32 [[POPCNTB]]
|
|
//
|
|
unsigned long test_popcntb() {
|
|
return __popcntb(a);
|
|
}
|
|
|
|
// CHECK-LABEL: @test_eieio(
|
|
// CHECK: call void @llvm.ppc.eieio()
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_eieio(
|
|
// CHECK-32: call void @llvm.ppc.eieio()
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_eieio() {
|
|
__eieio();
|
|
}
|
|
|
|
// CHECK-LABEL: @test_iospace_eieio(
|
|
// CHECK: call void @llvm.ppc.iospace.eieio()
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_iospace_eieio(
|
|
// CHECK-32: call void @llvm.ppc.iospace.eieio()
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_iospace_eieio() {
|
|
__iospace_eieio();
|
|
}
|
|
|
|
// CHECK-LABEL: @test_isync(
|
|
// CHECK: call void @llvm.ppc.isync()
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_isync(
|
|
// CHECK-32: call void @llvm.ppc.isync()
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_isync() {
|
|
__isync();
|
|
}
|
|
|
|
// CHECK-LABEL: @test_lwsync(
|
|
// CHECK: call void @llvm.ppc.lwsync()
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_lwsync(
|
|
// CHECK-32: call void @llvm.ppc.lwsync()
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_lwsync() {
|
|
__lwsync();
|
|
}
|
|
|
|
// CHECK-LABEL: @test_iospace_lwsync(
|
|
// CHECK: call void @llvm.ppc.iospace.lwsync()
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_iospace_lwsync(
|
|
// CHECK-32: call void @llvm.ppc.iospace.lwsync()
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_iospace_lwsync() {
|
|
__iospace_lwsync();
|
|
}
|
|
|
|
// CHECK-LABEL: @test_sync(
|
|
// CHECK: call void @llvm.ppc.sync()
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_sync(
|
|
// CHECK-32: call void @llvm.ppc.sync()
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_sync() {
|
|
__sync();
|
|
}
|
|
|
|
// CHECK-LABEL: @test_iospace_sync(
|
|
// CHECK: call void @llvm.ppc.iospace.sync()
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_iospace_sync(
|
|
// CHECK-32: call void @llvm.ppc.iospace.sync()
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_iospace_sync() {
|
|
__iospace_sync();
|
|
}
|
|
|
|
// CHECK-LABEL: @test_dcbfl(
|
|
// CHECK: [[TMP0:%.*]] = load i8*, i8** @b, align 8
|
|
// CHECK-NEXT: call void @llvm.ppc.dcbfl(i8* [[TMP0]])
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_dcbfl(
|
|
// CHECK-32: [[TMP0:%.*]] = load i8*, i8** @b, align 4
|
|
// CHECK-32-NEXT: call void @llvm.ppc.dcbfl(i8* [[TMP0]])
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_dcbfl() {
|
|
__dcbfl(b);
|
|
}
|
|
|
|
// CHECK-LABEL: @test_dcbflp(
|
|
// CHECK: [[TMP0:%.*]] = load i8*, i8** @b, align 8
|
|
// CHECK-NEXT: call void @llvm.ppc.dcbflp(i8* [[TMP0]])
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_dcbflp(
|
|
// CHECK-32: [[TMP0:%.*]] = load i8*, i8** @b, align 4
|
|
// CHECK-32-NEXT: call void @llvm.ppc.dcbflp(i8* [[TMP0]])
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_dcbflp() {
|
|
__dcbflp(b);
|
|
}
|
|
|
|
// CHECK-LABEL: @test_dcbst(
|
|
// CHECK: [[TMP0:%.*]] = load i8*, i8** @b, align 8
|
|
// CHECK-NEXT: call void @llvm.ppc.dcbst(i8* [[TMP0]])
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_dcbst(
|
|
// CHECK-32: [[TMP0:%.*]] = load i8*, i8** @b, align 4
|
|
// CHECK-32-NEXT: call void @llvm.ppc.dcbst(i8* [[TMP0]])
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_dcbst() {
|
|
__dcbst(b);
|
|
}
|
|
|
|
// CHECK-LABEL: @test_dcbt(
|
|
// CHECK: [[TMP0:%.*]] = load i8*, i8** @c, align 8
|
|
// CHECK-NEXT: call void @llvm.ppc.dcbt(i8* [[TMP0]])
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_dcbt(
|
|
// CHECK-32: [[TMP0:%.*]] = load i8*, i8** @c, align 4
|
|
// CHECK-32-NEXT: call void @llvm.ppc.dcbt(i8* [[TMP0]])
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_dcbt() {
|
|
__dcbt(c);
|
|
}
|
|
|
|
// CHECK-LABEL: @test_dcbtst(
|
|
// CHECK: [[TMP0:%.*]] = load i8*, i8** @c, align 8
|
|
// CHECK-NEXT: call void @llvm.ppc.dcbtst(i8* [[TMP0]])
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_dcbtst(
|
|
// CHECK-32: [[TMP0:%.*]] = load i8*, i8** @c, align 4
|
|
// CHECK-32-NEXT: call void @llvm.ppc.dcbtst(i8* [[TMP0]])
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_dcbtst() {
|
|
__dcbtst(c);
|
|
}
|
|
|
|
// CHECK-LABEL: @test_dcbz(
|
|
// CHECK: [[TMP0:%.*]] = load i8*, i8** @c, align 8
|
|
// CHECK-NEXT: call void @llvm.ppc.dcbz(i8* [[TMP0]])
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_dcbz(
|
|
// CHECK-32: [[TMP0:%.*]] = load i8*, i8** @c, align 4
|
|
// CHECK-32-NEXT: call void @llvm.ppc.dcbz(i8* [[TMP0]])
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_dcbz() {
|
|
__dcbz(c);
|
|
}
|
|
|
|
// CHECK-LABEL: @test_builtin_ppc_popcntb(
|
|
// CHECK: [[TMP0:%.*]] = load i64, i64* @a, align 8
|
|
// CHECK-NEXT: [[TMP1:%.*]] = load i64, i64* @a, align 8
|
|
// CHECK-NEXT: [[POPCNTB:%.*]] = call i64 @llvm.ppc.popcntb.i64.i64(i64 [[TMP0]])
|
|
// CHECK-NEXT: ret i64 [[POPCNTB]]
|
|
//
|
|
// CHECK-32-LABEL: @test_builtin_ppc_popcntb(
|
|
// CHECK-32: [[TMP0:%.*]] = load i32, i32* @a, align 4
|
|
// CHECK-32-NEXT: [[TMP1:%.*]] = load i32, i32* @a, align 4
|
|
// CHECK-32-NEXT: [[POPCNTB:%.*]] = call i32 @llvm.ppc.popcntb.i32.i32(i32 [[TMP0]])
|
|
// CHECK-32-NEXT: ret i32 [[POPCNTB]]
|
|
//
|
|
unsigned long test_builtin_ppc_popcntb() {
|
|
return __builtin_ppc_popcntb(a);
|
|
}
|
|
|
|
// CHECK-LABEL: @test_builtin_ppc_eieio(
|
|
// CHECK: call void @llvm.ppc.eieio()
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_builtin_ppc_eieio(
|
|
// CHECK-32: call void @llvm.ppc.eieio()
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_builtin_ppc_eieio() {
|
|
__builtin_ppc_eieio();
|
|
}
|
|
|
|
// CHECK-LABEL: @test_builtin_ppc_iospace_eieio(
|
|
// CHECK: call void @llvm.ppc.iospace.eieio()
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_builtin_ppc_iospace_eieio(
|
|
// CHECK-32: call void @llvm.ppc.iospace.eieio()
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_builtin_ppc_iospace_eieio() {
|
|
__builtin_ppc_iospace_eieio();
|
|
}
|
|
|
|
// CHECK-LABEL: @test_builtin_ppc_isync(
|
|
// CHECK: call void @llvm.ppc.isync()
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_builtin_ppc_isync(
|
|
// CHECK-32: call void @llvm.ppc.isync()
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_builtin_ppc_isync() {
|
|
__builtin_ppc_isync();
|
|
}
|
|
|
|
// CHECK-LABEL: @test_builtin_ppc_lwsync(
|
|
// CHECK: call void @llvm.ppc.lwsync()
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_builtin_ppc_lwsync(
|
|
// CHECK-32: call void @llvm.ppc.lwsync()
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_builtin_ppc_lwsync() {
|
|
__builtin_ppc_lwsync();
|
|
}
|
|
|
|
// CHECK-LABEL: @test_builtin_ppc_iospace_lwsync(
|
|
// CHECK: call void @llvm.ppc.iospace.lwsync()
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_builtin_ppc_iospace_lwsync(
|
|
// CHECK-32: call void @llvm.ppc.iospace.lwsync()
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_builtin_ppc_iospace_lwsync() {
|
|
__builtin_ppc_iospace_lwsync();
|
|
}
|
|
|
|
// CHECK-LABEL: @test_builtin_ppc_sync(
|
|
// CHECK: call void @llvm.ppc.sync()
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_builtin_ppc_sync(
|
|
// CHECK-32: call void @llvm.ppc.sync()
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_builtin_ppc_sync() {
|
|
__builtin_ppc_sync();
|
|
}
|
|
|
|
// CHECK-LABEL: @test_builtin_ppc_iospace_sync(
|
|
// CHECK: call void @llvm.ppc.iospace.sync()
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_builtin_ppc_iospace_sync(
|
|
// CHECK-32: call void @llvm.ppc.iospace.sync()
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_builtin_ppc_iospace_sync() {
|
|
__builtin_ppc_iospace_sync();
|
|
}
|
|
|
|
// CHECK-LABEL: @test_builtin_ppc_dcbfl(
|
|
// CHECK: [[TMP0:%.*]] = load i8*, i8** @b, align 8
|
|
// CHECK-NEXT: call void @llvm.ppc.dcbfl(i8* [[TMP0]])
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_builtin_ppc_dcbfl(
|
|
// CHECK-32: [[TMP0:%.*]] = load i8*, i8** @b, align 4
|
|
// CHECK-32-NEXT: call void @llvm.ppc.dcbfl(i8* [[TMP0]])
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_builtin_ppc_dcbfl() {
|
|
__builtin_ppc_dcbfl(b);
|
|
}
|
|
|
|
// CHECK-LABEL: @test_builtin_ppc_dcbflp(
|
|
// CHECK: [[TMP0:%.*]] = load i8*, i8** @b, align 8
|
|
// CHECK-NEXT: call void @llvm.ppc.dcbflp(i8* [[TMP0]])
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_builtin_ppc_dcbflp(
|
|
// CHECK-32: [[TMP0:%.*]] = load i8*, i8** @b, align 4
|
|
// CHECK-32-NEXT: call void @llvm.ppc.dcbflp(i8* [[TMP0]])
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_builtin_ppc_dcbflp() {
|
|
__builtin_ppc_dcbflp(b);
|
|
}
|
|
|
|
// CHECK-LABEL: @test_builtin_ppc_dcbst(
|
|
// CHECK: [[TMP0:%.*]] = load i8*, i8** @b, align 8
|
|
// CHECK-NEXT: call void @llvm.ppc.dcbst(i8* [[TMP0]])
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_builtin_ppc_dcbst(
|
|
// CHECK-32: [[TMP0:%.*]] = load i8*, i8** @b, align 4
|
|
// CHECK-32-NEXT: call void @llvm.ppc.dcbst(i8* [[TMP0]])
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_builtin_ppc_dcbst() {
|
|
__builtin_ppc_dcbst(b);
|
|
}
|
|
|
|
// CHECK-LABEL: @test_builtin_ppc_dcbt(
|
|
// CHECK: [[TMP0:%.*]] = load i8*, i8** @c, align 8
|
|
// CHECK-NEXT: call void @llvm.ppc.dcbt(i8* [[TMP0]])
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_builtin_ppc_dcbt(
|
|
// CHECK-32: [[TMP0:%.*]] = load i8*, i8** @c, align 4
|
|
// CHECK-32-NEXT: call void @llvm.ppc.dcbt(i8* [[TMP0]])
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_builtin_ppc_dcbt() {
|
|
__builtin_ppc_dcbt(c);
|
|
}
|
|
|
|
// CHECK-LABEL: @test_builtin_ppc_dcbtst(
|
|
// CHECK: [[TMP0:%.*]] = load i8*, i8** @c, align 8
|
|
// CHECK-NEXT: call void @llvm.ppc.dcbtst(i8* [[TMP0]])
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_builtin_ppc_dcbtst(
|
|
// CHECK-32: [[TMP0:%.*]] = load i8*, i8** @c, align 4
|
|
// CHECK-32-NEXT: call void @llvm.ppc.dcbtst(i8* [[TMP0]])
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_builtin_ppc_dcbtst() {
|
|
__builtin_ppc_dcbtst(c);
|
|
}
|
|
|
|
// CHECK-LABEL: @test_builtin_ppc_dcbz(
|
|
// CHECK: [[TMP0:%.*]] = load i8*, i8** @c, align 8
|
|
// CHECK-NEXT: call void @llvm.ppc.dcbz(i8* [[TMP0]])
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
// CHECK-32-LABEL: @test_builtin_ppc_dcbz(
|
|
// CHECK-32: [[TMP0:%.*]] = load i8*, i8** @c, align 4
|
|
// CHECK-32-NEXT: call void @llvm.ppc.dcbz(i8* [[TMP0]])
|
|
// CHECK-32-NEXT: ret void
|
|
//
|
|
void test_builtin_ppc_dcbz() {
|
|
__builtin_ppc_dcbz(c);
|
|
}
|