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

Side by Side Diff: tests_lit/llvm2ice_tests/64bit.pnacl.ll

Issue 547033002: Subzero: Be more strict about i1 calculations. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Make OPTM1 change similar to CHECK change Created 6 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
« no previous file with comments | « src/IceTargetLoweringX8632.cpp ('k') | tests_lit/llvm2ice_tests/sext_zext_i1.ll » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 ; This tries to be a comprehensive test of i64 operations, in 1 ; This tries to be a comprehensive test of i64 operations, in
2 ; particular the patterns for lowering i64 operations into constituent 2 ; particular the patterns for lowering i64 operations into constituent
3 ; i32 operations on x86-32. 3 ; i32 operations on x86-32.
4 4
5 ; TODO(jvoung): fix extra "CALLTARGETS" run. The llvm-objdump symbolizer 5 ; TODO(jvoung): fix extra "CALLTARGETS" run. The llvm-objdump symbolizer
6 ; doesn't know how to symbolize non-section-local functions. 6 ; doesn't know how to symbolize non-section-local functions.
7 ; The newer LLVM 3.6 one does work, but watch out for other bugs. 7 ; The newer LLVM 3.6 one does work, but watch out for other bugs.
8 8
9 ; RUN: %llvm2ice -O2 --verbose none %s \ 9 ; RUN: %llvm2ice -O2 --verbose none %s \
10 ; RUN: | FileCheck --check-prefix=CALLTARGETS %s 10 ; RUN: | FileCheck --check-prefix=CALLTARGETS %s
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 ; OPTM1-NEXT: mov dword ptr [esp + 12], 305419896 120 ; OPTM1-NEXT: mov dword ptr [esp + 12], 305419896
121 ; OPTM1-NEXT: call -4 121 ; OPTM1-NEXT: call -4
122 122
123 define internal i64 @return64BitArg(i64 %a) { 123 define internal i64 @return64BitArg(i64 %a) {
124 entry: 124 entry:
125 ret i64 %a 125 ret i64 %a
126 } 126 }
127 ; CHECK-LABEL: return64BitArg 127 ; CHECK-LABEL: return64BitArg
128 ; CHECK: mov {{.*}}, dword ptr [esp + 4] 128 ; CHECK: mov {{.*}}, dword ptr [esp + 4]
129 ; CHECK: mov {{.*}}, dword ptr [esp + 8] 129 ; CHECK: mov {{.*}}, dword ptr [esp + 8]
130 ; CHECK: ret
131 ; 130 ;
132 ; OPTM1-LABEL: return64BitArg 131 ; OPTM1-LABEL: return64BitArg
133 ; OPTM1: mov {{.*}}, dword ptr [esp + 4] 132 ; OPTM1: mov {{.*}}, dword ptr [esp + 4]
134 ; OPTM1: mov {{.*}}, dword ptr [esp + 8] 133 ; OPTM1: mov {{.*}}, dword ptr [esp + 8]
135 ; OPTM1: ret
136 134
137 define internal i64 @return64BitConst() { 135 define internal i64 @return64BitConst() {
138 entry: 136 entry:
139 ret i64 -2401053092306725256 137 ret i64 -2401053092306725256
140 } 138 }
141 ; CHECK-LABEL: return64BitConst 139 ; CHECK-LABEL: return64BitConst
142 ; CHECK: mov eax, 305419896 140 ; CHECK: mov eax, 305419896
143 ; CHECK: mov edx, 3735928559 141 ; CHECK: mov edx, 3735928559
144 ; CHECK: ret
145 ; 142 ;
146 ; OPTM1-LABEL: return64BitConst 143 ; OPTM1-LABEL: return64BitConst
147 ; OPTM1: mov eax, 305419896 144 ; OPTM1: mov eax, 305419896
148 ; OPTM1: mov edx, 3735928559 145 ; OPTM1: mov edx, 3735928559
149 ; OPTM1: ret
150 146
151 define internal i64 @add64BitSigned(i64 %a, i64 %b) { 147 define internal i64 @add64BitSigned(i64 %a, i64 %b) {
152 entry: 148 entry:
153 %add = add i64 %b, %a 149 %add = add i64 %b, %a
154 ret i64 %add 150 ret i64 %add
155 } 151 }
156 ; CHECK-LABEL: add64BitSigned 152 ; CHECK-LABEL: add64BitSigned
157 ; CHECK: add 153 ; CHECK: add
158 ; CHECK: adc 154 ; CHECK: adc
159 ; CHECK: ret
160 ; 155 ;
161 ; OPTM1-LABEL: add64BitSigned 156 ; OPTM1-LABEL: add64BitSigned
162 ; OPTM1: add 157 ; OPTM1: add
163 ; OPTM1: adc 158 ; OPTM1: adc
164 ; OPTM1: ret
165 159
166 define internal i64 @add64BitUnsigned(i64 %a, i64 %b) { 160 define internal i64 @add64BitUnsigned(i64 %a, i64 %b) {
167 entry: 161 entry:
168 %add = add i64 %b, %a 162 %add = add i64 %b, %a
169 ret i64 %add 163 ret i64 %add
170 } 164 }
171 ; CHECK-LABEL: add64BitUnsigned 165 ; CHECK-LABEL: add64BitUnsigned
172 ; CHECK: add 166 ; CHECK: add
173 ; CHECK: adc 167 ; CHECK: adc
174 ; CHECK: ret
175 ; 168 ;
176 ; OPTM1-LABEL: add64BitUnsigned 169 ; OPTM1-LABEL: add64BitUnsigned
177 ; OPTM1: add 170 ; OPTM1: add
178 ; OPTM1: adc 171 ; OPTM1: adc
179 ; OPTM1: ret
180 172
181 define internal i64 @sub64BitSigned(i64 %a, i64 %b) { 173 define internal i64 @sub64BitSigned(i64 %a, i64 %b) {
182 entry: 174 entry:
183 %sub = sub i64 %a, %b 175 %sub = sub i64 %a, %b
184 ret i64 %sub 176 ret i64 %sub
185 } 177 }
186 ; CHECK-LABEL: sub64BitSigned 178 ; CHECK-LABEL: sub64BitSigned
187 ; CHECK: sub 179 ; CHECK: sub
188 ; CHECK: sbb 180 ; CHECK: sbb
189 ; CHECK: ret
190 ; 181 ;
191 ; OPTM1-LABEL: sub64BitSigned 182 ; OPTM1-LABEL: sub64BitSigned
192 ; OPTM1: sub 183 ; OPTM1: sub
193 ; OPTM1: sbb 184 ; OPTM1: sbb
194 ; OPTM1: ret
195 185
196 define internal i64 @sub64BitUnsigned(i64 %a, i64 %b) { 186 define internal i64 @sub64BitUnsigned(i64 %a, i64 %b) {
197 entry: 187 entry:
198 %sub = sub i64 %a, %b 188 %sub = sub i64 %a, %b
199 ret i64 %sub 189 ret i64 %sub
200 } 190 }
201 ; CHECK-LABEL: sub64BitUnsigned 191 ; CHECK-LABEL: sub64BitUnsigned
202 ; CHECK: sub 192 ; CHECK: sub
203 ; CHECK: sbb 193 ; CHECK: sbb
204 ; CHECK: ret
205 ; 194 ;
206 ; OPTM1-LABEL: sub64BitUnsigned 195 ; OPTM1-LABEL: sub64BitUnsigned
207 ; OPTM1: sub 196 ; OPTM1: sub
208 ; OPTM1: sbb 197 ; OPTM1: sbb
209 ; OPTM1: ret
210 198
211 define internal i64 @mul64BitSigned(i64 %a, i64 %b) { 199 define internal i64 @mul64BitSigned(i64 %a, i64 %b) {
212 entry: 200 entry:
213 %mul = mul i64 %b, %a 201 %mul = mul i64 %b, %a
214 ret i64 %mul 202 ret i64 %mul
215 } 203 }
216 ; CHECK-LABEL: mul64BitSigned 204 ; CHECK-LABEL: mul64BitSigned
217 ; CHECK: imul 205 ; CHECK: imul
218 ; CHECK: imul 206 ; CHECK: imul
219 ; CHECK: mul 207 ; CHECK: mul
220 ; CHECK: add 208 ; CHECK: add
221 ; CHECK: add 209 ; CHECK: add
222 ; CHECK: ret
223 ; 210 ;
224 ; OPTM1-LABEL: mul64BitSigned 211 ; OPTM1-LABEL: mul64BitSigned
225 ; OPTM1: imul 212 ; OPTM1: imul
226 ; OPTM1: imul 213 ; OPTM1: imul
227 ; OPTM1: mul 214 ; OPTM1: mul
228 ; OPTM1: add 215 ; OPTM1: add
229 ; OPTM1: add 216 ; OPTM1: add
230 ; OPTM1: ret
231 217
232 define internal i64 @mul64BitUnsigned(i64 %a, i64 %b) { 218 define internal i64 @mul64BitUnsigned(i64 %a, i64 %b) {
233 entry: 219 entry:
234 %mul = mul i64 %b, %a 220 %mul = mul i64 %b, %a
235 ret i64 %mul 221 ret i64 %mul
236 } 222 }
237 ; CHECK-LABEL: mul64BitUnsigned 223 ; CHECK-LABEL: mul64BitUnsigned
238 ; CHECK: imul 224 ; CHECK: imul
239 ; CHECK: imul 225 ; CHECK: imul
240 ; CHECK: mul 226 ; CHECK: mul
241 ; CHECK: add 227 ; CHECK: add
242 ; CHECK: add 228 ; CHECK: add
243 ; CHECK: ret
244 ; 229 ;
245 ; OPTM1-LABEL: mul64BitUnsigned 230 ; OPTM1-LABEL: mul64BitUnsigned
246 ; OPTM1: imul 231 ; OPTM1: imul
247 ; OPTM1: imul 232 ; OPTM1: imul
248 ; OPTM1: mul 233 ; OPTM1: mul
249 ; OPTM1: add 234 ; OPTM1: add
250 ; OPTM1: add 235 ; OPTM1: add
251 ; OPTM1: ret
252 236
253 define internal i64 @div64BitSigned(i64 %a, i64 %b) { 237 define internal i64 @div64BitSigned(i64 %a, i64 %b) {
254 entry: 238 entry:
255 %div = sdiv i64 %a, %b 239 %div = sdiv i64 %a, %b
256 ret i64 %div 240 ret i64 %div
257 } 241 }
258 ; CHECK-LABEL: div64BitSigned 242 ; CHECK-LABEL: div64BitSigned
259 ; CALLTARGETS-LABEL: div64BitSigned 243 ; CALLTARGETS-LABEL: div64BitSigned
260 ; CHECK: call -4 244 ; CHECK: call -4
261 ; CALLTARGETS: call __divdi3 245 ; CALLTARGETS: call __divdi3
262 ; CHECK: ret
263 246
264 ; OPTM1-LABEL: div64BitSigned 247 ; OPTM1-LABEL: div64BitSigned
265 ; OPTM1: call -4 248 ; OPTM1: call -4
266 ; OPTM1: ret
267 249
268 define internal i64 @div64BitSignedConst(i64 %a) { 250 define internal i64 @div64BitSignedConst(i64 %a) {
269 entry: 251 entry:
270 %div = sdiv i64 %a, 12345678901234 252 %div = sdiv i64 %a, 12345678901234
271 ret i64 %div 253 ret i64 %div
272 } 254 }
273 ; CHECK-LABEL: div64BitSignedConst 255 ; CHECK-LABEL: div64BitSignedConst
274 ; CALLTARGETS-LABEL: div64BitSignedConst 256 ; CALLTARGETS-LABEL: div64BitSignedConst
275 ; CHECK: mov dword ptr [esp + 12], 2874 257 ; CHECK: mov dword ptr [esp + 12], 2874
276 ; CHECK: mov dword ptr [esp + 8], 1942892530 258 ; CHECK: mov dword ptr [esp + 8], 1942892530
277 ; CHECK: call -4 259 ; CHECK: call -4
278 ; CALLTARGETS: call __divdi3 260 ; CALLTARGETS: call __divdi3
279 ; CHECK: ret
280 ; 261 ;
281 ; OPTM1-LABEL: div64BitSignedConst 262 ; OPTM1-LABEL: div64BitSignedConst
282 ; OPTM1: mov dword ptr [esp + 12], 2874 263 ; OPTM1: mov dword ptr [esp + 12], 2874
283 ; OPTM1: mov dword ptr [esp + 8], 1942892530 264 ; OPTM1: mov dword ptr [esp + 8], 1942892530
284 ; OPTM1: call -4 265 ; OPTM1: call -4
285 ; OPTM1: ret
286 266
287 define internal i64 @div64BitUnsigned(i64 %a, i64 %b) { 267 define internal i64 @div64BitUnsigned(i64 %a, i64 %b) {
288 entry: 268 entry:
289 %div = udiv i64 %a, %b 269 %div = udiv i64 %a, %b
290 ret i64 %div 270 ret i64 %div
291 } 271 }
292 ; CHECK-LABEL: div64BitUnsigned 272 ; CHECK-LABEL: div64BitUnsigned
293 ; CALLTARGETS-LABEL: div64BitUnsigned 273 ; CALLTARGETS-LABEL: div64BitUnsigned
294 ; CHECK: call -4 274 ; CHECK: call -4
295 ; CALLTARGETS: call __udivdi3 275 ; CALLTARGETS: call __udivdi3
296 ; CHECK: ret
297 ; 276 ;
298 ; OPTM1-LABEL: div64BitUnsigned 277 ; OPTM1-LABEL: div64BitUnsigned
299 ; OPTM1: call -4 278 ; OPTM1: call -4
300 ; OPTM1: ret
301 279
302 define internal i64 @rem64BitSigned(i64 %a, i64 %b) { 280 define internal i64 @rem64BitSigned(i64 %a, i64 %b) {
303 entry: 281 entry:
304 %rem = srem i64 %a, %b 282 %rem = srem i64 %a, %b
305 ret i64 %rem 283 ret i64 %rem
306 } 284 }
307 ; CHECK-LABEL: rem64BitSigned 285 ; CHECK-LABEL: rem64BitSigned
308 ; CALLTARGETS-LABEL: rem64BitSigned 286 ; CALLTARGETS-LABEL: rem64BitSigned
309 ; CHECK: call -4 287 ; CHECK: call -4
310 ; CALLTARGETS: call __moddi3 288 ; CALLTARGETS: call __moddi3
311 ; CHECK: ret
312 ; 289 ;
313 ; OPTM1-LABEL: rem64BitSigned 290 ; OPTM1-LABEL: rem64BitSigned
314 ; OPTM1: call -4 291 ; OPTM1: call -4
315 ; OPTM1: ret
316 292
317 define internal i64 @rem64BitUnsigned(i64 %a, i64 %b) { 293 define internal i64 @rem64BitUnsigned(i64 %a, i64 %b) {
318 entry: 294 entry:
319 %rem = urem i64 %a, %b 295 %rem = urem i64 %a, %b
320 ret i64 %rem 296 ret i64 %rem
321 } 297 }
322 ; CHECK-LABEL: rem64BitUnsigned 298 ; CHECK-LABEL: rem64BitUnsigned
323 ; CALLTARGETS-LABEL: rem64BitUnsigned 299 ; CALLTARGETS-LABEL: rem64BitUnsigned
324 ; CHECK: call -4 300 ; CHECK: call -4
325 ; CALLTARGETS: call __umoddi3 301 ; CALLTARGETS: call __umoddi3
326 ; CHECK: ret
327 ; 302 ;
328 ; OPTM1-LABEL: rem64BitUnsigned 303 ; OPTM1-LABEL: rem64BitUnsigned
329 ; OPTM1: call -4 304 ; OPTM1: call -4
330 ; OPTM1: ret
331 305
332 define internal i64 @shl64BitSigned(i64 %a, i64 %b) { 306 define internal i64 @shl64BitSigned(i64 %a, i64 %b) {
333 entry: 307 entry:
334 %shl = shl i64 %a, %b 308 %shl = shl i64 %a, %b
335 ret i64 %shl 309 ret i64 %shl
336 } 310 }
337 ; CHECK-LABEL: shl64BitSigned 311 ; CHECK-LABEL: shl64BitSigned
338 ; CHECK: shld 312 ; CHECK: shld
339 ; CHECK: shl e 313 ; CHECK: shl e
340 ; CHECK: test {{.*}}, 32 314 ; CHECK: test {{.*}}, 32
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 ; OPTM1: xor 451 ; OPTM1: xor
478 ; OPTM1: xor 452 ; OPTM1: xor
479 453
480 define internal i32 @trunc64To32Signed(i64 %a) { 454 define internal i32 @trunc64To32Signed(i64 %a) {
481 entry: 455 entry:
482 %conv = trunc i64 %a to i32 456 %conv = trunc i64 %a to i32
483 ret i32 %conv 457 ret i32 %conv
484 } 458 }
485 ; CHECK-LABEL: trunc64To32Signed 459 ; CHECK-LABEL: trunc64To32Signed
486 ; CHECK: mov eax, dword ptr [esp + 4] 460 ; CHECK: mov eax, dword ptr [esp + 4]
487 ; CHECK-NEXT: ret
488 ; 461 ;
489 ; OPTM1-LABEL: trunc64To32Signed 462 ; OPTM1-LABEL: trunc64To32Signed
490 ; OPTM1: mov eax, dword ptr [esp + 463 ; OPTM1: mov eax, dword ptr [esp +
491 ; OPTM1: ret
492 464
493 define internal i32 @trunc64To16Signed(i64 %a) { 465 define internal i32 @trunc64To16Signed(i64 %a) {
494 entry: 466 entry:
495 %conv = trunc i64 %a to i16 467 %conv = trunc i64 %a to i16
496 %conv.ret_ext = sext i16 %conv to i32 468 %conv.ret_ext = sext i16 %conv to i32
497 ret i32 %conv.ret_ext 469 ret i32 %conv.ret_ext
498 } 470 }
499 ; CHECK-LABEL: trunc64To16Signed 471 ; CHECK-LABEL: trunc64To16Signed
500 ; CHECK: mov eax, dword ptr [esp + 4] 472 ; CHECK: mov eax, dword ptr [esp + 4]
501 ; CHECK-NEXT: movsx eax, ax 473 ; CHECK-NEXT: movsx eax, ax
502 ; CHECK-NEXT: ret
503 ; 474 ;
504 ; OPTM1-LABEL: trunc64To16Signed 475 ; OPTM1-LABEL: trunc64To16Signed
505 ; OPTM1: mov eax, dword ptr [esp + 476 ; OPTM1: mov eax, dword ptr [esp +
506 ; OPTM1: movsx eax, 477 ; OPTM1: movsx eax,
507 ; OPTM1: ret
508 478
509 define internal i32 @trunc64To8Signed(i64 %a) { 479 define internal i32 @trunc64To8Signed(i64 %a) {
510 entry: 480 entry:
511 %conv = trunc i64 %a to i8 481 %conv = trunc i64 %a to i8
512 %conv.ret_ext = sext i8 %conv to i32 482 %conv.ret_ext = sext i8 %conv to i32
513 ret i32 %conv.ret_ext 483 ret i32 %conv.ret_ext
514 } 484 }
515 ; CHECK-LABEL: trunc64To8Signed 485 ; CHECK-LABEL: trunc64To8Signed
516 ; CHECK: mov eax, dword ptr [esp + 4] 486 ; CHECK: mov eax, dword ptr [esp + 4]
517 ; CHECK-NEXT: movsx eax, al 487 ; CHECK-NEXT: movsx eax, al
518 ; CHECK-NEXT: ret
519 ; 488 ;
520 ; OPTM1-LABEL: trunc64To8Signed 489 ; OPTM1-LABEL: trunc64To8Signed
521 ; OPTM1: mov eax, dword ptr [esp + 490 ; OPTM1: mov eax, dword ptr [esp +
522 ; OPTM1: movsx eax, 491 ; OPTM1: movsx eax,
523 ; OPTM1: ret
524 492
525 define internal i32 @trunc64To32SignedConst() { 493 define internal i32 @trunc64To32SignedConst() {
526 entry: 494 entry:
527 %conv = trunc i64 12345678901234 to i32 495 %conv = trunc i64 12345678901234 to i32
528 ret i32 %conv 496 ret i32 %conv
529 } 497 }
530 ; CHECK-LABEL: trunc64To32SignedConst 498 ; CHECK-LABEL: trunc64To32SignedConst
531 ; CHECK: mov eax, 1942892530 499 ; CHECK: mov eax, 1942892530
532 ; 500 ;
533 ; OPTM1-LABEL: trunc64To32SignedConst 501 ; OPTM1-LABEL: trunc64To32SignedConst
(...skipping 13 matching lines...) Expand all
547 ; OPTM1: mov eax, 1942892530 515 ; OPTM1: mov eax, 1942892530
548 ; OPTM1: movsx eax, 516 ; OPTM1: movsx eax,
549 517
550 define internal i32 @trunc64To32Unsigned(i64 %a) { 518 define internal i32 @trunc64To32Unsigned(i64 %a) {
551 entry: 519 entry:
552 %conv = trunc i64 %a to i32 520 %conv = trunc i64 %a to i32
553 ret i32 %conv 521 ret i32 %conv
554 } 522 }
555 ; CHECK-LABEL: trunc64To32Unsigned 523 ; CHECK-LABEL: trunc64To32Unsigned
556 ; CHECK: mov eax, dword ptr [esp + 4] 524 ; CHECK: mov eax, dword ptr [esp + 4]
557 ; CHECK-NEXT: ret
558 ; 525 ;
559 ; OPTM1-LABEL: trunc64To32Unsigned 526 ; OPTM1-LABEL: trunc64To32Unsigned
560 ; OPTM1: mov eax, dword ptr [esp + 527 ; OPTM1: mov eax, dword ptr [esp +
561 ; OPTM1: ret
562 528
563 define internal i32 @trunc64To16Unsigned(i64 %a) { 529 define internal i32 @trunc64To16Unsigned(i64 %a) {
564 entry: 530 entry:
565 %conv = trunc i64 %a to i16 531 %conv = trunc i64 %a to i16
566 %conv.ret_ext = zext i16 %conv to i32 532 %conv.ret_ext = zext i16 %conv to i32
567 ret i32 %conv.ret_ext 533 ret i32 %conv.ret_ext
568 } 534 }
569 ; CHECK-LABEL: trunc64To16Unsigned 535 ; CHECK-LABEL: trunc64To16Unsigned
570 ; CHECK: mov eax, dword ptr [esp + 4] 536 ; CHECK: mov eax, dword ptr [esp + 4]
571 ; CHECK-NEXT: movzx eax, ax 537 ; CHECK-NEXT: movzx eax, ax
572 ; CHECK-NEXT: ret
573 ; 538 ;
574 ; OPTM1-LABEL: trunc64To16Unsigned 539 ; OPTM1-LABEL: trunc64To16Unsigned
575 ; OPTM1: mov eax, dword ptr [esp + 540 ; OPTM1: mov eax, dword ptr [esp +
576 ; OPTM1: movzx eax, 541 ; OPTM1: movzx eax,
577 ; OPTM1: ret
578 542
579 define internal i32 @trunc64To8Unsigned(i64 %a) { 543 define internal i32 @trunc64To8Unsigned(i64 %a) {
580 entry: 544 entry:
581 %conv = trunc i64 %a to i8 545 %conv = trunc i64 %a to i8
582 %conv.ret_ext = zext i8 %conv to i32 546 %conv.ret_ext = zext i8 %conv to i32
583 ret i32 %conv.ret_ext 547 ret i32 %conv.ret_ext
584 } 548 }
585 ; CHECK-LABEL: trunc64To8Unsigned 549 ; CHECK-LABEL: trunc64To8Unsigned
586 ; CHECK: mov eax, dword ptr [esp + 4] 550 ; CHECK: mov eax, dword ptr [esp + 4]
587 ; CHECK-NEXT: movzx eax, al 551 ; CHECK-NEXT: movzx eax, al
588 ; CHECK-NEXT: ret
589 ; 552 ;
590 ; OPTM1-LABEL: trunc64To8Unsigned 553 ; OPTM1-LABEL: trunc64To8Unsigned
591 ; OPTM1: mov eax, dword ptr [esp + 554 ; OPTM1: mov eax, dword ptr [esp +
592 ; OPTM1: movzx eax, 555 ; OPTM1: movzx eax,
593 ; OPTM1: ret
594 556
595 define internal i32 @trunc64To1(i64 %a) { 557 define internal i32 @trunc64To1(i64 %a) {
596 entry: 558 entry:
597 ; %tobool = icmp ne i64 %a, 0 559 ; %tobool = icmp ne i64 %a, 0
598 %tobool = trunc i64 %a to i1 560 %tobool = trunc i64 %a to i1
599 %tobool.ret_ext = zext i1 %tobool to i32 561 %tobool.ret_ext = zext i1 %tobool to i32
600 ret i32 %tobool.ret_ext 562 ret i32 %tobool.ret_ext
601 } 563 }
602 ; CHECK-LABEL: trunc64To1 564 ; CHECK-LABEL: trunc64To1
603 ; CHECK: mov eax, dword ptr [esp + 4] 565 ; CHECK: mov eax, dword ptr [esp + 4]
604 ; CHECK: and eax, 1 566 ; CHECK: and eax, 1
605 ; CHECK-NEXT: ret 567 ; CHECK: and eax, 1
606 ; 568 ;
607 ; OPTM1-LABEL: trunc64To1 569 ; OPTM1-LABEL: trunc64To1
608 ; OPTM1: mov eax, dword ptr [esp + 570 ; OPTM1: mov eax, dword ptr [esp +
609 ; OPTM1: and eax, 1 571 ; OPTM1: and eax, 1
610 ; OPTM1: ret 572 ; OPTM1: and eax, 1
611 573
612 define internal i64 @sext32To64(i32 %a) { 574 define internal i64 @sext32To64(i32 %a) {
613 entry: 575 entry:
614 %conv = sext i32 %a to i64 576 %conv = sext i32 %a to i64
615 ret i64 %conv 577 ret i64 %conv
616 } 578 }
617 ; CHECK-LABEL: sext32To64 579 ; CHECK-LABEL: sext32To64
618 ; CHECK: mov 580 ; CHECK: mov
619 ; CHECK: sar {{.*}}, 31 581 ; CHECK: sar {{.*}}, 31
620 ; 582 ;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
653 define internal i64 @sext1To64(i32 %a) { 615 define internal i64 @sext1To64(i32 %a) {
654 entry: 616 entry:
655 %a.arg_trunc = trunc i32 %a to i1 617 %a.arg_trunc = trunc i32 %a to i1
656 %conv = sext i1 %a.arg_trunc to i64 618 %conv = sext i1 %a.arg_trunc to i64
657 ret i64 %conv 619 ret i64 %conv
658 } 620 }
659 ; CHECK-LABEL: sext1To64 621 ; CHECK-LABEL: sext1To64
660 ; CHECK: mov 622 ; CHECK: mov
661 ; CHECK: shl {{.*}}, 31 623 ; CHECK: shl {{.*}}, 31
662 ; CHECK: sar {{.*}}, 31 624 ; CHECK: sar {{.*}}, 31
663 ; CHECK: sar {{.*}}, 31
664 ; 625 ;
665 ; OPTM1-LABEL: sext1To64 626 ; OPTM1-LABEL: sext1To64
666 ; OPTM1: mov 627 ; OPTM1: mov
667 ; OPTM1: shl {{.*}}, 31 628 ; OPTM1: shl {{.*}}, 31
668 ; OPTM1: sar {{.*}}, 31 629 ; OPTM1: sar {{.*}}, 31
669 ; OPTM1: sar {{.*}}, 31
670 630
671 define internal i64 @zext32To64(i32 %a) { 631 define internal i64 @zext32To64(i32 %a) {
672 entry: 632 entry:
673 %conv = zext i32 %a to i64 633 %conv = zext i32 %a to i64
674 ret i64 %conv 634 ret i64 %conv
675 } 635 }
676 ; CHECK-LABEL: zext32To64 636 ; CHECK-LABEL: zext32To64
677 ; CHECK: mov 637 ; CHECK: mov
678 ; CHECK: mov {{.*}}, 0 638 ; CHECK: mov {{.*}}, 0
679 ; 639 ;
(...skipping 631 matching lines...) Expand 10 before | Expand all | Expand 10 after
1311 } 1271 }
1312 ; The following checks are not strictly necessary since one of the RUN 1272 ; The following checks are not strictly necessary since one of the RUN
1313 ; lines actually runs the output through the assembler. 1273 ; lines actually runs the output through the assembler.
1314 ; CHECK-LABEL: icmpLt64Imm 1274 ; CHECK-LABEL: icmpLt64Imm
1315 ; CHECK-NOT: cmp {{[0-9]+}}, 1275 ; CHECK-NOT: cmp {{[0-9]+}},
1316 ; OPTM1-LABEL: icmpLt64Imm 1276 ; OPTM1-LABEL: icmpLt64Imm
1317 ; OPTM1-NOT: cmp {{[0-9]+}}, 1277 ; OPTM1-NOT: cmp {{[0-9]+}},
1318 1278
1319 ; ERRORS-NOT: ICE translation error 1279 ; ERRORS-NOT: ICE translation error
1320 ; DUMP-NOT: SZ 1280 ; DUMP-NOT: SZ
OLDNEW
« no previous file with comments | « src/IceTargetLoweringX8632.cpp ('k') | tests_lit/llvm2ice_tests/sext_zext_i1.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698