[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / Hexagon / isel / cmp-i1.ll
blob7d589d21ed9489feeebf4a20ed59def2a6a1a417
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:     r0 = mux(p0,#0,#1)
21 ; CHECK-NEXT:     jumpr r31
22 ; CHECK-NEXT:     memb(r2+#0) = r0.new
23 ; CHECK-NEXT:    }
24 b0:
25   %v0 = load i1, ptr %a0
26   %v1 = load i1, ptr %a1
27   %v2 = icmp eq i1 %v0, %v1
28   store i1 %v2, ptr %a2
29   ret void
32 define void @f1(ptr %a0, ptr %a1, ptr %a2) {
33 ; CHECK-LABEL: f1:
34 ; CHECK:         .cfi_startproc
35 ; CHECK-NEXT:  // %bb.0: // %b0
36 ; CHECK-NEXT:    {
37 ; CHECK-NEXT:     r1 = memub(r1+#0)
38 ; CHECK-NEXT:     r0 = memub(r0+#0)
39 ; CHECK-NEXT:    }
40 ; CHECK-NEXT:    {
41 ; CHECK-NEXT:     p0 = r0
42 ; CHECK-NEXT:     p1 = r1
43 ; CHECK-NEXT:    }
44 ; CHECK-NEXT:    {
45 ; CHECK-NEXT:     p0 = xor(p0,p1)
46 ; CHECK-NEXT:    }
47 ; CHECK-NEXT:    {
48 ; CHECK-NEXT:     r0 = mux(p0,#1,#0)
49 ; CHECK-NEXT:     jumpr r31
50 ; CHECK-NEXT:     memb(r2+#0) = r0.new
51 ; CHECK-NEXT:    }
52 b0:
53   %v0 = load i1, ptr %a0
54   %v1 = load i1, ptr %a1
55   %v2 = icmp ne i1 %v0, %v1
56   store i1 %v2, ptr %a2
57   ret void
60 define void @f2(ptr %a0, ptr %a1, ptr %a2) {
61 ; CHECK-LABEL: f2:
62 ; CHECK:         .cfi_startproc
63 ; CHECK-NEXT:  // %bb.0: // %b0
64 ; CHECK-NEXT:    {
65 ; CHECK-NEXT:     r1 = memub(r1+#0)
66 ; CHECK-NEXT:     r0 = memub(r0+#0)
67 ; CHECK-NEXT:    }
68 ; CHECK-NEXT:    {
69 ; CHECK-NEXT:     p0 = r0
70 ; CHECK-NEXT:     p1 = r1
71 ; CHECK-NEXT:    }
72 ; CHECK-NEXT:    {
73 ; CHECK-NEXT:     p0 = and(p0,!p1)
74 ; CHECK-NEXT:    }
75 ; CHECK-NEXT:    {
76 ; CHECK-NEXT:     r0 = mux(p0,#1,#0)
77 ; CHECK-NEXT:     jumpr r31
78 ; CHECK-NEXT:     memb(r2+#0) = r0.new
79 ; CHECK-NEXT:    }
80 b0:
81   %v0 = load i1, ptr %a0
82   %v1 = load i1, ptr %a1
83   %v2 = icmp slt i1 %v0, %v1
84   store i1 %v2, ptr %a2
85   ret void
88 define void @f3(ptr %a0, ptr %a1, ptr %a2) {
89 ; CHECK-LABEL: f3:
90 ; CHECK:         .cfi_startproc
91 ; CHECK-NEXT:  // %bb.0: // %b0
92 ; CHECK-NEXT:    {
93 ; CHECK-NEXT:     r1 = memub(r1+#0)
94 ; CHECK-NEXT:     r0 = memub(r0+#0)
95 ; CHECK-NEXT:    }
96 ; CHECK-NEXT:    {
97 ; CHECK-NEXT:     p0 = r0
98 ; CHECK-NEXT:     p1 = r1
99 ; CHECK-NEXT:    }
100 ; CHECK-NEXT:    {
101 ; CHECK-NEXT:     p0 = or(p0,!p1)
102 ; CHECK-NEXT:    }
103 ; CHECK-NEXT:    {
104 ; CHECK-NEXT:     r0 = mux(p0,#1,#0)
105 ; CHECK-NEXT:     jumpr r31
106 ; CHECK-NEXT:     memb(r2+#0) = r0.new
107 ; CHECK-NEXT:    }
109   %v0 = load i1, ptr %a0
110   %v1 = load i1, ptr %a1
111   %v2 = icmp sle i1 %v0, %v1
112   store i1 %v2, ptr %a2
113   ret void
116 define void @f4(ptr %a0, ptr %a1, ptr %a2) {
117 ; CHECK-LABEL: f4:
118 ; CHECK:         .cfi_startproc
119 ; CHECK-NEXT:  // %bb.0: // %b0
120 ; CHECK-NEXT:    {
121 ; CHECK-NEXT:     r1 = memub(r1+#0)
122 ; CHECK-NEXT:     r0 = memub(r0+#0)
123 ; CHECK-NEXT:    }
124 ; CHECK-NEXT:    {
125 ; CHECK-NEXT:     p0 = r0
126 ; CHECK-NEXT:     p1 = r1
127 ; CHECK-NEXT:    }
128 ; CHECK-NEXT:    {
129 ; CHECK-NEXT:     p0 = and(p1,!p0)
130 ; CHECK-NEXT:    }
131 ; CHECK-NEXT:    {
132 ; CHECK-NEXT:     r0 = mux(p0,#1,#0)
133 ; CHECK-NEXT:     jumpr r31
134 ; CHECK-NEXT:     memb(r2+#0) = r0.new
135 ; CHECK-NEXT:    }
137   %v0 = load i1, ptr %a0
138   %v1 = load i1, ptr %a1
139   %v2 = icmp sgt i1 %v0, %v1
140   store i1 %v2, ptr %a2
141   ret void
144 define void @f5(ptr %a0, ptr %a1, ptr %a2) {
145 ; CHECK-LABEL: f5:
146 ; CHECK:         .cfi_startproc
147 ; CHECK-NEXT:  // %bb.0: // %b0
148 ; CHECK-NEXT:    {
149 ; CHECK-NEXT:     r1 = memub(r1+#0)
150 ; CHECK-NEXT:     r0 = memub(r0+#0)
151 ; CHECK-NEXT:    }
152 ; CHECK-NEXT:    {
153 ; CHECK-NEXT:     p0 = r0
154 ; CHECK-NEXT:     p1 = r1
155 ; CHECK-NEXT:    }
156 ; CHECK-NEXT:    {
157 ; CHECK-NEXT:     p0 = or(p1,!p0)
158 ; CHECK-NEXT:    }
159 ; CHECK-NEXT:    {
160 ; CHECK-NEXT:     r0 = mux(p0,#1,#0)
161 ; CHECK-NEXT:     jumpr r31
162 ; CHECK-NEXT:     memb(r2+#0) = r0.new
163 ; CHECK-NEXT:    }
165   %v0 = load i1, ptr %a0
166   %v1 = load i1, ptr %a1
167   %v2 = icmp sge i1 %v0, %v1
168   store i1 %v2, ptr %a2
169   ret void
172 define void @f6(ptr %a0, ptr %a1, ptr %a2) {
173 ; CHECK-LABEL: f6:
174 ; CHECK:         .cfi_startproc
175 ; CHECK-NEXT:  // %bb.0: // %b0
176 ; CHECK-NEXT:    {
177 ; CHECK-NEXT:     r1 = memub(r1+#0)
178 ; CHECK-NEXT:     r0 = memub(r0+#0)
179 ; CHECK-NEXT:    }
180 ; CHECK-NEXT:    {
181 ; CHECK-NEXT:     p0 = r0
182 ; CHECK-NEXT:     p1 = r1
183 ; CHECK-NEXT:    }
184 ; CHECK-NEXT:    {
185 ; CHECK-NEXT:     p0 = and(p1,!p0)
186 ; CHECK-NEXT:    }
187 ; CHECK-NEXT:    {
188 ; CHECK-NEXT:     r0 = mux(p0,#1,#0)
189 ; CHECK-NEXT:     jumpr r31
190 ; CHECK-NEXT:     memb(r2+#0) = r0.new
191 ; CHECK-NEXT:    }
193   %v0 = load i1, ptr %a0
194   %v1 = load i1, ptr %a1
195   %v2 = icmp ult i1 %v0, %v1
196   store i1 %v2, ptr %a2
197   ret void
200 define void @f7(ptr %a0, ptr %a1, ptr %a2) {
201 ; CHECK-LABEL: f7:
202 ; CHECK:         .cfi_startproc
203 ; CHECK-NEXT:  // %bb.0: // %b0
204 ; CHECK-NEXT:    {
205 ; CHECK-NEXT:     r1 = memub(r1+#0)
206 ; CHECK-NEXT:     r0 = memub(r0+#0)
207 ; CHECK-NEXT:    }
208 ; CHECK-NEXT:    {
209 ; CHECK-NEXT:     p0 = r0
210 ; CHECK-NEXT:     p1 = r1
211 ; CHECK-NEXT:    }
212 ; CHECK-NEXT:    {
213 ; CHECK-NEXT:     p0 = or(p1,!p0)
214 ; CHECK-NEXT:    }
215 ; CHECK-NEXT:    {
216 ; CHECK-NEXT:     r0 = mux(p0,#1,#0)
217 ; CHECK-NEXT:     jumpr r31
218 ; CHECK-NEXT:     memb(r2+#0) = r0.new
219 ; CHECK-NEXT:    }
221   %v0 = load i1, ptr %a0
222   %v1 = load i1, ptr %a1
223   %v2 = icmp ule i1 %v0, %v1
224   store i1 %v2, ptr %a2
225   ret void
228 define void @f8(ptr %a0, ptr %a1, ptr %a2) {
229 ; CHECK-LABEL: f8:
230 ; CHECK:         .cfi_startproc
231 ; CHECK-NEXT:  // %bb.0: // %b0
232 ; CHECK-NEXT:    {
233 ; CHECK-NEXT:     r1 = memub(r1+#0)
234 ; CHECK-NEXT:     r0 = memub(r0+#0)
235 ; CHECK-NEXT:    }
236 ; CHECK-NEXT:    {
237 ; CHECK-NEXT:     p0 = r0
238 ; CHECK-NEXT:     p1 = r1
239 ; CHECK-NEXT:    }
240 ; CHECK-NEXT:    {
241 ; CHECK-NEXT:     p0 = and(p0,!p1)
242 ; CHECK-NEXT:    }
243 ; CHECK-NEXT:    {
244 ; CHECK-NEXT:     r0 = mux(p0,#1,#0)
245 ; CHECK-NEXT:     jumpr r31
246 ; CHECK-NEXT:     memb(r2+#0) = r0.new
247 ; CHECK-NEXT:    }
249   %v0 = load i1, ptr %a0
250   %v1 = load i1, ptr %a1
251   %v2 = icmp ugt i1 %v0, %v1
252   store i1 %v2, ptr %a2
253   ret void
256 define void @f9(ptr %a0, ptr %a1, ptr %a2) {
257 ; CHECK-LABEL: f9:
258 ; CHECK:         .cfi_startproc
259 ; CHECK-NEXT:  // %bb.0: // %b0
260 ; CHECK-NEXT:    {
261 ; CHECK-NEXT:     r1 = memub(r1+#0)
262 ; CHECK-NEXT:     r0 = memub(r0+#0)
263 ; CHECK-NEXT:    }
264 ; CHECK-NEXT:    {
265 ; CHECK-NEXT:     p0 = r0
266 ; CHECK-NEXT:     p1 = r1
267 ; CHECK-NEXT:    }
268 ; CHECK-NEXT:    {
269 ; CHECK-NEXT:     p0 = or(p0,!p1)
270 ; CHECK-NEXT:    }
271 ; CHECK-NEXT:    {
272 ; CHECK-NEXT:     r0 = mux(p0,#1,#0)
273 ; CHECK-NEXT:     jumpr r31
274 ; CHECK-NEXT:     memb(r2+#0) = r0.new
275 ; CHECK-NEXT:    }
277   %v0 = load i1, ptr %a0
278   %v1 = load i1, ptr %a1
279   %v2 = icmp uge i1 %v0, %v1
280   store i1 %v2, ptr %a2
281   ret void