| Index: tests_lit/llvm2ice_tests/switch-opt.ll
|
| diff --git a/tests_lit/llvm2ice_tests/switch-opt.ll b/tests_lit/llvm2ice_tests/switch-opt.ll
|
| index 6b9616f65ff56c09aadd59e850db1b9c26581ffc..53a6b2785c7c0e0b82713752696c8313c08dc5a5 100644
|
| --- a/tests_lit/llvm2ice_tests/switch-opt.ll
|
| +++ b/tests_lit/llvm2ice_tests/switch-opt.ll
|
| @@ -2,7 +2,9 @@
|
| ; same label which also results in phi instructions with multiple
|
| ; entries for the same incoming edge.
|
|
|
| -; RUN: %p2i -i %s -a --verbose inst | FileCheck %s
|
| +; RUN: %p2i -i %s --args -O2 --verbose none \
|
| +; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj \
|
| +; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s
|
| ; RUN: %p2i -i %s -a --verbose none | FileCheck --check-prefix=ERRORS %s
|
| ; RUN: %p2i -i %s --insts | %szdiff %s | FileCheck --check-prefix=DUMP %s
|
|
|
| @@ -51,6 +53,68 @@ sw.default:
|
| ; CHECK-LABEL: testSwitchImm
|
| ; CHECK-NOT: cmp {{[0-9]*}},
|
|
|
| +; Test for correct 64-bit lowering.
|
| +define internal i32 @testSwitch64(i64 %a) {
|
| +entry:
|
| + switch i64 %a, label %sw.default [
|
| + i64 123, label %return
|
| + i64 234, label %sw.bb1
|
| + i64 345, label %sw.bb2
|
| + i64 78187493520, label %sw.bb3
|
| + ]
|
| +
|
| +sw.bb1: ; preds = %entry
|
| + br label %return
|
| +
|
| +sw.bb2: ; preds = %entry
|
| + br label %return
|
| +
|
| +sw.bb3: ; preds = %entry
|
| + br label %return
|
| +
|
| +sw.default: ; preds = %entry
|
| + br label %return
|
| +
|
| +return: ; preds = %sw.default, %sw.bb3, %sw.bb2, %sw.bb1, %entry
|
| + %retval.0 = phi i32 [ 5, %sw.default ], [ 4, %sw.bb3 ], [ 3, %sw.bb2 ], [ 2, %sw.bb1 ], [ 1, %entry ]
|
| + ret i32 %retval.0
|
| +}
|
| +; CHECK-LABEL: testSwitch64
|
| +; CHECK: cmp {{.*}}, 123
|
| +; CHECK-NEXT: jne
|
| +; CHECK-NEXT: cmp {{.*}}, 0
|
| +; CHECK-NEXT: je
|
| +; CHECK: cmp {{.*}}, 234
|
| +; CHECK-NEXT: jne
|
| +; CHECK-NEXT: cmp {{.*}}, 0
|
| +; CHECK-NEXT: je
|
| +; CHECK: cmp {{.*}}, 345
|
| +; CHECK-NEXT: jne
|
| +; CHECK-NEXT: cmp {{.*}}, 0
|
| +; CHECK-NEXT: je
|
| +; CHECK: cmp {{.*}}, 878082192
|
| +; CHECK-NEXT: jne
|
| +; CHECK-NEXT: cmp {{.*}}, 18
|
| +; CHECK-NEXT: je
|
| +
|
| +; Similar to testSwitchImm, make sure proper addressing modes are
|
| +; used. In reality, this is tested by running the output through the
|
| +; assembler.
|
| +define i32 @testSwitchImm64() {
|
| +entry:
|
| + switch i64 10, label %sw.default [
|
| + i64 1, label %sw.default
|
| + ]
|
| +
|
| +sw.default:
|
| + ret i32 20
|
| +}
|
| +; CHECK-LABEL: testSwitchImm64
|
| +; CHECK: cmp {{.*}}, 1
|
| +; CHECK-NEXT: jne
|
| +; CHECK-NEXT: cmp {{.*}}, 0
|
| +; CHECK-NEXT: je
|
| +
|
| ; CHECK-NOT: ICE translation error
|
| ; ERRORS-NOT: ICE translation error
|
| ; DUMP-NOT: SZ
|
|
|