Fixed some bugs in register stack pass.
[llvm/zpu.git] / test / CodeGen / CellSPU / icmp8.ll
blob5517d104ab9f2ceeacabb1eddf8391d1948126df
1 ; RUN: llc < %s -march=cellspu > %t1.s
2 ; RUN: grep ceqb                               %t1.s | count 24
3 ; RUN: grep ceqbi                              %t1.s | count 12
4 ; RUN: grep clgtb                              %t1.s | count 11
5 ; RUN: grep cgtb                               %t1.s | count 13
6 ; RUN: grep cgtbi                              %t1.s | count 5
7 ; RUN: grep {selb\t\\\$3, \\\$6, \\\$5, \\\$3} %t1.s | count 7
8 ; RUN: grep {selb\t\\\$3, \\\$5, \\\$6, \\\$3} %t1.s | count 3
9 ; RUN: grep {selb\t\\\$3, \\\$5, \\\$4, \\\$3} %t1.s | count 11
10 ; RUN: grep {selb\t\\\$3, \\\$4, \\\$5, \\\$3} %t1.s | count 4
12 target datalayout = "E-p:32:32:128-f64:64:128-f32:32:128-i64:32:128-i32:32:128-i16:16:128-i8:8:128-i1:8:128-a0:0:128-v128:128:128-s0:128:128"
13 target triple = "spu"
15 ; $3 = %arg1, $4 = %arg2, $5 = %val1, $6 = %val2
16 ; $3 = %arg1, $4 = %val1, $5 = %val2
18 ; For "positive" comparisons:
19 ; selb $3, $6, $5, <i1>
20 ; selb $3, $5, $4, <i1>
22 ; For "negative" comparisons, i.e., those where the result of the comparison
23 ; must be inverted (setne, for example):
24 ; selb $3, $5, $6, <i1>
25 ; selb $3, $4, $5, <i1>
27 ; i8 integer comparisons:
28 define i8 @icmp_eq_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
29 entry:
30        %A = icmp eq i8 %arg1, %arg2
31        %B = select i1 %A, i8 %val1, i8 %val2
32        ret i8 %B
35 define i1 @icmp_eq_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
36 entry:
37        %A = icmp eq i8 %arg1, %arg2
38        ret i1 %A
41 define i8 @icmp_eq_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
42 entry:
43        %A = icmp eq i8 %arg1, 127
44        %B = select i1 %A, i8 %val1, i8 %val2
45        ret i8 %B
48 define i8 @icmp_eq_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
49 entry:
50        %A = icmp eq i8 %arg1, -128
51        %B = select i1 %A, i8 %val1, i8 %val2
52        ret i8 %B
55 define i8 @icmp_eq_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
56 entry:
57        %A = icmp eq i8 %arg1, -1
58        %B = select i1 %A, i8 %val1, i8 %val2
59        ret i8 %B
62 define i8 @icmp_ne_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
63 entry:
64        %A = icmp ne i8 %arg1, %arg2
65        %B = select i1 %A, i8 %val1, i8 %val2
66        ret i8 %B
69 define i1 @icmp_ne_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
70 entry:
71        %A = icmp ne i8 %arg1, %arg2
72        ret i1 %A
75 define i8 @icmp_ne_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
76 entry:
77        %A = icmp ne i8 %arg1, 127
78        %B = select i1 %A, i8 %val1, i8 %val2
79        ret i8 %B
82 define i8 @icmp_ne_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
83 entry:
84        %A = icmp ne i8 %arg1, -128
85        %B = select i1 %A, i8 %val1, i8 %val2
86        ret i8 %B
89 define i8 @icmp_ne_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
90 entry:
91        %A = icmp ne i8 %arg1, -1
92        %B = select i1 %A, i8 %val1, i8 %val2
93        ret i8 %B
96 define i8 @icmp_ugt_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
97 entry:
98        %A = icmp ugt i8 %arg1, %arg2
99        %B = select i1 %A, i8 %val1, i8 %val2
100        ret i8 %B
103 define i1 @icmp_ugt_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
104 entry:
105        %A = icmp ugt i8 %arg1, %arg2
106        ret i1 %A
109 define i8 @icmp_ugt_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
110 entry:
111        %A = icmp ugt i8 %arg1, 126
112        %B = select i1 %A, i8 %val1, i8 %val2
113        ret i8 %B
116 define i8 @icmp_uge_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
117 entry:
118        %A = icmp uge i8 %arg1, %arg2
119        %B = select i1 %A, i8 %val1, i8 %val2
120        ret i8 %B
123 define i1 @icmp_uge_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
124 entry:
125        %A = icmp uge i8 %arg1, %arg2
126        ret i1 %A
129 ;; Note: icmp uge i8 %arg1, <immed> can always be transformed into
130 ;;       icmp ugt i8 %arg1, <immed>-1
132 ;; Consequently, even though the patterns exist to match, it's unlikely
133 ;; they'll ever be generated.
135 define i8 @icmp_ult_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
136 entry:
137        %A = icmp ult i8 %arg1, %arg2
138        %B = select i1 %A, i8 %val1, i8 %val2
139        ret i8 %B
142 define i1 @icmp_ult_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
143 entry:
144        %A = icmp ult i8 %arg1, %arg2
145        ret i1 %A
148 define i8 @icmp_ult_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
149 entry:
150        %A = icmp ult i8 %arg1, 253
151        %B = select i1 %A, i8 %val1, i8 %val2
152        ret i8 %B
155 define i8 @icmp_ult_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
156 entry:
157        %A = icmp ult i8 %arg1, 129
158        %B = select i1 %A, i8 %val1, i8 %val2
159        ret i8 %B
162 define i8 @icmp_ule_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
163 entry:
164        %A = icmp ule i8 %arg1, %arg2
165        %B = select i1 %A, i8 %val1, i8 %val2
166        ret i8 %B
169 define i1 @icmp_ule_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
170 entry:
171        %A = icmp ule i8 %arg1, %arg2
172        ret i1 %A
175 ;; Note: icmp ule i8 %arg1, <immed> can always be transformed into
176 ;;       icmp ult i8 %arg1, <immed>+1
178 ;; Consequently, even though the patterns exist to match, it's unlikely
179 ;; they'll ever be generated.
181 define i8 @icmp_sgt_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
182 entry:
183        %A = icmp sgt i8 %arg1, %arg2
184        %B = select i1 %A, i8 %val1, i8 %val2
185        ret i8 %B
188 define i1 @icmp_sgt_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
189 entry:
190        %A = icmp sgt i8 %arg1, %arg2
191        ret i1 %A
194 define i8 @icmp_sgt_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
195 entry:
196        %A = icmp sgt i8 %arg1, 96
197        %B = select i1 %A, i8 %val1, i8 %val2
198        ret i8 %B
201 define i8 @icmp_sgt_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
202 entry:
203        %A = icmp sgt i8 %arg1, -1
204        %B = select i1 %A, i8 %val1, i8 %val2
205        ret i8 %B
208 define i8 @icmp_sgt_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
209 entry:
210        %A = icmp sgt i8 %arg1, -128
211        %B = select i1 %A, i8 %val1, i8 %val2
212        ret i8 %B
215 define i8 @icmp_sge_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
216 entry:
217        %A = icmp sge i8 %arg1, %arg2
218        %B = select i1 %A, i8 %val1, i8 %val2
219        ret i8 %B
222 define i1 @icmp_sge_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
223 entry:
224        %A = icmp sge i8 %arg1, %arg2
225        ret i1 %A
228 ;; Note: icmp sge i8 %arg1, <immed> can always be transformed into
229 ;;       icmp sgt i8 %arg1, <immed>-1
231 ;; Consequently, even though the patterns exist to match, it's unlikely
232 ;; they'll ever be generated.
234 define i8 @icmp_slt_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
235 entry:
236        %A = icmp slt i8 %arg1, %arg2
237        %B = select i1 %A, i8 %val1, i8 %val2
238        ret i8 %B
241 define i1 @icmp_slt_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
242 entry:
243        %A = icmp slt i8 %arg1, %arg2
244        ret i1 %A
247 define i8 @icmp_slt_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
248 entry:
249        %A = icmp slt i8 %arg1, 96
250        %B = select i1 %A, i8 %val1, i8 %val2
251        ret i8 %B
254 define i8 @icmp_slt_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
255 entry:
256        %A = icmp slt i8 %arg1, -120
257        %B = select i1 %A, i8 %val1, i8 %val2
258        ret i8 %B
261 define i8 @icmp_slt_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
262 entry:
263        %A = icmp slt i8 %arg1, -1
264        %B = select i1 %A, i8 %val1, i8 %val2
265        ret i8 %B
268 define i8 @icmp_sle_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
269 entry:
270        %A = icmp sle i8 %arg1, %arg2
271        %B = select i1 %A, i8 %val1, i8 %val2
272        ret i8 %B
275 define i1 @icmp_sle_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
276 entry:
277        %A = icmp sle i8 %arg1, %arg2
278        ret i1 %A
281 ;; Note: icmp sle i8 %arg1, <immed> can always be transformed into
282 ;;       icmp slt i8 %arg1, <immed>+1
284 ;; Consequently, even though the patterns exist to match, it's unlikely
285 ;; they'll ever be generated.