diff options
Diffstat (limited to 'test/CodeGen/builtins-ppc-vsx.c')
-rw-r--r-- | test/CodeGen/builtins-ppc-vsx.c | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/test/CodeGen/builtins-ppc-vsx.c b/test/CodeGen/builtins-ppc-vsx.c new file mode 100644 index 000000000000..58a8cc32dce3 --- /dev/null +++ b/test/CodeGen/builtins-ppc-vsx.c @@ -0,0 +1,116 @@ +// REQUIRES: powerpc-registered-target +// RUN: %clang_cc1 -faltivec -target-feature +vsx -triple powerpc64-unknown-unknown -emit-llvm %s -o - | FileCheck %s + +vector unsigned char vuc = { 8, 9, 10, 11, 12, 13, 14, 15, + 0, 1, 2, 3, 4, 5, 6, 7}; +vector float vf = { -1.5, 2.5, -3.5, 4.5 }; +vector double vd = { 3.5, -7.5 }; +vector signed int vsi = { -1, 2, -3, 4 }; +vector unsigned int vui = { 0, 1, 2, 3 }; +vector signed long long vsll = { 255LL, -937LL }; +vector unsigned long long vull = { 1447LL, 2894LL }; +double d = 23.4; + +vector float res_vf; +vector double res_vd; +vector signed int res_vsi; +vector unsigned int res_vui; +vector signed long long res_vsll; +vector unsigned long long res_vull; +double res_d; + +void test1() { +// CHECK-LABEL: define void @test1 + + /* vec_div */ + res_vf = vec_div(vf, vf); +// CHECK: @llvm.ppc.vsx.xvdivsp + + res_vd = vec_div(vd, vd); +// CHECK: @llvm.ppc.vsx.xvdivdp + + /* vec_max */ + res_vf = vec_max(vf, vf); +// CHECK: @llvm.ppc.vsx.xvmaxsp + + res_vd = vec_max(vd, vd); +// CHECK: @llvm.ppc.vsx.xvmaxdp + + res_vf = vec_vmaxfp(vf, vf); +// CHECK: @llvm.ppc.vsx.xvmaxsp + + /* vec_min */ + res_vf = vec_min(vf, vf); +// CHECK: @llvm.ppc.vsx.xvminsp + + res_vd = vec_min(vd, vd); +// CHECK: @llvm.ppc.vsx.xvmindp + + res_vf = vec_vminfp(vf, vf); +// CHECK: @llvm.ppc.vsx.xvminsp + + res_d = __builtin_vsx_xsmaxdp(d, d); +// CHECK: @llvm.ppc.vsx.xsmaxdp + + res_d = __builtin_vsx_xsmindp(d, d); +// CHECK: @llvm.ppc.vsx.xsmindp + + /* vec_perm */ + res_vsll = vec_perm(vsll, vsll, vuc); +// CHECK: @llvm.ppc.altivec.vperm + + res_vull = vec_perm(vull, vull, vuc); +// CHECK: @llvm.ppc.altivec.vperm + + res_vd = vec_perm(vd, vd, vuc); +// CHECK: @llvm.ppc.altivec.vperm + + res_vsll = vec_vperm(vsll, vsll, vuc); +// CHECK: @llvm.ppc.altivec.vperm + + res_vull = vec_vperm(vull, vull, vuc); +// CHECK: @llvm.ppc.altivec.vperm + + res_vd = vec_vperm(vd, vd, vuc); +// CHECK: @llvm.ppc.altivec.vperm + + /* vec_vsx_ld */ + + res_vsi = vec_vsx_ld(0, &vsi); +// CHECK: @llvm.ppc.vsx.lxvw4x + + res_vui = vec_vsx_ld(0, &vui); +// CHECK: @llvm.ppc.vsx.lxvw4x + + res_vf = vec_vsx_ld (0, &vf); +// CHECK: @llvm.ppc.vsx.lxvw4x + + res_vsll = vec_vsx_ld(0, &vsll); +// CHECK: @llvm.ppc.vsx.lxvd2x + + res_vull = vec_vsx_ld(0, &vull); +// CHECK: @llvm.ppc.vsx.lxvd2x + + res_vd = vec_vsx_ld(0, &vd); +// CHECK: @llvm.ppc.vsx.lxvd2x + + /* vec_vsx_st */ + + vec_vsx_st(vsi, 0, &res_vsi); +// CHECK: @llvm.ppc.vsx.stxvw4x + + vec_vsx_st(vui, 0, &res_vui); +// CHECK: @llvm.ppc.vsx.stxvw4x + + vec_vsx_st(vf, 0, &res_vf); +// CHECK: @llvm.ppc.vsx.stxvw4x + + vec_vsx_st(vsll, 0, &res_vsll); +// CHECK: @llvm.ppc.vsx.stxvd2x + + vec_vsx_st(vull, 0, &res_vull); +// CHECK: @llvm.ppc.vsx.stxvd2x + + vec_vsx_st(vd, 0, &res_vd); +// CHECK: @llvm.ppc.vsx.stxvd2x +} |