diff --git a/lib/Analysis/IPA/CallGraph.cpp b/lib/Analysis/IPA/CallGraph.cpp index 244c35ea46e..04b8c2d6bc8 100644 --- a/lib/Analysis/IPA/CallGraph.cpp +++ b/lib/Analysis/IPA/CallGraph.cpp @@ -16,6 +16,7 @@ #include "llvm/Method.h" #include "llvm/iOther.h" #include "llvm/iTerminators.h" +#include "llvm/Support/InstIterator.h"// FIXME: CallGraph should use method uses #include "Support/STLExtras.h" #include @@ -46,8 +47,7 @@ void cfg::CallGraph::addToCallGraph(Method *M) { if (!M->hasInternalLinkage()) Root->addCalledMethod(Node); - for (Method::inst_iterator I = M->inst_begin(), E = M->inst_end(); - I != E; ++I) { + for (inst_iterator I = inst_begin(M), E = inst_end(M); I != E; ++I) { // Dynamic calls will cause Null nodes to be created if (CallInst *CI = dyn_cast(*I)) Node->addCalledMethod(getNodeFor(CI->getCalledMethod())); @@ -138,8 +138,7 @@ bool IsLeafMethod(const Method* M, const cfg::CallGraph* CG) { return (cgn->begin() == cgn->end()); } - for (Method::const_inst_iterator I = M->inst_begin(), E = M->inst_end(); - I != E; ++I) + for (const_inst_iterator I = inst_begin(M), E = inst_end(M); I != E; ++I) if ((*I)->getOpcode() == Instruction::Call) return false; return true; diff --git a/lib/Analysis/IPA/FindUnsafePointerTypes.cpp b/lib/Analysis/IPA/FindUnsafePointerTypes.cpp index bc092920907..0179cbb74c8 100644 --- a/lib/Analysis/IPA/FindUnsafePointerTypes.cpp +++ b/lib/Analysis/IPA/FindUnsafePointerTypes.cpp @@ -22,6 +22,7 @@ #include "llvm/Instruction.h" #include "llvm/Method.h" #include "llvm/Module.h" +#include "llvm/Support/InstIterator.h" #include "Support/CommandLine.h" AnalysisID FindUnsafePointerTypes::ID(AnalysisID::create()); @@ -58,8 +59,7 @@ bool FindUnsafePointerTypes::run(Module *Mod) { for (Module::iterator MI = Mod->begin(), ME = Mod->end(); MI != ME; ++MI) { const Method *M = *MI; // We don't need/want write access - for (Method::const_inst_iterator I = M->inst_begin(), E = M->inst_end(); - I != E; ++I) { + for (const_inst_iterator I = inst_begin(M), E = inst_end(M); I != E; ++I) { const Instruction *Inst = *I; const Type *ITy = Inst->getType(); if (ITy->isPointerType() && !UnsafeTypes.count((PointerType*)ITy)) diff --git a/lib/Analysis/IPA/FindUsedTypes.cpp b/lib/Analysis/IPA/FindUsedTypes.cpp index b876e5e68d8..e02429ab977 100644 --- a/lib/Analysis/IPA/FindUsedTypes.cpp +++ b/lib/Analysis/IPA/FindUsedTypes.cpp @@ -11,6 +11,7 @@ #include "llvm/DerivedTypes.h" #include "llvm/Module.h" #include "llvm/Method.h" +#include "llvm/Support/InstIterator.h" AnalysisID FindUsedTypes::ID(AnalysisID::create()); AnalysisID FindUsedTypes::IncludeSymbolTableID(AnalysisID::create()); @@ -59,7 +60,7 @@ bool FindUsedTypes::run(Module *m) { // Loop over all of the instructions in the method, adding their return type // as well as the types of their operands. // - for (Method::const_inst_iterator II = M->inst_begin(), IE = M->inst_end(); + for (const_inst_iterator II = inst_begin(M), IE = inst_end(M); II != IE; ++II) { const Instruction *I = *II; const Type *Ty = I->getType(); diff --git a/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp b/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp index a1a2dba9fb3..b83359f94b8 100644 --- a/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp +++ b/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp @@ -9,6 +9,7 @@ #include "BBLiveVar.h" #include "llvm/CodeGen/MachineInstr.h" #include "llvm/BasicBlock.h" +#include "llvm/Support/CFG.h" #include "Support/PostOrderIterator.h" #include "Support/SetOperations.h" #include diff --git a/lib/Analysis/LoopInfo.cpp b/lib/Analysis/LoopInfo.cpp index 9b34095e4f2..876161d34fc 100644 --- a/lib/Analysis/LoopInfo.cpp +++ b/lib/Analysis/LoopInfo.cpp @@ -9,7 +9,7 @@ #include "llvm/Analysis/LoopInfo.h" #include "llvm/Analysis/Dominators.h" -#include "llvm/BasicBlock.h" +#include "llvm/Support/CFG.h" #include "Support/DepthFirstIterator.h" #include diff --git a/lib/Analysis/PostDominators.cpp b/lib/Analysis/PostDominators.cpp index aad6e1cb386..33e14e9fc58 100644 --- a/lib/Analysis/PostDominators.cpp +++ b/lib/Analysis/PostDominators.cpp @@ -7,6 +7,7 @@ #include "llvm/Analysis/Dominators.h" #include "llvm/Transforms/UnifyMethodExitNodes.h" #include "llvm/Method.h" +#include "llvm/Support/CFG.h" #include "Support/DepthFirstIterator.h" #include "Support/STLExtras.h" #include "Support/SetOperations.h" diff --git a/lib/Bytecode/Reader/ReaderInternals.h b/lib/Bytecode/Reader/ReaderInternals.h index 8a7297a8b3d..a5b3b7acfd6 100644 --- a/lib/Bytecode/Reader/ReaderInternals.h +++ b/lib/Bytecode/Reader/ReaderInternals.h @@ -10,6 +10,7 @@ #include "llvm/Bytecode/Primitives.h" #include "llvm/SymTabValue.h" #include "llvm/Method.h" +#include "llvm/BasicBlock.h" #include "llvm/Instruction.h" #include "llvm/DerivedTypes.h" #include diff --git a/lib/Bytecode/Writer/SlotCalculator.cpp b/lib/Bytecode/Writer/SlotCalculator.cpp index 4738f712a16..43a4591cb8a 100644 --- a/lib/Bytecode/Writer/SlotCalculator.cpp +++ b/lib/Bytecode/Writer/SlotCalculator.cpp @@ -171,7 +171,7 @@ void SlotCalculator::incorporateMethod(const Method *M) { SC_DEBUG("Inserting Instructions:\n"); // Add all of the instructions to the type planes... - for_each(M->inst_begin(), M->inst_end(), + for_each(inst_begin(M), inst_end(M), bind_obj(this, &SlotCalculator::insertValue)); if (M->hasSymbolTable() && !IgnoreNamedNodes) { diff --git a/lib/CodeGen/InstrSched/SchedPriorities.cpp b/lib/CodeGen/InstrSched/SchedPriorities.cpp index 1d4983130e7..ef9f9e45997 100644 --- a/lib/CodeGen/InstrSched/SchedPriorities.cpp +++ b/lib/CodeGen/InstrSched/SchedPriorities.cpp @@ -20,6 +20,7 @@ #include "SchedPriorities.h" #include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h" +#include "llvm/Support/CFG.h" #include "Support/PostOrderIterator.h" #include using std::cerr; diff --git a/lib/CodeGen/InstrSelection/InstrForest.cpp b/lib/CodeGen/InstrSelection/InstrForest.cpp index 29090e06cc0..b11d71e1f6b 100644 --- a/lib/CodeGen/InstrSelection/InstrForest.cpp +++ b/lib/CodeGen/InstrSelection/InstrForest.cpp @@ -189,15 +189,18 @@ LabelNode::dumpNode(int indent) const InstrForest::InstrForest(Method *M) { - for (Method::inst_iterator I = M->inst_begin(); I != M->inst_end(); ++I) - this->buildTreeForInstruction(*I); + for (Method::iterator MI = M->begin(), ME = M->end(); MI != ME; ++MI) { + BasicBlock *BB = *MI; + for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) + buildTreeForInstruction(*I); + } } InstrForest::~InstrForest() { for (std::hash_map::iterator I = begin(); I != end(); ++I) - delete (*I).second; + delete I->second; } void diff --git a/lib/CodeGen/MachineFunction.cpp b/lib/CodeGen/MachineFunction.cpp index 3ff3e8ceea2..4bb17f15fec 100644 --- a/lib/CodeGen/MachineFunction.cpp +++ b/lib/CodeGen/MachineFunction.cpp @@ -12,6 +12,7 @@ #include "llvm/Target/MachineFrameInfo.h" #include "llvm/Target/MachineCacheInfo.h" #include "llvm/Method.h" +#include "llvm/BasicBlock.h" #include "llvm/iOther.h" #include @@ -56,11 +57,11 @@ ComputeMaxOptionalArgsSize(const TargetMachine& target, const Method* method) unsigned int maxSize = 0; - for (Method::const_inst_iterator I=method->inst_begin(),E=method->inst_end(); - I != E; ++I) - if ((*I)->getOpcode() == Instruction::Call) - { - CallInst* callInst = cast(*I); + for (Method::const_iterator MI=method->begin(), ME=method->end(); + MI != ME; ++MI) { + const BasicBlock *BB = *MI; + for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I != E; ++I) + if (CallInst *callInst = dyn_cast(*I)) { unsigned int numOperands = callInst->getNumOperands() - 1; int numExtra = (int) numOperands - frameInfo.getNumFixedOutgoingArgs(); if (numExtra <= 0) @@ -84,7 +85,7 @@ ComputeMaxOptionalArgsSize(const TargetMachine& target, const Method* method) if (maxSize < sizeForThisCall) maxSize = sizeForThisCall; } - + } return maxSize; } diff --git a/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp b/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp index 7302baa2864..32951769e00 100644 --- a/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp +++ b/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp @@ -3,6 +3,7 @@ #include "llvm/CodeGen/MachineInstr.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Method.h" +#include "llvm/BasicBlock.h" #include "Support/SetOperations.h" #include using std::cerr; diff --git a/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp b/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp index 18d019e8f4c..c78b971e796 100644 --- a/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp +++ b/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp @@ -18,6 +18,7 @@ #include "llvm/Analysis/LoopInfo.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Target/MachineFrameInfo.h" +#include "llvm/BasicBlock.h" #include "llvm/Method.h" #include "llvm/Type.h" #include diff --git a/lib/ExecutionEngine/Interpreter/Execution.cpp b/lib/ExecutionEngine/Interpreter/Execution.cpp index 0fad82964d2..9f6317fd393 100644 --- a/lib/ExecutionEngine/Interpreter/Execution.cpp +++ b/lib/ExecutionEngine/Interpreter/Execution.cpp @@ -1034,10 +1034,12 @@ MethodInfo::MethodInfo(Method *M) : Annotation(MethodInfoAID) { // Iterate over all of the instructions... unsigned InstNum = 0; - for (Method::inst_iterator MI = M->inst_begin(), ME = M->inst_end(); - MI != ME; ++MI) { - Instruction *I = *MI; // For each instruction... - I->addAnnotation(new InstNumber(++InstNum, getValueSlot(I))); // Add Annote + for (Method::iterator MI = M->begin(), ME = M->end(); MI != ME; ++MI) { + BasicBlock *BB = *MI; + for (BasicBlock::iterator II = BB->begin(), IE = BB->end(); II != IE; ++II){ + Instruction *I = *II; // For each instruction... Add Annote + I->addAnnotation(new InstNumber(++InstNum, getValueSlot(I))); + } } } diff --git a/lib/ExecutionEngine/Interpreter/Interpreter.h b/lib/ExecutionEngine/Interpreter/Interpreter.h index ffe10015978..050b7d332d2 100644 --- a/lib/ExecutionEngine/Interpreter/Interpreter.h +++ b/lib/ExecutionEngine/Interpreter/Interpreter.h @@ -13,6 +13,7 @@ #include "llvm/Module.h" #include "llvm/Method.h" +#include "llvm/BasicBlock.h" #include "Support/DataTypes.h" #include "llvm/Assembly/CachedWriter.h" diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp index e1622529c26..f265bb05d17 100644 --- a/lib/Linker/LinkModules.cpp +++ b/lib/Linker/LinkModules.cpp @@ -12,6 +12,7 @@ #include "llvm/Transforms/Linker.h" #include "llvm/Module.h" #include "llvm/Method.h" +#include "llvm/BasicBlock.h" #include "llvm/GlobalVariable.h" #include "llvm/SymbolTable.h" #include "llvm/DerivedTypes.h" @@ -337,13 +338,16 @@ static bool LinkMethodBody(Method *Dest, const Method *Src, // in the Source method as operands. Loop through all of the operands of the // methods and patch them up to point to the local versions... // - for (Method::inst_iterator I = Dest->inst_begin(), E = Dest->inst_end(); - I != E; ++I) { - Instruction *Inst = *I; - - for (Instruction::op_iterator OI = Inst->op_begin(), OE = Inst->op_end(); - OI != OE; ++OI) - *OI = RemapOperand(*OI, LocalMap, &GlobalMap); + for (Method::iterator BI = Dest->begin(), BE = Dest->end(); + BI != BE; ++BI) { + BasicBlock *BB = *BI; + for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) { + Instruction *Inst = *I; + + for (Instruction::op_iterator OI = Inst->op_begin(), OE = Inst->op_end(); + OI != OE; ++OI) + *OI = RemapOperand(*OI, LocalMap, &GlobalMap); + } } return false; diff --git a/lib/Target/SparcV9/InstrSched/SchedPriorities.cpp b/lib/Target/SparcV9/InstrSched/SchedPriorities.cpp index 1d4983130e7..ef9f9e45997 100644 --- a/lib/Target/SparcV9/InstrSched/SchedPriorities.cpp +++ b/lib/Target/SparcV9/InstrSched/SchedPriorities.cpp @@ -20,6 +20,7 @@ #include "SchedPriorities.h" #include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h" +#include "llvm/Support/CFG.h" #include "Support/PostOrderIterator.h" #include using std::cerr; diff --git a/lib/Target/SparcV9/InstrSelection/InstrForest.cpp b/lib/Target/SparcV9/InstrSelection/InstrForest.cpp index 29090e06cc0..b11d71e1f6b 100644 --- a/lib/Target/SparcV9/InstrSelection/InstrForest.cpp +++ b/lib/Target/SparcV9/InstrSelection/InstrForest.cpp @@ -189,15 +189,18 @@ LabelNode::dumpNode(int indent) const InstrForest::InstrForest(Method *M) { - for (Method::inst_iterator I = M->inst_begin(); I != M->inst_end(); ++I) - this->buildTreeForInstruction(*I); + for (Method::iterator MI = M->begin(), ME = M->end(); MI != ME; ++MI) { + BasicBlock *BB = *MI; + for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) + buildTreeForInstruction(*I); + } } InstrForest::~InstrForest() { for (std::hash_map::iterator I = begin(); I != end(); ++I) - delete (*I).second; + delete I->second; } void diff --git a/lib/Target/SparcV9/LiveVar/FunctionLiveVarInfo.cpp b/lib/Target/SparcV9/LiveVar/FunctionLiveVarInfo.cpp index a1a2dba9fb3..b83359f94b8 100644 --- a/lib/Target/SparcV9/LiveVar/FunctionLiveVarInfo.cpp +++ b/lib/Target/SparcV9/LiveVar/FunctionLiveVarInfo.cpp @@ -9,6 +9,7 @@ #include "BBLiveVar.h" #include "llvm/CodeGen/MachineInstr.h" #include "llvm/BasicBlock.h" +#include "llvm/Support/CFG.h" #include "Support/PostOrderIterator.h" #include "Support/SetOperations.h" #include diff --git a/lib/Target/SparcV9/RegAlloc/LiveRangeInfo.cpp b/lib/Target/SparcV9/RegAlloc/LiveRangeInfo.cpp index 7302baa2864..32951769e00 100644 --- a/lib/Target/SparcV9/RegAlloc/LiveRangeInfo.cpp +++ b/lib/Target/SparcV9/RegAlloc/LiveRangeInfo.cpp @@ -3,6 +3,7 @@ #include "llvm/CodeGen/MachineInstr.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Method.h" +#include "llvm/BasicBlock.h" #include "Support/SetOperations.h" #include using std::cerr; diff --git a/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp b/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp index 18d019e8f4c..c78b971e796 100644 --- a/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp +++ b/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp @@ -18,6 +18,7 @@ #include "llvm/Analysis/LoopInfo.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Target/MachineFrameInfo.h" +#include "llvm/BasicBlock.h" #include "llvm/Method.h" #include "llvm/Type.h" #include diff --git a/lib/Target/SparcV9/SparcV9TargetMachine.cpp b/lib/Target/SparcV9/SparcV9TargetMachine.cpp index 14be9923154..b026ccd67a0 100644 --- a/lib/Target/SparcV9/SparcV9TargetMachine.cpp +++ b/lib/Target/SparcV9/SparcV9TargetMachine.cpp @@ -19,6 +19,7 @@ #include "llvm/CodeGen/RegisterAllocation.h" #include "llvm/CodeGen/MachineInstr.h" #include "llvm/Method.h" +#include "llvm/BasicBlock.h" #include "llvm/PassManager.h" #include using std::cerr; @@ -229,7 +230,11 @@ struct FreeMachineCodeForMethod : public MethodPass { } bool runOnMethod(Method *M) { - for_each(M->inst_begin(), M->inst_end(), freeMachineCode); + for (Method::iterator MI = M->begin(), ME = M->end(); MI != ME; ++MI) + for (BasicBlock::iterator I = (*MI)->begin(), E = (*MI)->end(); + I != E; ++I) + freeMachineCode(*I); + // Don't destruct MachineCodeForMethod - The global printer needs it //MachineCodeForMethod::destruct(M); return false; diff --git a/lib/Transforms/Scalar/ADCE.cpp b/lib/Transforms/Scalar/ADCE.cpp index 71c50674f4c..7f71cf18504 100644 --- a/lib/Transforms/Scalar/ADCE.cpp +++ b/lib/Transforms/Scalar/ADCE.cpp @@ -13,6 +13,7 @@ #include "llvm/Analysis/Writer.h" #include "llvm/iTerminators.h" #include "llvm/iPHINode.h" +#include "llvm/Support/CFG.h" #include "Support/STLExtras.h" #include "Support/DepthFirstIterator.h" #include @@ -156,10 +157,12 @@ bool ADCE::doADCE(cfg::DominanceFrontier &CDG) { #ifdef DEBUG_ADCE cerr << "Current Method: X = Live\n"; - for (Method::inst_iterator IL = M->inst_begin(); IL != M->inst_end(); ++IL) { - if (LiveSet.count(*IL)) cerr << "X "; - cerr << *IL; - } + for (Method::iterator I = M->begin(), E = M->end(); I != E; ++I) + for (BasicBlock::iterator BI = (*I)->begin(), BE = (*I)->end(); + BI != BE; ++BI) { + if (LiveSet.count(*BI)) cerr << "X "; + cerr << *BI; + } #endif // After the worklist is processed, recursively walk the CFG in depth first diff --git a/lib/Transforms/Scalar/IndVarSimplify.cpp b/lib/Transforms/Scalar/IndVarSimplify.cpp index d06c19787fe..59442ea2773 100644 --- a/lib/Transforms/Scalar/IndVarSimplify.cpp +++ b/lib/Transforms/Scalar/IndVarSimplify.cpp @@ -11,6 +11,7 @@ #include "llvm/iPHINode.h" #include "llvm/iOther.h" #include "llvm/Type.h" +#include "llvm/BasicBlock.h" #include "llvm/ConstantVals.h" #include "Support/STLExtras.h" diff --git a/lib/Transforms/Scalar/InductionVars.cpp b/lib/Transforms/Scalar/InductionVars.cpp index 48982f4773d..bc130f0faf5 100644 --- a/lib/Transforms/Scalar/InductionVars.cpp +++ b/lib/Transforms/Scalar/InductionVars.cpp @@ -26,6 +26,7 @@ #include "llvm/SymbolTable.h" #include "llvm/iPHINode.h" #include "llvm/Method.h" +#include "llvm/BasicBlock.h" #include "Support/STLExtras.h" #include #include diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index 25590661b77..962ca97dec5 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -18,6 +18,7 @@ #include "llvm/Transforms/Scalar/ConstantHandling.h" #include "llvm/Method.h" #include "llvm/iMemory.h" +#include "llvm/Support/InstIterator.h" #include "../TransformInternals.h" static Instruction *CombineBinOp(BinaryOperator *I) { @@ -126,7 +127,7 @@ bool InstructionCombining::CombineInstruction(Instruction *I) { bool InstructionCombining::doit(Method *M) { // Start the worklist out with all of the instructions in the method in it. - std::vector WorkList(M->inst_begin(), M->inst_end()); + std::vector WorkList(inst_begin(M), inst_end(M)); while (!WorkList.empty()) { Instruction *I = WorkList.back(); // Get an instruction from the worklist diff --git a/lib/Transforms/Scalar/SCCP.cpp b/lib/Transforms/Scalar/SCCP.cpp index d6b7c40f34b..ada670deb81 100644 --- a/lib/Transforms/Scalar/SCCP.cpp +++ b/lib/Transforms/Scalar/SCCP.cpp @@ -244,39 +244,36 @@ bool SCCP::doSCCP() { // constants if we have found them to be of constant values. // bool MadeChanges = false; - for (Method::inst_iterator II = M->inst_begin(); II != M->inst_end(); ) { - Instruction *Inst = *II; - InstVal &IV = ValueState[Inst]; - if (IV.isConstant()) { - Constant *Const = IV.getConstant(); - // cerr << "Constant: " << Inst << " is: " << Const; + for (Method::iterator MI = M->begin(), ME = M->end(); MI != ME; ++MI) { + BasicBlock *BB = *MI; + for (BasicBlock::iterator BI = BB->begin(); BI != BB->end();) { + Instruction *Inst = *BI; + InstVal &IV = ValueState[Inst]; + if (IV.isConstant()) { + Constant *Const = IV.getConstant(); + // cerr << "Constant: " << Inst << " is: " << Const; - // Replaces all of the uses of a variable with uses of the constant. - Inst->replaceAllUsesWith(Const); + // Replaces all of the uses of a variable with uses of the constant. + Inst->replaceAllUsesWith(Const); - // Remove the operator from the list of definitions... - Inst->getParent()->getInstList().remove(II.getInstructionIterator()); + // Remove the operator from the list of definitions... + BB->getInstList().remove(BI); - // The new constant inherits the old name of the operator... - if (Inst->hasName() && !Const->hasName()) - Const->setName(Inst->getName(), M->getSymbolTableSure()); + // The new constant inherits the old name of the operator... + if (Inst->hasName() && !Const->hasName()) + Const->setName(Inst->getName(), M->getSymbolTableSure()); - // Delete the operator now... - delete Inst; + // Delete the operator now... + delete Inst; - // Incrementing the iterator in an unchecked manner could mess up the - // internals of 'II'. To make sure everything is happy, tell it we might - // have broken it. - II.resyncInstructionIterator(); + // Hey, we just changed something! + MadeChanges = true; + } else if (TerminatorInst *TI = dyn_cast(Inst)) { + MadeChanges |= ConstantFoldTerminator(TI); + } - // Hey, we just changed something! - MadeChanges = true; - continue; // Skip the ++II at the end of the loop here... - } else if (Inst->isTerminator()) { - MadeChanges |= ConstantFoldTerminator(cast(Inst)); + ++BI; } - - ++II; } // Merge identical constants last: this is important because we may have just diff --git a/lib/Transforms/Utils/Linker.cpp b/lib/Transforms/Utils/Linker.cpp index e1622529c26..f265bb05d17 100644 --- a/lib/Transforms/Utils/Linker.cpp +++ b/lib/Transforms/Utils/Linker.cpp @@ -12,6 +12,7 @@ #include "llvm/Transforms/Linker.h" #include "llvm/Module.h" #include "llvm/Method.h" +#include "llvm/BasicBlock.h" #include "llvm/GlobalVariable.h" #include "llvm/SymbolTable.h" #include "llvm/DerivedTypes.h" @@ -337,13 +338,16 @@ static bool LinkMethodBody(Method *Dest, const Method *Src, // in the Source method as operands. Loop through all of the operands of the // methods and patch them up to point to the local versions... // - for (Method::inst_iterator I = Dest->inst_begin(), E = Dest->inst_end(); - I != E; ++I) { - Instruction *Inst = *I; - - for (Instruction::op_iterator OI = Inst->op_begin(), OE = Inst->op_end(); - OI != OE; ++OI) - *OI = RemapOperand(*OI, LocalMap, &GlobalMap); + for (Method::iterator BI = Dest->begin(), BE = Dest->end(); + BI != BE; ++BI) { + BasicBlock *BB = *BI; + for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) { + Instruction *Inst = *I; + + for (Instruction::op_iterator OI = Inst->op_begin(), OE = Inst->op_end(); + OI != OE; ++OI) + *OI = RemapOperand(*OI, LocalMap, &GlobalMap); + } } return false; diff --git a/lib/VMCore/Dominators.cpp b/lib/VMCore/Dominators.cpp index aad6e1cb386..33e14e9fc58 100644 --- a/lib/VMCore/Dominators.cpp +++ b/lib/VMCore/Dominators.cpp @@ -7,6 +7,7 @@ #include "llvm/Analysis/Dominators.h" #include "llvm/Transforms/UnifyMethodExitNodes.h" #include "llvm/Method.h" +#include "llvm/Support/CFG.h" #include "Support/DepthFirstIterator.h" #include "Support/STLExtras.h" #include "Support/SetOperations.h" diff --git a/lib/VMCore/Instruction.cpp b/lib/VMCore/Instruction.cpp index 50fdd442278..e729a65a386 100644 --- a/lib/VMCore/Instruction.cpp +++ b/lib/VMCore/Instruction.cpp @@ -5,6 +5,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Instruction.h" +#include "llvm/BasicBlock.h" #include "llvm/Method.h" #include "llvm/SymbolTable.h" diff --git a/lib/VMCore/Linker.cpp b/lib/VMCore/Linker.cpp index e1622529c26..f265bb05d17 100644 --- a/lib/VMCore/Linker.cpp +++ b/lib/VMCore/Linker.cpp @@ -12,6 +12,7 @@ #include "llvm/Transforms/Linker.h" #include "llvm/Module.h" #include "llvm/Method.h" +#include "llvm/BasicBlock.h" #include "llvm/GlobalVariable.h" #include "llvm/SymbolTable.h" #include "llvm/DerivedTypes.h" @@ -337,13 +338,16 @@ static bool LinkMethodBody(Method *Dest, const Method *Src, // in the Source method as operands. Loop through all of the operands of the // methods and patch them up to point to the local versions... // - for (Method::inst_iterator I = Dest->inst_begin(), E = Dest->inst_end(); - I != E; ++I) { - Instruction *Inst = *I; - - for (Instruction::op_iterator OI = Inst->op_begin(), OE = Inst->op_end(); - OI != OE; ++OI) - *OI = RemapOperand(*OI, LocalMap, &GlobalMap); + for (Method::iterator BI = Dest->begin(), BE = Dest->end(); + BI != BE; ++BI) { + BasicBlock *BB = *BI; + for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) { + Instruction *Inst = *I; + + for (Instruction::op_iterator OI = Inst->op_begin(), OE = Inst->op_end(); + OI != OE; ++OI) + *OI = RemapOperand(*OI, LocalMap, &GlobalMap); + } } return false; diff --git a/lib/VMCore/Pass.cpp b/lib/VMCore/Pass.cpp index c18ff0adcc5..b6e222d98aa 100644 --- a/lib/VMCore/Pass.cpp +++ b/lib/VMCore/Pass.cpp @@ -9,6 +9,7 @@ #include "llvm/PassManager.h" #include "llvm/Module.h" #include "llvm/Method.h" +#include "llvm/BasicBlock.h" #include "Support/STLExtras.h" #include diff --git a/lib/VMCore/SlotCalculator.cpp b/lib/VMCore/SlotCalculator.cpp index 4738f712a16..43a4591cb8a 100644 --- a/lib/VMCore/SlotCalculator.cpp +++ b/lib/VMCore/SlotCalculator.cpp @@ -171,7 +171,7 @@ void SlotCalculator::incorporateMethod(const Method *M) { SC_DEBUG("Inserting Instructions:\n"); // Add all of the instructions to the type planes... - for_each(M->inst_begin(), M->inst_end(), + for_each(inst_begin(M), inst_end(M), bind_obj(this, &SlotCalculator::insertValue)); if (M->hasSymbolTable() && !IgnoreNamedNodes) { diff --git a/tools/analyze/analyze.cpp b/tools/analyze/analyze.cpp index 112bfcc04b4..5f3e52ef006 100644 --- a/tools/analyze/analyze.cpp +++ b/tools/analyze/analyze.cpp @@ -28,6 +28,7 @@ #include "llvm/Analysis/LoopInfo.h" #include "llvm/Analysis/FindUnsafePointerTypes.h" #include "llvm/Analysis/FindUsedTypes.h" +#include "llvm/Support/InstIterator.h" #include "Support/CommandLine.h" #include #include @@ -119,8 +120,7 @@ struct InstForest : public MethodPass { struct IndVars : public MethodPass { void doit(Method *M) { cfg::LoopInfo &LI = getAnalysis(); - for (Method::inst_iterator I = M->inst_begin(), E = M->inst_end(); - I != E; ++I) + for (inst_iterator I = inst_begin(M), E = inst_end(M); I != E; ++I) if (PHINode *PN = dyn_cast(*I)) { InductionVariable IV(PN, &LI); if (IV.InductionType != InductionVariable::Unknown) @@ -137,8 +137,7 @@ struct IndVars : public MethodPass { struct Exprs : public MethodPass { static void doit(Method *M) { cout << "Classified expressions for: " << M->getName() << "\n"; - Method::inst_iterator I = M->inst_begin(), E = M->inst_end(); - for (; I != E; ++I) { + for (inst_iterator I = inst_begin(M), E = inst_end(M); I != E; ++I) { cout << *I; if ((*I)->getType() == Type::VoidTy) continue; diff --git a/tools/dis/dis.cpp b/tools/dis/dis.cpp index 11e67c4fe8b..3495465d3f4 100644 --- a/tools/dis/dis.cpp +++ b/tools/dis/dis.cpp @@ -20,6 +20,7 @@ #include "llvm/Assembly/Writer.h" #include "llvm/Bytecode/Reader.h" #include "llvm/Method.h" +#include "llvm/Support/CFG.h" #include "Support/DepthFirstIterator.h" #include "Support/PostOrderIterator.h" #include "Support/CommandLine.h" diff --git a/tools/llvm-dis/dis.cpp b/tools/llvm-dis/dis.cpp index 11e67c4fe8b..3495465d3f4 100644 --- a/tools/llvm-dis/dis.cpp +++ b/tools/llvm-dis/dis.cpp @@ -20,6 +20,7 @@ #include "llvm/Assembly/Writer.h" #include "llvm/Bytecode/Reader.h" #include "llvm/Method.h" +#include "llvm/Support/CFG.h" #include "Support/DepthFirstIterator.h" #include "Support/PostOrderIterator.h" #include "Support/CommandLine.h" diff --git a/tools/llvm-dis/llvm-dis.cpp b/tools/llvm-dis/llvm-dis.cpp index 11e67c4fe8b..3495465d3f4 100644 --- a/tools/llvm-dis/llvm-dis.cpp +++ b/tools/llvm-dis/llvm-dis.cpp @@ -20,6 +20,7 @@ #include "llvm/Assembly/Writer.h" #include "llvm/Bytecode/Reader.h" #include "llvm/Method.h" +#include "llvm/Support/CFG.h" #include "Support/DepthFirstIterator.h" #include "Support/PostOrderIterator.h" #include "Support/CommandLine.h"