Home | History | Annotate | Download | only in CodeGen
      1 // RUN: %clang_cc1 -triple s390x-linux-gnu -target-cpu z13 -fzvector \
      2 // RUN:  -O -emit-llvm -o - -W -Wall -Werror %s | FileCheck %s
      3 
      4 volatile vector signed char sc, sc2;
      5 volatile vector unsigned char uc, uc2;
      6 volatile vector bool char bc, bc2;
      7 
      8 volatile vector signed short ss, ss2;
      9 volatile vector unsigned short us, us2;
     10 volatile vector bool short bs, bs2;
     11 
     12 volatile vector signed int si, si2;
     13 volatile vector unsigned int ui, ui2;
     14 volatile vector bool int bi, bi2;
     15 
     16 volatile vector signed long long sl, sl2;
     17 volatile vector unsigned long long ul, ul2;
     18 volatile vector bool long long bl, bl2;
     19 
     20 volatile vector double fd, fd2;
     21 
     22 volatile int cnt;
     23 
     24 void test_assign (void)
     25 {
     26 // CHECK-LABEL: test_assign
     27 
     28 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
     29 // CHECK: store volatile <16 x i8> [[VAL]], <16 x i8>* @sc
     30   sc = sc2;
     31 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
     32 // CHECK: store volatile <16 x i8> [[VAL]], <16 x i8>* @uc
     33   uc = uc2;
     34 
     35 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
     36 // CHECK: store volatile <8 x i16> [[VAL]], <8 x i16>* @ss
     37   ss = ss2;
     38 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
     39 // CHECK: store volatile <8 x i16> [[VAL]], <8 x i16>* @us
     40   us = us2;
     41 
     42 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
     43 // CHECK: store volatile <4 x i32> [[VAL]], <4 x i32>* @si
     44   si = si2;
     45 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
     46 // CHECK: store volatile <4 x i32> [[VAL]], <4 x i32>* @ui
     47   ui = ui2;
     48 
     49 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
     50 // CHECK: store volatile <2 x i64> [[VAL]], <2 x i64>* @sl
     51   sl = sl2;
     52 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
     53 // CHECK: store volatile <2 x i64> [[VAL]], <2 x i64>* @ul
     54   ul = ul2;
     55 
     56 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
     57 // CHECK: store volatile <2 x double> [[VAL]], <2 x double>* @fd
     58   fd = fd2;
     59 }
     60 
     61 void test_pos (void)
     62 {
     63 // CHECK-LABEL: test_pos
     64 
     65 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
     66 // CHECK: store volatile <16 x i8> [[VAL]], <16 x i8>* @sc
     67   sc = +sc2;
     68 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
     69 // CHECK: store volatile <16 x i8> [[VAL]], <16 x i8>* @uc
     70   uc = +uc2;
     71 
     72 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
     73 // CHECK: store volatile <8 x i16> [[VAL]], <8 x i16>* @ss
     74   ss = +ss2;
     75 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
     76 // CHECK: store volatile <8 x i16> [[VAL]], <8 x i16>* @us
     77   us = +us2;
     78 
     79 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
     80 // CHECK: store volatile <4 x i32> [[VAL]], <4 x i32>* @si
     81   si = +si2;
     82 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
     83 // CHECK: store volatile <4 x i32> [[VAL]], <4 x i32>* @ui
     84   ui = +ui2;
     85 
     86 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
     87 // CHECK: store volatile <2 x i64> [[VAL]], <2 x i64>* @sl
     88   sl = +sl2;
     89 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
     90 // CHECK: store volatile <2 x i64> [[VAL]], <2 x i64>* @ul
     91   ul = +ul2;
     92 
     93 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
     94 // CHECK: store volatile <2 x double> [[VAL]], <2 x double>* @fd
     95   fd = +fd2;
     96 }
     97 
     98 void test_neg (void)
     99 {
    100 // CHECK-LABEL: test_neg
    101 
    102 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    103 // CHECK: %{{.*}} = sub <16 x i8> zeroinitializer, [[VAL]]
    104   sc = -sc2;
    105 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    106 // CHECK: %{{.*}} = sub <8 x i16> zeroinitializer, [[VAL]]
    107   ss = -ss2;
    108 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
    109 // CHECK: %{{.*}} = sub <4 x i32> zeroinitializer, [[VAL]]
    110   si = -si2;
    111 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
    112 // CHECK: %{{.*}} = sub <2 x i64> zeroinitializer, [[VAL]]
    113   sl = -sl2;
    114 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
    115 // CHECK: %{{.*}} = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, [[VAL]]
    116   fd = -fd2;
    117 }
    118 
    119 void test_preinc (void)
    120 {
    121 // CHECK-LABEL: test_preinc
    122 
    123 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    124 // CHECK: %{{.*}} = add <16 x i8> [[VAL]], <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
    125   ++sc2;
    126 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
    127 // CHECK: %{{.*}} = add <16 x i8> [[VAL]], <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
    128   ++uc2;
    129 
    130 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    131 // CHECK: %{{.*}} = add <8 x i16> [[VAL]], <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
    132   ++ss2;
    133 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
    134 // CHECK: %{{.*}} = add <8 x i16> [[VAL]], <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
    135   ++us2;
    136 
    137 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
    138 // CHECK: %{{.*}} = add <4 x i32> [[VAL]], <i32 1, i32 1, i32 1, i32 1>
    139   ++si2;
    140 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
    141 // CHECK: %{{.*}} = add <4 x i32> [[VAL]], <i32 1, i32 1, i32 1, i32 1>
    142   ++ui2;
    143 
    144 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
    145 // CHECK: %{{.*}} = add <2 x i64> [[VAL]], <i64 1, i64 1>
    146   ++sl2;
    147 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
    148 // CHECK: %{{.*}} = add <2 x i64> [[VAL]], <i64 1, i64 1>
    149   ++ul2;
    150 
    151 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
    152 // CHECK: %{{.*}} = fadd <2 x double> [[VAL]], <double 1.000000e+00, double 1.000000e+00>
    153   ++fd2;
    154 }
    155 
    156 void test_postinc (void)
    157 {
    158 // CHECK-LABEL: test_postinc
    159 
    160 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    161 // CHECK: %{{.*}} = add <16 x i8> [[VAL]], <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
    162   sc2++;
    163 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
    164 // CHECK: %{{.*}} = add <16 x i8> [[VAL]], <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
    165   uc2++;
    166 
    167 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    168 // CHECK: %{{.*}} = add <8 x i16> [[VAL]], <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
    169   ss2++;
    170 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
    171 // CHECK: %{{.*}} = add <8 x i16> [[VAL]], <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
    172   us2++;
    173 
    174 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
    175 // CHECK: %{{.*}} = add <4 x i32> [[VAL]], <i32 1, i32 1, i32 1, i32 1>
    176   si2++;
    177 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
    178 // CHECK: %{{.*}} = add <4 x i32> [[VAL]], <i32 1, i32 1, i32 1, i32 1>
    179   ui2++;
    180 
    181 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
    182 // CHECK: %{{.*}} = add <2 x i64> [[VAL]], <i64 1, i64 1>
    183   sl2++;
    184 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
    185 // CHECK: %{{.*}} = add <2 x i64> [[VAL]], <i64 1, i64 1>
    186   ul2++;
    187 
    188 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
    189 // CHECK: %{{.*}} = fadd <2 x double> [[VAL]], <double 1.000000e+00, double 1.000000e+00>
    190   fd2++;
    191 }
    192 
    193 void test_predec (void)
    194 {
    195 // CHECK-LABEL: test_predec
    196 
    197 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    198 // CHECK: %{{.*}} = add <16 x i8> [[VAL]], <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
    199   --sc2;
    200 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
    201 // CHECK: %{{.*}} = add <16 x i8> [[VAL]], <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
    202   --uc2;
    203 
    204 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    205 // CHECK: %{{.*}} = add <8 x i16> [[VAL]], <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
    206   --ss2;
    207 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
    208 // CHECK: %{{.*}} = add <8 x i16> [[VAL]], <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
    209   --us2;
    210 
    211 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
    212 // CHECK: %{{.*}} = add <4 x i32> [[VAL]], <i32 -1, i32 -1, i32 -1, i32 -1>
    213   --si2;
    214 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
    215 // CHECK: %{{.*}} = add <4 x i32> [[VAL]], <i32 -1, i32 -1, i32 -1, i32 -1>
    216   --ui2;
    217 
    218 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
    219 // CHECK: %{{.*}} = add <2 x i64> [[VAL]], <i64 -1, i64 -1>
    220   --sl2;
    221 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
    222 // CHECK: %{{.*}} = add <2 x i64> [[VAL]], <i64 -1, i64 -1>
    223   --ul2;
    224 
    225 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
    226 // CHECK: %{{.*}} = fadd <2 x double> [[VAL]], <double -1.000000e+00, double -1.000000e+00>
    227   --fd2;
    228 }
    229 
    230 void test_postdec (void)
    231 {
    232 // CHECK-LABEL: test_postdec
    233 
    234 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    235 // CHECK: %{{.*}} = add <16 x i8> [[VAL]], <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
    236   sc2--;
    237 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
    238 // CHECK: %{{.*}} = add <16 x i8> [[VAL]], <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
    239   uc2--;
    240 
    241 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    242 // CHECK: %{{.*}} = add <8 x i16> [[VAL]], <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
    243   ss2--;
    244 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
    245 // CHECK: %{{.*}} = add <8 x i16> [[VAL]], <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
    246   us2--;
    247 
    248 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
    249 // CHECK: %{{.*}} = add <4 x i32> [[VAL]], <i32 -1, i32 -1, i32 -1, i32 -1>
    250   si2--;
    251 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
    252 // CHECK: %{{.*}} = add <4 x i32> [[VAL]], <i32 -1, i32 -1, i32 -1, i32 -1>
    253   ui2--;
    254 
    255 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
    256 // CHECK: %{{.*}} = add <2 x i64> [[VAL]], <i64 -1, i64 -1>
    257   sl2--;
    258 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
    259 // CHECK: %{{.*}} = add <2 x i64> [[VAL]], <i64 -1, i64 -1>
    260   ul2--;
    261 
    262 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
    263 // CHECK: %{{.*}} = fadd <2 x double> [[VAL]], <double -1.000000e+00, double -1.000000e+00>
    264   fd2--;
    265 }
    266 
    267 void test_add (void)
    268 {
    269 // CHECK-LABEL: test_add
    270 
    271 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
    272 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    273 // CHECK: %{{.*}} = add <16 x i8> [[VAL2]], [[VAL1]]
    274   sc = sc + sc2;
    275 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
    276 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
    277 // CHECK: %{{.*}} = add <16 x i8> [[VAL2]], [[VAL1]]
    278   sc = sc + bc2;
    279 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
    280 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    281 // CHECK: %{{.*}} = add <16 x i8> [[VAL2]], [[VAL1]]
    282   sc = bc + sc2;
    283 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
    284 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
    285 // CHECK: %{{.*}} = add <16 x i8> [[VAL2]], [[VAL1]]
    286   uc = uc + uc2;
    287 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
    288 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
    289 // CHECK: %{{.*}} = add <16 x i8> [[VAL2]], [[VAL1]]
    290   uc = uc + bc2;
    291 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
    292 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
    293 // CHECK: %{{.*}} = add <16 x i8> [[VAL2]], [[VAL1]]
    294   uc = bc + uc2;
    295 
    296 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
    297 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    298 // CHECK: %{{.*}} = add <8 x i16> [[VAL2]], [[VAL1]]
    299   ss = ss + ss2;
    300 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
    301 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
    302 // CHECK: %{{.*}} = add <8 x i16> [[VAL2]], [[VAL1]]
    303   ss = ss + bs2;
    304 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
    305 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    306 // CHECK: %{{.*}} = add <8 x i16> [[VAL2]], [[VAL1]]
    307   ss = bs + ss2;
    308 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
    309 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
    310 // CHECK: %{{.*}} = add <8 x i16> [[VAL2]], [[VAL1]]
    311   us = us + us2;
    312 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
    313 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
    314 // CHECK: %{{.*}} = add <8 x i16> [[VAL2]], [[VAL1]]
    315   us = us + bs2;
    316 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
    317 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
    318 // CHECK: %{{.*}} = add <8 x i16> [[VAL2]], [[VAL1]]
    319   us = bs + us2;
    320 
    321 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
    322 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
    323 // CHECK: %{{.*}} = add <4 x i32> [[VAL2]], [[VAL1]]
    324   si = si + si2;
    325 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
    326 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
    327 // CHECK: %{{.*}} = add <4 x i32> [[VAL2]], [[VAL1]]
    328   si = si + bi2;
    329 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
    330 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
    331 // CHECK: %{{.*}} = add <4 x i32> [[VAL2]], [[VAL1]]
    332   si = bi + si2;
    333 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
    334 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
    335 // CHECK: %{{.*}} = add <4 x i32> [[VAL2]], [[VAL1]]
    336   ui = ui + ui2;
    337 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
    338 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
    339 // CHECK: %{{.*}} = add <4 x i32> [[VAL2]], [[VAL1]]
    340   ui = ui + bi2;
    341 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
    342 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
    343 // CHECK: %{{.*}} = add <4 x i32> [[VAL2]], [[VAL1]]
    344   ui = bi + ui2;
    345 
    346 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
    347 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
    348 // CHECK: %{{.*}} = add <2 x i64> [[VAL2]], [[VAL1]]
    349   sl = sl + sl2;
    350 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
    351 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
    352 // CHECK: %{{.*}} = add <2 x i64> [[VAL2]], [[VAL1]]
    353   sl = sl + bl2;
    354 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
    355 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
    356 // CHECK: %{{.*}} = add <2 x i64> [[VAL2]], [[VAL1]]
    357   sl = bl + sl2;
    358 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
    359 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
    360 // CHECK: %{{.*}} = add <2 x i64> [[VAL2]], [[VAL1]]
    361   ul = ul + ul2;
    362 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
    363 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
    364 // CHECK: %{{.*}} = add <2 x i64> [[VAL2]], [[VAL1]]
    365   ul = ul + bl2;
    366 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
    367 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
    368 // CHECK: %{{.*}} = add <2 x i64> [[VAL2]], [[VAL1]]
    369   ul = bl + ul2;
    370 
    371 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd
    372 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
    373 // CHECK: %{{.*}} = fadd <2 x double> [[VAL1]], [[VAL2]]
    374   fd = fd + fd2;
    375 }
    376 
    377 void test_add_assign (void)
    378 {
    379 // CHECK-LABEL: test_add_assign
    380 
    381 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    382 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
    383 // CHECK: %{{.*}} = add <16 x i8> [[VAL1]], [[VAL2]]
    384   sc += sc2;
    385 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
    386 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
    387 // CHECK: %{{.*}} = add <16 x i8> [[VAL1]], [[VAL2]]
    388   sc += bc2;
    389 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
    390 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
    391 // CHECK: %{{.*}} = add <16 x i8> [[VAL1]], [[VAL2]]
    392   uc += uc2;
    393 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
    394 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
    395 // CHECK: %{{.*}} = add <16 x i8> [[VAL1]], [[VAL2]]
    396   uc += bc2;
    397 
    398 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    399 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
    400 // CHECK: %{{.*}} = add <8 x i16> [[VAL1]], [[VAL2]]
    401   ss += ss2;
    402 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
    403 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
    404 // CHECK: %{{.*}} = add <8 x i16> [[VAL1]], [[VAL2]]
    405   ss += bs2;
    406 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
    407 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
    408 // CHECK: %{{.*}} = add <8 x i16> [[VAL1]], [[VAL2]]
    409   us += us2;
    410 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
    411 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
    412 // CHECK: %{{.*}} = add <8 x i16> [[VAL1]], [[VAL2]]
    413   us += bs2;
    414 
    415 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
    416 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
    417 // CHECK: %{{.*}} = add <4 x i32> [[VAL1]], [[VAL2]]
    418   si += si2;
    419 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
    420 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
    421 // CHECK: %{{.*}} = add <4 x i32> [[VAL1]], [[VAL2]]
    422   si += bi2;
    423 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
    424 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
    425 // CHECK: %{{.*}} = add <4 x i32> [[VAL1]], [[VAL2]]
    426   ui += ui2;
    427 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
    428 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
    429 // CHECK: %{{.*}} = add <4 x i32> [[VAL1]], [[VAL2]]
    430   ui += bi2;
    431 
    432 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
    433 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
    434 // CHECK: %{{.*}} = add <2 x i64> [[VAL1]], [[VAL2]]
    435   sl += sl2;
    436 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
    437 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
    438 // CHECK: %{{.*}} = add <2 x i64> [[VAL1]], [[VAL2]]
    439   sl += bl2;
    440 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
    441 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
    442 // CHECK: %{{.*}} = add <2 x i64> [[VAL1]], [[VAL2]]
    443   ul += ul2;
    444 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
    445 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
    446 // CHECK: %{{.*}} = add <2 x i64> [[VAL1]], [[VAL2]]
    447   ul += bl2;
    448 
    449 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
    450 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd
    451 // CHECK: %{{.*}} = fadd <2 x double> [[VAL2]], [[VAL1]]
    452   fd += fd2;
    453 }
    454 
    455 void test_sub (void)
    456 {
    457 // CHECK-LABEL: test_sub
    458 
    459 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
    460 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    461 // CHECK: %{{.*}} = sub <16 x i8> [[VAL1]], [[VAL2]]
    462   sc = sc - sc2;
    463 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
    464 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
    465 // CHECK: %{{.*}} = sub <16 x i8> [[VAL1]], [[VAL2]]
    466   sc = sc - bc2;
    467 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
    468 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    469 // CHECK: %{{.*}} = sub <16 x i8> [[VAL1]], [[VAL2]]
    470   sc = bc - sc2;
    471 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
    472 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
    473 // CHECK: %{{.*}} = sub <16 x i8> [[VAL1]], [[VAL2]]
    474   uc = uc - uc2;
    475 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
    476 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
    477 // CHECK: %{{.*}} = sub <16 x i8> [[VAL1]], [[VAL2]]
    478   uc = uc - bc2;
    479 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
    480 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
    481 // CHECK: %{{.*}} = sub <16 x i8> [[VAL1]], [[VAL2]]
    482   uc = bc - uc2;
    483 
    484 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
    485 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    486 // CHECK: %{{.*}} = sub <8 x i16> [[VAL1]], [[VAL2]]
    487   ss = ss - ss2;
    488 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
    489 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
    490 // CHECK: %{{.*}} = sub <8 x i16> [[VAL1]], [[VAL2]]
    491   ss = ss - bs2;
    492 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
    493 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    494 // CHECK: %{{.*}} = sub <8 x i16> [[VAL1]], [[VAL2]]
    495   ss = bs - ss2;
    496 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
    497 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
    498 // CHECK: %{{.*}} = sub <8 x i16> [[VAL1]], [[VAL2]]
    499   us = us - us2;
    500 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
    501 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
    502 // CHECK: %{{.*}} = sub <8 x i16> [[VAL1]], [[VAL2]]
    503   us = us - bs2;
    504 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
    505 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
    506 // CHECK: %{{.*}} = sub <8 x i16> [[VAL1]], [[VAL2]]
    507   us = bs - us2;
    508 
    509 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
    510 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
    511 // CHECK: %{{.*}} = sub <4 x i32> [[VAL1]], [[VAL2]]
    512   si = si - si2;
    513 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
    514 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
    515 // CHECK: %{{.*}} = sub <4 x i32> [[VAL1]], [[VAL2]]
    516   si = si - bi2;
    517 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
    518 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
    519 // CHECK: %{{.*}} = sub <4 x i32> [[VAL1]], [[VAL2]]
    520   si = bi - si2;
    521 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
    522 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
    523 // CHECK: %{{.*}} = sub <4 x i32> [[VAL1]], [[VAL2]]
    524   ui = ui - ui2;
    525 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
    526 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
    527 // CHECK: %{{.*}} = sub <4 x i32> [[VAL1]], [[VAL2]]
    528   ui = ui - bi2;
    529 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
    530 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
    531 // CHECK: %{{.*}} = sub <4 x i32> [[VAL1]], [[VAL2]]
    532   ui = bi - ui2;
    533 
    534 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
    535 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
    536 // CHECK: %{{.*}} = sub <2 x i64> [[VAL1]], [[VAL2]]
    537   sl = sl - sl2;
    538 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
    539 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
    540 // CHECK: %{{.*}} = sub <2 x i64> [[VAL1]], [[VAL2]]
    541   sl = sl - bl2;
    542 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
    543 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
    544 // CHECK: %{{.*}} = sub <2 x i64> [[VAL1]], [[VAL2]]
    545   sl = bl - sl2;
    546 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
    547 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
    548 // CHECK: %{{.*}} = sub <2 x i64> [[VAL1]], [[VAL2]]
    549   ul = ul - ul2;
    550 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
    551 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
    552 // CHECK: %{{.*}} = sub <2 x i64> [[VAL1]], [[VAL2]]
    553   ul = ul - bl2;
    554 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
    555 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
    556 // CHECK: %{{.*}} = sub <2 x i64> [[VAL1]], [[VAL2]]
    557   ul = bl - ul2;
    558 
    559 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd
    560 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
    561 // CHECK: %{{.*}} = fsub <2 x double> [[VAL1]], [[VAL2]]
    562   fd = fd - fd2;
    563 }
    564 
    565 void test_sub_assign (void)
    566 {
    567 // CHECK-LABEL: test_sub_assign
    568 
    569 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    570 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
    571 // CHECK: %{{.*}} = sub <16 x i8> [[VAL1]], [[VAL2]]
    572   sc -= sc2;
    573 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
    574 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
    575 // CHECK: %{{.*}} = sub <16 x i8> [[VAL1]], [[VAL2]]
    576   sc -= bc2;
    577 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
    578 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
    579 // CHECK: %{{.*}} = sub <16 x i8> [[VAL1]], [[VAL2]]
    580   uc -= uc2;
    581 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
    582 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
    583 // CHECK: %{{.*}} = sub <16 x i8> [[VAL1]], [[VAL2]]
    584   uc -= bc2;
    585 
    586 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    587 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
    588 // CHECK: %{{.*}} = sub <8 x i16> [[VAL1]], [[VAL2]]
    589   ss -= ss2;
    590 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
    591 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
    592 // CHECK: %{{.*}} = sub <8 x i16> [[VAL1]], [[VAL2]]
    593   ss -= bs2;
    594 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
    595 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
    596 // CHECK: %{{.*}} = sub <8 x i16> [[VAL1]], [[VAL2]]
    597   us -= us2;
    598 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
    599 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
    600 // CHECK: %{{.*}} = sub <8 x i16> [[VAL1]], [[VAL2]]
    601   us -= bs2;
    602 
    603 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
    604 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
    605 // CHECK: %{{.*}} = sub <4 x i32> [[VAL1]], [[VAL2]]
    606   si -= si2;
    607 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
    608 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
    609 // CHECK: %{{.*}} = sub <4 x i32> [[VAL1]], [[VAL2]]
    610   si -= bi2;
    611 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
    612 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
    613 // CHECK: %{{.*}} = sub <4 x i32> [[VAL1]], [[VAL2]]
    614   ui -= ui2;
    615 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
    616 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
    617 // CHECK: %{{.*}} = sub <4 x i32> [[VAL1]], [[VAL2]]
    618   ui -= bi2;
    619 
    620 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
    621 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
    622 // CHECK: %{{.*}} = sub <2 x i64> [[VAL1]], [[VAL2]]
    623   sl -= sl2;
    624 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
    625 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
    626 // CHECK: %{{.*}} = sub <2 x i64> [[VAL1]], [[VAL2]]
    627   sl -= bl2;
    628 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
    629 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
    630 // CHECK: %{{.*}} = sub <2 x i64> [[VAL1]], [[VAL2]]
    631   ul -= ul2;
    632 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
    633 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
    634 // CHECK: %{{.*}} = sub <2 x i64> [[VAL1]], [[VAL2]]
    635   ul -= bl2;
    636 
    637 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
    638 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd
    639 // CHECK: %{{.*}} = fsub <2 x double> [[VAL1]], [[VAL2]]
    640   fd -= fd2;
    641 }
    642 
    643 void test_mul (void)
    644 {
    645 // CHECK-LABEL: test_mul
    646 
    647 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
    648 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    649 // CHECK: %{{.*}} = mul <16 x i8> [[VAL2]], [[VAL1]]
    650   sc = sc * sc2;
    651 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
    652 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
    653 // CHECK: %{{.*}} = mul <16 x i8> [[VAL2]], [[VAL1]]
    654   uc = uc * uc2;
    655 
    656 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
    657 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    658 // CHECK: %{{.*}} = mul <8 x i16> [[VAL2]], [[VAL1]]
    659   ss = ss * ss2;
    660 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
    661 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
    662 // CHECK: %{{.*}} = mul <8 x i16> [[VAL2]], [[VAL1]]
    663   us = us * us2;
    664 
    665 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
    666 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
    667 // CHECK: %{{.*}} = mul <4 x i32> [[VAL2]], [[VAL1]]
    668   si = si * si2;
    669 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
    670 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
    671 // CHECK: %{{.*}} = mul <4 x i32> [[VAL2]], [[VAL1]]
    672   ui = ui * ui2;
    673 
    674 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
    675 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
    676 // CHECK: %{{.*}} = mul <2 x i64> [[VAL2]], [[VAL1]]
    677   sl = sl * sl2;
    678 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
    679 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
    680 // CHECK: %{{.*}} = mul <2 x i64> [[VAL2]], [[VAL1]]
    681   ul = ul * ul2;
    682 
    683 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd
    684 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
    685 // CHECK: %{{.*}} = fmul <2 x double> [[VAL1]], [[VAL2]]
    686   fd = fd * fd2;
    687 }
    688 
    689 void test_mul_assign (void)
    690 {
    691 // CHECK-LABEL: test_mul_assign
    692 
    693 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    694 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
    695 // CHECK: %{{.*}} = mul <16 x i8> [[VAL1]], [[VAL2]]
    696   sc *= sc2;
    697 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
    698 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
    699 // CHECK: %{{.*}} = mul <16 x i8> [[VAL1]], [[VAL2]]
    700   uc *= uc2;
    701 
    702 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    703 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
    704 // CHECK: %{{.*}} = mul <8 x i16> [[VAL1]], [[VAL2]]
    705   ss *= ss2;
    706 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
    707 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
    708 // CHECK: %{{.*}} = mul <8 x i16> [[VAL1]], [[VAL2]]
    709   us *= us2;
    710 
    711 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
    712 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
    713 // CHECK: %{{.*}} = mul <4 x i32> [[VAL1]], [[VAL2]]
    714   si *= si2;
    715 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
    716 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
    717 // CHECK: %{{.*}} = mul <4 x i32> [[VAL1]], [[VAL2]]
    718   ui *= ui2;
    719 
    720 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
    721 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
    722 // CHECK: %{{.*}} = mul <2 x i64> [[VAL1]], [[VAL2]]
    723   sl *= sl2;
    724 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
    725 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
    726 // CHECK: %{{.*}} = mul <2 x i64> [[VAL1]], [[VAL2]]
    727   ul *= ul2;
    728 
    729 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
    730 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd
    731 // CHECK: %{{.*}} = fmul <2 x double> [[VAL2]], [[VAL1]]
    732   fd *= fd2;
    733 }
    734 
    735 void test_div (void)
    736 {
    737 // CHECK-LABEL: test_div
    738 
    739 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
    740 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    741 // CHECK: %{{.*}} = sdiv <16 x i8> [[VAL1]], [[VAL2]]
    742   sc = sc / sc2;
    743 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
    744 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
    745 // CHECK: %{{.*}} = udiv <16 x i8> [[VAL1]], [[VAL2]]
    746   uc = uc / uc2;
    747 
    748 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
    749 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    750 // CHECK: %{{.*}} = sdiv <8 x i16> [[VAL1]], [[VAL2]]
    751   ss = ss / ss2;
    752 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
    753 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
    754 // CHECK: %{{.*}} = udiv <8 x i16> [[VAL1]], [[VAL2]]
    755   us = us / us2;
    756 
    757 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
    758 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
    759 // CHECK: %{{.*}} = sdiv <4 x i32> [[VAL1]], [[VAL2]]
    760   si = si / si2;
    761 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
    762 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
    763 // CHECK: %{{.*}} = udiv <4 x i32> [[VAL1]], [[VAL2]]
    764   ui = ui / ui2;
    765 
    766 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
    767 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
    768 // CHECK: %{{.*}} = sdiv <2 x i64> [[VAL1]], [[VAL2]]
    769   sl = sl / sl2;
    770 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
    771 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
    772 // CHECK: %{{.*}} = udiv <2 x i64> [[VAL1]], [[VAL2]]
    773   ul = ul / ul2;
    774 
    775 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd
    776 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
    777 // CHECK: %{{.*}} = fdiv <2 x double> [[VAL1]], [[VAL2]]
    778   fd = fd / fd2;
    779 }
    780 
    781 void test_div_assign (void)
    782 {
    783 // CHECK-LABEL: test_div_assign
    784 
    785 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    786 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
    787 // CHECK: %{{.*}} = sdiv <16 x i8> [[VAL1]], [[VAL2]]
    788   sc /= sc2;
    789 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
    790 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
    791 // CHECK: %{{.*}} = udiv <16 x i8> [[VAL1]], [[VAL2]]
    792   uc /= uc2;
    793 
    794 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    795 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
    796 // CHECK: %{{.*}} = sdiv <8 x i16> [[VAL1]], [[VAL2]]
    797   ss /= ss2;
    798 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
    799 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
    800 // CHECK: %{{.*}} = udiv <8 x i16> [[VAL1]], [[VAL2]]
    801   us /= us2;
    802 
    803 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
    804 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
    805 // CHECK: %{{.*}} = sdiv <4 x i32> [[VAL1]], [[VAL2]]
    806   si /= si2;
    807 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
    808 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
    809 // CHECK: %{{.*}} = udiv <4 x i32> [[VAL1]], [[VAL2]]
    810   ui /= ui2;
    811 
    812 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
    813 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
    814 // CHECK: %{{.*}} = sdiv <2 x i64> [[VAL1]], [[VAL2]]
    815   sl /= sl2;
    816 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
    817 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
    818 // CHECK: %{{.*}} = udiv <2 x i64> [[VAL1]], [[VAL2]]
    819   ul /= ul2;
    820 
    821 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
    822 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd
    823 // CHECK: %{{.*}} = fdiv <2 x double> [[VAL1]], [[VAL2]]
    824   fd /= fd2;
    825 }
    826 
    827 void test_rem (void)
    828 {
    829 // CHECK-LABEL: test_rem
    830 
    831 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
    832 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    833 // CHECK: %{{.*}} = srem <16 x i8> [[VAL1]], [[VAL2]]
    834   sc = sc % sc2;
    835 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
    836 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
    837 // CHECK: %{{.*}} = urem <16 x i8> [[VAL1]], [[VAL2]]
    838   uc = uc % uc2;
    839 
    840 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
    841 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    842 // CHECK: %{{.*}} = srem <8 x i16> [[VAL1]], [[VAL2]]
    843   ss = ss % ss2;
    844 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
    845 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
    846 // CHECK: %{{.*}} = urem <8 x i16> [[VAL1]], [[VAL2]]
    847   us = us % us2;
    848 
    849 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
    850 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
    851 // CHECK: %{{.*}} = srem <4 x i32> [[VAL1]], [[VAL2]]
    852   si = si % si2;
    853 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
    854 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
    855 // CHECK: %{{.*}} = urem <4 x i32> [[VAL1]], [[VAL2]]
    856   ui = ui % ui2;
    857 
    858 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
    859 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
    860 // CHECK: %{{.*}} = srem <2 x i64> [[VAL1]], [[VAL2]]
    861   sl = sl % sl2;
    862 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
    863 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
    864 // CHECK: %{{.*}} = urem <2 x i64> [[VAL1]], [[VAL2]]
    865   ul = ul % ul2;
    866 }
    867 
    868 void test_rem_assign (void)
    869 {
    870 // CHECK-LABEL: test_rem_assign
    871 
    872 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    873 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
    874 // CHECK: %{{.*}} = srem <16 x i8> [[VAL1]], [[VAL2]]
    875   sc %= sc2;
    876 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
    877 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
    878 // CHECK: %{{.*}} = urem <16 x i8> [[VAL1]], [[VAL2]]
    879   uc %= uc2;
    880 
    881 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    882 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
    883 // CHECK: %{{.*}} = srem <8 x i16> [[VAL1]], [[VAL2]]
    884   ss %= ss2;
    885 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
    886 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
    887 // CHECK: %{{.*}} = urem <8 x i16> [[VAL1]], [[VAL2]]
    888   us %= us2;
    889 
    890 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
    891 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
    892 // CHECK: %{{.*}} = srem <4 x i32> [[VAL1]], [[VAL2]]
    893   si %= si2;
    894 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
    895 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
    896 // CHECK: %{{.*}} = urem <4 x i32> [[VAL1]], [[VAL2]]
    897   ui %= ui2;
    898 
    899 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
    900 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
    901 // CHECK: %{{.*}} = srem <2 x i64> [[VAL1]], [[VAL2]]
    902   sl %= sl2;
    903 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
    904 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
    905 // CHECK: %{{.*}} = urem <2 x i64> [[VAL1]], [[VAL2]]
    906   ul %= ul2;
    907 }
    908 
    909 void test_not (void)
    910 {
    911 // CHECK-LABEL: test_not
    912 
    913 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    914 // CHECK: %{{.*}} = xor <16 x i8> [[VAL]], <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
    915   sc = ~sc2;
    916 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
    917 // CHECK: %{{.*}} = xor <16 x i8> [[VAL]], <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
    918   uc = ~uc2;
    919 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
    920 // CHECK: %{{.*}} = xor <16 x i8> [[VAL]], <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
    921   bc = ~bc2;
    922 
    923 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    924 // CHECK: %{{.*}} = xor <8 x i16> [[VAL]], <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
    925   ss = ~ss2;
    926 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
    927 // CHECK: %{{.*}} = xor <8 x i16> [[VAL]], <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
    928   us = ~us2;
    929 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
    930 // CHECK: %{{.*}} = xor <8 x i16> [[VAL]], <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
    931   bs = ~bs2;
    932 
    933 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
    934 // CHECK: %{{.*}} = xor <4 x i32> [[VAL]], <i32 -1, i32 -1, i32 -1, i32 -1>
    935   si = ~si2;
    936 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
    937 // CHECK: %{{.*}} = xor <4 x i32> [[VAL]], <i32 -1, i32 -1, i32 -1, i32 -1>
    938   ui = ~ui2;
    939 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
    940 // CHECK: %{{.*}} = xor <4 x i32> [[VAL]], <i32 -1, i32 -1, i32 -1, i32 -1>
    941   bi = ~bi2;
    942 
    943 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
    944 // CHECK: %{{.*}} = xor <2 x i64> [[VAL]], <i64 -1, i64 -1>
    945   sl = ~sl2;
    946 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
    947 // CHECK: %{{.*}} = xor <2 x i64> [[VAL]], <i64 -1, i64 -1>
    948   ul = ~ul2;
    949 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
    950 // CHECK: %{{.*}} = xor <2 x i64> [[VAL]], <i64 -1, i64 -1>
    951   bl = ~bl2;
    952 }
    953 
    954 void test_and (void)
    955 {
    956 // CHECK-LABEL: test_and
    957 
    958 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
    959 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    960 // CHECK: %{{.*}} = and <16 x i8> [[VAL2]], [[VAL1]]
    961   sc = sc & sc2;
    962 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
    963 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
    964 // CHECK: %{{.*}} = and <16 x i8> [[VAL2]], [[VAL1]]
    965   sc = sc & bc2;
    966 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
    967 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
    968 // CHECK: %{{.*}} = and <16 x i8> [[VAL2]], [[VAL1]]
    969   sc = bc & sc2;
    970 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
    971 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
    972 // CHECK: %{{.*}} = and <16 x i8> [[VAL2]], [[VAL1]]
    973   uc = uc & uc2;
    974 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
    975 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
    976 // CHECK: %{{.*}} = and <16 x i8> [[VAL2]], [[VAL1]]
    977   uc = uc & bc2;
    978 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
    979 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
    980 // CHECK: %{{.*}} = and <16 x i8> [[VAL2]], [[VAL1]]
    981   uc = bc & uc2;
    982 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
    983 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
    984 // CHECK: %{{.*}} = and <16 x i8> [[VAL2]], [[VAL1]]
    985   bc = bc & bc2;
    986 
    987 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
    988 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    989 // CHECK: %{{.*}} = and <8 x i16> [[VAL2]], [[VAL1]]
    990   ss = ss & ss2;
    991 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
    992 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
    993 // CHECK: %{{.*}} = and <8 x i16> [[VAL2]], [[VAL1]]
    994   ss = ss & bs2;
    995 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
    996 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
    997 // CHECK: %{{.*}} = and <8 x i16> [[VAL2]], [[VAL1]]
    998   ss = bs & ss2;
    999 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1000 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   1001 // CHECK: %{{.*}} = and <8 x i16> [[VAL2]], [[VAL1]]
   1002   us = us & us2;
   1003 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1004 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   1005 // CHECK: %{{.*}} = and <8 x i16> [[VAL2]], [[VAL1]]
   1006   us = us & bs2;
   1007 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   1008 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   1009 // CHECK: %{{.*}} = and <8 x i16> [[VAL2]], [[VAL1]]
   1010   us = bs & us2;
   1011 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   1012 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   1013 // CHECK: %{{.*}} = and <8 x i16> [[VAL2]], [[VAL1]]
   1014   bs = bs & bs2;
   1015 
   1016 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1017 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   1018 // CHECK: %{{.*}} = and <4 x i32> [[VAL2]], [[VAL1]]
   1019   si = si & si2;
   1020 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1021 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   1022 // CHECK: %{{.*}} = and <4 x i32> [[VAL2]], [[VAL1]]
   1023   si = si & bi2;
   1024 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   1025 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   1026 // CHECK: %{{.*}} = and <4 x i32> [[VAL2]], [[VAL1]]
   1027   si = bi & si2;
   1028 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1029 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   1030 // CHECK: %{{.*}} = and <4 x i32> [[VAL2]], [[VAL1]]
   1031   ui = ui & ui2;
   1032 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1033 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   1034 // CHECK: %{{.*}} = and <4 x i32> [[VAL2]], [[VAL1]]
   1035   ui = ui & bi2;
   1036 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   1037 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   1038 // CHECK: %{{.*}} = and <4 x i32> [[VAL2]], [[VAL1]]
   1039   ui = bi & ui2;
   1040 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   1041 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   1042 // CHECK: %{{.*}} = and <4 x i32> [[VAL2]], [[VAL1]]
   1043   bi = bi & bi2;
   1044 
   1045 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1046 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   1047 // CHECK: %{{.*}} = and <2 x i64> [[VAL2]], [[VAL1]]
   1048   sl = sl & sl2;
   1049 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1050 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   1051 // CHECK: %{{.*}} = and <2 x i64> [[VAL2]], [[VAL1]]
   1052   sl = sl & bl2;
   1053 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   1054 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   1055 // CHECK: %{{.*}} = and <2 x i64> [[VAL2]], [[VAL1]]
   1056   sl = bl & sl2;
   1057 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1058 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   1059 // CHECK: %{{.*}} = and <2 x i64> [[VAL2]], [[VAL1]]
   1060   ul = ul & ul2;
   1061 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1062 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   1063 // CHECK: %{{.*}} = and <2 x i64> [[VAL2]], [[VAL1]]
   1064   ul = ul & bl2;
   1065 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   1066 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   1067 // CHECK: %{{.*}} = and <2 x i64> [[VAL2]], [[VAL1]]
   1068   ul = bl & ul2;
   1069 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   1070 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   1071 // CHECK: %{{.*}} = and <2 x i64> [[VAL2]], [[VAL1]]
   1072   bl = bl & bl2;
   1073 }
   1074 
   1075 void test_and_assign (void)
   1076 {
   1077 // CHECK-LABEL: test_and_assign
   1078 
   1079 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   1080 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1081 // CHECK: %{{.*}} = and <16 x i8> [[VAL1]], [[VAL2]]
   1082   sc &= sc2;
   1083 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   1084 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1085 // CHECK: %{{.*}} = and <16 x i8> [[VAL1]], [[VAL2]]
   1086   sc &= bc2;
   1087 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   1088 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1089 // CHECK: %{{.*}} = and <16 x i8> [[VAL1]], [[VAL2]]
   1090   uc &= uc2;
   1091 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   1092 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1093 // CHECK: %{{.*}} = and <16 x i8> [[VAL1]], [[VAL2]]
   1094   uc &= bc2;
   1095 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   1096 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
   1097 // CHECK: %{{.*}} = and <16 x i8> [[VAL1]], [[VAL2]]
   1098   bc &= bc2;
   1099 
   1100 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   1101 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1102 // CHECK: %{{.*}} = and <8 x i16> [[VAL1]], [[VAL2]]
   1103   ss &= ss2;
   1104 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   1105 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1106 // CHECK: %{{.*}} = and <8 x i16> [[VAL1]], [[VAL2]]
   1107   ss &= bs2;
   1108 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   1109 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1110 // CHECK: %{{.*}} = and <8 x i16> [[VAL1]], [[VAL2]]
   1111   us &= us2;
   1112 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   1113 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1114 // CHECK: %{{.*}} = and <8 x i16> [[VAL1]], [[VAL2]]
   1115   us &= bs2;
   1116 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   1117 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   1118 // CHECK: %{{.*}} = and <8 x i16> [[VAL1]], [[VAL2]]
   1119   bs &= bs2;
   1120 
   1121 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   1122 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1123 // CHECK: %{{.*}} = and <4 x i32> [[VAL1]], [[VAL2]]
   1124   si &= si2;
   1125 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   1126 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1127 // CHECK: %{{.*}} = and <4 x i32> [[VAL1]], [[VAL2]]
   1128   si &= bi2;
   1129 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   1130 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1131 // CHECK: %{{.*}} = and <4 x i32> [[VAL1]], [[VAL2]]
   1132   ui &= ui2;
   1133 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   1134 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1135 // CHECK: %{{.*}} = and <4 x i32> [[VAL1]], [[VAL2]]
   1136   ui &= bi2;
   1137 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   1138 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   1139 // CHECK: %{{.*}} = and <4 x i32> [[VAL1]], [[VAL2]]
   1140   bi &= bi2;
   1141 
   1142 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   1143 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1144 // CHECK: %{{.*}} = and <2 x i64> [[VAL1]], [[VAL2]]
   1145   sl &= sl2;
   1146 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   1147 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1148 // CHECK: %{{.*}} = and <2 x i64> [[VAL1]], [[VAL2]]
   1149   sl &= bl2;
   1150 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   1151 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1152 // CHECK: %{{.*}} = and <2 x i64> [[VAL1]], [[VAL2]]
   1153   ul &= ul2;
   1154 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   1155 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1156 // CHECK: %{{.*}} = and <2 x i64> [[VAL1]], [[VAL2]]
   1157   ul &= bl2;
   1158 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   1159 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   1160 // CHECK: %{{.*}} = and <2 x i64> [[VAL1]], [[VAL2]]
   1161   bl &= bl2;
   1162 }
   1163 
   1164 void test_or (void)
   1165 {
   1166 // CHECK-LABEL: test_or
   1167 
   1168 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1169 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   1170 // CHECK: %{{.*}} = or <16 x i8> [[VAL2]], [[VAL1]]
   1171   sc = sc | sc2;
   1172 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1173 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   1174 // CHECK: %{{.*}} = or <16 x i8> [[VAL2]], [[VAL1]]
   1175   sc = sc | bc2;
   1176 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
   1177 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   1178 // CHECK: %{{.*}} = or <16 x i8> [[VAL2]], [[VAL1]]
   1179   sc = bc | sc2;
   1180 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1181 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   1182 // CHECK: %{{.*}} = or <16 x i8> [[VAL2]], [[VAL1]]
   1183   uc = uc | uc2;
   1184 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1185 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   1186 // CHECK: %{{.*}} = or <16 x i8> [[VAL2]], [[VAL1]]
   1187   uc = uc | bc2;
   1188 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
   1189 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   1190 // CHECK: %{{.*}} = or <16 x i8> [[VAL2]], [[VAL1]]
   1191   uc = bc | uc2;
   1192 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
   1193 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   1194 // CHECK: %{{.*}} = or <16 x i8> [[VAL2]], [[VAL1]]
   1195   bc = bc | bc2;
   1196 
   1197 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1198 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   1199 // CHECK: %{{.*}} = or <8 x i16> [[VAL2]], [[VAL1]]
   1200   ss = ss | ss2;
   1201 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1202 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   1203 // CHECK: %{{.*}} = or <8 x i16> [[VAL2]], [[VAL1]]
   1204   ss = ss | bs2;
   1205 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   1206 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   1207 // CHECK: %{{.*}} = or <8 x i16> [[VAL2]], [[VAL1]]
   1208   ss = bs | ss2;
   1209 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1210 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   1211 // CHECK: %{{.*}} = or <8 x i16> [[VAL2]], [[VAL1]]
   1212   us = us | us2;
   1213 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1214 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   1215 // CHECK: %{{.*}} = or <8 x i16> [[VAL2]], [[VAL1]]
   1216   us = us | bs2;
   1217 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   1218 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   1219 // CHECK: %{{.*}} = or <8 x i16> [[VAL2]], [[VAL1]]
   1220   us = bs | us2;
   1221 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   1222 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   1223 // CHECK: %{{.*}} = or <8 x i16> [[VAL2]], [[VAL1]]
   1224   bs = bs | bs2;
   1225 
   1226 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1227 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   1228 // CHECK: %{{.*}} = or <4 x i32> [[VAL2]], [[VAL1]]
   1229   si = si | si2;
   1230 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1231 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   1232 // CHECK: %{{.*}} = or <4 x i32> [[VAL2]], [[VAL1]]
   1233   si = si | bi2;
   1234 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   1235 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   1236 // CHECK: %{{.*}} = or <4 x i32> [[VAL2]], [[VAL1]]
   1237   si = bi | si2;
   1238 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1239 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   1240 // CHECK: %{{.*}} = or <4 x i32> [[VAL2]], [[VAL1]]
   1241   ui = ui | ui2;
   1242 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1243 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   1244 // CHECK: %{{.*}} = or <4 x i32> [[VAL2]], [[VAL1]]
   1245   ui = ui | bi2;
   1246 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   1247 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   1248 // CHECK: %{{.*}} = or <4 x i32> [[VAL2]], [[VAL1]]
   1249   ui = bi | ui2;
   1250 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   1251 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   1252 // CHECK: %{{.*}} = or <4 x i32> [[VAL2]], [[VAL1]]
   1253   bi = bi | bi2;
   1254 
   1255 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1256 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   1257 // CHECK: %{{.*}} = or <2 x i64> [[VAL2]], [[VAL1]]
   1258   sl = sl | sl2;
   1259 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1260 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   1261 // CHECK: %{{.*}} = or <2 x i64> [[VAL2]], [[VAL1]]
   1262   sl = sl | bl2;
   1263 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   1264 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   1265 // CHECK: %{{.*}} = or <2 x i64> [[VAL2]], [[VAL1]]
   1266   sl = bl | sl2;
   1267 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1268 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   1269 // CHECK: %{{.*}} = or <2 x i64> [[VAL2]], [[VAL1]]
   1270   ul = ul | ul2;
   1271 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1272 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   1273 // CHECK: %{{.*}} = or <2 x i64> [[VAL2]], [[VAL1]]
   1274   ul = ul | bl2;
   1275 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   1276 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   1277 // CHECK: %{{.*}} = or <2 x i64> [[VAL2]], [[VAL1]]
   1278   ul = bl | ul2;
   1279 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   1280 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   1281 // CHECK: %{{.*}} = or <2 x i64> [[VAL2]], [[VAL1]]
   1282   bl = bl | bl2;
   1283 }
   1284 
   1285 void test_or_assign (void)
   1286 {
   1287 // CHECK-LABEL: test_or_assign
   1288 
   1289 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   1290 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1291 // CHECK: %{{.*}} = or <16 x i8> [[VAL1]], [[VAL2]]
   1292   sc |= sc2;
   1293 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   1294 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1295 // CHECK: %{{.*}} = or <16 x i8> [[VAL1]], [[VAL2]]
   1296   sc |= bc2;
   1297 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   1298 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1299 // CHECK: %{{.*}} = or <16 x i8> [[VAL1]], [[VAL2]]
   1300   uc |= uc2;
   1301 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   1302 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1303 // CHECK: %{{.*}} = or <16 x i8> [[VAL1]], [[VAL2]]
   1304   uc |= bc2;
   1305 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   1306 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
   1307 // CHECK: %{{.*}} = or <16 x i8> [[VAL1]], [[VAL2]]
   1308   bc |= bc2;
   1309 
   1310 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   1311 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1312 // CHECK: %{{.*}} = or <8 x i16> [[VAL1]], [[VAL2]]
   1313   ss |= ss2;
   1314 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   1315 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1316 // CHECK: %{{.*}} = or <8 x i16> [[VAL1]], [[VAL2]]
   1317   ss |= bs2;
   1318 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   1319 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1320 // CHECK: %{{.*}} = or <8 x i16> [[VAL1]], [[VAL2]]
   1321   us |= us2;
   1322 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   1323 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1324 // CHECK: %{{.*}} = or <8 x i16> [[VAL1]], [[VAL2]]
   1325   us |= bs2;
   1326 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   1327 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   1328 // CHECK: %{{.*}} = or <8 x i16> [[VAL1]], [[VAL2]]
   1329   bs |= bs2;
   1330 
   1331 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   1332 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1333 // CHECK: %{{.*}} = or <4 x i32> [[VAL1]], [[VAL2]]
   1334   si |= si2;
   1335 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   1336 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1337 // CHECK: %{{.*}} = or <4 x i32> [[VAL1]], [[VAL2]]
   1338   si |= bi2;
   1339 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   1340 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1341 // CHECK: %{{.*}} = or <4 x i32> [[VAL1]], [[VAL2]]
   1342   ui |= ui2;
   1343 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   1344 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1345 // CHECK: %{{.*}} = or <4 x i32> [[VAL1]], [[VAL2]]
   1346   ui |= bi2;
   1347 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   1348 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   1349 // CHECK: %{{.*}} = or <4 x i32> [[VAL1]], [[VAL2]]
   1350   bi |= bi2;
   1351 
   1352 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   1353 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1354 // CHECK: %{{.*}} = or <2 x i64> [[VAL1]], [[VAL2]]
   1355   sl |= sl2;
   1356 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   1357 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1358 // CHECK: %{{.*}} = or <2 x i64> [[VAL1]], [[VAL2]]
   1359   sl |= bl2;
   1360 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   1361 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1362 // CHECK: %{{.*}} = or <2 x i64> [[VAL1]], [[VAL2]]
   1363   ul |= ul2;
   1364 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   1365 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1366 // CHECK: %{{.*}} = or <2 x i64> [[VAL1]], [[VAL2]]
   1367   ul |= bl2;
   1368 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   1369 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   1370 // CHECK: %{{.*}} = or <2 x i64> [[VAL1]], [[VAL2]]
   1371   bl |= bl2;
   1372 }
   1373 
   1374 void test_xor (void)
   1375 {
   1376 // CHECK-LABEL: test_xor
   1377 
   1378 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1379 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   1380 // CHECK: %{{.*}} = xor <16 x i8> [[VAL1]], [[VAL2]]
   1381   sc = sc ^ sc2;
   1382 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1383 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   1384 // CHECK: %{{.*}} = xor <16 x i8> [[VAL1]], [[VAL2]]
   1385   sc = sc ^ bc2;
   1386 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
   1387 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   1388 // CHECK: %{{.*}} = xor <16 x i8> [[VAL1]], [[VAL2]]
   1389   sc = bc ^ sc2;
   1390 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1391 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   1392 // CHECK: %{{.*}} = xor <16 x i8> [[VAL1]], [[VAL2]]
   1393   uc = uc ^ uc2;
   1394 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1395 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   1396 // CHECK: %{{.*}} = xor <16 x i8> [[VAL1]], [[VAL2]]
   1397   uc = uc ^ bc2;
   1398 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
   1399 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   1400 // CHECK: %{{.*}} = xor <16 x i8> [[VAL1]], [[VAL2]]
   1401   uc = bc ^ uc2;
   1402 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
   1403 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   1404 // CHECK: %{{.*}} = xor <16 x i8> [[VAL1]], [[VAL2]]
   1405   bc = bc ^ bc2;
   1406 
   1407 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1408 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   1409 // CHECK: %{{.*}} = xor <8 x i16> [[VAL1]], [[VAL2]]
   1410   ss = ss ^ ss2;
   1411 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1412 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   1413 // CHECK: %{{.*}} = xor <8 x i16> [[VAL1]], [[VAL2]]
   1414   ss = ss ^ bs2;
   1415 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   1416 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   1417 // CHECK: %{{.*}} = xor <8 x i16> [[VAL1]], [[VAL2]]
   1418   ss = bs ^ ss2;
   1419 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1420 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   1421 // CHECK: %{{.*}} = xor <8 x i16> [[VAL1]], [[VAL2]]
   1422   us = us ^ us2;
   1423 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1424 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   1425 // CHECK: %{{.*}} = xor <8 x i16> [[VAL1]], [[VAL2]]
   1426   us = us ^ bs2;
   1427 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   1428 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   1429 // CHECK: %{{.*}} = xor <8 x i16> [[VAL1]], [[VAL2]]
   1430   us = bs ^ us2;
   1431 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   1432 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   1433 // CHECK: %{{.*}} = xor <8 x i16> [[VAL1]], [[VAL2]]
   1434   bs = bs ^ bs2;
   1435 
   1436 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1437 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   1438 // CHECK: %{{.*}} = xor <4 x i32> [[VAL1]], [[VAL2]]
   1439   si = si ^ si2;
   1440 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1441 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   1442 // CHECK: %{{.*}} = xor <4 x i32> [[VAL1]], [[VAL2]]
   1443   si = si ^ bi2;
   1444 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   1445 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   1446 // CHECK: %{{.*}} = xor <4 x i32> [[VAL1]], [[VAL2]]
   1447   si = bi ^ si2;
   1448 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1449 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   1450 // CHECK: %{{.*}} = xor <4 x i32> [[VAL1]], [[VAL2]]
   1451   ui = ui ^ ui2;
   1452 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1453 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   1454 // CHECK: %{{.*}} = xor <4 x i32> [[VAL1]], [[VAL2]]
   1455   ui = ui ^ bi2;
   1456 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   1457 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   1458 // CHECK: %{{.*}} = xor <4 x i32> [[VAL1]], [[VAL2]]
   1459   ui = bi ^ ui2;
   1460 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   1461 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   1462 // CHECK: %{{.*}} = xor <4 x i32> [[VAL1]], [[VAL2]]
   1463   bi = bi ^ bi2;
   1464 
   1465 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1466 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   1467 // CHECK: %{{.*}} = xor <2 x i64> [[VAL1]], [[VAL2]]
   1468   sl = sl ^ sl2;
   1469 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1470 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   1471 // CHECK: %{{.*}} = xor <2 x i64> [[VAL1]], [[VAL2]]
   1472   sl = sl ^ bl2;
   1473 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   1474 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   1475 // CHECK: %{{.*}} = xor <2 x i64> [[VAL1]], [[VAL2]]
   1476   sl = bl ^ sl2;
   1477 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1478 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   1479 // CHECK: %{{.*}} = xor <2 x i64> [[VAL1]], [[VAL2]]
   1480   ul = ul ^ ul2;
   1481 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1482 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   1483 // CHECK: %{{.*}} = xor <2 x i64> [[VAL1]], [[VAL2]]
   1484   ul = ul ^ bl2;
   1485 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   1486 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   1487 // CHECK: %{{.*}} = xor <2 x i64> [[VAL1]], [[VAL2]]
   1488   ul = bl ^ ul2;
   1489 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   1490 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   1491 // CHECK: %{{.*}} = xor <2 x i64> [[VAL1]], [[VAL2]]
   1492   bl = bl ^ bl2;
   1493 }
   1494 
   1495 void test_xor_assign (void)
   1496 {
   1497 // CHECK-LABEL: test_xor_assign
   1498 
   1499 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   1500 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1501 // CHECK: %{{.*}} = xor <16 x i8> [[VAL2]], [[VAL1]]
   1502   sc ^= sc2;
   1503 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   1504 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1505 // CHECK: %{{.*}} = xor <16 x i8> [[VAL2]], [[VAL1]]
   1506   sc ^= bc2;
   1507 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   1508 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1509 // CHECK: %{{.*}} = xor <16 x i8> [[VAL2]], [[VAL1]]
   1510   uc ^= uc2;
   1511 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   1512 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1513 // CHECK: %{{.*}} = xor <16 x i8> [[VAL2]], [[VAL1]]
   1514   uc ^= bc2;
   1515 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   1516 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
   1517 // CHECK: %{{.*}} = xor <16 x i8> [[VAL2]], [[VAL1]]
   1518   bc ^= bc2;
   1519 
   1520 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   1521 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1522 // CHECK: %{{.*}} = xor <8 x i16> [[VAL2]], [[VAL1]]
   1523   ss ^= ss2;
   1524 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   1525 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1526 // CHECK: %{{.*}} = xor <8 x i16> [[VAL2]], [[VAL1]]
   1527   ss ^= bs2;
   1528 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   1529 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1530 // CHECK: %{{.*}} = xor <8 x i16> [[VAL2]], [[VAL1]]
   1531   us ^= us2;
   1532 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   1533 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1534 // CHECK: %{{.*}} = xor <8 x i16> [[VAL2]], [[VAL1]]
   1535   us ^= bs2;
   1536 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   1537 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   1538 // CHECK: %{{.*}} = xor <8 x i16> [[VAL2]], [[VAL1]]
   1539   bs ^= bs2;
   1540 
   1541 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   1542 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1543 // CHECK: %{{.*}} = xor <4 x i32> [[VAL2]], [[VAL1]]
   1544   si ^= si2;
   1545 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   1546 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1547 // CHECK: %{{.*}} = xor <4 x i32> [[VAL2]], [[VAL1]]
   1548   si ^= bi2;
   1549 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   1550 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1551 // CHECK: %{{.*}} = xor <4 x i32> [[VAL2]], [[VAL1]]
   1552   ui ^= ui2;
   1553 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   1554 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1555 // CHECK: %{{.*}} = xor <4 x i32> [[VAL2]], [[VAL1]]
   1556   ui ^= bi2;
   1557 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   1558 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   1559 // CHECK: %{{.*}} = xor <4 x i32> [[VAL2]], [[VAL1]]
   1560   bi ^= bi2;
   1561 
   1562 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   1563 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1564 // CHECK: %{{.*}} = xor <2 x i64> [[VAL2]], [[VAL1]]
   1565   sl ^= sl2;
   1566 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   1567 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1568 // CHECK: %{{.*}} = xor <2 x i64> [[VAL2]], [[VAL1]]
   1569   sl ^= bl2;
   1570 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   1571 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1572 // CHECK: %{{.*}} = xor <2 x i64> [[VAL2]], [[VAL1]]
   1573   ul ^= ul2;
   1574 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   1575 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1576 // CHECK: %{{.*}} = xor <2 x i64> [[VAL2]], [[VAL1]]
   1577   ul ^= bl2;
   1578 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   1579 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   1580 // CHECK: %{{.*}} = xor <2 x i64> [[VAL2]], [[VAL1]]
   1581   bl ^= bl2;
   1582 }
   1583 
   1584 void test_sl (void)
   1585 {
   1586 // CHECK-LABEL: test_sl
   1587 
   1588 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1589 // CHECK: [[CNT:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   1590 // CHECK: %{{.*}} = shl <16 x i8> [[VAL]], [[CNT]]
   1591   sc = sc << sc2;
   1592 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1593 // CHECK: [[CNT:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   1594 // CHECK: %{{.*}} = shl <16 x i8> [[VAL]], [[CNT]]
   1595   sc = sc << uc2;
   1596 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1597 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1598 // CHECK: [[T2:%[^ ]+]] = insertelement <16 x i32> undef, i32 [[T1]], i32 0
   1599 // CHECK: [[T3:%[^ ]+]] = shufflevector <16 x i32> [[T2]], <16 x i32> undef, <16 x i32> zeroinitializer
   1600 // CHECK: [[CNT:%[^ ]+]] = trunc <16 x i32> [[T3]] to <16 x i8>
   1601 // CHECK: %{{.*}} = shl <16 x i8> [[VAL]], [[CNT]]
   1602   sc = sc << cnt;
   1603 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1604 // CHECK: %{{.*}} = shl <16 x i8> [[VAL]], <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>
   1605   sc = sc << 5;
   1606 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1607 // CHECK: [[CNT:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   1608 // CHECK: %{{.*}} = shl <16 x i8> [[VAL]], [[CNT]]
   1609   uc = uc << sc2;
   1610 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1611 // CHECK: [[CNT:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   1612 // CHECK: %{{.*}} = shl <16 x i8> [[VAL]], [[CNT]]
   1613   uc = uc << uc2;
   1614 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1615 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1616 // CHECK: [[T2:%[^ ]+]] = insertelement <16 x i32> undef, i32 [[T1]], i32 0
   1617 // CHECK: [[T3:%[^ ]+]] = shufflevector <16 x i32> [[T2]], <16 x i32> undef, <16 x i32> zeroinitializer
   1618 // CHECK: [[CNT:%[^ ]+]] = trunc <16 x i32> [[T3]] to <16 x i8>
   1619 // CHECK: %{{.*}} = shl <16 x i8> [[VAL]], [[CNT]]
   1620   uc = uc << cnt;
   1621 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1622 // CHECK: %{{.*}} = shl <16 x i8> [[VAL]], <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>
   1623   uc = uc << 5;
   1624 
   1625 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1626 // CHECK: [[CNT:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   1627 // CHECK: %{{.*}} = shl <8 x i16> [[VAL]], [[CNT]]
   1628   ss = ss << ss2;
   1629 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1630 // CHECK: [[CNT:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   1631 // CHECK: %{{.*}} = shl <8 x i16> [[VAL]], [[CNT]]
   1632   ss = ss << us2;
   1633 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1634 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1635 // CHECK: [[T2:%[^ ]+]] = insertelement <8 x i32> undef, i32 [[T1]], i32 0
   1636 // CHECK: [[T3:%[^ ]+]] = shufflevector <8 x i32> [[T2]], <8 x i32> undef, <8 x i32> zeroinitializer
   1637 // CHECK: [[CNT:%[^ ]+]] = trunc <8 x i32> [[T3]] to <8 x i16>
   1638 // CHECK: %{{.*}} = shl <8 x i16> [[VAL]], [[CNT]]
   1639   ss = ss << cnt;
   1640 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1641 // CHECK: %{{.*}} = shl <8 x i16> [[VAL]], <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
   1642   ss = ss << 5;
   1643 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1644 // CHECK: [[CNT:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   1645 // CHECK: %{{.*}} = shl <8 x i16> [[VAL]], [[CNT]]
   1646   us = us << ss2;
   1647 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1648 // CHECK: [[CNT:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   1649 // CHECK: %{{.*}} = shl <8 x i16> [[VAL]], [[CNT]]
   1650   us = us << us2;
   1651 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1652 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1653 // CHECK: [[T2:%[^ ]+]] = insertelement <8 x i32> undef, i32 [[T1]], i32 0
   1654 // CHECK: [[T3:%[^ ]+]] = shufflevector <8 x i32> [[T2]], <8 x i32> undef, <8 x i32> zeroinitializer
   1655 // CHECK: [[CNT:%[^ ]+]] = trunc <8 x i32> [[T3]] to <8 x i16>
   1656 // CHECK: %{{.*}} = shl <8 x i16> [[VAL]], [[CNT]]
   1657   us = us << cnt;
   1658 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1659 // CHECK: %{{.*}} = shl <8 x i16> [[VAL]], <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
   1660   us = us << 5;
   1661 
   1662 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1663 // CHECK: [[CNT:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   1664 // CHECK: %{{.*}} = shl <4 x i32> [[VAL]], [[CNT]]
   1665   si = si << si2;
   1666 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1667 // CHECK: [[CNT:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   1668 // CHECK: %{{.*}} = shl <4 x i32> [[VAL]], [[CNT]]
   1669   si = si << ui2;
   1670 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1671 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1672 // CHECK: [[T3:%[^ ]+]] = insertelement <4 x i32> undef, i32 [[T1]], i32 0
   1673 // CHECK: [[CNT:%[^ ]+]] = shufflevector <4 x i32> [[T3]], <4 x i32> undef, <4 x i32> zeroinitializer
   1674 // CHECK: %{{.*}} = shl <4 x i32> [[VAL]], [[CNT]]
   1675   si = si << cnt;
   1676 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1677 // CHECK: %{{.*}} = shl <4 x i32> [[VAL]], <i32 5, i32 5, i32 5, i32 5>
   1678   si = si << 5;
   1679 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1680 // CHECK: [[CNT:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   1681 // CHECK: %{{.*}} = shl <4 x i32> [[VAL]], [[CNT]]
   1682   ui = ui << si2;
   1683 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1684 // CHECK: [[CNT:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   1685 // CHECK: %{{.*}} = shl <4 x i32> [[VAL]], [[CNT]]
   1686   ui = ui << ui2;
   1687 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1688 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1689 // CHECK: [[T3:%[^ ]+]] = insertelement <4 x i32> undef, i32 [[T1]], i32 0
   1690 // CHECK: [[CNT:%[^ ]+]] = shufflevector <4 x i32> [[T3]], <4 x i32> undef, <4 x i32> zeroinitializer
   1691 // CHECK: %{{.*}} = shl <4 x i32> [[VAL]], [[CNT]]
   1692   ui = ui << cnt;
   1693 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1694 // CHECK: %{{.*}} = shl <4 x i32> [[VAL]], <i32 5, i32 5, i32 5, i32 5>
   1695   ui = ui << 5;
   1696 
   1697 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1698 // CHECK: [[CNT:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   1699 // CHECK: %{{.*}} = shl <2 x i64> [[VAL]], [[CNT]]
   1700   sl = sl << sl2;
   1701 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1702 // CHECK: [[CNT:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   1703 // CHECK: %{{.*}} = shl <2 x i64> [[VAL]], [[CNT]]
   1704   sl = sl << ul2;
   1705 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1706 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1707 // CHECK: [[T2:%[^ ]+]] = insertelement <2 x i32> undef, i32 [[T1]], i32 0
   1708 // CHECK: [[T3:%[^ ]+]] = shufflevector <2 x i32> [[T2]], <2 x i32> undef, <2 x i32> zeroinitializer
   1709 // CHECK: [[CNT:%[^ ]+]] = zext <2 x i32> [[T3]] to <2 x i64>
   1710 // CHECK: %{{.*}} = shl <2 x i64> [[VAL]], [[CNT]]
   1711   sl = sl << cnt;
   1712 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1713 // CHECK: %{{.*}} = shl <2 x i64> [[VAL]], <i64 5, i64 5>
   1714   sl = sl << 5;
   1715 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1716 // CHECK: [[CNT:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   1717 // CHECK: %{{.*}} = shl <2 x i64> [[VAL]], [[CNT]]
   1718   ul = ul << sl2;
   1719 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1720 // CHECK: [[CNT:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   1721 // CHECK: %{{.*}} = shl <2 x i64> [[VAL]], [[CNT]]
   1722   ul = ul << ul2;
   1723 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1724 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1725 // CHECK: [[T2:%[^ ]+]] = insertelement <2 x i32> undef, i32 [[T1]], i32 0
   1726 // CHECK: [[T3:%[^ ]+]] = shufflevector <2 x i32> [[T2]], <2 x i32> undef, <2 x i32> zeroinitializer
   1727 // CHECK: [[CNT:%[^ ]+]] = zext <2 x i32> [[T3]] to <2 x i64>
   1728 // CHECK: %{{.*}} = shl <2 x i64> [[VAL]], [[CNT]]
   1729   ul = ul << cnt;
   1730 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1731 // CHECK: %{{.*}} = shl <2 x i64> [[VAL]], <i64 5, i64 5>
   1732   ul = ul << 5;
   1733 }
   1734 
   1735 void test_sl_assign (void)
   1736 {
   1737 // CHECK-LABEL: test_sl_assign
   1738 
   1739 // CHECK: [[CNT:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   1740 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1741 // CHECK: %{{.*}} = shl <16 x i8> [[VAL]], [[CNT]]
   1742   sc <<= sc2;
   1743 // CHECK: [[CNT:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   1744 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1745 // CHECK: %{{.*}} = shl <16 x i8> [[VAL]], [[CNT]]
   1746   sc <<= uc2;
   1747 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1748 // CHECK: [[T2:%[^ ]+]] = insertelement <16 x i32> undef, i32 [[T1]], i32 0
   1749 // CHECK: [[T3:%[^ ]+]] = shufflevector <16 x i32> [[T2]], <16 x i32> undef, <16 x i32> zeroinitializer
   1750 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1751 // CHECK: [[CNT:%[^ ]+]] = trunc <16 x i32> [[T3]] to <16 x i8>
   1752 // CHECK: %{{.*}} = shl <16 x i8> [[VAL]], [[CNT]]
   1753   sc <<= cnt;
   1754 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1755 // CHECK: %{{.*}} = shl <16 x i8> [[VAL]], <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>
   1756   sc <<= 5;
   1757 // CHECK: [[CNT:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   1758 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1759 // CHECK: %{{.*}} = shl <16 x i8> [[VAL]], [[CNT]]
   1760   uc <<= sc2;
   1761 // CHECK: [[CNT:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   1762 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1763 // CHECK: %{{.*}} = shl <16 x i8> [[VAL]], [[CNT]]
   1764   uc <<= uc2;
   1765 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1766 // CHECK: [[T2:%[^ ]+]] = insertelement <16 x i32> undef, i32 [[T1]], i32 0
   1767 // CHECK: [[T3:%[^ ]+]] = shufflevector <16 x i32> [[T2]], <16 x i32> undef, <16 x i32> zeroinitializer
   1768 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1769 // CHECK: [[CNT:%[^ ]+]] = trunc <16 x i32> [[T3]] to <16 x i8>
   1770 // CHECK: %{{.*}} = shl <16 x i8> [[VAL]], [[CNT]]
   1771   uc <<= cnt;
   1772 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1773 // CHECK: %{{.*}} = shl <16 x i8> [[VAL]], <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>
   1774   uc <<= 5;
   1775 
   1776 // CHECK: [[CNT:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   1777 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1778 // CHECK: %{{.*}} = shl <8 x i16> [[VAL]], [[CNT]]
   1779   ss <<= ss2;
   1780 // CHECK: [[CNT:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   1781 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1782 // CHECK: %{{.*}} = shl <8 x i16> [[VAL]], [[CNT]]
   1783   ss <<= us2;
   1784 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1785 // CHECK: [[T2:%[^ ]+]] = insertelement <8 x i32> undef, i32 [[T1]], i32 0
   1786 // CHECK: [[T3:%[^ ]+]] = shufflevector <8 x i32> [[T2]], <8 x i32> undef, <8 x i32> zeroinitializer
   1787 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1788 // CHECK: [[CNT:%[^ ]+]] = trunc <8 x i32> [[T3]] to <8 x i16>
   1789 // CHECK: %{{.*}} = shl <8 x i16> [[VAL]], [[CNT]]
   1790   ss <<= cnt;
   1791 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1792 // CHECK: %{{.*}} = shl <8 x i16> [[VAL]], <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
   1793   ss <<= 5;
   1794 // CHECK: [[CNT:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   1795 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1796 // CHECK: %{{.*}} = shl <8 x i16> [[VAL]], [[CNT]]
   1797   us <<= ss2;
   1798 // CHECK: [[CNT:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   1799 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1800 // CHECK: %{{.*}} = shl <8 x i16> [[VAL]], [[CNT]]
   1801   us <<= us2;
   1802 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1803 // CHECK: [[T2:%[^ ]+]] = insertelement <8 x i32> undef, i32 [[T1]], i32 0
   1804 // CHECK: [[T3:%[^ ]+]] = shufflevector <8 x i32> [[T2]], <8 x i32> undef, <8 x i32> zeroinitializer
   1805 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1806 // CHECK: [[CNT:%[^ ]+]] = trunc <8 x i32> [[T3]] to <8 x i16>
   1807 // CHECK: %{{.*}} = shl <8 x i16> [[VAL]], [[CNT]]
   1808   us <<= cnt;
   1809 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1810 // CHECK: %{{.*}} = shl <8 x i16> [[VAL]], <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
   1811   us <<= 5;
   1812 
   1813 // CHECK: [[CNT:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   1814 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1815 // CHECK: %{{.*}} = shl <4 x i32> [[VAL]], [[CNT]]
   1816   si <<= si2;
   1817 // CHECK: [[CNT:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   1818 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1819 // CHECK: %{{.*}} = shl <4 x i32> [[VAL]], [[CNT]]
   1820   si <<= ui2;
   1821 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1822 // CHECK: [[T3:%[^ ]+]] = insertelement <4 x i32> undef, i32 [[T1]], i32 0
   1823 // CHECK: [[CNT:%[^ ]+]] = shufflevector <4 x i32> [[T3]], <4 x i32> undef, <4 x i32> zeroinitializer
   1824 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1825 // CHECK: %{{.*}} = shl <4 x i32> [[VAL]], [[CNT]]
   1826   si <<= cnt;
   1827 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1828 // CHECK: %{{.*}} = shl <4 x i32> [[VAL]], <i32 5, i32 5, i32 5, i32 5>
   1829   si <<= 5;
   1830 // CHECK: [[CNT:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   1831 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1832 // CHECK: %{{.*}} = shl <4 x i32> [[VAL]], [[CNT]]
   1833   ui <<= si2;
   1834 // CHECK: [[CNT:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   1835 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1836 // CHECK: %{{.*}} = shl <4 x i32> [[VAL]], [[CNT]]
   1837   ui <<= ui2;
   1838 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1839 // CHECK: [[T3:%[^ ]+]] = insertelement <4 x i32> undef, i32 [[T1]], i32 0
   1840 // CHECK: [[CNT:%[^ ]+]] = shufflevector <4 x i32> [[T3]], <4 x i32> undef, <4 x i32> zeroinitializer
   1841 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1842 // CHECK: %{{.*}} = shl <4 x i32> [[VAL]], [[CNT]]
   1843   ui <<= cnt;
   1844 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1845 // CHECK: %{{.*}} = shl <4 x i32> [[VAL]], <i32 5, i32 5, i32 5, i32 5>
   1846   ui <<= 5;
   1847 
   1848 // CHECK: [[CNT:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   1849 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1850 // CHECK: %{{.*}} = shl <2 x i64> [[VAL]], [[CNT]]
   1851   sl <<= sl2;
   1852 // CHECK: [[CNT:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   1853 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1854 // CHECK: %{{.*}} = shl <2 x i64> [[VAL]], [[CNT]]
   1855   sl <<= ul2;
   1856 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1857 // CHECK: [[T2:%[^ ]+]] = insertelement <2 x i32> undef, i32 [[T1]], i32 0
   1858 // CHECK: [[T3:%[^ ]+]] = shufflevector <2 x i32> [[T2]], <2 x i32> undef, <2 x i32> zeroinitializer
   1859 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1860 // CHECK: [[CNT:%[^ ]+]] = zext <2 x i32> [[T3]] to <2 x i64>
   1861 // CHECK: %{{.*}} = shl <2 x i64> [[VAL]], [[CNT]]
   1862   sl <<= cnt;
   1863 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   1864 // CHECK: %{{.*}} = shl <2 x i64> [[VAL]], <i64 5, i64 5>
   1865   sl <<= 5;
   1866 // CHECK: [[CNT:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   1867 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1868 // CHECK: %{{.*}} = shl <2 x i64> [[VAL]], [[CNT]]
   1869   ul <<= sl2;
   1870 // CHECK: [[CNT:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   1871 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1872 // CHECK: %{{.*}} = shl <2 x i64> [[VAL]], [[CNT]]
   1873   ul <<= ul2;
   1874 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1875 // CHECK: [[T2:%[^ ]+]] = insertelement <2 x i32> undef, i32 [[T1]], i32 0
   1876 // CHECK: [[T3:%[^ ]+]] = shufflevector <2 x i32> [[T2]], <2 x i32> undef, <2 x i32> zeroinitializer
   1877 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1878 // CHECK: [[CNT:%[^ ]+]] = zext <2 x i32> [[T3]] to <2 x i64>
   1879 // CHECK: %{{.*}} = shl <2 x i64> [[VAL]], [[CNT]]
   1880   ul <<= cnt;
   1881 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   1882 // CHECK: %{{.*}} = shl <2 x i64> [[VAL]], <i64 5, i64 5>
   1883   ul <<= 5;
   1884 }
   1885 
   1886 void test_sr (void)
   1887 {
   1888 // CHECK-LABEL: test_sr
   1889 
   1890 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1891 // CHECK: [[CNT:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   1892 // CHECK: %{{.*}} = ashr <16 x i8> [[VAL]], [[CNT]]
   1893   sc = sc >> sc2;
   1894 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1895 // CHECK: [[CNT:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   1896 // CHECK: %{{.*}} = ashr <16 x i8> [[VAL]], [[CNT]]
   1897   sc = sc >> uc2;
   1898 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1899 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1900 // CHECK: [[T2:%[^ ]+]] = insertelement <16 x i32> undef, i32 [[T1]], i32 0
   1901 // CHECK: [[T3:%[^ ]+]] = shufflevector <16 x i32> [[T2]], <16 x i32> undef, <16 x i32> zeroinitializer
   1902 // CHECK: [[CNT:%[^ ]+]] = trunc <16 x i32> [[T3]] to <16 x i8>
   1903 // CHECK: %{{.*}} = ashr <16 x i8> [[VAL]], [[CNT]]
   1904   sc = sc >> cnt;
   1905 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   1906 // CHECK: %{{.*}} = ashr <16 x i8> [[VAL]], <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>
   1907   sc = sc >> 5;
   1908 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1909 // CHECK: [[CNT:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   1910 // CHECK: %{{.*}} = lshr <16 x i8> [[VAL]], [[CNT]]
   1911   uc = uc >> sc2;
   1912 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1913 // CHECK: [[CNT:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   1914 // CHECK: %{{.*}} = lshr <16 x i8> [[VAL]], [[CNT]]
   1915   uc = uc >> uc2;
   1916 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1917 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1918 // CHECK: [[T2:%[^ ]+]] = insertelement <16 x i32> undef, i32 [[T1]], i32 0
   1919 // CHECK: [[T3:%[^ ]+]] = shufflevector <16 x i32> [[T2]], <16 x i32> undef, <16 x i32> zeroinitializer
   1920 // CHECK: [[CNT:%[^ ]+]] = trunc <16 x i32> [[T3]] to <16 x i8>
   1921 // CHECK: %{{.*}} = lshr <16 x i8> [[VAL]], [[CNT]]
   1922   uc = uc >> cnt;
   1923 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   1924 // CHECK: %{{.*}} = lshr <16 x i8> [[VAL]], <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>
   1925   uc = uc >> 5;
   1926 
   1927 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1928 // CHECK: [[CNT:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   1929 // CHECK: %{{.*}} = ashr <8 x i16> [[VAL]], [[CNT]]
   1930   ss = ss >> ss2;
   1931 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1932 // CHECK: [[CNT:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   1933 // CHECK: %{{.*}} = ashr <8 x i16> [[VAL]], [[CNT]]
   1934   ss = ss >> us2;
   1935 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1936 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1937 // CHECK: [[T2:%[^ ]+]] = insertelement <8 x i32> undef, i32 [[T1]], i32 0
   1938 // CHECK: [[T3:%[^ ]+]] = shufflevector <8 x i32> [[T2]], <8 x i32> undef, <8 x i32> zeroinitializer
   1939 // CHECK: [[CNT:%[^ ]+]] = trunc <8 x i32> [[T3]] to <8 x i16>
   1940 // CHECK: %{{.*}} = ashr <8 x i16> [[VAL]], [[CNT]]
   1941   ss = ss >> cnt;
   1942 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   1943 // CHECK: %{{.*}} = ashr <8 x i16> [[VAL]], <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
   1944   ss = ss >> 5;
   1945 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1946 // CHECK: [[CNT:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   1947 // CHECK: %{{.*}} = lshr <8 x i16> [[VAL]], [[CNT]]
   1948   us = us >> ss2;
   1949 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1950 // CHECK: [[CNT:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   1951 // CHECK: %{{.*}} = lshr <8 x i16> [[VAL]], [[CNT]]
   1952   us = us >> us2;
   1953 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1954 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1955 // CHECK: [[T2:%[^ ]+]] = insertelement <8 x i32> undef, i32 [[T1]], i32 0
   1956 // CHECK: [[T3:%[^ ]+]] = shufflevector <8 x i32> [[T2]], <8 x i32> undef, <8 x i32> zeroinitializer
   1957 // CHECK: [[CNT:%[^ ]+]] = trunc <8 x i32> [[T3]] to <8 x i16>
   1958 // CHECK: %{{.*}} = lshr <8 x i16> [[VAL]], [[CNT]]
   1959   us = us >> cnt;
   1960 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   1961 // CHECK: %{{.*}} = lshr <8 x i16> [[VAL]], <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
   1962   us = us >> 5;
   1963 
   1964 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1965 // CHECK: [[CNT:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   1966 // CHECK: %{{.*}} = ashr <4 x i32> [[VAL]], [[CNT]]
   1967   si = si >> si2;
   1968 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1969 // CHECK: [[CNT:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   1970 // CHECK: %{{.*}} = ashr <4 x i32> [[VAL]], [[CNT]]
   1971   si = si >> ui2;
   1972 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1973 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1974 // CHECK: [[T3:%[^ ]+]] = insertelement <4 x i32> undef, i32 [[T1]], i32 0
   1975 // CHECK: [[CNT:%[^ ]+]] = shufflevector <4 x i32> [[T3]], <4 x i32> undef, <4 x i32> zeroinitializer
   1976 // CHECK: %{{.*}} = ashr <4 x i32> [[VAL]], [[CNT]]
   1977   si = si >> cnt;
   1978 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   1979 // CHECK: %{{.*}} = ashr <4 x i32> [[VAL]], <i32 5, i32 5, i32 5, i32 5>
   1980   si = si >> 5;
   1981 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1982 // CHECK: [[CNT:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   1983 // CHECK: %{{.*}} = lshr <4 x i32> [[VAL]], [[CNT]]
   1984   ui = ui >> si2;
   1985 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1986 // CHECK: [[CNT:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   1987 // CHECK: %{{.*}} = lshr <4 x i32> [[VAL]], [[CNT]]
   1988   ui = ui >> ui2;
   1989 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1990 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   1991 // CHECK: [[T3:%[^ ]+]] = insertelement <4 x i32> undef, i32 [[T1]], i32 0
   1992 // CHECK: [[CNT:%[^ ]+]] = shufflevector <4 x i32> [[T3]], <4 x i32> undef, <4 x i32> zeroinitializer
   1993 // CHECK: %{{.*}} = lshr <4 x i32> [[VAL]], [[CNT]]
   1994   ui = ui >> cnt;
   1995 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   1996 // CHECK: %{{.*}} = lshr <4 x i32> [[VAL]], <i32 5, i32 5, i32 5, i32 5>
   1997   ui = ui >> 5;
   1998 
   1999 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   2000 // CHECK: [[CNT:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   2001 // CHECK: %{{.*}} = ashr <2 x i64> [[VAL]], [[CNT]]
   2002   sl = sl >> sl2;
   2003 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   2004 // CHECK: [[CNT:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   2005 // CHECK: %{{.*}} = ashr <2 x i64> [[VAL]], [[CNT]]
   2006   sl = sl >> ul2;
   2007 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   2008 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   2009 // CHECK: [[T2:%[^ ]+]] = insertelement <2 x i32> undef, i32 [[T1]], i32 0
   2010 // CHECK: [[T3:%[^ ]+]] = shufflevector <2 x i32> [[T2]], <2 x i32> undef, <2 x i32> zeroinitializer
   2011 // CHECK: [[CNT:%[^ ]+]] = zext <2 x i32> [[T3]] to <2 x i64>
   2012 // CHECK: %{{.*}} = ashr <2 x i64> [[VAL]], [[CNT]]
   2013   sl = sl >> cnt;
   2014 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   2015 // CHECK: %{{.*}} = ashr <2 x i64> [[VAL]], <i64 5, i64 5>
   2016   sl = sl >> 5;
   2017 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   2018 // CHECK: [[CNT:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   2019 // CHECK: %{{.*}} = lshr <2 x i64> [[VAL]], [[CNT]]
   2020   ul = ul >> sl2;
   2021 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   2022 // CHECK: [[CNT:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   2023 // CHECK: %{{.*}} = lshr <2 x i64> [[VAL]], [[CNT]]
   2024   ul = ul >> ul2;
   2025 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   2026 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   2027 // CHECK: [[T2:%[^ ]+]] = insertelement <2 x i32> undef, i32 [[T1]], i32 0
   2028 // CHECK: [[T3:%[^ ]+]] = shufflevector <2 x i32> [[T2]], <2 x i32> undef, <2 x i32> zeroinitializer
   2029 // CHECK: [[CNT:%[^ ]+]] = zext <2 x i32> [[T3]] to <2 x i64>
   2030 // CHECK: %{{.*}} = lshr <2 x i64> [[VAL]], [[CNT]]
   2031   ul = ul >> cnt;
   2032 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   2033 // CHECK: %{{.*}} = lshr <2 x i64> [[VAL]], <i64 5, i64 5>
   2034   ul = ul >> 5;
   2035 }
   2036 
   2037 void test_sr_assign (void)
   2038 {
   2039 // CHECK-LABEL: test_sr_assign
   2040 
   2041 // CHECK: [[CNT:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   2042 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   2043 // CHECK: %{{.*}} = ashr <16 x i8> [[VAL]], [[CNT]]
   2044   sc >>= sc2;
   2045 // CHECK: [[CNT:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   2046 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   2047 // CHECK: %{{.*}} = ashr <16 x i8> [[VAL]], [[CNT]]
   2048   sc >>= uc2;
   2049 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   2050 // CHECK: [[T2:%[^ ]+]] = insertelement <16 x i32> undef, i32 [[T1]], i32 0
   2051 // CHECK: [[T3:%[^ ]+]] = shufflevector <16 x i32> [[T2]], <16 x i32> undef, <16 x i32> zeroinitializer
   2052 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   2053 // CHECK: [[CNT:%[^ ]+]] = trunc <16 x i32> [[T3]] to <16 x i8>
   2054 // CHECK: %{{.*}} = ashr <16 x i8> [[VAL]], [[CNT]]
   2055   sc >>= cnt;
   2056 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   2057 // CHECK: %{{.*}} = ashr <16 x i8> [[VAL]], <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>
   2058   sc >>= 5;
   2059 // CHECK: [[CNT:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   2060 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   2061 // CHECK: %{{.*}} = lshr <16 x i8> [[VAL]], [[CNT]]
   2062   uc >>= sc2;
   2063 // CHECK: [[CNT:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   2064 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   2065 // CHECK: %{{.*}} = lshr <16 x i8> [[VAL]], [[CNT]]
   2066   uc >>= uc2;
   2067 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   2068 // CHECK: [[T2:%[^ ]+]] = insertelement <16 x i32> undef, i32 [[T1]], i32 0
   2069 // CHECK: [[T3:%[^ ]+]] = shufflevector <16 x i32> [[T2]], <16 x i32> undef, <16 x i32> zeroinitializer
   2070 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   2071 // CHECK: [[CNT:%[^ ]+]] = trunc <16 x i32> [[T3]] to <16 x i8>
   2072 // CHECK: %{{.*}} = lshr <16 x i8> [[VAL]], [[CNT]]
   2073   uc >>= cnt;
   2074 // CHECK: [[VAL:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   2075 // CHECK: %{{.*}} = lshr <16 x i8> [[VAL]], <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>
   2076   uc >>= 5;
   2077 
   2078 // CHECK: [[CNT:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   2079 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   2080 // CHECK: %{{.*}} = ashr <8 x i16> [[VAL]], [[CNT]]
   2081   ss >>= ss2;
   2082 // CHECK: [[CNT:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   2083 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   2084 // CHECK: %{{.*}} = ashr <8 x i16> [[VAL]], [[CNT]]
   2085   ss >>= us2;
   2086 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   2087 // CHECK: [[T2:%[^ ]+]] = insertelement <8 x i32> undef, i32 [[T1]], i32 0
   2088 // CHECK: [[T3:%[^ ]+]] = shufflevector <8 x i32> [[T2]], <8 x i32> undef, <8 x i32> zeroinitializer
   2089 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   2090 // CHECK: [[CNT:%[^ ]+]] = trunc <8 x i32> [[T3]] to <8 x i16>
   2091 // CHECK: %{{.*}} = ashr <8 x i16> [[VAL]], [[CNT]]
   2092   ss >>= cnt;
   2093 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   2094 // CHECK: %{{.*}} = ashr <8 x i16> [[VAL]], <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
   2095   ss >>= 5;
   2096 // CHECK: [[CNT:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   2097 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   2098 // CHECK: %{{.*}} = lshr <8 x i16> [[VAL]], [[CNT]]
   2099   us >>= ss2;
   2100 // CHECK: [[CNT:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   2101 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   2102 // CHECK: %{{.*}} = lshr <8 x i16> [[VAL]], [[CNT]]
   2103   us >>= us2;
   2104 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   2105 // CHECK: [[T2:%[^ ]+]] = insertelement <8 x i32> undef, i32 [[T1]], i32 0
   2106 // CHECK: [[T3:%[^ ]+]] = shufflevector <8 x i32> [[T2]], <8 x i32> undef, <8 x i32> zeroinitializer
   2107 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   2108 // CHECK: [[CNT:%[^ ]+]] = trunc <8 x i32> [[T3]] to <8 x i16>
   2109 // CHECK: %{{.*}} = lshr <8 x i16> [[VAL]], [[CNT]]
   2110   us >>= cnt;
   2111 // CHECK: [[VAL:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   2112 // CHECK: %{{.*}} = lshr <8 x i16> [[VAL]], <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
   2113   us >>= 5;
   2114 
   2115 // CHECK: [[CNT:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   2116 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   2117 // CHECK: %{{.*}} = ashr <4 x i32> [[VAL]], [[CNT]]
   2118   si >>= si2;
   2119 // CHECK: [[CNT:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   2120 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   2121 // CHECK: %{{.*}} = ashr <4 x i32> [[VAL]], [[CNT]]
   2122   si >>= ui2;
   2123 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   2124 // CHECK: [[T3:%[^ ]+]] = insertelement <4 x i32> undef, i32 [[T1]], i32 0
   2125 // CHECK: [[CNT:%[^ ]+]] = shufflevector <4 x i32> [[T3]], <4 x i32> undef, <4 x i32> zeroinitializer
   2126 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   2127 // CHECK: %{{.*}} = ashr <4 x i32> [[VAL]], [[CNT]]
   2128   si >>= cnt;
   2129 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   2130 // CHECK: %{{.*}} = ashr <4 x i32> [[VAL]], <i32 5, i32 5, i32 5, i32 5>
   2131   si >>= 5;
   2132 // CHECK: [[CNT:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   2133 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   2134 // CHECK: %{{.*}} = lshr <4 x i32> [[VAL]], [[CNT]]
   2135   ui >>= si2;
   2136 // CHECK: [[CNT:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   2137 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   2138 // CHECK: %{{.*}} = lshr <4 x i32> [[VAL]], [[CNT]]
   2139   ui >>= ui2;
   2140 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   2141 // CHECK: [[T3:%[^ ]+]] = insertelement <4 x i32> undef, i32 [[T1]], i32 0
   2142 // CHECK: [[CNT:%[^ ]+]] = shufflevector <4 x i32> [[T3]], <4 x i32> undef, <4 x i32> zeroinitializer
   2143 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   2144 // CHECK: %{{.*}} = lshr <4 x i32> [[VAL]], [[CNT]]
   2145   ui >>= cnt;
   2146 // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   2147 // CHECK: %{{.*}} = lshr <4 x i32> [[VAL]], <i32 5, i32 5, i32 5, i32 5>
   2148   ui >>= 5;
   2149 
   2150 // CHECK: [[CNT:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   2151 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   2152 // CHECK: %{{.*}} = ashr <2 x i64> [[VAL]], [[CNT]]
   2153   sl >>= sl2;
   2154 // CHECK: [[CNT:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   2155 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   2156 // CHECK: %{{.*}} = ashr <2 x i64> [[VAL]], [[CNT]]
   2157   sl >>= ul2;
   2158 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   2159 // CHECK: [[T2:%[^ ]+]] = insertelement <2 x i32> undef, i32 [[T1]], i32 0
   2160 // CHECK: [[T3:%[^ ]+]] = shufflevector <2 x i32> [[T2]], <2 x i32> undef, <2 x i32> zeroinitializer
   2161 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   2162 // CHECK: [[CNT:%[^ ]+]] = zext <2 x i32> [[T3]] to <2 x i64>
   2163 // CHECK: %{{.*}} = ashr <2 x i64> [[VAL]], [[CNT]]
   2164   sl >>= cnt;
   2165 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   2166 // CHECK: %{{.*}} = ashr <2 x i64> [[VAL]], <i64 5, i64 5>
   2167   sl >>= 5;
   2168 // CHECK: [[CNT:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   2169 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   2170 // CHECK: %{{.*}} = lshr <2 x i64> [[VAL]], [[CNT]]
   2171   ul >>= sl2;
   2172 // CHECK: [[CNT:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   2173 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   2174 // CHECK: %{{.*}} = lshr <2 x i64> [[VAL]], [[CNT]]
   2175   ul >>= ul2;
   2176 // CHECK: [[T1:%[^ ]+]] = load volatile i32, i32* @cnt
   2177 // CHECK: [[T2:%[^ ]+]] = insertelement <2 x i32> undef, i32 [[T1]], i32 0
   2178 // CHECK: [[T3:%[^ ]+]] = shufflevector <2 x i32> [[T2]], <2 x i32> undef, <2 x i32> zeroinitializer
   2179 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   2180 // CHECK: [[CNT:%[^ ]+]] = zext <2 x i32> [[T3]] to <2 x i64>
   2181 // CHECK: %{{.*}} = lshr <2 x i64> [[VAL]], [[CNT]]
   2182   ul >>= cnt;
   2183 // CHECK: [[VAL:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   2184 // CHECK: %{{.*}} = lshr <2 x i64> [[VAL]], <i64 5, i64 5>
   2185   ul >>= 5;
   2186 }
   2187 
   2188 
   2189 void test_cmpeq (void)
   2190 {
   2191 // CHECK-LABEL: test_cmpeq
   2192 
   2193 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   2194 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   2195 // CHECK: [[CMP:%[^ ]+]] = icmp eq <16 x i8> [[VAL1]], [[VAL2]]
   2196 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2197   bc = sc == sc2;
   2198 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   2199 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   2200 // CHECK: [[CMP:%[^ ]+]] = icmp eq <16 x i8> [[VAL1]], [[VAL2]]
   2201 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2202   bc = sc == bc2;
   2203 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
   2204 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   2205 // CHECK: [[CMP:%[^ ]+]] = icmp eq <16 x i8> [[VAL1]], [[VAL2]]
   2206 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2207   bc = bc == sc2;
   2208 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   2209 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   2210 // CHECK: [[CMP:%[^ ]+]] = icmp eq <16 x i8> [[VAL1]], [[VAL2]]
   2211 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2212   bc = uc == uc2;
   2213 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   2214 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   2215 // CHECK: [[CMP:%[^ ]+]] = icmp eq <16 x i8> [[VAL1]], [[VAL2]]
   2216 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2217   bc = uc == bc2;
   2218 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
   2219 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   2220 // CHECK: [[CMP:%[^ ]+]] = icmp eq <16 x i8> [[VAL1]], [[VAL2]]
   2221 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2222   bc = bc == uc2;
   2223 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
   2224 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   2225 // CHECK: [[CMP:%[^ ]+]] = icmp eq <16 x i8> [[VAL1]], [[VAL2]]
   2226 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2227   bc = bc == bc2;
   2228 
   2229 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   2230 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   2231 // CHECK: [[CMP:%[^ ]+]] = icmp eq <8 x i16> [[VAL1]], [[VAL2]]
   2232 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2233   bs = ss == ss2;
   2234 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   2235 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   2236 // CHECK: [[CMP:%[^ ]+]] = icmp eq <8 x i16> [[VAL1]], [[VAL2]]
   2237 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2238   bs = ss == bs2;
   2239 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   2240 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   2241 // CHECK: [[CMP:%[^ ]+]] = icmp eq <8 x i16> [[VAL1]], [[VAL2]]
   2242 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2243   bs = bs == ss2;
   2244 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   2245 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   2246 // CHECK: [[CMP:%[^ ]+]] = icmp eq <8 x i16> [[VAL1]], [[VAL2]]
   2247 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2248   bs = us == us2;
   2249 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   2250 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   2251 // CHECK: [[CMP:%[^ ]+]] = icmp eq <8 x i16> [[VAL1]], [[VAL2]]
   2252 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2253   bs = us == bs2;
   2254 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   2255 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   2256 // CHECK: [[CMP:%[^ ]+]] = icmp eq <8 x i16> [[VAL1]], [[VAL2]]
   2257 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2258   bs = bs == us2;
   2259 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   2260 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   2261 // CHECK: [[CMP:%[^ ]+]] = icmp eq <8 x i16> [[VAL1]], [[VAL2]]
   2262 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2263   bs = bs == bs2;
   2264 
   2265 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   2266 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   2267 // CHECK: [[CMP:%[^ ]+]] = icmp eq <4 x i32> [[VAL1]], [[VAL2]]
   2268 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2269   bi = si == si2;
   2270 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   2271 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   2272 // CHECK: [[CMP:%[^ ]+]] = icmp eq <4 x i32> [[VAL1]], [[VAL2]]
   2273 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2274   bi = si == bi2;
   2275 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   2276 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   2277 // CHECK: [[CMP:%[^ ]+]] = icmp eq <4 x i32> [[VAL1]], [[VAL2]]
   2278 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2279   bi = bi == si2;
   2280 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   2281 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   2282 // CHECK: [[CMP:%[^ ]+]] = icmp eq <4 x i32> [[VAL1]], [[VAL2]]
   2283 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2284   bi = ui == ui2;
   2285 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   2286 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   2287 // CHECK: [[CMP:%[^ ]+]] = icmp eq <4 x i32> [[VAL1]], [[VAL2]]
   2288 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2289   bi = ui == bi2;
   2290 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   2291 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   2292 // CHECK: [[CMP:%[^ ]+]] = icmp eq <4 x i32> [[VAL1]], [[VAL2]]
   2293 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2294   bi = bi == ui2;
   2295 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   2296 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   2297 // CHECK: [[CMP:%[^ ]+]] = icmp eq <4 x i32> [[VAL1]], [[VAL2]]
   2298 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2299   bi = bi == bi2;
   2300 
   2301 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   2302 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   2303 // CHECK: [[CMP:%[^ ]+]] = icmp eq <2 x i64> [[VAL1]], [[VAL2]]
   2304 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2305   bl = sl == sl2;
   2306 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   2307 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   2308 // CHECK: [[CMP:%[^ ]+]] = icmp eq <2 x i64> [[VAL1]], [[VAL2]]
   2309 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2310   bl = sl == bl2;
   2311 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   2312 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   2313 // CHECK: [[CMP:%[^ ]+]] = icmp eq <2 x i64> [[VAL1]], [[VAL2]]
   2314 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2315   bl = bl == sl2;
   2316 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   2317 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   2318 // CHECK: [[CMP:%[^ ]+]] = icmp eq <2 x i64> [[VAL1]], [[VAL2]]
   2319 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2320   bl = ul == ul2;
   2321 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   2322 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   2323 // CHECK: [[CMP:%[^ ]+]] = icmp eq <2 x i64> [[VAL1]], [[VAL2]]
   2324 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2325   bl = ul == bl2;
   2326 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   2327 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   2328 // CHECK: [[CMP:%[^ ]+]] = icmp eq <2 x i64> [[VAL1]], [[VAL2]]
   2329 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2330   bl = bl == ul2;
   2331 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   2332 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   2333 // CHECK: [[CMP:%[^ ]+]] = icmp eq <2 x i64> [[VAL1]], [[VAL2]]
   2334 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2335   bl = bl == bl2;
   2336 
   2337 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd
   2338 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
   2339 // CHECK: [[CMP:%[^ ]+]] = fcmp oeq <2 x double> [[VAL1]], [[VAL2]]
   2340 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2341   bl = fd == fd2;
   2342 }
   2343 
   2344 void test_cmpne (void)
   2345 {
   2346 // CHECK-LABEL: test_cmpne
   2347 
   2348 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   2349 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   2350 // CHECK: [[CMP:%[^ ]+]] = icmp ne <16 x i8> [[VAL1]], [[VAL2]]
   2351 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2352   bc = sc != sc2;
   2353 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   2354 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   2355 // CHECK: [[CMP:%[^ ]+]] = icmp ne <16 x i8> [[VAL1]], [[VAL2]]
   2356 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2357   bc = sc != bc2;
   2358 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
   2359 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   2360 // CHECK: [[CMP:%[^ ]+]] = icmp ne <16 x i8> [[VAL1]], [[VAL2]]
   2361 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2362   bc = bc != sc2;
   2363 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   2364 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   2365 // CHECK: [[CMP:%[^ ]+]] = icmp ne <16 x i8> [[VAL1]], [[VAL2]]
   2366 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2367   bc = uc != uc2;
   2368 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   2369 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   2370 // CHECK: [[CMP:%[^ ]+]] = icmp ne <16 x i8> [[VAL1]], [[VAL2]]
   2371 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2372   bc = uc != bc2;
   2373 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
   2374 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   2375 // CHECK: [[CMP:%[^ ]+]] = icmp ne <16 x i8> [[VAL1]], [[VAL2]]
   2376 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2377   bc = bc != uc2;
   2378 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
   2379 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   2380 // CHECK: [[CMP:%[^ ]+]] = icmp ne <16 x i8> [[VAL1]], [[VAL2]]
   2381 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2382   bc = bc != bc2;
   2383 
   2384 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   2385 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   2386 // CHECK: [[CMP:%[^ ]+]] = icmp ne <8 x i16> [[VAL1]], [[VAL2]]
   2387 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2388   bs = ss != ss2;
   2389 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   2390 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   2391 // CHECK: [[CMP:%[^ ]+]] = icmp ne <8 x i16> [[VAL1]], [[VAL2]]
   2392 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2393   bs = ss != bs2;
   2394 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   2395 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   2396 // CHECK: [[CMP:%[^ ]+]] = icmp ne <8 x i16> [[VAL1]], [[VAL2]]
   2397 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2398   bs = bs != ss2;
   2399 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   2400 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   2401 // CHECK: [[CMP:%[^ ]+]] = icmp ne <8 x i16> [[VAL1]], [[VAL2]]
   2402 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2403   bs = us != us2;
   2404 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   2405 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   2406 // CHECK: [[CMP:%[^ ]+]] = icmp ne <8 x i16> [[VAL1]], [[VAL2]]
   2407 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2408   bs = us != bs2;
   2409 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   2410 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   2411 // CHECK: [[CMP:%[^ ]+]] = icmp ne <8 x i16> [[VAL1]], [[VAL2]]
   2412 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2413   bs = bs != us2;
   2414 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   2415 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   2416 // CHECK: [[CMP:%[^ ]+]] = icmp ne <8 x i16> [[VAL1]], [[VAL2]]
   2417 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2418   bs = bs != bs2;
   2419 
   2420 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   2421 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   2422 // CHECK: [[CMP:%[^ ]+]] = icmp ne <4 x i32> [[VAL1]], [[VAL2]]
   2423 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2424   bi = si != si2;
   2425 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   2426 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   2427 // CHECK: [[CMP:%[^ ]+]] = icmp ne <4 x i32> [[VAL1]], [[VAL2]]
   2428 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2429   bi = si != bi2;
   2430 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   2431 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   2432 // CHECK: [[CMP:%[^ ]+]] = icmp ne <4 x i32> [[VAL1]], [[VAL2]]
   2433 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2434   bi = bi != si2;
   2435 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   2436 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   2437 // CHECK: [[CMP:%[^ ]+]] = icmp ne <4 x i32> [[VAL1]], [[VAL2]]
   2438 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2439   bi = ui != ui2;
   2440 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   2441 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   2442 // CHECK: [[CMP:%[^ ]+]] = icmp ne <4 x i32> [[VAL1]], [[VAL2]]
   2443 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2444   bi = ui != bi2;
   2445 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   2446 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   2447 // CHECK: [[CMP:%[^ ]+]] = icmp ne <4 x i32> [[VAL1]], [[VAL2]]
   2448 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2449   bi = bi != ui2;
   2450 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   2451 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   2452 // CHECK: [[CMP:%[^ ]+]] = icmp ne <4 x i32> [[VAL1]], [[VAL2]]
   2453 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2454   bi = bi != bi2;
   2455 
   2456 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   2457 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   2458 // CHECK: [[CMP:%[^ ]+]] = icmp ne <2 x i64> [[VAL1]], [[VAL2]]
   2459 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2460   bl = sl != sl2;
   2461 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   2462 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   2463 // CHECK: [[CMP:%[^ ]+]] = icmp ne <2 x i64> [[VAL1]], [[VAL2]]
   2464 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2465   bl = sl != bl2;
   2466 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   2467 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   2468 // CHECK: [[CMP:%[^ ]+]] = icmp ne <2 x i64> [[VAL1]], [[VAL2]]
   2469 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2470   bl = bl != sl2;
   2471 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   2472 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   2473 // CHECK: [[CMP:%[^ ]+]] = icmp ne <2 x i64> [[VAL1]], [[VAL2]]
   2474 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2475   bl = ul != ul2;
   2476 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   2477 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   2478 // CHECK: [[CMP:%[^ ]+]] = icmp ne <2 x i64> [[VAL1]], [[VAL2]]
   2479 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2480   bl = ul != bl2;
   2481 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   2482 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   2483 // CHECK: [[CMP:%[^ ]+]] = icmp ne <2 x i64> [[VAL1]], [[VAL2]]
   2484 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2485   bl = bl != ul2;
   2486 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   2487 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   2488 // CHECK: [[CMP:%[^ ]+]] = icmp ne <2 x i64> [[VAL1]], [[VAL2]]
   2489 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2490   bl = bl != bl2;
   2491 
   2492 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd
   2493 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
   2494 // CHECK: [[CMP:%[^ ]+]] = fcmp une <2 x double> [[VAL1]], [[VAL2]]
   2495 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2496   bl = fd != fd2;
   2497 }
   2498 
   2499 void test_cmpge (void)
   2500 {
   2501 // CHECK-LABEL: test_cmpge
   2502 
   2503 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   2504 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   2505 // CHECK: [[CMP:%[^ ]+]] = icmp sge <16 x i8> [[VAL1]], [[VAL2]]
   2506 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2507   bc = sc >= sc2;
   2508 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   2509 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   2510 // CHECK: [[CMP:%[^ ]+]] = icmp uge <16 x i8> [[VAL1]], [[VAL2]]
   2511 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2512   bc = uc >= uc2;
   2513 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
   2514 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   2515 // CHECK: [[CMP:%[^ ]+]] = icmp uge <16 x i8> [[VAL1]], [[VAL2]]
   2516 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2517   bc = bc >= bc2;
   2518 
   2519 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   2520 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   2521 // CHECK: [[CMP:%[^ ]+]] = icmp sge <8 x i16> [[VAL1]], [[VAL2]]
   2522 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2523   bs = ss >= ss2;
   2524 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   2525 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   2526 // CHECK: [[CMP:%[^ ]+]] = icmp uge <8 x i16> [[VAL1]], [[VAL2]]
   2527 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2528   bs = us >= us2;
   2529 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   2530 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   2531 // CHECK: [[CMP:%[^ ]+]] = icmp uge <8 x i16> [[VAL1]], [[VAL2]]
   2532 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2533   bs = bs >= bs2;
   2534 
   2535 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   2536 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   2537 // CHECK: [[CMP:%[^ ]+]] = icmp sge <4 x i32> [[VAL1]], [[VAL2]]
   2538 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2539   bi = si >= si2;
   2540 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   2541 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   2542 // CHECK: [[CMP:%[^ ]+]] = icmp uge <4 x i32> [[VAL1]], [[VAL2]]
   2543 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2544   bi = ui >= ui2;
   2545 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   2546 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   2547 // CHECK: [[CMP:%[^ ]+]] = icmp uge <4 x i32> [[VAL1]], [[VAL2]]
   2548 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2549   bi = bi >= bi2;
   2550 
   2551 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   2552 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   2553 // CHECK: [[CMP:%[^ ]+]] = icmp sge <2 x i64> [[VAL1]], [[VAL2]]
   2554 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2555   bl = sl >= sl2;
   2556 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   2557 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   2558 // CHECK: [[CMP:%[^ ]+]] = icmp uge <2 x i64> [[VAL1]], [[VAL2]]
   2559 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2560   bl = ul >= ul2;
   2561 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   2562 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   2563 // CHECK: [[CMP:%[^ ]+]] = icmp uge <2 x i64> [[VAL1]], [[VAL2]]
   2564 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2565   bl = bl >= bl2;
   2566 
   2567 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd
   2568 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
   2569 // CHECK: [[CMP:%[^ ]+]] = fcmp oge <2 x double> [[VAL1]], [[VAL2]]
   2570 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2571   bl = fd >= fd2;
   2572 }
   2573 
   2574 void test_cmpgt (void)
   2575 {
   2576 // CHECK-LABEL: test_cmpgt
   2577 
   2578 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   2579 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   2580 // CHECK: [[CMP:%[^ ]+]] = icmp sgt <16 x i8> [[VAL1]], [[VAL2]]
   2581 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2582   bc = sc > sc2;
   2583 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   2584 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   2585 // CHECK: [[CMP:%[^ ]+]] = icmp ugt <16 x i8> [[VAL1]], [[VAL2]]
   2586 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2587   bc = uc > uc2;
   2588 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
   2589 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   2590 // CHECK: [[CMP:%[^ ]+]] = icmp ugt <16 x i8> [[VAL1]], [[VAL2]]
   2591 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2592   bc = bc > bc2;
   2593 
   2594 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   2595 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   2596 // CHECK: [[CMP:%[^ ]+]] = icmp sgt <8 x i16> [[VAL1]], [[VAL2]]
   2597 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2598   bs = ss > ss2;
   2599 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   2600 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   2601 // CHECK: [[CMP:%[^ ]+]] = icmp ugt <8 x i16> [[VAL1]], [[VAL2]]
   2602 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2603   bs = us > us2;
   2604 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   2605 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   2606 // CHECK: [[CMP:%[^ ]+]] = icmp ugt <8 x i16> [[VAL1]], [[VAL2]]
   2607 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2608   bs = bs > bs2;
   2609 
   2610 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   2611 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   2612 // CHECK: [[CMP:%[^ ]+]] = icmp sgt <4 x i32> [[VAL1]], [[VAL2]]
   2613 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2614   bi = si > si2;
   2615 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   2616 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   2617 // CHECK: [[CMP:%[^ ]+]] = icmp ugt <4 x i32> [[VAL1]], [[VAL2]]
   2618 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2619   bi = ui > ui2;
   2620 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   2621 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   2622 // CHECK: [[CMP:%[^ ]+]] = icmp ugt <4 x i32> [[VAL1]], [[VAL2]]
   2623 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2624   bi = bi > bi2;
   2625 
   2626 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   2627 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   2628 // CHECK: [[CMP:%[^ ]+]] = icmp sgt <2 x i64> [[VAL1]], [[VAL2]]
   2629 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2630   bl = sl > sl2;
   2631 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   2632 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   2633 // CHECK: [[CMP:%[^ ]+]] = icmp ugt <2 x i64> [[VAL1]], [[VAL2]]
   2634 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2635   bl = ul > ul2;
   2636 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   2637 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   2638 // CHECK: [[CMP:%[^ ]+]] = icmp ugt <2 x i64> [[VAL1]], [[VAL2]]
   2639 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2640   bl = bl > bl2;
   2641 
   2642 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd
   2643 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
   2644 // CHECK: [[CMP:%[^ ]+]] = fcmp ogt <2 x double> [[VAL1]], [[VAL2]]
   2645 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2646   bl = fd > fd2;
   2647 }
   2648 
   2649 void test_cmple (void)
   2650 {
   2651 // CHECK-LABEL: test_cmple
   2652 
   2653 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   2654 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   2655 // CHECK: [[CMP:%[^ ]+]] = icmp sle <16 x i8> [[VAL1]], [[VAL2]]
   2656 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2657   bc = sc <= sc2;
   2658 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   2659 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   2660 // CHECK: [[CMP:%[^ ]+]] = icmp ule <16 x i8> [[VAL1]], [[VAL2]]
   2661 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2662   bc = uc <= uc2;
   2663 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
   2664 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   2665 // CHECK: [[CMP:%[^ ]+]] = icmp ule <16 x i8> [[VAL1]], [[VAL2]]
   2666 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2667   bc = bc <= bc2;
   2668 
   2669 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   2670 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   2671 // CHECK: [[CMP:%[^ ]+]] = icmp sle <8 x i16> [[VAL1]], [[VAL2]]
   2672 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2673   bs = ss <= ss2;
   2674 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   2675 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   2676 // CHECK: [[CMP:%[^ ]+]] = icmp ule <8 x i16> [[VAL1]], [[VAL2]]
   2677 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2678   bs = us <= us2;
   2679 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   2680 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   2681 // CHECK: [[CMP:%[^ ]+]] = icmp ule <8 x i16> [[VAL1]], [[VAL2]]
   2682 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2683   bs = bs <= bs2;
   2684 
   2685 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   2686 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   2687 // CHECK: [[CMP:%[^ ]+]] = icmp sle <4 x i32> [[VAL1]], [[VAL2]]
   2688 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2689   bi = si <= si2;
   2690 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   2691 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   2692 // CHECK: [[CMP:%[^ ]+]] = icmp ule <4 x i32> [[VAL1]], [[VAL2]]
   2693 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2694   bi = ui <= ui2;
   2695 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   2696 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   2697 // CHECK: [[CMP:%[^ ]+]] = icmp ule <4 x i32> [[VAL1]], [[VAL2]]
   2698 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2699   bi = bi <= bi2;
   2700 
   2701 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   2702 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   2703 // CHECK: [[CMP:%[^ ]+]] = icmp sle <2 x i64> [[VAL1]], [[VAL2]]
   2704 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2705   bl = sl <= sl2;
   2706 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   2707 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   2708 // CHECK: [[CMP:%[^ ]+]] = icmp ule <2 x i64> [[VAL1]], [[VAL2]]
   2709 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2710   bl = ul <= ul2;
   2711 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   2712 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   2713 // CHECK: [[CMP:%[^ ]+]] = icmp ule <2 x i64> [[VAL1]], [[VAL2]]
   2714 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2715   bl = bl <= bl2;
   2716 
   2717 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd
   2718 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
   2719 // CHECK: [[CMP:%[^ ]+]] = fcmp ole <2 x double> [[VAL1]], [[VAL2]]
   2720 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2721   bl = fd <= fd2;
   2722 }
   2723 
   2724 void test_cmplt (void)
   2725 {
   2726 // CHECK-LABEL: test_cmplt
   2727 
   2728 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc
   2729 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @sc2
   2730 // CHECK: [[CMP:%[^ ]+]] = icmp slt <16 x i8> [[VAL1]], [[VAL2]]
   2731 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2732   bc = sc < sc2;
   2733 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc
   2734 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @uc2
   2735 // CHECK: [[CMP:%[^ ]+]] = icmp ult <16 x i8> [[VAL1]], [[VAL2]]
   2736 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2737   bc = uc < uc2;
   2738 // CHECK: [[VAL1:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc
   2739 // CHECK: [[VAL2:%[^ ]+]] = load volatile <16 x i8>, <16 x i8>* @bc2
   2740 // CHECK: [[CMP:%[^ ]+]] = icmp ult <16 x i8> [[VAL1]], [[VAL2]]
   2741 // CHECK: %{{.*}} = sext <16 x i1> [[CMP]] to <16 x i8>
   2742   bc = bc < bc2;
   2743 
   2744 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss
   2745 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @ss2
   2746 // CHECK: [[CMP:%[^ ]+]] = icmp slt <8 x i16> [[VAL1]], [[VAL2]]
   2747 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2748   bs = ss < ss2;
   2749 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us
   2750 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @us2
   2751 // CHECK: [[CMP:%[^ ]+]] = icmp ult <8 x i16> [[VAL1]], [[VAL2]]
   2752 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2753   bs = us < us2;
   2754 // CHECK: [[VAL1:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs
   2755 // CHECK: [[VAL2:%[^ ]+]] = load volatile <8 x i16>, <8 x i16>* @bs2
   2756 // CHECK: [[CMP:%[^ ]+]] = icmp ult <8 x i16> [[VAL1]], [[VAL2]]
   2757 // CHECK: %{{.*}} = sext <8 x i1> [[CMP]] to <8 x i16>
   2758   bs = bs < bs2;
   2759 
   2760 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si
   2761 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @si2
   2762 // CHECK: [[CMP:%[^ ]+]] = icmp slt <4 x i32> [[VAL1]], [[VAL2]]
   2763 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2764   bi = si < si2;
   2765 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui
   2766 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @ui2
   2767 // CHECK: [[CMP:%[^ ]+]] = icmp ult <4 x i32> [[VAL1]], [[VAL2]]
   2768 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2769   bi = ui < ui2;
   2770 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi
   2771 // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x i32>, <4 x i32>* @bi2
   2772 // CHECK: [[CMP:%[^ ]+]] = icmp ult <4 x i32> [[VAL1]], [[VAL2]]
   2773 // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
   2774   bi = bi < bi2;
   2775 
   2776 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl
   2777 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @sl2
   2778 // CHECK: [[CMP:%[^ ]+]] = icmp slt <2 x i64> [[VAL1]], [[VAL2]]
   2779 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2780   bl = sl < sl2;
   2781 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul
   2782 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @ul2
   2783 // CHECK: [[CMP:%[^ ]+]] = icmp ult <2 x i64> [[VAL1]], [[VAL2]]
   2784 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2785   bl = ul < ul2;
   2786 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl
   2787 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x i64>, <2 x i64>* @bl2
   2788 // CHECK: [[CMP:%[^ ]+]] = icmp ult <2 x i64> [[VAL1]], [[VAL2]]
   2789 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2790   bl = bl < bl2;
   2791 
   2792 // CHECK: [[VAL1:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd
   2793 // CHECK: [[VAL2:%[^ ]+]] = load volatile <2 x double>, <2 x double>* @fd2
   2794 // CHECK: [[CMP:%[^ ]+]] = fcmp olt <2 x double> [[VAL1]], [[VAL2]]
   2795 // CHECK: %{{.*}} = sext <2 x i1> [[CMP]] to <2 x i64>
   2796   bl = fd < fd2;
   2797 }
   2798 
   2799