xref: /llvm-project/llvm/test/CodeGen/Mips/llvm-ir/xor.ll (revision 4a612d4bf290346ec018a74fd245c8e30ff93de7)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips2 | FileCheck %s -check-prefix=MIPS
3; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32 | FileCheck %s -check-prefix=MIPS
4; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r2 | FileCheck %s \
5; RUN:    -check-prefix=MIPS32R2
6; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r3 | FileCheck %s \
7; RUN:    -check-prefix=MIPS32R2
8; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r5 | FileCheck %s \
9; RUN:    -check-prefix=MIPS32R2
10; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r6 | FileCheck %s \
11; RUN:    -check-prefix=MIPS32R6
12; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips3 | FileCheck %s \
13; RUN:    -check-prefix=MIPS64
14; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips4 | FileCheck %s \
15; RUN:    -check-prefix=MIPS64
16; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64 | FileCheck %s \
17; RUN:    -check-prefix=MIPS64
18; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r2 | FileCheck %s \
19; RUN:    -check-prefix=MIPS64R2
20; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r3 | FileCheck %s \
21; RUN:    -check-prefix=MIPS64R2
22; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r5 | FileCheck %s \
23; RUN:    -check-prefix=MIPS64R2
24; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r6 | FileCheck %s \
25; RUN:    -check-prefix=MIPS64R6
26; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r3 -mattr=+micromips | FileCheck %s \
27; RUN:    -check-prefix=MM32R3
28; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r6 -mattr=+micromips | FileCheck %s \
29; RUN:    -check-prefix=MM32R6
30
31define signext i1 @xor_i1(i1 signext %a, i1 signext %b) {
32; MIPS-LABEL: xor_i1:
33; MIPS:       # %bb.0: # %entry
34; MIPS-NEXT:    jr $ra
35; MIPS-NEXT:    xor $2, $4, $5
36;
37; MIPS32R2-LABEL: xor_i1:
38; MIPS32R2:       # %bb.0: # %entry
39; MIPS32R2-NEXT:    jr $ra
40; MIPS32R2-NEXT:    xor $2, $4, $5
41;
42; MIPS32R6-LABEL: xor_i1:
43; MIPS32R6:       # %bb.0: # %entry
44; MIPS32R6-NEXT:    jr $ra
45; MIPS32R6-NEXT:    xor $2, $4, $5
46;
47; MIPS64-LABEL: xor_i1:
48; MIPS64:       # %bb.0: # %entry
49; MIPS64-NEXT:    xor $1, $4, $5
50; MIPS64-NEXT:    jr $ra
51; MIPS64-NEXT:    sll $2, $1, 0
52;
53; MIPS64R2-LABEL: xor_i1:
54; MIPS64R2:       # %bb.0: # %entry
55; MIPS64R2-NEXT:    xor $1, $4, $5
56; MIPS64R2-NEXT:    jr $ra
57; MIPS64R2-NEXT:    sll $2, $1, 0
58;
59; MIPS64R6-LABEL: xor_i1:
60; MIPS64R6:       # %bb.0: # %entry
61; MIPS64R6-NEXT:    xor $1, $4, $5
62; MIPS64R6-NEXT:    jr $ra
63; MIPS64R6-NEXT:    sll $2, $1, 0
64;
65; MM32R3-LABEL: xor_i1:
66; MM32R3:       # %bb.0: # %entry
67; MM32R3-NEXT:    xor16 $4, $5
68; MM32R3-NEXT:    move $2, $4
69; MM32R3-NEXT:    jrc $ra
70;
71; MM32R6-LABEL: xor_i1:
72; MM32R6:       # %bb.0: # %entry
73; MM32R6-NEXT:    xor $2, $4, $5
74; MM32R6-NEXT:    jrc $ra
75entry:
76  %r = xor i1 %a, %b
77  ret i1 %r
78}
79
80define signext i8 @xor_i8(i8 signext %a, i8 signext %b) {
81; MIPS-LABEL: xor_i8:
82; MIPS:       # %bb.0: # %entry
83; MIPS-NEXT:    jr $ra
84; MIPS-NEXT:    xor $2, $4, $5
85;
86; MIPS32R2-LABEL: xor_i8:
87; MIPS32R2:       # %bb.0: # %entry
88; MIPS32R2-NEXT:    jr $ra
89; MIPS32R2-NEXT:    xor $2, $4, $5
90;
91; MIPS32R6-LABEL: xor_i8:
92; MIPS32R6:       # %bb.0: # %entry
93; MIPS32R6-NEXT:    jr $ra
94; MIPS32R6-NEXT:    xor $2, $4, $5
95;
96; MIPS64-LABEL: xor_i8:
97; MIPS64:       # %bb.0: # %entry
98; MIPS64-NEXT:    xor $1, $4, $5
99; MIPS64-NEXT:    jr $ra
100; MIPS64-NEXT:    sll $2, $1, 0
101;
102; MIPS64R2-LABEL: xor_i8:
103; MIPS64R2:       # %bb.0: # %entry
104; MIPS64R2-NEXT:    xor $1, $4, $5
105; MIPS64R2-NEXT:    jr $ra
106; MIPS64R2-NEXT:    sll $2, $1, 0
107;
108; MIPS64R6-LABEL: xor_i8:
109; MIPS64R6:       # %bb.0: # %entry
110; MIPS64R6-NEXT:    xor $1, $4, $5
111; MIPS64R6-NEXT:    jr $ra
112; MIPS64R6-NEXT:    sll $2, $1, 0
113;
114; MM32R3-LABEL: xor_i8:
115; MM32R3:       # %bb.0: # %entry
116; MM32R3-NEXT:    xor16 $4, $5
117; MM32R3-NEXT:    move $2, $4
118; MM32R3-NEXT:    jrc $ra
119;
120; MM32R6-LABEL: xor_i8:
121; MM32R6:       # %bb.0: # %entry
122; MM32R6-NEXT:    xor $2, $4, $5
123; MM32R6-NEXT:    jrc $ra
124entry:
125  %r = xor i8 %a, %b
126  ret i8 %r
127}
128
129define signext i16 @xor_i16(i16 signext %a, i16 signext %b) {
130; MIPS-LABEL: xor_i16:
131; MIPS:       # %bb.0: # %entry
132; MIPS-NEXT:    jr $ra
133; MIPS-NEXT:    xor $2, $4, $5
134;
135; MIPS32R2-LABEL: xor_i16:
136; MIPS32R2:       # %bb.0: # %entry
137; MIPS32R2-NEXT:    jr $ra
138; MIPS32R2-NEXT:    xor $2, $4, $5
139;
140; MIPS32R6-LABEL: xor_i16:
141; MIPS32R6:       # %bb.0: # %entry
142; MIPS32R6-NEXT:    jr $ra
143; MIPS32R6-NEXT:    xor $2, $4, $5
144;
145; MIPS64-LABEL: xor_i16:
146; MIPS64:       # %bb.0: # %entry
147; MIPS64-NEXT:    xor $1, $4, $5
148; MIPS64-NEXT:    jr $ra
149; MIPS64-NEXT:    sll $2, $1, 0
150;
151; MIPS64R2-LABEL: xor_i16:
152; MIPS64R2:       # %bb.0: # %entry
153; MIPS64R2-NEXT:    xor $1, $4, $5
154; MIPS64R2-NEXT:    jr $ra
155; MIPS64R2-NEXT:    sll $2, $1, 0
156;
157; MIPS64R6-LABEL: xor_i16:
158; MIPS64R6:       # %bb.0: # %entry
159; MIPS64R6-NEXT:    xor $1, $4, $5
160; MIPS64R6-NEXT:    jr $ra
161; MIPS64R6-NEXT:    sll $2, $1, 0
162;
163; MM32R3-LABEL: xor_i16:
164; MM32R3:       # %bb.0: # %entry
165; MM32R3-NEXT:    xor16 $4, $5
166; MM32R3-NEXT:    move $2, $4
167; MM32R3-NEXT:    jrc $ra
168;
169; MM32R6-LABEL: xor_i16:
170; MM32R6:       # %bb.0: # %entry
171; MM32R6-NEXT:    xor $2, $4, $5
172; MM32R6-NEXT:    jrc $ra
173entry:
174  %r = xor i16 %a, %b
175  ret i16 %r
176}
177
178define signext i32 @xor_i32(i32 signext %a, i32 signext %b) {
179; MIPS-LABEL: xor_i32:
180; MIPS:       # %bb.0: # %entry
181; MIPS-NEXT:    jr $ra
182; MIPS-NEXT:    xor $2, $4, $5
183;
184; MIPS32R2-LABEL: xor_i32:
185; MIPS32R2:       # %bb.0: # %entry
186; MIPS32R2-NEXT:    jr $ra
187; MIPS32R2-NEXT:    xor $2, $4, $5
188;
189; MIPS32R6-LABEL: xor_i32:
190; MIPS32R6:       # %bb.0: # %entry
191; MIPS32R6-NEXT:    jr $ra
192; MIPS32R6-NEXT:    xor $2, $4, $5
193;
194; MIPS64-LABEL: xor_i32:
195; MIPS64:       # %bb.0: # %entry
196; MIPS64-NEXT:    jr $ra
197; MIPS64-NEXT:    xor $2, $4, $5
198;
199; MIPS64R2-LABEL: xor_i32:
200; MIPS64R2:       # %bb.0: # %entry
201; MIPS64R2-NEXT:    jr $ra
202; MIPS64R2-NEXT:    xor $2, $4, $5
203;
204; MIPS64R6-LABEL: xor_i32:
205; MIPS64R6:       # %bb.0: # %entry
206; MIPS64R6-NEXT:    jr $ra
207; MIPS64R6-NEXT:    xor $2, $4, $5
208;
209; MM32R3-LABEL: xor_i32:
210; MM32R3:       # %bb.0: # %entry
211; MM32R3-NEXT:    xor16 $4, $5
212; MM32R3-NEXT:    move $2, $4
213; MM32R3-NEXT:    jrc $ra
214;
215; MM32R6-LABEL: xor_i32:
216; MM32R6:       # %bb.0: # %entry
217; MM32R6-NEXT:    xor $2, $4, $5
218; MM32R6-NEXT:    jrc $ra
219entry:
220  %r = xor i32 %a, %b
221  ret i32 %r
222}
223
224define signext i64 @xor_i64(i64 signext %a, i64 signext %b) {
225; MIPS-LABEL: xor_i64:
226; MIPS:       # %bb.0: # %entry
227; MIPS-NEXT:    xor $2, $4, $6
228; MIPS-NEXT:    jr $ra
229; MIPS-NEXT:    xor $3, $5, $7
230;
231; MIPS32R2-LABEL: xor_i64:
232; MIPS32R2:       # %bb.0: # %entry
233; MIPS32R2-NEXT:    xor $2, $4, $6
234; MIPS32R2-NEXT:    jr $ra
235; MIPS32R2-NEXT:    xor $3, $5, $7
236;
237; MIPS32R6-LABEL: xor_i64:
238; MIPS32R6:       # %bb.0: # %entry
239; MIPS32R6-NEXT:    xor $2, $4, $6
240; MIPS32R6-NEXT:    jr $ra
241; MIPS32R6-NEXT:    xor $3, $5, $7
242;
243; MIPS64-LABEL: xor_i64:
244; MIPS64:       # %bb.0: # %entry
245; MIPS64-NEXT:    jr $ra
246; MIPS64-NEXT:    xor $2, $4, $5
247;
248; MIPS64R2-LABEL: xor_i64:
249; MIPS64R2:       # %bb.0: # %entry
250; MIPS64R2-NEXT:    jr $ra
251; MIPS64R2-NEXT:    xor $2, $4, $5
252;
253; MIPS64R6-LABEL: xor_i64:
254; MIPS64R6:       # %bb.0: # %entry
255; MIPS64R6-NEXT:    jr $ra
256; MIPS64R6-NEXT:    xor $2, $4, $5
257;
258; MM32R3-LABEL: xor_i64:
259; MM32R3:       # %bb.0: # %entry
260; MM32R3-NEXT:    xor16 $4, $6
261; MM32R3-NEXT:    xor16 $5, $7
262; MM32R3-NEXT:    move $2, $4
263; MM32R3-NEXT:    move $3, $5
264; MM32R3-NEXT:    jrc $ra
265;
266; MM32R6-LABEL: xor_i64:
267; MM32R6:       # %bb.0: # %entry
268; MM32R6-NEXT:    xor $2, $4, $6
269; MM32R6-NEXT:    xor $3, $5, $7
270; MM32R6-NEXT:    jrc $ra
271entry:
272  %r = xor i64 %a, %b
273  ret i64 %r
274}
275
276define signext i128 @xor_i128(i128 signext %a, i128 signext %b) {
277; MIPS-LABEL: xor_i128:
278; MIPS:       # %bb.0: # %entry
279; MIPS-NEXT:    lw $1, 20($sp)
280; MIPS-NEXT:    lw $2, 16($sp)
281; MIPS-NEXT:    xor $2, $4, $2
282; MIPS-NEXT:    xor $3, $5, $1
283; MIPS-NEXT:    lw $1, 24($sp)
284; MIPS-NEXT:    xor $4, $6, $1
285; MIPS-NEXT:    lw $1, 28($sp)
286; MIPS-NEXT:    jr $ra
287; MIPS-NEXT:    xor $5, $7, $1
288;
289; MIPS32R2-LABEL: xor_i128:
290; MIPS32R2:       # %bb.0: # %entry
291; MIPS32R2-NEXT:    lw $1, 20($sp)
292; MIPS32R2-NEXT:    lw $2, 16($sp)
293; MIPS32R2-NEXT:    xor $2, $4, $2
294; MIPS32R2-NEXT:    xor $3, $5, $1
295; MIPS32R2-NEXT:    lw $1, 24($sp)
296; MIPS32R2-NEXT:    xor $4, $6, $1
297; MIPS32R2-NEXT:    lw $1, 28($sp)
298; MIPS32R2-NEXT:    jr $ra
299; MIPS32R2-NEXT:    xor $5, $7, $1
300;
301; MIPS32R6-LABEL: xor_i128:
302; MIPS32R6:       # %bb.0: # %entry
303; MIPS32R6-NEXT:    lw $1, 20($sp)
304; MIPS32R6-NEXT:    lw $2, 16($sp)
305; MIPS32R6-NEXT:    xor $2, $4, $2
306; MIPS32R6-NEXT:    xor $3, $5, $1
307; MIPS32R6-NEXT:    lw $1, 24($sp)
308; MIPS32R6-NEXT:    xor $4, $6, $1
309; MIPS32R6-NEXT:    lw $1, 28($sp)
310; MIPS32R6-NEXT:    jr $ra
311; MIPS32R6-NEXT:    xor $5, $7, $1
312;
313; MIPS64-LABEL: xor_i128:
314; MIPS64:       # %bb.0: # %entry
315; MIPS64-NEXT:    xor $2, $4, $6
316; MIPS64-NEXT:    jr $ra
317; MIPS64-NEXT:    xor $3, $5, $7
318;
319; MIPS64R2-LABEL: xor_i128:
320; MIPS64R2:       # %bb.0: # %entry
321; MIPS64R2-NEXT:    xor $2, $4, $6
322; MIPS64R2-NEXT:    jr $ra
323; MIPS64R2-NEXT:    xor $3, $5, $7
324;
325; MIPS64R6-LABEL: xor_i128:
326; MIPS64R6:       # %bb.0: # %entry
327; MIPS64R6-NEXT:    xor $2, $4, $6
328; MIPS64R6-NEXT:    jr $ra
329; MIPS64R6-NEXT:    xor $3, $5, $7
330;
331; MM32R3-LABEL: xor_i128:
332; MM32R3:       # %bb.0: # %entry
333; MM32R3-NEXT:    lwp $2, 16($sp)
334; MM32R3-NEXT:    xor16 $2, $4
335; MM32R3-NEXT:    xor16 $3, $5
336; MM32R3-NEXT:    lw $4, 24($sp)
337; MM32R3-NEXT:    xor16 $4, $6
338; MM32R3-NEXT:    lw $5, 28($sp)
339; MM32R3-NEXT:    xor16 $5, $7
340; MM32R3-NEXT:    jrc $ra
341;
342; MM32R6-LABEL: xor_i128:
343; MM32R6:       # %bb.0: # %entry
344; MM32R6-NEXT:    lw $1, 20($sp)
345; MM32R6-NEXT:    lw $2, 16($sp)
346; MM32R6-NEXT:    xor $2, $4, $2
347; MM32R6-NEXT:    xor $3, $5, $1
348; MM32R6-NEXT:    lw $1, 24($sp)
349; MM32R6-NEXT:    xor $4, $6, $1
350; MM32R6-NEXT:    lw $1, 28($sp)
351; MM32R6-NEXT:    xor $5, $7, $1
352; MM32R6-NEXT:    jrc $ra
353entry:
354  %r = xor i128 %a, %b
355  ret i128 %r
356}
357
358define signext i1 @xor_i1_4(i1 signext %b) {
359; MIPS-LABEL: xor_i1_4:
360; MIPS:       # %bb.0: # %entry
361; MIPS-NEXT:    jr $ra
362; MIPS-NEXT:    move $2, $4
363;
364; MIPS32R2-LABEL: xor_i1_4:
365; MIPS32R2:       # %bb.0: # %entry
366; MIPS32R2-NEXT:    jr $ra
367; MIPS32R2-NEXT:    move $2, $4
368;
369; MIPS32R6-LABEL: xor_i1_4:
370; MIPS32R6:       # %bb.0: # %entry
371; MIPS32R6-NEXT:    jr $ra
372; MIPS32R6-NEXT:    move $2, $4
373;
374; MIPS64-LABEL: xor_i1_4:
375; MIPS64:       # %bb.0: # %entry
376; MIPS64-NEXT:    jr $ra
377; MIPS64-NEXT:    move $2, $4
378;
379; MIPS64R2-LABEL: xor_i1_4:
380; MIPS64R2:       # %bb.0: # %entry
381; MIPS64R2-NEXT:    jr $ra
382; MIPS64R2-NEXT:    move $2, $4
383;
384; MIPS64R6-LABEL: xor_i1_4:
385; MIPS64R6:       # %bb.0: # %entry
386; MIPS64R6-NEXT:    jr $ra
387; MIPS64R6-NEXT:    move $2, $4
388;
389; MM32R3-LABEL: xor_i1_4:
390; MM32R3:       # %bb.0: # %entry
391; MM32R3-NEXT:    move $2, $4
392; MM32R3-NEXT:    jrc $ra
393;
394; MM32R6-LABEL: xor_i1_4:
395; MM32R6:       # %bb.0: # %entry
396; MM32R6-NEXT:    move $2, $4
397; MM32R6-NEXT:    jrc $ra
398entry:
399  %r = xor i1 4, %b
400  ret i1 %r
401}
402
403define signext i8 @xor_i8_4(i8 signext %b) {
404; MIPS-LABEL: xor_i8_4:
405; MIPS:       # %bb.0: # %entry
406; MIPS-NEXT:    jr $ra
407; MIPS-NEXT:    xori $2, $4, 4
408;
409; MIPS32R2-LABEL: xor_i8_4:
410; MIPS32R2:       # %bb.0: # %entry
411; MIPS32R2-NEXT:    jr $ra
412; MIPS32R2-NEXT:    xori $2, $4, 4
413;
414; MIPS32R6-LABEL: xor_i8_4:
415; MIPS32R6:       # %bb.0: # %entry
416; MIPS32R6-NEXT:    jr $ra
417; MIPS32R6-NEXT:    xori $2, $4, 4
418;
419; MIPS64-LABEL: xor_i8_4:
420; MIPS64:       # %bb.0: # %entry
421; MIPS64-NEXT:    jr $ra
422; MIPS64-NEXT:    xori $2, $4, 4
423;
424; MIPS64R2-LABEL: xor_i8_4:
425; MIPS64R2:       # %bb.0: # %entry
426; MIPS64R2-NEXT:    jr $ra
427; MIPS64R2-NEXT:    xori $2, $4, 4
428;
429; MIPS64R6-LABEL: xor_i8_4:
430; MIPS64R6:       # %bb.0: # %entry
431; MIPS64R6-NEXT:    jr $ra
432; MIPS64R6-NEXT:    xori $2, $4, 4
433;
434; MM32R3-LABEL: xor_i8_4:
435; MM32R3:       # %bb.0: # %entry
436; MM32R3-NEXT:    jr $ra
437; MM32R3-NEXT:    xori $2, $4, 4
438;
439; MM32R6-LABEL: xor_i8_4:
440; MM32R6:       # %bb.0: # %entry
441; MM32R6-NEXT:    xori $2, $4, 4
442; MM32R6-NEXT:    jrc $ra
443entry:
444  %r = xor i8 4, %b
445  ret i8 %r
446}
447
448define signext i16 @xor_i16_4(i16 signext %b) {
449; MIPS-LABEL: xor_i16_4:
450; MIPS:       # %bb.0: # %entry
451; MIPS-NEXT:    jr $ra
452; MIPS-NEXT:    xori $2, $4, 4
453;
454; MIPS32R2-LABEL: xor_i16_4:
455; MIPS32R2:       # %bb.0: # %entry
456; MIPS32R2-NEXT:    jr $ra
457; MIPS32R2-NEXT:    xori $2, $4, 4
458;
459; MIPS32R6-LABEL: xor_i16_4:
460; MIPS32R6:       # %bb.0: # %entry
461; MIPS32R6-NEXT:    jr $ra
462; MIPS32R6-NEXT:    xori $2, $4, 4
463;
464; MIPS64-LABEL: xor_i16_4:
465; MIPS64:       # %bb.0: # %entry
466; MIPS64-NEXT:    jr $ra
467; MIPS64-NEXT:    xori $2, $4, 4
468;
469; MIPS64R2-LABEL: xor_i16_4:
470; MIPS64R2:       # %bb.0: # %entry
471; MIPS64R2-NEXT:    jr $ra
472; MIPS64R2-NEXT:    xori $2, $4, 4
473;
474; MIPS64R6-LABEL: xor_i16_4:
475; MIPS64R6:       # %bb.0: # %entry
476; MIPS64R6-NEXT:    jr $ra
477; MIPS64R6-NEXT:    xori $2, $4, 4
478;
479; MM32R3-LABEL: xor_i16_4:
480; MM32R3:       # %bb.0: # %entry
481; MM32R3-NEXT:    jr $ra
482; MM32R3-NEXT:    xori $2, $4, 4
483;
484; MM32R6-LABEL: xor_i16_4:
485; MM32R6:       # %bb.0: # %entry
486; MM32R6-NEXT:    xori $2, $4, 4
487; MM32R6-NEXT:    jrc $ra
488entry:
489  %r = xor i16 4, %b
490  ret i16 %r
491}
492
493define signext i32 @xor_i32_4(i32 signext %b) {
494; MIPS-LABEL: xor_i32_4:
495; MIPS:       # %bb.0: # %entry
496; MIPS-NEXT:    jr $ra
497; MIPS-NEXT:    xori $2, $4, 4
498;
499; MIPS32R2-LABEL: xor_i32_4:
500; MIPS32R2:       # %bb.0: # %entry
501; MIPS32R2-NEXT:    jr $ra
502; MIPS32R2-NEXT:    xori $2, $4, 4
503;
504; MIPS32R6-LABEL: xor_i32_4:
505; MIPS32R6:       # %bb.0: # %entry
506; MIPS32R6-NEXT:    jr $ra
507; MIPS32R6-NEXT:    xori $2, $4, 4
508;
509; MIPS64-LABEL: xor_i32_4:
510; MIPS64:       # %bb.0: # %entry
511; MIPS64-NEXT:    xori $1, $4, 4
512; MIPS64-NEXT:    jr $ra
513; MIPS64-NEXT:    sll $2, $1, 0
514;
515; MIPS64R2-LABEL: xor_i32_4:
516; MIPS64R2:       # %bb.0: # %entry
517; MIPS64R2-NEXT:    xori $1, $4, 4
518; MIPS64R2-NEXT:    jr $ra
519; MIPS64R2-NEXT:    sll $2, $1, 0
520;
521; MIPS64R6-LABEL: xor_i32_4:
522; MIPS64R6:       # %bb.0: # %entry
523; MIPS64R6-NEXT:    xori $1, $4, 4
524; MIPS64R6-NEXT:    jr $ra
525; MIPS64R6-NEXT:    sll $2, $1, 0
526;
527; MM32R3-LABEL: xor_i32_4:
528; MM32R3:       # %bb.0: # %entry
529; MM32R3-NEXT:    jr $ra
530; MM32R3-NEXT:    xori $2, $4, 4
531;
532; MM32R6-LABEL: xor_i32_4:
533; MM32R6:       # %bb.0: # %entry
534; MM32R6-NEXT:    xori $2, $4, 4
535; MM32R6-NEXT:    jrc $ra
536entry:
537  %r = xor i32 4, %b
538  ret i32 %r
539}
540
541define signext i64 @xor_i64_4(i64 signext %b) {
542; MIPS-LABEL: xor_i64_4:
543; MIPS:       # %bb.0: # %entry
544; MIPS-NEXT:    xori $3, $5, 4
545; MIPS-NEXT:    jr $ra
546; MIPS-NEXT:    move $2, $4
547;
548; MIPS32R2-LABEL: xor_i64_4:
549; MIPS32R2:       # %bb.0: # %entry
550; MIPS32R2-NEXT:    xori $3, $5, 4
551; MIPS32R2-NEXT:    jr $ra
552; MIPS32R2-NEXT:    move $2, $4
553;
554; MIPS32R6-LABEL: xor_i64_4:
555; MIPS32R6:       # %bb.0: # %entry
556; MIPS32R6-NEXT:    xori $3, $5, 4
557; MIPS32R6-NEXT:    jr $ra
558; MIPS32R6-NEXT:    move $2, $4
559;
560; MIPS64-LABEL: xor_i64_4:
561; MIPS64:       # %bb.0: # %entry
562; MIPS64-NEXT:    jr $ra
563; MIPS64-NEXT:    xori $2, $4, 4
564;
565; MIPS64R2-LABEL: xor_i64_4:
566; MIPS64R2:       # %bb.0: # %entry
567; MIPS64R2-NEXT:    jr $ra
568; MIPS64R2-NEXT:    xori $2, $4, 4
569;
570; MIPS64R6-LABEL: xor_i64_4:
571; MIPS64R6:       # %bb.0: # %entry
572; MIPS64R6-NEXT:    jr $ra
573; MIPS64R6-NEXT:    xori $2, $4, 4
574;
575; MM32R3-LABEL: xor_i64_4:
576; MM32R3:       # %bb.0: # %entry
577; MM32R3-NEXT:    xori $3, $5, 4
578; MM32R3-NEXT:    move $2, $4
579; MM32R3-NEXT:    jrc $ra
580;
581; MM32R6-LABEL: xor_i64_4:
582; MM32R6:       # %bb.0: # %entry
583; MM32R6-NEXT:    xori $3, $5, 4
584; MM32R6-NEXT:    move $2, $4
585; MM32R6-NEXT:    jrc $ra
586entry:
587  %r = xor i64 4, %b
588  ret i64 %r
589}
590
591define signext i128 @xor_i128_4(i128 signext %b) {
592; MIPS-LABEL: xor_i128_4:
593; MIPS:       # %bb.0: # %entry
594; MIPS-NEXT:    xori $1, $7, 4
595; MIPS-NEXT:    move $2, $4
596; MIPS-NEXT:    move $3, $5
597; MIPS-NEXT:    move $4, $6
598; MIPS-NEXT:    jr $ra
599; MIPS-NEXT:    move $5, $1
600;
601; MIPS32R2-LABEL: xor_i128_4:
602; MIPS32R2:       # %bb.0: # %entry
603; MIPS32R2-NEXT:    xori $1, $7, 4
604; MIPS32R2-NEXT:    move $2, $4
605; MIPS32R2-NEXT:    move $3, $5
606; MIPS32R2-NEXT:    move $4, $6
607; MIPS32R2-NEXT:    jr $ra
608; MIPS32R2-NEXT:    move $5, $1
609;
610; MIPS32R6-LABEL: xor_i128_4:
611; MIPS32R6:       # %bb.0: # %entry
612; MIPS32R6-NEXT:    xori $1, $7, 4
613; MIPS32R6-NEXT:    move $2, $4
614; MIPS32R6-NEXT:    move $3, $5
615; MIPS32R6-NEXT:    move $4, $6
616; MIPS32R6-NEXT:    jr $ra
617; MIPS32R6-NEXT:    move $5, $1
618;
619; MIPS64-LABEL: xor_i128_4:
620; MIPS64:       # %bb.0: # %entry
621; MIPS64-NEXT:    xori $3, $5, 4
622; MIPS64-NEXT:    jr $ra
623; MIPS64-NEXT:    move $2, $4
624;
625; MIPS64R2-LABEL: xor_i128_4:
626; MIPS64R2:       # %bb.0: # %entry
627; MIPS64R2-NEXT:    xori $3, $5, 4
628; MIPS64R2-NEXT:    jr $ra
629; MIPS64R2-NEXT:    move $2, $4
630;
631; MIPS64R6-LABEL: xor_i128_4:
632; MIPS64R6:       # %bb.0: # %entry
633; MIPS64R6-NEXT:    xori $3, $5, 4
634; MIPS64R6-NEXT:    jr $ra
635; MIPS64R6-NEXT:    move $2, $4
636;
637; MM32R3-LABEL: xor_i128_4:
638; MM32R3:       # %bb.0: # %entry
639; MM32R3-NEXT:    xori $1, $7, 4
640; MM32R3-NEXT:    move $2, $4
641; MM32R3-NEXT:    move $3, $5
642; MM32R3-NEXT:    move $4, $6
643; MM32R3-NEXT:    move $5, $1
644; MM32R3-NEXT:    jrc $ra
645;
646; MM32R6-LABEL: xor_i128_4:
647; MM32R6:       # %bb.0: # %entry
648; MM32R6-NEXT:    xori $1, $7, 4
649; MM32R6-NEXT:    move $2, $4
650; MM32R6-NEXT:    move $3, $5
651; MM32R6-NEXT:    move $4, $6
652; MM32R6-NEXT:    move $5, $1
653; MM32R6-NEXT:    jrc $ra
654entry:
655  %r = xor i128 4, %b
656  ret i128 %r
657}
658