Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(48)

Unified Diff: tests_lit/llvm2ice_tests/bool-folding.ll

Issue 1347223003: Subzero. Implements TargetDataARM32::lowerConstants. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: addresses comments. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/IceTargetLoweringARM32.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 13ee8c44611aa2adbcb1c694b139fc1fba586b59..584c797798888d9d46ca670bba885959f2e8480a 100644
--- a/tests_lit/llvm2ice_tests/bool-folding.ll
+++ b/tests_lit/llvm2ice_tests/bool-folding.ll
@@ -4,6 +4,11 @@
; RUN: %p2i -i %s --filetype=obj --disassemble --args -O2 | FileCheck %s
+; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \
+; RUN: --target arm32 -i %s --args -O2 --skip-unimplemented \
+; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \
+; RUN: --check-prefix=ARM32
+
declare void @use_value(i32)
; Basic cmp/branch folding.
@@ -20,6 +25,9 @@ branch2:
; CHECK-LABEL: fold_cmp_br
; CHECK: cmp
; CHECK: jge
+; ARM32-LABEL: fold_cmp_br
+; ARM32: cmp
+; ARM32: beq
; Cmp/branch folding with intervening instructions.
@@ -39,6 +47,13 @@ branch2:
; CHECK: call
; CHECK: cmp
; 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
; Cmp/branch non-folding because of live-out.
@@ -59,6 +74,11 @@ branch2:
; CHECK: set
; CHECK: cmp
; CHECK: je
+; ARM32-LABEL: no_fold_cmp_br_liveout
+; ARM32: cmp
+; ARM32: movlt [[REG:r[0-9]+]]
+; ARM32: cmp [[REG]], #0
+; ARM32: beq
; Cmp/branch non-folding because of extra non-whitelisted uses.
@@ -79,6 +99,14 @@ branch2:
; CHECK: movzx
; CHECK: cmp
; CHECK: je
+; ARM32-LABEL: no_fold_cmp_br_non_whitelist
+; ARM32: mov [[R:r[0-9]+]], #0
+; ARM32: cmp r0, r1
+; ARM32: movlt [[R]], #1
+; ARM32: mov [[R2:r[0-9]+]], [[R]]
+; ARM32: and [[R3:r[0-9]+]], [[R2]], #1
+; ARM32: cmp [[R]]
+; ARM32: beq
; Basic cmp/select folding.
@@ -92,6 +120,11 @@ entry:
; CHECK-LABEL: fold_cmp_select
; 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
; 64-bit cmp/select folding.
@@ -108,6 +141,17 @@ entry:
; CHECK: cmp
; 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: bx lr
+
define i64 @fold_cmp_select_64_undef(i64 %arg1) {
entry:
@@ -120,6 +164,16 @@ entry:
; CHECK: cmp
; CHECK: cmovl
; 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: bx lr
+
; Cmp/select folding with intervening instructions.
define i32 @fold_cmp_select_intervening_insts(i32 %arg1, i32 %arg2) {
@@ -135,6 +189,17 @@ entry:
; CHECK: call
; 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]]
; Cmp/multi-select folding.
@@ -158,6 +223,21 @@ entry:
; CHECK: cmovge
; CHECK: add
; CHECK: add
+; ARM32-LABEL: fold_cmp_select_multi
+; ARM32-DAG: mov [[T0:r[0-9]+]], #0
+; ARM32-DAG: cmp r0, r1
+; ARM32: movlt [[T0]], #1
+; ARM32-DAG: mov [[T1:r[0-9]+]], r1
+; ARM32-DAG: cmp [[T0]], #0
+; ARM32: [[T1]], r0
+; ARM32-DAG: mov [[T2:r[0-9]+]], r0
+; ARM32-DAG: cmp [[T0]], #0
+; ARM32: [[T2]], r1
+; ARM32: cmp [[T0]], #0
+; ARM32: movne
+; ARM32: add
+; ARM32: add
+; ARM32: bx lr
; Cmp/multi-select non-folding because of live-out.
@@ -184,7 +264,22 @@ next:
; CHECK: cmove
; CHECK: add
; CHECK: add
-
+; ARM32-LABEL: no_fold_cmp_select_multi_liveout
+; ARM32-LABEL: fold_cmp_select_multi
+; ARM32-DAG: mov [[T0:r[0-9]+]], #0
+; ARM32-DAG: cmp r0, r1
+; ARM32: movlt [[T0]], #1
+; ARM32-DAG: mov [[T1:r[0-9]+]], r1
+; ARM32-DAG: cmp [[T0]], #0
+; ARM32: [[T1]], r0
+; ARM32-DAG: mov [[T2:r[0-9]+]], r0
+; ARM32-DAG: cmp [[T0]], #0
+; ARM32: [[T2]], r1
+; ARM32: cmp [[T0]], #0
+; ARM32: movne
+; ARM32: add
+; ARM32: add
+; ARM32: bx lr
; Cmp/multi-select non-folding because of extra non-whitelisted uses.
define i32 @no_fold_cmp_select_multi_non_whitelist(i32 %arg1, i32 %arg2) {
@@ -212,3 +307,20 @@ entry:
; CHECK: add
; CHECK: add
; CHECK: add
+; ARM32-LABEL: no_fold_cmp_select_multi_non_whitelist
+; ARM32-DAG: mov [[T0:r[0-9]+]], #0
+; ARM32-DAG: cmp r0, r1
+; ARM32: movlt [[T0]], #1
+; ARM32-DAG: mov [[T1:r[0-9]+]], r1
+; ARM32-DAG: cmp [[T0]], #0
+; ARM32: [[T1]], r0
+; ARM32-DAG: mov [[T2:r[0-9]+]], r0
+; ARM32-DAG: cmp [[T0]], #0
+; ARM32: [[T2]], r1
+; ARM32: cmp [[T0]], #0
+; ARM32: movne
+; ARM32: and {{.*}}, [[T0]], #1
+; ARM32: add
+; ARM32: add
+; ARM32: add
+; ARM32: bx lr
« no previous file with comments | « src/IceTargetLoweringARM32.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698