| Index: tests_lit/llvm2ice_tests/bool-folding.ll
|
| diff --git a/tests_lit/llvm2ice_tests/bool-folding.ll b/tests_lit/llvm2ice_tests/bool-folding.ll
|
| index ca7a7341f350797ab3fae20af315249ebc4871d9..3cdb15a74b05faf6a7637db6788b7f3f2adcfd90 100644
|
| --- a/tests_lit/llvm2ice_tests/bool-folding.ll
|
| +++ b/tests_lit/llvm2ice_tests/bool-folding.ll
|
| @@ -28,8 +28,12 @@ branch2:
|
| ; CHECK: cmp
|
| ; CHECK: jge
|
| ; ARM32-LABEL: fold_cmp_br
|
| -; ARM32: cmp
|
| -; ARM32: beq
|
| +; ARM32: cmp r0, r1
|
| +; ARM32: bge
|
| +; ARM32: mov r0, #1
|
| +; ARM32: bx lr
|
| +; ARM32: mov r0, #2
|
| +; ARM32: bx lr
|
|
|
|
|
| ; Cmp/branch folding with intervening instructions.
|
| @@ -51,11 +55,13 @@ branch2:
|
| ; CHECK: jge
|
| ; ARM32-LABEL: fold_cmp_br_intervening_insts
|
| ; ARM32: push {{[{].*[}]}}
|
| -; ARM32: movlt [[TMP:r[0-9]+]], #1
|
| -; ARM32: mov [[P:r[4-7]]], [[TMP]]
|
| -; ARM32: bl
|
| -; ARM32: cmp [[P]], #0
|
| -; ARM32: beq
|
| +; ARM32: bl use_value
|
| +; ARM32: cmp {{r[0-9]+}}, {{r[0-9]+}}
|
| +; ARM32: bge
|
| +; ARM32: mov r0, #1
|
| +; ARM32: bx lr
|
| +; ARM32: mov r0, #2
|
| +; ARM32: bx lr
|
|
|
|
|
| ; Cmp/branch non-folding because of live-out.
|
| @@ -102,13 +108,14 @@ branch2:
|
| ; CHECK: cmp
|
| ; CHECK: je
|
| ; ARM32-LABEL: no_fold_cmp_br_non_whitelist
|
| -; ARM32: mov [[R:r[0-9]+]], #0
|
| ; ARM32: cmp r0, r1
|
| +; ARM32: movge [[R:r[0-9]+]], #0
|
| ; ARM32: movlt [[R]], #1
|
| -; ARM32: mov [[R2:r[0-9]+]], [[R]]
|
| -; ARM32: and [[R3:r[0-9]+]], [[R2]], #1
|
| -; ARM32: cmp [[R]]
|
| -; ARM32: beq
|
| +; ARM32: cmp r0, r1
|
| +; ARM32: bge
|
| +; ARM32: bx lr
|
| +; ARM32: mov r0, #2
|
| +; ARM32: bx lr
|
|
|
|
|
| ; Basic cmp/select folding.
|
| @@ -123,11 +130,8 @@ entry:
|
| ; CHECK: cmp
|
| ; CHECK: cmovl
|
| ; ARM32-LABEL: fold_cmp_select
|
| -; ARM32: mov [[R:r[0-9]+]], #0
|
| ; ARM32: cmp r0, r1
|
| -; ARM32: movlt [[R]], #1
|
| -; ARM32: cmp [[R]], #0
|
| -
|
| +; ARM32: movlt {{r[0-9]+}}, r0
|
|
|
| ; 64-bit cmp/select folding.
|
| define internal i64 @fold_cmp_select_64(i64 %arg1, i64 %arg2) {
|
| @@ -144,14 +148,11 @@ entry:
|
| ; CHECK: cmovl
|
| ; CHECK: cmovl
|
| ; ARM32-LABEL: fold_cmp_select_64
|
| -; ARM32: mov [[R:r[0-9]+]], #0
|
| ; ARM32: cmp r0, r2
|
| -; ARM32: movlt [[R]], #1
|
| -; ARM32: cmp [[R]], #0
|
| -; ARM32: movne
|
| -; ARM32: movne
|
| -; ARM32-DAG: mov r0
|
| -; ARM32-DAG: mov r1
|
| +; ARM32: movlt [[LOW:r[0-9]+]], r0
|
| +; ARM32: movlt [[HIGH:r[0-9]+]], r1
|
| +; ARM32: mov r0, [[LOW]]
|
| +; ARM32: mov r1, [[HIGH]]
|
| ; ARM32: bx lr
|
|
|
|
|
| @@ -168,12 +169,10 @@ entry:
|
| ; CHECK: cmovl
|
| ; ARM32-LABEL: fold_cmp_select_64_undef
|
| ; ARM32: cmp {{r[0-9]+}}, r0
|
| -; ARM32: movlt [[R:r[0-9]+]], #1
|
| -; ARM32: cmp [[R]]
|
| -; ARM32: movne
|
| -; ARM32: movne
|
| -; ARM32-DAG: mov r0
|
| -; ARM32-DAG: mov r1
|
| +; ARM32: movge
|
| +; ARM32: movlt
|
| +; ARM32: movge
|
| +; ARM32: movlt
|
| ; ARM32: bx lr
|
|
|
|
|
| @@ -192,17 +191,10 @@ entry:
|
| ; CHECK: cmp
|
| ; CHECK: cmovl
|
| ; ARM32-LABEL: fold_cmp_select_intervening_insts
|
| -; ARM32: mov [[RES0:r[4-7]+]], r0
|
| -; ARM32: mov [[RES1:r[4-7]+]], r1
|
| -; ARM32: mov [[R:r[0-9]+]], #0
|
| -; ARM32: cmp r{{[0-9]+}}, r{{[0-9]+}}
|
| -; ARM32: movlt [[R]], #1
|
| -; ARM32: mov [[R2:r[4-7]]], [[R]]
|
| ; ARM32: bl use_value
|
| -; ARM32: cmp [[R2]], #0
|
| -; ARM32: movne [[RES1]], [[RES0]]
|
| -; ARM32: mov r0, [[RES1]]
|
| -
|
| +; ARM32: cmp r{{[0-9]+}}, r{{[0-9]+}}
|
| +; ARM32: movlt
|
| +; ARM32: bx lr
|
|
|
| ; Cmp/multi-select folding.
|
| define internal i32 @fold_cmp_select_multi(i32 %arg1, i32 %arg2) {
|
| @@ -226,20 +218,14 @@ entry:
|
| ; CHECK: add
|
| ; CHECK: add
|
| ; ARM32-LABEL: fold_cmp_select_multi
|
| -; ARM32: mov [[T0:r[0-9]+]], #0
|
| ; ARM32: cmp r0, r1
|
| -; ARM32: movlt [[T0]], #1
|
| -; ARM32: uxtb [[T1:r[0-9]+]], [[T1]]
|
| -; ARM32-NEXT: cmp [[T1]], #0
|
| -; ARM32: movne [[T2:r[0-9]+]], r0
|
| -; ARM32: uxtb [[T3:r[0-9]+]], [[T3]]
|
| -; ARM32-NEXT: cmp [[T3]], #0
|
| -; ARM32: movne [[T4:r[0-9]+]], r1
|
| -; ARM32: uxtb [[T5:r[0-9]+]], [[T5]]
|
| -; ARM32-NEXT: cmp [[T5]], #0
|
| -; ARM32: movne [[T6:r[0-9]+]], #123
|
| -; ARM32: add [[T7:r[0-9]+]], [[T2]], [[T4]]
|
| -; ARM32: add {{r[0-9]+}}, [[T7]], [[T6]]
|
| +; ARM32: movlt {{r[0-9]+}}, r0
|
| +; ARM32: cmp r0, r1
|
| +; ARM32: movlt {{r[0-9]+}}, r1
|
| +; ARM32: cmp r0, r1
|
| +; ARM32: movlt {{r[0-9]+}}, #123
|
| +; ARM32: add
|
| +; ARM32: add
|
| ; ARM32: bx lr
|
|
|
|
|
| @@ -269,21 +255,21 @@ next:
|
| ; CHECK: add
|
| ; ARM32-LABEL: no_fold_cmp_select_multi_liveout
|
| ; ARM32-LABEL: fold_cmp_select_multi
|
| -; ARM32: mov [[T0:r[0-9]+]], #0
|
| ; ARM32: cmp r0, r1
|
| +; ARM32: movge [[T0:r[0-9]+]], #0
|
| ; ARM32: movlt [[T0]], #1
|
| -; ARM32: uxtb [[T2:r[0-9]+]], [[T2]]
|
| -; ARM32-NEXT: cmp [[T2]], #0
|
| -; ARM32: movne [[T1]], r0
|
| -; ARM32: uxtb [[T4:r[0-9]+]], [[T4]]
|
| -; ARM32-NEXT: cmp [[T4]], #0
|
| -; ARM32: movne [[T3]], r1
|
| +; ARM32: uxtb [[T1:r[0-9]+]], [[T1]]
|
| +; ARM32-NEXT: cmp [[T1]], #0
|
| +; ARM32: movne [[T2:r[0-9]+]], r0
|
| +; ARM32: uxtb [[T3:r[0-9]+]], [[T3]]
|
| +; ARM32-NEXT: cmp [[T3]], #0
|
| +; ARM32: movne [[T4:r[0-9]+]], r1
|
| ; ARM32-LABEL: .Lno_fold_cmp_select_multi_liveout$next:
|
| ; ARM32: uxtb [[T5:r[0-9]+]], [[T5]]
|
| ; ARM32: cmp [[T5]], #0
|
| ; ARM32: movne [[T6:r[0-9]+]], #123
|
| -; ARM32: add [[T7:r[0-9]+]], [[T2]], [[T4]]
|
| -; ARM32: add {{r[0-9]+}}, [[T7]], [[T6]]
|
| +; ARM32: add
|
| +; ARM32: add
|
| ; ARM32: bx lr
|
|
|
| ; Cmp/multi-select non-folding because of extra non-whitelisted uses.
|
| @@ -314,19 +300,19 @@ entry:
|
| ; CHECK: add
|
| ; CHECK: add
|
| ; ARM32-LABEL: no_fold_cmp_select_multi_non_whitelist
|
| -; ARM32: mov [[T0:r[0-9]+]], #0
|
| ; ARM32: cmp r0, r1
|
| -; ARM32: movlt [[T0]], #1
|
| -; ARM32: uxtb [[T1:r[0-9]+]], [[T1]]
|
| -; ARM32-NEXT: cmp [[T1]], #0
|
| -; ARM32: movne [[T2:r[0-9]+]], r0
|
| -; ARM32: uxtb [[T3:r[0-9]+]], [[T3]]
|
| -; ARM32-NEXT: cmp [[T3]], #0
|
| -; ARM32: movne [[T4:r[0-9]+]], r1
|
| -; ARM32: uxtb [[T5:r[0-9]+]], [[T5]]
|
| -; ARM32-NEXT: cmp [[T5]], #0
|
| -; ARM32: movne [[T6:r[0-9]+]], #123
|
| -; ARM32: and [[T7:r[0-9]+]], [[T0]], #1
|
| -; ARM32: add [[T8:r[0-9]+]], [[T2]], [[T4]]
|
| -; ARM32: add {{r[0-9]+}}, [[T8]], [[T7]]
|
| +; ARM32: movge [[R0:r[0-9]+]]
|
| +; ARM32: movlt [[R0]]
|
| +; ARM32: cmp r0, r1
|
| +; ARM32: movge [[R1:r[0-9]+]]
|
| +; ARM32: movlt [[R1]]
|
| +; ARM32: cmp r0, r1
|
| +; ARM32: movge [[R2:r[0-9]+]]
|
| +; ARM32: movlt [[R2]]
|
| +; ARM32: cmp r0, r1
|
| +; ARM32: movge [[R3:r[0-9]+]]
|
| +; ARM32: movlt [[R3]]
|
| +; ARM32: add
|
| +; ARM32: add
|
| +; ARM32: add
|
| ; ARM32: bx lr
|
|
|