forked from OSchip/llvm-project
CodeGen: Remove implicit iterator conversions from MBB.cpp
Remove implicit ilist iterator conversions from MachineBasicBlock.cpp. I've also added an overload of `splice()` that takes a pointer, since it's a natural API. This is similar to the overloads I added for `remove()` and `erase()` in r249867. llvm-svn: 249883
This commit is contained in:
parent
d888d10cf4
commit
6ac07fd228
|
@ -634,6 +634,12 @@ public:
|
|||
void splice(iterator where, iplist &L2, iterator first, iterator last) {
|
||||
if (first != last) transfer(where, L2, first, last);
|
||||
}
|
||||
void splice(iterator where, iplist &L2, NodeTy &N) {
|
||||
splice(where, L2, iterator(N));
|
||||
}
|
||||
void splice(iterator where, iplist &L2, NodeTy *N) {
|
||||
splice(where, L2, iterator(N));
|
||||
}
|
||||
|
||||
template <class Compare>
|
||||
void merge(iplist &Right, Compare comp) {
|
||||
|
|
|
@ -363,6 +363,9 @@ public:
|
|||
void splice(iterator InsertPt, iterator MBBI) {
|
||||
BasicBlocks.splice(InsertPt, BasicBlocks, MBBI);
|
||||
}
|
||||
void splice(iterator InsertPt, MachineBasicBlock *MBB) {
|
||||
BasicBlocks.splice(InsertPt, BasicBlocks, MBB);
|
||||
}
|
||||
void splice(iterator InsertPt, iterator MBBI, iterator MBBE) {
|
||||
BasicBlocks.splice(InsertPt, BasicBlocks, MBBI, MBBE);
|
||||
}
|
||||
|
|
|
@ -505,14 +505,14 @@ MachineBasicBlock *MachineBlockPlacement::getFirstUnplacedBlock(
|
|||
const BlockFilterSet *BlockFilter) {
|
||||
for (MachineFunction::iterator I = PrevUnplacedBlockIt, E = F.end(); I != E;
|
||||
++I) {
|
||||
if (BlockFilter && !BlockFilter->count(I))
|
||||
if (BlockFilter && !BlockFilter->count(&*I))
|
||||
continue;
|
||||
if (BlockToChain[I] != &PlacedChain) {
|
||||
if (BlockToChain[&*I] != &PlacedChain) {
|
||||
PrevUnplacedBlockIt = I;
|
||||
// Now select the head of the chain to which the unplaced block belongs
|
||||
// as the block to place. This will force the entire chain to be placed,
|
||||
// and satisfies the requirements of merging chains.
|
||||
return *BlockToChain[I]->begin();
|
||||
return *BlockToChain[&*I]->begin();
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
|
@ -889,7 +889,7 @@ void MachineBlockPlacement::buildCFGChains(MachineFunction &F) {
|
|||
// the assumptions of the remaining algorithm.
|
||||
SmallVector<MachineOperand, 4> Cond; // For AnalyzeBranch.
|
||||
for (MachineFunction::iterator FI = F.begin(), FE = F.end(); FI != FE; ++FI) {
|
||||
MachineBasicBlock *BB = FI;
|
||||
MachineBasicBlock *BB = &*FI;
|
||||
BlockChain *Chain =
|
||||
new (ChainAllocator.Allocate()) BlockChain(BlockToChain, BB);
|
||||
// Also, merge any blocks which we cannot reason about and must preserve
|
||||
|
@ -900,8 +900,8 @@ void MachineBlockPlacement::buildCFGChains(MachineFunction &F) {
|
|||
if (!TII->AnalyzeBranch(*BB, TBB, FBB, Cond) || !FI->canFallThrough())
|
||||
break;
|
||||
|
||||
MachineFunction::iterator NextFI(std::next(FI));
|
||||
MachineBasicBlock *NextBB = NextFI;
|
||||
MachineFunction::iterator NextFI = std::next(FI);
|
||||
MachineBasicBlock *NextBB = &*NextFI;
|
||||
// Ensure that the layout successor is a viable block, as we know that
|
||||
// fallthrough is a possibility.
|
||||
assert(NextFI != FE && "Can't fallthrough past the last block.");
|
||||
|
@ -1004,7 +1004,7 @@ void MachineBlockPlacement::buildCFGChains(MachineFunction &F) {
|
|||
// Update the terminator of the previous block.
|
||||
if (ChainBB == *FunctionChain.begin())
|
||||
continue;
|
||||
MachineBasicBlock *PrevBB = std::prev(MachineFunction::iterator(ChainBB));
|
||||
MachineBasicBlock *PrevBB = &*std::prev(MachineFunction::iterator(ChainBB));
|
||||
|
||||
// FIXME: It would be awesome of updateTerminator would just return rather
|
||||
// than assert when the branch cannot be analyzed in order to remove this
|
||||
|
@ -1071,7 +1071,7 @@ void MachineBlockPlacement::buildCFGChains(MachineFunction &F) {
|
|||
return; // Empty chain.
|
||||
|
||||
const BranchProbability ColdProb(1, 5); // 20%
|
||||
BlockFrequency EntryFreq = MBFI->getBlockFreq(F.begin());
|
||||
BlockFrequency EntryFreq = MBFI->getBlockFreq(&F.front());
|
||||
BlockFrequency WeightedEntryFreq = EntryFreq * ColdProb;
|
||||
for (MachineBasicBlock *ChainBB : FunctionChain) {
|
||||
if (ChainBB == *FunctionChain.begin())
|
||||
|
|
Loading…
Reference in New Issue