Remove fixme about unreachable cases from SwitchToLookupTable

SimplifyCFG will have removed those cases for us.

llvm-svn: 167132
This commit is contained in:
Hans Wennborg 2012-10-31 16:15:25 +00:00
parent 6319d757df
commit 4c6d01059c
2 changed files with 32 additions and 2 deletions

View File

@ -3545,8 +3545,6 @@ static bool SwitchToLookupTable(SwitchInst *SI,
if (TTI && !TTI->getScalarTargetTransformInfo()->shouldBuildLookupTables())
return false;
// FIXME: Handle unreachable cases.
// FIXME: If the switch is too sparse for a lookup table, perhaps we could
// split off a dense part and build a lookup table for that.

View File

@ -21,6 +21,9 @@ target triple = "x86_64-unknown-linux-gnu"
; The table for @cprop
; CHECK: @switch.table5 = private unnamed_addr constant [7 x i32] [i32 5, i32 42, i32 126, i32 -452, i32 128, i32 6, i32 7]
; The table for @unreachable
; CHECK: @switch.table6 = private unnamed_addr constant [5 x i32] [i32 0, i32 0, i32 0, i32 1, i32 -1]
; A simple int-to-int selection switch.
; It is dense enough to be replaced by table lookup.
; The result is directly by a ret from an otherwise empty bb,
@ -745,3 +748,32 @@ return:
; CHECK: switch.lookup:
; CHECK: %switch.gep = getelementptr inbounds [7 x i32]* @switch.table5, i32 0, i32 %switch.tableidx
}
define i32 @unreachable(i32 %x) {
entry:
switch i32 %x, label %sw.default [
i32 0, label %sw.bb
i32 1, label %sw.bb
i32 2, label %sw.bb
i32 3, label %sw.bb1
i32 4, label %sw.bb2
i32 5, label %sw.bb3
i32 6, label %sw.bb3
i32 7, label %sw.bb3
i32 8, label %sw.bb3
]
sw.bb: br label %return
sw.bb1: unreachable
sw.bb2: br label %return
sw.bb3: br label %return
sw.default: unreachable
return:
%retval.0 = phi i32 [ 1, %sw.bb3 ], [ -1, %sw.bb2 ], [ 1, %sw.bb1 ], [ 0, %sw.bb ]
ret i32 %retval.0
; CHECK: @unreachable
; CHECK: switch.lookup:
; CHECK: getelementptr inbounds [5 x i32]* @switch.table6, i32 0, i32 %switch.tableidx
}