1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-01 08:23:21 +01:00
llvm-mirror/test/Transforms/SimplifyCFG/switch_thread.ll
Dan Gohman 205b641954 Change tests from "opt %s" to "opt < %s" so that opt doesn't see the
input filename so that opt doesn't print the input filename in the
output so that grep lines in the tests don't unintentionally match
strings in the input filename.

llvm-svn: 81537
2009-09-11 18:01:28 +00:00

80 lines
2.2 KiB
LLVM

; RUN: opt < %s -simplifycfg -S | \
; RUN: not grep {call void @DEAD}
; Test that we can thread a simple known condition through switch statements.
declare void @foo1()
declare void @foo2()
declare void @DEAD()
define void @test1(i32 %V) {
switch i32 %V, label %A [
i32 4, label %T
i32 17, label %Done
i32 1234, label %A
]
;; V == 4 if we get here.
T: ; preds = %0
call void @foo1( )
;; This switch is always statically determined.
switch i32 %V, label %A2 [
i32 4, label %B
i32 17, label %C
i32 42, label %C
]
A2: ; preds = %T
call void @DEAD( )
call void @DEAD( )
;; always true
%cond2 = icmp eq i32 %V, 4 ; <i1> [#uses=1]
br i1 %cond2, label %Done, label %C
A: ; preds = %0, %0
call void @foo1( )
;; always true
%cond = icmp ne i32 %V, 4 ; <i1> [#uses=1]
br i1 %cond, label %Done, label %C
Done: ; preds = %B, %A, %A2, %0
ret void
B: ; preds = %T
call void @foo2( )
;; always true
%cond3 = icmp eq i32 %V, 4 ; <i1> [#uses=1]
br i1 %cond3, label %Done, label %C
C: ; preds = %B, %A, %A2, %T, %T
call void @DEAD( )
ret void
}
define void @test2(i32 %V) {
switch i32 %V, label %A [
i32 4, label %T
i32 17, label %D
i32 1234, label %E
]
;; V != 4, 17, 1234 here.
A: ; preds = %0
call void @foo1( )
;; This switch is always statically determined.
switch i32 %V, label %E [
i32 4, label %C
i32 17, label %C
i32 42, label %D
]
;; unreacahble.
C: ; preds = %A, %A
call void @DEAD( )
ret void
T: ; preds = %0
call void @foo1( )
call void @foo1( )
ret void
D: ; preds = %A, %0
call void @foo1( )
ret void
E: ; preds = %A, %0
ret void
}