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 2376233004: [Subzero][MIPS] Add RUN command line with -Om1 in test 64bit.pnacl.ll (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Created 4 years, 2 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 | « no previous file | no next file » | 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: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ 5 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \
6 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ 6 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \
7 ; RUN: | %if --need=target_X8632 --command FileCheck %s 7 ; RUN: | %if --need=target_X8632 --command FileCheck %s
8 8
9 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ 9 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \
10 ; RUN: --target x8632 -i %s --args -Om1 -allow-externally-defined-symbols \ 10 ; RUN: --target x8632 -i %s --args -Om1 -allow-externally-defined-symbols \
(...skipping 18 matching lines...) Expand all
29 ; TODO(rkotler): Stop skipping unimplemented parts (via --skip-unimplemented) 29 ; TODO(rkotler): Stop skipping unimplemented parts (via --skip-unimplemented)
30 ; once enough infrastructure is in. Also, switch to --filetype=obj 30 ; once enough infrastructure is in. Also, switch to --filetype=obj
31 ; when possible. 31 ; when possible.
32 ; RUN: %if --need=target_MIPS32 --need=allow_dump \ 32 ; RUN: %if --need=target_MIPS32 --need=allow_dump \
33 ; RUN: --command %p2i --filetype=asm --assemble \ 33 ; RUN: --command %p2i --filetype=asm --assemble \
34 ; RUN: --disassemble --target mips32 -i %s --args -O2 --skip-unimplemented \ 34 ; RUN: --disassemble --target mips32 -i %s --args -O2 --skip-unimplemented \
35 ; RUN: -allow-externally-defined-symbols \ 35 ; RUN: -allow-externally-defined-symbols \
36 ; RUN: | %if --need=target_MIPS32 --need=allow_dump \ 36 ; RUN: | %if --need=target_MIPS32 --need=allow_dump \
37 ; RUN: --command FileCheck --check-prefix MIPS32 --check-prefix MIPS32-O2 %s 37 ; RUN: --command FileCheck --check-prefix MIPS32 --check-prefix MIPS32-O2 %s
38 38
39 ; RUN: %if --need=target_MIPS32 --need=allow_dump \
40 ; RUN: --command %p2i --filetype=asm --assemble \
41 ; RUN: --disassemble --target mips32 -i %s --args -Om1 --skip-unimplemented \
42 ; RUN: -allow-externally-defined-symbols \
43 ; RUN: | %if --need=target_MIPS32 --need=allow_dump \
44 ; RUN: --command FileCheck --check-prefix MIPS32 --check-prefix MIPS32-OM1 %s
45
39 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 46 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4
40 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 47 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4
41 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8 48 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8
42 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4 49 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4
43 50
44 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) { 51 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) {
45 entry: 52 entry:
46 ret i32 %b 53 ret i32 %b
47 } 54 }
48 55
49 ; MIPS32-LABEL: ignore64BitArg 56 ; MIPS32-LABEL: ignore64BitArg
50 ; MIPS32: move v0,a2 57 ; MIPS32-O2: move v0,a2
58 ; MIPS32-OM1: sw a2,[[MEM:.*]]
59 ; MIPS32-OM1: lw v0,[[MEM]]
51 60
52 define internal i32 @pass64BitArg(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f ) { 61 define internal i32 @pass64BitArg(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f ) {
53 entry: 62 entry:
54 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 %b) 63 %call = call i32 @ignore64BitArgNoInline(i64 %a, i32 123, i64 %b)
55 %call1 = call i32 @ignore64BitArgNoInline(i64 %c, i32 123, i64 %d) 64 %call1 = call i32 @ignore64BitArgNoInline(i64 %c, i32 123, i64 %d)
56 %call2 = call i32 @ignore64BitArgNoInline(i64 %e, i32 123, i64 %f) 65 %call2 = call i32 @ignore64BitArgNoInline(i64 %e, i32 123, i64 %f)
57 %add = add i32 %call1, %call 66 %add = add i32 %call1, %call
58 %add3 = add i32 %add, %call2 67 %add3 = add i32 %add, %call2
59 ret i32 %add3 68 ret i32 %add3
60 } 69 }
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 ; OPTM1-LABEL: return64BitArg 205 ; OPTM1-LABEL: return64BitArg
197 ; OPTM1: mov {{.*}},DWORD PTR [esp+0xc] 206 ; OPTM1: mov {{.*}},DWORD PTR [esp+0xc]
198 ; OPTM1: mov {{.*}},DWORD PTR [esp+0x10] 207 ; OPTM1: mov {{.*}},DWORD PTR [esp+0x10]
199 208
200 ; ARM32-LABEL: return64BitArg 209 ; ARM32-LABEL: return64BitArg
201 ; ARM32: mov {{.*}}, r2 210 ; ARM32: mov {{.*}}, r2
202 ; ARM32: mov {{.*}}, r3 211 ; ARM32: mov {{.*}}, r3
203 ; ARM32: bx lr 212 ; ARM32: bx lr
204 213
205 ; MIPS32-LABEL; return64BitArg 214 ; MIPS32-LABEL; return64BitArg
206 ; MIPS32: move v0,a2 215 ; MIPS32-O2: move v0,a2
207 ; MIPS32: move v1,a3 216 ; MIPS32-O2: move v1,a3
217 ; MIPS32-OM1: move [[T1:.*]],a2
218 ; MIPS32-OM1: sw [[T1]],[[MEM1:.*]]
219 ; MIPS32-OM1: move [[T2:.*]],a3
220 ; MIPS32-OM1: sw [[T2]],[[MEM2:.*]]
221 ; MIPS32-OM1: lw v0,[[MEM1]]
222 ; MIPS32-OM1: lw v1,[[MEM2]]
208 ; MIPS32: jr ra 223 ; MIPS32: jr ra
209 224
210 define internal i64 @return64BitConst() { 225 define internal i64 @return64BitConst() {
211 entry: 226 entry:
212 ret i64 -2401053092306725256 227 ret i64 -2401053092306725256
213 } 228 }
214 ; CHECK-LABEL: return64BitConst 229 ; CHECK-LABEL: return64BitConst
215 ; CHECK: mov eax,0x12345678 230 ; CHECK: mov eax,0x12345678
216 ; CHECK: mov edx,0xdeadbeef 231 ; CHECK: mov edx,0xdeadbeef
217 ; 232 ;
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 ; MIPS32: sllv [[T1:.*]],[[A_HI:.*]],[[B_LO:.*]] 539 ; MIPS32: sllv [[T1:.*]],[[A_HI:.*]],[[B_LO:.*]]
525 ; MIPS32: nor [[T2:.*]],[[B_LO]],zero 540 ; MIPS32: nor [[T2:.*]],[[B_LO]],zero
526 ; MIPS32: srl [[T3:.*]],[[A_LO:.*]],0x1 541 ; MIPS32: srl [[T3:.*]],[[A_LO:.*]],0x1
527 ; MIPS32: srlv [[T4:.*]],[[T3]],[[T2]] 542 ; MIPS32: srlv [[T4:.*]],[[T3]],[[T2]]
528 ; MIPS32: or [[T_HI:.*]],[[T1]],[[T4]] 543 ; MIPS32: or [[T_HI:.*]],[[T1]],[[T4]]
529 ; MIPS32: sllv [[T_LO:.*]],[[A_LO]],[[B_LO]] 544 ; MIPS32: sllv [[T_LO:.*]],[[A_LO]],[[B_LO]]
530 ; MIPS32: move [[T1_LO:.*]],[[T_LO]] 545 ; MIPS32: move [[T1_LO:.*]],[[T_LO]]
531 ; MIPS32: andi [[T5:.*]],[[B_LO]],0x20 546 ; MIPS32: andi [[T5:.*]],[[B_LO]],0x20
532 ; MIPS32: movn [[T_HI]],[[T_LO]],[[T5]] 547 ; MIPS32: movn [[T_HI]],[[T_LO]],[[T5]]
533 ; MIPS32: movn [[T1_LO]],zero,[[T5]] 548 ; MIPS32: movn [[T1_LO]],zero,[[T5]]
534 ; MIPS32: move» v1,[[T_HI]] 549 ; MIPS32-O2: move» v1,[[T_HI]]
550 ; MIPS32-OM1: sw» [[T_HI]],[[MEM:.*]]
551 ; MIPS32-OM1: lw v1,[[MEM]]
535 552
536 define internal i32 @shl64BitSignedTrunc(i64 %a, i64 %b) { 553 define internal i32 @shl64BitSignedTrunc(i64 %a, i64 %b) {
537 entry: 554 entry:
538 %shl = shl i64 %a, %b 555 %shl = shl i64 %a, %b
539 %result = trunc i64 %shl to i32 556 %result = trunc i64 %shl to i32
540 ret i32 %result 557 ret i32 %result
541 } 558 }
542 ; CHECK-LABEL: shl64BitSignedTrunc 559 ; CHECK-LABEL: shl64BitSignedTrunc
543 ; CHECK: mov 560 ; CHECK: mov
544 ; CHECK: shl e 561 ; CHECK: shl e
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 ; MIPS32: sllv [[T1:.*]],[[A_HI:.*]],[[B_LO:.*]] 601 ; MIPS32: sllv [[T1:.*]],[[A_HI:.*]],[[B_LO:.*]]
585 ; MIPS32: nor [[T2:.*]],[[B_LO]],zero 602 ; MIPS32: nor [[T2:.*]],[[B_LO]],zero
586 ; MIPS32: srl [[T3:.*]],[[A_LO:.*]],0x1 603 ; MIPS32: srl [[T3:.*]],[[A_LO:.*]],0x1
587 ; MIPS32: srlv [[T4:.*]],[[T3]],[[T2]] 604 ; MIPS32: srlv [[T4:.*]],[[T3]],[[T2]]
588 ; MIPS32: or [[T_HI:.*]],[[T1]],[[T4]] 605 ; MIPS32: or [[T_HI:.*]],[[T1]],[[T4]]
589 ; MIPS32: sllv [[T_LO:.*]],[[A_LO]],[[B_LO]] 606 ; MIPS32: sllv [[T_LO:.*]],[[A_LO]],[[B_LO]]
590 ; MIPS32: move [[T1_LO:.*]],[[T_LO]] 607 ; MIPS32: move [[T1_LO:.*]],[[T_LO]]
591 ; MIPS32: andi [[T5:.*]],[[B_LO]],0x20 608 ; MIPS32: andi [[T5:.*]],[[B_LO]],0x20
592 ; MIPS32: movn [[T_HI]],[[T_LO]],[[T5]] 609 ; MIPS32: movn [[T_HI]],[[T_LO]],[[T5]]
593 ; MIPS32: movn [[T1_LO]],zero,[[T5]] 610 ; MIPS32: movn [[T1_LO]],zero,[[T5]]
594 ; MIPS32: move v1,[[T_HI]] 611 ; MIPS32-O2: move v1,[[T_HI]]
612 ; MIPS32-OM1: sw [[T_HI]],[[MEM:.*]]
613 ; MIPS32-OM1: lw v1,[[MEM]]
595 614
596 define internal i64 @shr64BitSigned(i64 %a, i64 %b) { 615 define internal i64 @shr64BitSigned(i64 %a, i64 %b) {
597 entry: 616 entry:
598 %shr = ashr i64 %a, %b 617 %shr = ashr i64 %a, %b
599 ret i64 %shr 618 ret i64 %shr
600 } 619 }
601 ; CHECK-LABEL: shr64BitSigned 620 ; CHECK-LABEL: shr64BitSigned
602 ; CHECK: shrd 621 ; CHECK: shrd
603 ; CHECK: sar 622 ; CHECK: sar
604 ; CHECK: test {{.*}},0x20 623 ; CHECK: test {{.*}},0x20
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
879 ; CHECK-NEXT: movsx eax,ax 898 ; CHECK-NEXT: movsx eax,ax
880 ; 899 ;
881 ; OPTM1-LABEL: trunc64To16Signed 900 ; OPTM1-LABEL: trunc64To16Signed
882 ; OPTM1: mov ax,WORD PTR [esp+ 901 ; OPTM1: mov ax,WORD PTR [esp+
883 ; OPTM1: movsx eax, 902 ; OPTM1: movsx eax,
884 903
885 ; ARM32-LABEL: trunc64To16Signed 904 ; ARM32-LABEL: trunc64To16Signed
886 ; ARM32: sxth r0, r0 905 ; ARM32: sxth r0, r0
887 906
888 ; MIPS32-LABEL: trunc64To16Signed 907 ; MIPS32-LABEL: trunc64To16Signed
889 ; MIPS32: sll a0,a0,0x10 908 ; MIPS32-O2: sll [[T1:.*]],a0,0x10
890 ; MIPS32: sra a0,a0,0x10 909 ; MIPS32-O2: sra [[T2:.*]],[[T1]],0x10
891 ; MIPS32: move v0,a0 910 ; MIPS32-O2: move v0,[[T2]]
911 ; MIPS32-OM1: sll [[T1:.*]],{{.*}},0x10
912 ; MIPS32-OM1: sra [[T2:.*]],[[T1]],0x10
913 ; MIPS32-OM1: sw [[T2]],[[MEM:.*]]
914 ; MIPS32-OM1: lw v0,[[MEM]]
892 915
893 define internal i32 @trunc64To8Signed(i64 %a) { 916 define internal i32 @trunc64To8Signed(i64 %a) {
894 entry: 917 entry:
895 %conv = trunc i64 %a to i8 918 %conv = trunc i64 %a to i8
896 %conv.ret_ext = sext i8 %conv to i32 919 %conv.ret_ext = sext i8 %conv to i32
897 ret i32 %conv.ret_ext 920 ret i32 %conv.ret_ext
898 } 921 }
899 ; CHECK-LABEL: trunc64To8Signed 922 ; CHECK-LABEL: trunc64To8Signed
900 ; CHECK: mov eax,DWORD PTR [esp+0x4] 923 ; CHECK: mov eax,DWORD PTR [esp+0x4]
901 ; CHECK-NEXT: movsx eax,al 924 ; CHECK-NEXT: movsx eax,al
902 ; 925 ;
903 ; OPTM1-LABEL: trunc64To8Signed 926 ; OPTM1-LABEL: trunc64To8Signed
904 ; OPTM1: mov eax,DWORD PTR [esp+ 927 ; OPTM1: mov eax,DWORD PTR [esp+
905 ; OPTM1: movsx eax, 928 ; OPTM1: movsx eax,
906 929
907 ; ARM32-LABEL: trunc64To8Signed 930 ; ARM32-LABEL: trunc64To8Signed
908 ; ARM32: sxtb r0, r0 931 ; ARM32: sxtb r0, r0
909 932
910 ; MIPS32-LABEL: trunc64To8Signed 933 ; MIPS32-LABEL: trunc64To8Signed
911 ; MIPS32: sll a0,a0,0x18 934 ; MIPS32-O2: sll [[T1:.*]],a0,0x18
912 ; MIPS32: sra a0,a0,0x18 935 ; MIPS32-O2: sra [[T2:.*]],[[T1]],0x18
913 ; MIPS32: move v0,a0 936 ; MIPS32-O2: move v0,[[T2]]
937 ; MIPS32-OM1: sll [[T1:.*]],{{.*}},0x18
938 ; MIPS32-OM1: sra [[T2:.*]],[[T1]],0x18
939 ; MIPS32-OM1: sw [[T2]],[[MEM:.*]]
940 ; MIPS32-OM1: lw v0,[[MEM]]
914 941
915 define internal i32 @trunc64To32SignedConst() { 942 define internal i32 @trunc64To32SignedConst() {
916 entry: 943 entry:
917 %conv = trunc i64 12345678901234 to i32 944 %conv = trunc i64 12345678901234 to i32
918 ret i32 %conv 945 ret i32 %conv
919 } 946 }
920 ; CHECK-LABEL: trunc64To32SignedConst 947 ; CHECK-LABEL: trunc64To32SignedConst
921 ; CHECK: mov eax,0x73ce2ff2 948 ; CHECK: mov eax,0x73ce2ff2
922 ; 949 ;
923 ; OPTM1-LABEL: trunc64To32SignedConst 950 ; OPTM1-LABEL: trunc64To32SignedConst
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
984 ; CHECK-NEXT: movzx eax,ax 1011 ; CHECK-NEXT: movzx eax,ax
985 ; 1012 ;
986 ; OPTM1-LABEL: trunc64To16Unsigned 1013 ; OPTM1-LABEL: trunc64To16Unsigned
987 ; OPTM1: mov ax,WORD PTR [esp+ 1014 ; OPTM1: mov ax,WORD PTR [esp+
988 ; OPTM1: movzx eax, 1015 ; OPTM1: movzx eax,
989 1016
990 ; ARM32-LABEL: trunc64To16Unsigned 1017 ; ARM32-LABEL: trunc64To16Unsigned
991 ; ARM32: uxth 1018 ; ARM32: uxth
992 1019
993 ; MIPS32-LABEL: trunc64To16Unsigned 1020 ; MIPS32-LABEL: trunc64To16Unsigned
994 ; MIPS32: andi a0,a0,0xffff 1021 ; MIPS32-O2: andi [[T1:.*]],a0,0xffff
995 ; MIPS32: move v0,a0 1022 ; MIPS32-O2: move v0,[[T1]]
1023 ; MIPS32-OM1: andi [[T1:.*]],{{.*}},0xffff
1024 ; MIPS32-OM1: sw [[T1]],[[MEM:.*]]
1025 ; MIPS32-OM1: lw v0,[[MEM]]
996 1026
997 define internal i32 @trunc64To8Unsigned(i64 %a) { 1027 define internal i32 @trunc64To8Unsigned(i64 %a) {
998 entry: 1028 entry:
999 %conv = trunc i64 %a to i8 1029 %conv = trunc i64 %a to i8
1000 %conv.ret_ext = zext i8 %conv to i32 1030 %conv.ret_ext = zext i8 %conv to i32
1001 ret i32 %conv.ret_ext 1031 ret i32 %conv.ret_ext
1002 } 1032 }
1003 ; CHECK-LABEL: trunc64To8Unsigned 1033 ; CHECK-LABEL: trunc64To8Unsigned
1004 ; CHECK: mov eax,DWORD PTR [esp+0x4] 1034 ; CHECK: mov eax,DWORD PTR [esp+0x4]
1005 ; CHECK-NEXT: movzx eax,al 1035 ; CHECK-NEXT: movzx eax,al
1006 ; 1036 ;
1007 ; OPTM1-LABEL: trunc64To8Unsigned 1037 ; OPTM1-LABEL: trunc64To8Unsigned
1008 ; OPTM1: mov eax,DWORD PTR [esp+ 1038 ; OPTM1: mov eax,DWORD PTR [esp+
1009 ; OPTM1: movzx eax, 1039 ; OPTM1: movzx eax,
1010 1040
1011 ; ARM32-LABEL: trunc64To8Unsigned 1041 ; ARM32-LABEL: trunc64To8Unsigned
1012 ; ARM32: uxtb 1042 ; ARM32: uxtb
1013 1043
1014 ; MIPS32-LABEL: trunc64To8Unsigned 1044 ; MIPS32-LABEL: trunc64To8Unsigned
1015 ; MIPS32: andi a0,a0,0xff 1045 ; MIPS32-O2: andi [[T1:.*]],a0,0xff
1016 ; MIPS32: move v0,a0 1046 ; MIPS32-O2: move v0,[[T1]]
1047 ; MIPS32-OM1: andi [[T1:.*]],{{.*}},0xff
1048 ; MIPS32-OM1: sw [[T1]],[[MEM:.*]]
1049 ; MIPS32-OM1: lw v0,[[MEM]]
1017 1050
1018 define internal i32 @trunc64To1(i64 %a) { 1051 define internal i32 @trunc64To1(i64 %a) {
1019 entry: 1052 entry:
1020 ; %tobool = icmp ne i64 %a, 0 1053 ; %tobool = icmp ne i64 %a, 0
1021 %tobool = trunc i64 %a to i1 1054 %tobool = trunc i64 %a to i1
1022 %tobool.ret_ext = zext i1 %tobool to i32 1055 %tobool.ret_ext = zext i1 %tobool to i32
1023 ret i32 %tobool.ret_ext 1056 ret i32 %tobool.ret_ext
1024 } 1057 }
1025 ; CHECK-LABEL: trunc64To1 1058 ; CHECK-LABEL: trunc64To1
1026 ; CHECK: mov eax,DWORD PTR [esp+0x4] 1059 ; CHECK: mov eax,DWORD PTR [esp+0x4]
1027 ; CHECK: and al,0x1 1060 ; CHECK: and al,0x1
1028 ; CHECK-NOT: and eax,0x1 1061 ; CHECK-NOT: and eax,0x1
1029 ; 1062 ;
1030 ; OPTM1-LABEL: trunc64To1 1063 ; OPTM1-LABEL: trunc64To1
1031 ; OPTM1: mov eax,DWORD PTR [esp+ 1064 ; OPTM1: mov eax,DWORD PTR [esp+
1032 ; OPTM1: and al,0x1 1065 ; OPTM1: and al,0x1
1033 ; OPTM1-NOT: and eax,0x1 1066 ; OPTM1-NOT: and eax,0x1
1034 1067
1035 ; ARM32-LABEL: trunc64To1 1068 ; ARM32-LABEL: trunc64To1
1036 ; ARM32-OM1: and r0, r0, #1 1069 ; ARM32-OM1: and r0, r0, #1
1037 ; ARM32-O2: and r0, r0, #1 1070 ; ARM32-O2: and r0, r0, #1
1038 1071
1039 ; MIPS32-LABEL: trunc64To1 1072 ; MIPS32-LABEL: trunc64To1
1040 ; MIPS32: andi {{.*}},a0,0x1 1073 ; MIPS32-O2: andi [[T1:.*]],a0,0x1
1041 ; MIPS32: move v0,a0 1074 ; MIPS32-O2: move v0,[[T1]]
1075 ; MIPS32-OM1: andi [[T1:.*]],{{.*}},0x1
1076 ; MIPS32-OM1: sw [[T1]],[[MEM:.*]]
1077 ; MIPS32-OM1: lw v0,[[MEM]]
1042 1078
1043 define internal i64 @sext32To64(i32 %a) { 1079 define internal i64 @sext32To64(i32 %a) {
1044 entry: 1080 entry:
1045 %conv = sext i32 %a to i64 1081 %conv = sext i32 %a to i64
1046 ret i64 %conv 1082 ret i64 %conv
1047 } 1083 }
1048 ; CHECK-LABEL: sext32To64 1084 ; CHECK-LABEL: sext32To64
1049 ; CHECK: mov 1085 ; CHECK: mov
1050 ; CHECK: sar {{.*}},0x1f 1086 ; CHECK: sar {{.*}},0x1f
1051 ; 1087 ;
1052 ; OPTM1-LABEL: sext32To64 1088 ; OPTM1-LABEL: sext32To64
1053 ; OPTM1: mov 1089 ; OPTM1: mov
1054 ; OPTM1: sar {{.*}},0x1f 1090 ; OPTM1: sar {{.*}},0x1f
1055 1091
1056 ; ARM32-LABEL: sext32To64 1092 ; ARM32-LABEL: sext32To64
1057 ; ARM32: asr {{.*}}, #31 1093 ; ARM32: asr {{.*}}, #31
1058 1094
1059 ; MIPS32-LABEL: sext32To64 1095 ; MIPS32-LABEL: sext32To64
1060 ; MIPS32-LABEL: sra {{.*}},a0,0x1f 1096 ; MIPS32: sra [[T_HI:.*]],[[T_LO:.*]],0x1f
1061 ; MIPS32-LABEL: move v1,v0 1097 ; MIPS32-O2: move v1,[[T_HI]]
1062 ; MIPS32-LABEL: move v0,a0 1098 ; MIPS32-O2: move v0,[[T_LO]]
1099 ; MIPS32-OM1: sw [[T_HI]],[[MEM_HI:.*]]
1100 ; MIPS32-OM1: sw [[T_LO]],[[MEM_LO:.*]]
1101 ; MIPS32-OM1: lw v0,[[MEM_LO]]
1102 ; MIPS32-OM1: lw v1,[[MEM_HI]]
1063 1103
1064 define internal i64 @sext16To64(i32 %a) { 1104 define internal i64 @sext16To64(i32 %a) {
1065 entry: 1105 entry:
1066 %a.arg_trunc = trunc i32 %a to i16 1106 %a.arg_trunc = trunc i32 %a to i16
1067 %conv = sext i16 %a.arg_trunc to i64 1107 %conv = sext i16 %a.arg_trunc to i64
1068 ret i64 %conv 1108 ret i64 %conv
1069 } 1109 }
1070 ; CHECK-LABEL: sext16To64 1110 ; CHECK-LABEL: sext16To64
1071 ; CHECK: movsx 1111 ; CHECK: movsx
1072 ; CHECK: sar {{.*}},0x1f 1112 ; CHECK: sar {{.*}},0x1f
1073 ; 1113 ;
1074 ; OPTM1-LABEL: sext16To64 1114 ; OPTM1-LABEL: sext16To64
1075 ; OPTM1: movsx 1115 ; OPTM1: movsx
1076 ; OPTM1: sar {{.*}},0x1f 1116 ; OPTM1: sar {{.*}},0x1f
1077 1117
1078 ; ARM32-LABEL: sext16To64 1118 ; ARM32-LABEL: sext16To64
1079 ; ARM32: sxth 1119 ; ARM32: sxth
1080 ; ARM32: asr {{.*}}, #31 1120 ; ARM32: asr {{.*}}, #31
1081 1121
1082 ; MIPS32-LABEL: sext16To64 1122 ; MIPS32-LABEL: sext16To64
1083 ; MIPS32: sll {{.*}},{{.*}},0x10 1123 ; MIPS32: sll [[T1_LO:.*]],{{.*}},0x10
1084 ; MIPS32: sra {{.*}},{{.*}},0x10 1124 ; MIPS32: sra [[T2_LO:.*]],[[T1_LO]],0x10
1085 ; MIPS32: sra {{.*}},{{.*}},0x1f 1125 ; MIPS32: sra [[T_HI:.*]],[[T2_LO]],0x1f
1086 ; MIPS32: move v1,v0 1126 ; MIPS32-O2: move v1,[[T_HI]]
1087 ; MIPS32: move v0,a0 1127 ; MIPS32-O2: move v0,[[T2_LO]]
1128 ; MIPS32-OM1: sw [[T_HI]],[[MEM_HI:.*]]
1129 ; MIPS32-OM1: sw [[T2_LO]],[[MEM_LO:.*]]
1130 ; MIPS32-OM1: lw v0,[[MEM_LO]]
1131 ; MIPS32-OM1: lw v1,[[MEM_HI]]
1132
1088 1133
1089 define internal i64 @sext8To64(i32 %a) { 1134 define internal i64 @sext8To64(i32 %a) {
1090 entry: 1135 entry:
1091 %a.arg_trunc = trunc i32 %a to i8 1136 %a.arg_trunc = trunc i32 %a to i8
1092 %conv = sext i8 %a.arg_trunc to i64 1137 %conv = sext i8 %a.arg_trunc to i64
1093 ret i64 %conv 1138 ret i64 %conv
1094 } 1139 }
1095 ; CHECK-LABEL: sext8To64 1140 ; CHECK-LABEL: sext8To64
1096 ; CHECK: movsx 1141 ; CHECK: movsx
1097 ; CHECK: sar {{.*}},0x1f 1142 ; CHECK: sar {{.*}},0x1f
1098 ; 1143 ;
1099 ; OPTM1-LABEL: sext8To64 1144 ; OPTM1-LABEL: sext8To64
1100 ; OPTM1: movsx 1145 ; OPTM1: movsx
1101 ; OPTM1: sar {{.*}},0x1f 1146 ; OPTM1: sar {{.*}},0x1f
1102 1147
1103 ; ARM32-LABEL: sext8To64 1148 ; ARM32-LABEL: sext8To64
1104 ; ARM32: sxtb 1149 ; ARM32: sxtb
1105 ; ARM32: asr {{.*}}, #31 1150 ; ARM32: asr {{.*}}, #31
1106 1151
1107 ; MIPS32-LABEL: sext8To64 1152 ; MIPS32-LABEL: sext8To64
1108 ; MIPS32: sll {{.*}},a0,0x18 1153 ; MIPS32: sll [[T1_LO:.*]],{{.*}},0x18
1109 ; MIPS32: sra {{.*}},{{.*}},0x18 1154 ; MIPS32: sra [[T2_LO:.*]],[[T1_LO]],0x18
1110 ; MIPS32: sra {{.*}},{{.*}},0x1f 1155 ; MIPS32: sra [[T_HI:.*]],[[T2_LO]],0x1f
1111 ; MIPS32: move v1,v0 1156 ; MIPS32-O2: move v1,[[T_HI]]
1112 ; MIPS32: move v0,a0 1157 ; MIPS32-O2: move v0,[[T2_LO]]
1158 ; MIPS32-OM1: sw [[T_HI]],[[MEM_HI:.*]]
1159 ; MIPS32-OM1: sw [[T2_LO]],[[MEM_LO:.*]]
1160 ; MIPS32-OM1: lw v0,[[MEM_LO]]
1161 ; MIPS32-OM1: lw v1,[[MEM_HI]]
1113 1162
1114 define internal i64 @sext1To64(i32 %a) { 1163 define internal i64 @sext1To64(i32 %a) {
1115 entry: 1164 entry:
1116 %a.arg_trunc = trunc i32 %a to i1 1165 %a.arg_trunc = trunc i32 %a to i1
1117 %conv = sext i1 %a.arg_trunc to i64 1166 %conv = sext i1 %a.arg_trunc to i64
1118 ret i64 %conv 1167 ret i64 %conv
1119 } 1168 }
1120 ; CHECK-LABEL: sext1To64 1169 ; CHECK-LABEL: sext1To64
1121 ; CHECK: mov 1170 ; CHECK: mov
1122 ; CHECK: shl {{.*}},0x1f 1171 ; CHECK: shl {{.*}},0x1f
1123 ; CHECK: sar {{.*}},0x1f 1172 ; CHECK: sar {{.*}},0x1f
1124 ; 1173 ;
1125 ; OPTM1-LABEL: sext1To64 1174 ; OPTM1-LABEL: sext1To64
1126 ; OPTM1: mov 1175 ; OPTM1: mov
1127 ; OPTM1: shl {{.*}},0x1f 1176 ; OPTM1: shl {{.*}},0x1f
1128 ; OPTM1: sar {{.*}},0x1f 1177 ; OPTM1: sar {{.*}},0x1f
1129 1178
1130 ; ARM32-LABEL: sext1To64 1179 ; ARM32-LABEL: sext1To64
1131 ; ARM32: mov {{.*}}, #0 1180 ; ARM32: mov {{.*}}, #0
1132 ; ARM32: tst {{.*}}, #1 1181 ; ARM32: tst {{.*}}, #1
1133 ; ARM32: mvn {{.*}}, #0 1182 ; ARM32: mvn {{.*}}, #0
1134 ; ARM32: movne 1183 ; ARM32: movne
1135 1184
1136 ; MIPS32-LABEL: sext1To64 1185 ; MIPS32-LABEL: sext1To64
1137 ; MIPS32: sll {{.*}},a0,0x1f 1186 ; MIPS32: sll [[T1:.*]],{{.*}},0x1f
1138 ; MIPS32: sra {{.*}},{{.*}},0x1f 1187 ; MIPS32: sra [[T2:.*]],[[T1]],0x1f
1139 ; MIPS32: move v1,a0 1188 ; MIPS32-O2: move v1,[[T2]]
1140 ; MIPS32: move v0,a0 1189 ; MIPS32-O2: move v0,[[T2]]
1190 ; MIPS32-OM1: sw [[T2]],[[MEM_HI:.*]]
1191 ; MIPS32-OM1: sw [[T2]],[[MEM_LO:.*]]
1192 ; MIPS32-OM1: lw v0,[[MEM_LO]]
1193 ; MIPS32-OM1: lw v1,[[MEM_HI]]
1141 1194
1142 define internal i64 @zext32To64(i32 %a) { 1195 define internal i64 @zext32To64(i32 %a) {
1143 entry: 1196 entry:
1144 %conv = zext i32 %a to i64 1197 %conv = zext i32 %a to i64
1145 ret i64 %conv 1198 ret i64 %conv
1146 } 1199 }
1147 ; CHECK-LABEL: zext32To64 1200 ; CHECK-LABEL: zext32To64
1148 ; CHECK: mov 1201 ; CHECK: mov
1149 ; CHECK: mov {{.*}},0x0 1202 ; CHECK: mov {{.*}},0x0
1150 ; 1203 ;
1151 ; OPTM1-LABEL: zext32To64 1204 ; OPTM1-LABEL: zext32To64
1152 ; OPTM1: mov 1205 ; OPTM1: mov
1153 ; OPTM1: mov {{.*}},0x0 1206 ; OPTM1: mov {{.*}},0x0
1154 1207
1155 ; ARM32-LABEL: zext32To64 1208 ; ARM32-LABEL: zext32To64
1156 ; ARM32: mov {{.*}}, #0 1209 ; ARM32: mov {{.*}}, #0
1157 1210
1158 ; MIPS32-LABEL: zext32To64 1211 ; MIPS32-LABEL: zext32To64
1159 ; MIPS32: li {{.*}},0 1212 ; MIPS32: li [[T1:.*]],0
1160 ; MIPS32: move v1,v0 1213 ; MIPS32-O2: move v1,[[T1]]
1161 ; MIPS32: move v0,a0 1214 ; MIPS32-O2: move v0,a0
1215 ; MIPS32-OM1: sw [[T1]],[[MEM_HI:.*]]
1216 ; MIPS32-OM1: lw v1,[[MEM_HI]]
1162 1217
1163 define internal i64 @zext16To64(i32 %a) { 1218 define internal i64 @zext16To64(i32 %a) {
1164 entry: 1219 entry:
1165 %a.arg_trunc = trunc i32 %a to i16 1220 %a.arg_trunc = trunc i32 %a to i16
1166 %conv = zext i16 %a.arg_trunc to i64 1221 %conv = zext i16 %a.arg_trunc to i64
1167 ret i64 %conv 1222 ret i64 %conv
1168 } 1223 }
1169 ; CHECK-LABEL: zext16To64 1224 ; CHECK-LABEL: zext16To64
1170 ; CHECK: movzx 1225 ; CHECK: movzx
1171 ; CHECK: mov {{.*}},0x0 1226 ; CHECK: mov {{.*}},0x0
1172 ; 1227 ;
1173 ; OPTM1-LABEL: zext16To64 1228 ; OPTM1-LABEL: zext16To64
1174 ; OPTM1: movzx 1229 ; OPTM1: movzx
1175 ; OPTM1: mov {{.*}},0x0 1230 ; OPTM1: mov {{.*}},0x0
1176 1231
1177 ; ARM32-LABEL: zext16To64 1232 ; ARM32-LABEL: zext16To64
1178 ; ARM32: uxth 1233 ; ARM32: uxth
1179 ; ARM32: mov {{.*}}, #0 1234 ; ARM32: mov {{.*}}, #0
1180 1235
1181 ; MIPS32-LABEL: zext16To64 1236 ; MIPS32-LABEL: zext16To64
1182 ; MIPS32: andi {{.*}},a0,0xffff 1237 ; MIPS32: andi [[T_LO:.*]],{{.*}},0xffff
1183 ; MIPS32: li {{.*}},0 1238 ; MIPS32: li [[T_HI:.*]],0
1184 ; MIPS32: move v1,v0 1239 ; MIPS32-O2: move v1,[[T_HI]]
1185 ; MIPS32: move v0,a0 1240 ; MIPS32-O2: move v0,[[T_LO]]
1241 ; MIPS32-OM1: sw [[T_HI]],[[MEM_HI:.*]]
1242 ; MIPS32-OM1: lw v1,[[MEM_HI]]
1186 1243
1187 define internal i64 @zext8To64(i32 %a) { 1244 define internal i64 @zext8To64(i32 %a) {
1188 entry: 1245 entry:
1189 %a.arg_trunc = trunc i32 %a to i8 1246 %a.arg_trunc = trunc i32 %a to i8
1190 %conv = zext i8 %a.arg_trunc to i64 1247 %conv = zext i8 %a.arg_trunc to i64
1191 ret i64 %conv 1248 ret i64 %conv
1192 } 1249 }
1193 ; CHECK-LABEL: zext8To64 1250 ; CHECK-LABEL: zext8To64
1194 ; CHECK: movzx 1251 ; CHECK: movzx
1195 ; CHECK: mov {{.*}},0x0 1252 ; CHECK: mov {{.*}},0x0
1196 ; 1253 ;
1197 ; OPTM1-LABEL: zext8To64 1254 ; OPTM1-LABEL: zext8To64
1198 ; OPTM1: movzx 1255 ; OPTM1: movzx
1199 ; OPTM1: mov {{.*}},0x0 1256 ; OPTM1: mov {{.*}},0x0
1200 1257
1201 ; ARM32-LABEL: zext8To64 1258 ; ARM32-LABEL: zext8To64
1202 ; ARM32: uxtb 1259 ; ARM32: uxtb
1203 ; ARM32: mov {{.*}}, #0 1260 ; ARM32: mov {{.*}}, #0
1204 1261
1205 ; MIPS32-LABEL: zext8To64 1262 ; MIPS32-LABEL: zext8To64
1206 ; MIPS32: andi {{.*}},a0,0xff 1263 ; MIPS32: andi [[T_LO:.*]],{{.*}},0xff
1207 ; MIPS32: li {{.*}},0 1264 ; MIPS32: li [[T_HI:.*]],0
1208 ; MIPS32: move v1,v0 1265 ; MIPS32-O2: move v1,[[T_HI]]
1209 ; MIPS32: move v0,a0 1266 ; MIPS32-O2: move v0,[[T_LO]]
1267 ; MIPS32-OM1: sw [[T_HI]],[[MEM_HI:.*]]
1268 ; MIPS32-OM1: lw v1,[[MEM_HI]]
1210 1269
1211 define internal i64 @zext1To64(i32 %a) { 1270 define internal i64 @zext1To64(i32 %a) {
1212 entry: 1271 entry:
1213 %a.arg_trunc = trunc i32 %a to i1 1272 %a.arg_trunc = trunc i32 %a to i1
1214 %conv = zext i1 %a.arg_trunc to i64 1273 %conv = zext i1 %a.arg_trunc to i64
1215 ret i64 %conv 1274 ret i64 %conv
1216 } 1275 }
1217 ; CHECK-LABEL: zext1To64 1276 ; CHECK-LABEL: zext1To64
1218 ; CHECK: and {{.*}},0x1 1277 ; CHECK: and {{.*}},0x1
1219 ; CHECK: mov {{.*}},0x0 1278 ; CHECK: mov {{.*}},0x0
1220 ; 1279 ;
1221 ; OPTM1-LABEL: zext1To64 1280 ; OPTM1-LABEL: zext1To64
1222 ; OPTM1: and {{.*}},0x1 1281 ; OPTM1: and {{.*}},0x1
1223 ; OPTM1: mov {{.*}},0x0 1282 ; OPTM1: mov {{.*}},0x0
1224 1283
1225 ; ARM32-LABEL: zext1To64 1284 ; ARM32-LABEL: zext1To64
1226 ; ARM32: and {{.*}}, #1 1285 ; ARM32: and {{.*}}, #1
1227 ; ARM32: mov {{.*}}, #0 1286 ; ARM32: mov {{.*}}, #0
1228 ; ARM32: bx 1287 ; ARM32: bx
1229 1288
1230 ; MIPS32-LABEL: zext1To64 1289 ; MIPS32-LABEL: zext1To64
1231 ; MIPS32: andi {{.*}},a0,0x1 1290 ; MIPS32: andi [[T_LO:.*]],{{.*}},0x1
1232 ; MIPS32: li {{.*}},0 1291 ; MIPS32: li [[T_HI:.*]],0
1233 ; MIPS32: move v1,v0 1292 ; MIPS32-O2: move v1,[[T_HI]]
1234 ; MIPS32: move v0,a0 1293 ; MIPS32-O2: move v0,[[T_LO]]
1294 ; MIPS32-OM1: sw [[T_HI]],[[MEM_HI:.*]]
1295 ; MIPS32-OM1: lw v1,[[MEM_HI]]
1235 1296
1236 define internal void @icmpEq64(i64 %a, i64 %b, i64 %c, i64 %d) { 1297 define internal void @icmpEq64(i64 %a, i64 %b, i64 %c, i64 %d) {
1237 entry: 1298 entry:
1238 %cmp = icmp eq i64 %a, %b 1299 %cmp = icmp eq i64 %a, %b
1239 br i1 %cmp, label %if.then, label %if.end 1300 br i1 %cmp, label %if.then, label %if.end
1240 1301
1241 if.then: ; preds = %entry 1302 if.then: ; preds = %entry
1242 call void @func() 1303 call void @func()
1243 br label %if.end 1304 br label %if.end
1244 1305
(...skipping 984 matching lines...) Expand 10 before | Expand all | Expand 10 after
2229 %s = lshr i64 %a, 40 2290 %s = lshr i64 %a, 40
2230 %t = trunc i64 %s to i32 2291 %t = trunc i64 %s to i32
2231 %r = sub i32 %t, 1 2292 %r = sub i32 %t, 1
2232 ret i32 %r 2293 ret i32 %r
2233 ; ARM32-LABEL: subOneToUpperAfterShift 2294 ; ARM32-LABEL: subOneToUpperAfterShift
2234 ; ARM32: subs 2295 ; ARM32: subs
2235 ; ARM32: sbc 2296 ; ARM32: sbc
2236 ; ARM32: lsr 2297 ; ARM32: lsr
2237 ; ARM32: sub 2298 ; ARM32: sub
2238 } 2299 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698