forked from OSchip/llvm-project
[NFC] Add utility function for SafetyInfo updates for moveBefore
llvm-svn: 346472
This commit is contained in:
parent
71c35e13c3
commit
9883d1e1a7
|
@ -126,6 +126,9 @@ CloneInstructionInExitBlock(Instruction &I, BasicBlock &ExitBlock, PHINode &PN,
|
||||||
static void eraseInstruction(Instruction &I, ICFLoopSafetyInfo &SafetyInfo,
|
static void eraseInstruction(Instruction &I, ICFLoopSafetyInfo &SafetyInfo,
|
||||||
AliasSetTracker *AST);
|
AliasSetTracker *AST);
|
||||||
|
|
||||||
|
static void moveInstructionBefore(Instruction &I, Instruction &Dest,
|
||||||
|
ICFLoopSafetyInfo &SafetyInfo);
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
struct LoopInvariantCodeMotion {
|
struct LoopInvariantCodeMotion {
|
||||||
using ASTrackerMapTy = DenseMap<Loop *, std::unique_ptr<AliasSetTracker>>;
|
using ASTrackerMapTy = DenseMap<Loop *, std::unique_ptr<AliasSetTracker>>;
|
||||||
|
@ -890,6 +893,13 @@ static void eraseInstruction(Instruction &I, ICFLoopSafetyInfo &SafetyInfo,
|
||||||
I.eraseFromParent();
|
I.eraseFromParent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void moveInstructionBefore(Instruction &I, Instruction &Dest,
|
||||||
|
ICFLoopSafetyInfo &SafetyInfo) {
|
||||||
|
SafetyInfo.removeInstruction(&I);
|
||||||
|
SafetyInfo.insertInstructionTo(Dest.getParent());
|
||||||
|
I.moveBefore(&Dest);
|
||||||
|
}
|
||||||
|
|
||||||
static Instruction *sinkThroughTriviallyReplaceablePHI(
|
static Instruction *sinkThroughTriviallyReplaceablePHI(
|
||||||
PHINode *TPN, Instruction *I, LoopInfo *LI,
|
PHINode *TPN, Instruction *I, LoopInfo *LI,
|
||||||
SmallDenseMap<BasicBlock *, Instruction *, 32> &SunkCopies,
|
SmallDenseMap<BasicBlock *, Instruction *, 32> &SunkCopies,
|
||||||
|
@ -1118,10 +1128,8 @@ static void hoist(Instruction &I, const DominatorTree *DT, const Loop *CurLoop,
|
||||||
!SafetyInfo->isGuaranteedToExecute(I, DT, CurLoop))
|
!SafetyInfo->isGuaranteedToExecute(I, DT, CurLoop))
|
||||||
I.dropUnknownNonDebugMetadata();
|
I.dropUnknownNonDebugMetadata();
|
||||||
|
|
||||||
SafetyInfo->removeInstruction(&I);
|
|
||||||
SafetyInfo->insertInstructionTo(Preheader);
|
|
||||||
// Move the new node to the Preheader, before its terminator.
|
// Move the new node to the Preheader, before its terminator.
|
||||||
I.moveBefore(Preheader->getTerminator());
|
moveInstructionBefore(I, *Preheader->getTerminator(), *SafetyInfo);
|
||||||
|
|
||||||
// Do not retain debug locations when we are moving instructions to different
|
// Do not retain debug locations when we are moving instructions to different
|
||||||
// basic blocks, because we want to avoid jumpy line tables. Calls, however,
|
// basic blocks, because we want to avoid jumpy line tables. Calls, however,
|
||||||
|
|
Loading…
Reference in New Issue