// 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);
}
