Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(101)

Side by Side Diff: tests_lit/llvm2ice_tests/fp.cmp.ll

Issue 1356763004: Subzero. ARM32 Fcmp lowering. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Adds lit tests. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 ; This tries to be a comprehensive test of f32 and f64 compare operations. 1 ; This tries to be a comprehensive test of f32 and f64 compare operations.
2 ; The CHECK lines are only checking for basic instruction patterns 2 ; The CHECK lines are only checking for basic instruction patterns
3 ; that should be present regardless of the optimization level, so 3 ; that should be present regardless of the optimization level, so
4 ; there are no special OPTM1 match lines. 4 ; there are no special OPTM1 match lines.
5 5
6 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 | FileCheck %s 6 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 | FileCheck %s
7 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 | FileCheck %s 7 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 | FileCheck %s
8 8
9 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \
10 ; RUN: --target arm32 -i %s --args -O2 --skip-unimplemented \
11 ; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \
12 ; RUN: --check-prefix=ARM32
13
14 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \
15 ; RUN: --target arm32 -i %s --args -Om1 --skip-unimplemented \
16 ; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \
17 ; RUN: --check-prefix=ARM32
18
9 define internal void @fcmpEq(float %a, float %b, double %c, double %d) { 19 define internal void @fcmpEq(float %a, float %b, double %c, double %d) {
10 entry: 20 entry:
11 %cmp = fcmp oeq float %a, %b 21 %cmp = fcmp oeq float %a, %b
12 br i1 %cmp, label %if.then, label %if.end 22 br i1 %cmp, label %if.then, label %if.end
13 23
14 if.then: ; preds = %entry 24 if.then: ; preds = %entry
15 call void @func() 25 call void @func()
16 br label %if.end 26 br label %if.end
17 27
18 if.end: ; preds = %if.then, %entry 28 if.end: ; preds = %if.then, %entry
19 %cmp1 = fcmp oeq double %c, %d 29 %cmp1 = fcmp oeq double %c, %d
20 br i1 %cmp1, label %if.then2, label %if.end3 30 br i1 %cmp1, label %if.then2, label %if.end3
21 31
22 if.then2: ; preds = %if.end 32 if.then2: ; preds = %if.end
23 call void @func() 33 call void @func()
24 br label %if.end3 34 br label %if.end3
25 35
26 if.end3: ; preds = %if.then2, %if.end 36 if.end3: ; preds = %if.then2, %if.end
27 ret void 37 ret void
28 } 38 }
29 ; CHECK-LABEL: fcmpEq 39 ; CHECK-LABEL: fcmpEq
30 ; CHECK: ucomiss 40 ; CHECK: ucomiss
31 ; CHECK: jne 41 ; CHECK: jne
32 ; CHECK-NEXT: jp 42 ; CHECK-NEXT: jp
33 ; CHECK: call {{.*}} R_{{.*}} func 43 ; CHECK: call {{.*}} R_{{.*}} func
34 ; CHECK: ucomisd 44 ; CHECK: ucomisd
35 ; CHECK: jne 45 ; CHECK: jne
36 ; CHECK-NEXT: jp 46 ; CHECK-NEXT: jp
37 ; CHECK: call {{.*}} R_{{.*}} func 47 ; CHECK: call {{.*}} R_{{.*}} func
48 ; ARM32-LABEL: fcmpEq
49 ; ARM32: vcmp.f32
50 ; ARM32: mov [[R:r[0-9]+]], #0
51 ; ARM32: vmrs
52 ; ARM32: moveq [[R]], #1
53 ; ARM32: vcmp.f64
54 ; ARM32: mov [[R:r[0-9]+]], #0
Jim Stichnoth 2015/09/18 19:28:55 Here and below, it might be clearer style not to r
John 2015/09/18 22:55:53 Done.
55 ; ARM32: vmrs
56 ; ARM32: moveq [[R]], #1
38 57
39 declare void @func() 58 declare void @func()
40 59
41 define internal void @fcmpNe(float %a, float %b, double %c, double %d) { 60 define internal void @fcmpNe(float %a, float %b, double %c, double %d) {
42 entry: 61 entry:
43 %cmp = fcmp une float %a, %b 62 %cmp = fcmp une float %a, %b
44 br i1 %cmp, label %if.then, label %if.end 63 br i1 %cmp, label %if.then, label %if.end
45 64
46 if.then: ; preds = %entry 65 if.then: ; preds = %entry
47 call void @func() 66 call void @func()
(...skipping 12 matching lines...) Expand all
60 } 79 }
61 ; CHECK-LABEL: fcmpNe 80 ; CHECK-LABEL: fcmpNe
62 ; CHECK: ucomiss 81 ; CHECK: ucomiss
63 ; CHECK: jne 82 ; CHECK: jne
64 ; CHECK-NEXT: jp 83 ; CHECK-NEXT: jp
65 ; CHECK: call {{.*}} R_{{.*}} func 84 ; CHECK: call {{.*}} R_{{.*}} func
66 ; CHECK: ucomisd 85 ; CHECK: ucomisd
67 ; CHECK: jne 86 ; CHECK: jne
68 ; CHECK-NEXT: jp 87 ; CHECK-NEXT: jp
69 ; CHECK: call {{.*}} R_{{.*}} func 88 ; CHECK: call {{.*}} R_{{.*}} func
89 ; ARM32-LABEL: fcmpNe
90 ; ARM32: vcmp.f32
91 ; ARM32: mov [[R:r[0-9]+]], #0
92 ; ARM32: vmrs
93 ; ARM32: movne [[R]], #1
94 ; ARM32: vcmp.f64
95 ; ARM32: mov [[R:r[0-9]+]], #0
96 ; ARM32: vmrs
97 ; ARM32: movne [[R]], #1
70 98
71 define internal void @fcmpGt(float %a, float %b, double %c, double %d) { 99 define internal void @fcmpGt(float %a, float %b, double %c, double %d) {
72 entry: 100 entry:
73 %cmp = fcmp ogt float %a, %b 101 %cmp = fcmp ogt float %a, %b
74 br i1 %cmp, label %if.then, label %if.end 102 br i1 %cmp, label %if.then, label %if.end
75 103
76 if.then: ; preds = %entry 104 if.then: ; preds = %entry
77 call void @func() 105 call void @func()
78 br label %if.end 106 br label %if.end
79 107
80 if.end: ; preds = %if.then, %entry 108 if.end: ; preds = %if.then, %entry
81 %cmp1 = fcmp ogt double %c, %d 109 %cmp1 = fcmp ogt double %c, %d
82 br i1 %cmp1, label %if.then2, label %if.end3 110 br i1 %cmp1, label %if.then2, label %if.end3
83 111
84 if.then2: ; preds = %if.end 112 if.then2: ; preds = %if.end
85 call void @func() 113 call void @func()
86 br label %if.end3 114 br label %if.end3
87 115
88 if.end3: ; preds = %if.then2, %if.end 116 if.end3: ; preds = %if.then2, %if.end
89 ret void 117 ret void
90 } 118 }
91 ; CHECK-LABEL: fcmpGt 119 ; CHECK-LABEL: fcmpGt
92 ; CHECK: ucomiss 120 ; CHECK: ucomiss
93 ; CHECK: seta 121 ; CHECK: seta
94 ; CHECK: call {{.*}} R_{{.*}} func 122 ; CHECK: call {{.*}} R_{{.*}} func
95 ; CHECK: ucomisd 123 ; CHECK: ucomisd
96 ; CHECK: seta 124 ; CHECK: seta
97 ; CHECK: call {{.*}} R_{{.*}} func 125 ; CHECK: call {{.*}} R_{{.*}} func
126 ; ARM32-LABEL: fcmpGt
127 ; ARM32: vcmp.f32
128 ; ARM32: mov [[R:r[0-9]+]], #0
129 ; ARM32: vmrs
130 ; ARM32: movgt [[R]], #1
131 ; ARM32: vcmp.f64
132 ; ARM32: mov [[R:r[0-9]+]], #0
133 ; ARM32: vmrs
134 ; ARM32: movgt [[R]], #1
98 135
99 define internal void @fcmpGe(float %a, float %b, double %c, double %d) { 136 define internal void @fcmpGe(float %a, float %b, double %c, double %d) {
100 entry: 137 entry:
101 %cmp = fcmp ult float %a, %b 138 %cmp = fcmp ult float %a, %b
102 br i1 %cmp, label %if.end, label %if.then 139 br i1 %cmp, label %if.end, label %if.then
103 140
104 if.then: ; preds = %entry 141 if.then: ; preds = %entry
105 call void @func() 142 call void @func()
106 br label %if.end 143 br label %if.end
107 144
108 if.end: ; preds = %entry, %if.then 145 if.end: ; preds = %entry, %if.then
109 %cmp1 = fcmp ult double %c, %d 146 %cmp1 = fcmp ult double %c, %d
110 br i1 %cmp1, label %if.end3, label %if.then2 147 br i1 %cmp1, label %if.end3, label %if.then2
111 148
112 if.then2: ; preds = %if.end 149 if.then2: ; preds = %if.end
113 call void @func() 150 call void @func()
114 br label %if.end3 151 br label %if.end3
115 152
116 if.end3: ; preds = %if.end, %if.then2 153 if.end3: ; preds = %if.end, %if.then2
117 ret void 154 ret void
118 } 155 }
119 ; CHECK-LABEL: fcmpGe 156 ; CHECK-LABEL: fcmpGe
120 ; CHECK: ucomiss 157 ; CHECK: ucomiss
121 ; CHECK: setb 158 ; CHECK: setb
122 ; CHECK: call {{.*}} R_{{.*}} func 159 ; CHECK: call {{.*}} R_{{.*}} func
123 ; CHECK: ucomisd 160 ; CHECK: ucomisd
124 ; CHECK: setb 161 ; CHECK: setb
125 ; CHECK: call {{.*}} R_{{.*}} func 162 ; CHECK: call {{.*}} R_{{.*}} func
163 ; ARM32-LABEL: fcmpGe
164 ; ARM32: vcmp.f32
165 ; ARM32: mov [[R:r[0-9]+]], #0
166 ; ARM32: vmrs
167 ; ARM32: movlt [[R]], #1
168 ; ARM32: vcmp.f64
169 ; ARM32: mov [[R:r[0-9]+]], #0
170 ; ARM32: vmrs
171 ; ARM32: movlt [[R]], #1
126 172
127 define internal void @fcmpLt(float %a, float %b, double %c, double %d) { 173 define internal void @fcmpLt(float %a, float %b, double %c, double %d) {
128 entry: 174 entry:
129 %cmp = fcmp olt float %a, %b 175 %cmp = fcmp olt float %a, %b
130 br i1 %cmp, label %if.then, label %if.end 176 br i1 %cmp, label %if.then, label %if.end
131 177
132 if.then: ; preds = %entry 178 if.then: ; preds = %entry
133 call void @func() 179 call void @func()
134 br label %if.end 180 br label %if.end
135 181
136 if.end: ; preds = %if.then, %entry 182 if.end: ; preds = %if.then, %entry
137 %cmp1 = fcmp olt double %c, %d 183 %cmp1 = fcmp olt double %c, %d
138 br i1 %cmp1, label %if.then2, label %if.end3 184 br i1 %cmp1, label %if.then2, label %if.end3
139 185
140 if.then2: ; preds = %if.end 186 if.then2: ; preds = %if.end
141 call void @func() 187 call void @func()
142 br label %if.end3 188 br label %if.end3
143 189
144 if.end3: ; preds = %if.then2, %if.end 190 if.end3: ; preds = %if.then2, %if.end
145 ret void 191 ret void
146 } 192 }
147 ; CHECK-LABEL: fcmpLt 193 ; CHECK-LABEL: fcmpLt
148 ; CHECK: ucomiss 194 ; CHECK: ucomiss
149 ; CHECK: seta 195 ; CHECK: seta
150 ; CHECK: call {{.*}} R_{{.*}} func 196 ; CHECK: call {{.*}} R_{{.*}} func
151 ; CHECK: ucomisd 197 ; CHECK: ucomisd
152 ; CHECK: seta 198 ; CHECK: seta
153 ; CHECK: call {{.*}} R_{{.*}} func 199 ; CHECK: call {{.*}} R_{{.*}} func
200 ; ARM32-LABEL: fcmpLt
201 ; ARM32: vcmp.f32
202 ; ARM32: mov [[R:r[0-9]+]], #0
203 ; ARM32: vmrs
204 ; ARM32: movmi [[R]], #1
205 ; ARM32: vcmp.f64
206 ; ARM32: mov [[R:r[0-9]+]], #0
207 ; ARM32: vmrs
208 ; ARM32: movmi [[R]], #1
154 209
155 define internal void @fcmpLe(float %a, float %b, double %c, double %d) { 210 define internal void @fcmpLe(float %a, float %b, double %c, double %d) {
156 entry: 211 entry:
157 %cmp = fcmp ugt float %a, %b 212 %cmp = fcmp ugt float %a, %b
158 br i1 %cmp, label %if.end, label %if.then 213 br i1 %cmp, label %if.end, label %if.then
159 214
160 if.then: ; preds = %entry 215 if.then: ; preds = %entry
161 call void @func() 216 call void @func()
162 br label %if.end 217 br label %if.end
163 218
164 if.end: ; preds = %entry, %if.then 219 if.end: ; preds = %entry, %if.then
165 %cmp1 = fcmp ugt double %c, %d 220 %cmp1 = fcmp ugt double %c, %d
166 br i1 %cmp1, label %if.end3, label %if.then2 221 br i1 %cmp1, label %if.end3, label %if.then2
167 222
168 if.then2: ; preds = %if.end 223 if.then2: ; preds = %if.end
169 call void @func() 224 call void @func()
170 br label %if.end3 225 br label %if.end3
171 226
172 if.end3: ; preds = %if.end, %if.then2 227 if.end3: ; preds = %if.end, %if.then2
173 ret void 228 ret void
174 } 229 }
175 ; CHECK-LABEL: fcmpLe 230 ; CHECK-LABEL: fcmpLe
176 ; CHECK: ucomiss 231 ; CHECK: ucomiss
177 ; CHECK: setb 232 ; CHECK: setb
178 ; CHECK: call {{.*}} R_{{.*}} func 233 ; CHECK: call {{.*}} R_{{.*}} func
179 ; CHECK: ucomisd 234 ; CHECK: ucomisd
180 ; CHECK: setb 235 ; CHECK: setb
181 ; CHECK: call {{.*}} R_{{.*}} func 236 ; CHECK: call {{.*}} R_{{.*}} func
237 ; ARM32-LABEL: fcmpLe
238 ; ARM32: vcmp.f32
239 ; ARM32: mov [[R:r[0-9]+]], #0
240 ; ARM32: vmrs
241 ; ARM32: movhi [[R]], #1
242 ; ARM32: vcmp.f64
243 ; ARM32: mov [[R:r[0-9]+]], #0
244 ; ARM32: vmrs
245 ; ARM32: movhi [[R]], #1
182 246
183 define internal i32 @fcmpFalseFloat(float %a, float %b) { 247 define internal i32 @fcmpFalseFloat(float %a, float %b) {
184 entry: 248 entry:
185 %cmp = fcmp false float %a, %b 249 %cmp = fcmp false float %a, %b
186 %cmp.ret_ext = zext i1 %cmp to i32 250 %cmp.ret_ext = zext i1 %cmp to i32
187 ret i32 %cmp.ret_ext 251 ret i32 %cmp.ret_ext
188 } 252 }
189 ; CHECK-LABEL: fcmpFalseFloat 253 ; CHECK-LABEL: fcmpFalseFloat
190 ; CHECK: mov {{.*}},0x0 254 ; CHECK: mov {{.*}},0x0
255 ; ARM32-LABEL: fcmpFalseFloat
256 ; ARM32: vcmp.f32
257 ; ARM32: mov [[R:r[0-9]+]], #0
191 258
192 define internal i32 @fcmpFalseDouble(double %a, double %b) { 259 define internal i32 @fcmpFalseDouble(double %a, double %b) {
193 entry: 260 entry:
194 %cmp = fcmp false double %a, %b 261 %cmp = fcmp false double %a, %b
195 %cmp.ret_ext = zext i1 %cmp to i32 262 %cmp.ret_ext = zext i1 %cmp to i32
196 ret i32 %cmp.ret_ext 263 ret i32 %cmp.ret_ext
197 } 264 }
198 ; CHECK-LABEL: fcmpFalseDouble 265 ; CHECK-LABEL: fcmpFalseDouble
199 ; CHECK: mov {{.*}},0x0 266 ; CHECK: mov {{.*}},0x0
267 ; ARM32-LABEL: fcmpFalseDouble
268 ; ARM32: vcmp.f64
269 ; ARM32: mov [[R:r[0-9]+]], #0
200 270
201 define internal i32 @fcmpOeqFloat(float %a, float %b) { 271 define internal i32 @fcmpOeqFloat(float %a, float %b) {
202 entry: 272 entry:
203 %cmp = fcmp oeq float %a, %b 273 %cmp = fcmp oeq float %a, %b
204 %cmp.ret_ext = zext i1 %cmp to i32 274 %cmp.ret_ext = zext i1 %cmp to i32
205 ret i32 %cmp.ret_ext 275 ret i32 %cmp.ret_ext
206 } 276 }
207 ; CHECK-LABEL: fcmpOeqFloat 277 ; CHECK-LABEL: fcmpOeqFloat
208 ; CHECK: ucomiss 278 ; CHECK: ucomiss
209 ; CHECK: jne 279 ; CHECK: jne
210 ; CHECK: jp 280 ; CHECK: jp
281 ; ARM32-LABEL: fcmpOeqFloat
282 ; ARM32: vcmp.f32
283 ; ARM32: mov [[R:r[0-9]+]], #0
284 ; ARM32: vmrs
285 ; ARM32: moveq [[R]], #1
211 286
212 define internal i32 @fcmpOeqDouble(double %a, double %b) { 287 define internal i32 @fcmpOeqDouble(double %a, double %b) {
213 entry: 288 entry:
214 %cmp = fcmp oeq double %a, %b 289 %cmp = fcmp oeq double %a, %b
215 %cmp.ret_ext = zext i1 %cmp to i32 290 %cmp.ret_ext = zext i1 %cmp to i32
216 ret i32 %cmp.ret_ext 291 ret i32 %cmp.ret_ext
217 } 292 }
218 ; CHECK-LABEL: fcmpOeqDouble 293 ; CHECK-LABEL: fcmpOeqDouble
219 ; CHECK: ucomisd 294 ; CHECK: ucomisd
220 ; CHECK: jne 295 ; CHECK: jne
221 ; CHECK: jp 296 ; CHECK: jp
297 ; ARM32-LABEL: fcmpOeqDouble
298 ; ARM32: vcmp.f64
299 ; ARM32: mov [[R:r[0-9]+]], #0
300 ; ARM32: vmrs
301 ; ARM32: moveq [[R]], #1
222 302
223 define internal i32 @fcmpOgtFloat(float %a, float %b) { 303 define internal i32 @fcmpOgtFloat(float %a, float %b) {
224 entry: 304 entry:
225 %cmp = fcmp ogt float %a, %b 305 %cmp = fcmp ogt float %a, %b
226 %cmp.ret_ext = zext i1 %cmp to i32 306 %cmp.ret_ext = zext i1 %cmp to i32
227 ret i32 %cmp.ret_ext 307 ret i32 %cmp.ret_ext
228 } 308 }
229 ; CHECK-LABEL: fcmpOgtFloat 309 ; CHECK-LABEL: fcmpOgtFloat
230 ; CHECK: ucomiss 310 ; CHECK: ucomiss
231 ; CHECK: seta 311 ; CHECK: seta
312 ; ARM32-LABEL: fcmpOgtFloat
313 ; ARM32: vcmp.f32
314 ; ARM32: mov [[R:r[0-9]+]], #0
315 ; ARM32: vmrs
316 ; ARM32: movgt [[R]], #1
232 317
233 define internal i32 @fcmpOgtDouble(double %a, double %b) { 318 define internal i32 @fcmpOgtDouble(double %a, double %b) {
234 entry: 319 entry:
235 %cmp = fcmp ogt double %a, %b 320 %cmp = fcmp ogt double %a, %b
236 %cmp.ret_ext = zext i1 %cmp to i32 321 %cmp.ret_ext = zext i1 %cmp to i32
237 ret i32 %cmp.ret_ext 322 ret i32 %cmp.ret_ext
238 } 323 }
239 ; CHECK-LABEL: fcmpOgtDouble 324 ; CHECK-LABEL: fcmpOgtDouble
240 ; CHECK: ucomisd 325 ; CHECK: ucomisd
241 ; CHECK: seta 326 ; CHECK: seta
327 ; ARM32-LABEL: fcmpOgtDouble
328 ; ARM32: vcmp.f64
329 ; ARM32: mov [[R:r[0-9]+]], #0
330 ; ARM32: vmrs
331 ; ARM32: movgt [[R]], #1
242 332
243 define internal i32 @fcmpOgeFloat(float %a, float %b) { 333 define internal i32 @fcmpOgeFloat(float %a, float %b) {
244 entry: 334 entry:
245 %cmp = fcmp oge float %a, %b 335 %cmp = fcmp oge float %a, %b
246 %cmp.ret_ext = zext i1 %cmp to i32 336 %cmp.ret_ext = zext i1 %cmp to i32
247 ret i32 %cmp.ret_ext 337 ret i32 %cmp.ret_ext
248 } 338 }
249 ; CHECK-LABEL: fcmpOgeFloat 339 ; CHECK-LABEL: fcmpOgeFloat
250 ; CHECK: ucomiss 340 ; CHECK: ucomiss
251 ; CHECK: setae 341 ; CHECK: setae
342 ; ARM32-LABEL: fcmpOgeFloat
343 ; ARM32: vcmp.f32
344 ; ARM32: mov [[R:r[0-9]+]], #0
345 ; ARM32: vmrs
346 ; ARM32: movge [[R]], #1
252 347
253 define internal i32 @fcmpOgeDouble(double %a, double %b) { 348 define internal i32 @fcmpOgeDouble(double %a, double %b) {
254 entry: 349 entry:
255 %cmp = fcmp oge double %a, %b 350 %cmp = fcmp oge double %a, %b
256 %cmp.ret_ext = zext i1 %cmp to i32 351 %cmp.ret_ext = zext i1 %cmp to i32
257 ret i32 %cmp.ret_ext 352 ret i32 %cmp.ret_ext
258 } 353 }
259 ; CHECK-LABEL: fcmpOgeDouble 354 ; CHECK-LABEL: fcmpOgeDouble
260 ; CHECK: ucomisd 355 ; CHECK: ucomisd
261 ; CHECK: setae 356 ; CHECK: setae
357 ; ARM32-LABEL: fcmpOgeDouble
358 ; ARM32: vcmp.f64
359 ; ARM32: mov [[R:r[0-9]+]], #0
360 ; ARM32: vmrs
361 ; ARM32: movge [[R]], #1
262 362
263 define internal i32 @fcmpOltFloat(float %a, float %b) { 363 define internal i32 @fcmpOltFloat(float %a, float %b) {
264 entry: 364 entry:
265 %cmp = fcmp olt float %a, %b 365 %cmp = fcmp olt float %a, %b
266 %cmp.ret_ext = zext i1 %cmp to i32 366 %cmp.ret_ext = zext i1 %cmp to i32
267 ret i32 %cmp.ret_ext 367 ret i32 %cmp.ret_ext
268 } 368 }
269 ; CHECK-LABEL: fcmpOltFloat 369 ; CHECK-LABEL: fcmpOltFloat
270 ; CHECK: ucomiss 370 ; CHECK: ucomiss
271 ; CHECK: seta 371 ; CHECK: seta
372 ; ARM32-LABEL: fcmpOltFloat
373 ; ARM32: vcmp.f32
374 ; ARM32: mov [[R:r[0-9]+]], #0
375 ; ARM32: vmrs
376 ; ARM32: movmi [[R]], #1
272 377
273 define internal i32 @fcmpOltDouble(double %a, double %b) { 378 define internal i32 @fcmpOltDouble(double %a, double %b) {
274 entry: 379 entry:
275 %cmp = fcmp olt double %a, %b 380 %cmp = fcmp olt double %a, %b
276 %cmp.ret_ext = zext i1 %cmp to i32 381 %cmp.ret_ext = zext i1 %cmp to i32
277 ret i32 %cmp.ret_ext 382 ret i32 %cmp.ret_ext
278 } 383 }
279 ; CHECK-LABEL: fcmpOltDouble 384 ; CHECK-LABEL: fcmpOltDouble
280 ; CHECK: ucomisd 385 ; CHECK: ucomisd
281 ; CHECK: seta 386 ; CHECK: seta
387 ; ARM32-LABEL: fcmpOltDouble
388 ; ARM32: vcmp.f64
389 ; ARM32: mov [[R:r[0-9]+]], #0
390 ; ARM32: vmrs
391 ; ARM32: movmi [[R]], #1
282 392
283 define internal i32 @fcmpOleFloat(float %a, float %b) { 393 define internal i32 @fcmpOleFloat(float %a, float %b) {
284 entry: 394 entry:
285 %cmp = fcmp ole float %a, %b 395 %cmp = fcmp ole float %a, %b
286 %cmp.ret_ext = zext i1 %cmp to i32 396 %cmp.ret_ext = zext i1 %cmp to i32
287 ret i32 %cmp.ret_ext 397 ret i32 %cmp.ret_ext
288 } 398 }
289 ; CHECK-LABEL: fcmpOleFloat 399 ; CHECK-LABEL: fcmpOleFloat
290 ; CHECK: ucomiss 400 ; CHECK: ucomiss
291 ; CHECK: setae 401 ; CHECK: setae
402 ; ARM32-LABEL: fcmpOleFloat
403 ; ARM32: vcmp.f32
404 ; ARM32: mov [[R:r[0-9]+]], #0
405 ; ARM32: vmrs
406 ; ARM32: movls [[R]], #1
292 407
293 define internal i32 @fcmpOleDouble(double %a, double %b) { 408 define internal i32 @fcmpOleDouble(double %a, double %b) {
294 entry: 409 entry:
295 %cmp = fcmp ole double %a, %b 410 %cmp = fcmp ole double %a, %b
296 %cmp.ret_ext = zext i1 %cmp to i32 411 %cmp.ret_ext = zext i1 %cmp to i32
297 ret i32 %cmp.ret_ext 412 ret i32 %cmp.ret_ext
298 } 413 }
299 ; CHECK-LABEL: fcmpOleDouble 414 ; CHECK-LABEL: fcmpOleDouble
300 ; CHECK: ucomisd 415 ; CHECK: ucomisd
301 ; CHECK: setae 416 ; CHECK: setae
417 ; ARM32-LABEL: fcmpOleDouble
418 ; ARM32: vcmp.f64
419 ; ARM32: mov [[R:r[0-9]+]], #0
420 ; ARM32: vmrs
421 ; ARM32: movls [[R]], #1
302 422
303 define internal i32 @fcmpOneFloat(float %a, float %b) { 423 define internal i32 @fcmpOneFloat(float %a, float %b) {
304 entry: 424 entry:
305 %cmp = fcmp one float %a, %b 425 %cmp = fcmp one float %a, %b
306 %cmp.ret_ext = zext i1 %cmp to i32 426 %cmp.ret_ext = zext i1 %cmp to i32
307 ret i32 %cmp.ret_ext 427 ret i32 %cmp.ret_ext
308 } 428 }
309 ; CHECK-LABEL: fcmpOneFloat 429 ; CHECK-LABEL: fcmpOneFloat
310 ; CHECK: ucomiss 430 ; CHECK: ucomiss
311 ; CHECK: setne 431 ; CHECK: setne
432 ; ARM32-LABEL: fcmpOneFloat
433 ; ARM32: vcmp.f32
434 ; ARM32: mov [[R:r[0-9]+]], #0
435 ; ARM32: vmrs
436 ; ARM32: movmi [[R]], #1
437 ; ARM32: movgt [[R]], #1
312 438
313 define internal i32 @fcmpOneDouble(double %a, double %b) { 439 define internal i32 @fcmpOneDouble(double %a, double %b) {
314 entry: 440 entry:
315 %cmp = fcmp one double %a, %b 441 %cmp = fcmp one double %a, %b
316 %cmp.ret_ext = zext i1 %cmp to i32 442 %cmp.ret_ext = zext i1 %cmp to i32
317 ret i32 %cmp.ret_ext 443 ret i32 %cmp.ret_ext
318 } 444 }
319 ; CHECK-LABEL: fcmpOneDouble 445 ; CHECK-LABEL: fcmpOneDouble
320 ; CHECK: ucomisd 446 ; CHECK: ucomisd
321 ; CHECK: setne 447 ; CHECK: setne
448 ; ARM32-LABEL: fcmpOneDouble
449 ; ARM32: vcmp.f64
450 ; ARM32: mov [[R:r[0-9]+]], #0
451 ; ARM32: vmrs
452 ; ARM32: movmi [[R]], #1
453 ; ARM32: movgt [[R]], #1
322 454
323 define internal i32 @fcmpOrdFloat(float %a, float %b) { 455 define internal i32 @fcmpOrdFloat(float %a, float %b) {
324 entry: 456 entry:
325 %cmp = fcmp ord float %a, %b 457 %cmp = fcmp ord float %a, %b
326 %cmp.ret_ext = zext i1 %cmp to i32 458 %cmp.ret_ext = zext i1 %cmp to i32
327 ret i32 %cmp.ret_ext 459 ret i32 %cmp.ret_ext
328 } 460 }
329 ; CHECK-LABEL: fcmpOrdFloat 461 ; CHECK-LABEL: fcmpOrdFloat
330 ; CHECK: ucomiss 462 ; CHECK: ucomiss
331 ; CHECK: setnp 463 ; CHECK: setnp
464 ; ARM32-LABEL: fcmpOrdFloat
465 ; ARM32: vcmp.f32
466 ; ARM32: mov [[R:r[0-9]+]], #0
467 ; ARM32: vmrs
468 ; ARM32: movvc [[R]], #1
332 469
333 define internal i32 @fcmpOrdDouble(double %a, double %b) { 470 define internal i32 @fcmpOrdDouble(double %a, double %b) {
334 entry: 471 entry:
335 %cmp = fcmp ord double %a, %b 472 %cmp = fcmp ord double %a, %b
336 %cmp.ret_ext = zext i1 %cmp to i32 473 %cmp.ret_ext = zext i1 %cmp to i32
337 ret i32 %cmp.ret_ext 474 ret i32 %cmp.ret_ext
338 } 475 }
339 ; CHECK-LABEL: fcmpOrdDouble 476 ; CHECK-LABEL: fcmpOrdDouble
340 ; CHECK: ucomisd 477 ; CHECK: ucomisd
341 ; CHECK: setnp 478 ; CHECK: setnp
479 ; ARM32-LABEL: fcmpOrdDouble
480 ; ARM32: vcmp.f64
481 ; ARM32: mov [[R:r[0-9]+]], #0
482 ; ARM32: vmrs
483 ; ARM32: movvc [[R]], #1
342 484
343 define internal i32 @fcmpUeqFloat(float %a, float %b) { 485 define internal i32 @fcmpUeqFloat(float %a, float %b) {
344 entry: 486 entry:
345 %cmp = fcmp ueq float %a, %b 487 %cmp = fcmp ueq float %a, %b
346 %cmp.ret_ext = zext i1 %cmp to i32 488 %cmp.ret_ext = zext i1 %cmp to i32
347 ret i32 %cmp.ret_ext 489 ret i32 %cmp.ret_ext
348 } 490 }
349 ; CHECK-LABEL: fcmpUeqFloat 491 ; CHECK-LABEL: fcmpUeqFloat
350 ; CHECK: ucomiss 492 ; CHECK: ucomiss
351 ; CHECK: sete 493 ; CHECK: sete
494 ; ARM32-LABEL: fcmpUeqFloat
495 ; ARM32: vcmp.f32
496 ; ARM32: mov [[R:r[0-9]+]], #0
497 ; ARM32: vmrs
498 ; ARM32: moveq [[R]], #1
499 ; ARM32: movvs [[R]], #1
352 500
353 define internal i32 @fcmpUeqDouble(double %a, double %b) { 501 define internal i32 @fcmpUeqDouble(double %a, double %b) {
354 entry: 502 entry:
355 %cmp = fcmp ueq double %a, %b 503 %cmp = fcmp ueq double %a, %b
356 %cmp.ret_ext = zext i1 %cmp to i32 504 %cmp.ret_ext = zext i1 %cmp to i32
357 ret i32 %cmp.ret_ext 505 ret i32 %cmp.ret_ext
358 } 506 }
359 ; CHECK-LABEL: fcmpUeqDouble 507 ; CHECK-LABEL: fcmpUeqDouble
360 ; CHECK: ucomisd 508 ; CHECK: ucomisd
361 ; CHECK: sete 509 ; CHECK: sete
510 ; ARM32-LABEL: fcmpUeqDouble
511 ; ARM32: vcmp.f64
512 ; ARM32: mov [[R:r[0-9]+]], #0
513 ; ARM32: vmrs
514 ; ARM32: moveq [[R]], #1
515 ; ARM32: movvs [[R]], #1
362 516
363 define internal i32 @fcmpUgtFloat(float %a, float %b) { 517 define internal i32 @fcmpUgtFloat(float %a, float %b) {
364 entry: 518 entry:
365 %cmp = fcmp ugt float %a, %b 519 %cmp = fcmp ugt float %a, %b
366 %cmp.ret_ext = zext i1 %cmp to i32 520 %cmp.ret_ext = zext i1 %cmp to i32
367 ret i32 %cmp.ret_ext 521 ret i32 %cmp.ret_ext
368 } 522 }
369 ; CHECK-LABEL: fcmpUgtFloat 523 ; CHECK-LABEL: fcmpUgtFloat
370 ; CHECK: ucomiss 524 ; CHECK: ucomiss
371 ; CHECK: setb 525 ; CHECK: setb
526 ; ARM32-LABEL: fcmpUgtFloat
527 ; ARM32: vcmp.f32
528 ; ARM32: mov [[R:r[0-9]+]], #0
529 ; ARM32: vmrs
530 ; ARM32: movhi [[R]], #1
372 531
373 define internal i32 @fcmpUgtDouble(double %a, double %b) { 532 define internal i32 @fcmpUgtDouble(double %a, double %b) {
374 entry: 533 entry:
375 %cmp = fcmp ugt double %a, %b 534 %cmp = fcmp ugt double %a, %b
376 %cmp.ret_ext = zext i1 %cmp to i32 535 %cmp.ret_ext = zext i1 %cmp to i32
377 ret i32 %cmp.ret_ext 536 ret i32 %cmp.ret_ext
378 } 537 }
379 ; CHECK-LABEL: fcmpUgtDouble 538 ; CHECK-LABEL: fcmpUgtDouble
380 ; CHECK: ucomisd 539 ; CHECK: ucomisd
381 ; CHECK: setb 540 ; CHECK: setb
541 ; ARM32-LABEL: fcmpUgtDouble
542 ; ARM32: vcmp.f64
543 ; ARM32: mov [[R:r[0-9]+]], #0
544 ; ARM32: vmrs
545 ; ARM32: movhi [[R]], #1
382 546
383 define internal i32 @fcmpUgeFloat(float %a, float %b) { 547 define internal i32 @fcmpUgeFloat(float %a, float %b) {
384 entry: 548 entry:
385 %cmp = fcmp uge float %a, %b 549 %cmp = fcmp uge float %a, %b
386 %cmp.ret_ext = zext i1 %cmp to i32 550 %cmp.ret_ext = zext i1 %cmp to i32
387 ret i32 %cmp.ret_ext 551 ret i32 %cmp.ret_ext
388 } 552 }
389 ; CHECK-LABEL: fcmpUgeFloat 553 ; CHECK-LABEL: fcmpUgeFloat
390 ; CHECK: ucomiss 554 ; CHECK: ucomiss
391 ; CHECK: setbe 555 ; CHECK: setbe
556 ; ARM32-LABEL: fcmpUgeFloat
557 ; ARM32: vcmp.f32
558 ; ARM32: mov [[R:r[0-9]+]], #0
559 ; ARM32: vmrs
560 ; ARM32: movpl [[R]], #1
392 561
393 define internal i32 @fcmpUgeDouble(double %a, double %b) { 562 define internal i32 @fcmpUgeDouble(double %a, double %b) {
394 entry: 563 entry:
395 %cmp = fcmp uge double %a, %b 564 %cmp = fcmp uge double %a, %b
396 %cmp.ret_ext = zext i1 %cmp to i32 565 %cmp.ret_ext = zext i1 %cmp to i32
397 ret i32 %cmp.ret_ext 566 ret i32 %cmp.ret_ext
398 } 567 }
399 ; CHECK-LABEL: fcmpUgeDouble 568 ; CHECK-LABEL: fcmpUgeDouble
400 ; CHECK: ucomisd 569 ; CHECK: ucomisd
401 ; CHECK: setbe 570 ; CHECK: setbe
571 ; ARM32-LABEL: fcmpUgeDouble
572 ; ARM32: vcmp.f64
573 ; ARM32: mov [[R:r[0-9]+]], #0
574 ; ARM32: vmrs
575 ; ARM32: movpl [[R]], #1
402 576
403 define internal i32 @fcmpUltFloat(float %a, float %b) { 577 define internal i32 @fcmpUltFloat(float %a, float %b) {
404 entry: 578 entry:
405 %cmp = fcmp ult float %a, %b 579 %cmp = fcmp ult float %a, %b
406 %cmp.ret_ext = zext i1 %cmp to i32 580 %cmp.ret_ext = zext i1 %cmp to i32
407 ret i32 %cmp.ret_ext 581 ret i32 %cmp.ret_ext
408 } 582 }
409 ; CHECK-LABEL: fcmpUltFloat 583 ; CHECK-LABEL: fcmpUltFloat
410 ; CHECK: ucomiss 584 ; CHECK: ucomiss
411 ; CHECK: setb 585 ; CHECK: setb
586 ; ARM32-LABEL: fcmpUltFloat
587 ; ARM32: vcmp.f32
588 ; ARM32: mov [[R:r[0-9]+]], #0
589 ; ARM32: vmrs
590 ; ARM32: movlt [[R]], #1
412 591
413 define internal i32 @fcmpUltDouble(double %a, double %b) { 592 define internal i32 @fcmpUltDouble(double %a, double %b) {
414 entry: 593 entry:
415 %cmp = fcmp ult double %a, %b 594 %cmp = fcmp ult double %a, %b
416 %cmp.ret_ext = zext i1 %cmp to i32 595 %cmp.ret_ext = zext i1 %cmp to i32
417 ret i32 %cmp.ret_ext 596 ret i32 %cmp.ret_ext
418 } 597 }
419 ; CHECK-LABEL: fcmpUltDouble 598 ; CHECK-LABEL: fcmpUltDouble
420 ; CHECK: ucomisd 599 ; CHECK: ucomisd
421 ; CHECK: setb 600 ; CHECK: setb
601 ; ARM32-LABEL: fcmpUltDouble
602 ; ARM32: vcmp.f64
603 ; ARM32: mov [[R:r[0-9]+]], #0
604 ; ARM32: vmrs
605 ; ARM32: movlt [[R]], #1
422 606
423 define internal i32 @fcmpUleFloat(float %a, float %b) { 607 define internal i32 @fcmpUleFloat(float %a, float %b) {
424 entry: 608 entry:
425 %cmp = fcmp ule float %a, %b 609 %cmp = fcmp ule float %a, %b
426 %cmp.ret_ext = zext i1 %cmp to i32 610 %cmp.ret_ext = zext i1 %cmp to i32
427 ret i32 %cmp.ret_ext 611 ret i32 %cmp.ret_ext
428 } 612 }
429 ; CHECK-LABEL: fcmpUleFloat 613 ; CHECK-LABEL: fcmpUleFloat
430 ; CHECK: ucomiss 614 ; CHECK: ucomiss
431 ; CHECK: setbe 615 ; CHECK: setbe
616 ; ARM32-LABEL: fcmpUleFloat
617 ; ARM32: vcmp.f32
618 ; ARM32: mov [[R:r[0-9]+]], #0
619 ; ARM32: vmrs
620 ; ARM32: movle [[R]], #1
432 621
433 define internal i32 @fcmpUleDouble(double %a, double %b) { 622 define internal i32 @fcmpUleDouble(double %a, double %b) {
434 entry: 623 entry:
435 %cmp = fcmp ule double %a, %b 624 %cmp = fcmp ule double %a, %b
436 %cmp.ret_ext = zext i1 %cmp to i32 625 %cmp.ret_ext = zext i1 %cmp to i32
437 ret i32 %cmp.ret_ext 626 ret i32 %cmp.ret_ext
438 } 627 }
439 ; CHECK-LABEL: fcmpUleDouble 628 ; CHECK-LABEL: fcmpUleDouble
440 ; CHECK: ucomisd 629 ; CHECK: ucomisd
441 ; CHECK: setbe 630 ; CHECK: setbe
631 ; ARM32-LABEL: fcmpUleDouble
632 ; ARM32: vcmp.f64
633 ; ARM32: mov [[R:r[0-9]+]], #0
634 ; ARM32: vmrs
635 ; ARM32: movle [[R]], #1
442 636
443 define internal i32 @fcmpUneFloat(float %a, float %b) { 637 define internal i32 @fcmpUneFloat(float %a, float %b) {
444 entry: 638 entry:
445 %cmp = fcmp une float %a, %b 639 %cmp = fcmp une float %a, %b
446 %cmp.ret_ext = zext i1 %cmp to i32 640 %cmp.ret_ext = zext i1 %cmp to i32
447 ret i32 %cmp.ret_ext 641 ret i32 %cmp.ret_ext
448 } 642 }
449 ; CHECK-LABEL: fcmpUneFloat 643 ; CHECK-LABEL: fcmpUneFloat
450 ; CHECK: ucomiss 644 ; CHECK: ucomiss
451 ; CHECK: jne 645 ; CHECK: jne
452 ; CHECK: jp 646 ; CHECK: jp
647 ; ARM32-LABEL: fcmpUneFloat
648 ; ARM32: vcmp.f32
649 ; ARM32: mov [[R:r[0-9]+]], #0
650 ; ARM32: vmrs
651 ; ARM32: movne [[R]], #1
453 652
454 define internal i32 @fcmpUneDouble(double %a, double %b) { 653 define internal i32 @fcmpUneDouble(double %a, double %b) {
455 entry: 654 entry:
456 %cmp = fcmp une double %a, %b 655 %cmp = fcmp une double %a, %b
457 %cmp.ret_ext = zext i1 %cmp to i32 656 %cmp.ret_ext = zext i1 %cmp to i32
458 ret i32 %cmp.ret_ext 657 ret i32 %cmp.ret_ext
459 } 658 }
460 ; CHECK-LABEL: fcmpUneDouble 659 ; CHECK-LABEL: fcmpUneDouble
461 ; CHECK: ucomisd 660 ; CHECK: ucomisd
462 ; CHECK: jne 661 ; CHECK: jne
463 ; CHECK: jp 662 ; CHECK: jp
663 ; ARM32-LABEL: fcmpUneDouble
664 ; ARM32: vcmp.f64
665 ; ARM32: mov [[R:r[0-9]+]], #0
666 ; ARM32: vmrs
667 ; ARM32: movne [[R]], #1
464 668
465 define internal i32 @fcmpUnoFloat(float %a, float %b) { 669 define internal i32 @fcmpUnoFloat(float %a, float %b) {
466 entry: 670 entry:
467 %cmp = fcmp uno float %a, %b 671 %cmp = fcmp uno float %a, %b
468 %cmp.ret_ext = zext i1 %cmp to i32 672 %cmp.ret_ext = zext i1 %cmp to i32
469 ret i32 %cmp.ret_ext 673 ret i32 %cmp.ret_ext
470 } 674 }
471 ; CHECK-LABEL: fcmpUnoFloat 675 ; CHECK-LABEL: fcmpUnoFloat
472 ; CHECK: ucomiss 676 ; CHECK: ucomiss
473 ; CHECK: setp 677 ; CHECK: setp
678 ; ARM32-LABEL: fcmpUnoFloat
679 ; ARM32: vcmp.f32
680 ; ARM32: mov [[R:r[0-9]+]], #0
681 ; ARM32: vmrs
682 ; ARM32: movvs [[R]], #1
474 683
475 define internal i32 @fcmpUnoDouble(double %a, double %b) { 684 define internal i32 @fcmpUnoDouble(double %a, double %b) {
476 entry: 685 entry:
477 %cmp = fcmp uno double %a, %b 686 %cmp = fcmp uno double %a, %b
478 %cmp.ret_ext = zext i1 %cmp to i32 687 %cmp.ret_ext = zext i1 %cmp to i32
479 ret i32 %cmp.ret_ext 688 ret i32 %cmp.ret_ext
480 } 689 }
481 ; CHECK-LABEL: fcmpUnoDouble 690 ; CHECK-LABEL: fcmpUnoDouble
482 ; CHECK: ucomisd 691 ; CHECK: ucomisd
483 ; CHECK: setp 692 ; CHECK: setp
693 ; ARM32-LABEL: fcmpUnoDouble
694 ; ARM32: vcmp.f64
695 ; ARM32: mov [[R:r[0-9]+]], #0
696 ; ARM32: vmrs
697 ; ARM32: movvs [[R]], #1
484 698
485 define internal i32 @fcmpTrueFloat(float %a, float %b) { 699 define internal i32 @fcmpTrueFloat(float %a, float %b) {
486 entry: 700 entry:
487 %cmp = fcmp true float %a, %b 701 %cmp = fcmp true float %a, %b
488 %cmp.ret_ext = zext i1 %cmp to i32 702 %cmp.ret_ext = zext i1 %cmp to i32
489 ret i32 %cmp.ret_ext 703 ret i32 %cmp.ret_ext
490 } 704 }
491 ; CHECK-LABEL: fcmpTrueFloat 705 ; CHECK-LABEL: fcmpTrueFloat
492 ; CHECK: mov {{.*}},0x1 706 ; CHECK: mov {{.*}},0x1
707 ; ARM32-LABEL: fcmpTrueFloat
708 ; ARM32: vcmp.f32
709 ; ARM32: mov [[R]], #1
493 710
494 define internal i32 @fcmpTrueDouble(double %a, double %b) { 711 define internal i32 @fcmpTrueDouble(double %a, double %b) {
495 entry: 712 entry:
496 %cmp = fcmp true double %a, %b 713 %cmp = fcmp true double %a, %b
497 %cmp.ret_ext = zext i1 %cmp to i32 714 %cmp.ret_ext = zext i1 %cmp to i32
498 ret i32 %cmp.ret_ext 715 ret i32 %cmp.ret_ext
499 } 716 }
500 ; CHECK-LABEL: fcmpTrueDouble 717 ; CHECK-LABEL: fcmpTrueDouble
501 ; CHECK: mov {{.*}},0x1 718 ; CHECK: mov {{.*}},0x1
719 ; ARM32-LABEL: fcmpTrueDouble
720 ; ARM32: vcmp.f64
721 ; ARM32: mov [[R]], #1
502 722
503 define internal float @selectFloatVarVar(float %a, float %b) { 723 define internal float @selectFloatVarVar(float %a, float %b) {
504 entry: 724 entry:
505 %cmp = fcmp olt float %a, %b 725 %cmp = fcmp olt float %a, %b
506 %cond = select i1 %cmp, float %a, float %b 726 %cond = select i1 %cmp, float %a, float %b
507 ret float %cond 727 ret float %cond
508 } 728 }
509 ; CHECK-LABEL: selectFloatVarVar 729 ; CHECK-LABEL: selectFloatVarVar
510 ; CHECK: ucomiss 730 ; CHECK: ucomiss
511 ; CHECK: seta 731 ; CHECK: seta
512 ; CHECK: fld 732 ; CHECK: fld
733 ; ARM32-LABEL: selectFloatVarVar
734 ; ARM32: vcmp.f32
735 ; ARM32: vmovne.f32 [[SREG:s[0-9]+]]
Jim Stichnoth 2015/09/18 19:28:55 Here and below, don't define the SREG/DREG tag sin
John 2015/09/18 22:55:53 Done.
736 ; ARM32: bx
513 737
514 define internal double @selectDoubleVarVar(double %a, double %b) { 738 define internal double @selectDoubleVarVar(double %a, double %b) {
515 entry: 739 entry:
516 %cmp = fcmp olt double %a, %b 740 %cmp = fcmp olt double %a, %b
517 %cond = select i1 %cmp, double %a, double %b 741 %cond = select i1 %cmp, double %a, double %b
518 ret double %cond 742 ret double %cond
519 } 743 }
520 ; CHECK-LABEL: selectDoubleVarVar 744 ; CHECK-LABEL: selectDoubleVarVar
521 ; CHECK: ucomisd 745 ; CHECK: ucomisd
522 ; CHECK: seta 746 ; CHECK: seta
523 ; CHECK: fld 747 ; CHECK: fld
748 ; ARM32-LABEL: selectDoubleVarVar
749 ; ARM32: vcmp.f64
750 ; ARM32: vmovne.f64 [[DREG:d[0-9]+]]
751 ; ARM32: bx
OLDNEW
« src/IceTargetLoweringARM32.def ('K') | « src/IceTargetLoweringARM32.def ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698