| Index: tests_lit/llvm2ice_tests/phi.ll
|
| diff --git a/tests_lit/llvm2ice_tests/phi.ll b/tests_lit/llvm2ice_tests/phi.ll
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ae9606338cd4390c5c409e8e8b70af29a3b803e5
|
| --- /dev/null
|
| +++ b/tests_lit/llvm2ice_tests/phi.ll
|
| @@ -0,0 +1,60 @@
|
| +; This tests some of the subtleties of Phi lowering. In particular,
|
| +; it tests that it does the right thing when it tries to enable
|
| +; compare/branch fusing.
|
| +
|
| +; RUN: %llvm2ice -O2 --verbose none --no-phi-edge-split %s \
|
| +; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \
|
| +; RUN: | llvm-objdump -d -symbolize -x86-asm-syntax=intel - | FileCheck %s
|
| +; RUN: %llvm2ice --verbose none %s | FileCheck --check-prefix=ERRORS %s
|
| +; RUN: %llvm2iceinsts %s | %szdiff %s | FileCheck --check-prefix=DUMP %s
|
| +; RUN: %llvm2iceinsts --pnacl %s | %szdiff %s \
|
| +; RUN: | FileCheck --check-prefix=DUMP %s
|
| +
|
| +define internal i32 @testPhi1(i32 %arg) {
|
| +entry:
|
| + %cmp1 = icmp sgt i32 %arg, 0
|
| + br i1 %cmp1, label %next, label %target
|
| +next:
|
| + br label %target
|
| +target:
|
| + %merge = phi i1 [ %cmp1, %entry ], [ false, %next ]
|
| + %result = zext i1 %merge to i32
|
| + ret i32 %result
|
| +}
|
| +; Test that compare/branch fusing does not happen, and Phi lowering is
|
| +; put in the right place.
|
| +; CHECK-LABEL: testPhi1
|
| +; CHECK: cmp {{.*}}, 0
|
| +; CHECK: mov {{.*}}, 1
|
| +; CHECK: jg
|
| +; CHECK: mov {{.*}}, 0
|
| +; CHECK: mov [[PHI:.*]],
|
| +; CHECK: cmp {{.*}}, 0
|
| +; CHECK: jne
|
| +; CHECK: :
|
| +; CHECK: mov [[PHI]], 0
|
| +; CHECK: :
|
| +; CHECK: movzx {{.*}}, [[PHI]]
|
| +
|
| +define internal i32 @testPhi2(i32 %arg) {
|
| +entry:
|
| + %cmp1 = icmp sgt i32 %arg, 0
|
| + br i1 %cmp1, label %next, label %target
|
| +next:
|
| + br label %target
|
| +target:
|
| + %merge = phi i32 [ 12345, %entry ], [ 54321, %next ]
|
| + ret i32 %merge
|
| +}
|
| +; Test that compare/branch fusing and Phi lowering happens as expected.
|
| +; CHECK-LABEL: testPhi2
|
| +; CHECK: mov {{.*}}, 12345
|
| +; CHECK: cmp {{.*}}, 0
|
| +; CHECK-NEXT: jg
|
| +; CHECK: :
|
| +; CHECK: mov [[PHI:.*]], 54321
|
| +; CHECK: :
|
| +; CHECK: mov {{.*}}, [[PHI]]
|
| +
|
| +; ERRORS-NOT: ICE translation error
|
| +; DUMP-NOT: SZ
|
|
|