forked from OSchip/llvm-project
[MachineBasicBlock] Make the pass argument truly mandatory when
splitting edges. MachineBasicBlock::SplitCriticalEdges will crash if a nullptr would have been passed for the Pass argument. Do not allow that by turning this argument into a reference. The alternative would have been to make the Pass a truly optional argument, but although this is easy to do, I was afraid users using it like this would not be aware the livness information, dominator tree and such would silently be broken. llvm-svn: 267052
This commit is contained in:
parent
95590f4b7b
commit
23341a84ca
|
@ -506,7 +506,7 @@ public:
|
|||
///
|
||||
/// This function updates LiveVariables, MachineDominatorTree, and
|
||||
/// MachineLoopInfo, as applicable.
|
||||
MachineBasicBlock *SplitCriticalEdge(MachineBasicBlock *Succ, Pass *P);
|
||||
MachineBasicBlock *SplitCriticalEdge(MachineBasicBlock *Succ, Pass &P);
|
||||
|
||||
/// Check if the edge between this block and the given successor \p
|
||||
/// Succ, can be split. If this returns true a subsequent call to
|
||||
|
|
|
@ -711,8 +711,8 @@ bool MachineBasicBlock::canFallThrough() {
|
|||
return FBB == nullptr;
|
||||
}
|
||||
|
||||
MachineBasicBlock *
|
||||
MachineBasicBlock::SplitCriticalEdge(MachineBasicBlock *Succ, Pass *P) {
|
||||
MachineBasicBlock *MachineBasicBlock::SplitCriticalEdge(MachineBasicBlock *Succ,
|
||||
Pass &P) {
|
||||
if (!canSplitCriticalEdge(Succ))
|
||||
return nullptr;
|
||||
|
||||
|
@ -726,8 +726,8 @@ MachineBasicBlock::SplitCriticalEdge(MachineBasicBlock *Succ, Pass *P) {
|
|||
<< " -- BB#" << NMBB->getNumber()
|
||||
<< " -- BB#" << Succ->getNumber() << '\n');
|
||||
|
||||
LiveIntervals *LIS = P->getAnalysisIfAvailable<LiveIntervals>();
|
||||
SlotIndexes *Indexes = P->getAnalysisIfAvailable<SlotIndexes>();
|
||||
LiveIntervals *LIS = P.getAnalysisIfAvailable<LiveIntervals>();
|
||||
SlotIndexes *Indexes = P.getAnalysisIfAvailable<SlotIndexes>();
|
||||
if (LIS)
|
||||
LIS->insertMBBInMaps(NMBB);
|
||||
else if (Indexes)
|
||||
|
@ -736,7 +736,7 @@ MachineBasicBlock::SplitCriticalEdge(MachineBasicBlock *Succ, Pass *P) {
|
|||
// On some targets like Mips, branches may kill virtual registers. Make sure
|
||||
// that LiveVariables is properly updated after updateTerminator replaces the
|
||||
// terminators.
|
||||
LiveVariables *LV = P->getAnalysisIfAvailable<LiveVariables>();
|
||||
LiveVariables *LV = P.getAnalysisIfAvailable<LiveVariables>();
|
||||
|
||||
// Collect a list of virtual registers killed by the terminators.
|
||||
SmallVector<unsigned, 4> KilledRegs;
|
||||
|
@ -916,10 +916,10 @@ MachineBasicBlock::SplitCriticalEdge(MachineBasicBlock *Succ, Pass *P) {
|
|||
}
|
||||
|
||||
if (MachineDominatorTree *MDT =
|
||||
P->getAnalysisIfAvailable<MachineDominatorTree>())
|
||||
P.getAnalysisIfAvailable<MachineDominatorTree>())
|
||||
MDT->recordSplitCriticalEdge(this, Succ, NMBB);
|
||||
|
||||
if (MachineLoopInfo *MLI = P->getAnalysisIfAvailable<MachineLoopInfo>())
|
||||
if (MachineLoopInfo *MLI = P.getAnalysisIfAvailable<MachineLoopInfo>())
|
||||
if (MachineLoop *TIL = MLI->getLoopFor(this)) {
|
||||
// If one or the other blocks were not in a loop, the new block is not
|
||||
// either, and thus LI doesn't need to be updated.
|
||||
|
|
|
@ -1382,7 +1382,7 @@ MachineBasicBlock *MachineLICM::getCurPreheader() {
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
CurPreheader = Pred->SplitCriticalEdge(CurLoop->getHeader(), this);
|
||||
CurPreheader = Pred->SplitCriticalEdge(CurLoop->getHeader(), *this);
|
||||
if (!CurPreheader) {
|
||||
CurPreheader = reinterpret_cast<MachineBasicBlock *>(-1);
|
||||
return nullptr;
|
||||
|
|
|
@ -284,7 +284,7 @@ bool MachineSinking::runOnMachineFunction(MachineFunction &MF) {
|
|||
|
||||
// If we have anything we marked as toSplit, split it now.
|
||||
for (auto &Pair : ToSplit) {
|
||||
auto NewSucc = Pair.first->SplitCriticalEdge(Pair.second, this);
|
||||
auto NewSucc = Pair.first->SplitCriticalEdge(Pair.second, *this);
|
||||
if (NewSucc != nullptr) {
|
||||
DEBUG(dbgs() << " *** Splitting critical edge:"
|
||||
" BB#" << Pair.first->getNumber()
|
||||
|
|
|
@ -610,7 +610,7 @@ bool PHIElimination::SplitPHIEdges(MachineFunction &MF,
|
|||
}
|
||||
if (!ShouldSplit && !SplitAllCriticalEdges)
|
||||
continue;
|
||||
if (!PreMBB->SplitCriticalEdge(&MBB, this)) {
|
||||
if (!PreMBB->SplitCriticalEdge(&MBB, *this)) {
|
||||
DEBUG(dbgs() << "Failed to split critical edge.\n");
|
||||
continue;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue