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

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

Issue 2017043002: [Subzero][MIPS32] Implement i1 cast operations (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Added temporaries to avoid illegal code generation Created 4 years, 6 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/IceTargetLoweringMIPS32.cpp ('k') | 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 952 matching lines...) Expand 10 before | Expand all | Expand 10 after
963 ; 963 ;
964 ; OPTM1-LABEL: trunc64To1 964 ; OPTM1-LABEL: trunc64To1
965 ; OPTM1: mov eax,DWORD PTR [esp+ 965 ; OPTM1: mov eax,DWORD PTR [esp+
966 ; OPTM1: and al,0x1 966 ; OPTM1: and al,0x1
967 ; OPTM1-NOT: and eax,0x1 967 ; OPTM1-NOT: and eax,0x1
968 968
969 ; ARM32-LABEL: trunc64To1 969 ; ARM32-LABEL: trunc64To1
970 ; ARM32-OM1: and r0, r0, #1 970 ; ARM32-OM1: and r0, r0, #1
971 ; ARM32-O2: and r0, r0, #1 971 ; ARM32-O2: and r0, r0, #1
972 972
973 ; MIPS32-LABEL: trunc64To1
974 ; MIPS32: andi {{.*}},a0,0x1
975 ; MIPS32: move v0,{{.*}}
976
973 define internal i64 @sext32To64(i32 %a) { 977 define internal i64 @sext32To64(i32 %a) {
974 entry: 978 entry:
975 %conv = sext i32 %a to i64 979 %conv = sext i32 %a to i64
976 ret i64 %conv 980 ret i64 %conv
977 } 981 }
978 ; CHECK-LABEL: sext32To64 982 ; CHECK-LABEL: sext32To64
979 ; CHECK: mov 983 ; CHECK: mov
980 ; CHECK: sar {{.*}},0x1f 984 ; CHECK: sar {{.*}},0x1f
981 ; 985 ;
982 ; OPTM1-LABEL: sext32To64 986 ; OPTM1-LABEL: sext32To64
983 ; OPTM1: mov 987 ; OPTM1: mov
984 ; OPTM1: sar {{.*}},0x1f 988 ; OPTM1: sar {{.*}},0x1f
985 989
986 ; ARM32-LABEL: sext32To64 990 ; ARM32-LABEL: sext32To64
987 ; ARM32: asr {{.*}}, #31 991 ; ARM32: asr {{.*}}, #31
988 992
989 ; MIPS32-LABEL: sext32To64 993 ; MIPS32-LABEL: sext32To64
990 ; MIPS32-LABEL: sra v1,a0,0x1f 994 ; MIPS32-LABEL: sra {{.*}},a0,0x1f
991 ; MIPS32-LABEL: move v0,a0 995 ; MIPS32-LABEL: move v1,{{.*}}
996 ; MIPS32-LABEL: move v0,{{.*}}
992 997
993 define internal i64 @sext16To64(i32 %a) { 998 define internal i64 @sext16To64(i32 %a) {
994 entry: 999 entry:
995 %a.arg_trunc = trunc i32 %a to i16 1000 %a.arg_trunc = trunc i32 %a to i16
996 %conv = sext i16 %a.arg_trunc to i64 1001 %conv = sext i16 %a.arg_trunc to i64
997 ret i64 %conv 1002 ret i64 %conv
998 } 1003 }
999 ; CHECK-LABEL: sext16To64 1004 ; CHECK-LABEL: sext16To64
1000 ; CHECK: movsx 1005 ; CHECK: movsx
1001 ; CHECK: sar {{.*}},0x1f 1006 ; CHECK: sar {{.*}},0x1f
1002 ; 1007 ;
1003 ; OPTM1-LABEL: sext16To64 1008 ; OPTM1-LABEL: sext16To64
1004 ; OPTM1: movsx 1009 ; OPTM1: movsx
1005 ; OPTM1: sar {{.*}},0x1f 1010 ; OPTM1: sar {{.*}},0x1f
1006 1011
1007 ; ARM32-LABEL: sext16To64 1012 ; ARM32-LABEL: sext16To64
1008 ; ARM32: sxth 1013 ; ARM32: sxth
1009 ; ARM32: asr {{.*}}, #31 1014 ; ARM32: asr {{.*}}, #31
1010 1015
1011 ; MIPS32-LABEL: sext16To64 1016 ; MIPS32-LABEL: sext16To64
1012 ; MIPS32: sll a0,a0,0x10 1017 ; MIPS32: sll {{.*}},{{.*}},0x10
1013 ; MIPS32: sra a0,a0,0x10 1018 ; MIPS32: sra {{.*}},{{.*}},0x10
1014 ; MIPS32: sra v1,a0,0x1f 1019 ; MIPS32: sra {{.*}},{{.*}},0x1f
1015 ; MIPS32: move v0,a0 1020 ; MIPS32: move v1,{{.*}}
1021 ; MIPS32: move v0,{{.*}}
1016 1022
1017 define internal i64 @sext8To64(i32 %a) { 1023 define internal i64 @sext8To64(i32 %a) {
1018 entry: 1024 entry:
1019 %a.arg_trunc = trunc i32 %a to i8 1025 %a.arg_trunc = trunc i32 %a to i8
1020 %conv = sext i8 %a.arg_trunc to i64 1026 %conv = sext i8 %a.arg_trunc to i64
1021 ret i64 %conv 1027 ret i64 %conv
1022 } 1028 }
1023 ; CHECK-LABEL: sext8To64 1029 ; CHECK-LABEL: sext8To64
1024 ; CHECK: movsx 1030 ; CHECK: movsx
1025 ; CHECK: sar {{.*}},0x1f 1031 ; CHECK: sar {{.*}},0x1f
1026 ; 1032 ;
1027 ; OPTM1-LABEL: sext8To64 1033 ; OPTM1-LABEL: sext8To64
1028 ; OPTM1: movsx 1034 ; OPTM1: movsx
1029 ; OPTM1: sar {{.*}},0x1f 1035 ; OPTM1: sar {{.*}},0x1f
1030 1036
1031 ; ARM32-LABEL: sext8To64 1037 ; ARM32-LABEL: sext8To64
1032 ; ARM32: sxtb 1038 ; ARM32: sxtb
1033 ; ARM32: asr {{.*}}, #31 1039 ; ARM32: asr {{.*}}, #31
1034 1040
1035 ; MIPS32-LABEL: sext8To64 1041 ; MIPS32-LABEL: sext8To64
1036 ; MIPS32: sll a0,a0,0x18 1042 ; MIPS32: sll {{.*}},a0,0x18
1037 ; MIPS32: sra a0,a0,0x18 1043 ; MIPS32: sra {{.*}},{{.*}},0x18
1038 ; MIPS32: sra v1,a0,0x1f 1044 ; MIPS32: sra {{.*}},{{.*}},0x1f
1039 ; MIPS32: move v0,a0 1045 ; MIPS32: move v1,{{.*}}
1046 ; MIPS32: move v0,{{.*}}
1040 1047
1041 define internal i64 @sext1To64(i32 %a) { 1048 define internal i64 @sext1To64(i32 %a) {
1042 entry: 1049 entry:
1043 %a.arg_trunc = trunc i32 %a to i1 1050 %a.arg_trunc = trunc i32 %a to i1
1044 %conv = sext i1 %a.arg_trunc to i64 1051 %conv = sext i1 %a.arg_trunc to i64
1045 ret i64 %conv 1052 ret i64 %conv
1046 } 1053 }
1047 ; CHECK-LABEL: sext1To64 1054 ; CHECK-LABEL: sext1To64
1048 ; CHECK: mov 1055 ; CHECK: mov
1049 ; CHECK: shl {{.*}},0x1f 1056 ; CHECK: shl {{.*}},0x1f
1050 ; CHECK: sar {{.*}},0x1f 1057 ; CHECK: sar {{.*}},0x1f
1051 ; 1058 ;
1052 ; OPTM1-LABEL: sext1To64 1059 ; OPTM1-LABEL: sext1To64
1053 ; OPTM1: mov 1060 ; OPTM1: mov
1054 ; OPTM1: shl {{.*}},0x1f 1061 ; OPTM1: shl {{.*}},0x1f
1055 ; OPTM1: sar {{.*}},0x1f 1062 ; OPTM1: sar {{.*}},0x1f
1056 1063
1057 ; ARM32-LABEL: sext1To64 1064 ; ARM32-LABEL: sext1To64
1058 ; ARM32: mov {{.*}}, #0 1065 ; ARM32: mov {{.*}}, #0
1059 ; ARM32: tst {{.*}}, #1 1066 ; ARM32: tst {{.*}}, #1
1060 ; ARM32: mvn {{.*}}, #0 1067 ; ARM32: mvn {{.*}}, #0
1061 ; ARM32: movne 1068 ; ARM32: movne
1062 1069
1070 ; MIPS32-LABEL: sext1To64
1071 ; MIPS32: sll {{.*}},a0,0x1f
1072 ; MIPS32: sra {{.*}},{{.*}},0x1f
1073 ; MIPS32: move v1,{{.*}}
1074 ; MIPS32: move v0,{{.*}}
1075
1063 define internal i64 @zext32To64(i32 %a) { 1076 define internal i64 @zext32To64(i32 %a) {
1064 entry: 1077 entry:
1065 %conv = zext i32 %a to i64 1078 %conv = zext i32 %a to i64
1066 ret i64 %conv 1079 ret i64 %conv
1067 } 1080 }
1068 ; CHECK-LABEL: zext32To64 1081 ; CHECK-LABEL: zext32To64
1069 ; CHECK: mov 1082 ; CHECK: mov
1070 ; CHECK: mov {{.*}},0x0 1083 ; CHECK: mov {{.*}},0x0
1071 ; 1084 ;
1072 ; OPTM1-LABEL: zext32To64 1085 ; OPTM1-LABEL: zext32To64
1073 ; OPTM1: mov 1086 ; OPTM1: mov
1074 ; OPTM1: mov {{.*}},0x0 1087 ; OPTM1: mov {{.*}},0x0
1075 1088
1076 ; ARM32-LABEL: zext32To64 1089 ; ARM32-LABEL: zext32To64
1077 ; ARM32: mov {{.*}}, #0 1090 ; ARM32: mov {{.*}}, #0
1078 1091
1079 ; MIPS32-LABEL: zext32To64 1092 ; MIPS32-LABEL: zext32To64
1080 ; MIPS32: li v1,0 1093 ; MIPS32: li {{.*}},0
1081 ; MIPS32: move v0,a0 1094 ; MIPS32: move v1,{{.*}}
1095 ; MIPS32: move v0,{{.*}}
1082 1096
1083 define internal i64 @zext16To64(i32 %a) { 1097 define internal i64 @zext16To64(i32 %a) {
1084 entry: 1098 entry:
1085 %a.arg_trunc = trunc i32 %a to i16 1099 %a.arg_trunc = trunc i32 %a to i16
1086 %conv = zext i16 %a.arg_trunc to i64 1100 %conv = zext i16 %a.arg_trunc to i64
1087 ret i64 %conv 1101 ret i64 %conv
1088 } 1102 }
1089 ; CHECK-LABEL: zext16To64 1103 ; CHECK-LABEL: zext16To64
1090 ; CHECK: movzx 1104 ; CHECK: movzx
1091 ; CHECK: mov {{.*}},0x0 1105 ; CHECK: mov {{.*}},0x0
1092 ; 1106 ;
1093 ; OPTM1-LABEL: zext16To64 1107 ; OPTM1-LABEL: zext16To64
1094 ; OPTM1: movzx 1108 ; OPTM1: movzx
1095 ; OPTM1: mov {{.*}},0x0 1109 ; OPTM1: mov {{.*}},0x0
1096 1110
1097 ; ARM32-LABEL: zext16To64 1111 ; ARM32-LABEL: zext16To64
1098 ; ARM32: uxth 1112 ; ARM32: uxth
1099 ; ARM32: mov {{.*}}, #0 1113 ; ARM32: mov {{.*}}, #0
1100 1114
1101 ; MIPS32-LABEL: zext16To64 1115 ; MIPS32-LABEL: zext16To64
1102 ; MIPS32: andi a0,a0,0xffff 1116 ; MIPS32: andi {{.*}},a0,0xffff
1103 ; MIPS32: li v1,0 1117 ; MIPS32: li {{.*}},0
1104 ; MIPS32: move v0,a0 1118 ; MIPS32: move v1,{{.*}}
1119 ; MIPS32: move v0,{{.*}}
1105 1120
1106 define internal i64 @zext8To64(i32 %a) { 1121 define internal i64 @zext8To64(i32 %a) {
1107 entry: 1122 entry:
1108 %a.arg_trunc = trunc i32 %a to i8 1123 %a.arg_trunc = trunc i32 %a to i8
1109 %conv = zext i8 %a.arg_trunc to i64 1124 %conv = zext i8 %a.arg_trunc to i64
1110 ret i64 %conv 1125 ret i64 %conv
1111 } 1126 }
1112 ; CHECK-LABEL: zext8To64 1127 ; CHECK-LABEL: zext8To64
1113 ; CHECK: movzx 1128 ; CHECK: movzx
1114 ; CHECK: mov {{.*}},0x0 1129 ; CHECK: mov {{.*}},0x0
1115 ; 1130 ;
1116 ; OPTM1-LABEL: zext8To64 1131 ; OPTM1-LABEL: zext8To64
1117 ; OPTM1: movzx 1132 ; OPTM1: movzx
1118 ; OPTM1: mov {{.*}},0x0 1133 ; OPTM1: mov {{.*}},0x0
1119 1134
1120 ; ARM32-LABEL: zext8To64 1135 ; ARM32-LABEL: zext8To64
1121 ; ARM32: uxtb 1136 ; ARM32: uxtb
1122 ; ARM32: mov {{.*}}, #0 1137 ; ARM32: mov {{.*}}, #0
1123 1138
1124 ; MIPS32-LABEL: zext8To64 1139 ; MIPS32-LABEL: zext8To64
1125 ; MIPS32: andi a0,a0,0xff 1140 ; MIPS32: andi {{.*}},a0,0xff
1126 ; MIPS32: li v1,0 1141 ; MIPS32: li {{.*}},0
1127 ; MIPS32: move v0,a0 1142 ; MIPS32: move v1,{{.*}}
1143 ; MIPS32: move v0,{{.*}}
1128 1144
1129 define internal i64 @zext1To64(i32 %a) { 1145 define internal i64 @zext1To64(i32 %a) {
1130 entry: 1146 entry:
1131 %a.arg_trunc = trunc i32 %a to i1 1147 %a.arg_trunc = trunc i32 %a to i1
1132 %conv = zext i1 %a.arg_trunc to i64 1148 %conv = zext i1 %a.arg_trunc to i64
1133 ret i64 %conv 1149 ret i64 %conv
1134 } 1150 }
1135 ; CHECK-LABEL: zext1To64 1151 ; CHECK-LABEL: zext1To64
1136 ; CHECK: and {{.*}},0x1 1152 ; CHECK: and {{.*}},0x1
1137 ; CHECK: mov {{.*}},0x0 1153 ; CHECK: mov {{.*}},0x0
1138 ; 1154 ;
1139 ; OPTM1-LABEL: zext1To64 1155 ; OPTM1-LABEL: zext1To64
1140 ; OPTM1: and {{.*}},0x1 1156 ; OPTM1: and {{.*}},0x1
1141 ; OPTM1: mov {{.*}},0x0 1157 ; OPTM1: mov {{.*}},0x0
1142 1158
1143 ; ARM32-LABEL: zext1To64 1159 ; ARM32-LABEL: zext1To64
1144 ; ARM32: and {{.*}}, #1 1160 ; ARM32: and {{.*}}, #1
1145 ; ARM32: mov {{.*}}, #0 1161 ; ARM32: mov {{.*}}, #0
1146 ; ARM32: bx 1162 ; ARM32: bx
1147 1163
1164 ; MIPS32-LABEL: zext1To64
1165 ; MIPS32: andi {{.*}},a0,0x1
1166 ; MIPS32: li {{.*}},0
1167 ; MIPS32: move v1,{{.*}}
1168 ; MIPS32: move v0,{{.*}}
1169
1148 define internal void @icmpEq64(i64 %a, i64 %b, i64 %c, i64 %d) { 1170 define internal void @icmpEq64(i64 %a, i64 %b, i64 %c, i64 %d) {
1149 entry: 1171 entry:
1150 %cmp = icmp eq i64 %a, %b 1172 %cmp = icmp eq i64 %a, %b
1151 br i1 %cmp, label %if.then, label %if.end 1173 br i1 %cmp, label %if.then, label %if.end
1152 1174
1153 if.then: ; preds = %entry 1175 if.then: ; preds = %entry
1154 call void @func() 1176 call void @func()
1155 br label %if.end 1177 br label %if.end
1156 1178
1157 if.end: ; preds = %if.then, %entry 1179 if.end: ; preds = %if.then, %entry
(...skipping 879 matching lines...) Expand 10 before | Expand all | Expand 10 after
2037 %s = lshr i64 %a, 40 2059 %s = lshr i64 %a, 40
2038 %t = trunc i64 %s to i32 2060 %t = trunc i64 %s to i32
2039 %r = sub i32 %t, 1 2061 %r = sub i32 %t, 1
2040 ret i32 %r 2062 ret i32 %r
2041 ; ARM32-LABEL: subOneToUpperAfterShift 2063 ; ARM32-LABEL: subOneToUpperAfterShift
2042 ; ARM32: subs 2064 ; ARM32: subs
2043 ; ARM32: sbc 2065 ; ARM32: sbc
2044 ; ARM32: lsr 2066 ; ARM32: lsr
2045 ; ARM32: sub 2067 ; ARM32: sub
2046 } 2068 }
OLDNEW
« no previous file with comments | « src/IceTargetLoweringMIPS32.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698