mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-17 00:27:31 +00:00
Manually notify ScalarEvolution before making an operand replacement, since
it can't currently observe such changes automatically. llvm-svn: 100186
This commit is contained in:
parent
13048a143f
commit
8835a0200a
@ -510,6 +510,13 @@ void IndVarSimplify::RewriteIVExpressions(Loop *L, SCEVExpander &Rewriter) {
|
||||
// Now expand it into actual Instructions and patch it into place.
|
||||
Value *NewVal = Rewriter.expandCodeFor(AR, UseTy, InsertPt);
|
||||
|
||||
// Inform ScalarEvolution that this value is changing. The change doesn't
|
||||
// affect its value, but it does potentially affect which use lists the
|
||||
// value will be on after the replacement, which affects ScalarEvolution's
|
||||
// ability to walk use lists and drop dangling pointers when a value is
|
||||
// deleted.
|
||||
SE->forgetValue(User);
|
||||
|
||||
// Patch the new value into place.
|
||||
if (Op->hasName())
|
||||
NewVal->takeName(Op);
|
||||
|
41
test/Transforms/IndVarSimplify/dangling-use.ll
Normal file
41
test/Transforms/IndVarSimplify/dangling-use.ll
Normal file
@ -0,0 +1,41 @@
|
||||
; RUN: opt -indvars -disable-output < %s
|
||||
|
||||
target datalayout = "E-p:32:32:32-i1:8:8-i8:8:8-i8:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f128:64:128-n32"
|
||||
target triple = "powerpc-apple-darwin11"
|
||||
|
||||
define void @vec_inverse_5_7_vert_loop_copyseparate(i8* %x, i32 %n, i32 %rowbytes) nounwind {
|
||||
entry:
|
||||
%tmp1 = sdiv i32 %n, 3 ; <i32> [#uses=1]
|
||||
%tmp2 = sdiv i32 %rowbytes, 5 ; <i32> [#uses=2]
|
||||
br label %bb49
|
||||
|
||||
bb49: ; preds = %bb48, %entry
|
||||
%x_addr.0 = phi i8* [ %x, %entry ], [ %tmp481, %bb48 ] ; <i8*> [#uses=2]
|
||||
br label %bb10
|
||||
|
||||
bb10: ; preds = %bb49
|
||||
%tmp326 = mul nsw i32 %tmp1, %tmp2 ; <i32> [#uses=1]
|
||||
%tmp351 = getelementptr inbounds i8* %x_addr.0, i32 %tmp326 ; <i8*> [#uses=1]
|
||||
br i1 false, label %bb.nph, label %bb48
|
||||
|
||||
bb.nph: ; preds = %bb10
|
||||
br label %bb23
|
||||
|
||||
bb23: ; preds = %bb28, %bb.nph
|
||||
%pOriginHi.01 = phi i8* [ %tmp351, %bb.nph ], [ %pOriginHi.0, %bb28 ] ; <i8*> [#uses=2]
|
||||
%tmp378 = bitcast i8* %pOriginHi.01 to i8* ; <i8*> [#uses=1]
|
||||
store i8* %tmp378, i8** null
|
||||
%tmp385 = getelementptr inbounds i8* %pOriginHi.01, i32 %tmp2 ; <i8*> [#uses=1]
|
||||
br label %bb28
|
||||
|
||||
bb28: ; preds = %bb23
|
||||
%pOriginHi.0 = phi i8* [ %tmp385, %bb23 ] ; <i8*> [#uses=1]
|
||||
br i1 false, label %bb23, label %bb28.bb48_crit_edge
|
||||
|
||||
bb28.bb48_crit_edge: ; preds = %bb28
|
||||
br label %bb48
|
||||
|
||||
bb48: ; preds = %bb28.bb48_crit_edge, %bb10
|
||||
%tmp481 = getelementptr inbounds i8* %x_addr.0, i32 1 ; <i8*> [#uses=1]
|
||||
br label %bb49
|
||||
}
|
Loading…
Reference in New Issue
Block a user