Integer comparison tests for CellSPU.
[oota-llvm.git] / test / CodeGen / CellSPU / icmp8.ll
1 ; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s
2
3 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"
4 target triple = "spu"
5
6 ; $3 = %arg1, $4 = %arg2, $5 = %val1, $6 = %val2
7 ; $3 = %arg1, $4 = %val1, $5 = %val2
8 ;
9 ; For "positive" comparisons:
10 ; selb $3, $6, $5, <i1>
11 ; selb $3, $5, $4, <i1>
12 ;
13 ; For "negative" comparisons, i.e., those where the result of the comparison
14 ; must be inverted (setne, for example):
15 ; selb $3, $5, $6, <i1>
16 ; selb $3, $4, $5, <i1>
17
18 ; i8 integer comparisons:
19 define i8 @icmp_eq_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
20 entry:
21        %A = icmp eq i8 %arg1, %arg2
22        %B = select i1 %A, i8 %val1, i8 %val2
23        ret i8 %B
24 }
25
26 define i1 @icmp_eq_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
27 entry:
28        %A = icmp eq i8 %arg1, %arg2
29        ret i1 %A
30 }
31
32 define i8 @icmp_eq_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
33 entry:
34        %A = icmp eq i8 %arg1, 127
35        %B = select i1 %A, i8 %val1, i8 %val2
36        ret i8 %B
37 }
38
39 define i8 @icmp_eq_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
40 entry:
41        %A = icmp eq i8 %arg1, -128
42        %B = select i1 %A, i8 %val1, i8 %val2
43        ret i8 %B
44 }
45
46 define i8 @icmp_eq_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
47 entry:
48        %A = icmp eq i8 %arg1, -1
49        %B = select i1 %A, i8 %val1, i8 %val2
50        ret i8 %B
51 }
52
53 define i8 @icmp_ne_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
54 entry:
55        %A = icmp ne i8 %arg1, %arg2
56        %B = select i1 %A, i8 %val1, i8 %val2
57        ret i8 %B
58 }
59
60 define i1 @icmp_ne_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
61 entry:
62        %A = icmp ne i8 %arg1, %arg2
63        ret i1 %A
64 }
65
66 define i8 @icmp_ne_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
67 entry:
68        %A = icmp ne i8 %arg1, 127
69        %B = select i1 %A, i8 %val1, i8 %val2
70        ret i8 %B
71 }
72
73 define i8 @icmp_ne_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
74 entry:
75        %A = icmp ne i8 %arg1, -128
76        %B = select i1 %A, i8 %val1, i8 %val2
77        ret i8 %B
78 }
79
80 define i8 @icmp_ne_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
81 entry:
82        %A = icmp ne i8 %arg1, -1
83        %B = select i1 %A, i8 %val1, i8 %val2
84        ret i8 %B
85 }
86
87 define i8 @icmp_ugt_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
88 entry:
89        %A = icmp ugt i8 %arg1, %arg2
90        %B = select i1 %A, i8 %val1, i8 %val2
91        ret i8 %B
92 }
93
94 define i1 @icmp_ugt_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
95 entry:
96        %A = icmp ugt i8 %arg1, %arg2
97        ret i1 %A
98 }
99
100 define i8 @icmp_ugt_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
101 entry:
102        %A = icmp ugt i8 %arg1, 126
103        %B = select i1 %A, i8 %val1, i8 %val2
104        ret i8 %B
105 }
106
107 define i8 @icmp_uge_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
108 entry:
109        %A = icmp uge i8 %arg1, %arg2
110        %B = select i1 %A, i8 %val1, i8 %val2
111        ret i8 %B
112 }
113
114 define i1 @icmp_uge_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
115 entry:
116        %A = icmp uge i8 %arg1, %arg2
117        ret i1 %A
118 }
119
120 ;; Note: icmp uge i8 %arg1, <immed> can always be transformed into
121 ;;       icmp ugt i8 %arg1, <immed>-1
122 ;;
123 ;; Consequently, even though the patterns exist to match, it's unlikely
124 ;; they'll ever be generated.
125
126 define i8 @icmp_ult_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
127 entry:
128        %A = icmp ult i8 %arg1, %arg2
129        %B = select i1 %A, i8 %val1, i8 %val2
130        ret i8 %B
131 }
132
133 define i1 @icmp_ult_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
134 entry:
135        %A = icmp ult i8 %arg1, %arg2
136        ret i1 %A
137 }
138
139 define i8 @icmp_ult_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
140 entry:
141        %A = icmp ult i8 %arg1, 253
142        %B = select i1 %A, i8 %val1, i8 %val2
143        ret i8 %B
144 }
145
146 define i8 @icmp_ult_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
147 entry:
148        %A = icmp ult i8 %arg1, 129
149        %B = select i1 %A, i8 %val1, i8 %val2
150        ret i8 %B
151 }
152
153 define i8 @icmp_ule_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
154 entry:
155        %A = icmp ule i8 %arg1, %arg2
156        %B = select i1 %A, i8 %val1, i8 %val2
157        ret i8 %B
158 }
159
160 define i1 @icmp_ule_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
161 entry:
162        %A = icmp ule i8 %arg1, %arg2
163        ret i1 %A
164 }
165
166 ;; Note: icmp ule i8 %arg1, <immed> can always be transformed into
167 ;;       icmp ult i8 %arg1, <immed>+1
168 ;;
169 ;; Consequently, even though the patterns exist to match, it's unlikely
170 ;; they'll ever be generated.
171
172 define i8 @icmp_sgt_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
173 entry:
174        %A = icmp sgt i8 %arg1, %arg2
175        %B = select i1 %A, i8 %val1, i8 %val2
176        ret i8 %B
177 }
178
179 define i1 @icmp_sgt_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
180 entry:
181        %A = icmp sgt i8 %arg1, %arg2
182        ret i1 %A
183 }
184
185 define i8 @icmp_sgt_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
186 entry:
187        %A = icmp sgt i8 %arg1, 127
188        %B = select i1 %A, i8 %val1, i8 %val2
189        ret i8 %B
190 }
191
192 define i8 @icmp_sgt_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
193 entry:
194        %A = icmp sgt i8 %arg1, -1
195        %B = select i1 %A, i8 %val1, i8 %val2
196        ret i8 %B
197 }
198
199 define i8 @icmp_sgt_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
200 entry:
201        %A = icmp sgt i8 %arg1, -128
202        %B = select i1 %A, i8 %val1, i8 %val2
203        ret i8 %B
204 }
205
206 define i8 @icmp_sge_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
207 entry:
208        %A = icmp sge i8 %arg1, %arg2
209        %B = select i1 %A, i8 %val1, i8 %val2
210        ret i8 %B
211 }
212
213 define i1 @icmp_sge_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
214 entry:
215        %A = icmp sge i8 %arg1, %arg2
216        ret i1 %A
217 }
218
219 ;; Note: icmp sge i8 %arg1, <immed> can always be transformed into
220 ;;       icmp sgt i8 %arg1, <immed>-1
221 ;;
222 ;; Consequently, even though the patterns exist to match, it's unlikely
223 ;; they'll ever be generated.
224
225 define i8 @icmp_slt_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
226 entry:
227        %A = icmp slt i8 %arg1, %arg2
228        %B = select i1 %A, i8 %val1, i8 %val2
229        ret i8 %B
230 }
231
232 define i1 @icmp_slt_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
233 entry:
234        %A = icmp slt i8 %arg1, %arg2
235        ret i1 %A
236 }
237
238 define i8 @icmp_slt_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
239 entry:
240        %A = icmp slt i8 %arg1, 127
241        %B = select i1 %A, i8 %val1, i8 %val2
242        ret i8 %B
243 }
244
245 define i8 @icmp_slt_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
246 entry:
247        %A = icmp slt i8 %arg1, -128
248        %B = select i1 %A, i8 %val1, i8 %val2
249        ret i8 %B
250 }
251
252 define i8 @icmp_slt_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
253 entry:
254        %A = icmp slt i8 %arg1, -1
255        %B = select i1 %A, i8 %val1, i8 %val2
256        ret i8 %B
257 }
258
259 define i8 @icmp_sle_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
260 entry:
261        %A = icmp sle i8 %arg1, %arg2
262        %B = select i1 %A, i8 %val1, i8 %val2
263        ret i8 %B
264 }
265
266 define i1 @icmp_sle_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
267 entry:
268        %A = icmp sle i8 %arg1, %arg2
269        ret i1 %A
270 }
271
272 ;; Note: icmp sle i8 %arg1, <immed> can always be transformed into
273 ;;       icmp slt i8 %arg1, <immed>+1
274 ;;
275 ;; Consequently, even though the patterns exist to match, it's unlikely
276 ;; they'll ever be generated.
277