[X86] combineTargetShuffle - commute VPERMV3 shuffles so any load is on the RHS
[llvm-project.git] / llvm / test / CodeGen / PowerPC / p10-setnbcr-ri.ll
blob8c058cb245beef90a7c0a0575ec36e1eeaee2ca3
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -O2 \
3 ; RUN:     -ppc-asm-full-reg-names -mcpu=pwr10 < %s | FileCheck %s \
4 ; RUN:     --check-prefixes=CHECK,CHECK-LE
5 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -O2 \
6 ; RUN:     -ppc-asm-full-reg-names -mcpu=pwr10 < %s | FileCheck %s \
7 ; RUN:     --check-prefixes=CHECK,CHECK-BE
9 ; This file does not contain many test cases involving comparisons and logical
10 ; comparisons (cmplwi, cmpldi). This is because alternative code is generated
11 ; when there is a compare (logical or not), followed by a sign or zero extend.
12 ; This codegen will be re-evaluated at a later time on whether or not it should
13 ; be emitted on P10.
15 @globalVal = common dso_local local_unnamed_addr global i8 0, align 1
16 @globalVal2 = common dso_local local_unnamed_addr global i32 0, align 4
17 @globalVal3 = common dso_local local_unnamed_addr global i64 0, align 8
18 @globalVal4 = common dso_local local_unnamed_addr global i16 0, align 2
20 define dso_local signext i32 @setnbcr1(i8 %a) {
21 ; CHECK-LABEL: setnbcr1:
22 ; CHECK:       # %bb.0: # %entry
23 ; CHECK-NEXT:    andi. r3, r3, 255
24 ; CHECK-NEXT:    setnbcr r3, eq
25 ; CHECK-NEXT:    blr
26 entry:
27   %cmp = icmp uge i8 %a, 1
28   %conv = sext i1 %cmp to i32
29   ret i32 %conv
32 define dso_local signext i32 @setnbcr2(i32 %a) {
33 ; CHECK-LABEL: setnbcr2:
34 ; CHECK:       # %bb.0: # %entry
35 ; CHECK-NEXT:    cmpwi r3, 0
36 ; CHECK-NEXT:    setnbcr r3, eq
37 ; CHECK-NEXT:    blr
38 entry:
39   %cmp = icmp uge i32 %a, 1
40   %conv = sext i1 %cmp to i32
41   ret i32 %conv
44 define dso_local signext i32 @setnbcr3(i64 %a) {
45 ; CHECK-LABEL: setnbcr3:
46 ; CHECK:       # %bb.0: # %entry
47 ; CHECK-NEXT:    cmpdi r3, 0
48 ; CHECK-NEXT:    setnbcr r3, eq
49 ; CHECK-NEXT:    blr
50 entry:
51   %cmp = icmp uge i64 %a, 1
52   %conv = sext i1 %cmp to i32
53   ret i32 %conv
56 define dso_local signext i32 @setnbcr4(i16 %a) {
57 ; CHECK-LABEL: setnbcr4:
58 ; CHECK:       # %bb.0: # %entry
59 ; CHECK-NEXT:    andi. r3, r3, 65535
60 ; CHECK-NEXT:    setnbcr r3, eq
61 ; CHECK-NEXT:    blr
62 entry:
63   %cmp = icmp uge i16 %a, 1
64   %conv = sext i1 %cmp to i32
65   ret i32 %conv
68 define signext i64 @setnbcr5(i8 %a) {
69 ; CHECK-LABEL: setnbcr5:
70 ; CHECK:       # %bb.0: # %entry
71 ; CHECK-NEXT:    andi. r3, r3, 255
72 ; CHECK-NEXT:    setnbcr r3, eq
73 ; CHECK-NEXT:    blr
74 entry:
75   %cmp = icmp uge i8 %a, 1
76   %conv = sext i1 %cmp to i64
77   ret i64 %conv
80 define signext i64 @setnbcr6(i32 %a) {
81 ; CHECK-LABEL: setnbcr6:
82 ; CHECK:       # %bb.0: # %entry
83 ; CHECK-NEXT:    cmpwi r3, 0
84 ; CHECK-NEXT:    setnbcr r3, eq
85 ; CHECK-NEXT:    blr
86 entry:
87   %cmp = icmp uge i32 %a, 1
88   %conv = sext i1 %cmp to i64
89   ret i64 %conv
92 define signext i64 @setnbcr7(i64 %a) {
93 ; CHECK-LABEL: setnbcr7:
94 ; CHECK:       # %bb.0: # %entry
95 ; CHECK-NEXT:    cmpdi r3, 0
96 ; CHECK-NEXT:    setnbcr r3, eq
97 ; CHECK-NEXT:    blr
98 entry:
99   %cmp = icmp uge i64 %a, 1
100   %conv = sext i1 %cmp to i64
101   ret i64 %conv
104 define signext i64 @setnbcr8(i16 %a) {
105 ; CHECK-LABEL: setnbcr8:
106 ; CHECK:       # %bb.0: # %entry
107 ; CHECK-NEXT:    andi. r3, r3, 65535
108 ; CHECK-NEXT:    setnbcr r3, eq
109 ; CHECK-NEXT:    blr
110 entry:
111   %cmp = icmp uge i16 %a, 1
112   %conv = sext i1 %cmp to i64
113   ret i64 %conv
116 define dso_local void @setnbcr9(i8 %a) {
117 ; CHECK-LE-LABEL: setnbcr9:
118 ; CHECK-LE:       # %bb.0: # %entry
119 ; CHECK-LE-NEXT:    andi. r3, r3, 255
120 ; CHECK-LE-NEXT:    setnbcr r3, eq
121 ; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
122 ; CHECK-LE-NEXT:    blr
124 ; CHECK-BE-LABEL: setnbcr9:
125 ; CHECK-BE:       # %bb.0: # %entry
126 ; CHECK-BE-NEXT:    andi. r3, r3, 255
127 ; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
128 ; CHECK-BE-NEXT:    setnbcr r3, eq
129 ; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
130 ; CHECK-BE-NEXT:    blr
131 entry:
132   %cmp = icmp uge i8 %a, 1
133   %conv1 = sext i1 %cmp to i8
134   store i8 %conv1, ptr @globalVal, align 1
135   ret void
138 define dso_local void @setnbcr10(i32 %a) {
139 ; CHECK-LE-LABEL: setnbcr10:
140 ; CHECK-LE:       # %bb.0: # %entry
141 ; CHECK-LE-NEXT:    cmpwi r3, 0
142 ; CHECK-LE-NEXT:    setnbcr r3, eq
143 ; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
144 ; CHECK-LE-NEXT:    blr
146 ; CHECK-BE-LABEL: setnbcr10:
147 ; CHECK-BE:       # %bb.0: # %entry
148 ; CHECK-BE-NEXT:    cmpwi r3, 0
149 ; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
150 ; CHECK-BE-NEXT:    setnbcr r3, eq
151 ; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
152 ; CHECK-BE-NEXT:    blr
153 entry:
154   %cmp = icmp uge i32 %a, 1
155   %conv1 = sext i1 %cmp to i32
156   store i32 %conv1, ptr @globalVal2, align 4
157   ret void
160 define dso_local void @setnbcr11(i64 %a) {
161 ; CHECK-LE-LABEL: setnbcr11:
162 ; CHECK-LE:       # %bb.0: # %entry
163 ; CHECK-LE-NEXT:    cmpdi r3, 0
164 ; CHECK-LE-NEXT:    setnbcr r3, eq
165 ; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
166 ; CHECK-LE-NEXT:    blr
168 ; CHECK-BE-LABEL: setnbcr11:
169 ; CHECK-BE:       # %bb.0: # %entry
170 ; CHECK-BE-NEXT:    cmpdi r3, 0
171 ; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
172 ; CHECK-BE-NEXT:    setnbcr r3, eq
173 ; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
174 ; CHECK-BE-NEXT:    blr
175 entry:
176   %cmp = icmp uge i64 %a, 1
177   %conv1 = sext i1 %cmp to i64
178   store i64 %conv1, ptr @globalVal3, align 8
179   ret void
182 define dso_local void @setnbcr12(i16 %a) {
183 ; CHECK-LE-LABEL: setnbcr12:
184 ; CHECK-LE:       # %bb.0: # %entry
185 ; CHECK-LE-NEXT:    andi. r3, r3, 65535
186 ; CHECK-LE-NEXT:    setnbcr r3, eq
187 ; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
188 ; CHECK-LE-NEXT:    blr
190 ; CHECK-BE-LABEL: setnbcr12:
191 ; CHECK-BE:       # %bb.0: # %entry
192 ; CHECK-BE-NEXT:    andi. r3, r3, 65535
193 ; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
194 ; CHECK-BE-NEXT:    setnbcr r3, eq
195 ; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
196 ; CHECK-BE-NEXT:    blr
197 entry:
198   %cmp = icmp uge i16 %a, 1
199   %conv1 = sext i1 %cmp to i16
200   store i16 %conv1, ptr @globalVal4, align 2
201   ret void
204 define dso_local signext i32 @setnbcr13(i8 %a) {
205 ; CHECK-LABEL: setnbcr13:
206 ; CHECK:       # %bb.0: # %entry
207 ; CHECK-NEXT:    clrlwi r3, r3, 24
208 ; CHECK-NEXT:    cmpwi r3, 1
209 ; CHECK-NEXT:    setnbcr r3, eq
210 ; CHECK-NEXT:    blr
211 entry:
212   %cmp = icmp ne i8 %a, 1
213   %conv = sext i1 %cmp to i32
214   ret i32 %conv
217 define dso_local signext i32 @setnbcr14(i32 %a) {
218 ; CHECK-LABEL: setnbcr14:
219 ; CHECK:       # %bb.0: # %entry
220 ; CHECK-NEXT:    cmpwi r3, 1
221 ; CHECK-NEXT:    setnbcr r3, eq
222 ; CHECK-NEXT:    blr
223 entry:
224   %cmp = icmp ne i32 %a, 1
225   %conv = sext i1 %cmp to i32
226   ret i32 %conv
229 define dso_local signext i32 @setnbcr15(i64 %a) {
230 ; CHECK-LABEL: setnbcr15:
231 ; CHECK:       # %bb.0: # %entry
232 ; CHECK-NEXT:    cmpdi r3, 1
233 ; CHECK-NEXT:    setnbcr r3, eq
234 ; CHECK-NEXT:    blr
235 entry:
236   %cmp = icmp ne i64 %a, 1
237   %conv = sext i1 %cmp to i32
238   ret i32 %conv
241 define dso_local signext i32 @setnbcr16(i16 %a) {
242 ; CHECK-LABEL: setnbcr16:
243 ; CHECK:       # %bb.0: # %entry
244 ; CHECK-NEXT:    clrlwi r3, r3, 16
245 ; CHECK-NEXT:    cmpwi r3, 1
246 ; CHECK-NEXT:    setnbcr r3, eq
247 ; CHECK-NEXT:    blr
248 entry:
249   %cmp = icmp ne i16 %a, 1
250   %conv = sext i1 %cmp to i32
251   ret i32 %conv
254 define signext i64 @setnbcr17(i8 %a) {
255 ; CHECK-LABEL: setnbcr17:
256 ; CHECK:       # %bb.0: # %entry
257 ; CHECK-NEXT:    clrlwi r3, r3, 24
258 ; CHECK-NEXT:    cmpwi r3, 1
259 ; CHECK-NEXT:    setnbcr r3, eq
260 ; CHECK-NEXT:    blr
261 entry:
262   %cmp = icmp ne i8 %a, 1
263   %conv = sext i1 %cmp to i64
264   ret i64 %conv
267 define signext i64 @setnbcr18(i32 %a) {
268 ; CHECK-LABEL: setnbcr18:
269 ; CHECK:       # %bb.0: # %entry
270 ; CHECK-NEXT:    cmpwi r3, 1
271 ; CHECK-NEXT:    setnbcr r3, eq
272 ; CHECK-NEXT:    blr
273 entry:
274   %cmp = icmp ne i32 %a, 1
275   %conv = sext i1 %cmp to i64
276   ret i64 %conv
279 define signext i64 @setnbcr19(i64 %a) {
280 ; CHECK-LABEL: setnbcr19:
281 ; CHECK:       # %bb.0: # %entry
282 ; CHECK-NEXT:    cmpdi r3, 1
283 ; CHECK-NEXT:    setnbcr r3, eq
284 ; CHECK-NEXT:    blr
285 entry:
286   %cmp = icmp ne i64 %a, 1
287   %conv = sext i1 %cmp to i64
288   ret i64 %conv
291 define signext i64 @setnbcr20(i16 %a) {
292 ; CHECK-LABEL: setnbcr20:
293 ; CHECK:       # %bb.0: # %entry
294 ; CHECK-NEXT:    clrlwi r3, r3, 16
295 ; CHECK-NEXT:    cmpwi r3, 1
296 ; CHECK-NEXT:    setnbcr r3, eq
297 ; CHECK-NEXT:    blr
298 entry:
299   %cmp = icmp ne i16 %a, 1
300   %conv = sext i1 %cmp to i64
301   ret i64 %conv
304 define dso_local void @setnbcr21(i8 %a) {
305 ; CHECK-LE-LABEL: setnbcr21:
306 ; CHECK-LE:       # %bb.0: # %entry
307 ; CHECK-LE-NEXT:    clrlwi r3, r3, 24
308 ; CHECK-LE-NEXT:    cmpwi r3, 1
309 ; CHECK-LE-NEXT:    setnbcr r3, eq
310 ; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
311 ; CHECK-LE-NEXT:    blr
313 ; CHECK-BE-LABEL: setnbcr21:
314 ; CHECK-BE:       # %bb.0: # %entry
315 ; CHECK-BE-NEXT:    clrlwi r3, r3, 24
316 ; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
317 ; CHECK-BE-NEXT:    cmpwi r3, 1
318 ; CHECK-BE-NEXT:    setnbcr r3, eq
319 ; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
320 ; CHECK-BE-NEXT:    blr
321 entry:
322   %cmp = icmp ne i8 %a, 1
323   %conv1 = sext i1 %cmp to i8
324   store i8 %conv1, ptr @globalVal, align 1
325   ret void
328 define dso_local void @setnbcr22(i32 %a) {
329 ; CHECK-LE-LABEL: setnbcr22:
330 ; CHECK-LE:       # %bb.0: # %entry
331 ; CHECK-LE-NEXT:    cmpwi r3, 1
332 ; CHECK-LE-NEXT:    setnbcr r3, eq
333 ; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
334 ; CHECK-LE-NEXT:    blr
336 ; CHECK-BE-LABEL: setnbcr22:
337 ; CHECK-BE:       # %bb.0: # %entry
338 ; CHECK-BE-NEXT:    cmpwi r3, 1
339 ; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
340 ; CHECK-BE-NEXT:    setnbcr r3, eq
341 ; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
342 ; CHECK-BE-NEXT:    blr
343 entry:
344   %cmp = icmp ne i32 %a, 1
345   %conv1 = sext i1 %cmp to i32
346   store i32 %conv1, ptr @globalVal2, align 4
347   ret void
350 define dso_local void @setnbcr23(i64 %a) {
351 ; CHECK-LE-LABEL: setnbcr23:
352 ; CHECK-LE:       # %bb.0: # %entry
353 ; CHECK-LE-NEXT:    cmpdi r3, 1
354 ; CHECK-LE-NEXT:    setnbcr r3, eq
355 ; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
356 ; CHECK-LE-NEXT:    blr
358 ; CHECK-BE-LABEL: setnbcr23:
359 ; CHECK-BE:       # %bb.0: # %entry
360 ; CHECK-BE-NEXT:    cmpdi r3, 1
361 ; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
362 ; CHECK-BE-NEXT:    setnbcr r3, eq
363 ; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
364 ; CHECK-BE-NEXT:    blr
365 entry:
366   %cmp = icmp ne i64 %a, 1
367   %conv1 = sext i1 %cmp to i64
368   store i64 %conv1, ptr @globalVal3, align 8
369   ret void
372 define dso_local void @setnbcr24(i16 %a) {
373 ; CHECK-LE-LABEL: setnbcr24:
374 ; CHECK-LE:       # %bb.0: # %entry
375 ; CHECK-LE-NEXT:    clrlwi r3, r3, 16
376 ; CHECK-LE-NEXT:    cmpwi r3, 1
377 ; CHECK-LE-NEXT:    setnbcr r3, eq
378 ; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
379 ; CHECK-LE-NEXT:    blr
381 ; CHECK-BE-LABEL: setnbcr24:
382 ; CHECK-BE:       # %bb.0: # %entry
383 ; CHECK-BE-NEXT:    clrlwi r3, r3, 16
384 ; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
385 ; CHECK-BE-NEXT:    cmpwi r3, 1
386 ; CHECK-BE-NEXT:    setnbcr r3, eq
387 ; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
388 ; CHECK-BE-NEXT:    blr
389 entry:
390   %cmp = icmp ne i16 %a, 1
391   %conv1 = sext i1 %cmp to i16
392   store i16 %conv1, ptr @globalVal4, align 2
393   ret void