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

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

Issue 1151663004: Subzero ARM: do lowerIcmp, lowerBr, and a bit of lowerCall. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: fix Created 5 years, 7 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/IceTargetLoweringARM32.def ('k') | tests_lit/llvm2ice_tests/branch-opt.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 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \ 5 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \
6 ; RUN: | FileCheck %s 6 ; RUN: --target x8632 -i %s --args -O2 \
7 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 \ 7 ; RUN: | %if --need=target_X8632 --command FileCheck %s
8 ; RUN: | FileCheck --check-prefix=OPTM1 %s 8
9 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \
10 ; RUN: --target x8632 -i %s --args -Om1 \
11 ; RUN: | %if --need=target_X8632 --command FileCheck --check-prefix=OPTM1 %s
12
13 ; TODO(jvoung): Stop skipping unimplemented parts (via --skip-unimplemented)
14 ; once enough infrastructure is in. Also, switch to --filetype=obj
15 ; when possible.
16 ; RUN: %if --need=target_ARM32 --command %p2i --filetype=asm --assemble \
17 ; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \
18 ; RUN: | %if --need=target_ARM32 --command FileCheck --check-prefix ARM32 %s
9 19
10 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 20 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4
11 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 21 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4
12 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8 22 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8
13 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4 23 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4
14 24
15 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) { 25 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) {
16 entry: 26 entry:
17 ret i32 %b 27 ret i32 %b
18 } 28 }
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 ret i64 %a 117 ret i64 %a
108 } 118 }
109 ; CHECK-LABEL: return64BitArg 119 ; CHECK-LABEL: return64BitArg
110 ; CHECK: mov {{.*}},DWORD PTR [esp+0x4] 120 ; CHECK: mov {{.*}},DWORD PTR [esp+0x4]
111 ; CHECK: mov {{.*}},DWORD PTR [esp+0x8] 121 ; CHECK: mov {{.*}},DWORD PTR [esp+0x8]
112 ; 122 ;
113 ; OPTM1-LABEL: return64BitArg 123 ; OPTM1-LABEL: return64BitArg
114 ; OPTM1: mov {{.*}},DWORD PTR [esp+0x4] 124 ; OPTM1: mov {{.*}},DWORD PTR [esp+0x4]
115 ; OPTM1: mov {{.*}},DWORD PTR [esp+0x8] 125 ; OPTM1: mov {{.*}},DWORD PTR [esp+0x8]
116 126
127 ; Nothing to do for ARM O2 -- arg and return value are in r0,r1.
128 ; ARM32-LABEL: return64BitArg
129 ; ARM32-NEXT: bx lr
130
117 define internal i64 @return64BitConst() { 131 define internal i64 @return64BitConst() {
118 entry: 132 entry:
119 ret i64 -2401053092306725256 133 ret i64 -2401053092306725256
120 } 134 }
121 ; CHECK-LABEL: return64BitConst 135 ; CHECK-LABEL: return64BitConst
122 ; CHECK: mov eax,0x12345678 136 ; CHECK: mov eax,0x12345678
123 ; CHECK: mov edx,0xdeadbeef 137 ; CHECK: mov edx,0xdeadbeef
124 ; 138 ;
125 ; OPTM1-LABEL: return64BitConst 139 ; OPTM1-LABEL: return64BitConst
126 ; OPTM1: mov eax,0x12345678 140 ; OPTM1: mov eax,0x12345678
127 ; OPTM1: mov edx,0xdeadbeef 141 ; OPTM1: mov edx,0xdeadbeef
128 142
143 ; ARM32-LABEL: return64BitConst
144 ; ARM32: movw r0, #22136 ; 0x5678
145 ; ARM32: movt r0, #4660 ; 0x1234
146 ; ARM32: movw r1, #48879 ; 0xbeef
147 ; ARM32: movt r1, #57005 ; 0xdead
148
129 define internal i64 @add64BitSigned(i64 %a, i64 %b) { 149 define internal i64 @add64BitSigned(i64 %a, i64 %b) {
130 entry: 150 entry:
131 %add = add i64 %b, %a 151 %add = add i64 %b, %a
132 ret i64 %add 152 ret i64 %add
133 } 153 }
134 ; CHECK-LABEL: add64BitSigned 154 ; CHECK-LABEL: add64BitSigned
135 ; CHECK: add 155 ; CHECK: add
136 ; CHECK: adc 156 ; CHECK: adc
137 ; 157 ;
138 ; OPTM1-LABEL: add64BitSigned 158 ; OPTM1-LABEL: add64BitSigned
139 ; OPTM1: add 159 ; OPTM1: add
140 ; OPTM1: adc 160 ; OPTM1: adc
141 161
162 ; ARM32-LABEL: add64BitSigned
163 ; ARM32: adds
164 ; ARM32: adc
165
142 define internal i64 @add64BitUnsigned(i64 %a, i64 %b) { 166 define internal i64 @add64BitUnsigned(i64 %a, i64 %b) {
143 entry: 167 entry:
144 %add = add i64 %b, %a 168 %add = add i64 %b, %a
145 ret i64 %add 169 ret i64 %add
146 } 170 }
147 ; CHECK-LABEL: add64BitUnsigned 171 ; CHECK-LABEL: add64BitUnsigned
148 ; CHECK: add 172 ; CHECK: add
149 ; CHECK: adc 173 ; CHECK: adc
150 ; 174 ;
151 ; OPTM1-LABEL: add64BitUnsigned 175 ; OPTM1-LABEL: add64BitUnsigned
152 ; OPTM1: add 176 ; OPTM1: add
153 ; OPTM1: adc 177 ; OPTM1: adc
154 178
179 ; ARM32-LABEL: add64BitUnsigned
180 ; ARM32: adds
181 ; ARM32: adc
182
155 define internal i64 @sub64BitSigned(i64 %a, i64 %b) { 183 define internal i64 @sub64BitSigned(i64 %a, i64 %b) {
156 entry: 184 entry:
157 %sub = sub i64 %a, %b 185 %sub = sub i64 %a, %b
158 ret i64 %sub 186 ret i64 %sub
159 } 187 }
160 ; CHECK-LABEL: sub64BitSigned 188 ; CHECK-LABEL: sub64BitSigned
161 ; CHECK: sub 189 ; CHECK: sub
162 ; CHECK: sbb 190 ; CHECK: sbb
163 ; 191 ;
164 ; OPTM1-LABEL: sub64BitSigned 192 ; OPTM1-LABEL: sub64BitSigned
165 ; OPTM1: sub 193 ; OPTM1: sub
166 ; OPTM1: sbb 194 ; OPTM1: sbb
167 195
196 ; ARM32-LABEL: sub64BitSigned
197 ; ARM32: subs
198 ; ARM32: sbc
199
168 define internal i64 @sub64BitUnsigned(i64 %a, i64 %b) { 200 define internal i64 @sub64BitUnsigned(i64 %a, i64 %b) {
169 entry: 201 entry:
170 %sub = sub i64 %a, %b 202 %sub = sub i64 %a, %b
171 ret i64 %sub 203 ret i64 %sub
172 } 204 }
173 ; CHECK-LABEL: sub64BitUnsigned 205 ; CHECK-LABEL: sub64BitUnsigned
174 ; CHECK: sub 206 ; CHECK: sub
175 ; CHECK: sbb 207 ; CHECK: sbb
176 ; 208 ;
177 ; OPTM1-LABEL: sub64BitUnsigned 209 ; OPTM1-LABEL: sub64BitUnsigned
178 ; OPTM1: sub 210 ; OPTM1: sub
179 ; OPTM1: sbb 211 ; OPTM1: sbb
180 212
213 ; ARM32-LABEL: sub64BitUnsigned
214 ; ARM32: subs
215 ; ARM32: sbc
216
181 define internal i64 @mul64BitSigned(i64 %a, i64 %b) { 217 define internal i64 @mul64BitSigned(i64 %a, i64 %b) {
182 entry: 218 entry:
183 %mul = mul i64 %b, %a 219 %mul = mul i64 %b, %a
184 ret i64 %mul 220 ret i64 %mul
185 } 221 }
186 ; CHECK-LABEL: mul64BitSigned 222 ; CHECK-LABEL: mul64BitSigned
187 ; CHECK: imul 223 ; CHECK: imul
188 ; CHECK: imul 224 ; CHECK: imul
189 ; CHECK: mul 225 ; CHECK: mul
190 ; CHECK: add 226 ; CHECK: add
191 ; CHECK: add 227 ; CHECK: add
192 ; 228 ;
193 ; OPTM1-LABEL: mul64BitSigned 229 ; OPTM1-LABEL: mul64BitSigned
194 ; OPTM1: imul 230 ; OPTM1: imul
195 ; OPTM1: imul 231 ; OPTM1: imul
196 ; OPTM1: mul 232 ; OPTM1: mul
197 ; OPTM1: add 233 ; OPTM1: add
198 ; OPTM1: add 234 ; OPTM1: add
199 235
236 ; ARM32-LABEL: mul64BitSigned
237 ; ARM32: mul
238 ; ARM32: mla
239 ; ARM32: umull
240 ; ARM32: add
241
200 define internal i64 @mul64BitUnsigned(i64 %a, i64 %b) { 242 define internal i64 @mul64BitUnsigned(i64 %a, i64 %b) {
201 entry: 243 entry:
202 %mul = mul i64 %b, %a 244 %mul = mul i64 %b, %a
203 ret i64 %mul 245 ret i64 %mul
204 } 246 }
205 ; CHECK-LABEL: mul64BitUnsigned 247 ; CHECK-LABEL: mul64BitUnsigned
206 ; CHECK: imul 248 ; CHECK: imul
207 ; CHECK: imul 249 ; CHECK: imul
208 ; CHECK: mul 250 ; CHECK: mul
209 ; CHECK: add 251 ; CHECK: add
210 ; CHECK: add 252 ; CHECK: add
211 ; 253 ;
212 ; OPTM1-LABEL: mul64BitUnsigned 254 ; OPTM1-LABEL: mul64BitUnsigned
213 ; OPTM1: imul 255 ; OPTM1: imul
214 ; OPTM1: imul 256 ; OPTM1: imul
215 ; OPTM1: mul 257 ; OPTM1: mul
216 ; OPTM1: add 258 ; OPTM1: add
217 ; OPTM1: add 259 ; OPTM1: add
218 260
261 ; ARM32-LABEL: mul64BitUnsigned
262 ; ARM32: mul
263 ; ARM32: mla
264 ; ARM32: umull
265 ; ARM32: add
266
219 define internal i64 @div64BitSigned(i64 %a, i64 %b) { 267 define internal i64 @div64BitSigned(i64 %a, i64 %b) {
220 entry: 268 entry:
221 %div = sdiv i64 %a, %b 269 %div = sdiv i64 %a, %b
222 ret i64 %div 270 ret i64 %div
223 } 271 }
224 ; CHECK-LABEL: div64BitSigned 272 ; CHECK-LABEL: div64BitSigned
225 ; CHECK: call {{.*}} R_{{.*}} __divdi3 273 ; CHECK: call {{.*}} R_{{.*}} __divdi3
226 274
227 ; OPTM1-LABEL: div64BitSigned 275 ; OPTM1-LABEL: div64BitSigned
228 ; OPTM1: call {{.*}} R_{{.*}} __divdi3 276 ; OPTM1: call {{.*}} R_{{.*}} __divdi3
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 ret i64 %and 454 ret i64 %and
407 } 455 }
408 ; CHECK-LABEL: and64BitSigned 456 ; CHECK-LABEL: and64BitSigned
409 ; CHECK: and 457 ; CHECK: and
410 ; CHECK: and 458 ; CHECK: and
411 ; 459 ;
412 ; OPTM1-LABEL: and64BitSigned 460 ; OPTM1-LABEL: and64BitSigned
413 ; OPTM1: and 461 ; OPTM1: and
414 ; OPTM1: and 462 ; OPTM1: and
415 463
464 ; ARM32-LABEL: and64BitSigned
465 ; ARM32: and
466 ; ARM32: and
467
416 define internal i64 @and64BitUnsigned(i64 %a, i64 %b) { 468 define internal i64 @and64BitUnsigned(i64 %a, i64 %b) {
417 entry: 469 entry:
418 %and = and i64 %b, %a 470 %and = and i64 %b, %a
419 ret i64 %and 471 ret i64 %and
420 } 472 }
421 ; CHECK-LABEL: and64BitUnsigned 473 ; CHECK-LABEL: and64BitUnsigned
422 ; CHECK: and 474 ; CHECK: and
423 ; CHECK: and 475 ; CHECK: and
424 ; 476 ;
425 ; OPTM1-LABEL: and64BitUnsigned 477 ; OPTM1-LABEL: and64BitUnsigned
426 ; OPTM1: and 478 ; OPTM1: and
427 ; OPTM1: and 479 ; OPTM1: and
428 480
481 ; ARM32-LABEL: and64BitUnsigned
482 ; ARM32: and
483 ; ARM32: and
484
429 define internal i64 @or64BitSigned(i64 %a, i64 %b) { 485 define internal i64 @or64BitSigned(i64 %a, i64 %b) {
430 entry: 486 entry:
431 %or = or i64 %b, %a 487 %or = or i64 %b, %a
432 ret i64 %or 488 ret i64 %or
433 } 489 }
434 ; CHECK-LABEL: or64BitSigned 490 ; CHECK-LABEL: or64BitSigned
435 ; CHECK: or 491 ; CHECK: or
436 ; CHECK: or 492 ; CHECK: or
437 ; 493 ;
438 ; OPTM1-LABEL: or64BitSigned 494 ; OPTM1-LABEL: or64BitSigned
439 ; OPTM1: or 495 ; OPTM1: or
440 ; OPTM1: or 496 ; OPTM1: or
441 497
498 ; ARM32-LABEL: or64BitSigned
499 ; ARM32: orr
500 ; ARM32: orr
501
442 define internal i64 @or64BitUnsigned(i64 %a, i64 %b) { 502 define internal i64 @or64BitUnsigned(i64 %a, i64 %b) {
443 entry: 503 entry:
444 %or = or i64 %b, %a 504 %or = or i64 %b, %a
445 ret i64 %or 505 ret i64 %or
446 } 506 }
447 ; CHECK-LABEL: or64BitUnsigned 507 ; CHECK-LABEL: or64BitUnsigned
448 ; CHECK: or 508 ; CHECK: or
449 ; CHECK: or 509 ; CHECK: or
450 ; 510 ;
451 ; OPTM1-LABEL: or64BitUnsigned 511 ; OPTM1-LABEL: or64BitUnsigned
452 ; OPTM1: or 512 ; OPTM1: or
453 ; OPTM1: or 513 ; OPTM1: or
454 514
515 ; ARM32-LABEL: or64BitUnsigned
516 ; ARM32: orr
517 ; ARM32: orr
518
455 define internal i64 @xor64BitSigned(i64 %a, i64 %b) { 519 define internal i64 @xor64BitSigned(i64 %a, i64 %b) {
456 entry: 520 entry:
457 %xor = xor i64 %b, %a 521 %xor = xor i64 %b, %a
458 ret i64 %xor 522 ret i64 %xor
459 } 523 }
460 ; CHECK-LABEL: xor64BitSigned 524 ; CHECK-LABEL: xor64BitSigned
461 ; CHECK: xor 525 ; CHECK: xor
462 ; CHECK: xor 526 ; CHECK: xor
463 ; 527 ;
464 ; OPTM1-LABEL: xor64BitSigned 528 ; OPTM1-LABEL: xor64BitSigned
465 ; OPTM1: xor 529 ; OPTM1: xor
466 ; OPTM1: xor 530 ; OPTM1: xor
467 531
532 ; ARM32-LABEL: xor64BitSigned
533 ; ARM32: eor
534 ; ARM32: eor
535
468 define internal i64 @xor64BitUnsigned(i64 %a, i64 %b) { 536 define internal i64 @xor64BitUnsigned(i64 %a, i64 %b) {
469 entry: 537 entry:
470 %xor = xor i64 %b, %a 538 %xor = xor i64 %b, %a
471 ret i64 %xor 539 ret i64 %xor
472 } 540 }
473 ; CHECK-LABEL: xor64BitUnsigned 541 ; CHECK-LABEL: xor64BitUnsigned
474 ; CHECK: xor 542 ; CHECK: xor
475 ; CHECK: xor 543 ; CHECK: xor
476 ; 544 ;
477 ; OPTM1-LABEL: xor64BitUnsigned 545 ; OPTM1-LABEL: xor64BitUnsigned
478 ; OPTM1: xor 546 ; OPTM1: xor
479 ; OPTM1: xor 547 ; OPTM1: xor
480 548
549 ; ARM32-LABEL: xor64BitUnsigned
550 ; ARM32: eor
551 ; ARM32: eor
552
481 define internal i32 @trunc64To32Signed(i64 %a) { 553 define internal i32 @trunc64To32Signed(i64 %a) {
482 entry: 554 entry:
483 %conv = trunc i64 %a to i32 555 %conv = trunc i64 %a to i32
484 ret i32 %conv 556 ret i32 %conv
485 } 557 }
486 ; CHECK-LABEL: trunc64To32Signed 558 ; CHECK-LABEL: trunc64To32Signed
487 ; CHECK: mov eax,DWORD PTR [esp+0x4] 559 ; CHECK: mov eax,DWORD PTR [esp+0x4]
488 ; 560 ;
489 ; OPTM1-LABEL: trunc64To32Signed 561 ; OPTM1-LABEL: trunc64To32Signed
490 ; OPTM1: mov eax,DWORD PTR [esp+ 562 ; OPTM1: mov eax,DWORD PTR [esp+
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 ; CHECK: call 811 ; CHECK: call
740 ; 812 ;
741 ; OPTM1-LABEL: icmpEq64 813 ; OPTM1-LABEL: icmpEq64
742 ; OPTM1: jne 814 ; OPTM1: jne
743 ; OPTM1: je 815 ; OPTM1: je
744 ; OPTM1: call 816 ; OPTM1: call
745 ; OPTM1: jne 817 ; OPTM1: jne
746 ; OPTM1: je 818 ; OPTM1: je
747 ; OPTM1: call 819 ; OPTM1: call
748 820
821 ; ARM32-LABEL: icmpEq64
822 ; ARM32: cmp
823 ; ARM32: cmpeq
824 ; ARM32: moveq
825 ; ARM32: movne
826 ; ARM32: beq
827 ; ARM32: bl
828 ; ARM32: cmp
829 ; ARM32: cmpeq
830 ; ARM32: moveq
831 ; ARM32: movne
832 ; ARM32: beq
833 ; ARM32: bl
834
749 declare void @func() 835 declare void @func()
750 836
751 define internal void @icmpNe64(i64 %a, i64 %b, i64 %c, i64 %d) { 837 define internal void @icmpNe64(i64 %a, i64 %b, i64 %c, i64 %d) {
752 entry: 838 entry:
753 %cmp = icmp ne i64 %a, %b 839 %cmp = icmp ne i64 %a, %b
754 br i1 %cmp, label %if.then, label %if.end 840 br i1 %cmp, label %if.then, label %if.end
755 841
756 if.then: ; preds = %entry 842 if.then: ; preds = %entry
757 call void @func() 843 call void @func()
758 br label %if.end 844 br label %if.end
(...skipping 18 matching lines...) Expand all
777 ; CHECK: call 863 ; CHECK: call
778 ; 864 ;
779 ; OPTM1-LABEL: icmpNe64 865 ; OPTM1-LABEL: icmpNe64
780 ; OPTM1: jne 866 ; OPTM1: jne
781 ; OPTM1: jne 867 ; OPTM1: jne
782 ; OPTM1: call 868 ; OPTM1: call
783 ; OPTM1: jne 869 ; OPTM1: jne
784 ; OPTM1: jne 870 ; OPTM1: jne
785 ; OPTM1: call 871 ; OPTM1: call
786 872
873 ; ARM32-LABEL: icmpNe64
874 ; ARM32: cmp
875 ; ARM32: cmpeq
876 ; ARM32: movne
877 ; ARM32: moveq
878 ; ARM32: beq
879 ; ARM32: bl
880 ; ARM32: cmp
881 ; ARM32: cmpeq
882 ; ARM32: movne
883 ; ARM32: moveq
884 ; ARM32: beq
885 ; ARM32: bl
886
787 define internal void @icmpGt64(i64 %a, i64 %b, i64 %c, i64 %d) { 887 define internal void @icmpGt64(i64 %a, i64 %b, i64 %c, i64 %d) {
788 entry: 888 entry:
789 %cmp = icmp ugt i64 %a, %b 889 %cmp = icmp ugt i64 %a, %b
790 br i1 %cmp, label %if.then, label %if.end 890 br i1 %cmp, label %if.then, label %if.end
791 891
792 if.then: ; preds = %entry 892 if.then: ; preds = %entry
793 call void @func() 893 call void @func()
794 br label %if.end 894 br label %if.end
795 895
796 if.end: ; preds = %if.then, %entry 896 if.end: ; preds = %if.then, %entry
(...skipping 20 matching lines...) Expand all
817 ; OPTM1-LABEL: icmpGt64 917 ; OPTM1-LABEL: icmpGt64
818 ; OPTM1: ja 918 ; OPTM1: ja
819 ; OPTM1: jb 919 ; OPTM1: jb
820 ; OPTM1: ja 920 ; OPTM1: ja
821 ; OPTM1: call 921 ; OPTM1: call
822 ; OPTM1: jg 922 ; OPTM1: jg
823 ; OPTM1: jl 923 ; OPTM1: jl
824 ; OPTM1: ja 924 ; OPTM1: ja
825 ; OPTM1: call 925 ; OPTM1: call
826 926
927 ; ARM32-LABEL: icmpGt64
928 ; ARM32: cmp
929 ; ARM32: cmpeq
930 ; ARM32: movhi
931 ; ARM32: movls
932 ; ARM32: beq
933 ; ARM32: bl
934 ; ARM32: cmp
935 ; ARM32: sbcs
936 ; ARM32: movlt
937 ; ARM32: movge
938 ; ARM32: beq
939 ; ARM32: bl
940
827 define internal void @icmpGe64(i64 %a, i64 %b, i64 %c, i64 %d) { 941 define internal void @icmpGe64(i64 %a, i64 %b, i64 %c, i64 %d) {
828 entry: 942 entry:
829 %cmp = icmp uge i64 %a, %b 943 %cmp = icmp uge i64 %a, %b
830 br i1 %cmp, label %if.then, label %if.end 944 br i1 %cmp, label %if.then, label %if.end
831 945
832 if.then: ; preds = %entry 946 if.then: ; preds = %entry
833 call void @func() 947 call void @func()
834 br label %if.end 948 br label %if.end
835 949
836 if.end: ; preds = %if.then, %entry 950 if.end: ; preds = %if.then, %entry
(...skipping 20 matching lines...) Expand all
857 ; OPTM1-LABEL: icmpGe64 971 ; OPTM1-LABEL: icmpGe64
858 ; OPTM1: ja 972 ; OPTM1: ja
859 ; OPTM1: jb 973 ; OPTM1: jb
860 ; OPTM1: jae 974 ; OPTM1: jae
861 ; OPTM1: call 975 ; OPTM1: call
862 ; OPTM1: jg 976 ; OPTM1: jg
863 ; OPTM1: jl 977 ; OPTM1: jl
864 ; OPTM1: jae 978 ; OPTM1: jae
865 ; OPTM1: call 979 ; OPTM1: call
866 980
981 ; ARM32-LABEL: icmpGe64
982 ; ARM32: cmp
983 ; ARM32: cmpeq
984 ; ARM32: movcs
985 ; ARM32: movcc
986 ; ARM32: beq
987 ; ARM32: bl
988 ; ARM32: cmp
989 ; ARM32: sbcs
990 ; ARM32: movge
991 ; ARM32: movlt
992 ; ARM32: beq
993 ; ARM32: bl
994
867 define internal void @icmpLt64(i64 %a, i64 %b, i64 %c, i64 %d) { 995 define internal void @icmpLt64(i64 %a, i64 %b, i64 %c, i64 %d) {
868 entry: 996 entry:
869 %cmp = icmp ult i64 %a, %b 997 %cmp = icmp ult i64 %a, %b
870 br i1 %cmp, label %if.then, label %if.end 998 br i1 %cmp, label %if.then, label %if.end
871 999
872 if.then: ; preds = %entry 1000 if.then: ; preds = %entry
873 call void @func() 1001 call void @func()
874 br label %if.end 1002 br label %if.end
875 1003
876 if.end: ; preds = %if.then, %entry 1004 if.end: ; preds = %if.then, %entry
(...skipping 20 matching lines...) Expand all
897 ; OPTM1-LABEL: icmpLt64 1025 ; OPTM1-LABEL: icmpLt64
898 ; OPTM1: jb 1026 ; OPTM1: jb
899 ; OPTM1: ja 1027 ; OPTM1: ja
900 ; OPTM1: jb 1028 ; OPTM1: jb
901 ; OPTM1: call 1029 ; OPTM1: call
902 ; OPTM1: jl 1030 ; OPTM1: jl
903 ; OPTM1: jg 1031 ; OPTM1: jg
904 ; OPTM1: jb 1032 ; OPTM1: jb
905 ; OPTM1: call 1033 ; OPTM1: call
906 1034
1035 ; ARM32-LABEL: icmpLt64
1036 ; ARM32: cmp
1037 ; ARM32: cmpeq
1038 ; ARM32: movcc
1039 ; ARM32: movcs
1040 ; ARM32: beq
1041 ; ARM32: bl
1042 ; ARM32: cmp
1043 ; ARM32: sbcs
1044 ; ARM32: movlt
1045 ; ARM32: movge
1046 ; ARM32: beq
1047 ; ARM32: bl
1048
907 define internal void @icmpLe64(i64 %a, i64 %b, i64 %c, i64 %d) { 1049 define internal void @icmpLe64(i64 %a, i64 %b, i64 %c, i64 %d) {
908 entry: 1050 entry:
909 %cmp = icmp ule i64 %a, %b 1051 %cmp = icmp ule i64 %a, %b
910 br i1 %cmp, label %if.then, label %if.end 1052 br i1 %cmp, label %if.then, label %if.end
911 1053
912 if.then: ; preds = %entry 1054 if.then: ; preds = %entry
913 call void @func() 1055 call void @func()
914 br label %if.end 1056 br label %if.end
915 1057
916 if.end: ; preds = %if.then, %entry 1058 if.end: ; preds = %if.then, %entry
(...skipping 20 matching lines...) Expand all
937 ; OPTM1-LABEL: icmpLe64 1079 ; OPTM1-LABEL: icmpLe64
938 ; OPTM1: jb 1080 ; OPTM1: jb
939 ; OPTM1: ja 1081 ; OPTM1: ja
940 ; OPTM1: jbe 1082 ; OPTM1: jbe
941 ; OPTM1: call 1083 ; OPTM1: call
942 ; OPTM1: jl 1084 ; OPTM1: jl
943 ; OPTM1: jg 1085 ; OPTM1: jg
944 ; OPTM1: jbe 1086 ; OPTM1: jbe
945 ; OPTM1: call 1087 ; OPTM1: call
946 1088
1089 ; ARM32-LABEL: icmpLe64
1090 ; ARM32: cmp
1091 ; ARM32: cmpeq
1092 ; ARM32: movls
1093 ; ARM32: movhi
1094 ; ARM32: beq
1095 ; ARM32: bl
1096 ; ARM32: cmp
1097 ; ARM32: sbcs
1098 ; ARM32: movge
1099 ; ARM32: movlt
1100 ; ARM32: beq
1101 ; ARM32: bl
1102
947 define internal i32 @icmpEq64Bool(i64 %a, i64 %b) { 1103 define internal i32 @icmpEq64Bool(i64 %a, i64 %b) {
948 entry: 1104 entry:
949 %cmp = icmp eq i64 %a, %b 1105 %cmp = icmp eq i64 %a, %b
950 %cmp.ret_ext = zext i1 %cmp to i32 1106 %cmp.ret_ext = zext i1 %cmp to i32
951 ret i32 %cmp.ret_ext 1107 ret i32 %cmp.ret_ext
952 } 1108 }
953 ; CHECK-LABEL: icmpEq64Bool 1109 ; CHECK-LABEL: icmpEq64Bool
954 ; CHECK: jne 1110 ; CHECK: jne
955 ; CHECK: je 1111 ; CHECK: je
956 ; 1112 ;
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
1268 1424
1269 if.end3: ; preds = %if.then2, %if.end 1425 if.end3: ; preds = %if.then2, %if.end
1270 ret void 1426 ret void
1271 } 1427 }
1272 ; The following checks are not strictly necessary since one of the RUN 1428 ; The following checks are not strictly necessary since one of the RUN
1273 ; lines actually runs the output through the assembler. 1429 ; lines actually runs the output through the assembler.
1274 ; CHECK-LABEL: icmpEq64Imm 1430 ; CHECK-LABEL: icmpEq64Imm
1275 ; CHECK-NOT: cmp 0x{{[0-9a-f]+}}, 1431 ; CHECK-NOT: cmp 0x{{[0-9a-f]+}},
1276 ; OPTM1-LABEL: icmpEq64Imm 1432 ; OPTM1-LABEL: icmpEq64Imm
1277 ; OPTM1-LABEL-NOT: cmp 0x{{[0-9a-f]+}}, 1433 ; OPTM1-LABEL-NOT: cmp 0x{{[0-9a-f]+}},
1434 ; ARM32-LABEL: icmpEq64Imm
1435 ; ARM32-NOT: cmp #{{[0-9a-f]+}},
1278 1436
1279 define internal void @icmpLt64Imm() { 1437 define internal void @icmpLt64Imm() {
1280 entry: 1438 entry:
1281 %cmp = icmp ult i64 123, 234 1439 %cmp = icmp ult i64 123, 234
1282 br i1 %cmp, label %if.then, label %if.end 1440 br i1 %cmp, label %if.then, label %if.end
1283 1441
1284 if.then: ; preds = %entry 1442 if.then: ; preds = %entry
1285 call void @func() 1443 call void @func()
1286 br label %if.end 1444 br label %if.end
1287 1445
1288 if.end: ; preds = %if.then, %entry 1446 if.end: ; preds = %if.then, %entry
1289 %cmp1 = icmp slt i64 345, 456 1447 %cmp1 = icmp slt i64 345, 456
1290 br i1 %cmp1, label %if.then2, label %if.end3 1448 br i1 %cmp1, label %if.then2, label %if.end3
1291 1449
1292 if.then2: ; preds = %if.end 1450 if.then2: ; preds = %if.end
1293 call void @func() 1451 call void @func()
1294 br label %if.end3 1452 br label %if.end3
1295 1453
1296 if.end3: ; preds = %if.then2, %if.end 1454 if.end3: ; preds = %if.then2, %if.end
1297 ret void 1455 ret void
1298 } 1456 }
1299 ; The following checks are not strictly necessary since one of the RUN 1457 ; The following checks are not strictly necessary since one of the RUN
1300 ; lines actually runs the output through the assembler. 1458 ; lines actually runs the output through the assembler.
1301 ; CHECK-LABEL: icmpLt64Imm 1459 ; CHECK-LABEL: icmpLt64Imm
1302 ; CHECK-NOT: cmp 0x{{[0-9a-f]+}}, 1460 ; CHECK-NOT: cmp 0x{{[0-9a-f]+}},
1303 ; OPTM1-LABEL: icmpLt64Imm 1461 ; OPTM1-LABEL: icmpLt64Imm
1304 ; OPTM1-NOT: cmp 0x{{[0-9a-f]+}}, 1462 ; OPTM1-NOT: cmp 0x{{[0-9a-f]+}},
1463 ; ARM32-LABEL: icmpLt64Imm
1464 ; ARM32-NOT: cmp #{{[0-9a-f]+}},
OLDNEW
« no previous file with comments | « src/IceTargetLoweringARM32.def ('k') | tests_lit/llvm2ice_tests/branch-opt.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698