mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-27 13:40:30 +00:00
CodeGen: Continue removing ilist iterator implicit conversions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@249884 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1b44cbf5ac
commit
9731c604b2
@ -269,7 +269,7 @@ void LoopBase<BlockT, LoopT>::verifyLoop() const {
|
||||
// A non-header loop shouldn't be reachable from outside the loop,
|
||||
// though it is permitted if the predecessor is not itself actually
|
||||
// reachable.
|
||||
BlockT *EntryBB = BB->getParent()->begin();
|
||||
BlockT *EntryBB = &BB->getParent()->front();
|
||||
for (BlockT *CB : depth_first(EntryBB))
|
||||
for (unsigned i = 0, e = OutsideLoopPreds.size(); i != e; ++i)
|
||||
assert(CB != OutsideLoopPreds[i] &&
|
||||
|
@ -157,7 +157,7 @@ void MachineFunction::RenumberBlocks(MachineBasicBlock *MBB) {
|
||||
if (MBB == nullptr)
|
||||
MBBI = begin();
|
||||
else
|
||||
MBBI = MBB;
|
||||
MBBI = MBB->getIterator();
|
||||
|
||||
// Figure out the block number this should have.
|
||||
unsigned BlockNo = 0;
|
||||
@ -177,7 +177,7 @@ void MachineFunction::RenumberBlocks(MachineBasicBlock *MBB) {
|
||||
if (MBBNumbering[BlockNo])
|
||||
MBBNumbering[BlockNo]->setNumber(-1);
|
||||
|
||||
MBBNumbering[BlockNo] = MBBI;
|
||||
MBBNumbering[BlockNo] = &*MBBI;
|
||||
MBBI->setNumber(BlockNo);
|
||||
}
|
||||
}
|
||||
|
@ -866,7 +866,7 @@ void MachineInstr::addMemOperand(MachineFunction &MF,
|
||||
|
||||
bool MachineInstr::hasPropertyInBundle(unsigned Mask, QueryType Type) const {
|
||||
assert(!isBundledWithPred() && "Must be called on bundle header");
|
||||
for (MachineBasicBlock::const_instr_iterator MII = this;; ++MII) {
|
||||
for (MachineBasicBlock::const_instr_iterator MII = getIterator();; ++MII) {
|
||||
if (MII->getDesc().getFlags() & Mask) {
|
||||
if (Type == AnyInBundle)
|
||||
return true;
|
||||
@ -890,13 +890,13 @@ bool MachineInstr::isIdenticalTo(const MachineInstr *Other,
|
||||
|
||||
if (isBundle()) {
|
||||
// Both instructions are bundles, compare MIs inside the bundle.
|
||||
MachineBasicBlock::const_instr_iterator I1 = *this;
|
||||
MachineBasicBlock::const_instr_iterator I1 = getIterator();
|
||||
MachineBasicBlock::const_instr_iterator E1 = getParent()->instr_end();
|
||||
MachineBasicBlock::const_instr_iterator I2 = *Other;
|
||||
MachineBasicBlock::const_instr_iterator I2 = Other->getIterator();
|
||||
MachineBasicBlock::const_instr_iterator E2= Other->getParent()->instr_end();
|
||||
while (++I1 != E1 && I1->isInsideBundle()) {
|
||||
++I2;
|
||||
if (I2 == E2 || !I2->isInsideBundle() || !I1->isIdenticalTo(I2, Check))
|
||||
if (I2 == E2 || !I2->isInsideBundle() || !I1->isIdenticalTo(&*I2, Check))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -1001,7 +1001,7 @@ unsigned MachineInstr::getNumExplicitOperands() const {
|
||||
void MachineInstr::bundleWithPred() {
|
||||
assert(!isBundledWithPred() && "MI is already bundled with its predecessor");
|
||||
setFlag(BundledPred);
|
||||
MachineBasicBlock::instr_iterator Pred = this;
|
||||
MachineBasicBlock::instr_iterator Pred = getIterator();
|
||||
--Pred;
|
||||
assert(!Pred->isBundledWithSucc() && "Inconsistent bundle flags");
|
||||
Pred->setFlag(BundledSucc);
|
||||
@ -1010,7 +1010,7 @@ void MachineInstr::bundleWithPred() {
|
||||
void MachineInstr::bundleWithSucc() {
|
||||
assert(!isBundledWithSucc() && "MI is already bundled with its successor");
|
||||
setFlag(BundledSucc);
|
||||
MachineBasicBlock::instr_iterator Succ = this;
|
||||
MachineBasicBlock::instr_iterator Succ = getIterator();
|
||||
++Succ;
|
||||
assert(!Succ->isBundledWithPred() && "Inconsistent bundle flags");
|
||||
Succ->setFlag(BundledPred);
|
||||
@ -1019,7 +1019,7 @@ void MachineInstr::bundleWithSucc() {
|
||||
void MachineInstr::unbundleFromPred() {
|
||||
assert(isBundledWithPred() && "MI isn't bundled with its predecessor");
|
||||
clearFlag(BundledPred);
|
||||
MachineBasicBlock::instr_iterator Pred = this;
|
||||
MachineBasicBlock::instr_iterator Pred = getIterator();
|
||||
--Pred;
|
||||
assert(Pred->isBundledWithSucc() && "Inconsistent bundle flags");
|
||||
Pred->clearFlag(BundledSucc);
|
||||
@ -1028,7 +1028,7 @@ void MachineInstr::unbundleFromPred() {
|
||||
void MachineInstr::unbundleFromSucc() {
|
||||
assert(isBundledWithSucc() && "MI isn't bundled with its successor");
|
||||
clearFlag(BundledSucc);
|
||||
MachineBasicBlock::instr_iterator Succ = this;
|
||||
MachineBasicBlock::instr_iterator Succ = getIterator();
|
||||
++Succ;
|
||||
assert(Succ->isBundledWithPred() && "Inconsistent bundle flags");
|
||||
Succ->clearFlag(BundledPred);
|
||||
@ -1164,7 +1164,7 @@ const TargetRegisterClass *MachineInstr::getRegClassConstraintEffect(
|
||||
/// Return the number of instructions inside the MI bundle, not counting the
|
||||
/// header instruction.
|
||||
unsigned MachineInstr::getBundleSize() const {
|
||||
MachineBasicBlock::const_instr_iterator I = this;
|
||||
MachineBasicBlock::const_instr_iterator I = getIterator();
|
||||
unsigned Size = 0;
|
||||
while (I->isBundledWithSucc())
|
||||
++Size, ++I;
|
||||
|
@ -794,8 +794,8 @@ void MachineLICM::SinkIntoLoop() {
|
||||
I != Preheader->instr_end(); ++I) {
|
||||
// We need to ensure that we can safely move this instruction into the loop.
|
||||
// As such, it must not have side-effects, e.g. such as a call has.
|
||||
if (IsLoopInvariantInst(*I) && !HasLoopPHIUse(I))
|
||||
Candidates.push_back(I);
|
||||
if (IsLoopInvariantInst(*I) && !HasLoopPHIUse(&*I))
|
||||
Candidates.push_back(&*I);
|
||||
}
|
||||
|
||||
for (MachineInstr *I : Candidates) {
|
||||
|
@ -51,11 +51,11 @@ MachineBasicBlock *MachineLoop::getTopBlock() {
|
||||
MachineBasicBlock *TopMBB = getHeader();
|
||||
MachineFunction::iterator Begin = TopMBB->getParent()->begin();
|
||||
if (TopMBB != Begin) {
|
||||
MachineBasicBlock *PriorMBB = std::prev(MachineFunction::iterator(TopMBB));
|
||||
MachineBasicBlock *PriorMBB = &*std::prev(TopMBB->getIterator());
|
||||
while (contains(PriorMBB)) {
|
||||
TopMBB = PriorMBB;
|
||||
if (TopMBB == Begin) break;
|
||||
PriorMBB = std::prev(MachineFunction::iterator(TopMBB));
|
||||
PriorMBB = &*std::prev(TopMBB->getIterator());
|
||||
}
|
||||
}
|
||||
return TopMBB;
|
||||
@ -65,11 +65,12 @@ MachineBasicBlock *MachineLoop::getBottomBlock() {
|
||||
MachineBasicBlock *BotMBB = getHeader();
|
||||
MachineFunction::iterator End = BotMBB->getParent()->end();
|
||||
if (BotMBB != std::prev(End)) {
|
||||
MachineBasicBlock *NextMBB = std::next(MachineFunction::iterator(BotMBB));
|
||||
MachineBasicBlock *NextMBB = &*std::next(BotMBB->getIterator());
|
||||
while (contains(NextMBB)) {
|
||||
BotMBB = NextMBB;
|
||||
if (BotMBB == std::next(MachineFunction::iterator(BotMBB))) break;
|
||||
NextMBB = std::next(MachineFunction::iterator(BotMBB));
|
||||
if (BotMBB == &*std::next(BotMBB->getIterator()))
|
||||
break;
|
||||
NextMBB = &*std::next(BotMBB->getIterator());
|
||||
}
|
||||
}
|
||||
return BotMBB;
|
||||
|
@ -405,7 +405,7 @@ void MachineSchedulerBase::scheduleRegions(ScheduleDAGInstrs &Scheduler) {
|
||||
for (MachineFunction::iterator MBB = MF->begin(), MBBEnd = MF->end();
|
||||
MBB != MBBEnd; ++MBB) {
|
||||
|
||||
Scheduler.startBlock(MBB);
|
||||
Scheduler.startBlock(&*MBB);
|
||||
|
||||
#ifndef NDEBUG
|
||||
if (SchedOnlyFunc.getNumOccurrences() && SchedOnlyFunc != MF->getName())
|
||||
@ -434,7 +434,7 @@ void MachineSchedulerBase::scheduleRegions(ScheduleDAGInstrs &Scheduler) {
|
||||
|
||||
// Avoid decrementing RegionEnd for blocks with no terminator.
|
||||
if (RegionEnd != MBB->end() ||
|
||||
isSchedBoundary(std::prev(RegionEnd), MBB, MF, TII, IsPostRA)) {
|
||||
isSchedBoundary(&*std::prev(RegionEnd), &*MBB, MF, TII, IsPostRA)) {
|
||||
--RegionEnd;
|
||||
// Count the boundary instruction.
|
||||
--RemainingInstrs;
|
||||
@ -445,14 +445,14 @@ void MachineSchedulerBase::scheduleRegions(ScheduleDAGInstrs &Scheduler) {
|
||||
unsigned NumRegionInstrs = 0;
|
||||
MachineBasicBlock::iterator I = RegionEnd;
|
||||
for(;I != MBB->begin(); --I, --RemainingInstrs) {
|
||||
if (isSchedBoundary(std::prev(I), MBB, MF, TII, IsPostRA))
|
||||
if (isSchedBoundary(&*std::prev(I), &*MBB, MF, TII, IsPostRA))
|
||||
break;
|
||||
if (!I->isDebugValue())
|
||||
++NumRegionInstrs;
|
||||
}
|
||||
// Notify the scheduler of the region, even if we may skip scheduling
|
||||
// it. Perhaps it still needs to be bundled.
|
||||
Scheduler.enterRegion(MBB, I, RegionEnd, NumRegionInstrs);
|
||||
Scheduler.enterRegion(&*MBB, I, RegionEnd, NumRegionInstrs);
|
||||
|
||||
// Skip empty scheduling regions (0 or 1 schedulable instructions).
|
||||
if (I == RegionEnd || I == std::prev(RegionEnd)) {
|
||||
@ -492,7 +492,7 @@ void MachineSchedulerBase::scheduleRegions(ScheduleDAGInstrs &Scheduler) {
|
||||
if (Scheduler.isPostRA()) {
|
||||
// FIXME: Ideally, no further passes should rely on kill flags. However,
|
||||
// thumb2 size reduction is currently an exception.
|
||||
Scheduler.fixupKills(MBB);
|
||||
Scheduler.fixupKills(&*MBB);
|
||||
}
|
||||
}
|
||||
Scheduler.finalizeSchedule();
|
||||
|
@ -203,6 +203,9 @@ namespace {
|
||||
void visitMachineBasicBlockAfter(const MachineBasicBlock *MBB);
|
||||
void visitMachineFunctionAfter();
|
||||
|
||||
template <typename T> void report(const char *msg, ilist_iterator<T> I) {
|
||||
report(msg, &*I);
|
||||
}
|
||||
void report(const char *msg, const MachineFunction *MF);
|
||||
void report(const char *msg, const MachineBasicBlock *MBB);
|
||||
void report(const char *msg, const MachineInstr *MI);
|
||||
@ -314,7 +317,7 @@ bool MachineVerifier::runOnMachineFunction(MachineFunction &MF) {
|
||||
visitMachineFunctionBefore();
|
||||
for (MachineFunction::const_iterator MFI = MF.begin(), MFE = MF.end();
|
||||
MFI!=MFE; ++MFI) {
|
||||
visitMachineBasicBlockBefore(MFI);
|
||||
visitMachineBasicBlockBefore(&*MFI);
|
||||
// Keep track of the current bundle header.
|
||||
const MachineInstr *CurBundle = nullptr;
|
||||
// Do we expect the next instruction to be part of the same bundle?
|
||||
@ -322,7 +325,7 @@ bool MachineVerifier::runOnMachineFunction(MachineFunction &MF) {
|
||||
|
||||
for (MachineBasicBlock::const_instr_iterator MBBI = MFI->instr_begin(),
|
||||
MBBE = MFI->instr_end(); MBBI != MBBE; ++MBBI) {
|
||||
if (MBBI->getParent() != MFI) {
|
||||
if (MBBI->getParent() != &*MFI) {
|
||||
report("Bad instruction parent pointer", MFI);
|
||||
errs() << "Instruction: " << *MBBI;
|
||||
continue;
|
||||
@ -331,20 +334,22 @@ bool MachineVerifier::runOnMachineFunction(MachineFunction &MF) {
|
||||
// Check for consistent bundle flags.
|
||||
if (InBundle && !MBBI->isBundledWithPred())
|
||||
report("Missing BundledPred flag, "
|
||||
"BundledSucc was set on predecessor", MBBI);
|
||||
"BundledSucc was set on predecessor",
|
||||
&*MBBI);
|
||||
if (!InBundle && MBBI->isBundledWithPred())
|
||||
report("BundledPred flag is set, "
|
||||
"but BundledSucc not set on predecessor", MBBI);
|
||||
"but BundledSucc not set on predecessor",
|
||||
&*MBBI);
|
||||
|
||||
// Is this a bundle header?
|
||||
if (!MBBI->isInsideBundle()) {
|
||||
if (CurBundle)
|
||||
visitMachineBundleAfter(CurBundle);
|
||||
CurBundle = MBBI;
|
||||
CurBundle = &*MBBI;
|
||||
visitMachineBundleBefore(CurBundle);
|
||||
} else if (!CurBundle)
|
||||
report("No bundle header", MBBI);
|
||||
visitMachineInstrBefore(MBBI);
|
||||
visitMachineInstrBefore(&*MBBI);
|
||||
for (unsigned I = 0, E = MBBI->getNumOperands(); I != E; ++I) {
|
||||
const MachineInstr &MI = *MBBI;
|
||||
const MachineOperand &Op = MI.getOperand(I);
|
||||
@ -357,7 +362,7 @@ bool MachineVerifier::runOnMachineFunction(MachineFunction &MF) {
|
||||
visitMachineOperand(&Op, I);
|
||||
}
|
||||
|
||||
visitMachineInstrAfter(MBBI);
|
||||
visitMachineInstrAfter(&*MBBI);
|
||||
|
||||
// Was this the last bundled instruction?
|
||||
InBundle = MBBI->isBundledWithSucc();
|
||||
@ -366,7 +371,7 @@ bool MachineVerifier::runOnMachineFunction(MachineFunction &MF) {
|
||||
visitMachineBundleAfter(CurBundle);
|
||||
if (InBundle)
|
||||
report("BundledSucc flag set on last instruction in block", &MFI->back());
|
||||
visitMachineBasicBlockAfter(MFI);
|
||||
visitMachineBasicBlockAfter(&*MFI);
|
||||
}
|
||||
visitMachineFunctionAfter();
|
||||
|
||||
@ -575,7 +580,7 @@ MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *MBB) {
|
||||
// check whether its answers match up with reality.
|
||||
if (!TBB && !FBB) {
|
||||
// Block falls through to its successor.
|
||||
MachineFunction::const_iterator MBBI = MBB;
|
||||
MachineFunction::const_iterator MBBI = MBB->getIterator();
|
||||
++MBBI;
|
||||
if (MBBI == MF->end()) {
|
||||
// It's possible that the block legitimately ends with a noreturn
|
||||
@ -588,7 +593,7 @@ MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *MBB) {
|
||||
} else if (MBB->succ_size() != 1+LandingPadSuccs.size()) {
|
||||
report("MBB exits via unconditional fall-through but doesn't have "
|
||||
"exactly one CFG successor!", MBB);
|
||||
} else if (!MBB->isSuccessor(MBBI)) {
|
||||
} else if (!MBB->isSuccessor(&*MBBI)) {
|
||||
report("MBB exits via unconditional fall-through but its successor "
|
||||
"differs from its CFG successor!", MBB);
|
||||
}
|
||||
@ -626,7 +631,7 @@ MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *MBB) {
|
||||
}
|
||||
} else if (TBB && !FBB && !Cond.empty()) {
|
||||
// Block conditionally branches somewhere, otherwise falls through.
|
||||
MachineFunction::const_iterator MBBI = MBB;
|
||||
MachineFunction::const_iterator MBBI = MBB->getIterator();
|
||||
++MBBI;
|
||||
if (MBBI == MF->end()) {
|
||||
report("MBB conditionally falls through out of function!", MBB);
|
||||
@ -641,7 +646,7 @@ MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *MBB) {
|
||||
} else if (MBB->succ_size() != 2) {
|
||||
report("MBB exits via conditional branch/fall-through but doesn't have "
|
||||
"exactly two CFG successors!", MBB);
|
||||
} else if (!matchPair(MBB->succ_begin(), TBB, MBBI)) {
|
||||
} else if (!matchPair(MBB->succ_begin(), TBB, &*MBBI)) {
|
||||
report("MBB exits via conditional branch/fall-through but the CFG "
|
||||
"successors don't match the actual successors!", MBB);
|
||||
}
|
||||
@ -1610,7 +1615,7 @@ void MachineVerifier::verifyLiveRangeSegment(const LiveRange &LR,
|
||||
}
|
||||
|
||||
// Now check all the basic blocks in this live segment.
|
||||
MachineFunction::const_iterator MFI = MBB;
|
||||
MachineFunction::const_iterator MFI = MBB->getIterator();
|
||||
// Is this live segment the beginning of a non-PHIDef VN?
|
||||
if (S.start == VNI->def && !VNI->isPHIDef()) {
|
||||
// Not live-in to any blocks.
|
||||
@ -1620,7 +1625,7 @@ void MachineVerifier::verifyLiveRangeSegment(const LiveRange &LR,
|
||||
++MFI;
|
||||
}
|
||||
for (;;) {
|
||||
assert(LiveInts->isLiveInToMBB(LR, MFI));
|
||||
assert(LiveInts->isLiveInToMBB(LR, &*MFI));
|
||||
// We don't know how to track physregs into a landing pad.
|
||||
if (!TargetRegisterInfo::isVirtualRegister(Reg) &&
|
||||
MFI->isEHPad()) {
|
||||
@ -1632,7 +1637,7 @@ void MachineVerifier::verifyLiveRangeSegment(const LiveRange &LR,
|
||||
|
||||
// Is VNI a PHI-def in the current block?
|
||||
bool IsPHI = VNI->isPHIDef() &&
|
||||
VNI->def == LiveInts->getMBBStartIdx(MFI);
|
||||
VNI->def == LiveInts->getMBBStartIdx(&*MFI);
|
||||
|
||||
// Check that VNI is live-out of all predecessors.
|
||||
for (MachineBasicBlock::const_pred_iterator PI = MFI->pred_begin(),
|
||||
@ -1645,7 +1650,7 @@ void MachineVerifier::verifyLiveRangeSegment(const LiveRange &LR,
|
||||
report("Register not marked live out of predecessor", *PI, LR, Reg,
|
||||
LaneMask);
|
||||
errs() << "Valno #" << VNI->id << " live into BB#" << MFI->getNumber()
|
||||
<< '@' << LiveInts->getMBBStartIdx(MFI) << ", not live before "
|
||||
<< '@' << LiveInts->getMBBStartIdx(&*MFI) << ", not live before "
|
||||
<< PEnd << '\n';
|
||||
continue;
|
||||
}
|
||||
@ -1655,9 +1660,9 @@ void MachineVerifier::verifyLiveRangeSegment(const LiveRange &LR,
|
||||
report("Different value live out of predecessor", *PI, LR, Reg,
|
||||
LaneMask);
|
||||
errs() << "Valno #" << PVNI->id << " live out of BB#"
|
||||
<< (*PI)->getNumber() << '@' << PEnd
|
||||
<< "\nValno #" << VNI->id << " live into BB#" << MFI->getNumber()
|
||||
<< '@' << LiveInts->getMBBStartIdx(MFI) << '\n';
|
||||
<< (*PI)->getNumber() << '@' << PEnd << "\nValno #" << VNI->id
|
||||
<< " live into BB#" << MFI->getNumber() << '@'
|
||||
<< LiveInts->getMBBStartIdx(&*MFI) << '\n';
|
||||
}
|
||||
}
|
||||
if (&*MFI == EndMBB)
|
||||
|
@ -172,8 +172,8 @@ void SlotIndexes::repairIndexesInRange(MachineBasicBlock *MBB,
|
||||
// optionally includes an additional position prior to MBB->begin(), indicated
|
||||
// by the includeStart flag. This is done so that we can iterate MIs in a MBB
|
||||
// in parallel with SlotIndexes, but there should be a better way to do this.
|
||||
IndexList::iterator ListB = startIdx.listEntry();
|
||||
IndexList::iterator ListI = endIdx.listEntry();
|
||||
IndexList::iterator ListB = startIdx.listEntry()->getIterator();
|
||||
IndexList::iterator ListI = endIdx.listEntry()->getIterator();
|
||||
MachineBasicBlock::iterator MBBI = End;
|
||||
bool pastStart = false;
|
||||
while (ListI != ListB || MBBI != Begin || (includeStart && !pastStart)) {
|
||||
|
Loading…
Reference in New Issue
Block a user