[RISCV] Match vcompress during shuffle lowering (#117748)
[llvm-project.git] / llvm / test / CodeGen / Hexagon / isel / cmp-v2i1.ll
blob1f3df1122c64ca521d5438cb80a04010a0cfc6a7
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc -march=hexagon < %s | FileCheck %s
4 define void @f0(ptr %a0, ptr %a1, ptr %a2) {
5 ; CHECK-LABEL: f0:
6 ; CHECK:         .cfi_startproc
7 ; CHECK-NEXT:  // %bb.0: // %b0
8 ; CHECK-NEXT:    {
9 ; CHECK-NEXT:     r1 = memub(r1+#0)
10 ; CHECK-NEXT:     r0 = memub(r0+#0)
11 ; CHECK-NEXT:    }
12 ; CHECK-NEXT:    {
13 ; CHECK-NEXT:     p0 = r0
14 ; CHECK-NEXT:     p1 = r1
15 ; CHECK-NEXT:    }
16 ; CHECK-NEXT:    {
17 ; CHECK-NEXT:     p0 = xor(p0,p1)
18 ; CHECK-NEXT:    }
19 ; CHECK-NEXT:    {
20 ; CHECK-NEXT:     p0 = not(p0)
21 ; CHECK-NEXT:    }
22 ; CHECK-NEXT:    {
23 ; CHECK-NEXT:     r3 = p0
24 ; CHECK-NEXT:     jumpr r31
25 ; CHECK-NEXT:     memb(r2+#0) = r3.new
26 ; CHECK-NEXT:    }
27 b0:
28   %v0 = load <2 x i1>, ptr %a0
29   %v1 = load <2 x i1>, ptr %a1
30   %v2 = icmp eq <2 x i1> %v0, %v1
31   store <2 x i1> %v2, ptr %a2
32   ret void
35 define void @f1(ptr %a0, ptr %a1, ptr %a2) {
36 ; CHECK-LABEL: f1:
37 ; CHECK:         .cfi_startproc
38 ; CHECK-NEXT:  // %bb.0: // %b0
39 ; CHECK-NEXT:    {
40 ; CHECK-NEXT:     r1 = memub(r1+#0)
41 ; CHECK-NEXT:     r0 = memub(r0+#0)
42 ; CHECK-NEXT:    }
43 ; CHECK-NEXT:    {
44 ; CHECK-NEXT:     p0 = r0
45 ; CHECK-NEXT:     p1 = r1
46 ; CHECK-NEXT:    }
47 ; CHECK-NEXT:    {
48 ; CHECK-NEXT:     p0 = xor(p0,p1)
49 ; CHECK-NEXT:    }
50 ; CHECK-NEXT:    {
51 ; CHECK-NEXT:     r3 = p0
52 ; CHECK-NEXT:     jumpr r31
53 ; CHECK-NEXT:     memb(r2+#0) = r3.new
54 ; CHECK-NEXT:    }
55 b0:
56   %v0 = load <2 x i1>, ptr %a0
57   %v1 = load <2 x i1>, ptr %a1
58   %v2 = icmp ne <2 x i1> %v0, %v1
59   store <2 x i1> %v2, ptr %a2
60   ret void
63 define void @f2(ptr %a0, ptr %a1, ptr %a2) {
64 ; CHECK-LABEL: f2:
65 ; CHECK:         .cfi_startproc
66 ; CHECK-NEXT:  // %bb.0: // %b0
67 ; CHECK-NEXT:    {
68 ; CHECK-NEXT:     r1 = memub(r1+#0)
69 ; CHECK-NEXT:     r0 = memub(r0+#0)
70 ; CHECK-NEXT:    }
71 ; CHECK-NEXT:    {
72 ; CHECK-NEXT:     p0 = r0
73 ; CHECK-NEXT:     p1 = r1
74 ; CHECK-NEXT:    }
75 ; CHECK-NEXT:    {
76 ; CHECK-NEXT:     p0 = and(p0,!p1)
77 ; CHECK-NEXT:    }
78 ; CHECK-NEXT:    {
79 ; CHECK-NEXT:     r3 = p0
80 ; CHECK-NEXT:     jumpr r31
81 ; CHECK-NEXT:     memb(r2+#0) = r3.new
82 ; CHECK-NEXT:    }
83 b0:
84   %v0 = load <2 x i1>, ptr %a0
85   %v1 = load <2 x i1>, ptr %a1
86   %v2 = icmp slt <2 x i1> %v0, %v1
87   store <2 x i1> %v2, ptr %a2
88   ret void
91 define void @f3(ptr %a0, ptr %a1, ptr %a2) {
92 ; CHECK-LABEL: f3:
93 ; CHECK:         .cfi_startproc
94 ; CHECK-NEXT:  // %bb.0: // %b0
95 ; CHECK-NEXT:    {
96 ; CHECK-NEXT:     r1 = memub(r1+#0)
97 ; CHECK-NEXT:     r0 = memub(r0+#0)
98 ; CHECK-NEXT:    }
99 ; CHECK-NEXT:    {
100 ; CHECK-NEXT:     p0 = r0
101 ; CHECK-NEXT:     p1 = r1
102 ; CHECK-NEXT:    }
103 ; CHECK-NEXT:    {
104 ; CHECK-NEXT:     p0 = or(p0,!p1)
105 ; CHECK-NEXT:    }
106 ; CHECK-NEXT:    {
107 ; CHECK-NEXT:     r3 = p0
108 ; CHECK-NEXT:     jumpr r31
109 ; CHECK-NEXT:     memb(r2+#0) = r3.new
110 ; CHECK-NEXT:    }
112   %v0 = load <2 x i1>, ptr %a0
113   %v1 = load <2 x i1>, ptr %a1
114   %v2 = icmp sle <2 x i1> %v0, %v1
115   store <2 x i1> %v2, ptr %a2
116   ret void
119 define void @f4(ptr %a0, ptr %a1, ptr %a2) {
120 ; CHECK-LABEL: f4:
121 ; CHECK:         .cfi_startproc
122 ; CHECK-NEXT:  // %bb.0: // %b0
123 ; CHECK-NEXT:    {
124 ; CHECK-NEXT:     r1 = memub(r1+#0)
125 ; CHECK-NEXT:     r0 = memub(r0+#0)
126 ; CHECK-NEXT:    }
127 ; CHECK-NEXT:    {
128 ; CHECK-NEXT:     p0 = r0
129 ; CHECK-NEXT:     p1 = r1
130 ; CHECK-NEXT:    }
131 ; CHECK-NEXT:    {
132 ; CHECK-NEXT:     p0 = and(p1,!p0)
133 ; CHECK-NEXT:    }
134 ; CHECK-NEXT:    {
135 ; CHECK-NEXT:     r3 = p0
136 ; CHECK-NEXT:     jumpr r31
137 ; CHECK-NEXT:     memb(r2+#0) = r3.new
138 ; CHECK-NEXT:    }
140   %v0 = load <2 x i1>, ptr %a0
141   %v1 = load <2 x i1>, ptr %a1
142   %v2 = icmp sgt <2 x i1> %v0, %v1
143   store <2 x i1> %v2, ptr %a2
144   ret void
147 define void @f5(ptr %a0, ptr %a1, ptr %a2) {
148 ; CHECK-LABEL: f5:
149 ; CHECK:         .cfi_startproc
150 ; CHECK-NEXT:  // %bb.0: // %b0
151 ; CHECK-NEXT:    {
152 ; CHECK-NEXT:     r1 = memub(r1+#0)
153 ; CHECK-NEXT:     r0 = memub(r0+#0)
154 ; CHECK-NEXT:    }
155 ; CHECK-NEXT:    {
156 ; CHECK-NEXT:     p0 = r0
157 ; CHECK-NEXT:     p1 = r1
158 ; CHECK-NEXT:    }
159 ; CHECK-NEXT:    {
160 ; CHECK-NEXT:     p0 = or(p1,!p0)
161 ; CHECK-NEXT:    }
162 ; CHECK-NEXT:    {
163 ; CHECK-NEXT:     r3 = p0
164 ; CHECK-NEXT:     jumpr r31
165 ; CHECK-NEXT:     memb(r2+#0) = r3.new
166 ; CHECK-NEXT:    }
168   %v0 = load <2 x i1>, ptr %a0
169   %v1 = load <2 x i1>, ptr %a1
170   %v2 = icmp sge <2 x i1> %v0, %v1
171   store <2 x i1> %v2, ptr %a2
172   ret void
175 define void @f6(ptr %a0, ptr %a1, ptr %a2) {
176 ; CHECK-LABEL: f6:
177 ; CHECK:         .cfi_startproc
178 ; CHECK-NEXT:  // %bb.0: // %b0
179 ; CHECK-NEXT:    {
180 ; CHECK-NEXT:     r1 = memub(r1+#0)
181 ; CHECK-NEXT:     r0 = memub(r0+#0)
182 ; CHECK-NEXT:    }
183 ; CHECK-NEXT:    {
184 ; CHECK-NEXT:     p0 = r0
185 ; CHECK-NEXT:     p1 = r1
186 ; CHECK-NEXT:    }
187 ; CHECK-NEXT:    {
188 ; CHECK-NEXT:     p0 = and(p1,!p0)
189 ; CHECK-NEXT:    }
190 ; CHECK-NEXT:    {
191 ; CHECK-NEXT:     r3 = p0
192 ; CHECK-NEXT:     jumpr r31
193 ; CHECK-NEXT:     memb(r2+#0) = r3.new
194 ; CHECK-NEXT:    }
196   %v0 = load <2 x i1>, ptr %a0
197   %v1 = load <2 x i1>, ptr %a1
198   %v2 = icmp ult <2 x i1> %v0, %v1
199   store <2 x i1> %v2, ptr %a2
200   ret void
203 define void @f7(ptr %a0, ptr %a1, ptr %a2) {
204 ; CHECK-LABEL: f7:
205 ; CHECK:         .cfi_startproc
206 ; CHECK-NEXT:  // %bb.0: // %b0
207 ; CHECK-NEXT:    {
208 ; CHECK-NEXT:     r1 = memub(r1+#0)
209 ; CHECK-NEXT:     r0 = memub(r0+#0)
210 ; CHECK-NEXT:    }
211 ; CHECK-NEXT:    {
212 ; CHECK-NEXT:     p0 = r0
213 ; CHECK-NEXT:     p1 = r1
214 ; CHECK-NEXT:    }
215 ; CHECK-NEXT:    {
216 ; CHECK-NEXT:     p0 = or(p1,!p0)
217 ; CHECK-NEXT:    }
218 ; CHECK-NEXT:    {
219 ; CHECK-NEXT:     r3 = p0
220 ; CHECK-NEXT:     jumpr r31
221 ; CHECK-NEXT:     memb(r2+#0) = r3.new
222 ; CHECK-NEXT:    }
224   %v0 = load <2 x i1>, ptr %a0
225   %v1 = load <2 x i1>, ptr %a1
226   %v2 = icmp ule <2 x i1> %v0, %v1
227   store <2 x i1> %v2, ptr %a2
228   ret void
231 define void @f8(ptr %a0, ptr %a1, ptr %a2) {
232 ; CHECK-LABEL: f8:
233 ; CHECK:         .cfi_startproc
234 ; CHECK-NEXT:  // %bb.0: // %b0
235 ; CHECK-NEXT:    {
236 ; CHECK-NEXT:     r1 = memub(r1+#0)
237 ; CHECK-NEXT:     r0 = memub(r0+#0)
238 ; CHECK-NEXT:    }
239 ; CHECK-NEXT:    {
240 ; CHECK-NEXT:     p0 = r0
241 ; CHECK-NEXT:     p1 = r1
242 ; CHECK-NEXT:    }
243 ; CHECK-NEXT:    {
244 ; CHECK-NEXT:     p0 = and(p0,!p1)
245 ; CHECK-NEXT:    }
246 ; CHECK-NEXT:    {
247 ; CHECK-NEXT:     r3 = p0
248 ; CHECK-NEXT:     jumpr r31
249 ; CHECK-NEXT:     memb(r2+#0) = r3.new
250 ; CHECK-NEXT:    }
252   %v0 = load <2 x i1>, ptr %a0
253   %v1 = load <2 x i1>, ptr %a1
254   %v2 = icmp ugt <2 x i1> %v0, %v1
255   store <2 x i1> %v2, ptr %a2
256   ret void
259 define void @f9(ptr %a0, ptr %a1, ptr %a2) {
260 ; CHECK-LABEL: f9:
261 ; CHECK:         .cfi_startproc
262 ; CHECK-NEXT:  // %bb.0: // %b0
263 ; CHECK-NEXT:    {
264 ; CHECK-NEXT:     r1 = memub(r1+#0)
265 ; CHECK-NEXT:     r0 = memub(r0+#0)
266 ; CHECK-NEXT:    }
267 ; CHECK-NEXT:    {
268 ; CHECK-NEXT:     p0 = r0
269 ; CHECK-NEXT:     p1 = r1
270 ; CHECK-NEXT:    }
271 ; CHECK-NEXT:    {
272 ; CHECK-NEXT:     p0 = or(p0,!p1)
273 ; CHECK-NEXT:    }
274 ; CHECK-NEXT:    {
275 ; CHECK-NEXT:     r3 = p0
276 ; CHECK-NEXT:     jumpr r31
277 ; CHECK-NEXT:     memb(r2+#0) = r3.new
278 ; CHECK-NEXT:    }
280   %v0 = load <2 x i1>, ptr %a0
281   %v1 = load <2 x i1>, ptr %a1
282   %v2 = icmp uge <2 x i1> %v0, %v1
283   store <2 x i1> %v2, ptr %a2
284   ret void