diff --git a/llvm/lib/Transforms/Scalar/Reg2Mem.cpp b/llvm/lib/Transforms/Scalar/Reg2Mem.cpp --- a/llvm/lib/Transforms/Scalar/Reg2Mem.cpp +++ b/llvm/lib/Transforms/Scalar/Reg2Mem.cpp @@ -19,6 +19,7 @@ #include "llvm/IR/BasicBlock.h" #include "llvm/IR/CFG.h" #include "llvm/IR/Function.h" +#include "llvm/IR/InstIterator.h" #include "llvm/IR/Instructions.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" @@ -47,9 +48,9 @@ AU.addPreservedID(BreakCriticalEdgesID); } - bool valueEscapes(const Instruction *Inst) const { - const BasicBlock *BB = Inst->getParent(); - for (const User *U : Inst->users()) { + bool valueEscapes(const Instruction &Inst) const { + const BasicBlock *BB = Inst.getParent(); + for (const User *U : Inst.users()) { const Instruction *UI = cast(U); if (UI->getParent() != BB || isa(UI)) return true; @@ -90,33 +91,26 @@ // Find the escaped instructions. But don't create stack slots for // allocas in entry block. std::list WorkList; - for (BasicBlock &ibb : F) - for (BasicBlock::iterator iib = ibb.begin(), iie = ibb.end(); iib != iie; - ++iib) { - if (!(isa(iib) && iib->getParent() == BBEntry) && - valueEscapes(&*iib)) { - WorkList.push_front(&*iib); - } - } + for (Instruction &I : instructions(F)) + if (!(isa(I) && I.getParent() == BBEntry) && valueEscapes(I)) + WorkList.push_front(&I); // Demote escaped instructions NumRegsDemoted += WorkList.size(); - for (Instruction *ilb : WorkList) - DemoteRegToStack(*ilb, false, AllocaInsertionPoint); + for (Instruction *I : WorkList) + DemoteRegToStack(*I, false, AllocaInsertionPoint); WorkList.clear(); // Find all phi's - for (BasicBlock &ibb : F) - for (BasicBlock::iterator iib = ibb.begin(), iie = ibb.end(); iib != iie; - ++iib) - if (isa(iib)) - WorkList.push_front(&*iib); + for (BasicBlock &BB : F) + for (auto &Phi : BB.phis()) + WorkList.push_front(&Phi); // Demote phi nodes NumPhisDemoted += WorkList.size(); - for (Instruction *ilb : WorkList) - DemotePHIToStack(cast(ilb), AllocaInsertionPoint); + for (Instruction *I : WorkList) + DemotePHIToStack(cast(I), AllocaInsertionPoint); return true; }