mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 08:17:40 +00:00
LoopVectorize: Make Value pointers that could be RAUW'ed a VH
The Value pointers we store in the induction variable list can be RAUW'ed by a call to SCEVExpander::expandCodeFor, use a TrackingVH instead. Do the same thing in some other places where we store pointers that could potentially be RAUW'ed. Fixes PR16073. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@182485 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -80,6 +80,7 @@
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/PatternMatch.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include "llvm/Support/ValueHandle.h"
|
||||
#include "llvm/Target/TargetLibraryInfo.h"
|
||||
#include "llvm/Transforms/Scalar.h"
|
||||
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
|
||||
@@ -458,7 +459,7 @@ public:
|
||||
|
||||
// The starting value of the reduction.
|
||||
// It does not have to be zero!
|
||||
Value *StartValue;
|
||||
TrackingVH<Value> StartValue;
|
||||
// The instruction who's value is used outside the loop.
|
||||
Instruction *LoopExitInstr;
|
||||
// The kind of the reduction.
|
||||
@@ -503,7 +504,7 @@ public:
|
||||
/// This flag indicates if we need to add the runtime check.
|
||||
bool Need;
|
||||
/// Holds the pointers that we need to check.
|
||||
SmallVector<Value*, 2> Pointers;
|
||||
SmallVector<TrackingVH<Value>, 2> Pointers;
|
||||
/// Holds the pointer value at the beginning of the loop.
|
||||
SmallVector<const SCEV*, 2> Starts;
|
||||
/// Holds the pointer value at the end of the loop.
|
||||
@@ -517,7 +518,7 @@ public:
|
||||
InductionInfo(Value *Start, InductionKind K) : StartValue(Start), IK(K) {}
|
||||
InductionInfo() : StartValue(0), IK(IK_NoInduction) {}
|
||||
/// Start value.
|
||||
Value *StartValue;
|
||||
TrackingVH<Value> StartValue;
|
||||
/// Induction kind.
|
||||
InductionKind IK;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user