mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-21 00:32:23 +00:00
12bb766ae9
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
31 lines
785 B
LLVM
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
|
|
}
|