2011-03-15 07:41:25 +00:00
|
|
|
; RUN: opt < %s -lcssa -S | FileCheck %s
|
|
|
|
; CHECK: exit1:
|
|
|
|
; CHECK: .lcssa =
|
|
|
|
; CHECK: exit2:
|
2012-06-26 04:11:38 +00:00
|
|
|
; CHECK: .lcssa1 =
|
2011-03-15 07:41:25 +00:00
|
|
|
; CHECK: exit3:
|
2012-06-26 04:11:38 +00:00
|
|
|
; CHECK-NOT: .lcssa
|
2011-03-15 07:41:25 +00:00
|
|
|
|
|
|
|
; Test to ensure that when there are multiple exit blocks, PHI nodes are
|
|
|
|
; only inserted by LCSSA when there is a use dominated by a given exit
|
|
|
|
; block.
|
|
|
|
|
|
|
|
declare void @printf(i32 %i)
|
|
|
|
|
|
|
|
define i32 @unused_phis() nounwind {
|
|
|
|
entry:
|
|
|
|
br label %loop
|
|
|
|
|
|
|
|
loop:
|
|
|
|
%i = phi i32 [0, %entry], [1, %then2]
|
|
|
|
br i1 undef, label %exit1, label %then1
|
|
|
|
|
|
|
|
then1:
|
|
|
|
br i1 undef, label %exit2, label %then2
|
|
|
|
|
|
|
|
then2:
|
|
|
|
br i1 undef, label %exit3, label %loop
|
|
|
|
|
|
|
|
exit1:
|
|
|
|
call void @printf(i32 %i)
|
|
|
|
ret i32 %i
|
|
|
|
|
|
|
|
exit2:
|
|
|
|
ret i32 %i
|
|
|
|
|
|
|
|
exit3:
|
|
|
|
ret i32 0
|
|
|
|
}
|