| OLD | NEW |
| 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 997 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1008 br i1 %cmp1, label %if.then2, label %if.end3 | 1008 br i1 %cmp1, label %if.then2, label %if.end3 |
| 1009 | 1009 |
| 1010 if.then2: ; preds = %if.end | 1010 if.then2: ; preds = %if.end |
| 1011 call void @func() | 1011 call void @func() |
| 1012 br label %if.end3 | 1012 br label %if.end3 |
| 1013 | 1013 |
| 1014 if.end3: ; preds = %if.then2, %if.end | 1014 if.end3: ; preds = %if.then2, %if.end |
| 1015 ret void | 1015 ret void |
| 1016 } | 1016 } |
| 1017 ; CHECK-LABEL: icmpEq64 | 1017 ; CHECK-LABEL: icmpEq64 |
| 1018 ; CHECK: jne | 1018 ; CHECK: cmp {{.*}} |
| 1019 ; CHECK: je | 1019 ; CHECK-NEXT: jne {{.*}} |
| 1020 ; CHECK: call | 1020 ; CHECK-NEXT: cmp {{.*}} |
| 1021 ; CHECK: jne | 1021 ; CHECK-NEXT: jne {{.*}} |
| 1022 ; CHECK: je | 1022 ; CHECK-NEXT: call {{.*}} |
| 1023 ; CHECK: call | 1023 ; CHECK: cmp {{.*}} |
| 1024 ; CHECK-NEXT: jne {{.*}} |
| 1025 ; CHECK-NEXT: cmp {{.*}} |
| 1026 ; CHECK-NEXT: jne {{.*}} |
| 1027 ; CHECK-NEXT: call {{.*}} |
| 1024 ; | 1028 ; |
| 1025 ; OPTM1-LABEL: icmpEq64 | 1029 ; OPTM1-LABEL: icmpEq64 |
| 1026 ; OPTM1: jne | 1030 ; OPTM1: mov [[RESULT:.*]],0x1 |
| 1027 ; OPTM1: je | 1031 ; OPTM1-NEXT: cmp {{.*}} |
| 1028 ; OPTM1: call | 1032 ; OPTM1-NEXT: jne {{.*}} |
| 1029 ; OPTM1: jne | 1033 ; OPTM1-NEXT: cmp {{.*}} |
| 1030 ; OPTM1: je | 1034 ; OPTM1-NEXT: je {{.*}} |
| 1031 ; OPTM1: call | 1035 ; OPTM1-NEXT: mov [[RESULT]],0x0 |
| 1036 ; OPTM1-NEXT: cmp [[RESULT]],0x0 |
| 1037 ; OPTM1-NEXT: jne |
| 1038 ; OPTM1-NEXT: jmp |
| 1039 ; OPTM1-NEXT: call |
| 1040 ; OPTM1: mov [[RESULT:.*]],0x1 |
| 1041 ; OPTM1-NEXT: cmp {{.*}} |
| 1042 ; OPTM1-NEXT: jne {{.*}} |
| 1043 ; OPTM1-NEXT: cmp {{.*}} |
| 1044 ; OPTM1-NEXT: je {{.*}} |
| 1045 ; OPTM1-NEXT: mov [[RESULT]],0x0 |
| 1046 ; OPTM1-NEXT: cmp [[RESULT]],0x0 |
| 1047 ; OPTM1-NEXT: jne |
| 1048 ; OPTM1-NEXT: jmp |
| 1049 ; OPTM1-NEXT: call |
| 1032 | 1050 |
| 1033 ; ARM32-LABEL: icmpEq64 | 1051 ; ARM32-LABEL: icmpEq64 |
| 1034 ; ARM32: cmp | 1052 ; ARM32: cmp |
| 1035 ; ARM32: cmpeq | 1053 ; ARM32: cmpeq |
| 1036 ; ARM32: moveq | 1054 ; ARM32: moveq |
| 1037 ; ARM32: movne | 1055 ; ARM32: movne |
| 1038 ; ARM32: bl | 1056 ; ARM32: bl |
| 1039 ; ARM32: cmp | 1057 ; ARM32: cmp |
| 1040 ; ARM32: cmpeq | 1058 ; ARM32: cmpeq |
| 1041 ; ARM32: moveq | 1059 ; ARM32: moveq |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1058 br i1 %cmp1, label %if.then2, label %if.end3 | 1076 br i1 %cmp1, label %if.then2, label %if.end3 |
| 1059 | 1077 |
| 1060 if.then2: ; preds = %if.end | 1078 if.then2: ; preds = %if.end |
| 1061 call void @func() | 1079 call void @func() |
| 1062 br label %if.end3 | 1080 br label %if.end3 |
| 1063 | 1081 |
| 1064 if.end3: ; preds = %if.end, %if.then2 | 1082 if.end3: ; preds = %if.end, %if.then2 |
| 1065 ret void | 1083 ret void |
| 1066 } | 1084 } |
| 1067 ; CHECK-LABEL: icmpNe64 | 1085 ; CHECK-LABEL: icmpNe64 |
| 1068 ; CHECK: jne | 1086 ; CHECK: cmp {{.*}} |
| 1069 ; CHECK: jne | 1087 ; CHECK-NEXT: jne {{.*}} |
| 1070 ; CHECK: call | 1088 ; CHECK-NEXT: cmp {{.*}} |
| 1071 ; CHECK: jne | 1089 ; CHECK-NEXT: je {{.*}} |
| 1072 ; CHECK: jne | 1090 ; CHECK-NEXT: call {{.*}} |
| 1073 ; CHECK: call | 1091 ; CHECK: cmp {{.*}} |
| 1092 ; CHECK-NEXT: jne {{.*}} |
| 1093 ; CHECK-NEXT: cmp {{.*}} |
| 1094 ; CHECK-NEXT: je {{.*}} |
| 1095 ; CHECK-NEXT: call {{.*}} |
| 1074 ; | 1096 ; |
| 1075 ; OPTM1-LABEL: icmpNe64 | 1097 ; OPTM1-LABEL: icmpNe64 |
| 1076 ; OPTM1: jne | 1098 ; OPTM1: mov [[RESULT:.*]],0x1 |
| 1077 ; OPTM1: jne | 1099 ; OPTM1-NEXT: cmp {{.*}} |
| 1078 ; OPTM1: call | 1100 ; OPTM1-NEXT: jne {{.*}} |
| 1079 ; OPTM1: jne | 1101 ; OPTM1-NEXT: cmp {{.*}} |
| 1080 ; OPTM1: jne | 1102 ; OPTM1-NEXT: jne {{.*}} |
| 1081 ; OPTM1: call | 1103 ; OPTM1-NEXT: mov [[RESULT:.*]],0x0 |
| 1104 ; OPTM1-NEXT: cmp [[RESULT]],0x0 |
| 1105 ; OPTM1-NEXT: jne {{.*}} |
| 1106 ; OPTM1-NEXT: jmp {{.*}} |
| 1107 ; OPTM1-NEXT: call |
| 1108 ; OPTM1: mov [[RESULT:.*]],0x1 |
| 1109 ; OPTM1-NEXT: cmp {{.*}} |
| 1110 ; OPTM1-NEXT: jne {{.*}} |
| 1111 ; OPTM1-NEXT: cmp {{.*}} |
| 1112 ; OPTM1-NEXT: jne {{.*}} |
| 1113 ; OPTM1-NEXT: mov [[RESULT:.*]],0x0 |
| 1114 ; OPTM1-NEXT: cmp [[RESULT]],0x0 |
| 1115 ; OPTM1-NEXT: jne {{.*}} |
| 1116 ; OPTM1-NEXT: jmp {{.*}} |
| 1117 ; OPTM1-NEXT: call |
| 1082 | 1118 |
| 1083 ; ARM32-LABEL: icmpNe64 | 1119 ; ARM32-LABEL: icmpNe64 |
| 1084 ; ARM32: cmp | 1120 ; ARM32: cmp |
| 1085 ; ARM32: cmpeq | 1121 ; ARM32: cmpeq |
| 1086 ; ARM32: movne | 1122 ; ARM32: movne |
| 1087 ; ARM32: moveq | 1123 ; ARM32: moveq |
| 1088 ; ARM32: bl | 1124 ; ARM32: bl |
| 1089 ; ARM32: cmp | 1125 ; ARM32: cmp |
| 1090 ; ARM32: cmpeq | 1126 ; ARM32: cmpeq |
| 1091 ; ARM32: movne | 1127 ; ARM32: movne |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1108 if.then2: ; preds = %if.end | 1144 if.then2: ; preds = %if.end |
| 1109 call void @func() | 1145 call void @func() |
| 1110 br label %if.end3 | 1146 br label %if.end3 |
| 1111 | 1147 |
| 1112 if.end3: ; preds = %if.then2, %if.end | 1148 if.end3: ; preds = %if.then2, %if.end |
| 1113 ret void | 1149 ret void |
| 1114 } | 1150 } |
| 1115 ; CHECK-LABEL: icmpGt64 | 1151 ; CHECK-LABEL: icmpGt64 |
| 1116 ; CHECK: ja | 1152 ; CHECK: ja |
| 1117 ; CHECK: jb | 1153 ; CHECK: jb |
| 1118 ; CHECK: ja | 1154 ; CHECK: jbe |
| 1119 ; CHECK: call | 1155 ; CHECK: call |
| 1120 ; CHECK: jg | 1156 ; CHECK: jg |
| 1121 ; CHECK: jl | 1157 ; CHECK: jl |
| 1122 ; CHECK: ja | 1158 ; CHECK: jbe |
| 1123 ; CHECK: call | 1159 ; CHECK: call |
| 1124 ; | 1160 ; |
| 1125 ; OPTM1-LABEL: icmpGt64 | 1161 ; OPTM1-LABEL: icmpGt64 |
| 1126 ; OPTM1: ja | 1162 ; OPTM1: ja |
| 1127 ; OPTM1: jb | 1163 ; OPTM1: jb |
| 1128 ; OPTM1: ja | 1164 ; OPTM1: ja |
| 1129 ; OPTM1: call | 1165 ; OPTM1: call |
| 1130 ; OPTM1: jg | 1166 ; OPTM1: jg |
| 1131 ; OPTM1: jl | 1167 ; OPTM1: jl |
| 1132 ; OPTM1: ja | 1168 ; OPTM1: ja |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1160 if.then2: ; preds = %if.end | 1196 if.then2: ; preds = %if.end |
| 1161 call void @func() | 1197 call void @func() |
| 1162 br label %if.end3 | 1198 br label %if.end3 |
| 1163 | 1199 |
| 1164 if.end3: ; preds = %if.end, %if.then2 | 1200 if.end3: ; preds = %if.end, %if.then2 |
| 1165 ret void | 1201 ret void |
| 1166 } | 1202 } |
| 1167 ; CHECK-LABEL: icmpGe64 | 1203 ; CHECK-LABEL: icmpGe64 |
| 1168 ; CHECK: ja | 1204 ; CHECK: ja |
| 1169 ; CHECK: jb | 1205 ; CHECK: jb |
| 1170 ; CHECK: jae | 1206 ; CHECK: jb |
| 1171 ; CHECK: call | 1207 ; CHECK: call |
| 1172 ; CHECK: jg | 1208 ; CHECK: jg |
| 1173 ; CHECK: jl | 1209 ; CHECK: jl |
| 1174 ; CHECK: jae | 1210 ; CHECK: jb |
| 1175 ; CHECK: call | 1211 ; CHECK: call |
| 1176 ; | 1212 ; |
| 1177 ; OPTM1-LABEL: icmpGe64 | 1213 ; OPTM1-LABEL: icmpGe64 |
| 1178 ; OPTM1: ja | 1214 ; OPTM1: ja |
| 1179 ; OPTM1: jb | 1215 ; OPTM1: jb |
| 1180 ; OPTM1: jae | 1216 ; OPTM1: jae |
| 1181 ; OPTM1: call | 1217 ; OPTM1: call |
| 1182 ; OPTM1: jg | 1218 ; OPTM1: jg |
| 1183 ; OPTM1: jl | 1219 ; OPTM1: jl |
| 1184 ; OPTM1: jae | 1220 ; OPTM1: jae |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1212 if.then2: ; preds = %if.end | 1248 if.then2: ; preds = %if.end |
| 1213 call void @func() | 1249 call void @func() |
| 1214 br label %if.end3 | 1250 br label %if.end3 |
| 1215 | 1251 |
| 1216 if.end3: ; preds = %if.then2, %if.end | 1252 if.end3: ; preds = %if.then2, %if.end |
| 1217 ret void | 1253 ret void |
| 1218 } | 1254 } |
| 1219 ; CHECK-LABEL: icmpLt64 | 1255 ; CHECK-LABEL: icmpLt64 |
| 1220 ; CHECK: jb | 1256 ; CHECK: jb |
| 1221 ; CHECK: ja | 1257 ; CHECK: ja |
| 1222 ; CHECK: jb | 1258 ; CHECK: jae |
| 1223 ; CHECK: call | 1259 ; CHECK: call |
| 1224 ; CHECK: jl | 1260 ; CHECK: jl |
| 1225 ; CHECK: jg | 1261 ; CHECK: jg |
| 1226 ; CHECK: jb | 1262 ; CHECK: jae |
| 1227 ; CHECK: call | 1263 ; CHECK: call |
| 1228 ; | 1264 ; |
| 1229 ; OPTM1-LABEL: icmpLt64 | 1265 ; OPTM1-LABEL: icmpLt64 |
| 1230 ; OPTM1: jb | 1266 ; OPTM1: jb |
| 1231 ; OPTM1: ja | 1267 ; OPTM1: ja |
| 1232 ; OPTM1: jb | 1268 ; OPTM1: jb |
| 1233 ; OPTM1: call | 1269 ; OPTM1: call |
| 1234 ; OPTM1: jl | 1270 ; OPTM1: jl |
| 1235 ; OPTM1: jg | 1271 ; OPTM1: jg |
| 1236 ; OPTM1: jb | 1272 ; OPTM1: jb |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1264 if.then2: ; preds = %if.end | 1300 if.then2: ; preds = %if.end |
| 1265 call void @func() | 1301 call void @func() |
| 1266 br label %if.end3 | 1302 br label %if.end3 |
| 1267 | 1303 |
| 1268 if.end3: ; preds = %if.end, %if.then2 | 1304 if.end3: ; preds = %if.end, %if.then2 |
| 1269 ret void | 1305 ret void |
| 1270 } | 1306 } |
| 1271 ; CHECK-LABEL: icmpLe64 | 1307 ; CHECK-LABEL: icmpLe64 |
| 1272 ; CHECK: jb | 1308 ; CHECK: jb |
| 1273 ; CHECK: ja | 1309 ; CHECK: ja |
| 1274 ; CHECK: jbe | 1310 ; CHECK: ja |
| 1275 ; CHECK: call | 1311 ; CHECK: call |
| 1276 ; CHECK: jl | 1312 ; CHECK: jl |
| 1277 ; CHECK: jg | 1313 ; CHECK: jg |
| 1278 ; CHECK: jbe | 1314 ; CHECK: ja |
| 1279 ; CHECK: call | 1315 ; CHECK: call |
| 1280 ; | 1316 ; |
| 1281 ; OPTM1-LABEL: icmpLe64 | 1317 ; OPTM1-LABEL: icmpLe64 |
| 1282 ; OPTM1: jb | 1318 ; OPTM1: jb |
| 1283 ; OPTM1: ja | 1319 ; OPTM1: ja |
| 1284 ; OPTM1: jbe | 1320 ; OPTM1: jbe |
| 1285 ; OPTM1: call | 1321 ; OPTM1: call |
| 1286 ; OPTM1: jl | 1322 ; OPTM1: jl |
| 1287 ; OPTM1: jg | 1323 ; OPTM1: jg |
| 1288 ; OPTM1: jbe | 1324 ; OPTM1: jbe |
| (...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1810 ; CHECK-LABEL: phi64Undef | 1846 ; CHECK-LABEL: phi64Undef |
| 1811 ; CHECK: mov {{.*}},0x0 | 1847 ; CHECK: mov {{.*}},0x0 |
| 1812 ; CHECK: mov {{.*}},0x0 | 1848 ; CHECK: mov {{.*}},0x0 |
| 1813 ; OPTM1-LABEL: phi64Undef | 1849 ; OPTM1-LABEL: phi64Undef |
| 1814 ; OPTM1: mov {{.*}},0x0 | 1850 ; OPTM1: mov {{.*}},0x0 |
| 1815 ; OPTM1: mov {{.*}},0x0 | 1851 ; OPTM1: mov {{.*}},0x0 |
| 1816 ; ARM32-LABEL: phi64Undef | 1852 ; ARM32-LABEL: phi64Undef |
| 1817 ; ARM32: mov {{.*}} #0 | 1853 ; ARM32: mov {{.*}} #0 |
| 1818 ; ARM32: mov {{.*}} #0 | 1854 ; ARM32: mov {{.*}} #0 |
| 1819 | 1855 |
| OLD | NEW |