Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / Hexagon / autohvx / logical-128b.ll
blob91f56d75fb1208db4ce31b2a821a8c2d9f7fbe7a
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -march=hexagon < %s | FileCheck %s
4 declare <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32>, i32) #0
5 declare <32 x i32> @llvm.hexagon.V6.vandqrt.128B(<128 x i1>, i32) #0
6 declare <32 x i1> @llvm.hexagon.V6.pred.typecast.128B.v32i1.v128i1(<128 x i1>) #0
7 declare <128 x i1> @llvm.hexagon.V6.pred.typecast.128B.v128i1.v32i1(<32 x i1>) #0
8 declare <64 x i1> @llvm.hexagon.V6.pred.typecast.128B.v64i1.v128i1(<128 x i1>) #0
9 declare <128 x i1> @llvm.hexagon.V6.pred.typecast.128B.v128i1.v64i1(<64 x i1>) #0
11 define <32 x i32> @f0(<32 x i32> %a0, <32 x i32> %a1) #1 {
12 ; CHECK-LABEL: f0:
13 ; CHECK:       // %bb.0: // %b0
14 ; CHECK-NEXT:    {
15 ; CHECK-NEXT:     r0 = #-1
16 ; CHECK-NEXT:    }
17 ; CHECK-NEXT:    {
18 ; CHECK-NEXT:     q0 = vand(v0,r0)
19 ; CHECK-NEXT:    }
20 ; CHECK-NEXT:    {
21 ; CHECK-NEXT:     q1 = vand(v1,r0)
22 ; CHECK-NEXT:    }
23 ; CHECK-NEXT:    {
24 ; CHECK-NEXT:     q0 = and(q0,q1)
25 ; CHECK-NEXT:    }
26 ; CHECK-NEXT:    {
27 ; CHECK-NEXT:     v0 = vand(q0,r0)
28 ; CHECK-NEXT:    }
29 ; CHECK-NEXT:    {
30 ; CHECK-NEXT:     jumpr r31
31 ; CHECK-NEXT:    }
32 b0:
33   %v0 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a0, i32 -1)
34   %v1 = call <32 x i1> @llvm.hexagon.V6.pred.typecast.128B.v32i1.v128i1(<128 x i1> %v0)
35   %v2 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a1, i32 -1)
36   %v3 = call <32 x i1> @llvm.hexagon.V6.pred.typecast.128B.v32i1.v128i1(<128 x i1> %v2)
37   %v4 = and <32 x i1> %v1, %v3
38   %v5 = call <128 x i1> @llvm.hexagon.V6.pred.typecast.128B.v128i1.v32i1(<32 x i1> %v4)
39   %v6 = call <32 x i32> @llvm.hexagon.V6.vandqrt.128B(<128 x i1> %v5, i32 -1)
40   ret <32 x i32> %v6
43 define <32 x i32> @f1(<32 x i32> %a0, <32 x i32> %a1) #1 {
44 ; CHECK-LABEL: f1:
45 ; CHECK:       // %bb.0: // %b0
46 ; CHECK-NEXT:    {
47 ; CHECK-NEXT:     r0 = #-1
48 ; CHECK-NEXT:    }
49 ; CHECK-NEXT:    {
50 ; CHECK-NEXT:     q0 = vand(v0,r0)
51 ; CHECK-NEXT:    }
52 ; CHECK-NEXT:    {
53 ; CHECK-NEXT:     q1 = vand(v1,r0)
54 ; CHECK-NEXT:    }
55 ; CHECK-NEXT:    {
56 ; CHECK-NEXT:     q0 = or(q0,q1)
57 ; CHECK-NEXT:    }
58 ; CHECK-NEXT:    {
59 ; CHECK-NEXT:     v0 = vand(q0,r0)
60 ; CHECK-NEXT:    }
61 ; CHECK-NEXT:    {
62 ; CHECK-NEXT:     jumpr r31
63 ; CHECK-NEXT:    }
64 b0:
65   %v0 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a0, i32 -1)
66   %v1 = call <32 x i1> @llvm.hexagon.V6.pred.typecast.128B.v32i1.v128i1(<128 x i1> %v0)
67   %v2 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a1, i32 -1)
68   %v3 = call <32 x i1> @llvm.hexagon.V6.pred.typecast.128B.v32i1.v128i1(<128 x i1> %v2)
69   %v4 = or <32 x i1> %v1, %v3
70   %v5 = call <128 x i1> @llvm.hexagon.V6.pred.typecast.128B.v128i1.v32i1(<32 x i1> %v4)
71   %v6 = call <32 x i32> @llvm.hexagon.V6.vandqrt.128B(<128 x i1> %v5, i32 -1)
72   ret <32 x i32> %v6
75 define <32 x i32> @f2(<32 x i32> %a0, <32 x i32> %a1) #1 {
76 ; CHECK-LABEL: f2:
77 ; CHECK:       // %bb.0: // %b0
78 ; CHECK-NEXT:    {
79 ; CHECK-NEXT:     r0 = #-1
80 ; CHECK-NEXT:    }
81 ; CHECK-NEXT:    {
82 ; CHECK-NEXT:     q0 = vand(v0,r0)
83 ; CHECK-NEXT:    }
84 ; CHECK-NEXT:    {
85 ; CHECK-NEXT:     q1 = vand(v1,r0)
86 ; CHECK-NEXT:    }
87 ; CHECK-NEXT:    {
88 ; CHECK-NEXT:     q0 = xor(q0,q1)
89 ; CHECK-NEXT:    }
90 ; CHECK-NEXT:    {
91 ; CHECK-NEXT:     v0 = vand(q0,r0)
92 ; CHECK-NEXT:    }
93 ; CHECK-NEXT:    {
94 ; CHECK-NEXT:     jumpr r31
95 ; CHECK-NEXT:    }
96 b0:
97   %v0 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a0, i32 -1)
98   %v1 = call <32 x i1> @llvm.hexagon.V6.pred.typecast.128B.v32i1.v128i1(<128 x i1> %v0)
99   %v2 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a1, i32 -1)
100   %v3 = call <32 x i1> @llvm.hexagon.V6.pred.typecast.128B.v32i1.v128i1(<128 x i1> %v2)
101   %v4 = xor <32 x i1> %v1, %v3
102   %v5 = call <128 x i1> @llvm.hexagon.V6.pred.typecast.128B.v128i1.v32i1(<32 x i1> %v4)
103   %v6 = call <32 x i32> @llvm.hexagon.V6.vandqrt.128B(<128 x i1> %v5, i32 -1)
104   ret <32 x i32> %v6
107 define <32 x i32> @f3(<32 x i32> %a0, <32 x i32> %a1) #1 {
108 ; CHECK-LABEL: f3:
109 ; CHECK:       // %bb.0: // %b0
110 ; CHECK-NEXT:    {
111 ; CHECK-NEXT:     r0 = #-1
112 ; CHECK-NEXT:    }
113 ; CHECK-NEXT:    {
114 ; CHECK-NEXT:     q0 = vand(v0,r0)
115 ; CHECK-NEXT:    }
116 ; CHECK-NEXT:    {
117 ; CHECK-NEXT:     q1 = vand(v1,r0)
118 ; CHECK-NEXT:    }
119 ; CHECK-NEXT:    {
120 ; CHECK-NEXT:     q0 = and(q0,!q1)
121 ; CHECK-NEXT:    }
122 ; CHECK-NEXT:    {
123 ; CHECK-NEXT:     v0 = vand(q0,r0)
124 ; CHECK-NEXT:    }
125 ; CHECK-NEXT:    {
126 ; CHECK-NEXT:     jumpr r31
127 ; CHECK-NEXT:    }
129   %v0 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a0, i32 -1)
130   %v1 = call <32 x i1> @llvm.hexagon.V6.pred.typecast.128B.v32i1.v128i1(<128 x i1> %v0)
131   %v2 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a1, i32 -1)
132   %v3 = call <32 x i1> @llvm.hexagon.V6.pred.typecast.128B.v32i1.v128i1(<128 x i1> %v2)
133   %v4 = xor <32 x i1> %v3, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
134   %v5 = and <32 x i1> %v1, %v4
135   %v6 = call <128 x i1> @llvm.hexagon.V6.pred.typecast.128B.v128i1.v32i1(<32 x i1> %v5)
136   %v7 = call <32 x i32> @llvm.hexagon.V6.vandqrt.128B(<128 x i1> %v6, i32 -1)
137   ret <32 x i32> %v7
140 define <32 x i32> @f4(<32 x i32> %a0, <32 x i32> %a1) #1 {
141 ; CHECK-LABEL: f4:
142 ; CHECK:       // %bb.0: // %b0
143 ; CHECK-NEXT:    {
144 ; CHECK-NEXT:     r0 = #-1
145 ; CHECK-NEXT:    }
146 ; CHECK-NEXT:    {
147 ; CHECK-NEXT:     q0 = vand(v0,r0)
148 ; CHECK-NEXT:    }
149 ; CHECK-NEXT:    {
150 ; CHECK-NEXT:     q1 = vand(v1,r0)
151 ; CHECK-NEXT:    }
152 ; CHECK-NEXT:    {
153 ; CHECK-NEXT:     q0 = or(q0,!q1)
154 ; CHECK-NEXT:    }
155 ; CHECK-NEXT:    {
156 ; CHECK-NEXT:     v0 = vand(q0,r0)
157 ; CHECK-NEXT:    }
158 ; CHECK-NEXT:    {
159 ; CHECK-NEXT:     jumpr r31
160 ; CHECK-NEXT:    }
162   %v0 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a0, i32 -1)
163   %v1 = call <32 x i1> @llvm.hexagon.V6.pred.typecast.128B.v32i1.v128i1(<128 x i1> %v0)
164   %v2 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a1, i32 -1)
165   %v3 = call <32 x i1> @llvm.hexagon.V6.pred.typecast.128B.v32i1.v128i1(<128 x i1> %v2)
166   %v4 = xor <32 x i1> %v3, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
167   %v5 = or <32 x i1> %v1, %v4
168   %v6 = call <128 x i1> @llvm.hexagon.V6.pred.typecast.128B.v128i1.v32i1(<32 x i1> %v5)
169   %v7 = call <32 x i32> @llvm.hexagon.V6.vandqrt.128B(<128 x i1> %v6, i32 -1)
170   ret <32 x i32> %v7
173 define <32 x i32> @f5(<32 x i32> %a0, <32 x i32> %a1) #1 {
174 ; CHECK-LABEL: f5:
175 ; CHECK:       // %bb.0: // %b0
176 ; CHECK-NEXT:    {
177 ; CHECK-NEXT:     r0 = #-1
178 ; CHECK-NEXT:    }
179 ; CHECK-NEXT:    {
180 ; CHECK-NEXT:     q0 = vand(v0,r0)
181 ; CHECK-NEXT:    }
182 ; CHECK-NEXT:    {
183 ; CHECK-NEXT:     q1 = vand(v1,r0)
184 ; CHECK-NEXT:    }
185 ; CHECK-NEXT:    {
186 ; CHECK-NEXT:     q0 = and(q0,q1)
187 ; CHECK-NEXT:    }
188 ; CHECK-NEXT:    {
189 ; CHECK-NEXT:     v0 = vand(q0,r0)
190 ; CHECK-NEXT:    }
191 ; CHECK-NEXT:    {
192 ; CHECK-NEXT:     jumpr r31
193 ; CHECK-NEXT:    }
195   %v0 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a0, i32 -1)
196   %v1 = call <64 x i1> @llvm.hexagon.V6.pred.typecast.128B.v64i1.v128i1(<128 x i1> %v0)
197   %v2 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a1, i32 -1)
198   %v3 = call <64 x i1> @llvm.hexagon.V6.pred.typecast.128B.v64i1.v128i1(<128 x i1> %v2)
199   %v4 = and <64 x i1> %v1, %v3
200   %v5 = call <128 x i1> @llvm.hexagon.V6.pred.typecast.128B.v128i1.v64i1(<64 x i1> %v4)
201   %v6 = call <32 x i32> @llvm.hexagon.V6.vandqrt.128B(<128 x i1> %v5, i32 -1)
202   ret <32 x i32> %v6
205 define <32 x i32> @f6(<32 x i32> %a0, <32 x i32> %a1) #1 {
206 ; CHECK-LABEL: f6:
207 ; CHECK:       // %bb.0: // %b0
208 ; CHECK-NEXT:    {
209 ; CHECK-NEXT:     r0 = #-1
210 ; CHECK-NEXT:    }
211 ; CHECK-NEXT:    {
212 ; CHECK-NEXT:     q0 = vand(v0,r0)
213 ; CHECK-NEXT:    }
214 ; CHECK-NEXT:    {
215 ; CHECK-NEXT:     q1 = vand(v1,r0)
216 ; CHECK-NEXT:    }
217 ; CHECK-NEXT:    {
218 ; CHECK-NEXT:     q0 = or(q0,q1)
219 ; CHECK-NEXT:    }
220 ; CHECK-NEXT:    {
221 ; CHECK-NEXT:     v0 = vand(q0,r0)
222 ; CHECK-NEXT:    }
223 ; CHECK-NEXT:    {
224 ; CHECK-NEXT:     jumpr r31
225 ; CHECK-NEXT:    }
227   %v0 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a0, i32 -1)
228   %v1 = call <64 x i1> @llvm.hexagon.V6.pred.typecast.128B.v64i1.v128i1(<128 x i1> %v0)
229   %v2 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a1, i32 -1)
230   %v3 = call <64 x i1> @llvm.hexagon.V6.pred.typecast.128B.v64i1.v128i1(<128 x i1> %v2)
231   %v4 = or <64 x i1> %v1, %v3
232   %v5 = call <128 x i1> @llvm.hexagon.V6.pred.typecast.128B.v128i1.v64i1(<64 x i1> %v4)
233   %v6 = call <32 x i32> @llvm.hexagon.V6.vandqrt.128B(<128 x i1> %v5, i32 -1)
234   ret <32 x i32> %v6
237 define <32 x i32> @f7(<32 x i32> %a0, <32 x i32> %a1) #1 {
238 ; CHECK-LABEL: f7:
239 ; CHECK:       // %bb.0: // %b0
240 ; CHECK-NEXT:    {
241 ; CHECK-NEXT:     r0 = #-1
242 ; CHECK-NEXT:    }
243 ; CHECK-NEXT:    {
244 ; CHECK-NEXT:     q0 = vand(v0,r0)
245 ; CHECK-NEXT:    }
246 ; CHECK-NEXT:    {
247 ; CHECK-NEXT:     q1 = vand(v1,r0)
248 ; CHECK-NEXT:    }
249 ; CHECK-NEXT:    {
250 ; CHECK-NEXT:     q0 = xor(q0,q1)
251 ; CHECK-NEXT:    }
252 ; CHECK-NEXT:    {
253 ; CHECK-NEXT:     v0 = vand(q0,r0)
254 ; CHECK-NEXT:    }
255 ; CHECK-NEXT:    {
256 ; CHECK-NEXT:     jumpr r31
257 ; CHECK-NEXT:    }
259   %v0 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a0, i32 -1)
260   %v1 = call <64 x i1> @llvm.hexagon.V6.pred.typecast.128B.v64i1.v128i1(<128 x i1> %v0)
261   %v2 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a1, i32 -1)
262   %v3 = call <64 x i1> @llvm.hexagon.V6.pred.typecast.128B.v64i1.v128i1(<128 x i1> %v2)
263   %v4 = xor <64 x i1> %v1, %v3
264   %v5 = call <128 x i1> @llvm.hexagon.V6.pred.typecast.128B.v128i1.v64i1(<64 x i1> %v4)
265   %v6 = call <32 x i32> @llvm.hexagon.V6.vandqrt.128B(<128 x i1> %v5, i32 -1)
266   ret <32 x i32> %v6
269 define <32 x i32> @f8(<32 x i32> %a0, <32 x i32> %a1) #1 {
270 ; CHECK-LABEL: f8:
271 ; CHECK:       // %bb.0: // %b0
272 ; CHECK-NEXT:    {
273 ; CHECK-NEXT:     r0 = #-1
274 ; CHECK-NEXT:    }
275 ; CHECK-NEXT:    {
276 ; CHECK-NEXT:     q0 = vand(v0,r0)
277 ; CHECK-NEXT:    }
278 ; CHECK-NEXT:    {
279 ; CHECK-NEXT:     q1 = vand(v1,r0)
280 ; CHECK-NEXT:    }
281 ; CHECK-NEXT:    {
282 ; CHECK-NEXT:     q0 = and(q0,!q1)
283 ; CHECK-NEXT:    }
284 ; CHECK-NEXT:    {
285 ; CHECK-NEXT:     v0 = vand(q0,r0)
286 ; CHECK-NEXT:    }
287 ; CHECK-NEXT:    {
288 ; CHECK-NEXT:     jumpr r31
289 ; CHECK-NEXT:    }
291   %v0 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a0, i32 -1)
292   %v1 = call <64 x i1> @llvm.hexagon.V6.pred.typecast.128B.v64i1.v128i1(<128 x i1> %v0)
293   %v2 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a1, i32 -1)
294   %v3 = call <64 x i1> @llvm.hexagon.V6.pred.typecast.128B.v64i1.v128i1(<128 x i1> %v2)
295   %v4 = xor <64 x i1> %v3, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
296   %v5 = and <64 x i1> %v1, %v4
297   %v6 = call <128 x i1> @llvm.hexagon.V6.pred.typecast.128B.v128i1.v64i1(<64 x i1> %v5)
298   %v7 = call <32 x i32> @llvm.hexagon.V6.vandqrt.128B(<128 x i1> %v6, i32 -1)
299   ret <32 x i32> %v7
302 define <32 x i32> @f9(<32 x i32> %a0, <32 x i32> %a1) #1 {
303 ; CHECK-LABEL: f9:
304 ; CHECK:       // %bb.0: // %b0
305 ; CHECK-NEXT:    {
306 ; CHECK-NEXT:     r0 = #-1
307 ; CHECK-NEXT:    }
308 ; CHECK-NEXT:    {
309 ; CHECK-NEXT:     q0 = vand(v0,r0)
310 ; CHECK-NEXT:    }
311 ; CHECK-NEXT:    {
312 ; CHECK-NEXT:     q1 = vand(v1,r0)
313 ; CHECK-NEXT:    }
314 ; CHECK-NEXT:    {
315 ; CHECK-NEXT:     q0 = or(q0,!q1)
316 ; CHECK-NEXT:    }
317 ; CHECK-NEXT:    {
318 ; CHECK-NEXT:     v0 = vand(q0,r0)
319 ; CHECK-NEXT:    }
320 ; CHECK-NEXT:    {
321 ; CHECK-NEXT:     jumpr r31
322 ; CHECK-NEXT:    }
324   %v0 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a0, i32 -1)
325   %v1 = call <64 x i1> @llvm.hexagon.V6.pred.typecast.128B.v64i1.v128i1(<128 x i1> %v0)
326   %v2 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a1, i32 -1)
327   %v3 = call <64 x i1> @llvm.hexagon.V6.pred.typecast.128B.v64i1.v128i1(<128 x i1> %v2)
328   %v4 = xor <64 x i1> %v3, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
329   %v5 = or <64 x i1> %v1, %v4
330   %v6 = call <128 x i1> @llvm.hexagon.V6.pred.typecast.128B.v128i1.v64i1(<64 x i1> %v5)
331   %v7 = call <32 x i32> @llvm.hexagon.V6.vandqrt.128B(<128 x i1> %v6, i32 -1)
332   ret <32 x i32> %v7
335 define <32 x i32> @f10(<32 x i32> %a0, <32 x i32> %a1) #1 {
336 ; CHECK-LABEL: f10:
337 ; CHECK:       // %bb.0: // %b0
338 ; CHECK-NEXT:    {
339 ; CHECK-NEXT:     r0 = #-1
340 ; CHECK-NEXT:    }
341 ; CHECK-NEXT:    {
342 ; CHECK-NEXT:     q0 = vand(v0,r0)
343 ; CHECK-NEXT:    }
344 ; CHECK-NEXT:    {
345 ; CHECK-NEXT:     q1 = vand(v1,r0)
346 ; CHECK-NEXT:    }
347 ; CHECK-NEXT:    {
348 ; CHECK-NEXT:     q0 = and(q0,q1)
349 ; CHECK-NEXT:    }
350 ; CHECK-NEXT:    {
351 ; CHECK-NEXT:     v0 = vand(q0,r0)
352 ; CHECK-NEXT:    }
353 ; CHECK-NEXT:    {
354 ; CHECK-NEXT:     jumpr r31
355 ; CHECK-NEXT:    }
357   %v0 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a0, i32 -1)
358   %v1 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a1, i32 -1)
359   %v2 = and <128 x i1> %v0, %v1
360   %v3 = call <32 x i32> @llvm.hexagon.V6.vandqrt.128B(<128 x i1> %v2, i32 -1)
361   ret <32 x i32> %v3
364 define <32 x i32> @f11(<32 x i32> %a0, <32 x i32> %a1) #1 {
365 ; CHECK-LABEL: f11:
366 ; CHECK:       // %bb.0: // %b0
367 ; CHECK-NEXT:    {
368 ; CHECK-NEXT:     r0 = #-1
369 ; CHECK-NEXT:    }
370 ; CHECK-NEXT:    {
371 ; CHECK-NEXT:     q0 = vand(v0,r0)
372 ; CHECK-NEXT:    }
373 ; CHECK-NEXT:    {
374 ; CHECK-NEXT:     q1 = vand(v1,r0)
375 ; CHECK-NEXT:    }
376 ; CHECK-NEXT:    {
377 ; CHECK-NEXT:     q0 = or(q0,q1)
378 ; CHECK-NEXT:    }
379 ; CHECK-NEXT:    {
380 ; CHECK-NEXT:     v0 = vand(q0,r0)
381 ; CHECK-NEXT:    }
382 ; CHECK-NEXT:    {
383 ; CHECK-NEXT:     jumpr r31
384 ; CHECK-NEXT:    }
386   %v0 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a0, i32 -1)
387   %v1 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a1, i32 -1)
388   %v2 = or <128 x i1> %v0, %v1
389   %v3 = call <32 x i32> @llvm.hexagon.V6.vandqrt.128B(<128 x i1> %v2, i32 -1)
390   ret <32 x i32> %v3
393 define <32 x i32> @f12(<32 x i32> %a0, <32 x i32> %a1) #1 {
394 ; CHECK-LABEL: f12:
395 ; CHECK:       // %bb.0: // %b0
396 ; CHECK-NEXT:    {
397 ; CHECK-NEXT:     r0 = #-1
398 ; CHECK-NEXT:    }
399 ; CHECK-NEXT:    {
400 ; CHECK-NEXT:     q0 = vand(v0,r0)
401 ; CHECK-NEXT:    }
402 ; CHECK-NEXT:    {
403 ; CHECK-NEXT:     q1 = vand(v1,r0)
404 ; CHECK-NEXT:    }
405 ; CHECK-NEXT:    {
406 ; CHECK-NEXT:     q0 = xor(q0,q1)
407 ; CHECK-NEXT:    }
408 ; CHECK-NEXT:    {
409 ; CHECK-NEXT:     v0 = vand(q0,r0)
410 ; CHECK-NEXT:    }
411 ; CHECK-NEXT:    {
412 ; CHECK-NEXT:     jumpr r31
413 ; CHECK-NEXT:    }
415   %v0 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a0, i32 -1)
416   %v1 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a1, i32 -1)
417   %v2 = xor <128 x i1> %v0, %v1
418   %v3 = call <32 x i32> @llvm.hexagon.V6.vandqrt.128B(<128 x i1> %v2, i32 -1)
419   ret <32 x i32> %v3
422 define <32 x i32> @f13(<32 x i32> %a0, <32 x i32> %a1) #1 {
423 ; CHECK-LABEL: f13:
424 ; CHECK:       // %bb.0: // %b0
425 ; CHECK-NEXT:    {
426 ; CHECK-NEXT:     r0 = #-1
427 ; CHECK-NEXT:    }
428 ; CHECK-NEXT:    {
429 ; CHECK-NEXT:     q0 = vand(v0,r0)
430 ; CHECK-NEXT:    }
431 ; CHECK-NEXT:    {
432 ; CHECK-NEXT:     q1 = vand(v1,r0)
433 ; CHECK-NEXT:    }
434 ; CHECK-NEXT:    {
435 ; CHECK-NEXT:     q0 = and(q0,!q1)
436 ; CHECK-NEXT:    }
437 ; CHECK-NEXT:    {
438 ; CHECK-NEXT:     v0 = vand(q0,r0)
439 ; CHECK-NEXT:    }
440 ; CHECK-NEXT:    {
441 ; CHECK-NEXT:     jumpr r31
442 ; CHECK-NEXT:    }
444   %v0 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a0, i32 -1)
445   %v1 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a1, i32 -1)
446   %v2 = xor <128 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
447   %v3 = and <128 x i1> %v0, %v2
448   %v4 = call <32 x i32> @llvm.hexagon.V6.vandqrt.128B(<128 x i1> %v3, i32 -1)
449   ret <32 x i32> %v4
452 define <32 x i32> @f14(<32 x i32> %a0, <32 x i32> %a1) #1 {
453 ; CHECK-LABEL: f14:
454 ; CHECK:       // %bb.0: // %b0
455 ; CHECK-NEXT:    {
456 ; CHECK-NEXT:     r0 = #-1
457 ; CHECK-NEXT:    }
458 ; CHECK-NEXT:    {
459 ; CHECK-NEXT:     q0 = vand(v0,r0)
460 ; CHECK-NEXT:    }
461 ; CHECK-NEXT:    {
462 ; CHECK-NEXT:     q1 = vand(v1,r0)
463 ; CHECK-NEXT:    }
464 ; CHECK-NEXT:    {
465 ; CHECK-NEXT:     q0 = or(q0,!q1)
466 ; CHECK-NEXT:    }
467 ; CHECK-NEXT:    {
468 ; CHECK-NEXT:     v0 = vand(q0,r0)
469 ; CHECK-NEXT:    }
470 ; CHECK-NEXT:    {
471 ; CHECK-NEXT:     jumpr r31
472 ; CHECK-NEXT:    }
474   %v0 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a0, i32 -1)
475   %v1 = call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %a1, i32 -1)
476   %v2 = xor <128 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
477   %v3 = or <128 x i1> %v0, %v2
478   %v4 = call <32 x i32> @llvm.hexagon.V6.vandqrt.128B(<128 x i1> %v3, i32 -1)
479   ret <32 x i32> %v4
482 attributes #0 = { nounwind readnone }
483 attributes #1 = { nounwind "target-cpu"="hexagonv66" "target-features"="+hvxv66,+hvx-length128b,-packets" }