[ARM64,C++11] Tidy up branch relaxation a bit w/ c++11.

No functional change.

llvm-svn: 206344
This commit is contained in:
Jim Grosbach 2014-04-16 00:42:46 +00:00
parent 01fc5887ad
commit 36c6a50512
1 changed files with 25 additions and 32 deletions

View File

@ -81,10 +81,10 @@ class ARM64BranchRelaxation : public MachineFunctionPass {
bool relaxBranchInstructions();
void scanFunction();
MachineBasicBlock *splitBlockBeforeInstr(MachineInstr *MI);
void adjustBlockOffsets(MachineBasicBlock *BB);
void adjustBlockOffsets(MachineBasicBlock &MBB);
bool isBlockInRange(MachineInstr *MI, MachineBasicBlock *BB, unsigned Disp);
bool fixupConditionalBranch(MachineInstr *MI);
void computeBlockSize(MachineBasicBlock *MBB);
void computeBlockSize(const MachineBasicBlock &MBB);
unsigned getInstrOffset(MachineInstr *MI) const;
void dumpBBs();
void verify();
@ -106,11 +106,9 @@ char ARM64BranchRelaxation::ID = 0;
void ARM64BranchRelaxation::verify() {
#ifndef NDEBUG
unsigned PrevNum = MF->begin()->getNumber();
for (MachineFunction::iterator MBBI = MF->begin(), E = MF->end(); MBBI != E;
++MBBI) {
MachineBasicBlock *MBB = MBBI;
unsigned Align = MBB->getAlignment();
unsigned Num = MBB->getNumber();
for (MachineBasicBlock &MBB : *MF) {
unsigned Align = MBB.getAlignment();
unsigned Num = MBB.getNumber();
assert(BlockInfo[Num].Offset % (1u << Align) == 0);
assert(!Num || BlockInfo[PrevNum].postOffset() <= BlockInfo[Num].Offset);
PrevNum = Num;
@ -133,14 +131,12 @@ static bool BBHasFallthrough(MachineBasicBlock *MBB) {
// Get the next machine basic block in the function.
MachineFunction::iterator MBBI = MBB;
// Can't fall off end of function.
if (std::next(MBBI) == MBB->getParent()->end())
MachineBasicBlock *NextBB = std::next(MBBI);
if (NextBB == MBB->getParent()->end())
return false;
MachineBasicBlock *NextBB = std::next(MBBI);
for (MachineBasicBlock::succ_iterator I = MBB->succ_begin(),
E = MBB->succ_end();
I != E; ++I)
if (*I == NextBB)
for (MachineBasicBlock *S : MBB->successors())
if (S == NextBB)
return true;
return false;
@ -156,21 +152,20 @@ void ARM64BranchRelaxation::scanFunction() {
// has any inline assembly in it. If so, we have to be conservative about
// alignment assumptions, as we don't know for sure the size of any
// instructions in the inline assembly.
for (MachineFunction::iterator I = MF->begin(), E = MF->end(); I != E; ++I)
computeBlockSize(I);
for (MachineBasicBlock &MBB : *MF)
computeBlockSize(MBB);
// Compute block offsets and known bits.
adjustBlockOffsets(MF->begin());
adjustBlockOffsets(*MF->begin());
}
/// computeBlockSize - Compute the size for MBB.
/// This function updates BlockInfo directly.
void ARM64BranchRelaxation::computeBlockSize(MachineBasicBlock *MBB) {
void ARM64BranchRelaxation::computeBlockSize(const MachineBasicBlock &MBB) {
unsigned Size = 0;
for (MachineBasicBlock::iterator I = MBB->begin(), E = MBB->end(); I != E;
++I)
Size += TII->GetInstSizeInBytes(I);
BlockInfo[MBB->getNumber()].Size = Size;
for (const MachineInstr &MI : MBB)
Size += TII->GetInstSizeInBytes(&MI);
BlockInfo[MBB.getNumber()].Size = Size;
}
/// getInstrOffset - Return the current offset of the specified machine
@ -192,17 +187,15 @@ unsigned ARM64BranchRelaxation::getInstrOffset(MachineInstr *MI) const {
return Offset;
}
void ARM64BranchRelaxation::adjustBlockOffsets(MachineBasicBlock *Start) {
unsigned PrevNum = Start->getNumber();
MachineFunction::iterator MBBI = Start, E = MF->end();
for (++MBBI; MBBI != E; ++MBBI) {
MachineBasicBlock *MBB = MBBI;
unsigned Num = MBB->getNumber();
void ARM64BranchRelaxation::adjustBlockOffsets(MachineBasicBlock &Start) {
unsigned PrevNum = Start.getNumber();
for (auto &MBB : make_range(MachineFunction::iterator(Start), MF->end())) {
unsigned Num = MBB.getNumber();
if (!Num) // block zero is never changed from offset zero.
continue;
// Get the offset and known bits at the end of the layout predecessor.
// Include the alignment of the current block.
unsigned LogAlign = MBBI->getAlignment();
unsigned LogAlign = MBB.getAlignment();
BlockInfo[Num].Offset = BlockInfo[PrevNum].postOffset(LogAlign);
PrevNum = Num;
}
@ -242,14 +235,14 @@ ARM64BranchRelaxation::splitBlockBeforeInstr(MachineInstr *MI) {
// the new jump we added. (It should be possible to do this without
// recounting everything, but it's very confusing, and this is rarely
// executed.)
computeBlockSize(OrigBB);
computeBlockSize(*OrigBB);
// Figure out how large the NewMBB is. As the second half of the original
// block, it may contain a tablejump.
computeBlockSize(NewBB);
computeBlockSize(*NewBB);
// All BBOffsets following these blocks must be modified.
adjustBlockOffsets(OrigBB);
adjustBlockOffsets(*OrigBB);
++NumSplit;
@ -440,7 +433,7 @@ bool ARM64BranchRelaxation::fixupConditionalBranch(MachineInstr *MI) {
MI->eraseFromParent();
// Finally, keep the block offsets up to date.
adjustBlockOffsets(MBB);
adjustBlockOffsets(*MBB);
return true;
}