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