[InstCombine] Signed saturation patterns
[llvm-core.git] / test / CodeGen / Mips / setcc-se.ll
blobb6c6b81943a68bdd395d6d60c3d7a0e4387ad8c0
1 ; RUN: llc -march=mipsel < %s | FileCheck %s
2 ; RUN: llc  -march=mips -mcpu=mips32r6 -mattr=micromips -relocation-model=pic < %s -asm-show-inst | FileCheck %s -check-prefix=MMR6
4 @g1 = external global i32
6 ; CHECK-LABEL: seteq0:
7 ; CHECK:  sltiu ${{[0-9]+}}, $4, 1
8 ; MMR6:   sltiu ${{[0-9]+}}, $4, 1
9 ; MMR6:   <MCInst #{{[0-9]+}} SLTiu_MM
11 define i32 @seteq0(i32 %a) {
12 entry:
13   %cmp = icmp eq i32 %a, 0
14   %conv = zext i1 %cmp to i32
15   ret i32 %conv
18 ; CHECK-LABEL: setne0:
19 ; CHECK:  sltu ${{[0-9]+}}, $zero, $4
20 ; MMR6:   sltu ${{[0-9]+}}, $zero, $4
21 ; MMR6:   <MCInst #{{[0-9]+}} SLTu_MM
23 define i32 @setne0(i32 %a) {
24 entry:
25   %cmp = icmp ne i32 %a, 0
26   %conv = zext i1 %cmp to i32
27   ret i32 %conv
30 ; CHECK-LABEL: slti_beq0:
31 ; CHECK:  slti $[[R0:[0-9]+]], $4, -32768
32 ; MMR6:   slti $[[R0:[0-9]+]], $4, -32768
33 ; MMR6:   <MCInst #{{[0-9]+}} SLTi_MM
34 ; CHECK:  beqz $[[R0]]
36 define void @slti_beq0(i32 %a) {
37 entry:
38   %cmp = icmp slt i32 %a, -32768
39   br i1 %cmp, label %if.then, label %if.end
41 if.then:
42   store i32 %a, i32* @g1, align 4
43   br label %if.end
45 if.end:
46   ret void
49 ; CHECK-LABEL: slti_beq1:
50 ; CHECK:  slt ${{[0-9]+}}
51 ; MMR6:   slt ${{[0-9]+}}
52 ; MMR6:   <MCInst #{{[0-9]+}} SLT_MM
54 define void @slti_beq1(i32 %a) {
55 entry:
56   %cmp = icmp slt i32 %a, -32769
57   br i1 %cmp, label %if.then, label %if.end
59 if.then:
60   store i32 %a, i32* @g1, align 4
61   br label %if.end
63 if.end:
64   ret void
67 ; CHECK-LABEL: slti_beq2:
68 ; CHECK:  slti $[[R0:[0-9]+]], $4, 32767
69 ; MMR6:   slti $[[R0:[0-9]+]], $4, 32767
70 ; MMR6:   <MCInst #{{[0-9]+}} SLTi_MM
71 ; CHECK:  beqz $[[R0]]
73 define void @slti_beq2(i32 %a) {
74 entry:
75   %cmp = icmp slt i32 %a, 32767
76   br i1 %cmp, label %if.then, label %if.end
78 if.then:
79   store i32 %a, i32* @g1, align 4
80   br label %if.end
82 if.end:
83   ret void
86 ; CHECK-LABEL: slti_beq3:
87 ; CHECK:  slt ${{[0-9]+}}
88 ; MMR6:   slt ${{[0-9]+}}
89 ; MMR6:   <MCInst #{{[0-9]+}} SLT_MM
91 define void @slti_beq3(i32 %a) {
92 entry:
93   %cmp = icmp slt i32 %a, 32768
94   br i1 %cmp, label %if.then, label %if.end
96 if.then:
97   store i32 %a, i32* @g1, align 4
98   br label %if.end
100 if.end:
101   ret void
104 ; CHECK-LABEL: sltiu_beq0:
105 ; CHECK:  sltiu $[[R0:[0-9]+]], $4, 32767
106 ; MMR6:   sltiu $[[R0:[0-9]+]], $4, 32767
107 ; MMR6:   <MCInst #{{[0-9]+}} SLTiu_MM
108 ; CHECK:  beqz $[[R0]]
110 define void @sltiu_beq0(i32 %a) {
111 entry:
112   %cmp = icmp ult i32 %a, 32767
113   br i1 %cmp, label %if.then, label %if.end
115 if.then:
116   store i32 %a, i32* @g1, align 4
117   br label %if.end
119 if.end:
120   ret void
123 ; CHECK-LABEL: sltiu_beq1:
124 ; CHECK:  sltu ${{[0-9]+}}
125 ; MMR6:   sltu ${{[0-9]+}}
126 ; MMR6:   <MCInst #{{[0-9]+}} SLTu_MM
128 define void @sltiu_beq1(i32 %a) {
129 entry:
130   %cmp = icmp ult i32 %a, 32768
131   br i1 %cmp, label %if.then, label %if.end
133 if.then:
134   store i32 %a, i32* @g1, align 4
135   br label %if.end
137 if.end:
138   ret void
141 ; CHECK-LABEL: sltiu_beq2:
142 ; CHECK:  sltiu $[[R0:[0-9]+]], $4, -32768
143 ; MMR6:   sltiu $[[R0:[0-9]+]], $4, -32768
144 ; MMR6:   <MCInst #{{[0-9]+}} SLTiu_MM
145 ; CHECK:  beqz $[[R0]]
147 define void @sltiu_beq2(i32 %a) {
148 entry:
149   %cmp = icmp ult i32 %a, -32768
150   br i1 %cmp, label %if.then, label %if.end
152 if.then:
153   store i32 %a, i32* @g1, align 4
154   br label %if.end
156 if.end:
157   ret void
160 ; CHECK-LABEL: sltiu_beq3:
161 ; CHECK:  sltu ${{[0-9]+}}
162 ; MMR6:   sltu ${{[0-9]+}}
163 ; MMR6:   <MCInst #{{[0-9]+}} SLTu_MM
165 define void @sltiu_beq3(i32 %a) {
166 entry:
167   %cmp = icmp ult i32 %a, -32769
168   br i1 %cmp, label %if.then, label %if.end
170 if.then:
171   store i32 %a, i32* @g1, align 4
172   br label %if.end
174 if.end:
175   ret void