bool BranchFolder::HoistCommonCode(MachineFunction &MF) {
bool MadeChange = false;
- for (MachineFunction::iterator I = MF.begin(), E = MF.end(); I != E; ) {
- MachineBasicBlock *MBB = &*I++;
- MadeChange |= HoistCommonCodeInSuccs(MBB);
- }
+ for (MachineBasicBlock &MBB : llvm::make_early_inc_range(MF))
+ MadeChange |= HoistCommonCodeInSuccs(&MBB);
return MadeChange;
}
while (MadeChange) {
MadeChange = false;
DT.reset();
- for (Function::iterator I = F.begin(); I != F.end(); ) {
- BasicBlock *BB = &*I++;
+ for (BasicBlock &BB : llvm::make_early_inc_range(F)) {
bool ModifiedDTOnIteration = false;
- MadeChange |= optimizeBlock(*BB, ModifiedDTOnIteration);
+ MadeChange |= optimizeBlock(BB, ModifiedDTOnIteration);
// Restart BB iteration if the dominator tree of the Function was changed
if (ModifiedDTOnIteration)
DominatorTree DT(F);
for (BasicBlock &BB : F) {
- for (BasicBlock::iterator BI = BB.begin(), BE = BB.end(); BI != BE;) {
- Instruction *Insn = &*BI++;
- DbgValueInst *DVI = dyn_cast<DbgValueInst>(Insn);
+ for (Instruction &Insn : llvm::make_early_inc_range(BB)) {
+ DbgValueInst *DVI = dyn_cast<DbgValueInst>(&Insn);
if (!DVI)
continue;
// Check if all the users of MI are local.
// We are going to invalidation the list of use operands, so we
// can't use range iterator.
- for (auto MOIt = MRI->use_begin(Reg), MOItEnd = MRI->use_end();
- MOIt != MOItEnd;) {
- MachineOperand &MOUse = *MOIt++;
+ for (MachineOperand &MOUse :
+ llvm::make_early_inc_range(MRI->use_operands(Reg))) {
// Check if the use is already local.
MachineBasicBlock *InsertMBB;
LLVM_DEBUG(MachineInstr &MIUse = *MOUse.getParent();
!TM->Options.EnableGlobalISel);
AllocaInst *AI = nullptr; // Place on stack that stores the stack guard.
- for (Function::iterator I = F->begin(), E = F->end(); I != E;) {
- BasicBlock *BB = &*I++;
- ReturnInst *RI = dyn_cast<ReturnInst>(BB->getTerminator());
+ for (BasicBlock &BB : llvm::make_early_inc_range(*F)) {
+ ReturnInst *RI = dyn_cast<ReturnInst>(BB.getTerminator());
if (!RI)
continue;
// Split the basic block before the return instruction.
BasicBlock *NewBB =
- BB->splitBasicBlock(CheckLoc->getIterator(), "SP_return");
+ BB.splitBasicBlock(CheckLoc->getIterator(), "SP_return");
// Update the dominator tree if we need to.
- if (DT && DT->isReachableFromEntry(BB)) {
- DT->addNewBlock(NewBB, BB);
- DT->addNewBlock(FailBB, BB);
+ if (DT && DT->isReachableFromEntry(&BB)) {
+ DT->addNewBlock(NewBB, &BB);
+ DT->addNewBlock(FailBB, &BB);
}
// Remove default branch instruction to the new BB.
- BB->getTerminator()->eraseFromParent();
+ BB.getTerminator()->eraseFromParent();
// Move the newly created basic block to the point right after the old
// basic block so that it's in the "fall through" position.
- NewBB->moveAfter(BB);
+ NewBB->moveAfter(&BB);
// Generate the stack protector instructions in the old basic block.
- IRBuilder<> B(BB);
+ IRBuilder<> B(&BB);
Value *Guard = getStackGuard(TLI, M, B);
LoadInst *LI2 = B.CreateLoad(B.getInt8PtrTy(), AI, true);
Value *Cmp = B.CreateICmpEQ(Guard, LI2);