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 \ |
11 ; RUN: | %if --need=target_X8632 --command FileCheck --check-prefix=OPTM1 %s | 11 ; RUN: | %if --need=target_X8632 --command FileCheck --check-prefix=OPTM1 %s |
12 | 12 |
13 ; TODO(jvoung): Stop skipping unimplemented parts (via --skip-unimplemented) | 13 ; TODO(jvoung): Stop skipping unimplemented parts (via --skip-unimplemented) |
14 ; once enough infrastructure is in. Also, switch to --filetype=obj | 14 ; once enough infrastructure is in. Also, switch to --filetype=obj |
15 ; when possible. | 15 ; when possible. |
16 ; RUN: %if --need=target_ARM32 --need=allow_dump \ | 16 ; RUN: %if --need=target_ARM32 --need=allow_dump \ |
17 ; RUN: --command %p2i --filetype=asm --assemble \ | 17 ; RUN: --command %p2i --filetype=asm --assemble \ |
18 ; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \ | 18 ; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \ |
19 ; RUN: -allow-externally-defined-symbols \ | 19 ; RUN: -allow-externally-defined-symbols \ |
20 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ | 20 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ |
21 ; RUN: --command FileCheck --check-prefix ARM32 %s | 21 ; RUN: --command FileCheck --check-prefix ARM32 --check-prefix ARM32-O2 %s |
22 ; RUN: %if --need=target_ARM32 --need=allow_dump \ | 22 ; RUN: %if --need=target_ARM32 --need=allow_dump \ |
23 ; RUN: --command %p2i --filetype=asm --assemble --disassemble --target arm32 \ | 23 ; RUN: --command %p2i --filetype=asm --assemble --disassemble --target arm32 \ |
24 ; RUN: -i %s --args -Om1 --skip-unimplemented \ | 24 ; RUN: -i %s --args -Om1 --skip-unimplemented \ |
25 ; RUN: -allow-externally-defined-symbols \ | 25 ; RUN: -allow-externally-defined-symbols \ |
26 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ | 26 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ |
27 ; RUN: --command FileCheck --check-prefix ARM32 %s | 27 ; RUN: --command FileCheck --check-prefix ARM32 --check-prefix ARM32-OM1 %s |
28 | 28 |
29 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 | 29 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 |
30 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 | 30 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 |
31 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8 | 31 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8 |
32 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4 | 32 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4 |
33 | 33 |
34 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) { | 34 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) { |
35 entry: | 35 entry: |
36 ret i32 %b | 36 ret i32 %b |
37 } | 37 } |
(...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
842 ; CHECK: mov eax,DWORD PTR [esp+0x4] | 842 ; CHECK: mov eax,DWORD PTR [esp+0x4] |
843 ; CHECK: and eax,0x1 | 843 ; CHECK: and eax,0x1 |
844 ; CHECK-NOT: and eax,0x1 | 844 ; CHECK-NOT: and eax,0x1 |
845 ; | 845 ; |
846 ; OPTM1-LABEL: trunc64To1 | 846 ; OPTM1-LABEL: trunc64To1 |
847 ; OPTM1: mov eax,DWORD PTR [esp+ | 847 ; OPTM1: mov eax,DWORD PTR [esp+ |
848 ; OPTM1: and eax,0x1 | 848 ; OPTM1: and eax,0x1 |
849 ; OPTM1-NOT: and eax,0x1 | 849 ; OPTM1-NOT: and eax,0x1 |
850 | 850 |
851 ; ARM32-LABEL: trunc64To1 | 851 ; ARM32-LABEL: trunc64To1 |
852 ; ARM32: and r0, r0, #1 | 852 ; ARM32-OM1: and r0, r0, #1 |
853 ; ARM32: and r0, r0, #1 | 853 ; ARM32-OM1: and r0, r0, #1 |
| 854 ; ARM32-O2: tst r0, #1 |
| 855 ; ARM32-O2: moveq [[RES:r[0-9]+]], #0 |
| 856 ; ARM32-O2: movne [[RES]], #1 |
854 | 857 |
855 define internal i64 @sext32To64(i32 %a) { | 858 define internal i64 @sext32To64(i32 %a) { |
856 entry: | 859 entry: |
857 %conv = sext i32 %a to i64 | 860 %conv = sext i32 %a to i64 |
858 ret i64 %conv | 861 ret i64 %conv |
859 } | 862 } |
860 ; CHECK-LABEL: sext32To64 | 863 ; CHECK-LABEL: sext32To64 |
861 ; CHECK: mov | 864 ; CHECK: mov |
862 ; CHECK: sar {{.*}},0x1f | 865 ; CHECK: sar {{.*}},0x1f |
863 ; | 866 ; |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
914 ; CHECK: mov | 917 ; CHECK: mov |
915 ; CHECK: shl {{.*}},0x1f | 918 ; CHECK: shl {{.*}},0x1f |
916 ; CHECK: sar {{.*}},0x1f | 919 ; CHECK: sar {{.*}},0x1f |
917 ; | 920 ; |
918 ; OPTM1-LABEL: sext1To64 | 921 ; OPTM1-LABEL: sext1To64 |
919 ; OPTM1: mov | 922 ; OPTM1: mov |
920 ; OPTM1: shl {{.*}},0x1f | 923 ; OPTM1: shl {{.*}},0x1f |
921 ; OPTM1: sar {{.*}},0x1f | 924 ; OPTM1: sar {{.*}},0x1f |
922 | 925 |
923 ; ARM32-LABEL: sext1To64 | 926 ; ARM32-LABEL: sext1To64 |
924 ; ARM32: lsl {{.*}}, #31 | 927 ; ARM32-OM1: lsl {{.*}}, #31 |
925 ; ARM32: asr {{.*}}, #31 | 928 ; ARM32-OM1: asr {{.*}}, #31 |
| 929 ; ARM32-O2: tst r0, #1 |
| 930 ; ARM32-O2: mvn [[M1:r[0-9]+]], #0 |
| 931 ; ARM32-O2: moveq [[RES:r[0-9]+]], #0 |
| 932 ; ARM32-O2: movne [[RES]], [[M1]] |
926 | 933 |
927 define internal i64 @zext32To64(i32 %a) { | 934 define internal i64 @zext32To64(i32 %a) { |
928 entry: | 935 entry: |
929 %conv = zext i32 %a to i64 | 936 %conv = zext i32 %a to i64 |
930 ret i64 %conv | 937 ret i64 %conv |
931 } | 938 } |
932 ; CHECK-LABEL: zext32To64 | 939 ; CHECK-LABEL: zext32To64 |
933 ; CHECK: mov | 940 ; CHECK: mov |
934 ; CHECK: mov {{.*}},0x0 | 941 ; CHECK: mov {{.*}},0x0 |
935 ; | 942 ; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
984 } | 991 } |
985 ; CHECK-LABEL: zext1To64 | 992 ; CHECK-LABEL: zext1To64 |
986 ; CHECK: and {{.*}},0x1 | 993 ; CHECK: and {{.*}},0x1 |
987 ; CHECK: mov {{.*}},0x0 | 994 ; CHECK: mov {{.*}},0x0 |
988 ; | 995 ; |
989 ; OPTM1-LABEL: zext1To64 | 996 ; OPTM1-LABEL: zext1To64 |
990 ; OPTM1: and {{.*}},0x1 | 997 ; OPTM1: and {{.*}},0x1 |
991 ; OPTM1: mov {{.*}},0x0 | 998 ; OPTM1: mov {{.*}},0x0 |
992 | 999 |
993 ; ARM32-LABEL: zext1To64 | 1000 ; ARM32-LABEL: zext1To64 |
994 ; ARM32: and {{.*}}, #1 | 1001 ; ARM32-OM1: and {{.*}}, #1 |
995 ; ARM32: mov {{.*}}, #0 | 1002 ; ARM32-OM1: mov {{.*}}, #0 |
| 1003 ; ARM32-O2: tst r0, #1 |
| 1004 ; ARM32-O2: moveq {{[^,]*}}, #0 |
| 1005 ; ARM32-O2: movne {{[^,]*}}, #1 |
996 | 1006 |
997 define internal void @icmpEq64(i64 %a, i64 %b, i64 %c, i64 %d) { | 1007 define internal void @icmpEq64(i64 %a, i64 %b, i64 %c, i64 %d) { |
998 entry: | 1008 entry: |
999 %cmp = icmp eq i64 %a, %b | 1009 %cmp = icmp eq i64 %a, %b |
1000 br i1 %cmp, label %if.then, label %if.end | 1010 br i1 %cmp, label %if.then, label %if.end |
1001 | 1011 |
1002 if.then: ; preds = %entry | 1012 if.then: ; preds = %entry |
1003 call void @func() | 1013 call void @func() |
1004 br label %if.end | 1014 br label %if.end |
1005 | 1015 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1044 ; OPTM1-NEXT: je {{.*}} | 1054 ; OPTM1-NEXT: je {{.*}} |
1045 ; OPTM1-NEXT: mov [[RESULT]],0x0 | 1055 ; OPTM1-NEXT: mov [[RESULT]],0x0 |
1046 ; OPTM1-NEXT: cmp [[RESULT]],0x0 | 1056 ; OPTM1-NEXT: cmp [[RESULT]],0x0 |
1047 ; OPTM1-NEXT: jne | 1057 ; OPTM1-NEXT: jne |
1048 ; OPTM1-NEXT: jmp | 1058 ; OPTM1-NEXT: jmp |
1049 ; OPTM1-NEXT: call | 1059 ; OPTM1-NEXT: call |
1050 | 1060 |
1051 ; ARM32-LABEL: icmpEq64 | 1061 ; ARM32-LABEL: icmpEq64 |
1052 ; ARM32: cmp | 1062 ; ARM32: cmp |
1053 ; ARM32: cmpeq | 1063 ; ARM32: cmpeq |
1054 ; ARM32: moveq | 1064 ; ARM32-OM1: movne |
1055 ; ARM32: movne | 1065 ; ARM32-OM1: moveq |
| 1066 ; ARM32-OM1: cmp |
| 1067 ; ARM32-O2: bne |
1056 ; ARM32: bl | 1068 ; ARM32: bl |
1057 ; ARM32: cmp | 1069 ; ARM32: cmp |
1058 ; ARM32: cmpeq | 1070 ; ARM32: cmpeq |
1059 ; ARM32: moveq | 1071 ; ARM32-OM1: movne |
1060 ; ARM32: movne | 1072 ; ARM32-OM1: moveq |
| 1073 ; ARM32-OM1: cmp |
| 1074 ; ARM32-O2: bne |
1061 ; ARM32: bl | 1075 ; ARM32: bl |
1062 | 1076 |
1063 declare void @func() | 1077 declare void @func() |
1064 | 1078 |
1065 define internal void @icmpNe64(i64 %a, i64 %b, i64 %c, i64 %d) { | 1079 define internal void @icmpNe64(i64 %a, i64 %b, i64 %c, i64 %d) { |
1066 entry: | 1080 entry: |
1067 %cmp = icmp ne i64 %a, %b | 1081 %cmp = icmp ne i64 %a, %b |
1068 br i1 %cmp, label %if.then, label %if.end | 1082 br i1 %cmp, label %if.then, label %if.end |
1069 | 1083 |
1070 if.then: ; preds = %entry | 1084 if.then: ; preds = %entry |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1112 ; OPTM1-NEXT: jne {{.*}} | 1126 ; OPTM1-NEXT: jne {{.*}} |
1113 ; OPTM1-NEXT: mov [[RESULT:.*]],0x0 | 1127 ; OPTM1-NEXT: mov [[RESULT:.*]],0x0 |
1114 ; OPTM1-NEXT: cmp [[RESULT]],0x0 | 1128 ; OPTM1-NEXT: cmp [[RESULT]],0x0 |
1115 ; OPTM1-NEXT: jne {{.*}} | 1129 ; OPTM1-NEXT: jne {{.*}} |
1116 ; OPTM1-NEXT: jmp {{.*}} | 1130 ; OPTM1-NEXT: jmp {{.*}} |
1117 ; OPTM1-NEXT: call | 1131 ; OPTM1-NEXT: call |
1118 | 1132 |
1119 ; ARM32-LABEL: icmpNe64 | 1133 ; ARM32-LABEL: icmpNe64 |
1120 ; ARM32: cmp | 1134 ; ARM32: cmp |
1121 ; ARM32: cmpeq | 1135 ; ARM32: cmpeq |
1122 ; ARM32: movne | 1136 ; ARM32-OM1: moveq |
1123 ; ARM32: moveq | 1137 ; ARM32-OM1: movne |
| 1138 ; ARM32-OM1: cmp |
| 1139 ; ARM32-O2: beq |
1124 ; ARM32: bl | 1140 ; ARM32: bl |
1125 ; ARM32: cmp | 1141 ; ARM32: cmp |
1126 ; ARM32: cmpeq | 1142 ; ARM32: cmpeq |
1127 ; ARM32: movne | 1143 ; ARM32-OM1: moveq |
1128 ; ARM32: moveq | 1144 ; ARM32-OM1: movne |
| 1145 ; ARM32-OM1: cmp |
| 1146 ; ARM32-O2: beq |
1129 ; ARM32: bl | 1147 ; ARM32: bl |
1130 | 1148 |
1131 define internal void @icmpGt64(i64 %a, i64 %b, i64 %c, i64 %d) { | 1149 define internal void @icmpGt64(i64 %a, i64 %b, i64 %c, i64 %d) { |
1132 entry: | 1150 entry: |
1133 %cmp = icmp ugt i64 %a, %b | 1151 %cmp = icmp ugt i64 %a, %b |
1134 br i1 %cmp, label %if.then, label %if.end | 1152 br i1 %cmp, label %if.then, label %if.end |
1135 | 1153 |
1136 if.then: ; preds = %entry | 1154 if.then: ; preds = %entry |
1137 call void @func() | 1155 call void @func() |
1138 br label %if.end | 1156 br label %if.end |
(...skipping 25 matching lines...) Expand all Loading... |
1164 ; OPTM1: ja | 1182 ; OPTM1: ja |
1165 ; OPTM1: call | 1183 ; OPTM1: call |
1166 ; OPTM1: jg | 1184 ; OPTM1: jg |
1167 ; OPTM1: jl | 1185 ; OPTM1: jl |
1168 ; OPTM1: ja | 1186 ; OPTM1: ja |
1169 ; OPTM1: call | 1187 ; OPTM1: call |
1170 | 1188 |
1171 ; ARM32-LABEL: icmpGt64 | 1189 ; ARM32-LABEL: icmpGt64 |
1172 ; ARM32: cmp | 1190 ; ARM32: cmp |
1173 ; ARM32: cmpeq | 1191 ; ARM32: cmpeq |
1174 ; ARM32: movhi | 1192 ; ARM32-OM1: movls |
1175 ; ARM32: movls | 1193 ; ARM32-OM1: movhi |
| 1194 ; ARM32-OM1: cmp |
| 1195 ; ARM32-O2: bls |
1176 ; ARM32: bl | 1196 ; ARM32: bl |
1177 ; ARM32: cmp | 1197 ; ARM32: cmp |
1178 ; ARM32: sbcs | 1198 ; ARM32: sbcs |
1179 ; ARM32: movlt | 1199 ; ARM32-OM1: movge |
1180 ; ARM32: movge | 1200 ; ARM32-OM1: movlt |
| 1201 ; ARM32-OM1: cmp |
| 1202 ; ARM32-O2: bge |
1181 ; ARM32: bl | 1203 ; ARM32: bl |
1182 | 1204 |
1183 define internal void @icmpGe64(i64 %a, i64 %b, i64 %c, i64 %d) { | 1205 define internal void @icmpGe64(i64 %a, i64 %b, i64 %c, i64 %d) { |
1184 entry: | 1206 entry: |
1185 %cmp = icmp uge i64 %a, %b | 1207 %cmp = icmp uge i64 %a, %b |
1186 br i1 %cmp, label %if.then, label %if.end | 1208 br i1 %cmp, label %if.then, label %if.end |
1187 | 1209 |
1188 if.then: ; preds = %entry | 1210 if.then: ; preds = %entry |
1189 call void @func() | 1211 call void @func() |
1190 br label %if.end | 1212 br label %if.end |
(...skipping 25 matching lines...) Expand all Loading... |
1216 ; OPTM1: jae | 1238 ; OPTM1: jae |
1217 ; OPTM1: call | 1239 ; OPTM1: call |
1218 ; OPTM1: jg | 1240 ; OPTM1: jg |
1219 ; OPTM1: jl | 1241 ; OPTM1: jl |
1220 ; OPTM1: jae | 1242 ; OPTM1: jae |
1221 ; OPTM1: call | 1243 ; OPTM1: call |
1222 | 1244 |
1223 ; ARM32-LABEL: icmpGe64 | 1245 ; ARM32-LABEL: icmpGe64 |
1224 ; ARM32: cmp | 1246 ; ARM32: cmp |
1225 ; ARM32: cmpeq | 1247 ; ARM32: cmpeq |
1226 ; ARM32: movcs | 1248 ; ARM32-OM1: movcc |
1227 ; ARM32: movcc | 1249 ; ARM32-OM1: movcs |
| 1250 ; ARM32-OM1: cmp |
| 1251 ; ARM32-O2: bcc |
1228 ; ARM32: bl | 1252 ; ARM32: bl |
1229 ; ARM32: cmp | 1253 ; ARM32: cmp |
1230 ; ARM32: sbcs | 1254 ; ARM32: sbcs |
1231 ; ARM32: movge | 1255 ; ARM32-OM1: movlt |
1232 ; ARM32: movlt | 1256 ; ARM32-OM1: movge |
| 1257 ; ARM32-OM1: cmp |
| 1258 ; ARM32-O2: blt |
1233 ; ARM32: bl | 1259 ; ARM32: bl |
1234 | 1260 |
1235 define internal void @icmpLt64(i64 %a, i64 %b, i64 %c, i64 %d) { | 1261 define internal void @icmpLt64(i64 %a, i64 %b, i64 %c, i64 %d) { |
1236 entry: | 1262 entry: |
1237 %cmp = icmp ult i64 %a, %b | 1263 %cmp = icmp ult i64 %a, %b |
1238 br i1 %cmp, label %if.then, label %if.end | 1264 br i1 %cmp, label %if.then, label %if.end |
1239 | 1265 |
1240 if.then: ; preds = %entry | 1266 if.then: ; preds = %entry |
1241 call void @func() | 1267 call void @func() |
1242 br label %if.end | 1268 br label %if.end |
(...skipping 25 matching lines...) Expand all Loading... |
1268 ; OPTM1: jb | 1294 ; OPTM1: jb |
1269 ; OPTM1: call | 1295 ; OPTM1: call |
1270 ; OPTM1: jl | 1296 ; OPTM1: jl |
1271 ; OPTM1: jg | 1297 ; OPTM1: jg |
1272 ; OPTM1: jb | 1298 ; OPTM1: jb |
1273 ; OPTM1: call | 1299 ; OPTM1: call |
1274 | 1300 |
1275 ; ARM32-LABEL: icmpLt64 | 1301 ; ARM32-LABEL: icmpLt64 |
1276 ; ARM32: cmp | 1302 ; ARM32: cmp |
1277 ; ARM32: cmpeq | 1303 ; ARM32: cmpeq |
1278 ; ARM32: movcc | 1304 ; ARM32-OM1: movcs |
1279 ; ARM32: movcs | 1305 ; ARM32-OM1: movcc |
| 1306 ; ARM32-OM1: cmp |
| 1307 ; ARM32-O2: bcs |
1280 ; ARM32: bl | 1308 ; ARM32: bl |
1281 ; ARM32: cmp | 1309 ; ARM32: cmp |
1282 ; ARM32: sbcs | 1310 ; ARM32: sbcs |
1283 ; ARM32: movlt | 1311 ; ARM32-OM1: movge |
1284 ; ARM32: movge | 1312 ; ARM32-OM1: movlt |
| 1313 ; ARM32-OM1: cmp |
| 1314 ; ARM32-O2: bge |
1285 ; ARM32: bl | 1315 ; ARM32: bl |
1286 | 1316 |
1287 define internal void @icmpLe64(i64 %a, i64 %b, i64 %c, i64 %d) { | 1317 define internal void @icmpLe64(i64 %a, i64 %b, i64 %c, i64 %d) { |
1288 entry: | 1318 entry: |
1289 %cmp = icmp ule i64 %a, %b | 1319 %cmp = icmp ule i64 %a, %b |
1290 br i1 %cmp, label %if.then, label %if.end | 1320 br i1 %cmp, label %if.then, label %if.end |
1291 | 1321 |
1292 if.then: ; preds = %entry | 1322 if.then: ; preds = %entry |
1293 call void @func() | 1323 call void @func() |
1294 br label %if.end | 1324 br label %if.end |
(...skipping 25 matching lines...) Expand all Loading... |
1320 ; OPTM1: jbe | 1350 ; OPTM1: jbe |
1321 ; OPTM1: call | 1351 ; OPTM1: call |
1322 ; OPTM1: jl | 1352 ; OPTM1: jl |
1323 ; OPTM1: jg | 1353 ; OPTM1: jg |
1324 ; OPTM1: jbe | 1354 ; OPTM1: jbe |
1325 ; OPTM1: call | 1355 ; OPTM1: call |
1326 | 1356 |
1327 ; ARM32-LABEL: icmpLe64 | 1357 ; ARM32-LABEL: icmpLe64 |
1328 ; ARM32: cmp | 1358 ; ARM32: cmp |
1329 ; ARM32: cmpeq | 1359 ; ARM32: cmpeq |
1330 ; ARM32: movls | 1360 ; ARM32-OM1: movhi |
1331 ; ARM32: movhi | 1361 ; ARM32-OM1: movls |
| 1362 ; ARM32-OM1: cmp |
| 1363 ; ARM32-O2: bhi |
1332 ; ARM32: bl | 1364 ; ARM32: bl |
1333 ; ARM32: cmp | 1365 ; ARM32: cmp |
1334 ; ARM32: sbcs | 1366 ; ARM32: sbcs |
1335 ; ARM32: movge | 1367 ; ARM32-OM1: movlt |
1336 ; ARM32: movlt | 1368 ; ARM32-OM1: movge |
| 1369 ; ARM32-O2: blt |
1337 ; ARM32: bl | 1370 ; ARM32: bl |
1338 | 1371 |
1339 define internal i32 @icmpEq64Bool(i64 %a, i64 %b) { | 1372 define internal i32 @icmpEq64Bool(i64 %a, i64 %b) { |
1340 entry: | 1373 entry: |
1341 %cmp = icmp eq i64 %a, %b | 1374 %cmp = icmp eq i64 %a, %b |
1342 %cmp.ret_ext = zext i1 %cmp to i32 | 1375 %cmp.ret_ext = zext i1 %cmp to i32 |
1343 ret i32 %cmp.ret_ext | 1376 ret i32 %cmp.ret_ext |
1344 } | 1377 } |
1345 ; CHECK-LABEL: icmpEq64Bool | 1378 ; CHECK-LABEL: icmpEq64Bool |
1346 ; CHECK: jne | 1379 ; CHECK: jne |
1347 ; CHECK: je | 1380 ; CHECK: je |
1348 ; | 1381 ; |
1349 ; OPTM1-LABEL: icmpEq64Bool | 1382 ; OPTM1-LABEL: icmpEq64Bool |
1350 ; OPTM1: jne | 1383 ; OPTM1: jne |
1351 ; OPTM1: je | 1384 ; OPTM1: je |
1352 | 1385 |
1353 ; ARM32-LABEL: icmpEq64Bool | 1386 ; ARM32-LABEL: icmpEq64Bool |
| 1387 ; ARM32: movne |
1354 ; ARM32: moveq | 1388 ; ARM32: moveq |
1355 ; ARM32: movne | |
1356 | 1389 |
1357 define internal i32 @icmpNe64Bool(i64 %a, i64 %b) { | 1390 define internal i32 @icmpNe64Bool(i64 %a, i64 %b) { |
1358 entry: | 1391 entry: |
1359 %cmp = icmp ne i64 %a, %b | 1392 %cmp = icmp ne i64 %a, %b |
1360 %cmp.ret_ext = zext i1 %cmp to i32 | 1393 %cmp.ret_ext = zext i1 %cmp to i32 |
1361 ret i32 %cmp.ret_ext | 1394 ret i32 %cmp.ret_ext |
1362 } | 1395 } |
1363 ; CHECK-LABEL: icmpNe64Bool | 1396 ; CHECK-LABEL: icmpNe64Bool |
1364 ; CHECK: jne | 1397 ; CHECK: jne |
1365 ; CHECK: jne | 1398 ; CHECK: jne |
1366 ; | 1399 ; |
1367 ; OPTM1-LABEL: icmpNe64Bool | 1400 ; OPTM1-LABEL: icmpNe64Bool |
1368 ; OPTM1: jne | 1401 ; OPTM1: jne |
1369 ; OPTM1: jne | 1402 ; OPTM1: jne |
1370 | 1403 |
1371 ; ARM32-LABEL: icmpNe64Bool | 1404 ; ARM32-LABEL: icmpNe64Bool |
| 1405 ; ARM32: moveq |
1372 ; ARM32: movne | 1406 ; ARM32: movne |
1373 ; ARM32: moveq | |
1374 | 1407 |
1375 define internal i32 @icmpSgt64Bool(i64 %a, i64 %b) { | 1408 define internal i32 @icmpSgt64Bool(i64 %a, i64 %b) { |
1376 entry: | 1409 entry: |
1377 %cmp = icmp sgt i64 %a, %b | 1410 %cmp = icmp sgt i64 %a, %b |
1378 %cmp.ret_ext = zext i1 %cmp to i32 | 1411 %cmp.ret_ext = zext i1 %cmp to i32 |
1379 ret i32 %cmp.ret_ext | 1412 ret i32 %cmp.ret_ext |
1380 } | 1413 } |
1381 ; CHECK-LABEL: icmpSgt64Bool | 1414 ; CHECK-LABEL: icmpSgt64Bool |
1382 ; CHECK: cmp | 1415 ; CHECK: cmp |
1383 ; CHECK: jg | 1416 ; CHECK: jg |
1384 ; CHECK: jl | 1417 ; CHECK: jl |
1385 ; CHECK: cmp | 1418 ; CHECK: cmp |
1386 ; CHECK: ja | 1419 ; CHECK: ja |
1387 ; | 1420 ; |
1388 ; OPTM1-LABEL: icmpSgt64Bool | 1421 ; OPTM1-LABEL: icmpSgt64Bool |
1389 ; OPTM1: cmp | 1422 ; OPTM1: cmp |
1390 ; OPTM1: jg | 1423 ; OPTM1: jg |
1391 ; OPTM1: jl | 1424 ; OPTM1: jl |
1392 ; OPTM1: cmp | 1425 ; OPTM1: cmp |
1393 ; OPTM1: ja | 1426 ; OPTM1: ja |
1394 | 1427 |
1395 ; ARM32-LABEL: icmpSgt64Bool | 1428 ; ARM32-LABEL: icmpSgt64Bool |
1396 ; ARM32: cmp | 1429 ; ARM32: cmp |
1397 ; ARM32: sbcs | 1430 ; ARM32: sbcs |
| 1431 ; ARM32: movge |
1398 ; ARM32: movlt | 1432 ; ARM32: movlt |
1399 ; ARM32: movge | |
1400 | 1433 |
1401 define internal i32 @icmpUgt64Bool(i64 %a, i64 %b) { | 1434 define internal i32 @icmpUgt64Bool(i64 %a, i64 %b) { |
1402 entry: | 1435 entry: |
1403 %cmp = icmp ugt i64 %a, %b | 1436 %cmp = icmp ugt i64 %a, %b |
1404 %cmp.ret_ext = zext i1 %cmp to i32 | 1437 %cmp.ret_ext = zext i1 %cmp to i32 |
1405 ret i32 %cmp.ret_ext | 1438 ret i32 %cmp.ret_ext |
1406 } | 1439 } |
1407 ; CHECK-LABEL: icmpUgt64Bool | 1440 ; CHECK-LABEL: icmpUgt64Bool |
1408 ; CHECK: cmp | 1441 ; CHECK: cmp |
1409 ; CHECK: ja | 1442 ; CHECK: ja |
1410 ; CHECK: jb | 1443 ; CHECK: jb |
1411 ; CHECK: cmp | 1444 ; CHECK: cmp |
1412 ; CHECK: ja | 1445 ; CHECK: ja |
1413 ; | 1446 ; |
1414 ; OPTM1-LABEL: icmpUgt64Bool | 1447 ; OPTM1-LABEL: icmpUgt64Bool |
1415 ; OPTM1: cmp | 1448 ; OPTM1: cmp |
1416 ; OPTM1: ja | 1449 ; OPTM1: ja |
1417 ; OPTM1: jb | 1450 ; OPTM1: jb |
1418 ; OPTM1: cmp | 1451 ; OPTM1: cmp |
1419 ; OPTM1: ja | 1452 ; OPTM1: ja |
1420 | 1453 |
1421 ; ARM32-LABEL: icmpUgt64Bool | 1454 ; ARM32-LABEL: icmpUgt64Bool |
1422 ; ARM32: cmp | 1455 ; ARM32: cmp |
1423 ; ARM32: cmpeq | 1456 ; ARM32: cmpeq |
| 1457 ; ARM32: movls |
1424 ; ARM32: movhi | 1458 ; ARM32: movhi |
1425 ; ARM32: movls | |
1426 | 1459 |
1427 define internal i32 @icmpSge64Bool(i64 %a, i64 %b) { | 1460 define internal i32 @icmpSge64Bool(i64 %a, i64 %b) { |
1428 entry: | 1461 entry: |
1429 %cmp = icmp sge i64 %a, %b | 1462 %cmp = icmp sge i64 %a, %b |
1430 %cmp.ret_ext = zext i1 %cmp to i32 | 1463 %cmp.ret_ext = zext i1 %cmp to i32 |
1431 ret i32 %cmp.ret_ext | 1464 ret i32 %cmp.ret_ext |
1432 } | 1465 } |
1433 ; CHECK-LABEL: icmpSge64Bool | 1466 ; CHECK-LABEL: icmpSge64Bool |
1434 ; CHECK: cmp | 1467 ; CHECK: cmp |
1435 ; CHECK: jg | 1468 ; CHECK: jg |
1436 ; CHECK: jl | 1469 ; CHECK: jl |
1437 ; CHECK: cmp | 1470 ; CHECK: cmp |
1438 ; CHECK: jae | 1471 ; CHECK: jae |
1439 ; | 1472 ; |
1440 ; OPTM1-LABEL: icmpSge64Bool | 1473 ; OPTM1-LABEL: icmpSge64Bool |
1441 ; OPTM1: cmp | 1474 ; OPTM1: cmp |
1442 ; OPTM1: jg | 1475 ; OPTM1: jg |
1443 ; OPTM1: jl | 1476 ; OPTM1: jl |
1444 ; OPTM1: cmp | 1477 ; OPTM1: cmp |
1445 ; OPTM1: jae | 1478 ; OPTM1: jae |
1446 | 1479 |
1447 ; ARM32-LABEL: icmpSge64Bool | 1480 ; ARM32-LABEL: icmpSge64Bool |
1448 ; ARM32: cmp | 1481 ; ARM32: cmp |
1449 ; ARM32: sbcs | 1482 ; ARM32: sbcs |
| 1483 ; ARM32: movlt |
1450 ; ARM32: movge | 1484 ; ARM32: movge |
1451 ; ARM32: movlt | |
1452 | 1485 |
1453 define internal i32 @icmpUge64Bool(i64 %a, i64 %b) { | 1486 define internal i32 @icmpUge64Bool(i64 %a, i64 %b) { |
1454 entry: | 1487 entry: |
1455 %cmp = icmp uge i64 %a, %b | 1488 %cmp = icmp uge i64 %a, %b |
1456 %cmp.ret_ext = zext i1 %cmp to i32 | 1489 %cmp.ret_ext = zext i1 %cmp to i32 |
1457 ret i32 %cmp.ret_ext | 1490 ret i32 %cmp.ret_ext |
1458 } | 1491 } |
1459 ; CHECK-LABEL: icmpUge64Bool | 1492 ; CHECK-LABEL: icmpUge64Bool |
1460 ; CHECK: cmp | 1493 ; CHECK: cmp |
1461 ; CHECK: ja | 1494 ; CHECK: ja |
1462 ; CHECK: jb | 1495 ; CHECK: jb |
1463 ; CHECK: cmp | 1496 ; CHECK: cmp |
1464 ; CHECK: jae | 1497 ; CHECK: jae |
1465 ; | 1498 ; |
1466 ; OPTM1-LABEL: icmpUge64Bool | 1499 ; OPTM1-LABEL: icmpUge64Bool |
1467 ; OPTM1: cmp | 1500 ; OPTM1: cmp |
1468 ; OPTM1: ja | 1501 ; OPTM1: ja |
1469 ; OPTM1: jb | 1502 ; OPTM1: jb |
1470 ; OPTM1: cmp | 1503 ; OPTM1: cmp |
1471 ; OPTM1: jae | 1504 ; OPTM1: jae |
1472 | 1505 |
1473 ; ARM32-LABEL: icmpUge64Bool | 1506 ; ARM32-LABEL: icmpUge64Bool |
1474 ; ARM32: cmp | 1507 ; ARM32: cmp |
1475 ; ARM32: cmpeq | 1508 ; ARM32: cmpeq |
| 1509 ; ARM32: movcc |
1476 ; ARM32: movcs | 1510 ; ARM32: movcs |
1477 ; ARM32: movcc | |
1478 | 1511 |
1479 define internal i32 @icmpSlt64Bool(i64 %a, i64 %b) { | 1512 define internal i32 @icmpSlt64Bool(i64 %a, i64 %b) { |
1480 entry: | 1513 entry: |
1481 %cmp = icmp slt i64 %a, %b | 1514 %cmp = icmp slt i64 %a, %b |
1482 %cmp.ret_ext = zext i1 %cmp to i32 | 1515 %cmp.ret_ext = zext i1 %cmp to i32 |
1483 ret i32 %cmp.ret_ext | 1516 ret i32 %cmp.ret_ext |
1484 } | 1517 } |
1485 ; CHECK-LABEL: icmpSlt64Bool | 1518 ; CHECK-LABEL: icmpSlt64Bool |
1486 ; CHECK: cmp | 1519 ; CHECK: cmp |
1487 ; CHECK: jl | 1520 ; CHECK: jl |
1488 ; CHECK: jg | 1521 ; CHECK: jg |
1489 ; CHECK: cmp | 1522 ; CHECK: cmp |
1490 ; CHECK: jb | 1523 ; CHECK: jb |
1491 ; | 1524 ; |
1492 ; OPTM1-LABEL: icmpSlt64Bool | 1525 ; OPTM1-LABEL: icmpSlt64Bool |
1493 ; OPTM1: cmp | 1526 ; OPTM1: cmp |
1494 ; OPTM1: jl | 1527 ; OPTM1: jl |
1495 ; OPTM1: jg | 1528 ; OPTM1: jg |
1496 ; OPTM1: cmp | 1529 ; OPTM1: cmp |
1497 ; OPTM1: jb | 1530 ; OPTM1: jb |
1498 | 1531 |
1499 ; ARM32-LABEL: icmpSlt64Bool | 1532 ; ARM32-LABEL: icmpSlt64Bool |
1500 ; ARM32: cmp | 1533 ; ARM32: cmp |
1501 ; ARM32: sbcs | 1534 ; ARM32: sbcs |
| 1535 ; ARM32: movge |
1502 ; ARM32: movlt | 1536 ; ARM32: movlt |
1503 ; ARM32: movge | |
1504 | 1537 |
1505 define internal i32 @icmpUlt64Bool(i64 %a, i64 %b) { | 1538 define internal i32 @icmpUlt64Bool(i64 %a, i64 %b) { |
1506 entry: | 1539 entry: |
1507 %cmp = icmp ult i64 %a, %b | 1540 %cmp = icmp ult i64 %a, %b |
1508 %cmp.ret_ext = zext i1 %cmp to i32 | 1541 %cmp.ret_ext = zext i1 %cmp to i32 |
1509 ret i32 %cmp.ret_ext | 1542 ret i32 %cmp.ret_ext |
1510 } | 1543 } |
1511 ; CHECK-LABEL: icmpUlt64Bool | 1544 ; CHECK-LABEL: icmpUlt64Bool |
1512 ; CHECK: cmp | 1545 ; CHECK: cmp |
1513 ; CHECK: jb | 1546 ; CHECK: jb |
1514 ; CHECK: ja | 1547 ; CHECK: ja |
1515 ; CHECK: cmp | 1548 ; CHECK: cmp |
1516 ; CHECK: jb | 1549 ; CHECK: jb |
1517 ; | 1550 ; |
1518 ; OPTM1-LABEL: icmpUlt64Bool | 1551 ; OPTM1-LABEL: icmpUlt64Bool |
1519 ; OPTM1: cmp | 1552 ; OPTM1: cmp |
1520 ; OPTM1: jb | 1553 ; OPTM1: jb |
1521 ; OPTM1: ja | 1554 ; OPTM1: ja |
1522 ; OPTM1: cmp | 1555 ; OPTM1: cmp |
1523 ; OPTM1: jb | 1556 ; OPTM1: jb |
1524 | 1557 |
1525 ; ARM32-LABEL: icmpUlt64Bool | 1558 ; ARM32-LABEL: icmpUlt64Bool |
1526 ; ARM32: cmp | 1559 ; ARM32: cmp |
1527 ; ARM32: cmpeq | 1560 ; ARM32: cmpeq |
| 1561 ; ARM32: movcs |
1528 ; ARM32: movcc | 1562 ; ARM32: movcc |
1529 ; ARM32: movcs | |
1530 | 1563 |
1531 define internal i32 @icmpSle64Bool(i64 %a, i64 %b) { | 1564 define internal i32 @icmpSle64Bool(i64 %a, i64 %b) { |
1532 entry: | 1565 entry: |
1533 %cmp = icmp sle i64 %a, %b | 1566 %cmp = icmp sle i64 %a, %b |
1534 %cmp.ret_ext = zext i1 %cmp to i32 | 1567 %cmp.ret_ext = zext i1 %cmp to i32 |
1535 ret i32 %cmp.ret_ext | 1568 ret i32 %cmp.ret_ext |
1536 } | 1569 } |
1537 ; CHECK-LABEL: icmpSle64Bool | 1570 ; CHECK-LABEL: icmpSle64Bool |
1538 ; CHECK: cmp | 1571 ; CHECK: cmp |
1539 ; CHECK: jl | 1572 ; CHECK: jl |
1540 ; CHECK: jg | 1573 ; CHECK: jg |
1541 ; CHECK: cmp | 1574 ; CHECK: cmp |
1542 ; CHECK: jbe | 1575 ; CHECK: jbe |
1543 ; | 1576 ; |
1544 ; OPTM1-LABEL: icmpSle64Bool | 1577 ; OPTM1-LABEL: icmpSle64Bool |
1545 ; OPTM1: cmp | 1578 ; OPTM1: cmp |
1546 ; OPTM1: jl | 1579 ; OPTM1: jl |
1547 ; OPTM1: jg | 1580 ; OPTM1: jg |
1548 ; OPTM1: cmp | 1581 ; OPTM1: cmp |
1549 ; OPTM1: jbe | 1582 ; OPTM1: jbe |
1550 | 1583 |
1551 ; ARM32-LABEL: icmpSle64Bool | 1584 ; ARM32-LABEL: icmpSle64Bool |
1552 ; ARM32: cmp | 1585 ; ARM32: cmp |
1553 ; ARM32: sbcs | 1586 ; ARM32: sbcs |
| 1587 ; ARM32: movlt |
1554 ; ARM32: movge | 1588 ; ARM32: movge |
1555 ; ARM32: movlt | |
1556 | 1589 |
1557 define internal i32 @icmpUle64Bool(i64 %a, i64 %b) { | 1590 define internal i32 @icmpUle64Bool(i64 %a, i64 %b) { |
1558 entry: | 1591 entry: |
1559 %cmp = icmp ule i64 %a, %b | 1592 %cmp = icmp ule i64 %a, %b |
1560 %cmp.ret_ext = zext i1 %cmp to i32 | 1593 %cmp.ret_ext = zext i1 %cmp to i32 |
1561 ret i32 %cmp.ret_ext | 1594 ret i32 %cmp.ret_ext |
1562 } | 1595 } |
1563 ; CHECK-LABEL: icmpUle64Bool | 1596 ; CHECK-LABEL: icmpUle64Bool |
1564 ; CHECK: cmp | 1597 ; CHECK: cmp |
1565 ; CHECK: jb | 1598 ; CHECK: jb |
1566 ; CHECK: ja | 1599 ; CHECK: ja |
1567 ; CHECK: cmp | 1600 ; CHECK: cmp |
1568 ; CHECK: jbe | 1601 ; CHECK: jbe |
1569 ; | 1602 ; |
1570 ; OPTM1-LABEL: icmpUle64Bool | 1603 ; OPTM1-LABEL: icmpUle64Bool |
1571 ; OPTM1: cmp | 1604 ; OPTM1: cmp |
1572 ; OPTM1: jb | 1605 ; OPTM1: jb |
1573 ; OPTM1: ja | 1606 ; OPTM1: ja |
1574 ; OPTM1: cmp | 1607 ; OPTM1: cmp |
1575 ; OPTM1: jbe | 1608 ; OPTM1: jbe |
1576 | 1609 |
1577 ; ARM32-LABEL: icmpUle64Bool | 1610 ; ARM32-LABEL: icmpUle64Bool |
1578 ; ARM32: cmp | 1611 ; ARM32: cmp |
1579 ; ARM32: cmpeq | 1612 ; ARM32: cmpeq |
| 1613 ; ARM32: movhi |
1580 ; ARM32: movls | 1614 ; ARM32: movls |
1581 ; ARM32: movhi | |
1582 | 1615 |
1583 define internal i64 @load64(i32 %a) { | 1616 define internal i64 @load64(i32 %a) { |
1584 entry: | 1617 entry: |
1585 %__1 = inttoptr i32 %a to i64* | 1618 %__1 = inttoptr i32 %a to i64* |
1586 %v0 = load i64, i64* %__1, align 1 | 1619 %v0 = load i64, i64* %__1, align 1 |
1587 ret i64 %v0 | 1620 ret i64 %v0 |
1588 } | 1621 } |
1589 ; CHECK-LABEL: load64 | 1622 ; CHECK-LABEL: load64 |
1590 ; CHECK: mov e[[REGISTER:[a-z]+]],DWORD PTR [esp+0x4] | 1623 ; CHECK: mov e[[REGISTER:[a-z]+]],DWORD PTR [esp+0x4] |
1591 ; CHECK-NEXT: mov {{.*}},DWORD PTR [e[[REGISTER]]] | 1624 ; CHECK-NEXT: mov {{.*}},DWORD PTR [e[[REGISTER]]] |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1659 ; OPTM1-LABEL: select64VarVar | 1692 ; OPTM1-LABEL: select64VarVar |
1660 ; OPTM1: cmp | 1693 ; OPTM1: cmp |
1661 ; OPTM1: jb | 1694 ; OPTM1: jb |
1662 ; OPTM1: ja | 1695 ; OPTM1: ja |
1663 ; OPTM1: cmp | 1696 ; OPTM1: cmp |
1664 ; OPTM1: jb | 1697 ; OPTM1: jb |
1665 ; OPTM1: cmp | 1698 ; OPTM1: cmp |
1666 ; OPTM1: cmovne | 1699 ; OPTM1: cmovne |
1667 | 1700 |
1668 ; ARM32-LABEL: select64VarVar | 1701 ; ARM32-LABEL: select64VarVar |
1669 ; The initial compare. | |
1670 ; ARM32: cmp | 1702 ; ARM32: cmp |
1671 ; ARM32: cmpeq | 1703 ; ARM32: cmpeq |
1672 ; ARM32: movcc | 1704 ; ARM32-OM1: movcs |
1673 ; ARM32: movcs | 1705 ; ARM32-OM1: movcc |
1674 ; The non-folded compare for the select. | 1706 ; ARM32-OM1: cmp |
1675 ; ARM32: cmp | 1707 ; ARM32-OM1: movne |
1676 ; ARM32: movne | 1708 ; ARM32-O2: movcc |
1677 ; ARM32: movne | 1709 ; ARM32-OM1: movne |
| 1710 ; ARM32-O2: movcc |
1678 | 1711 |
1679 define internal i64 @select64VarConst(i64 %a, i64 %b) { | 1712 define internal i64 @select64VarConst(i64 %a, i64 %b) { |
1680 entry: | 1713 entry: |
1681 %cmp = icmp ult i64 %a, %b | 1714 %cmp = icmp ult i64 %a, %b |
1682 %cond = select i1 %cmp, i64 %a, i64 -2401053092306725256 | 1715 %cond = select i1 %cmp, i64 %a, i64 -2401053092306725256 |
1683 ret i64 %cond | 1716 ret i64 %cond |
1684 } | 1717 } |
1685 ; CHECK-LABEL: select64VarConst | 1718 ; CHECK-LABEL: select64VarConst |
1686 ; CHECK: cmp | 1719 ; CHECK: cmp |
1687 ; CHECK: jb | 1720 ; CHECK: jb |
1688 ; CHECK: ja | 1721 ; CHECK: ja |
1689 ; CHECK: cmp | 1722 ; CHECK: cmp |
1690 ; CHECK: jb | 1723 ; CHECK: jb |
1691 ; CHECK: cmp | 1724 ; CHECK: cmp |
1692 ; CHECK: cmovne | 1725 ; CHECK: cmovne |
1693 ; | 1726 ; |
1694 ; OPTM1-LABEL: select64VarConst | 1727 ; OPTM1-LABEL: select64VarConst |
1695 ; OPTM1: cmp | 1728 ; OPTM1: cmp |
1696 ; OPTM1: jb | 1729 ; OPTM1: jb |
1697 ; OPTM1: ja | 1730 ; OPTM1: ja |
1698 ; OPTM1: cmp | 1731 ; OPTM1: cmp |
1699 ; OPTM1: jb | 1732 ; OPTM1: jb |
1700 ; OPTM1: cmp | 1733 ; OPTM1: cmp |
1701 ; OPTM1: cmovne | 1734 ; OPTM1: cmovne |
1702 | 1735 |
1703 ; ARM32-LABEL: select64VarConst | 1736 ; ARM32-LABEL: select64VarConst |
1704 ; ARM32: cmp | 1737 ; ARM32: cmp |
1705 ; ARM32: cmpeq | 1738 ; ARM32: cmpeq |
1706 ; ARM32: movcc | 1739 ; ARM32-OM1: movcs |
1707 ; ARM32: movcs | 1740 ; ARM32-OM1: movcc |
1708 ; ARM32: cmp | 1741 ; ARM32-OM1: cmp |
1709 ; ARM32: movw | 1742 ; ARM32: movw |
1710 ; ARM32: movt | 1743 ; ARM32: movt |
1711 ; ARM32: movne | 1744 ; ARM32-OM1: movne |
| 1745 ; ARM32-O2: movcc |
1712 ; ARM32: movw | 1746 ; ARM32: movw |
1713 ; ARM32: movt | 1747 ; ARM32: movt |
1714 ; ARM32: movne | 1748 ; ARM32-OM1: movne |
| 1749 ; ARM32-O2: movcc |
1715 | 1750 |
1716 define internal i64 @select64ConstVar(i64 %a, i64 %b) { | 1751 define internal i64 @select64ConstVar(i64 %a, i64 %b) { |
1717 entry: | 1752 entry: |
1718 %cmp = icmp ult i64 %a, %b | 1753 %cmp = icmp ult i64 %a, %b |
1719 %cond = select i1 %cmp, i64 -2401053092306725256, i64 %b | 1754 %cond = select i1 %cmp, i64 -2401053092306725256, i64 %b |
1720 ret i64 %cond | 1755 ret i64 %cond |
1721 } | 1756 } |
1722 ; CHECK-LABEL: select64ConstVar | 1757 ; CHECK-LABEL: select64ConstVar |
1723 ; CHECK: cmp | 1758 ; CHECK: cmp |
1724 ; CHECK: jb | 1759 ; CHECK: jb |
1725 ; CHECK: ja | 1760 ; CHECK: ja |
1726 ; CHECK: cmp | 1761 ; CHECK: cmp |
1727 ; CHECK: jb | 1762 ; CHECK: jb |
1728 ; CHECK: cmp | 1763 ; CHECK: cmp |
1729 ; CHECK: cmove | 1764 ; CHECK: cmove |
1730 ; | 1765 ; |
1731 ; OPTM1-LABEL: select64ConstVar | 1766 ; OPTM1-LABEL: select64ConstVar |
1732 ; OPTM1: cmp | 1767 ; OPTM1: cmp |
1733 ; OPTM1: jb | 1768 ; OPTM1: jb |
1734 ; OPTM1: ja | 1769 ; OPTM1: ja |
1735 ; OPTM1: cmp | 1770 ; OPTM1: cmp |
1736 ; OPTM1: jb | 1771 ; OPTM1: jb |
1737 ; OPTM1: cmp | 1772 ; OPTM1: cmp |
1738 ; OPTM1: cmove | 1773 ; OPTM1: cmove |
1739 | 1774 |
1740 ; ARM32-LABEL: select64ConstVar | 1775 ; ARM32-LABEL: select64ConstVar |
1741 ; ARM32: cmp | 1776 ; ARM32: cmp |
1742 ; ARM32: cmpeq | 1777 ; ARM32: cmpeq |
1743 ; ARM32: movcc | 1778 ; ARM32-OM1: movcs |
1744 ; ARM32: movcs | 1779 ; ARM32-OM1: movcc |
1745 ; ARM32: cmp | 1780 ; ARM32-OM1: cmp |
1746 ; ARM32: movw | 1781 ; ARM32: movw |
1747 ; ARM32: movt | 1782 ; ARM32: movt |
1748 ; ARM32: movne | 1783 ; ARM32-OM1: movne |
| 1784 ; ARM32-O2: movcc |
1749 ; ARM32: movw | 1785 ; ARM32: movw |
1750 ; ARM32: movt | 1786 ; ARM32: movt |
1751 ; ARM32: movne | 1787 ; ARM32-OM1: movne |
| 1788 ; ARM32-O2: movcc |
1752 | 1789 |
1753 define internal void @icmpEq64Imm() { | 1790 define internal void @icmpEq64Imm() { |
1754 entry: | 1791 entry: |
1755 %cmp = icmp eq i64 123, 234 | 1792 %cmp = icmp eq i64 123, 234 |
1756 br i1 %cmp, label %if.then, label %if.end | 1793 br i1 %cmp, label %if.then, label %if.end |
1757 | 1794 |
1758 if.then: ; preds = %entry | 1795 if.then: ; preds = %entry |
1759 call void @func() | 1796 call void @func() |
1760 br label %if.end | 1797 br label %if.end |
1761 | 1798 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1846 ; CHECK-LABEL: phi64Undef | 1883 ; CHECK-LABEL: phi64Undef |
1847 ; CHECK: mov {{.*}},0x0 | 1884 ; CHECK: mov {{.*}},0x0 |
1848 ; CHECK: mov {{.*}},0x0 | 1885 ; CHECK: mov {{.*}},0x0 |
1849 ; OPTM1-LABEL: phi64Undef | 1886 ; OPTM1-LABEL: phi64Undef |
1850 ; OPTM1: mov {{.*}},0x0 | 1887 ; OPTM1: mov {{.*}},0x0 |
1851 ; OPTM1: mov {{.*}},0x0 | 1888 ; OPTM1: mov {{.*}},0x0 |
1852 ; ARM32-LABEL: phi64Undef | 1889 ; ARM32-LABEL: phi64Undef |
1853 ; ARM32: mov {{.*}} #0 | 1890 ; ARM32: mov {{.*}} #0 |
1854 ; ARM32: mov {{.*}} #0 | 1891 ; ARM32: mov {{.*}} #0 |
1855 | 1892 |
OLD | NEW |