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

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

Issue 914263005: Subzero: switch from llvm-objdump to objdump for lit tests (for LLVM merge) (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Created 5 years, 10 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 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 ; RUN: %p2i -i %s --args -O2 --verbose none \ 5 ; RUN: %p2i --assemble --disassemble -i %s --args -O2 --verbose none \
6 ; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj \ 6 ; RUN: | FileCheck %s
7 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s 7 ; RUN: %p2i --assemble --disassemble -i %s --args -Om1 --verbose none \
8 ; RUN: %p2i -i %s --args -Om1 --verbose none \
9 ; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj \
10 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - \
11 ; RUN: | FileCheck --check-prefix=OPTM1 %s 8 ; RUN: | FileCheck --check-prefix=OPTM1 %s
12 9
13 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 10 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4
14 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 11 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4
15 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8 12 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8
16 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4 13 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4
17 14
18 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) { 15 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) {
19 entry: 16 entry:
20 ret i32 %b 17 ret i32 %b
21 } 18 }
22 19
23 define internal i32 @pass64BitArg(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f ) { 20 define internal i32 @pass64BitArg(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f ) {
24 entry: 21 entry:
25 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 %b) 22 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 %b)
26 %call1 = call i32 @ignore64BitArgNoInline(i64 %c, i32 123, i64 %d) 23 %call1 = call i32 @ignore64BitArgNoInline(i64 %c, i32 123, i64 %d)
27 %call2 = call i32 @ignore64BitArgNoInline(i64 %e, i32 123, i64 %f) 24 %call2 = call i32 @ignore64BitArgNoInline(i64 %e, i32 123, i64 %f)
28 %add = add i32 %call1, %call 25 %add = add i32 %call1, %call
29 %add3 = add i32 %add, %call2 26 %add3 = add i32 %add, %call2
30 ret i32 %add3 27 ret i32 %add3
31 } 28 }
32 ; CHECK-LABEL: pass64BitArg 29 ; CHECK-LABEL: pass64BitArg
33 ; CHECK: sub esp 30 ; CHECK: sub esp
34 ; CHECK: mov dword ptr [esp + 4] 31 ; CHECK: mov DWORD PTR [esp+4]
35 ; CHECK: mov dword ptr [esp] 32 ; CHECK: mov DWORD PTR [esp]
36 ; CHECK: mov dword ptr [esp + 8], 123 33 ; CHECK: mov DWORD PTR [esp+8],123
37 ; CHECK: mov dword ptr [esp + 16] 34 ; CHECK: mov DWORD PTR [esp+16]
38 ; CHECK: mov dword ptr [esp + 12] 35 ; CHECK: mov DWORD PTR [esp+12]
39 ; CHECK: call ignore64BitArgNoInline 36 ; CHECK: call
37 ; CHECK-NEXT: R_{{.*}} ignore64BitArgNoInline
40 ; CHECK: sub esp 38 ; CHECK: sub esp
41 ; CHECK: mov dword ptr [esp + 4] 39 ; CHECK: mov DWORD PTR [esp+4]
42 ; CHECK: mov dword ptr [esp] 40 ; CHECK: mov DWORD PTR [esp]
43 ; CHECK: mov dword ptr [esp + 8], 123 41 ; CHECK: mov DWORD PTR [esp+8],123
44 ; CHECK: mov dword ptr [esp + 16] 42 ; CHECK: mov DWORD PTR [esp+16]
45 ; CHECK: mov dword ptr [esp + 12] 43 ; CHECK: mov DWORD PTR [esp+12]
46 ; CHECK: call ignore64BitArgNoInline 44 ; CHECK: call
45 ; CHECK-NEXT: R_{{.*}} ignore64BitArgNoInline
47 ; CHECK: sub esp 46 ; CHECK: sub esp
48 ; CHECK: mov dword ptr [esp + 4] 47 ; CHECK: mov DWORD PTR [esp+4]
49 ; CHECK: mov dword ptr [esp] 48 ; CHECK: mov DWORD PTR [esp]
50 ; CHECK: mov dword ptr [esp + 8], 123 49 ; CHECK: mov DWORD PTR [esp+8],123
51 ; CHECK: mov dword ptr [esp + 16] 50 ; CHECK: mov DWORD PTR [esp+16]
52 ; CHECK: mov dword ptr [esp + 12] 51 ; CHECK: mov DWORD PTR [esp+12]
53 ; CHECK: call ignore64BitArgNoInline 52 ; CHECK: call
53 ; CHECK-NEXT: R_{{.*}} ignore64BitArgNoInline
54 ; 54 ;
55 ; OPTM1-LABEL: pass64BitArg 55 ; OPTM1-LABEL: pass64BitArg
56 ; OPTM1: sub esp 56 ; OPTM1: sub esp
57 ; OPTM1: mov dword ptr [esp + 4] 57 ; OPTM1: mov DWORD PTR [esp + 4]
58 ; OPTM1: mov dword ptr [esp] 58 ; OPTM1: mov DWORD PTR [esp]
59 ; OPTM1: mov dword ptr [esp + 8], 123 59 ; OPTM1: mov DWORD PTR [esp + 8], 123
60 ; OPTM1: mov dword ptr [esp + 16] 60 ; OPTM1: mov DWORD PTR [esp + 16]
61 ; OPTM1: mov dword ptr [esp + 12] 61 ; OPTM1: mov DWORD PTR [esp + 12]
62 ; OPTM1: call ignore64BitArgNoInline 62 ; OPTM1: call ignore64BitArgNoInline
63 ; OPTM1: sub esp 63 ; OPTM1: sub esp
64 ; OPTM1: mov dword ptr [esp + 4] 64 ; OPTM1: mov DWORD PTR [esp + 4]
65 ; OPTM1: mov dword ptr [esp] 65 ; OPTM1: mov DWORD PTR [esp]
66 ; OPTM1: mov dword ptr [esp + 8], 123 66 ; OPTM1: mov DWORD PTR [esp + 8], 123
67 ; OPTM1: mov dword ptr [esp + 16] 67 ; OPTM1: mov DWORD PTR [esp + 16]
68 ; OPTM1: mov dword ptr [esp + 12] 68 ; OPTM1: mov DWORD PTR [esp + 12]
69 ; OPTM1: call ignore64BitArgNoInline 69 ; OPTM1: call ignore64BitArgNoInline
70 ; OPTM1: sub esp 70 ; OPTM1: sub esp
71 ; OPTM1: mov dword ptr [esp + 4] 71 ; OPTM1: mov DWORD PTR [esp + 4]
72 ; OPTM1: mov dword ptr [esp] 72 ; OPTM1: mov DWORD PTR [esp]
73 ; OPTM1: mov dword ptr [esp + 8], 123 73 ; OPTM1: mov DWORD PTR [esp + 8], 123
74 ; OPTM1: mov dword ptr [esp + 16] 74 ; OPTM1: mov DWORD PTR [esp + 16]
75 ; OPTM1: mov dword ptr [esp + 12] 75 ; OPTM1: mov DWORD PTR [esp + 12]
76 ; OPTM1: call ignore64BitArgNoInline 76 ; OPTM1: call ignore64BitArgNoInline
77 77
78 declare i32 @ignore64BitArgNoInline(i64, i32, i64) 78 declare i32 @ignore64BitArgNoInline(i64, i32, i64)
79 79
80 define internal i32 @pass64BitConstArg(i64 %a, i64 %b) { 80 define internal i32 @pass64BitConstArg(i64 %a, i64 %b) {
81 entry: 81 entry:
82 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 -240105309230672 5256) 82 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 -240105309230672 5256)
83 ret i32 %call 83 ret i32 %call
84 } 84 }
85 ; CHECK-LABEL: pass64BitConstArg 85 ; CHECK-LABEL: pass64BitConstArg
86 ; CHECK: sub esp 86 ; CHECK: sub esp
87 ; CHECK: mov dword ptr [esp + 4] 87 ; CHECK: mov DWORD PTR [esp+4]
88 ; CHECK-NEXT: mov dword ptr [esp] 88 ; CHECK-NEXT: mov DWORD PTR [esp]
89 ; CHECK-NEXT: mov dword ptr [esp + 8], 123 89 ; CHECK-NEXT: mov DWORD PTR [esp + 8], 123
90 ; Bundle padding might be added (so not using -NEXT). 90 ; Bundle padding might be added (so not using -NEXT).
91 ; CHECK: mov dword ptr [esp + 16], 3735928559 91 ; CHECK: mov DWORD PTR [esp+16],3735928559
92 ; CHECK-NEXT: mov dword ptr [esp + 12], 305419896 92 ; CHECK-NEXT: mov DWORD PTR [esp + 12], 305419896
93 ; Bundle padding will push the call down. 93 ; Bundle padding will push the call down.
94 ; CHECK-NOT: mov 94 ; CHECK-NOT: mov
95 ; CHECK: call ignore64BitArgNoInline 95 ; CHECK: call
96 ; CHECK-NEXT: R_{{.*}} ignore64BitArgNoInline
96 ; 97 ;
97 ; OPTM1-LABEL: pass64BitConstArg 98 ; OPTM1-LABEL: pass64BitConstArg
98 ; OPTM1: sub esp 99 ; OPTM1: sub esp
99 ; OPTM1: mov dword ptr [esp + 4] 100 ; OPTM1: mov DWORD PTR [esp + 4]
100 ; OPTM1-NEXT: mov dword ptr [esp] 101 ; OPTM1-NEXT: mov DWORD PTR [esp]
101 ; OPTM1-NEXT: mov dword ptr [esp + 8], 123 102 ; OPTM1-NEXT: mov DWORD PTR [esp + 8], 123
102 ; Bundle padding might be added (so not using -NEXT). 103 ; Bundle padding might be added (so not using -NEXT).
103 ; OPTM1: mov dword ptr [esp + 16], 3735928559 104 ; OPTM1: mov DWORD PTR [esp + 16], 3735928559
104 ; OPTM1-NEXT: mov dword ptr [esp + 12], 305419896 105 ; OPTM1-NEXT: mov DWORD PTR [esp + 12], 305419896
105 ; OPTM1-NOT: mov 106 ; OPTM1-NOT: mov
106 ; OPTM1: call ignore64BitArgNoInline 107 ; OPTM1: call ignore64BitArgNoInline
107 108
108 define internal i64 @return64BitArg(i64 %a) { 109 define internal i64 @return64BitArg(i64 %a) {
109 entry: 110 entry:
110 ret i64 %a 111 ret i64 %a
111 } 112 }
112 ; CHECK-LABEL: return64BitArg 113 ; CHECK-LABEL: return64BitArg
113 ; CHECK: mov {{.*}}, dword ptr [esp + 4] 114 ; CHECK: mov {{.*}},DWORD ptr [esp+4]
114 ; CHECK: mov {{.*}}, dword ptr [esp + 8] 115 ; CHECK: mov {{.*}},DWORD ptr [esp+8]
115 ; 116 ;
116 ; OPTM1-LABEL: return64BitArg 117 ; OPTM1-LABEL: return64BitArg
117 ; OPTM1: mov {{.*}}, dword ptr [esp + 4] 118 ; OPTM1: mov {{.*}}, DWORD PTR [esp + 4]
118 ; OPTM1: mov {{.*}}, dword ptr [esp + 8] 119 ; OPTM1: mov {{.*}}, DWORD PTR [esp + 8]
119 120
120 define internal i64 @return64BitConst() { 121 define internal i64 @return64BitConst() {
121 entry: 122 entry:
122 ret i64 -2401053092306725256 123 ret i64 -2401053092306725256
123 } 124 }
124 ; CHECK-LABEL: return64BitConst 125 ; CHECK-LABEL: return64BitConst
125 ; CHECK: mov eax, 305419896 126 ; CHECK: mov eax,305419896
126 ; CHECK: mov edx, 3735928559 127 ; CHECK: mov edx,3735928559
127 ; 128 ;
128 ; OPTM1-LABEL: return64BitConst 129 ; OPTM1-LABEL: return64BitConst
129 ; OPTM1: mov eax, 305419896 130 ; OPTM1: mov eax, 305419896
130 ; OPTM1: mov edx, 3735928559 131 ; OPTM1: mov edx, 3735928559
131 132
132 define internal i64 @add64BitSigned(i64 %a, i64 %b) { 133 define internal i64 @add64BitSigned(i64 %a, i64 %b) {
133 entry: 134 entry:
134 %add = add i64 %b, %a 135 %add = add i64 %b, %a
135 ret i64 %add 136 ret i64 %add
136 } 137 }
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 ; OPTM1: mul 219 ; OPTM1: mul
219 ; OPTM1: add 220 ; OPTM1: add
220 ; OPTM1: add 221 ; OPTM1: add
221 222
222 define internal i64 @div64BitSigned(i64 %a, i64 %b) { 223 define internal i64 @div64BitSigned(i64 %a, i64 %b) {
223 entry: 224 entry:
224 %div = sdiv i64 %a, %b 225 %div = sdiv i64 %a, %b
225 ret i64 %div 226 ret i64 %div
226 } 227 }
227 ; CHECK-LABEL: div64BitSigned 228 ; CHECK-LABEL: div64BitSigned
228 ; CHECK: call __divdi3 229 ; CHECK: call
230 ; CHECK-NEXT: R_{{.*}} __divdi3
229 231
230 ; OPTM1-LABEL: div64BitSigned 232 ; OPTM1-LABEL: div64BitSigned
231 ; OPTM1: call __divdi3 233 ; OPTM1: call __divdi3
232 234
233 define internal i64 @div64BitSignedConst(i64 %a) { 235 define internal i64 @div64BitSignedConst(i64 %a) {
234 entry: 236 entry:
235 %div = sdiv i64 %a, 12345678901234 237 %div = sdiv i64 %a, 12345678901234
236 ret i64 %div 238 ret i64 %div
237 } 239 }
238 ; CHECK-LABEL: div64BitSignedConst 240 ; CHECK-LABEL: div64BitSignedConst
239 ; CHECK: mov dword ptr [esp + 12], 2874 241 ; CHECK: mov DWORD PTR [esp+12],2874
240 ; CHECK: mov dword ptr [esp + 8], 1942892530 242 ; CHECK: mov DWORD PTR [esp+8],1942892530
241 ; CHECK: call __divdi3 243 ; CHECK: call
244 ; CHECK-NEXT: R_{{.*}} __divdi3
242 ; 245 ;
243 ; OPTM1-LABEL: div64BitSignedConst 246 ; OPTM1-LABEL: div64BitSignedConst
244 ; OPTM1: mov dword ptr [esp + 12], 2874 247 ; OPTM1: mov DWORD PTR [esp + 12], 2874
245 ; OPTM1: mov dword ptr [esp + 8], 1942892530 248 ; OPTM1: mov DWORD PTR [esp + 8], 1942892530
246 ; OPTM1: call __divdi3 249 ; OPTM1: call __divdi3
247 250
248 define internal i64 @div64BitUnsigned(i64 %a, i64 %b) { 251 define internal i64 @div64BitUnsigned(i64 %a, i64 %b) {
249 entry: 252 entry:
250 %div = udiv i64 %a, %b 253 %div = udiv i64 %a, %b
251 ret i64 %div 254 ret i64 %div
252 } 255 }
253 ; CHECK-LABEL: div64BitUnsigned 256 ; CHECK-LABEL: div64BitUnsigned
254 ; CHECK: call __udivdi3 257 ; CHECK: call
258 ; CHECK-NEXT: R_{{.*}} __udivdi3
255 ; 259 ;
256 ; OPTM1-LABEL: div64BitUnsigned 260 ; OPTM1-LABEL: div64BitUnsigned
257 ; OPTM1: call __udivdi3 261 ; OPTM1: call __udivdi3
258 262
259 define internal i64 @rem64BitSigned(i64 %a, i64 %b) { 263 define internal i64 @rem64BitSigned(i64 %a, i64 %b) {
260 entry: 264 entry:
261 %rem = srem i64 %a, %b 265 %rem = srem i64 %a, %b
262 ret i64 %rem 266 ret i64 %rem
263 } 267 }
264 ; CHECK-LABEL: rem64BitSigned 268 ; CHECK-LABEL: rem64BitSigned
265 ; CHECK: call __moddi3 269 ; CHECK: call
270 ; CHECK-NEXT: R_{{.*}} __moddi3
266 ; 271 ;
267 ; OPTM1-LABEL: rem64BitSigned 272 ; OPTM1-LABEL: rem64BitSigned
268 ; OPTM1: call __moddi3 273 ; OPTM1: call __moddi3
269 274
270 define internal i64 @rem64BitUnsigned(i64 %a, i64 %b) { 275 define internal i64 @rem64BitUnsigned(i64 %a, i64 %b) {
271 entry: 276 entry:
272 %rem = urem i64 %a, %b 277 %rem = urem i64 %a, %b
273 ret i64 %rem 278 ret i64 %rem
274 } 279 }
275 ; CHECK-LABEL: rem64BitUnsigned 280 ; CHECK-LABEL: rem64BitUnsigned
276 ; CHECK: call __umoddi3 281 ; CHECK: call
282 ; CHECK-NEXT: R_{{.*}} __umoddi3
277 ; 283 ;
278 ; OPTM1-LABEL: rem64BitUnsigned 284 ; OPTM1-LABEL: rem64BitUnsigned
279 ; OPTM1: call __umoddi3 285 ; OPTM1: call __umoddi3
280 286
281 define internal i64 @shl64BitSigned(i64 %a, i64 %b) { 287 define internal i64 @shl64BitSigned(i64 %a, i64 %b) {
282 entry: 288 entry:
283 %shl = shl i64 %a, %b 289 %shl = shl i64 %a, %b
284 ret i64 %shl 290 ret i64 %shl
285 } 291 }
286 ; CHECK-LABEL: shl64BitSigned 292 ; CHECK-LABEL: shl64BitSigned
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 ; OPTM1-LABEL: xor64BitUnsigned 486 ; OPTM1-LABEL: xor64BitUnsigned
481 ; OPTM1: xor 487 ; OPTM1: xor
482 ; OPTM1: xor 488 ; OPTM1: xor
483 489
484 define internal i32 @trunc64To32Signed(i64 %a) { 490 define internal i32 @trunc64To32Signed(i64 %a) {
485 entry: 491 entry:
486 %conv = trunc i64 %a to i32 492 %conv = trunc i64 %a to i32
487 ret i32 %conv 493 ret i32 %conv
488 } 494 }
489 ; CHECK-LABEL: trunc64To32Signed 495 ; CHECK-LABEL: trunc64To32Signed
490 ; CHECK: mov eax, dword ptr [esp + 4] 496 ; CHECK: mov eax,DWORD ptr [esp+4]
491 ; 497 ;
492 ; OPTM1-LABEL: trunc64To32Signed 498 ; OPTM1-LABEL: trunc64To32Signed
493 ; OPTM1: mov eax, dword ptr [esp + 499 ; OPTM1: mov eax, DWORD PTR [esp +
494 500
495 define internal i32 @trunc64To16Signed(i64 %a) { 501 define internal i32 @trunc64To16Signed(i64 %a) {
496 entry: 502 entry:
497 %conv = trunc i64 %a to i16 503 %conv = trunc i64 %a to i16
498 %conv.ret_ext = sext i16 %conv to i32 504 %conv.ret_ext = sext i16 %conv to i32
499 ret i32 %conv.ret_ext 505 ret i32 %conv.ret_ext
500 } 506 }
501 ; CHECK-LABEL: trunc64To16Signed 507 ; CHECK-LABEL: trunc64To16Signed
502 ; CHECK: mov eax, dword ptr [esp + 4] 508 ; CHECK: mov eax,DWORD ptr [esp+4]
503 ; CHECK-NEXT: movsx eax, ax 509 ; CHECK-NEXT: movsx eax, ax
504 ; 510 ;
505 ; OPTM1-LABEL: trunc64To16Signed 511 ; OPTM1-LABEL: trunc64To16Signed
506 ; OPTM1: mov eax, dword ptr [esp + 512 ; OPTM1: mov eax, DWORD PTR [esp +
507 ; OPTM1: movsx eax, 513 ; OPTM1: movsx eax,
508 514
509 define internal i32 @trunc64To8Signed(i64 %a) { 515 define internal i32 @trunc64To8Signed(i64 %a) {
510 entry: 516 entry:
511 %conv = trunc i64 %a to i8 517 %conv = trunc i64 %a to i8
512 %conv.ret_ext = sext i8 %conv to i32 518 %conv.ret_ext = sext i8 %conv to i32
513 ret i32 %conv.ret_ext 519 ret i32 %conv.ret_ext
514 } 520 }
515 ; CHECK-LABEL: trunc64To8Signed 521 ; CHECK-LABEL: trunc64To8Signed
516 ; CHECK: mov eax, dword ptr [esp + 4] 522 ; CHECK: mov eax,DWORD ptr [esp+4]
517 ; CHECK-NEXT: movsx eax, al 523 ; CHECK-NEXT: movsx eax, al
518 ; 524 ;
519 ; OPTM1-LABEL: trunc64To8Signed 525 ; OPTM1-LABEL: trunc64To8Signed
520 ; OPTM1: mov eax, dword ptr [esp + 526 ; OPTM1: mov eax, DWORD PTR [esp +
521 ; OPTM1: movsx eax, 527 ; OPTM1: movsx eax,
522 528
523 define internal i32 @trunc64To32SignedConst() { 529 define internal i32 @trunc64To32SignedConst() {
524 entry: 530 entry:
525 %conv = trunc i64 12345678901234 to i32 531 %conv = trunc i64 12345678901234 to i32
526 ret i32 %conv 532 ret i32 %conv
527 } 533 }
528 ; CHECK-LABEL: trunc64To32SignedConst 534 ; CHECK-LABEL: trunc64To32SignedConst
529 ; CHECK: mov eax, 1942892530 535 ; CHECK: mov eax,1942892530
530 ; 536 ;
531 ; OPTM1-LABEL: trunc64To32SignedConst 537 ; OPTM1-LABEL: trunc64To32SignedConst
532 ; OPTM1: mov eax, 1942892530 538 ; OPTM1: mov eax, 1942892530
533 539
534 define internal i32 @trunc64To16SignedConst() { 540 define internal i32 @trunc64To16SignedConst() {
535 entry: 541 entry:
536 %conv = trunc i64 12345678901234 to i16 542 %conv = trunc i64 12345678901234 to i16
537 %conv.ret_ext = sext i16 %conv to i32 543 %conv.ret_ext = sext i16 %conv to i32
538 ret i32 %conv.ret_ext 544 ret i32 %conv.ret_ext
539 } 545 }
540 ; CHECK-LABEL: trunc64To16SignedConst 546 ; CHECK-LABEL: trunc64To16SignedConst
541 ; CHECK: mov eax, 1942892530 547 ; CHECK: mov eax,1942892530
542 ; CHECK: movsx eax, ax 548 ; CHECK: movsx eax,ax
543 ; 549 ;
544 ; OPTM1-LABEL: trunc64To16SignedConst 550 ; OPTM1-LABEL: trunc64To16SignedConst
545 ; OPTM1: mov eax, 1942892530 551 ; OPTM1: mov eax, 1942892530
546 ; OPTM1: movsx eax, 552 ; OPTM1: movsx eax,
547 553
548 define internal i32 @trunc64To32Unsigned(i64 %a) { 554 define internal i32 @trunc64To32Unsigned(i64 %a) {
549 entry: 555 entry:
550 %conv = trunc i64 %a to i32 556 %conv = trunc i64 %a to i32
551 ret i32 %conv 557 ret i32 %conv
552 } 558 }
553 ; CHECK-LABEL: trunc64To32Unsigned 559 ; CHECK-LABEL: trunc64To32Unsigned
554 ; CHECK: mov eax, dword ptr [esp + 4] 560 ; CHECK: mov eax,DWORD ptr [esp+4]
555 ; 561 ;
556 ; OPTM1-LABEL: trunc64To32Unsigned 562 ; OPTM1-LABEL: trunc64To32Unsigned
557 ; OPTM1: mov eax, dword ptr [esp + 563 ; OPTM1: mov eax, DWORD PTR [esp +
558 564
559 define internal i32 @trunc64To16Unsigned(i64 %a) { 565 define internal i32 @trunc64To16Unsigned(i64 %a) {
560 entry: 566 entry:
561 %conv = trunc i64 %a to i16 567 %conv = trunc i64 %a to i16
562 %conv.ret_ext = zext i16 %conv to i32 568 %conv.ret_ext = zext i16 %conv to i32
563 ret i32 %conv.ret_ext 569 ret i32 %conv.ret_ext
564 } 570 }
565 ; CHECK-LABEL: trunc64To16Unsigned 571 ; CHECK-LABEL: trunc64To16Unsigned
566 ; CHECK: mov eax, dword ptr [esp + 4] 572 ; CHECK: mov eax,DWORD ptr [esp+4]
567 ; CHECK-NEXT: movzx eax, ax 573 ; CHECK-NEXT: movzx eax, ax
568 ; 574 ;
569 ; OPTM1-LABEL: trunc64To16Unsigned 575 ; OPTM1-LABEL: trunc64To16Unsigned
570 ; OPTM1: mov eax, dword ptr [esp + 576 ; OPTM1: mov eax, DWORD PTR [esp +
571 ; OPTM1: movzx eax, 577 ; OPTM1: movzx eax,
572 578
573 define internal i32 @trunc64To8Unsigned(i64 %a) { 579 define internal i32 @trunc64To8Unsigned(i64 %a) {
574 entry: 580 entry:
575 %conv = trunc i64 %a to i8 581 %conv = trunc i64 %a to i8
576 %conv.ret_ext = zext i8 %conv to i32 582 %conv.ret_ext = zext i8 %conv to i32
577 ret i32 %conv.ret_ext 583 ret i32 %conv.ret_ext
578 } 584 }
579 ; CHECK-LABEL: trunc64To8Unsigned 585 ; CHECK-LABEL: trunc64To8Unsigned
580 ; CHECK: mov eax, dword ptr [esp + 4] 586 ; CHECK: mov eax,DWORD ptr [esp+4]
581 ; CHECK-NEXT: movzx eax, al 587 ; CHECK-NEXT: movzx eax, al
582 ; 588 ;
583 ; OPTM1-LABEL: trunc64To8Unsigned 589 ; OPTM1-LABEL: trunc64To8Unsigned
584 ; OPTM1: mov eax, dword ptr [esp + 590 ; OPTM1: mov eax, DWORD PTR [esp +
585 ; OPTM1: movzx eax, 591 ; OPTM1: movzx eax,
586 592
587 define internal i32 @trunc64To1(i64 %a) { 593 define internal i32 @trunc64To1(i64 %a) {
588 entry: 594 entry:
589 ; %tobool = icmp ne i64 %a, 0 595 ; %tobool = icmp ne i64 %a, 0
590 %tobool = trunc i64 %a to i1 596 %tobool = trunc i64 %a to i1
591 %tobool.ret_ext = zext i1 %tobool to i32 597 %tobool.ret_ext = zext i1 %tobool to i32
592 ret i32 %tobool.ret_ext 598 ret i32 %tobool.ret_ext
593 } 599 }
594 ; CHECK-LABEL: trunc64To1 600 ; CHECK-LABEL: trunc64To1
595 ; CHECK: mov eax, dword ptr [esp + 4] 601 ; CHECK: mov eax,DWORD ptr [esp+4]
596 ; CHECK: and eax, 1 602 ; CHECK: and eax, 1
597 ; CHECK: and eax, 1 603 ; CHECK: and eax, 1
598 ; 604 ;
599 ; OPTM1-LABEL: trunc64To1 605 ; OPTM1-LABEL: trunc64To1
600 ; OPTM1: mov eax, dword ptr [esp + 606 ; OPTM1: mov eax, DWORD PTR [esp +
601 ; OPTM1: and eax, 1 607 ; OPTM1: and eax, 1
602 ; OPTM1: and eax, 1 608 ; OPTM1: and eax, 1
603 609
604 define internal i64 @sext32To64(i32 %a) { 610 define internal i64 @sext32To64(i32 %a) {
605 entry: 611 entry:
606 %conv = sext i32 %a to i64 612 %conv = sext i32 %a to i64
607 ret i64 %conv 613 ret i64 %conv
608 } 614 }
609 ; CHECK-LABEL: sext32To64 615 ; CHECK-LABEL: sext32To64
610 ; CHECK: mov 616 ; CHECK: mov
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 ; OPTM1: shl {{.*}}, 31 664 ; OPTM1: shl {{.*}}, 31
659 ; OPTM1: sar {{.*}}, 31 665 ; OPTM1: sar {{.*}}, 31
660 666
661 define internal i64 @zext32To64(i32 %a) { 667 define internal i64 @zext32To64(i32 %a) {
662 entry: 668 entry:
663 %conv = zext i32 %a to i64 669 %conv = zext i32 %a to i64
664 ret i64 %conv 670 ret i64 %conv
665 } 671 }
666 ; CHECK-LABEL: zext32To64 672 ; CHECK-LABEL: zext32To64
667 ; CHECK: mov 673 ; CHECK: mov
668 ; CHECK: mov {{.*}}, 0 674 ; CHECK: mov {{.*}},0
669 ; 675 ;
670 ; OPTM1-LABEL: zext32To64 676 ; OPTM1-LABEL: zext32To64
671 ; OPTM1: mov 677 ; OPTM1: mov
672 ; OPTM1: mov {{.*}}, 0 678 ; OPTM1: mov {{.*}}, 0
673 679
674 define internal i64 @zext16To64(i32 %a) { 680 define internal i64 @zext16To64(i32 %a) {
675 entry: 681 entry:
676 %a.arg_trunc = trunc i32 %a to i16 682 %a.arg_trunc = trunc i32 %a to i16
677 %conv = zext i16 %a.arg_trunc to i64 683 %conv = zext i16 %a.arg_trunc to i64
678 ret i64 %conv 684 ret i64 %conv
679 } 685 }
680 ; CHECK-LABEL: zext16To64 686 ; CHECK-LABEL: zext16To64
681 ; CHECK: movzx 687 ; CHECK: movzx
682 ; CHECK: mov {{.*}}, 0 688 ; CHECK: mov {{.*}},0
683 ; 689 ;
684 ; OPTM1-LABEL: zext16To64 690 ; OPTM1-LABEL: zext16To64
685 ; OPTM1: movzx 691 ; OPTM1: movzx
686 ; OPTM1: mov {{.*}}, 0 692 ; OPTM1: mov {{.*}}, 0
687 693
688 define internal i64 @zext8To64(i32 %a) { 694 define internal i64 @zext8To64(i32 %a) {
689 entry: 695 entry:
690 %a.arg_trunc = trunc i32 %a to i8 696 %a.arg_trunc = trunc i32 %a to i8
691 %conv = zext i8 %a.arg_trunc to i64 697 %conv = zext i8 %a.arg_trunc to i64
692 ret i64 %conv 698 ret i64 %conv
693 } 699 }
694 ; CHECK-LABEL: zext8To64 700 ; CHECK-LABEL: zext8To64
695 ; CHECK: movzx 701 ; CHECK: movzx
696 ; CHECK: mov {{.*}}, 0 702 ; CHECK: mov {{.*}},0
697 ; 703 ;
698 ; OPTM1-LABEL: zext8To64 704 ; OPTM1-LABEL: zext8To64
699 ; OPTM1: movzx 705 ; OPTM1: movzx
700 ; OPTM1: mov {{.*}}, 0 706 ; OPTM1: mov {{.*}}, 0
701 707
702 define internal i64 @zext1To64(i32 %a) { 708 define internal i64 @zext1To64(i32 %a) {
703 entry: 709 entry:
704 %a.arg_trunc = trunc i32 %a to i1 710 %a.arg_trunc = trunc i32 %a to i1
705 %conv = zext i1 %a.arg_trunc to i64 711 %conv = zext i1 %a.arg_trunc to i64
706 ret i64 %conv 712 ret i64 %conv
707 } 713 }
708 ; CHECK-LABEL: zext1To64 714 ; CHECK-LABEL: zext1To64
709 ; CHECK: and {{.*}}, 1 715 ; CHECK: and {{.*}}, 1
710 ; CHECK: mov {{.*}}, 0 716 ; CHECK: mov {{.*}},0
711 ; 717 ;
712 ; OPTM1-LABEL: zext1To64 718 ; OPTM1-LABEL: zext1To64
713 ; OPTM1: and {{.*}}, 1 719 ; OPTM1: and {{.*}}, 1
714 ; OPTM1: mov {{.*}}, 0 720 ; OPTM1: mov {{.*}}, 0
715 721
716 define internal void @icmpEq64(i64 %a, i64 %b, i64 %c, i64 %d) { 722 define internal void @icmpEq64(i64 %a, i64 %b, i64 %c, i64 %d) {
717 entry: 723 entry:
718 %cmp = icmp eq i64 %a, %b 724 %cmp = icmp eq i64 %a, %b
719 br i1 %cmp, label %if.then, label %if.end 725 br i1 %cmp, label %if.then, label %if.end
720 726
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
1135 ; OPTM1: cmp 1141 ; OPTM1: cmp
1136 ; OPTM1: jbe 1142 ; OPTM1: jbe
1137 1143
1138 define internal i64 @load64(i32 %a) { 1144 define internal i64 @load64(i32 %a) {
1139 entry: 1145 entry:
1140 %__1 = inttoptr i32 %a to i64* 1146 %__1 = inttoptr i32 %a to i64*
1141 %v0 = load i64* %__1, align 1 1147 %v0 = load i64* %__1, align 1
1142 ret i64 %v0 1148 ret i64 %v0
1143 } 1149 }
1144 ; CHECK-LABEL: load64 1150 ; CHECK-LABEL: load64
1145 ; CHECK: mov e[[REGISTER:[a-z]+]], dword ptr [esp + 4] 1151 ; CHECK: mov e[[REGISTER:[a-z]+]],DWORD ptr [esp+4]
1146 ; CHECK-NEXT: mov {{.*}}, dword ptr [e[[REGISTER]]] 1152 ; CHECK-NEXT: mov {{.*}}, DWORD PTR [e[[REGISTER]]]
1147 ; CHECK-NEXT: mov {{.*}}, dword ptr [e[[REGISTER]] + 4] 1153 ; CHECK-NEXT: mov {{.*}}, DWORD PTR [e[[REGISTER]] + 4]
1148 ; 1154 ;
1149 ; OPTM1-LABEL: load64 1155 ; OPTM1-LABEL: load64
1150 ; OPTM1: mov e{{..}}, dword ptr [e{{..}}] 1156 ; OPTM1: mov e{{..}}, DWORD PTR [e{{..}}]
1151 ; OPTM1: mov e{{..}}, dword ptr [e{{..}} + 4] 1157 ; OPTM1: mov e{{..}}, DWORD PTR [e{{..}} + 4]
1152 1158
1153 define internal void @store64(i32 %a, i64 %value) { 1159 define internal void @store64(i32 %a, i64 %value) {
1154 entry: 1160 entry:
1155 %__2 = inttoptr i32 %a to i64* 1161 %__2 = inttoptr i32 %a to i64*
1156 store i64 %value, i64* %__2, align 1 1162 store i64 %value, i64* %__2, align 1
1157 ret void 1163 ret void
1158 } 1164 }
1159 ; CHECK-LABEL: store64 1165 ; CHECK-LABEL: store64
1160 ; CHECK: mov e[[REGISTER:[a-z]+]], dword ptr [esp + 4] 1166 ; CHECK: mov e[[REGISTER:[a-z]+]],DWORD ptr [esp+4]
1161 ; CHECK: mov dword ptr [e[[REGISTER]] + 4], 1167 ; CHECK: mov DWORD PTR [e[[REGISTER]]+4],
1162 ; CHECK: mov dword ptr [e[[REGISTER]]], 1168 ; CHECK: mov DWORD PTR [e[[REGISTER]]],
1163 ; 1169 ;
1164 ; OPTM1-LABEL: store64 1170 ; OPTM1-LABEL: store64
1165 ; OPTM1: mov dword ptr [e[[REGISTER:[a-z]+]] + 4], 1171 ; OPTM1: mov DWORD PTR [e[[REGISTER:[a-z]+]] + 4],
1166 ; OPTM1: mov dword ptr [e[[REGISTER]]], 1172 ; OPTM1: mov DWORD PTR [e[[REGISTER]]],
1167 1173
1168 define internal void @store64Const(i32 %a) { 1174 define internal void @store64Const(i32 %a) {
1169 entry: 1175 entry:
1170 %__1 = inttoptr i32 %a to i64* 1176 %__1 = inttoptr i32 %a to i64*
1171 store i64 -2401053092306725256, i64* %__1, align 1 1177 store i64 -2401053092306725256, i64* %__1, align 1
1172 ret void 1178 ret void
1173 } 1179 }
1174 ; CHECK-LABEL: store64Const 1180 ; CHECK-LABEL: store64Const
1175 ; CHECK: mov e[[REGISTER:[a-z]+]], dword ptr [esp + 4] 1181 ; CHECK: mov e[[REGISTER:[a-z]+]],DWORD ptr [esp+4]
1176 ; CHECK: mov dword ptr [e[[REGISTER]] + 4], 3735928559 1182 ; CHECK: mov DWORD PTR [e[[REGISTER]]+4],3735928559
1177 ; CHECK: mov dword ptr [e[[REGISTER]]], 305419896 1183 ; CHECK: mov DWORD PTR [e[[REGISTER]]],305419896
1178 ; 1184 ;
1179 ; OPTM1-LABEL: store64Const 1185 ; OPTM1-LABEL: store64Const
1180 ; OPTM1: mov dword ptr [e[[REGISTER:[a-z]+]] + 4], 3735928559 1186 ; OPTM1: mov DWORD PTR [e[[REGISTER:[a-z]+]] + 4], 3735928559
1181 ; OPTM1: mov dword ptr [e[[REGISTER]]], 305419896 1187 ; OPTM1: mov DWORD PTR [e[[REGISTER]]], 305419896
1182 1188
1183 define internal i64 @select64VarVar(i64 %a, i64 %b) { 1189 define internal i64 @select64VarVar(i64 %a, i64 %b) {
1184 entry: 1190 entry:
1185 %cmp = icmp ult i64 %a, %b 1191 %cmp = icmp ult i64 %a, %b
1186 %cond = select i1 %cmp, i64 %a, i64 %b 1192 %cond = select i1 %cmp, i64 %a, i64 %b
1187 ret i64 %cond 1193 ret i64 %cond
1188 } 1194 }
1189 ; CHECK-LABEL: select64VarVar 1195 ; CHECK-LABEL: select64VarVar
1190 ; CHECK: cmp 1196 ; CHECK: cmp
1191 ; CHECK: jb 1197 ; CHECK: jb
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1298 1304
1299 if.end3: ; preds = %if.then2, %if.end 1305 if.end3: ; preds = %if.then2, %if.end
1300 ret void 1306 ret void
1301 } 1307 }
1302 ; The following checks are not strictly necessary since one of the RUN 1308 ; The following checks are not strictly necessary since one of the RUN
1303 ; lines actually runs the output through the assembler. 1309 ; lines actually runs the output through the assembler.
1304 ; CHECK-LABEL: icmpLt64Imm 1310 ; CHECK-LABEL: icmpLt64Imm
1305 ; CHECK-NOT: cmp {{[0-9]+}}, 1311 ; CHECK-NOT: cmp {{[0-9]+}},
1306 ; OPTM1-LABEL: icmpLt64Imm 1312 ; OPTM1-LABEL: icmpLt64Imm
1307 ; OPTM1-NOT: cmp {{[0-9]+}}, 1313 ; OPTM1-NOT: cmp {{[0-9]+}},
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698