Home | History | Annotate | Download | only in CodeGen
      1 // REQUIRES: powerpc-registered-target
      2 // RUN: %clang_cc1 -faltivec -target-feature +vsx -triple powerpc64-unknown-unknown -emit-llvm %s -o - | FileCheck %s
      3 // RUN: %clang_cc1 -faltivec -target-feature +vsx -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s -check-prefix=CHECK-LE
      4 #include <altivec.h>
      5 
      6 vector bool char vbc = { 0, 1, 0, 1, 0, 1, 0, 1,
      7                          0, 1, 0, 1, 0, 1, 0, 1 };
      8 vector signed char vsc = { -8,  9, -10, 11, -12, 13, -14, 15,
      9                            -0,  1,  -2,  3,  -4,  5,  -6,  7};
     10 vector unsigned char vuc = { 8,  9, 10, 11, 12, 13, 14, 15,
     11                              0,  1,  2,  3,  4,  5,  6,  7};
     12 vector float vf = { -1.5, 2.5, -3.5, 4.5 };
     13 vector double vd = { 3.5, -7.5 };
     14 vector bool short vbs = { 0, 1, 0, 1, 0, 1, 0, 1 };
     15 vector signed short vss = { -1, 2, -3, 4, -5, 6, -7, 8 };
     16 vector unsigned short vus = { 0, 1, 2, 3, 4, 5, 6, 7 };
     17 vector bool int vbi = { 0, 1, 0, 1 };
     18 vector signed int vsi = { -1, 2, -3, 4 };
     19 vector unsigned int vui = { 0, 1, 2, 3 };
     20 vector bool long long vbll = { 1, 0 };
     21 vector signed long long vsll = { 255LL, -937LL };
     22 vector unsigned long long vull = { 1447LL, 2894LL };
     23 double d = 23.4;
     24 float af[4] = {23.4f, 56.7f, 89.0f, 12.3f};
     25 double ad[2] = {23.4, 56.7};
     26 signed char asc[16] = { -8,  9, -10, 11, -12, 13, -14, 15,
     27                         -0,  1,  -2,  3,  -4,  5,  -6,  7};
     28 unsigned char auc[16] = { 8,  9, 10, 11, 12, 13, 14, 15,
     29                           0,  1,  2,  3,  4,  5,  6,  7};
     30 signed short ass[8] = { -1, 2, -3, 4, -5, 6, -7, 8 };
     31 unsigned short aus[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };
     32 signed int asi[4] = { -1, 2, -3, 4 };
     33 unsigned int aui[4] = { 0, 1, 2, 3 };
     34 signed long asl[2] = { -1L, 2L };
     35 unsigned long aul[2] = { 1L, 2L };
     36 
     37 vector float res_vf;
     38 vector double res_vd;
     39 vector bool char res_vbc;
     40 vector signed char res_vsc;
     41 vector unsigned char res_vuc;
     42 vector bool short res_vbs;
     43 vector signed short res_vss;
     44 vector unsigned short res_vus;
     45 vector bool int res_vbi;
     46 vector signed int res_vsi;
     47 vector unsigned int res_vui;
     48 vector bool long long res_vbll;
     49 vector signed long long res_vsll;
     50 vector unsigned long long res_vull;
     51 
     52 double res_d;
     53 float res_af[4];
     54 double res_ad[2];
     55 signed char res_asc[16];
     56 unsigned char res_auc[16];
     57 signed short res_ass[8];
     58 unsigned short res_aus[8];
     59 signed int res_asi[4];
     60 unsigned int res_aui[4];
     61 
     62 void dummy() { }
     63 
     64 void test1() {
     65 // CHECK-LABEL: define void @test1
     66 // CHECK-LE-LABEL: define void @test1
     67 
     68   res_vf = vec_abs(vf);
     69 // CHECK: call <4 x float> @llvm.fabs.v4f32(<4 x float> %{{[0-9]*}})
     70 // CHECK-LE: call <4 x float> @llvm.fabs.v4f32(<4 x float> %{{[0-9]*}})
     71 
     72   dummy();
     73 // CHECK: call void @dummy()
     74 // CHECK-LE: call void @dummy()
     75 
     76   res_vd = vec_add(vd, vd);
     77 // CHECK: fadd <2 x double>
     78 // CHECK-LE: fadd <2 x double>
     79 
     80   res_vd = vec_and(vbll, vd);
     81 // CHECK: and <2 x i64>
     82 // CHECK: bitcast <2 x i64> %{{[0-9]*}} to <2 x double>
     83 // CHECK-LE: and <2 x i64>
     84 // CHECK-LE: bitcast <2 x i64> %{{[0-9]*}} to <2 x double>
     85 
     86   res_vd = vec_and(vd, vbll);
     87 // CHECK: and <2 x i64>
     88 // CHECK: bitcast <2 x i64> %{{[0-9]*}} to <2 x double>
     89 // CHECK-LE: and <2 x i64>
     90 // CHECK-LE: bitcast <2 x i64> %{{[0-9]*}} to <2 x double>
     91 
     92   res_vd = vec_and(vd, vd);
     93 // CHECK: and <2 x i64>
     94 // CHECK: bitcast <2 x i64> %{{[0-9]*}} to <2 x double>
     95 // CHECK-LE: and <2 x i64>
     96 // CHECK-LE: bitcast <2 x i64> %{{[0-9]*}} to <2 x double>
     97 
     98   dummy();
     99 // CHECK: call void @dummy()
    100 // CHECK-LE: call void @dummy()
    101 
    102   res_vd = vec_andc(vbll, vd);
    103 // CHECK: bitcast <2 x double> %{{[0-9]*}} to <2 x i64>
    104 // CHECK: xor <2 x i64> %{{[0-9]*}}, <i64 -1, i64 -1>
    105 // CHECK: and <2 x i64>
    106 // CHECK: bitcast <2 x i64> %{{[0-9]*}} to <2 x double>
    107 // CHECK-LE: bitcast <2 x double> %{{[0-9]*}} to <2 x i64>
    108 // CHECK-LE: xor <2 x i64> %{{[0-9]*}}, <i64 -1, i64 -1>
    109 // CHECK-LE: and <2 x i64>
    110 // CHECK-LE: bitcast <2 x i64> %{{[0-9]*}} to <2 x double>
    111 
    112   dummy();
    113 // CHECK: call void @dummy()
    114 // CHECK-LE: call void @dummy()
    115 
    116   res_vd = vec_andc(vd, vbll);
    117 // CHECK: bitcast <2 x double> %{{[0-9]*}} to <2 x i64>
    118 // CHECK: xor <2 x i64> %{{[0-9]*}}, <i64 -1, i64 -1>
    119 // CHECK: and <2 x i64>
    120 // CHECK: bitcast <2 x i64> %{{[0-9]*}} to <2 x double>
    121 // CHECK-LE: bitcast <2 x double> %{{[0-9]*}} to <2 x i64>
    122 // CHECK-LE: xor <2 x i64> %{{[0-9]*}}, <i64 -1, i64 -1>
    123 // CHECK-LE: and <2 x i64>
    124 // CHECK-LE: bitcast <2 x i64> %{{[0-9]*}} to <2 x double>
    125 
    126   dummy();
    127 // CHECK: call void @dummy()
    128 
    129   res_vd = vec_andc(vd, vd);
    130 // CHECK: bitcast <2 x double> %{{[0-9]*}} to <2 x i64>
    131 // CHECK: xor <2 x i64> %{{[0-9]*}}, <i64 -1, i64 -1>
    132 // CHECK: and <2 x i64>
    133 // CHECK: bitcast <2 x i64> %{{[0-9]*}} to <2 x double>
    134 
    135   dummy();
    136 // CHECK: call void @dummy()
    137 // CHECK-LE: call void @dummy()
    138 
    139   res_vd = vec_ceil(vd);
    140 // CHECK: call <2 x double> @llvm.ceil.v2f64(<2 x double> %{{[0-9]*}})
    141 // CHECK-LE: call <2 x double> @llvm.ceil.v2f64(<2 x double> %{{[0-9]*}})
    142 
    143   res_vf = vec_ceil(vf);
    144 // CHECK: call <4 x float> @llvm.ceil.v4f32(<4 x float> %{{[0-9]*}})
    145 // CHECK-LE: call <4 x float> @llvm.ceil.v4f32(<4 x float> %{{[0-9]*}})
    146 
    147   res_vbll = vec_cmpeq(vd, vd);
    148 // CHECK: call <2 x i64> @llvm.ppc.vsx.xvcmpeqdp(<2 x double> %{{[0-9]*}}, <2 x double> %{{[0-9]*}})
    149 // CHECK-LE: call <2 x i64> @llvm.ppc.vsx.xvcmpeqdp(<2 x double> %{{[0-9]*}}, <2 x double> %{{[0-9]*}})
    150 
    151   res_vbi = vec_cmpeq(vf, vf);
    152 // CHECK: call <4 x i32> @llvm.ppc.vsx.xvcmpeqsp(<4 x float> %{{[0-9]*}}, <4 x float> %{{[0-9]*}})
    153 // CHECK-LE: call <4 x i32> @llvm.ppc.vsx.xvcmpeqsp(<4 x float> %{{[0-9]*}}, <4 x float> %{{[0-9]*}})
    154 
    155   res_vbll = vec_cmpge(vd, vd);
    156 // CHECK: call <2 x i64> @llvm.ppc.vsx.xvcmpgedp(<2 x double> %{{[0-9]*}}, <2 x double> %{{[0-9]*}})
    157 // CHECK-LE: call <2 x i64> @llvm.ppc.vsx.xvcmpgedp(<2 x double> %{{[0-9]*}}, <2 x double> %{{[0-9]*}})
    158 
    159   res_vbi = vec_cmpge(vf, vf);
    160 // CHECK: call <4 x i32> @llvm.ppc.vsx.xvcmpgesp(<4 x float> %{{[0-9]*}}, <4 x float> %{{[0-9]*}})
    161 // CHECK-LE: call <4 x i32> @llvm.ppc.vsx.xvcmpgesp(<4 x float> %{{[0-9]*}}, <4 x float> %{{[0-9]*}})
    162 
    163   res_vbll = vec_cmpgt(vd, vd);
    164 // CHECK: call <2 x i64> @llvm.ppc.vsx.xvcmpgtdp(<2 x double> %{{[0-9]*}}, <2 x double> %{{[0-9]*}})
    165 // CHECK-LE: call <2 x i64> @llvm.ppc.vsx.xvcmpgtdp(<2 x double> %{{[0-9]*}}, <2 x double> %{{[0-9]*}})
    166 
    167   res_vbi = vec_cmpgt(vf, vf);
    168 // CHECK: call <4 x i32> @llvm.ppc.vsx.xvcmpgtsp(<4 x float> %{{[0-9]*}}, <4 x float> %{{[0-9]*}})
    169 // CHECK-LE: call <4 x i32> @llvm.ppc.vsx.xvcmpgtsp(<4 x float> %{{[0-9]*}}, <4 x float> %{{[0-9]*}})
    170 
    171   res_vbll = vec_cmple(vd, vd);
    172 // CHECK: call <2 x i64> @llvm.ppc.vsx.xvcmpgedp(<2 x double> %{{[0-9]*}}, <2 x double> %{{[0-9]*}})
    173 // CHECK-LE: call <2 x i64> @llvm.ppc.vsx.xvcmpgedp(<2 x double> %{{[0-9]*}}, <2 x double> %{{[0-9]*}})
    174 
    175   res_vbi = vec_cmple(vf, vf);
    176 // CHECK: call <4 x i32> @llvm.ppc.vsx.xvcmpgesp(<4 x float> %{{[0-9]*}}, <4 x float> %{{[0-9]*}})
    177 // CHECK-LE: call <4 x i32> @llvm.ppc.vsx.xvcmpgesp(<4 x float> %{{[0-9]*}}, <4 x float> %{{[0-9]*}})
    178 
    179   res_vbll = vec_cmplt(vd, vd);
    180 // CHECK: call <2 x i64> @llvm.ppc.vsx.xvcmpgtdp(<2 x double> %{{[0-9]*}}, <2 x double> %{{[0-9]*}})
    181 // CHECK-LE: call <2 x i64> @llvm.ppc.vsx.xvcmpgtdp(<2 x double> %{{[0-9]*}}, <2 x double> %{{[0-9]*}})
    182 
    183   res_vbi = vec_cmplt(vf, vf);
    184 // CHECK: call <4 x i32> @llvm.ppc.vsx.xvcmpgtsp(<4 x float> %{{[0-9]*}}, <4 x float> %{{[0-9]*}})
    185 // CHECK-LE: call <4 x i32> @llvm.ppc.vsx.xvcmpgtsp(<4 x float> %{{[0-9]*}}, <4 x float> %{{[0-9]*}})
    186 
    187   /* vec_cpsgn */
    188   res_vf = vec_cpsgn(vf, vf);
    189 // CHECK: call <4 x float> @llvm.copysign.v4f32(<4 x float> %{{.+}}, <4 x float> %{{.+}})
    190 // CHECK-LE: call <4 x float> @llvm.copysign.v4f32(<4 x float> %{{.+}}, <4 x float> %{{.+}})
    191 
    192   res_vd = vec_cpsgn(vd, vd);
    193 // CHECK: call <2 x double> @llvm.copysign.v2f64(<2 x double> %{{.+}}, <2 x double> %{{.+}})
    194 // CHECK-LE: call <2 x double> @llvm.copysign.v2f64(<2 x double> %{{.+}}, <2 x double> %{{.+}})
    195 
    196   /* vec_div */
    197   res_vsll = vec_div(vsll, vsll);
    198 // CHECK: sdiv <2 x i64>
    199 // CHECK-LE: sdiv <2 x i64>
    200 
    201   res_vull = vec_div(vull, vull);
    202 // CHECK: udiv <2 x i64>
    203 // CHECK-LE: udiv <2 x i64>
    204 
    205   res_vf = vec_div(vf, vf);
    206 // CHECK: fdiv <4 x float>
    207 // CHECK-LE: fdiv <4 x float>
    208 
    209   res_vd = vec_div(vd, vd);
    210 // CHECK: fdiv <2 x double>
    211 // CHECK-LE: fdiv <2 x double>
    212 
    213   /* vec_max */
    214   res_vf = vec_max(vf, vf);
    215 // CHECK: @llvm.ppc.vsx.xvmaxsp
    216 // CHECK-LE: @llvm.ppc.vsx.xvmaxsp
    217 
    218   res_vd = vec_max(vd, vd);
    219 // CHECK: @llvm.ppc.vsx.xvmaxdp
    220 // CHECK-LE: @llvm.ppc.vsx.xvmaxdp
    221 
    222   res_vf = vec_vmaxfp(vf, vf);
    223 // CHECK: @llvm.ppc.vsx.xvmaxsp
    224 // CHECK-LE: @llvm.ppc.vsx.xvmaxsp
    225 
    226   /* vec_min */
    227   res_vf = vec_min(vf, vf);
    228 // CHECK: @llvm.ppc.vsx.xvminsp
    229 // CHECK-LE: @llvm.ppc.vsx.xvminsp
    230 
    231   res_vd = vec_min(vd, vd);
    232 // CHECK: @llvm.ppc.vsx.xvmindp
    233 // CHECK-LE: @llvm.ppc.vsx.xvmindp
    234 
    235   res_vf = vec_vminfp(vf, vf);
    236 // CHECK: @llvm.ppc.vsx.xvminsp
    237 // CHECK-LE: @llvm.ppc.vsx.xvminsp
    238 
    239   res_d = __builtin_vsx_xsmaxdp(d, d);
    240 // CHECK: @llvm.ppc.vsx.xsmaxdp
    241 // CHECK-LE: @llvm.ppc.vsx.xsmaxdp
    242 
    243   res_d = __builtin_vsx_xsmindp(d, d);
    244 // CHECK: @llvm.ppc.vsx.xsmindp
    245 // CHECK-LE: @llvm.ppc.vsx.xsmindp
    246 
    247   /* vec_perm */
    248   res_vsll = vec_perm(vsll, vsll, vuc);
    249 // CHECK: @llvm.ppc.altivec.vperm
    250 // CHECK-LE: @llvm.ppc.altivec.vperm
    251 
    252   res_vull = vec_perm(vull, vull, vuc);
    253 // CHECK: @llvm.ppc.altivec.vperm
    254 // CHECK-LE: @llvm.ppc.altivec.vperm
    255 
    256   res_vbll = vec_perm(vbll, vbll, vuc);
    257 // CHECK: [[T1:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>
    258 // CHECK: [[T2:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>
    259 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm(<4 x i32> [[T1]], <4 x i32> [[T2]], <16 x i8>
    260 // CHECK-LE: xor <16 x i8>
    261 // CHECK-LE: [[T1:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>
    262 // CHECK-LE: [[T2:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>
    263 // CHECK-LE: call <4 x i32> @llvm.ppc.altivec.vperm(<4 x i32> [[T1]], <4 x i32> [[T2]], <16 x i8>
    264 
    265   res_vf = vec_round(vf);
    266 // CHECK: call <4 x float> @llvm.round.v4f32(<4 x float>
    267 // CHECK-LE: call <4 x float> @llvm.round.v4f32(<4 x float>
    268 
    269   res_vd = vec_round(vd);
    270 // CHECK: call <2 x double> @llvm.round.v2f64(<2 x double>
    271 // CHECK-LE: call <2 x double> @llvm.round.v2f64(<2 x double>
    272 
    273   res_vd = vec_perm(vd, vd, vuc);
    274 // CHECK: @llvm.ppc.altivec.vperm
    275 // CHECK-LE: @llvm.ppc.altivec.vperm
    276 
    277   res_vd = vec_splat(vd, 1);
    278 // CHECK: [[T1:%.+]] = bitcast <2 x double> {{.+}} to <4 x i32>
    279 // CHECK: [[T2:%.+]] = bitcast <2 x double> {{.+}} to <4 x i32>
    280 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm(<4 x i32> [[T1]], <4 x i32> [[T2]], <16 x i8>
    281 // CHECK-LE: xor <16 x i8>
    282 // CHECK-LE: [[T1:%.+]] = bitcast <2 x double> {{.+}} to <4 x i32>
    283 // CHECK-LE: [[T2:%.+]] = bitcast <2 x double> {{.+}} to <4 x i32>
    284 // CHECK-LE: call <4 x i32> @llvm.ppc.altivec.vperm(<4 x i32> [[T1]], <4 x i32> [[T2]], <16 x i8>
    285 
    286   res_vbll = vec_splat(vbll, 1);
    287 // CHECK: [[T1:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>
    288 // CHECK: [[T2:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>
    289 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm(<4 x i32> [[T1]], <4 x i32> [[T2]], <16 x i8>
    290 // CHECK-LE: xor <16 x i8>
    291 // CHECK-LE: [[T1:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>
    292 // CHECK-LE: [[T2:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>
    293 // CHECK-LE: call <4 x i32> @llvm.ppc.altivec.vperm(<4 x i32> [[T1]], <4 x i32> [[T2]], <16 x i8>
    294 
    295   res_vsll =  vec_splat(vsll, 1);
    296 // CHECK: [[T1:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>
    297 // CHECK: [[T2:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>
    298 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm(<4 x i32> [[T1]], <4 x i32> [[T2]], <16 x i8>
    299 // CHECK-LE: xor <16 x i8>
    300 // CHECK-LE: [[T1:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>
    301 // CHECK-LE: [[T2:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>
    302 // CHECK-LE: call <4 x i32> @llvm.ppc.altivec.vperm(<4 x i32> [[T1]], <4 x i32> [[T2]], <16 x i8>
    303 
    304   res_vull =  vec_splat(vull, 1);
    305 // CHECK: [[T1:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>
    306 // CHECK: [[T2:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>
    307 // CHECK: call <4 x i32> @llvm.ppc.altivec.vperm(<4 x i32> [[T1]], <4 x i32> [[T2]], <16 x i8>
    308 // CHECK-LE: xor <16 x i8>
    309 // CHECK-LE: [[T1:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>
    310 // CHECK-LE: [[T2:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>
    311 // CHECK-LE: call <4 x i32> @llvm.ppc.altivec.vperm(<4 x i32> [[T1]], <4 x i32> [[T2]], <16 x i8>
    312 
    313   res_vsi = vec_pack(vsll, vsll);
    314 // CHECK: @llvm.ppc.altivec.vperm
    315 // CHECK-LE: @llvm.ppc.altivec.vperm
    316 
    317   res_vui = vec_pack(vull, vull);
    318 // CHECK: @llvm.ppc.altivec.vperm
    319 // CHECK-LE: @llvm.ppc.altivec.vperm
    320 
    321   res_vbi = vec_pack(vbll, vbll);
    322 // CHECK: @llvm.ppc.altivec.vperm
    323 // CHECK-LE: @llvm.ppc.altivec.vperm
    324 
    325   res_vsll = vec_vperm(vsll, vsll, vuc);
    326 // CHECK: @llvm.ppc.altivec.vperm
    327 // CHECK-LE: @llvm.ppc.altivec.vperm
    328 
    329   res_vull = vec_vperm(vull, vull, vuc);
    330 // CHECK: @llvm.ppc.altivec.vperm
    331 // CHECK-LE: @llvm.ppc.altivec.vperm
    332 
    333   res_vd = vec_vperm(vd, vd, vuc);
    334 // CHECK: @llvm.ppc.altivec.vperm
    335 // CHECK-LE: @llvm.ppc.altivec.vperm
    336 
    337   /* vec_vsx_ld */
    338 
    339   res_vbi = vec_vsx_ld(0, &vbi);
    340 // CHECK: @llvm.ppc.vsx.lxvw4x
    341 // CHECK-LE: @llvm.ppc.vsx.lxvw4x
    342 
    343   res_vsi = vec_vsx_ld(0, &vsi);
    344 // CHECK: @llvm.ppc.vsx.lxvw4x
    345 // CHECK-LE: @llvm.ppc.vsx.lxvw4x
    346 
    347   res_vsi = vec_vsx_ld(0, asi);
    348 // CHECK: @llvm.ppc.vsx.lxvw4x
    349 // CHECK-LE: @llvm.ppc.vsx.lxvw4x
    350 
    351   res_vui = vec_vsx_ld(0, &vui);
    352 // CHECK: @llvm.ppc.vsx.lxvw4x
    353 // CHECK-LE: @llvm.ppc.vsx.lxvw4x
    354 
    355   res_vui = vec_vsx_ld(0, aui);
    356 // CHECK: @llvm.ppc.vsx.lxvw4x
    357 // CHECK-LE: @llvm.ppc.vsx.lxvw4x
    358 
    359   res_vf = vec_vsx_ld (0, &vf);
    360 // CHECK: @llvm.ppc.vsx.lxvw4x
    361 // CHECK-LE: @llvm.ppc.vsx.lxvw4x
    362 
    363   res_vf = vec_vsx_ld (0, af);
    364 // CHECK: @llvm.ppc.vsx.lxvw4x
    365 // CHECK-LE: @llvm.ppc.vsx.lxvw4x
    366 
    367   res_vsll = vec_vsx_ld(0, &vsll);
    368 // CHECK: @llvm.ppc.vsx.lxvd2x
    369 // CHECK-LE: @llvm.ppc.vsx.lxvd2x
    370 
    371   res_vull = vec_vsx_ld(0, &vull);
    372 // CHECK: @llvm.ppc.vsx.lxvd2x
    373 // CHECK-LE: @llvm.ppc.vsx.lxvd2x
    374 
    375   res_vd = vec_vsx_ld(0, &vd);
    376 // CHECK: @llvm.ppc.vsx.lxvd2x
    377 // CHECK-LE: @llvm.ppc.vsx.lxvd2x
    378 
    379   res_vd = vec_vsx_ld(0, ad);
    380 // CHECK: @llvm.ppc.vsx.lxvd2x
    381 // CHECK-LE: @llvm.ppc.vsx.lxvd2x
    382 
    383   res_vbs = vec_vsx_ld(0, &vbs);
    384 // CHECK: @llvm.ppc.vsx.lxvw4x
    385 // CHECK-LE: @llvm.ppc.vsx.lxvw4x
    386 
    387   res_vss = vec_vsx_ld(0, &vss);
    388 // CHECK: @llvm.ppc.vsx.lxvw4x
    389 // CHECK-LE: @llvm.ppc.vsx.lxvw4x
    390 
    391   res_vss = vec_vsx_ld(0, ass);
    392 // CHECK: @llvm.ppc.vsx.lxvw4x
    393 // CHECK-LE: @llvm.ppc.vsx.lxvw4x
    394 
    395   res_vus = vec_vsx_ld(0, &vus);
    396 // CHECK: @llvm.ppc.vsx.lxvw4x
    397 // CHECK-LE: @llvm.ppc.vsx.lxvw4x
    398 
    399   res_vus = vec_vsx_ld(0, aus);
    400 // CHECK: @llvm.ppc.vsx.lxvw4x
    401 // CHECK-LE: @llvm.ppc.vsx.lxvw4x
    402 
    403   res_vbc = vec_vsx_ld(0, &vbc);
    404 // CHECK: @llvm.ppc.vsx.lxvw4x
    405 // CHECK-LE: @llvm.ppc.vsx.lxvw4x
    406 
    407   res_vsc = vec_vsx_ld(0, &vsc);
    408 // CHECK: @llvm.ppc.vsx.lxvw4x
    409 // CHECK-LE: @llvm.ppc.vsx.lxvw4x
    410 
    411   res_vuc = vec_vsx_ld(0, &vuc);
    412 // CHECK: @llvm.ppc.vsx.lxvw4x
    413 // CHECK-LE: @llvm.ppc.vsx.lxvw4x
    414 
    415   res_vsc = vec_vsx_ld(0, asc);
    416 // CHECK: @llvm.ppc.vsx.lxvw4x
    417 // CHECK-LE: @llvm.ppc.vsx.lxvw4x
    418 
    419   res_vuc = vec_vsx_ld(0, auc);
    420 // CHECK: @llvm.ppc.vsx.lxvw4x
    421 // CHECK-LE: @llvm.ppc.vsx.lxvw4x
    422 
    423   /* vec_vsx_st */
    424 
    425   vec_vsx_st(vbi, 0, &res_vbi);
    426 // CHECK: @llvm.ppc.vsx.stxvw4x
    427 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    428 
    429   vec_vsx_st(vbi, 0, res_aui);
    430 // CHECK: @llvm.ppc.vsx.stxvw4x
    431 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    432 
    433   vec_vsx_st(vbi, 0, res_asi);
    434 // CHECK: @llvm.ppc.vsx.stxvw4x
    435 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    436 
    437   vec_vsx_st(vsi, 0, &res_vsi);
    438 // CHECK: @llvm.ppc.vsx.stxvw4x
    439 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    440 
    441   vec_vsx_st(vsi, 0, res_asi);
    442 // CHECK: @llvm.ppc.vsx.stxvw4x
    443 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    444 
    445   vec_vsx_st(vui, 0, &res_vui);
    446 // CHECK: @llvm.ppc.vsx.stxvw4x
    447 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    448 
    449   vec_vsx_st(vui, 0, res_aui);
    450 // CHECK: @llvm.ppc.vsx.stxvw4x
    451 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    452 
    453   vec_vsx_st(vf, 0, &res_vf);
    454 // CHECK: @llvm.ppc.vsx.stxvw4x
    455 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    456 
    457   vec_vsx_st(vf, 0, res_af);
    458 // CHECK: @llvm.ppc.vsx.stxvw4x
    459 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    460 
    461   vec_vsx_st(vsll, 0, &res_vsll);
    462 // CHECK: @llvm.ppc.vsx.stxvd2x
    463 // CHECK-LE: @llvm.ppc.vsx.stxvd2x
    464 
    465   vec_vsx_st(vull, 0, &res_vull);
    466 // CHECK: @llvm.ppc.vsx.stxvd2x
    467 // CHECK-LE: @llvm.ppc.vsx.stxvd2x
    468 
    469   vec_vsx_st(vd, 0, &res_vd);
    470 // CHECK: @llvm.ppc.vsx.stxvd2x
    471 // CHECK-LE: @llvm.ppc.vsx.stxvd2x
    472 
    473   vec_vsx_st(vd, 0, res_ad);
    474 // CHECK: @llvm.ppc.vsx.stxvd2x
    475 // CHECK-LE: @llvm.ppc.vsx.stxvd2x
    476 
    477   vec_vsx_st(vbs, 0, &res_vbs);
    478 // CHECK: @llvm.ppc.vsx.stxvw4x
    479 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    480 
    481   vec_vsx_st(vbs, 0, res_aus);
    482 // CHECK: @llvm.ppc.vsx.stxvw4x
    483 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    484 
    485   vec_vsx_st(vbs, 0, res_ass);
    486 // CHECK: @llvm.ppc.vsx.stxvw4x
    487 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    488 
    489   vec_vsx_st(vss, 0, &res_vss);
    490 // CHECK: @llvm.ppc.vsx.stxvw4x
    491 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    492 
    493   vec_vsx_st(vss, 0, res_ass);
    494 // CHECK: @llvm.ppc.vsx.stxvw4x
    495 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    496 
    497   vec_vsx_st(vus, 0, &res_vus);
    498 // CHECK: @llvm.ppc.vsx.stxvw4x
    499 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    500 
    501   vec_vsx_st(vus, 0, res_aus);
    502 // CHECK: @llvm.ppc.vsx.stxvw4x
    503 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    504 
    505   vec_vsx_st(vsc, 0, &res_vsc);
    506 // CHECK: @llvm.ppc.vsx.stxvw4x
    507 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    508 
    509   vec_vsx_st(vsc, 0, res_asc);
    510 // CHECK: @llvm.ppc.vsx.stxvw4x
    511 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    512 
    513   vec_vsx_st(vuc, 0, &res_vuc);
    514 // CHECK: @llvm.ppc.vsx.stxvw4x
    515 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    516 
    517   vec_vsx_st(vuc, 0, res_auc);
    518 // CHECK: @llvm.ppc.vsx.stxvw4x
    519 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    520 
    521   vec_vsx_st(vbc, 0, &res_vbc);
    522 // CHECK: @llvm.ppc.vsx.stxvw4x
    523 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    524 
    525   vec_vsx_st(vbc, 0, res_asc);
    526 // CHECK: @llvm.ppc.vsx.stxvw4x
    527 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    528 
    529   vec_vsx_st(vbc, 0, res_auc);
    530 // CHECK: @llvm.ppc.vsx.stxvw4x
    531 // CHECK-LE: @llvm.ppc.vsx.stxvw4x
    532 
    533   /* vec_and */
    534   res_vsll = vec_and(vsll, vsll);
    535 // CHECK: and <2 x i64>
    536 // CHECK-LE: and <2 x i64>
    537 
    538   res_vsll = vec_and(vbll, vsll);
    539 // CHECK: and <2 x i64>
    540 // CHECK-LE: and <2 x i64>
    541 
    542   res_vsll = vec_and(vsll, vbll);
    543 // CHECK: and <2 x i64>
    544 // CHECK-LE: and <2 x i64>
    545 
    546   res_vull = vec_and(vull, vull);
    547 // CHECK: and <2 x i64>
    548 // CHECK-LE: and <2 x i64>
    549 
    550   res_vull = vec_and(vbll, vull);
    551 // CHECK: and <2 x i64>
    552 // CHECK-LE: and <2 x i64>
    553 
    554   res_vull = vec_and(vull, vbll);
    555 // CHECK: and <2 x i64>
    556 // CHECK-LE: and <2 x i64>
    557 
    558   res_vbll = vec_and(vbll, vbll);
    559 // CHECK: and <2 x i64>
    560 // CHECK-LE: and <2 x i64>
    561 
    562   /* vec_vand */
    563   res_vsll = vec_vand(vsll, vsll);
    564 // CHECK: and <2 x i64>
    565 // CHECK-LE: and <2 x i64>
    566 
    567   res_vsll = vec_vand(vbll, vsll);
    568 // CHECK: and <2 x i64>
    569 // CHECK-LE: and <2 x i64>
    570 
    571   res_vsll = vec_vand(vsll, vbll);
    572 // CHECK: and <2 x i64>
    573 // CHECK-LE: and <2 x i64>
    574 
    575   res_vull = vec_vand(vull, vull);
    576 // CHECK: and <2 x i64>
    577 // CHECK-LE: and <2 x i64>
    578 
    579   res_vull = vec_vand(vbll, vull);
    580 // CHECK: and <2 x i64>
    581 // CHECK-LE: and <2 x i64>
    582 
    583   res_vull = vec_vand(vull, vbll);
    584 // CHECK: and <2 x i64>
    585 // CHECK-LE: and <2 x i64>
    586 
    587   res_vbll = vec_vand(vbll, vbll);
    588 // CHECK: and <2 x i64>
    589 // CHECK-LE: and <2 x i64>
    590 
    591   /* vec_andc */
    592   res_vsll = vec_andc(vsll, vsll);
    593 // CHECK: xor <2 x i64>
    594 // CHECK: and <2 x i64>
    595 // CHECK-LE: xor <2 x i64>
    596 // CHECK-LE: and <2 x i64>
    597 
    598   res_vsll = vec_andc(vbll, vsll);
    599 // CHECK: xor <2 x i64>
    600 // CHECK: and <2 x i64>
    601 // CHECK-LE: xor <2 x i64>
    602 // CHECK-LE: and <2 x i64>
    603 
    604   res_vsll = vec_andc(vsll, vbll);
    605 // CHECK: xor <2 x i64>
    606 // CHECK: and <2 x i64>
    607 // CHECK-LE: xor <2 x i64>
    608 // CHECK-LE: and <2 x i64>
    609 
    610   res_vull = vec_andc(vull, vull);
    611 // CHECK: xor <2 x i64>
    612 // CHECK: and <2 x i64>
    613 // CHECK-LE: xor <2 x i64>
    614 // CHECK-LE: and <2 x i64>
    615 
    616   res_vull = vec_andc(vbll, vull);
    617 // CHECK: xor <2 x i64>
    618 // CHECK: and <2 x i64>
    619 // CHECK-LE: xor <2 x i64>
    620 // CHECK-LE: and <2 x i64>
    621 
    622   res_vull = vec_andc(vull, vbll);
    623 // CHECK: xor <2 x i64>
    624 // CHECK: and <2 x i64>
    625 // CHECK-LE: xor <2 x i64>
    626 // CHECK-LE: and <2 x i64>
    627 
    628   res_vbll = vec_andc(vbll, vbll);
    629 // CHECK: xor <2 x i64>
    630 // CHECK: and <2 x i64>
    631 // CHECK-LE: xor <2 x i64>
    632 // CHECK-LE: and <2 x i64>
    633 
    634   res_vf = vec_floor(vf);
    635 // CHECK: call <4 x float> @llvm.floor.v4f32(<4 x float> %{{[0-9]+}})
    636 // CHECK-LE: call <4 x float> @llvm.floor.v4f32(<4 x float> %{{[0-9]+}})
    637 
    638   res_vd = vec_floor(vd);
    639 // CHECK: call <2 x double> @llvm.floor.v2f64(<2 x double> %{{[0-9]+}})
    640 // CHECK-LE: call <2 x double> @llvm.floor.v2f64(<2 x double> %{{[0-9]+}})
    641 
    642   res_vf = vec_madd(vf, vf, vf);
    643 // CHECK: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{[0-9]+}}, <4 x float> %{{[0-9]+}}, <4 x float> %{{[0-9]+}})
    644 // CHECK-LE: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{[0-9]+}}, <4 x float> %{{[0-9]+}}, <4 x float> %{{[0-9]+}})
    645 
    646   res_vd = vec_madd(vd, vd, vd);
    647 // CHECK: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{[0-9]+}}, <2 x double> %{{[0-9]+}}, <2 x double> %{{[0-9]+}})
    648 // CHECK-LE: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{[0-9]+}}, <2 x double> %{{[0-9]+}}, <2 x double> %{{[0-9]+}})
    649 
    650   /* vec_mergeh */
    651   res_vsll = vec_mergeh(vsll, vsll);
    652 // CHECK: @llvm.ppc.altivec.vperm
    653 // CHECK-LE: @llvm.ppc.altivec.vperm
    654 
    655   res_vsll = vec_mergeh(vsll, vbll);
    656 // CHECK: @llvm.ppc.altivec.vperm
    657 // CHECK-LE: @llvm.ppc.altivec.vperm
    658 
    659   res_vsll = vec_mergeh(vbll, vsll);
    660 // CHECK: @llvm.ppc.altivec.vperm
    661 // CHECK-LE: @llvm.ppc.altivec.vperm
    662 
    663   res_vull = vec_mergeh(vull, vull);
    664 // CHECK: @llvm.ppc.altivec.vperm
    665 // CHECK-LE: @llvm.ppc.altivec.vperm
    666 
    667   res_vull = vec_mergeh(vull, vbll);
    668 // CHECK: @llvm.ppc.altivec.vperm
    669 // CHECK-LE: @llvm.ppc.altivec.vperm
    670 
    671   res_vull = vec_mergeh(vbll, vull);
    672 // CHECK: @llvm.ppc.altivec.vperm
    673 // CHECK-LE: @llvm.ppc.altivec.vperm
    674 
    675   /* vec_mergel */
    676   res_vsll = vec_mergel(vsll, vsll);
    677 // CHECK: @llvm.ppc.altivec.vperm
    678 // CHECK-LE: @llvm.ppc.altivec.vperm
    679 
    680   res_vsll = vec_mergel(vsll, vbll);
    681 // CHECK: @llvm.ppc.altivec.vperm
    682 // CHECK-LE: @llvm.ppc.altivec.vperm
    683 
    684   res_vsll = vec_mergel(vbll, vsll);
    685 // CHECK: @llvm.ppc.altivec.vperm
    686 // CHECK-LE: @llvm.ppc.altivec.vperm
    687 
    688   res_vull = vec_mergel(vull, vull);
    689 // CHECK: @llvm.ppc.altivec.vperm
    690 // CHECK-LE: @llvm.ppc.altivec.vperm
    691 
    692   res_vull = vec_mergel(vull, vbll);
    693 // CHECK: @llvm.ppc.altivec.vperm
    694 // CHECK-LE: @llvm.ppc.altivec.vperm
    695 
    696   res_vull = vec_mergel(vbll, vull);
    697 // CHECK: @llvm.ppc.altivec.vperm
    698 // CHECK-LE: @llvm.ppc.altivec.vperm
    699 
    700   /* vec_msub */
    701   res_vf = vec_msub(vf, vf, vf);
    702 // CHECK: fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{[0-9]+}}
    703 // CHECK-NEXT: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{[0-9]+}}, <4 x float> %{{[0-9]+}}, <4 x float>
    704 // CHECK-LE: fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{[0-9]+}}
    705 // CHECK-LE-NEXT: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{[0-9]+}}, <4 x float> %{{[0-9]+}}, <4 x float>
    706 
    707   res_vd = vec_msub(vd, vd, vd);
    708 // CHECK: fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{[0-9]+}}
    709 // CHECK-NEXT: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{[0-9]+}}, <2 x double> %{{[0-9]+}}, <2 x double>
    710 // CHECK-LE: fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{[0-9]+}}
    711 // CHECK-LE-NEXT: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{[0-9]+}}, <2 x double> %{{[0-9]+}}, <2 x double>
    712 
    713   res_vsll = vec_mul(vsll, vsll);
    714 // CHECK: mul <2 x i64>
    715 // CHECK-LE: mul <2 x i64>
    716 
    717   res_vull = vec_mul(vull, vull);
    718 // CHECK: mul <2 x i64>
    719 // CHECK-LE: mul <2 x i64>
    720 
    721   res_vf = vec_mul(vf, vf);
    722 // CHECK: fmul <4 x float> %{{[0-9]+}}, %{{[0-9]+}}
    723 // CHECK-LE: fmul <4 x float> %{{[0-9]+}}, %{{[0-9]+}}
    724 
    725   res_vd = vec_mul(vd, vd);
    726 // CHECK: fmul <2 x double> %{{[0-9]+}}, %{{[0-9]+}}
    727 // CHECK-LE: fmul <2 x double> %{{[0-9]+}}, %{{[0-9]+}}
    728 
    729   res_vf = vec_nearbyint(vf);
    730 // CHECK: call <4 x float> @llvm.round.v4f32(<4 x float> %{{[0-9]+}})
    731 // CHECK-LE: call <4 x float> @llvm.round.v4f32(<4 x float> %{{[0-9]+}})
    732 
    733   res_vd = vec_nearbyint(vd);
    734 // CHECK: call <2 x double> @llvm.round.v2f64(<2 x double> %{{[0-9]+}})
    735 // CHECK-LE: call <2 x double> @llvm.round.v2f64(<2 x double> %{{[0-9]+}})
    736 
    737   res_vf = vec_nmadd(vf, vf, vf);
    738 // CHECK: [[FM:[0-9]+]] = call <4 x float> @llvm.fma.v4f32(<4 x float> %{{[0-9]+}}, <4 x float> %{{[0-9]+}}, <4 x float> %{{[0-9]+}})
    739 // CHECK-NEXT: fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %[[FM]]
    740 // CHECK-LE: [[FM:[0-9]+]] = call <4 x float> @llvm.fma.v4f32(<4 x float> %{{[0-9]+}}, <4 x float> %{{[0-9]+}}, <4 x float> %{{[0-9]+}})
    741 // CHECK-LE-NEXT: fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %[[FM]]
    742 
    743   res_vd = vec_nmadd(vd, vd, vd);
    744 // CHECK: [[FM:[0-9]+]] = call <2 x double> @llvm.fma.v2f64(<2 x double> %{{[0-9]+}}, <2 x double> %{{[0-9]+}}, <2 x double> %{{[0-9]+}})
    745 // CHECK-NEXT: fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %[[FM]]
    746 // CHECK-LE: [[FM:[0-9]+]] = call <2 x double> @llvm.fma.v2f64(<2 x double> %{{[0-9]+}}, <2 x double> %{{[0-9]+}}, <2 x double> %{{[0-9]+}})
    747 // CHECK-LE-NEXT: fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %[[FM]]
    748 
    749   res_vf = vec_nmsub(vf, vf, vf);
    750 // CHECK: fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{[0-9]+}}
    751 // CHECK-NEXT: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{[0-9]+}}, <4 x float> %{{[0-9]+}}, <4 x float>
    752 // CHECK: fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{[0-9]+}}
    753 // CHECK-LE: fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{[0-9]+}}
    754 // CHECK-LE-NEXT: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{[0-9]+}}, <4 x float> %{{[0-9]+}}, <4 x float>
    755 // CHECK-LE: fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{[0-9]+}}
    756 
    757   res_vd = vec_nmsub(vd, vd, vd);
    758 // CHECK: fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{[0-9]+}}
    759 // CHECK-NEXT: [[FM:[0-9]+]] = call <2 x double> @llvm.fma.v2f64(<2 x double> %{{[0-9]+}}, <2 x double> %{{[0-9]+}}, <2 x double>
    760 // CHECK-NEXT: fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %[[FM]]
    761 // CHECK-LE: fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %{{[0-9]+}}
    762 // CHECK-LE-NEXT: [[FM:[0-9]+]] = call <2 x double> @llvm.fma.v2f64(<2 x double> %{{[0-9]+}}, <2 x double> %{{[0-9]+}}, <2 x double>
    763 // CHECK-LE-NEXT: fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %[[FM]]
    764 
    765   /* vec_nor */
    766   res_vsll = vec_nor(vsll, vsll);
    767 // CHECK: or <2 x i64>
    768 // CHECK: xor <2 x i64>
    769 // CHECK-LE: or <2 x i64>
    770 // CHECK-LE: xor <2 x i64>
    771 
    772   res_vull = vec_nor(vull, vull);
    773 // CHECK: or <2 x i64>
    774 // CHECK: xor <2 x i64>
    775 // CHECK-LE: or <2 x i64>
    776 // CHECK-LE: xor <2 x i64>
    777 
    778   res_vull = vec_nor(vbll, vbll);
    779 // CHECK: or <2 x i64>
    780 // CHECK: xor <2 x i64>
    781 // CHECK-LE: or <2 x i64>
    782 // CHECK-LE: xor <2 x i64>
    783 
    784   res_vd = vec_nor(vd, vd);
    785 // CHECK: bitcast <2 x double> %{{[0-9]+}} to <2 x i64>
    786 // CHECK: [[OR:%.+]] = or <2 x i64> %{{[0-9]+}}, %{{[0-9]+}}
    787 // CHECK-NEXT: xor <2 x i64> [[OR]], <i64 -1, i64 -1>
    788 // CHECK-LE: bitcast <2 x double> %{{[0-9]+}} to <2 x i64>
    789 // CHECK-LE: [[OR:%.+]] = or <2 x i64> %{{[0-9]+}}, %{{[0-9]+}}
    790 // CHECK-LE-NEXT: xor <2 x i64> [[OR]], <i64 -1, i64 -1>
    791 
    792   /* vec_or */
    793   res_vsll = vec_or(vsll, vsll);
    794 // CHECK: or <2 x i64>
    795 // CHECK-LE: or <2 x i64>
    796 
    797   res_vsll = vec_or(vbll, vsll);
    798 // CHECK: or <2 x i64>
    799 // CHECK-LE: or <2 x i64>
    800 
    801   res_vsll = vec_or(vsll, vbll);
    802 // CHECK: or <2 x i64>
    803 // CHECK-LE: or <2 x i64>
    804 
    805   res_vull = vec_or(vull, vull);
    806 // CHECK: or <2 x i64>
    807 // CHECK-LE: or <2 x i64>
    808 
    809   res_vull = vec_or(vbll, vull);
    810 // CHECK: or <2 x i64>
    811 // CHECK-LE: or <2 x i64>
    812 
    813   res_vull = vec_or(vull, vbll);
    814 // CHECK: or <2 x i64>
    815 // CHECK-LE: or <2 x i64>
    816 
    817   res_vbll = vec_or(vbll, vbll);
    818 // CHECK: or <2 x i64>
    819 // CHECK-LE: or <2 x i64>
    820 
    821   res_vd = vec_or(vd, vd);
    822 // CHECK: bitcast <2 x double> %{{[0-9]+}} to <2 x i64>
    823 // CHECK: or <2 x i64> %{{[0-9]+}}, %{{[0-9]+}}
    824 // CHECK-LE: bitcast <2 x double> %{{[0-9]+}} to <2 x i64>
    825 // CHECK-LE: or <2 x i64> %{{[0-9]+}}, %{{[0-9]+}}
    826 
    827   res_vd = vec_or(vbll, vd);
    828 // CHECK: [[T1:%.+]] = bitcast <2 x double> %{{[0-9]+}} to <2 x i64>
    829 // CHECK: [[T2:%.+]] = or <2 x i64> %{{[0-9]+}}, [[T1]]
    830 // CHECK: bitcast <2 x i64> [[T2]] to <2 x double>
    831 // CHECK-LE: [[T1:%.+]] = bitcast <2 x double> %{{[0-9]+}} to <2 x i64>
    832 // CHECK-LE: [[T2:%.+]] = or <2 x i64> %{{[0-9]+}}, [[T1]]
    833 // CHECK-LE: bitcast <2 x i64> [[T2]] to <2 x double>
    834 
    835   res_vd = vec_or(vd, vbll);
    836 // CHECK: [[T1:%.+]] = bitcast <2 x double> %{{[0-9]+}} to <2 x i64>
    837 // CHECK: [[T2:%.+]] = or <2 x i64> [[T1]], %{{[0-9]+}}
    838 // CHECK: bitcast <2 x i64> [[T2]] to <2 x double>
    839 // CHECK-LE: [[T1:%.+]] = bitcast <2 x double> %{{[0-9]+}} to <2 x i64>
    840 // CHECK-LE: [[T2:%.+]] = or <2 x i64> [[T1]], %{{[0-9]+}}
    841 // CHECK-LE: bitcast <2 x i64> [[T2]] to <2 x double>
    842 
    843   res_vf = vec_re(vf);
    844 // CHECK: call <4 x float> @llvm.ppc.vsx.xvresp(<4 x float>
    845 // CHECK-LE: call <4 x float> @llvm.ppc.vsx.xvresp(<4 x float>
    846 
    847   res_vd = vec_re(vd);
    848 // CHECK: call <2 x double> @llvm.ppc.vsx.xvredp(<2 x double>
    849 // CHECK-LE: call <2 x double> @llvm.ppc.vsx.xvredp(<2 x double>
    850 
    851   res_vf = vec_rint(vf);
    852 // CHECK: call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %{{[0-9]+}})
    853 // CHECK-LE: call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %{{[0-9]+}})
    854 
    855   res_vd = vec_rint(vd);
    856 // CHECK: call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %{{[0-9]+}})
    857 // CHECK-LE: call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %{{[0-9]+}})
    858 
    859   res_vf = vec_rsqrte(vf);
    860 // CHECK: call <4 x float> @llvm.ppc.vsx.xvrsqrtesp(<4 x float> %{{[0-9]+}})
    861 // CHECK-LE: call <4 x float> @llvm.ppc.vsx.xvrsqrtesp(<4 x float> %{{[0-9]+}})
    862 
    863   res_vd = vec_rsqrte(vd);
    864 // CHECK: call <2 x double> @llvm.ppc.vsx.xvrsqrtedp(<2 x double> %{{[0-9]+}})
    865 // CHECK-LE: call <2 x double> @llvm.ppc.vsx.xvrsqrtedp(<2 x double> %{{[0-9]+}})
    866 
    867   dummy();
    868 // CHECK: call void @dummy()
    869 // CHECK-LE: call void @dummy()
    870 
    871   res_vf = vec_sel(vd, vd, vbll);
    872 // CHECK: xor <2 x i64> %{{[0-9]+}}, <i64 -1, i64 -1>
    873 // CHECK: and <2 x i64> %{{[0-9]+}},
    874 // CHECK: and <2 x i64> %{{[0-9]+}}, %{{[0-9]+}}
    875 // CHECK: or <2 x i64>
    876 // CHECK: bitcast <2 x i64> %{{[0-9]+}} to <2 x double>
    877 // CHECK-LE: xor <2 x i64> %{{[0-9]+}}, <i64 -1, i64 -1>
    878 // CHECK-LE: and <2 x i64> %{{[0-9]+}},
    879 // CHECK-LE: and <2 x i64> %{{[0-9]+}}, %{{[0-9]+}}
    880 // CHECK-LE: or <2 x i64>
    881 // CHECK-LE: bitcast <2 x i64> %{{[0-9]+}} to <2 x double>
    882 
    883   dummy();
    884 // CHECK: call void @dummy()
    885 // CHECK-LE: call void @dummy()
    886 
    887   res_vd = vec_sel(vd, vd, vull);
    888 // CHECK: xor <2 x i64> %{{[0-9]+}}, <i64 -1, i64 -1>
    889 // CHECK: and <2 x i64> %{{[0-9]+}},
    890 // CHECK: and <2 x i64> %{{[0-9]+}}, %{{[0-9]+}}
    891 // CHECK: or <2 x i64>
    892 // CHECK: bitcast <2 x i64> %{{[0-9]+}} to <2 x double>
    893 // CHECK-LE: xor <2 x i64> %{{[0-9]+}}, <i64 -1, i64 -1>
    894 // CHECK-LE: and <2 x i64> %{{[0-9]+}},
    895 // CHECK-LE: and <2 x i64> %{{[0-9]+}}, %{{[0-9]+}}
    896 // CHECK-LE: or <2 x i64>
    897 // CHECK-LE: bitcast <2 x i64> %{{[0-9]+}} to <2 x double>
    898 
    899   res_vf = vec_sqrt(vf);
    900 // CHECK: call <4 x float> @llvm.sqrt.v4f32(<4 x float> %{{[0-9]+}})
    901 // CHECK-LE: call <4 x float> @llvm.sqrt.v4f32(<4 x float> %{{[0-9]+}})
    902 
    903   res_vd = vec_sqrt(vd);
    904 // CHECK: call <2 x double> @llvm.sqrt.v2f64(<2 x double> %{{[0-9]+}})
    905 // CHECK-LE: call <2 x double> @llvm.sqrt.v2f64(<2 x double> %{{[0-9]+}})
    906 
    907   res_vd = vec_sub(vd, vd);
    908 // CHECK: fsub <2 x double> %{{[0-9]+}}, %{{[0-9]+}}
    909 // CHECK-LE: fsub <2 x double> %{{[0-9]+}}, %{{[0-9]+}}
    910 
    911   res_vf = vec_trunc(vf);
    912 // CHECK: call <4 x float> @llvm.trunc.v4f32(<4 x float> %{{[0-9]+}})
    913 // CHECK-LE: call <4 x float> @llvm.trunc.v4f32(<4 x float> %{{[0-9]+}})
    914 
    915   res_vd = vec_trunc(vd);
    916 // CHECK: call <2 x double> @llvm.trunc.v2f64(<2 x double> %{{[0-9]+}})
    917 // CHECK-LE: call <2 x double> @llvm.trunc.v2f64(<2 x double> %{{[0-9]+}})
    918 
    919   /* vec_vor */
    920   res_vsll = vec_vor(vsll, vsll);
    921 // CHECK: or <2 x i64>
    922 // CHECK-LE: or <2 x i64>
    923 
    924   res_vsll = vec_vor(vbll, vsll);
    925 // CHECK: or <2 x i64>
    926 // CHECK-LE: or <2 x i64>
    927 
    928   res_vsll = vec_vor(vsll, vbll);
    929 // CHECK: or <2 x i64>
    930 // CHECK-LE: or <2 x i64>
    931 
    932   res_vull = vec_vor(vull, vull);
    933 // CHECK: or <2 x i64>
    934 // CHECK-LE: or <2 x i64>
    935 
    936   res_vull = vec_vor(vbll, vull);
    937 // CHECK: or <2 x i64>
    938 // CHECK-LE: or <2 x i64>
    939 
    940   res_vull = vec_vor(vull, vbll);
    941 // CHECK: or <2 x i64>
    942 // CHECK-LE: or <2 x i64>
    943 
    944   res_vbll = vec_vor(vbll, vbll);
    945 // CHECK: or <2 x i64>
    946 // CHECK-LE: or <2 x i64>
    947 
    948   /* vec_xor */
    949   res_vsll = vec_xor(vsll, vsll);
    950 // CHECK: xor <2 x i64>
    951 // CHECK-LE: xor <2 x i64>
    952 
    953   res_vsll = vec_xor(vbll, vsll);
    954 // CHECK: xor <2 x i64>
    955 // CHECK-LE: xor <2 x i64>
    956 
    957   res_vsll = vec_xor(vsll, vbll);
    958 // CHECK: xor <2 x i64>
    959 // CHECK-LE: xor <2 x i64>
    960 
    961   res_vull = vec_xor(vull, vull);
    962 // CHECK: xor <2 x i64>
    963 // CHECK-LE: xor <2 x i64>
    964 
    965   res_vull = vec_xor(vbll, vull);
    966 // CHECK: xor <2 x i64>
    967 // CHECK-LE: xor <2 x i64>
    968 
    969   res_vull = vec_xor(vull, vbll);
    970 // CHECK: xor <2 x i64>
    971 // CHECK-LE: xor <2 x i64>
    972 
    973   res_vbll = vec_xor(vbll, vbll);
    974 // CHECK: xor <2 x i64>
    975 // CHECK-LE: xor <2 x i64>
    976 
    977   dummy();
    978 // CHECK: call void @dummy()
    979 // CHECK-LE: call void @dummy()
    980 
    981   res_vd = vec_xor(vd, vd);
    982 // CHECK: [[X1:%.+]] = xor <2 x i64> %{{[0-9]+}}, %{{[0-9]+}}
    983 // CHECK: bitcast <2 x i64> [[X1]] to <2 x double>
    984 // CHECK-LE: [[X1:%.+]] = xor <2 x i64> %{{[0-9]+}}, %{{[0-9]+}}
    985 // CHECK-LE: bitcast <2 x i64> [[X1]] to <2 x double>
    986 
    987   dummy();
    988 // CHECK: call void @dummy()
    989 // CHECK-LE: call void @dummy()
    990 
    991   res_vd = vec_xor(vd, vbll);
    992 // CHECK: [[X1:%.+]] = xor <2 x i64> %{{[0-9]+}}, %{{[0-9]+}}
    993 // CHECK: bitcast <2 x i64> [[X1]] to <2 x double>
    994 // CHECK-LE: [[X1:%.+]] = xor <2 x i64> %{{[0-9]+}}, %{{[0-9]+}}
    995 // CHECK-LE: bitcast <2 x i64> [[X1]] to <2 x double>
    996 
    997   dummy();
    998 // CHECK: call void @dummy()
    999 // CHECK-LE: call void @dummy()
   1000 
   1001   res_vd = vec_xor(vbll, vd);
   1002 // CHECK: [[X1:%.+]] = xor <2 x i64> %{{[0-9]+}}, %{{[0-9]+}}
   1003 // CHECK: bitcast <2 x i64> [[X1]] to <2 x double>
   1004 // CHECK-LE: [[X1:%.+]] = xor <2 x i64> %{{[0-9]+}}, %{{[0-9]+}}
   1005 // CHECK-LE: bitcast <2 x i64> [[X1]] to <2 x double>
   1006 
   1007   /* vec_vxor */
   1008   res_vsll = vec_vxor(vsll, vsll);
   1009 // CHECK: xor <2 x i64>
   1010 // CHECK-LE: xor <2 x i64>
   1011 
   1012   res_vsll = vec_vxor(vbll, vsll);
   1013 // CHECK: xor <2 x i64>
   1014 // CHECK-LE: xor <2 x i64>
   1015 
   1016   res_vsll = vec_vxor(vsll, vbll);
   1017 // CHECK: xor <2 x i64>
   1018 // CHECK-LE: xor <2 x i64>
   1019 
   1020   res_vull = vec_vxor(vull, vull);
   1021 // CHECK: xor <2 x i64>
   1022 // CHECK-LE: xor <2 x i64>
   1023 
   1024   res_vull = vec_vxor(vbll, vull);
   1025 // CHECK: xor <2 x i64>
   1026 // CHECK-LE: xor <2 x i64>
   1027 
   1028   res_vull = vec_vxor(vull, vbll);
   1029 // CHECK: xor <2 x i64>
   1030 // CHECK-LE: xor <2 x i64>
   1031 
   1032   res_vbll = vec_vxor(vbll, vbll);
   1033 // CHECK: xor <2 x i64>
   1034 // CHECK-LE: xor <2 x i64>
   1035 
   1036   res_vsll = vec_cts(vd, 0);
   1037 // CHECK: fmul <2 x double>
   1038 // CHECK: fptosi <2 x double> %{{.*}} to <2 x i64>
   1039 // CHECK-LE: fmul <2 x double>
   1040 // CHECK-LE: fptosi <2 x double> %{{.*}} to <2 x i64>
   1041 
   1042   res_vsll = vec_cts(vd, 31);
   1043 // CHECK: fmul <2 x double>
   1044 // CHECK: fptosi <2 x double> %{{.*}} to <2 x i64>
   1045 // CHECK-LE: fmul <2 x double>
   1046 // CHECK-LE: fptosi <2 x double> %{{.*}} to <2 x i64>
   1047 
   1048   res_vsll = vec_ctu(vd, 0);
   1049 // CHECK: fmul <2 x double>
   1050 // CHECK: fptoui <2 x double> %{{.*}} to <2 x i64>
   1051 // CHECK-LE: fmul <2 x double>
   1052 // CHECK-LE: fptoui <2 x double> %{{.*}} to <2 x i64>
   1053 
   1054   res_vsll = vec_ctu(vd, 31);
   1055 // CHECK: fmul <2 x double>
   1056 // CHECK: fptoui <2 x double> %{{.*}} to <2 x i64>
   1057 // CHECK-LE: fmul <2 x double>
   1058 // CHECK-LE: fptoui <2 x double> %{{.*}} to <2 x i64>
   1059 
   1060   res_vd = vec_ctf(vsll, 0);
   1061 // CHECK: sitofp <2 x i64> %{{.*}} to <2 x double>
   1062 // CHECK: fmul <2 x double>
   1063 // CHECK-LE: sitofp <2 x i64> %{{.*}} to <2 x double>
   1064 // CHECK-LE: fmul <2 x double>
   1065 
   1066   res_vd = vec_ctf(vsll, 31);
   1067 // CHECK: sitofp <2 x i64> %{{.*}} to <2 x double>
   1068 // CHECK: fmul <2 x double>
   1069 // CHECK-LE: sitofp <2 x i64> %{{.*}} to <2 x double>
   1070 // CHECK-LE: fmul <2 x double>
   1071 
   1072   res_vd = vec_ctf(vull, 0);
   1073 // CHECK: uitofp <2 x i64> %{{.*}} to <2 x double>
   1074 // CHECK: fmul <2 x double>
   1075 // CHECK-LE: uitofp <2 x i64> %{{.*}} to <2 x double>
   1076 // CHECK-LE: fmul <2 x double>
   1077 
   1078   res_vd = vec_ctf(vull, 31);
   1079 // CHECK: uitofp <2 x i64> %{{.*}} to <2 x double>
   1080 // CHECK: fmul <2 x double>
   1081 // CHECK-LE: uitofp <2 x i64> %{{.*}} to <2 x double>
   1082 // CHECK-LE: fmul <2 x double>
   1083 }
   1084