forked from OSchip/llvm-project
117 lines
2.7 KiB
C
117 lines
2.7 KiB
C
// 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
|
|
}
|