summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/SimplifyCFG/switch-dead-default.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Transforms/SimplifyCFG/switch-dead-default.ll')
-rw-r--r--llvm/test/Transforms/SimplifyCFG/switch-dead-default.ll162
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
OpenPOWER on IntegriCloud