• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc  -O0 -mtriple=mipsel-linux-gnu -global-isel  -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS32
3
4define i1 @and_i1(i1 %a, i1 %b) {
5; MIPS32-LABEL: and_i1:
6; MIPS32:       # %bb.0: # %entry
7; MIPS32-NEXT:    and $2, $5, $4
8; MIPS32-NEXT:    jr $ra
9; MIPS32-NEXT:    nop
10entry:
11  %and = and i1 %b, %a
12  ret i1 %and
13}
14
15define i8 @and_i8(i8 %a, i8 %b) {
16; MIPS32-LABEL: and_i8:
17; MIPS32:       # %bb.0: # %entry
18; MIPS32-NEXT:    and $2, $5, $4
19; MIPS32-NEXT:    jr $ra
20; MIPS32-NEXT:    nop
21entry:
22  %and = and i8 %b, %a
23  ret i8 %and
24}
25
26define i16 @and_i16(i16 %a, i16 %b) {
27; MIPS32-LABEL: and_i16:
28; MIPS32:       # %bb.0: # %entry
29; MIPS32-NEXT:    and $2, $5, $4
30; MIPS32-NEXT:    jr $ra
31; MIPS32-NEXT:    nop
32entry:
33  %and = and i16 %b, %a
34  ret i16 %and
35}
36
37define i32 @and_i32(i32 %a, i32 %b) {
38; MIPS32-LABEL: and_i32:
39; MIPS32:       # %bb.0: # %entry
40; MIPS32-NEXT:    and $2, $5, $4
41; MIPS32-NEXT:    jr $ra
42; MIPS32-NEXT:    nop
43entry:
44  %and = and i32 %b, %a
45  ret i32 %and
46}
47
48define i64 @and_i64(i64 %a, i64 %b) {
49; MIPS32-LABEL: and_i64:
50; MIPS32:       # %bb.0: # %entry
51; MIPS32-NEXT:    and $2, $6, $4
52; MIPS32-NEXT:    and $3, $7, $5
53; MIPS32-NEXT:    jr $ra
54; MIPS32-NEXT:    nop
55entry:
56  %and = and i64 %b, %a
57  ret i64 %and
58}
59
60define i32 @and_imm(i32 %a) {
61; MIPS32-LABEL: and_imm:
62; MIPS32:       # %bb.0: # %entry
63; MIPS32-NEXT:    andi $2, $4, 255
64; MIPS32-NEXT:    jr $ra
65; MIPS32-NEXT:    nop
66entry:
67  %and = and i32 %a, 255
68  ret i32 %and
69}
70
71define i32 @and_not_imm32ZExt16(i32 %a) {
72; MIPS32-LABEL: and_not_imm32ZExt16:
73; MIPS32:       # %bb.0: # %entry
74; MIPS32-NEXT:    addiu $1, $zero, 65280
75; MIPS32-NEXT:    and $2, $4, $1
76; MIPS32-NEXT:    jr $ra
77; MIPS32-NEXT:    nop
78entry:
79  %and = and i32 %a, -256
80  ret i32 %and
81}
82
83define i1 @or_i1(i1 %a, i1 %b) {
84; MIPS32-LABEL: or_i1:
85; MIPS32:       # %bb.0: # %entry
86; MIPS32-NEXT:    or $2, $5, $4
87; MIPS32-NEXT:    jr $ra
88; MIPS32-NEXT:    nop
89entry:
90  %or = or i1 %b, %a
91  ret i1 %or
92}
93
94define i8 @or_i8(i8 %a, i8 %b) {
95; MIPS32-LABEL: or_i8:
96; MIPS32:       # %bb.0: # %entry
97; MIPS32-NEXT:    or $2, $5, $4
98; MIPS32-NEXT:    jr $ra
99; MIPS32-NEXT:    nop
100entry:
101  %or = or i8 %b, %a
102  ret i8 %or
103}
104
105define i16 @or_i16(i16 %a, i16 %b) {
106; MIPS32-LABEL: or_i16:
107; MIPS32:       # %bb.0: # %entry
108; MIPS32-NEXT:    or $2, $5, $4
109; MIPS32-NEXT:    jr $ra
110; MIPS32-NEXT:    nop
111entry:
112  %or = or i16 %b, %a
113  ret i16 %or
114}
115
116define i32 @or_i32(i32 %a, i32 %b) {
117; MIPS32-LABEL: or_i32:
118; MIPS32:       # %bb.0: # %entry
119; MIPS32-NEXT:    or $2, $5, $4
120; MIPS32-NEXT:    jr $ra
121; MIPS32-NEXT:    nop
122entry:
123  %or = or i32 %b, %a
124  ret i32 %or
125}
126
127define i64 @or_i64(i64 %a, i64 %b) {
128; MIPS32-LABEL: or_i64:
129; MIPS32:       # %bb.0: # %entry
130; MIPS32-NEXT:    or $2, $6, $4
131; MIPS32-NEXT:    or $3, $7, $5
132; MIPS32-NEXT:    jr $ra
133; MIPS32-NEXT:    nop
134entry:
135  %or = or i64 %b, %a
136  ret i64 %or
137}
138
139define i32 @or_imm(i32 %a) {
140; MIPS32-LABEL: or_imm:
141; MIPS32:       # %bb.0: # %entry
142; MIPS32-NEXT:    ori $2, $4, 65535
143; MIPS32-NEXT:    jr $ra
144; MIPS32-NEXT:    nop
145entry:
146  %or = or i32 %a, 65535
147  ret i32 %or
148}
149
150define i32 @or_not_imm32ZExt16(i32 %a) {
151; MIPS32-LABEL: or_not_imm32ZExt16:
152; MIPS32:       # %bb.0: # %entry
153; MIPS32-NEXT:    lui $1, 1
154; MIPS32-NEXT:    or $2, $4, $1
155; MIPS32-NEXT:    jr $ra
156; MIPS32-NEXT:    nop
157entry:
158  %or = or i32 %a, 65536
159  ret i32 %or
160}
161
162define i1 @xor_i1(i1 %a, i1 %b) {
163; MIPS32-LABEL: xor_i1:
164; MIPS32:       # %bb.0: # %entry
165; MIPS32-NEXT:    xor $2, $5, $4
166; MIPS32-NEXT:    jr $ra
167; MIPS32-NEXT:    nop
168entry:
169  %xor = xor i1 %b, %a
170  ret i1 %xor
171}
172
173define i8 @xor_i8(i8 %a, i8 %b) {
174; MIPS32-LABEL: xor_i8:
175; MIPS32:       # %bb.0: # %entry
176; MIPS32-NEXT:    xor $2, $5, $4
177; MIPS32-NEXT:    jr $ra
178; MIPS32-NEXT:    nop
179entry:
180  %xor = xor i8 %b, %a
181  ret i8 %xor
182}
183
184define i16 @xor_i16(i16 %a, i16 %b) {
185; MIPS32-LABEL: xor_i16:
186; MIPS32:       # %bb.0: # %entry
187; MIPS32-NEXT:    xor $2, $5, $4
188; MIPS32-NEXT:    jr $ra
189; MIPS32-NEXT:    nop
190entry:
191  %xor = xor i16 %b, %a
192  ret i16 %xor
193}
194
195define i32 @xor_i32(i32 %a, i32 %b) {
196; MIPS32-LABEL: xor_i32:
197; MIPS32:       # %bb.0: # %entry
198; MIPS32-NEXT:    xor $2, $5, $4
199; MIPS32-NEXT:    jr $ra
200; MIPS32-NEXT:    nop
201entry:
202  %xor = xor i32 %b, %a
203  ret i32 %xor
204}
205
206define i64 @xor_i64(i64 %a, i64 %b) {
207; MIPS32-LABEL: xor_i64:
208; MIPS32:       # %bb.0: # %entry
209; MIPS32-NEXT:    xor $2, $6, $4
210; MIPS32-NEXT:    xor $3, $7, $5
211; MIPS32-NEXT:    jr $ra
212; MIPS32-NEXT:    nop
213entry:
214  %xor = xor i64 %b, %a
215  ret i64 %xor
216}
217
218define i32 @xor_imm(i32 %a) {
219; MIPS32-LABEL: xor_imm:
220; MIPS32:       # %bb.0: # %entry
221; MIPS32-NEXT:    xori $2, $4, 1
222; MIPS32-NEXT:    jr $ra
223; MIPS32-NEXT:    nop
224entry:
225  %xor = xor i32 %a, 1
226  ret i32 %xor
227}
228
229define i32 @xor_not_imm32ZExt16(i32 %a) {
230; MIPS32-LABEL: xor_not_imm32ZExt16:
231; MIPS32:       # %bb.0: # %entry
232; MIPS32-NEXT:    not $2, $4
233; MIPS32-NEXT:    jr $ra
234; MIPS32-NEXT:    nop
235entry:
236  %xor = xor i32 %a, -1
237  ret i32 %xor
238}
239
240define i32 @shl(i32 %a) {
241; MIPS32-LABEL: shl:
242; MIPS32:       # %bb.0: # %entry
243; MIPS32-NEXT:    sll $2, $4, 1
244; MIPS32-NEXT:    jr $ra
245; MIPS32-NEXT:    nop
246entry:
247  %shl = shl i32 %a, 1
248  ret i32 %shl
249}
250
251define i32 @ashr(i32 %a) {
252; MIPS32-LABEL: ashr:
253; MIPS32:       # %bb.0: # %entry
254; MIPS32-NEXT:    sra $2, $4, 1
255; MIPS32-NEXT:    jr $ra
256; MIPS32-NEXT:    nop
257entry:
258  %shr = ashr i32 %a, 1
259  ret i32 %shr
260}
261
262define i32 @lshr(i32 %a) {
263; MIPS32-LABEL: lshr:
264; MIPS32:       # %bb.0: # %entry
265; MIPS32-NEXT:    srl $2, $4, 1
266; MIPS32-NEXT:    jr $ra
267; MIPS32-NEXT:    nop
268entry:
269  %shr = lshr i32 %a, 1
270  ret i32 %shr
271}
272
273define i32 @shlv(i32 %a, i32 %b) {
274; MIPS32-LABEL: shlv:
275; MIPS32:       # %bb.0: # %entry
276; MIPS32-NEXT:    sllv $2, $4, $5
277; MIPS32-NEXT:    jr $ra
278; MIPS32-NEXT:    nop
279entry:
280  %shl = shl i32 %a, %b
281  ret i32 %shl
282}
283
284define i32 @ashrv(i32 %a, i32 %b) {
285; MIPS32-LABEL: ashrv:
286; MIPS32:       # %bb.0: # %entry
287; MIPS32-NEXT:    srav $2, $4, $5
288; MIPS32-NEXT:    jr $ra
289; MIPS32-NEXT:    nop
290entry:
291  %shr = ashr i32 %a, %b
292  ret i32 %shr
293}
294
295define i32 @lshrv(i32 %a, i32 %b) {
296; MIPS32-LABEL: lshrv:
297; MIPS32:       # %bb.0: # %entry
298; MIPS32-NEXT:    srlv $2, $4, $5
299; MIPS32-NEXT:    jr $ra
300; MIPS32-NEXT:    nop
301entry:
302  %shr = lshr i32 %a, %b
303  ret i32 %shr
304}
305
306define  i16 @shl_i16(i16 %a) {
307; MIPS32-LABEL: shl_i16:
308; MIPS32:       # %bb.0: # %entry
309; MIPS32-NEXT:    ori $1, $zero, 2
310; MIPS32-NEXT:    andi $1, $1, 65535
311; MIPS32-NEXT:    sllv $2, $4, $1
312; MIPS32-NEXT:    jr $ra
313; MIPS32-NEXT:    nop
314entry:
315  %shl = shl i16 %a, 2
316  ret i16 %shl
317}
318
319define i8 @ashr_i8(i8 %a) {
320; MIPS32-LABEL: ashr_i8:
321; MIPS32:       # %bb.0: # %entry
322; MIPS32-NEXT:    ori $1, $zero, 2
323; MIPS32-NEXT:    andi $2, $1, 255
324; MIPS32-NEXT:    sll $1, $4, 24
325; MIPS32-NEXT:    sra $1, $1, 24
326; MIPS32-NEXT:    srav $2, $1, $2
327; MIPS32-NEXT:    jr $ra
328; MIPS32-NEXT:    nop
329entry:
330  %0 = ashr i8 %a, 2
331  ret i8 %0
332}
333
334define i16 @lshr_i16(i16 %a) {
335; MIPS32-LABEL: lshr_i16:
336; MIPS32:       # %bb.0: # %entry
337; MIPS32-NEXT:    ori $1, $zero, 2
338; MIPS32-NEXT:    andi $2, $1, 65535
339; MIPS32-NEXT:    andi $1, $4, 65535
340; MIPS32-NEXT:    srlv $2, $1, $2
341; MIPS32-NEXT:    jr $ra
342; MIPS32-NEXT:    nop
343entry:
344  %0 = lshr i16 %a, 2
345  ret i16 %0
346}
347
348define i64 @shl_i64(i64 %a, i64 %b) {
349; MIPS32-LABEL: shl_i64:
350; MIPS32:       # %bb.0: # %entry
351; MIPS32-NEXT:    move $3, $4
352; MIPS32-NEXT:    move $9, $6
353; MIPS32-NEXT:    ori $1, $zero, 32
354; MIPS32-NEXT:    subu $8, $9, $1
355; MIPS32-NEXT:    subu $4, $1, $9
356; MIPS32-NEXT:    ori $2, $zero, 0
357; MIPS32-NEXT:    sltu $6, $9, $1
358; MIPS32-NEXT:    sltiu $1, $9, 1
359; MIPS32-NEXT:    sllv $7, $3, $9
360; MIPS32-NEXT:    srlv $4, $3, $4
361; MIPS32-NEXT:    sllv $9, $5, $9
362; MIPS32-NEXT:    or $4, $4, $9
363; MIPS32-NEXT:    sllv $3, $3, $8
364; MIPS32-NEXT:    andi $8, $6, 1
365; MIPS32-NEXT:    movn $2, $7, $8
366; MIPS32-NEXT:    andi $6, $6, 1
367; MIPS32-NEXT:    movn $3, $4, $6
368; MIPS32-NEXT:    andi $1, $1, 1
369; MIPS32-NEXT:    movn $3, $5, $1
370; MIPS32-NEXT:    jr $ra
371; MIPS32-NEXT:    nop
372entry:
373  %shl = shl i64 %a, %b
374  ret i64 %shl
375}
376
377define i64 @ashl_i64(i64 %a, i64 %b) {
378; MIPS32-LABEL: ashl_i64:
379; MIPS32:       # %bb.0: # %entry
380; MIPS32-NEXT:    addiu $sp, $sp, -8
381; MIPS32-NEXT:    .cfi_def_cfa_offset 8
382; MIPS32-NEXT:    sw $4, 4($sp) # 4-byte Folded Spill
383; MIPS32-NEXT:    move $2, $5
384; MIPS32-NEXT:    lw $5, 4($sp) # 4-byte Folded Reload
385; MIPS32-NEXT:    move $3, $6
386; MIPS32-NEXT:    ori $1, $zero, 32
387; MIPS32-NEXT:    subu $8, $3, $1
388; MIPS32-NEXT:    subu $7, $1, $3
389; MIPS32-NEXT:    sltu $4, $3, $1
390; MIPS32-NEXT:    sltiu $6, $3, 1
391; MIPS32-NEXT:    srav $1, $2, $3
392; MIPS32-NEXT:    srlv $3, $5, $3
393; MIPS32-NEXT:    sllv $7, $2, $7
394; MIPS32-NEXT:    or $7, $3, $7
395; MIPS32-NEXT:    sra $3, $2, 31
396; MIPS32-NEXT:    srav $2, $2, $8
397; MIPS32-NEXT:    andi $8, $4, 1
398; MIPS32-NEXT:    movn $2, $7, $8
399; MIPS32-NEXT:    andi $6, $6, 1
400; MIPS32-NEXT:    movn $2, $5, $6
401; MIPS32-NEXT:    andi $4, $4, 1
402; MIPS32-NEXT:    movn $3, $1, $4
403; MIPS32-NEXT:    addiu $sp, $sp, 8
404; MIPS32-NEXT:    jr $ra
405; MIPS32-NEXT:    nop
406entry:
407  %shr = ashr i64 %a, %b
408  ret i64 %shr
409}
410
411define i64 @lshr_i64(i64 %a, i64 %b) {
412; MIPS32-LABEL: lshr_i64:
413; MIPS32:       # %bb.0: # %entry
414; MIPS32-NEXT:    addiu $sp, $sp, -8
415; MIPS32-NEXT:    .cfi_def_cfa_offset 8
416; MIPS32-NEXT:    sw $4, 4($sp) # 4-byte Folded Spill
417; MIPS32-NEXT:    move $2, $5
418; MIPS32-NEXT:    lw $5, 4($sp) # 4-byte Folded Reload
419; MIPS32-NEXT:    move $7, $6
420; MIPS32-NEXT:    ori $1, $zero, 32
421; MIPS32-NEXT:    subu $8, $7, $1
422; MIPS32-NEXT:    subu $9, $1, $7
423; MIPS32-NEXT:    ori $3, $zero, 0
424; MIPS32-NEXT:    sltu $4, $7, $1
425; MIPS32-NEXT:    sltiu $6, $7, 1
426; MIPS32-NEXT:    srlv $1, $2, $7
427; MIPS32-NEXT:    srlv $7, $5, $7
428; MIPS32-NEXT:    sllv $9, $2, $9
429; MIPS32-NEXT:    or $7, $7, $9
430; MIPS32-NEXT:    srlv $2, $2, $8
431; MIPS32-NEXT:    andi $8, $4, 1
432; MIPS32-NEXT:    movn $2, $7, $8
433; MIPS32-NEXT:    andi $6, $6, 1
434; MIPS32-NEXT:    movn $2, $5, $6
435; MIPS32-NEXT:    andi $4, $4, 1
436; MIPS32-NEXT:    movn $3, $1, $4
437; MIPS32-NEXT:    addiu $sp, $sp, 8
438; MIPS32-NEXT:    jr $ra
439; MIPS32-NEXT:    nop
440entry:
441  %shr = lshr i64 %a, %b
442  ret i64 %shr
443}
444