1 ; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s
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"
6 ; $3 = %arg1, $4 = %arg2, $5 = %val1, $6 = %val2
7 ; $3 = %arg1, $4 = %val1, $5 = %val2
9 ; For "positive" comparisons:
10 ; selb $3, $6, $5, <i1>
11 ; selb $3, $5, $4, <i1>
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>
18 ; i8 integer comparisons:
19 define i8 @icmp_eq_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
21 %A = icmp eq i8 %arg1, %arg2
22 %B = select i1 %A, i8 %val1, i8 %val2
26 define i1 @icmp_eq_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
28 %A = icmp eq i8 %arg1, %arg2
32 define i8 @icmp_eq_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
34 %A = icmp eq i8 %arg1, 127
35 %B = select i1 %A, i8 %val1, i8 %val2
39 define i8 @icmp_eq_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
41 %A = icmp eq i8 %arg1, -128
42 %B = select i1 %A, i8 %val1, i8 %val2
46 define i8 @icmp_eq_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
48 %A = icmp eq i8 %arg1, -1
49 %B = select i1 %A, i8 %val1, i8 %val2
53 define i8 @icmp_ne_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
55 %A = icmp ne i8 %arg1, %arg2
56 %B = select i1 %A, i8 %val1, i8 %val2
60 define i1 @icmp_ne_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
62 %A = icmp ne i8 %arg1, %arg2
66 define i8 @icmp_ne_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
68 %A = icmp ne i8 %arg1, 127
69 %B = select i1 %A, i8 %val1, i8 %val2
73 define i8 @icmp_ne_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
75 %A = icmp ne i8 %arg1, -128
76 %B = select i1 %A, i8 %val1, i8 %val2
80 define i8 @icmp_ne_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
82 %A = icmp ne i8 %arg1, -1
83 %B = select i1 %A, i8 %val1, i8 %val2
87 define i8 @icmp_ugt_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
89 %A = icmp ugt i8 %arg1, %arg2
90 %B = select i1 %A, i8 %val1, i8 %val2
94 define i1 @icmp_ugt_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
96 %A = icmp ugt i8 %arg1, %arg2
100 define i8 @icmp_ugt_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
102 %A = icmp ugt i8 %arg1, 126
103 %B = select i1 %A, i8 %val1, i8 %val2
107 define i8 @icmp_uge_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
109 %A = icmp uge i8 %arg1, %arg2
110 %B = select i1 %A, i8 %val1, i8 %val2
114 define i1 @icmp_uge_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
116 %A = icmp uge i8 %arg1, %arg2
120 ;; Note: icmp uge i8 %arg1, <immed> can always be transformed into
121 ;; icmp ugt i8 %arg1, <immed>-1
123 ;; Consequently, even though the patterns exist to match, it's unlikely
124 ;; they'll ever be generated.
126 define i8 @icmp_ult_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
128 %A = icmp ult i8 %arg1, %arg2
129 %B = select i1 %A, i8 %val1, i8 %val2
133 define i1 @icmp_ult_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
135 %A = icmp ult i8 %arg1, %arg2
139 define i8 @icmp_ult_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
141 %A = icmp ult i8 %arg1, 253
142 %B = select i1 %A, i8 %val1, i8 %val2
146 define i8 @icmp_ult_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
148 %A = icmp ult i8 %arg1, 129
149 %B = select i1 %A, i8 %val1, i8 %val2
153 define i8 @icmp_ule_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
155 %A = icmp ule i8 %arg1, %arg2
156 %B = select i1 %A, i8 %val1, i8 %val2
160 define i1 @icmp_ule_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
162 %A = icmp ule i8 %arg1, %arg2
166 ;; Note: icmp ule i8 %arg1, <immed> can always be transformed into
167 ;; icmp ult i8 %arg1, <immed>+1
169 ;; Consequently, even though the patterns exist to match, it's unlikely
170 ;; they'll ever be generated.
172 define i8 @icmp_sgt_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
174 %A = icmp sgt i8 %arg1, %arg2
175 %B = select i1 %A, i8 %val1, i8 %val2
179 define i1 @icmp_sgt_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
181 %A = icmp sgt i8 %arg1, %arg2
185 define i8 @icmp_sgt_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
187 %A = icmp sgt i8 %arg1, 127
188 %B = select i1 %A, i8 %val1, i8 %val2
192 define i8 @icmp_sgt_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
194 %A = icmp sgt i8 %arg1, -1
195 %B = select i1 %A, i8 %val1, i8 %val2
199 define i8 @icmp_sgt_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
201 %A = icmp sgt i8 %arg1, -128
202 %B = select i1 %A, i8 %val1, i8 %val2
206 define i8 @icmp_sge_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
208 %A = icmp sge i8 %arg1, %arg2
209 %B = select i1 %A, i8 %val1, i8 %val2
213 define i1 @icmp_sge_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
215 %A = icmp sge i8 %arg1, %arg2
219 ;; Note: icmp sge i8 %arg1, <immed> can always be transformed into
220 ;; icmp sgt i8 %arg1, <immed>-1
222 ;; Consequently, even though the patterns exist to match, it's unlikely
223 ;; they'll ever be generated.
225 define i8 @icmp_slt_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
227 %A = icmp slt i8 %arg1, %arg2
228 %B = select i1 %A, i8 %val1, i8 %val2
232 define i1 @icmp_slt_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
234 %A = icmp slt i8 %arg1, %arg2
238 define i8 @icmp_slt_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
240 %A = icmp slt i8 %arg1, 127
241 %B = select i1 %A, i8 %val1, i8 %val2
245 define i8 @icmp_slt_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
247 %A = icmp slt i8 %arg1, -128
248 %B = select i1 %A, i8 %val1, i8 %val2
252 define i8 @icmp_slt_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
254 %A = icmp slt i8 %arg1, -1
255 %B = select i1 %A, i8 %val1, i8 %val2
259 define i8 @icmp_sle_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
261 %A = icmp sle i8 %arg1, %arg2
262 %B = select i1 %A, i8 %val1, i8 %val2
266 define i1 @icmp_sle_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
268 %A = icmp sle i8 %arg1, %arg2
272 ;; Note: icmp sle i8 %arg1, <immed> can always be transformed into
273 ;; icmp slt i8 %arg1, <immed>+1
275 ;; Consequently, even though the patterns exist to match, it's unlikely
276 ;; they'll ever be generated.