diff options
| author | Shawn Landden <shawn@git.icu> | 2019-06-13 02:47:47 +0000 |
|---|---|---|
| committer | Shawn Landden <shawn@git.icu> | 2019-06-13 02:47:47 +0000 |
| commit | c6cba2957d520b41de7fef7dfbfc8edc35c228e3 (patch) | |
| tree | b1f879ad01b422e9d219e0e48628623e9d4830dd /llvm/test/Transforms/SimplifyCFG/switch-dead-default.ll | |
| parent | f93b99b2b6a429f020aca2ea8c503e7553f3777c (diff) | |
| download | bcm5719-llvm-c6cba2957d520b41de7fef7dfbfc8edc35c228e3.tar.gz bcm5719-llvm-c6cba2957d520b41de7fef7dfbfc8edc35c228e3.zip | |
[SimplifyCFG] revert the last commit.
I ran ALL the test suite locally, so I will look into this...
llvm-svn: 363223
Diffstat (limited to 'llvm/test/Transforms/SimplifyCFG/switch-dead-default.ll')
| -rw-r--r-- | llvm/test/Transforms/SimplifyCFG/switch-dead-default.ll | 162 |
1 files changed, 39 insertions, 123 deletions
diff --git a/llvm/test/Transforms/SimplifyCFG/switch-dead-default.ll b/llvm/test/Transforms/SimplifyCFG/switch-dead-default.ll index 7d281fc93be..77d7e748c78 100644 --- a/llvm/test/Transforms/SimplifyCFG/switch-dead-default.ll +++ b/llvm/test/Transforms/SimplifyCFG/switch-dead-default.ll @@ -1,20 +1,11 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt %s -S -passes='simplify-cfg<switch-to-lookup>' | FileCheck %s -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +; RUN: opt %s -S -simplifycfg | FileCheck %s declare void @foo(i32) define void @test(i1 %a) { -; CHECK-LABEL: @test( -; CHECK-NEXT: br i1 [[A:%.*]], label [[TRUE:%.*]], label [[FALSE:%.*]] -; CHECK: true: -; CHECK-NEXT: tail call void @foo(i32 1) -; CHECK-NEXT: ret void -; CHECK: false: -; CHECK-NEXT: tail call void @foo(i32 3) -; CHECK-NEXT: ret void -; +; CHECK-LABEL: @test +; CHECK: br i1 [[IGNORE:%.*]], label %true, label %false switch i1 %a, label %default [i1 1, label %true - i1 0, label %false] + i1 0, label %false] true: call void @foo(i32 1) ret void @@ -24,35 +15,14 @@ false: default: call void @foo(i32 2) ret void -} +} define void @test2(i2 %a) { -; CHECK-LABEL: @test2( -; CHECK-NEXT: switch i2 [[A:%.*]], label [[DEFAULT1:%.*]] [ -; CHECK-NEXT: i2 0, label [[CASE0:%.*]] -; CHECK-NEXT: i2 1, label [[CASE1:%.*]] -; CHECK-NEXT: i2 -2, label [[CASE2:%.*]] -; CHECK-NEXT: i2 -1, label [[CASE3:%.*]] -; CHECK-NEXT: ] -; CHECK: case0: -; CHECK-NEXT: tail call void @foo(i32 0) -; CHECK-NEXT: ret void -; CHECK: case1: -; CHECK-NEXT: tail call void @foo(i32 1) -; CHECK-NEXT: ret void -; CHECK: case2: -; CHECK-NEXT: tail call void @foo(i32 2) -; CHECK-NEXT: ret void -; CHECK: case3: -; CHECK-NEXT: tail call void @foo(i32 3) -; CHECK-NEXT: ret void -; CHECK: default1: -; CHECK-NEXT: unreachable -; +; CHECK-LABEL: @test2 switch i2 %a, label %default [i2 0, label %case0 - i2 1, label %case1 - i2 2, label %case2 - i2 3, label %case3] + i2 1, label %case1 + i2 2, label %case2 + i2 3, label %case3] case0: call void @foo(i32 0) ret void @@ -66,35 +36,19 @@ case3: call void @foo(i32 3) ret void default: +; CHECK-LABEL: default1: +; CHECK-NEXT: unreachable call void @foo(i32 4) ret void -} +} ; This one is a negative test - we know the value of the default, ; but that's about it define void @test3(i2 %a) { -; CHECK-LABEL: @test3( -; CHECK-NEXT: switch i2 [[A:%.*]], label [[DEFAULT:%.*]] [ -; CHECK-NEXT: i2 0, label [[CASE0:%.*]] -; CHECK-NEXT: i2 1, label [[CASE1:%.*]] -; CHECK-NEXT: i2 -2, label [[CASE2:%.*]] -; CHECK-NEXT: ] -; CHECK: case0: -; CHECK-NEXT: tail call void @foo(i32 0) -; CHECK-NEXT: ret void -; CHECK: case1: -; CHECK-NEXT: tail call void @foo(i32 1) -; CHECK-NEXT: ret void -; CHECK: case2: -; CHECK-NEXT: tail call void @foo(i32 2) -; CHECK-NEXT: ret void -; CHECK: default: -; CHECK-NEXT: tail call void @foo(i32 0) -; CHECK-NEXT: ret void -; +; CHECK-LABEL: @test3 switch i2 %a, label %default [i2 0, label %case0 - i2 1, label %case1 - i2 2, label %case2] + i2 1, label %case1 + i2 2, label %case2] case0: call void @foo(i32 0) @@ -106,30 +60,18 @@ case2: call void @foo(i32 2) ret void default: +; CHECK-LABEL: default: +; CHECK-NEXT: call void @foo call void @foo(i32 0) ret void -} +} ; Negative test - check for possible overflow when computing ; number of possible cases. define void @test4(i128 %a) { -; CHECK-LABEL: @test4( -; CHECK-NEXT: switch i128 [[A:%.*]], label [[DEFAULT:%.*]] [ -; CHECK-NEXT: i128 0, label [[CASE0:%.*]] -; CHECK-NEXT: i128 1, label [[CASE1:%.*]] -; CHECK-NEXT: ] -; CHECK: case0: -; CHECK-NEXT: tail call void @foo(i32 0) -; CHECK-NEXT: ret void -; CHECK: case1: -; CHECK-NEXT: tail call void @foo(i32 1) -; CHECK-NEXT: ret void -; CHECK: default: -; CHECK-NEXT: tail call void @foo(i32 0) -; CHECK-NEXT: ret void -; +; CHECK-LABEL: @test4 switch i128 %a, label %default [i128 0, label %case0 - i128 1, label %case1] + i128 1, label %case1] case0: call void @foo(i32 0) @@ -138,28 +80,20 @@ case1: call void @foo(i32 1) ret void default: +; CHECK-LABEL: default: +; CHECK-NEXT: call void @foo call void @foo(i32 0) ret void -} +} ; All but one bit known zero define void @test5(i8 %a) { -; CHECK-LABEL: @test5( -; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[A:%.*]], 2 -; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP]]) -; CHECK-NEXT: [[SWITCH:%.*]] = icmp eq i8 [[A]], 1 -; CHECK-NEXT: br i1 [[SWITCH]], label [[TRUE:%.*]], label [[FALSE:%.*]] -; CHECK: true: -; CHECK-NEXT: tail call void @foo(i32 1) -; CHECK-NEXT: ret void -; CHECK: false: -; CHECK-NEXT: tail call void @foo(i32 3) -; CHECK-NEXT: ret void -; - %cmp = icmp ult i8 %a, 2 +; CHECK-LABEL: @test5 +; CHECK: br i1 [[IGNORE:%.*]], label %true, label %false + %cmp = icmp ult i8 %a, 2 call void @llvm.assume(i1 %cmp) switch i8 %a, label %default [i8 1, label %true - i8 0, label %false] + i8 0, label %false] true: call void @foo(i32 1) ret void @@ -169,27 +103,18 @@ false: default: call void @foo(i32 2) ret void -} +} ;; All but one bit known one define void @test6(i8 %a) { -; CHECK-LABEL: @test6( -; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[A:%.*]], -3 -; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP]]) -; CHECK-NEXT: [[SWITCH:%.*]] = icmp eq i8 [[A]], -1 -; CHECK-NEXT: br i1 [[SWITCH]], label [[TRUE:%.*]], label [[FALSE:%.*]] -; CHECK: true: -; CHECK-NEXT: tail call void @foo(i32 1) -; CHECK-NEXT: ret void -; CHECK: false: -; CHECK-NEXT: tail call void @foo(i32 3) -; CHECK-NEXT: ret void -; +; CHECK-LABEL: @test6 +; CHECK: @llvm.assume +; CHECK: br i1 [[IGNORE:%.*]], label %true, label %false %and = and i8 %a, 254 - %cmp = icmp eq i8 %and, 254 + %cmp = icmp eq i8 %and, 254 call void @llvm.assume(i1 %cmp) switch i8 %a, label %default [i8 255, label %true - i8 254, label %false] + i8 254, label %false] true: call void @foo(i32 1) ret void @@ -204,24 +129,15 @@ default: ; Check that we can eliminate both dead cases and dead defaults ; within a single run of simplify-cfg define void @test7(i8 %a) { -; CHECK-LABEL: @test7( -; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[A:%.*]], -3 -; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP]]) -; CHECK-NEXT: [[SWITCH:%.*]] = icmp eq i8 [[A]], -1 -; CHECK-NEXT: br i1 [[SWITCH]], label [[TRUE:%.*]], label [[FALSE:%.*]] -; CHECK: true: -; CHECK-NEXT: tail call void @foo(i32 1) -; CHECK-NEXT: ret void -; CHECK: false: -; CHECK-NEXT: tail call void @foo(i32 3) -; CHECK-NEXT: ret void -; +; CHECK-LABEL: @test7 +; CHECK: @llvm.assume +; CHECK: br i1 [[IGNORE:%.*]], label %true, label %false %and = and i8 %a, 254 - %cmp = icmp eq i8 %and, 254 + %cmp = icmp eq i8 %and, 254 call void @llvm.assume(i1 %cmp) switch i8 %a, label %default [i8 255, label %true - i8 254, label %false - i8 0, label %also_dead] + i8 254, label %false + i8 0, label %also_dead] true: call void @foo(i32 1) ret void |

