llvm-6502/test/Transforms/SimplifyCFG/2009-01-18-PHIPropCrash.ll
Eli Friedman 12bb766ae9 Fix for PR3016: detect the tricky case, where there are
unfoldable references to a PHI node in the block being folded, and disable
the transformation in that case.  The correct transformation of such PHI
nodes depends on whether BB dominates Succ, and dominance is expensive 
to compute here.  (Alternatively, it's possible to check whether any 
uses are live, but that's also essentially a dominance calculation. 
Another alternative is to use reg2mem, but it probably isn't a good idea to
use that in simplifycfg.)

Also, remove some incorrect code from CanPropagatePredecessorsForPHIs 
which is made unnecessary with this patch: it didn't consider the case 
where a PHI node in BB has multiple uses.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79174 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-16 04:23:49 +00:00

31 lines
785 B
LLVM

; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis
; PR3016
; Dead use caused invariant violation.
define i32 @func_105(i1 %tmp5, i1 %tmp7) nounwind {
BB:
br i1 true, label %BB2, label %BB1
BB1: ; preds = %BB
br label %BB2
BB2: ; preds = %BB1, %BB
%tmp3 = phi i1 [ true, %BB ], [ false, %BB1 ] ; <i1> [#uses=1]
br label %BB9
BB9: ; preds = %BB11, %BB2
%tmp10 = phi i32 [ 0, %BB2 ], [ %tmp12, %BB11 ] ; <i32> [#uses=1]
br i1 %tmp5, label %BB11, label %BB13
BB11: ; preds = %BB13, %BB9
%tmp12 = phi i32 [ 0, %BB13 ], [ %tmp10, %BB9 ] ; <i32> [#uses=2]
br i1 %tmp3, label %BB9, label %BB20
BB13: ; preds = %BB13, %BB9
%tmp14 = phi i32 [ 0, %BB9 ], [ %tmp14, %BB13 ] ; <i32> [#uses=1]
br i1 %tmp7, label %BB13, label %BB11
BB20: ; preds = %BB11
ret i32 %tmp12
}