| 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: %p2i --filetype=obj --disassemble -i %s --args -O2 \ | 5 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \ |
| 6 ; RUN: | FileCheck %s | 6 ; RUN: | FileCheck %s |
| 7 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 \ | 7 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 \ |
| 8 ; RUN: | FileCheck --check-prefix=OPTM1 %s | 8 ; RUN: | FileCheck --check-prefix=OPTM1 %s |
| 9 | 9 |
| 10 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 | 10 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 |
| (...skipping 1172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1183 %cond = select i1 %cmp, i64 %a, i64 %b | 1183 %cond = select i1 %cmp, i64 %a, i64 %b |
| 1184 ret i64 %cond | 1184 ret i64 %cond |
| 1185 } | 1185 } |
| 1186 ; CHECK-LABEL: select64VarVar | 1186 ; CHECK-LABEL: select64VarVar |
| 1187 ; CHECK: cmp | 1187 ; CHECK: cmp |
| 1188 ; CHECK: jb | 1188 ; CHECK: jb |
| 1189 ; CHECK: ja | 1189 ; CHECK: ja |
| 1190 ; CHECK: cmp | 1190 ; CHECK: cmp |
| 1191 ; CHECK: jb | 1191 ; CHECK: jb |
| 1192 ; CHECK: cmp | 1192 ; CHECK: cmp |
| 1193 ; CHECK: jne | 1193 ; CHECK: cmovne |
| 1194 ; | 1194 ; |
| 1195 ; OPTM1-LABEL: select64VarVar | 1195 ; OPTM1-LABEL: select64VarVar |
| 1196 ; OPTM1: cmp | 1196 ; OPTM1: cmp |
| 1197 ; OPTM1: jb | 1197 ; OPTM1: jb |
| 1198 ; OPTM1: ja | 1198 ; OPTM1: ja |
| 1199 ; OPTM1: cmp | 1199 ; OPTM1: cmp |
| 1200 ; OPTM1: jb | 1200 ; OPTM1: jb |
| 1201 ; OPTM1: cmp | 1201 ; OPTM1: cmp |
| 1202 ; OPTM1: jne | 1202 ; OPTM1: cmovne |
| 1203 | 1203 |
| 1204 define internal i64 @select64VarConst(i64 %a, i64 %b) { | 1204 define internal i64 @select64VarConst(i64 %a, i64 %b) { |
| 1205 entry: | 1205 entry: |
| 1206 %cmp = icmp ult i64 %a, %b | 1206 %cmp = icmp ult i64 %a, %b |
| 1207 %cond = select i1 %cmp, i64 %a, i64 -2401053092306725256 | 1207 %cond = select i1 %cmp, i64 %a, i64 -2401053092306725256 |
| 1208 ret i64 %cond | 1208 ret i64 %cond |
| 1209 } | 1209 } |
| 1210 ; CHECK-LABEL: select64VarConst | 1210 ; CHECK-LABEL: select64VarConst |
| 1211 ; CHECK: cmp | 1211 ; CHECK: cmp |
| 1212 ; CHECK: jb | 1212 ; CHECK: jb |
| 1213 ; CHECK: ja | 1213 ; CHECK: ja |
| 1214 ; CHECK: cmp | 1214 ; CHECK: cmp |
| 1215 ; CHECK: jb | 1215 ; CHECK: jb |
| 1216 ; CHECK: cmp | 1216 ; CHECK: cmp |
| 1217 ; CHECK: jne | 1217 ; CHECK: cmovne |
| 1218 ; | 1218 ; |
| 1219 ; OPTM1-LABEL: select64VarConst | 1219 ; OPTM1-LABEL: select64VarConst |
| 1220 ; OPTM1: cmp | 1220 ; OPTM1: cmp |
| 1221 ; OPTM1: jb | 1221 ; OPTM1: jb |
| 1222 ; OPTM1: ja | 1222 ; OPTM1: ja |
| 1223 ; OPTM1: cmp | 1223 ; OPTM1: cmp |
| 1224 ; OPTM1: jb | 1224 ; OPTM1: jb |
| 1225 ; OPTM1: cmp | 1225 ; OPTM1: cmp |
| 1226 ; OPTM1: jne | 1226 ; OPTM1: cmovne |
| 1227 | 1227 |
| 1228 define internal i64 @select64ConstVar(i64 %a, i64 %b) { | 1228 define internal i64 @select64ConstVar(i64 %a, i64 %b) { |
| 1229 entry: | 1229 entry: |
| 1230 %cmp = icmp ult i64 %a, %b | 1230 %cmp = icmp ult i64 %a, %b |
| 1231 %cond = select i1 %cmp, i64 -2401053092306725256, i64 %b | 1231 %cond = select i1 %cmp, i64 -2401053092306725256, i64 %b |
| 1232 ret i64 %cond | 1232 ret i64 %cond |
| 1233 } | 1233 } |
| 1234 ; CHECK-LABEL: select64ConstVar | 1234 ; CHECK-LABEL: select64ConstVar |
| 1235 ; CHECK: cmp | 1235 ; CHECK: cmp |
| 1236 ; CHECK: jb | 1236 ; CHECK: jb |
| 1237 ; CHECK: ja | 1237 ; CHECK: ja |
| 1238 ; CHECK: cmp | 1238 ; CHECK: cmp |
| 1239 ; CHECK: jb | 1239 ; CHECK: jb |
| 1240 ; CHECK: cmp | 1240 ; CHECK: cmp |
| 1241 ; CHECK: jne | 1241 ; CHECK: cmove |
| 1242 ; | 1242 ; |
| 1243 ; OPTM1-LABEL: select64ConstVar | 1243 ; OPTM1-LABEL: select64ConstVar |
| 1244 ; OPTM1: cmp | 1244 ; OPTM1: cmp |
| 1245 ; OPTM1: jb | 1245 ; OPTM1: jb |
| 1246 ; OPTM1: ja | 1246 ; OPTM1: ja |
| 1247 ; OPTM1: cmp | 1247 ; OPTM1: cmp |
| 1248 ; OPTM1: jb | 1248 ; OPTM1: jb |
| 1249 ; OPTM1: cmp | 1249 ; OPTM1: cmp |
| 1250 ; OPTM1: jne | 1250 ; OPTM1: cmove |
| 1251 | 1251 |
| 1252 define internal void @icmpEq64Imm() { | 1252 define internal void @icmpEq64Imm() { |
| 1253 entry: | 1253 entry: |
| 1254 %cmp = icmp eq i64 123, 234 | 1254 %cmp = icmp eq i64 123, 234 |
| 1255 br i1 %cmp, label %if.then, label %if.end | 1255 br i1 %cmp, label %if.then, label %if.end |
| 1256 | 1256 |
| 1257 if.then: ; preds = %entry | 1257 if.then: ; preds = %entry |
| 1258 call void @func() | 1258 call void @func() |
| 1259 br label %if.end | 1259 br label %if.end |
| 1260 | 1260 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1295 | 1295 |
| 1296 if.end3: ; preds = %if.then2, %if.end | 1296 if.end3: ; preds = %if.then2, %if.end |
| 1297 ret void | 1297 ret void |
| 1298 } | 1298 } |
| 1299 ; The following checks are not strictly necessary since one of the RUN | 1299 ; The following checks are not strictly necessary since one of the RUN |
| 1300 ; lines actually runs the output through the assembler. | 1300 ; lines actually runs the output through the assembler. |
| 1301 ; CHECK-LABEL: icmpLt64Imm | 1301 ; CHECK-LABEL: icmpLt64Imm |
| 1302 ; CHECK-NOT: cmp 0x{{[0-9a-f]+}}, | 1302 ; CHECK-NOT: cmp 0x{{[0-9a-f]+}}, |
| 1303 ; OPTM1-LABEL: icmpLt64Imm | 1303 ; OPTM1-LABEL: icmpLt64Imm |
| 1304 ; OPTM1-NOT: cmp 0x{{[0-9a-f]+}}, | 1304 ; OPTM1-NOT: cmp 0x{{[0-9a-f]+}}, |
| OLD | NEW |