Index: tests_lit/llvm2ice_tests/64bit.pnacl.ll |
diff --git a/tests_lit/llvm2ice_tests/64bit.pnacl.ll b/tests_lit/llvm2ice_tests/64bit.pnacl.ll |
index 9333f512ec7126bc7f4d25091ceb0cf8250e268c..b2e997e6cb28d758be7172eba90c82219cbd0085 100644 |
--- a/tests_lit/llvm2ice_tests/64bit.pnacl.ll |
+++ b/tests_lit/llvm2ice_tests/64bit.pnacl.ll |
@@ -18,13 +18,13 @@ |
; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \ |
; RUN: -allow-externally-defined-symbols \ |
; RUN: | %if --need=target_ARM32 --need=allow_dump \ |
-; RUN: --command FileCheck --check-prefix ARM32 %s |
+; RUN: --command FileCheck --check-prefix ARM32 --check-prefix ARM32-O2 %s |
; RUN: %if --need=target_ARM32 --need=allow_dump \ |
; RUN: --command %p2i --filetype=asm --assemble --disassemble --target arm32 \ |
; RUN: -i %s --args -Om1 --skip-unimplemented \ |
; RUN: -allow-externally-defined-symbols \ |
; RUN: | %if --need=target_ARM32 --need=allow_dump \ |
-; RUN: --command FileCheck --check-prefix ARM32 %s |
+; RUN: --command FileCheck --check-prefix ARM32 --check-prefix ARM32-OM1 %s |
@__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 |
@__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 |
@@ -849,8 +849,11 @@ entry: |
; OPTM1-NOT: and eax,0x1 |
; ARM32-LABEL: trunc64To1 |
-; ARM32: and r0, r0, #1 |
-; ARM32: and r0, r0, #1 |
+; ARM32-OM1: and r0, r0, #1 |
+; ARM32-OM1: and r0, r0, #1 |
+; ARM32-O2: tst r0, #1 |
+; ARM32-O2: moveq [[RES:r[0-9]+]], #0 |
+; ARM32-O2: movne [[RES]], #1 |
define internal i64 @sext32To64(i32 %a) { |
entry: |
@@ -921,8 +924,12 @@ entry: |
; OPTM1: sar {{.*}},0x1f |
; ARM32-LABEL: sext1To64 |
-; ARM32: lsl {{.*}}, #31 |
-; ARM32: asr {{.*}}, #31 |
+; ARM32-OM1: lsl {{.*}}, #31 |
+; ARM32-OM1: asr {{.*}}, #31 |
+; ARM32-O2: tst r0, #1 |
+; ARM32-O2: mvn [[M1:r[0-9]+]], #0 |
+; ARM32-O2: moveq [[RES:r[0-9]+]], #0 |
+; ARM32-O2: movne [[RES]], [[M1]] |
define internal i64 @zext32To64(i32 %a) { |
entry: |
@@ -991,8 +998,11 @@ entry: |
; OPTM1: mov {{.*}},0x0 |
; ARM32-LABEL: zext1To64 |
-; ARM32: and {{.*}}, #1 |
-; ARM32: mov {{.*}}, #0 |
+; ARM32-OM1: and {{.*}}, #1 |
+; ARM32-OM1: mov {{.*}}, #0 |
+; ARM32-O2: tst r0, #1 |
+; ARM32-O2: moveq {{[^,]*}}, #0 |
+; ARM32-O2: movne {{[^,]*}}, #1 |
define internal void @icmpEq64(i64 %a, i64 %b, i64 %c, i64 %d) { |
entry: |
@@ -1051,13 +1061,17 @@ if.end3: ; preds = %if.then2, %if.end |
; ARM32-LABEL: icmpEq64 |
; ARM32: cmp |
; ARM32: cmpeq |
-; ARM32: moveq |
-; ARM32: movne |
+; ARM32-OM1: movne |
+; ARM32-OM1: moveq |
+; ARM32-OM1: cmp |
+; ARM32-O2: bne |
; ARM32: bl |
; ARM32: cmp |
; ARM32: cmpeq |
-; ARM32: moveq |
-; ARM32: movne |
+; ARM32-OM1: movne |
+; ARM32-OM1: moveq |
+; ARM32-OM1: cmp |
+; ARM32-O2: bne |
; ARM32: bl |
declare void @func() |
@@ -1119,13 +1133,17 @@ if.end3: ; preds = %if.end, %if.then2 |
; ARM32-LABEL: icmpNe64 |
; ARM32: cmp |
; ARM32: cmpeq |
-; ARM32: movne |
-; ARM32: moveq |
+; ARM32-OM1: moveq |
+; ARM32-OM1: movne |
+; ARM32-OM1: cmp |
+; ARM32-O2: beq |
; ARM32: bl |
; ARM32: cmp |
; ARM32: cmpeq |
-; ARM32: movne |
-; ARM32: moveq |
+; ARM32-OM1: moveq |
+; ARM32-OM1: movne |
+; ARM32-OM1: cmp |
+; ARM32-O2: beq |
; ARM32: bl |
define internal void @icmpGt64(i64 %a, i64 %b, i64 %c, i64 %d) { |
@@ -1171,13 +1189,17 @@ if.end3: ; preds = %if.then2, %if.end |
; ARM32-LABEL: icmpGt64 |
; ARM32: cmp |
; ARM32: cmpeq |
-; ARM32: movhi |
-; ARM32: movls |
+; ARM32-OM1: movls |
+; ARM32-OM1: movhi |
+; ARM32-OM1: cmp |
+; ARM32-O2: bls |
; ARM32: bl |
; ARM32: cmp |
; ARM32: sbcs |
-; ARM32: movlt |
-; ARM32: movge |
+; ARM32-OM1: movge |
+; ARM32-OM1: movlt |
+; ARM32-OM1: cmp |
+; ARM32-O2: bge |
; ARM32: bl |
define internal void @icmpGe64(i64 %a, i64 %b, i64 %c, i64 %d) { |
@@ -1223,13 +1245,17 @@ if.end3: ; preds = %if.end, %if.then2 |
; ARM32-LABEL: icmpGe64 |
; ARM32: cmp |
; ARM32: cmpeq |
-; ARM32: movcs |
-; ARM32: movcc |
+; ARM32-OM1: movcc |
+; ARM32-OM1: movcs |
+; ARM32-OM1: cmp |
+; ARM32-O2: bcc |
; ARM32: bl |
; ARM32: cmp |
; ARM32: sbcs |
-; ARM32: movge |
-; ARM32: movlt |
+; ARM32-OM1: movlt |
+; ARM32-OM1: movge |
+; ARM32-OM1: cmp |
+; ARM32-O2: blt |
; ARM32: bl |
define internal void @icmpLt64(i64 %a, i64 %b, i64 %c, i64 %d) { |
@@ -1275,13 +1301,17 @@ if.end3: ; preds = %if.then2, %if.end |
; ARM32-LABEL: icmpLt64 |
; ARM32: cmp |
; ARM32: cmpeq |
-; ARM32: movcc |
-; ARM32: movcs |
+; ARM32-OM1: movcs |
+; ARM32-OM1: movcc |
+; ARM32-OM1: cmp |
+; ARM32-O2: bcs |
; ARM32: bl |
; ARM32: cmp |
; ARM32: sbcs |
-; ARM32: movlt |
-; ARM32: movge |
+; ARM32-OM1: movge |
+; ARM32-OM1: movlt |
+; ARM32-OM1: cmp |
+; ARM32-O2: bge |
; ARM32: bl |
define internal void @icmpLe64(i64 %a, i64 %b, i64 %c, i64 %d) { |
@@ -1327,13 +1357,16 @@ if.end3: ; preds = %if.end, %if.then2 |
; ARM32-LABEL: icmpLe64 |
; ARM32: cmp |
; ARM32: cmpeq |
-; ARM32: movls |
-; ARM32: movhi |
+; ARM32-OM1: movhi |
+; ARM32-OM1: movls |
+; ARM32-OM1: cmp |
+; ARM32-O2: bhi |
; ARM32: bl |
; ARM32: cmp |
; ARM32: sbcs |
-; ARM32: movge |
-; ARM32: movlt |
+; ARM32-OM1: movlt |
+; ARM32-OM1: movge |
+; ARM32-O2: blt |
; ARM32: bl |
define internal i32 @icmpEq64Bool(i64 %a, i64 %b) { |
@@ -1351,8 +1384,8 @@ entry: |
; OPTM1: je |
; ARM32-LABEL: icmpEq64Bool |
-; ARM32: moveq |
; ARM32: movne |
+; ARM32: moveq |
define internal i32 @icmpNe64Bool(i64 %a, i64 %b) { |
entry: |
@@ -1369,8 +1402,8 @@ entry: |
; OPTM1: jne |
; ARM32-LABEL: icmpNe64Bool |
-; ARM32: movne |
; ARM32: moveq |
+; ARM32: movne |
define internal i32 @icmpSgt64Bool(i64 %a, i64 %b) { |
entry: |
@@ -1395,8 +1428,8 @@ entry: |
; ARM32-LABEL: icmpSgt64Bool |
; ARM32: cmp |
; ARM32: sbcs |
-; ARM32: movlt |
; ARM32: movge |
+; ARM32: movlt |
define internal i32 @icmpUgt64Bool(i64 %a, i64 %b) { |
entry: |
@@ -1421,8 +1454,8 @@ entry: |
; ARM32-LABEL: icmpUgt64Bool |
; ARM32: cmp |
; ARM32: cmpeq |
-; ARM32: movhi |
; ARM32: movls |
+; ARM32: movhi |
define internal i32 @icmpSge64Bool(i64 %a, i64 %b) { |
entry: |
@@ -1447,8 +1480,8 @@ entry: |
; ARM32-LABEL: icmpSge64Bool |
; ARM32: cmp |
; ARM32: sbcs |
-; ARM32: movge |
; ARM32: movlt |
+; ARM32: movge |
define internal i32 @icmpUge64Bool(i64 %a, i64 %b) { |
entry: |
@@ -1473,8 +1506,8 @@ entry: |
; ARM32-LABEL: icmpUge64Bool |
; ARM32: cmp |
; ARM32: cmpeq |
-; ARM32: movcs |
; ARM32: movcc |
+; ARM32: movcs |
define internal i32 @icmpSlt64Bool(i64 %a, i64 %b) { |
entry: |
@@ -1499,8 +1532,8 @@ entry: |
; ARM32-LABEL: icmpSlt64Bool |
; ARM32: cmp |
; ARM32: sbcs |
-; ARM32: movlt |
; ARM32: movge |
+; ARM32: movlt |
define internal i32 @icmpUlt64Bool(i64 %a, i64 %b) { |
entry: |
@@ -1525,8 +1558,8 @@ entry: |
; ARM32-LABEL: icmpUlt64Bool |
; ARM32: cmp |
; ARM32: cmpeq |
-; ARM32: movcc |
; ARM32: movcs |
+; ARM32: movcc |
define internal i32 @icmpSle64Bool(i64 %a, i64 %b) { |
entry: |
@@ -1551,8 +1584,8 @@ entry: |
; ARM32-LABEL: icmpSle64Bool |
; ARM32: cmp |
; ARM32: sbcs |
-; ARM32: movge |
; ARM32: movlt |
+; ARM32: movge |
define internal i32 @icmpUle64Bool(i64 %a, i64 %b) { |
entry: |
@@ -1577,8 +1610,8 @@ entry: |
; ARM32-LABEL: icmpUle64Bool |
; ARM32: cmp |
; ARM32: cmpeq |
-; ARM32: movls |
; ARM32: movhi |
+; ARM32: movls |
define internal i64 @load64(i32 %a) { |
entry: |
@@ -1666,15 +1699,15 @@ entry: |
; OPTM1: cmovne |
; ARM32-LABEL: select64VarVar |
-; The initial compare. |
; ARM32: cmp |
; ARM32: cmpeq |
-; ARM32: movcc |
-; ARM32: movcs |
-; The non-folded compare for the select. |
-; ARM32: cmp |
-; ARM32: movne |
-; ARM32: movne |
+; ARM32-OM1: movcs |
+; ARM32-OM1: movcc |
+; ARM32-OM1: cmp |
+; ARM32-OM1: movne |
+; ARM32-O2: movcc |
+; ARM32-OM1: movne |
+; ARM32-O2: movcc |
define internal i64 @select64VarConst(i64 %a, i64 %b) { |
entry: |
@@ -1703,15 +1736,17 @@ entry: |
; ARM32-LABEL: select64VarConst |
; ARM32: cmp |
; ARM32: cmpeq |
-; ARM32: movcc |
-; ARM32: movcs |
-; ARM32: cmp |
+; ARM32-OM1: movcs |
+; ARM32-OM1: movcc |
+; ARM32-OM1: cmp |
; ARM32: movw |
; ARM32: movt |
-; ARM32: movne |
+; ARM32-OM1: movne |
+; ARM32-O2: movcc |
; ARM32: movw |
; ARM32: movt |
-; ARM32: movne |
+; ARM32-OM1: movne |
+; ARM32-O2: movcc |
define internal i64 @select64ConstVar(i64 %a, i64 %b) { |
entry: |
@@ -1740,15 +1775,17 @@ entry: |
; ARM32-LABEL: select64ConstVar |
; ARM32: cmp |
; ARM32: cmpeq |
-; ARM32: movcc |
-; ARM32: movcs |
-; ARM32: cmp |
+; ARM32-OM1: movcs |
+; ARM32-OM1: movcc |
+; ARM32-OM1: cmp |
; ARM32: movw |
; ARM32: movt |
-; ARM32: movne |
+; ARM32-OM1: movne |
+; ARM32-O2: movcc |
; ARM32: movw |
; ARM32: movt |
-; ARM32: movne |
+; ARM32-OM1: movne |
+; ARM32-O2: movcc |
define internal void @icmpEq64Imm() { |
entry: |