1 // REQUIRES: powerpc-registered-target 2 // RUN: %clang_cc1 -faltivec -target-feature +vsx -triple powerpc64-unknown-unknown -emit-llvm %s -o - | FileCheck %s 3 4 vector unsigned char vuc = { 8, 9, 10, 11, 12, 13, 14, 15, 5 0, 1, 2, 3, 4, 5, 6, 7}; 6 vector float vf = { -1.5, 2.5, -3.5, 4.5 }; 7 vector double vd = { 3.5, -7.5 }; 8 vector signed int vsi = { -1, 2, -3, 4 }; 9 vector unsigned int vui = { 0, 1, 2, 3 }; 10 vector signed long long vsll = { 255LL, -937LL }; 11 vector unsigned long long vull = { 1447LL, 2894LL }; 12 double d = 23.4; 13 14 vector float res_vf; 15 vector double res_vd; 16 vector signed int res_vsi; 17 vector unsigned int res_vui; 18 vector signed long long res_vsll; 19 vector unsigned long long res_vull; 20 double res_d; 21 22 void test1() { 23 // CHECK-LABEL: define void @test1 24 25 /* vec_div */ 26 res_vf = vec_div(vf, vf); 27 // CHECK: @llvm.ppc.vsx.xvdivsp 28 29 res_vd = vec_div(vd, vd); 30 // CHECK: @llvm.ppc.vsx.xvdivdp 31 32 /* vec_max */ 33 res_vf = vec_max(vf, vf); 34 // CHECK: @llvm.ppc.vsx.xvmaxsp 35 36 res_vd = vec_max(vd, vd); 37 // CHECK: @llvm.ppc.vsx.xvmaxdp 38 39 res_vf = vec_vmaxfp(vf, vf); 40 // CHECK: @llvm.ppc.vsx.xvmaxsp 41 42 /* vec_min */ 43 res_vf = vec_min(vf, vf); 44 // CHECK: @llvm.ppc.vsx.xvminsp 45 46 res_vd = vec_min(vd, vd); 47 // CHECK: @llvm.ppc.vsx.xvmindp 48 49 res_vf = vec_vminfp(vf, vf); 50 // CHECK: @llvm.ppc.vsx.xvminsp 51 52 res_d = __builtin_vsx_xsmaxdp(d, d); 53 // CHECK: @llvm.ppc.vsx.xsmaxdp 54 55 res_d = __builtin_vsx_xsmindp(d, d); 56 // CHECK: @llvm.ppc.vsx.xsmindp 57 58 /* vec_perm */ 59 res_vsll = vec_perm(vsll, vsll, vuc); 60 // CHECK: @llvm.ppc.altivec.vperm 61 62 res_vull = vec_perm(vull, vull, vuc); 63 // CHECK: @llvm.ppc.altivec.vperm 64 65 res_vd = vec_perm(vd, vd, vuc); 66 // CHECK: @llvm.ppc.altivec.vperm 67 68 res_vsll = vec_vperm(vsll, vsll, vuc); 69 // CHECK: @llvm.ppc.altivec.vperm 70 71 res_vull = vec_vperm(vull, vull, vuc); 72 // CHECK: @llvm.ppc.altivec.vperm 73 74 res_vd = vec_vperm(vd, vd, vuc); 75 // CHECK: @llvm.ppc.altivec.vperm 76 77 /* vec_vsx_ld */ 78 79 res_vsi = vec_vsx_ld(0, &vsi); 80 // CHECK: @llvm.ppc.vsx.lxvw4x 81 82 res_vui = vec_vsx_ld(0, &vui); 83 // CHECK: @llvm.ppc.vsx.lxvw4x 84 85 res_vf = vec_vsx_ld (0, &vf); 86 // CHECK: @llvm.ppc.vsx.lxvw4x 87 88 res_vsll = vec_vsx_ld(0, &vsll); 89 // CHECK: @llvm.ppc.vsx.lxvd2x 90 91 res_vull = vec_vsx_ld(0, &vull); 92 // CHECK: @llvm.ppc.vsx.lxvd2x 93 94 res_vd = vec_vsx_ld(0, &vd); 95 // CHECK: @llvm.ppc.vsx.lxvd2x 96 97 /* vec_vsx_st */ 98 99 vec_vsx_st(vsi, 0, &res_vsi); 100 // CHECK: @llvm.ppc.vsx.stxvw4x 101 102 vec_vsx_st(vui, 0, &res_vui); 103 // CHECK: @llvm.ppc.vsx.stxvw4x 104 105 vec_vsx_st(vf, 0, &res_vf); 106 // CHECK: @llvm.ppc.vsx.stxvw4x 107 108 vec_vsx_st(vsll, 0, &res_vsll); 109 // CHECK: @llvm.ppc.vsx.stxvd2x 110 111 vec_vsx_st(vull, 0, &res_vull); 112 // CHECK: @llvm.ppc.vsx.stxvd2x 113 114 vec_vsx_st(vd, 0, &res_vd); 115 // CHECK: @llvm.ppc.vsx.stxvd2x 116 } 117