summaryrefslogtreecommitdiff
path: root/lib/Analysis
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-06-25 16:13:24 +0000
committerChris Lattner <sabre@nondot.org>2002-06-25 16:13:24 +0000
commit7e70829632f82de15db187845666aaca6e04b792 (patch)
tree48dd2d804e7ebec9a3cbd8bf229cb2a2aa20dce5 /lib/Analysis
parent0b12b5f50ec77a8bd01b92d287c52d748619bb4b (diff)
downloadllvm-7e70829632f82de15db187845666aaca6e04b792.tar.gz
llvm-7e70829632f82de15db187845666aaca6e04b792.tar.bz2
llvm-7e70829632f82de15db187845666aaca6e04b792.tar.xz
MEGAPATCH checkin.
For details, See: docs/2002-06-25-MegaPatchInfo.txt git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2779 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis')
-rw-r--r--lib/Analysis/IPA/CallGraph.cpp17
-rw-r--r--lib/Analysis/IPA/FindUnsafePointerTypes.cpp20
-rw-r--r--lib/Analysis/IPA/FindUsedTypes.cpp22
-rw-r--r--lib/Analysis/InductionVariable.cpp8
-rw-r--r--lib/Analysis/IntervalPartition.cpp10
-rw-r--r--lib/Analysis/LoopInfo.cpp2
-rw-r--r--lib/Analysis/PostDominators.cpp18
7 files changed, 45 insertions, 52 deletions
diff --git a/lib/Analysis/IPA/CallGraph.cpp b/lib/Analysis/IPA/CallGraph.cpp
index c84719fd6a..1c61ff3d8b 100644
--- a/lib/Analysis/IPA/CallGraph.cpp
+++ b/lib/Analysis/IPA/CallGraph.cpp
@@ -95,31 +95,30 @@ void CallGraph::addToCallGraph(Function *M) {
}
// Look for an indirect method call...
- for (Function::iterator BBI = M->begin(), BBE = M->end(); BBI != BBE; ++BBI) {
- BasicBlock *BB = *BBI;
+ for (Function::iterator BB = M->begin(), BBE = M->end(); BB != BBE; ++BB)
for (BasicBlock::iterator II = BB->begin(), IE = BB->end(); II != IE; ++II){
- Instruction *I = *II;
+ Instruction &I = *II;
- if (CallInst *CI = dyn_cast<CallInst>(I)) {
+ if (CallInst *CI = dyn_cast<CallInst>(&I)) {
if (CI->getCalledFunction() == 0)
Node->addCalledMethod(ExternalNode);
- } else if (InvokeInst *II = dyn_cast<InvokeInst>(I)) {
+ } else if (InvokeInst *II = dyn_cast<InvokeInst>(&I)) {
if (II->getCalledFunction() == 0)
Node->addCalledMethod(ExternalNode);
}
}
- }
}
-bool CallGraph::run(Module *TheModule) {
+bool CallGraph::run(Module &M) {
destroy();
- Mod = TheModule;
+ Mod = &M;
ExternalNode = getNodeFor(0);
Root = 0;
// Add every method to the call graph...
- for_each(Mod->begin(), Mod->end(), bind_obj(this,&CallGraph::addToCallGraph));
+ for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
+ addToCallGraph(I);
// If we didn't find a main method, use the external call graph node
if (Root == 0) Root = ExternalNode;
diff --git a/lib/Analysis/IPA/FindUnsafePointerTypes.cpp b/lib/Analysis/IPA/FindUnsafePointerTypes.cpp
index 1723a8edac..8cad60d178 100644
--- a/lib/Analysis/IPA/FindUnsafePointerTypes.cpp
+++ b/lib/Analysis/IPA/FindUnsafePointerTypes.cpp
@@ -19,7 +19,6 @@
#include "llvm/Analysis/FindUnsafePointerTypes.h"
#include "llvm/Assembly/CachedWriter.h"
#include "llvm/Type.h"
-#include "llvm/Instruction.h"
#include "llvm/Module.h"
#include "llvm/Support/InstIterator.h"
#include "Support/CommandLine.h"
@@ -50,21 +49,20 @@ static inline bool isSafeInstruction(const Instruction *I) {
}
-bool FindUnsafePointerTypes::run(Module *Mod) {
- for (Module::iterator MI = Mod->begin(), ME = Mod->end();
- MI != ME; ++MI) {
- const Function *M = *MI; // We don't need/want write access
- for (const_inst_iterator I = inst_begin(M), E = inst_end(M); I != E; ++I) {
- const Instruction *Inst = *I;
- const Type *ITy = Inst->getType();
+bool FindUnsafePointerTypes::run(Module &Mod) {
+ for (Module::iterator FI = Mod.begin(), E = Mod.end();
+ FI != E; ++FI) {
+ const Function *F = FI; // We don't need/want write access
+ for (const_inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I) {
+ const Type *ITy = I->getType();
if (isa<PointerType>(ITy) && !UnsafeTypes.count((PointerType*)ITy))
- if (!isSafeInstruction(Inst)) {
+ if (!isSafeInstruction(*I)) {
UnsafeTypes.insert((PointerType*)ITy);
if (PrintFailures) {
- CachedWriter CW(M->getParent(), std::cerr);
+ CachedWriter CW(F->getParent(), std::cerr);
CW << "FindUnsafePointerTypes: Type '" << ITy
- << "' marked unsafe in '" << M->getName() << "' by:\n" << Inst;
+ << "' marked unsafe in '" << F->getName() << "' by:\n" << **I;
}
}
}
diff --git a/lib/Analysis/IPA/FindUsedTypes.cpp b/lib/Analysis/IPA/FindUsedTypes.cpp
index b4897a265a..8cfe1085a3 100644
--- a/lib/Analysis/IPA/FindUsedTypes.cpp
+++ b/lib/Analysis/IPA/FindUsedTypes.cpp
@@ -7,10 +7,8 @@
#include "llvm/Analysis/FindUsedTypes.h"
#include "llvm/Assembly/CachedWriter.h"
#include "llvm/SymbolTable.h"
-#include "llvm/GlobalVariable.h"
#include "llvm/DerivedTypes.h"
#include "llvm/Module.h"
-#include "llvm/Instruction.h"
#include "llvm/Support/InstIterator.h"
AnalysisID FindUsedTypes::ID(AnalysisID::create<FindUsedTypes>());
@@ -42,25 +40,25 @@ void FindUsedTypes::IncorporateSymbolTable(const SymbolTable *ST) {
// run - This incorporates all types used by the specified module
//
-bool FindUsedTypes::run(Module *m) {
+bool FindUsedTypes::run(Module &m) {
UsedTypes.clear(); // reset if run multiple times...
- if (IncludeSymbolTables && m->hasSymbolTable())
- IncorporateSymbolTable(m->getSymbolTable()); // Add symtab first...
+ if (IncludeSymbolTables && m.hasSymbolTable())
+ IncorporateSymbolTable(m.getSymbolTable()); // Add symtab first...
// Loop over global variables, incorporating their types
- for (Module::const_giterator I = m->gbegin(), E = m->gend(); I != E; ++I)
- IncorporateType((*I)->getType());
+ for (Module::const_giterator I = m.gbegin(), E = m.gend(); I != E; ++I)
+ IncorporateType(I->getType());
- for (Module::iterator MI = m->begin(), ME = m->end(); MI != ME; ++MI) {
- const Function *M = *MI;
- if (IncludeSymbolTables && M->hasSymbolTable())
- IncorporateSymbolTable(M->getSymbolTable()); // Add symtab first...
+ for (Module::iterator MI = m.begin(), ME = m.end(); MI != ME; ++MI) {
+ const Function &F = *MI;
+ if (IncludeSymbolTables && F.hasSymbolTable())
+ IncorporateSymbolTable(F.getSymbolTable()); // Add symtab first...
// Loop over all of the instructions in the function, adding their return
// type as well as the types of their operands.
//
- for (const_inst_iterator II = inst_begin(M), IE = inst_end(M);
+ for (const_inst_iterator II = inst_begin(F), IE = inst_end(F);
II != IE; ++II) {
const Instruction *I = *II;
const Type *Ty = I->getType();
diff --git a/lib/Analysis/InductionVariable.cpp b/lib/Analysis/InductionVariable.cpp
index b3da95f090..8637a1ab7e 100644
--- a/lib/Analysis/InductionVariable.cpp
+++ b/lib/Analysis/InductionVariable.cpp
@@ -31,8 +31,8 @@ static bool isLoopInvariant(const Value *V, const Loop *L) {
if (isa<Constant>(V) || isa<Argument>(V) || isa<GlobalValue>(V))
return true;
- Instruction *I = cast<Instruction>(V);
- BasicBlock *BB = I->getParent();
+ const Instruction *I = cast<Instruction>(V);
+ const BasicBlock *BB = I->getParent();
return !L->contains(BB);
}
@@ -41,8 +41,8 @@ enum InductionVariable::iType
InductionVariable::Classify(const Value *Start, const Value *Step,
const Loop *L = 0) {
// Check for cannonical and simple linear expressions now...
- if (ConstantInt *CStart = dyn_cast<ConstantInt>(Start))
- if (ConstantInt *CStep = dyn_cast<ConstantInt>(Step)) {
+ if (const ConstantInt *CStart = dyn_cast<ConstantInt>(Start))
+ if (const ConstantInt *CStep = dyn_cast<ConstantInt>(Step)) {
if (CStart->equalsInt(0) && CStep->equalsInt(1))
return Cannonical;
else
diff --git a/lib/Analysis/IntervalPartition.cpp b/lib/Analysis/IntervalPartition.cpp
index 5dfccd2c80..8d0e34c1a7 100644
--- a/lib/Analysis/IntervalPartition.cpp
+++ b/lib/Analysis/IntervalPartition.cpp
@@ -51,19 +51,17 @@ void IntervalPartition::updatePredecessors(Interval *Int) {
// IntervalPartition ctor - Build the first level interval partition for the
// specified function...
//
-bool IntervalPartition::runOnFunction(Function *F) {
- assert(F->front() && "Cannot operate on prototypes!");
-
+bool IntervalPartition::runOnFunction(Function &F) {
// Pass false to intervals_begin because we take ownership of it's memory
- function_interval_iterator I = intervals_begin(F, false);
- assert(I != intervals_end(F) && "No intervals in function!?!?!");
+ function_interval_iterator I = intervals_begin(&F, false);
+ assert(I != intervals_end(&F) && "No intervals in function!?!?!");
addIntervalToPartition(RootInterval = *I);
++I; // After the first one...
// Add the rest of the intervals to the partition...
- for_each(I, intervals_end(F),
+ for_each(I, intervals_end(&F),
bind_obj(this, &IntervalPartition::addIntervalToPartition));
// Now that we know all of the successor information, propogate this to the
diff --git a/lib/Analysis/LoopInfo.cpp b/lib/Analysis/LoopInfo.cpp
index 29558dab8b..2559912c0e 100644
--- a/lib/Analysis/LoopInfo.cpp
+++ b/lib/Analysis/LoopInfo.cpp
@@ -35,7 +35,7 @@ void LoopInfo::releaseMemory() {
//===----------------------------------------------------------------------===//
// LoopInfo implementation
//
-bool LoopInfo::runOnFunction(Function *F) {
+bool LoopInfo::runOnFunction(Function &) {
releaseMemory();
Calculate(getAnalysis<DominatorSet>()); // Update
return false;
diff --git a/lib/Analysis/PostDominators.cpp b/lib/Analysis/PostDominators.cpp
index ca0b64a064..caff1f1db3 100644
--- a/lib/Analysis/PostDominators.cpp
+++ b/lib/Analysis/PostDominators.cpp
@@ -21,7 +21,7 @@ using std::set;
AnalysisID DominatorSet::ID(AnalysisID::create<DominatorSet>(), true);
AnalysisID DominatorSet::PostDomID(AnalysisID::create<DominatorSet>(), true);
-bool DominatorSet::runOnFunction(Function *F) {
+bool DominatorSet::runOnFunction(Function &F) {
Doms.clear(); // Reset from the last time we were run...
if (isPostDominator())
@@ -40,17 +40,17 @@ bool DominatorSet::dominates(Instruction *A, Instruction *B) const {
// Loop through the basic block until we find A or B.
BasicBlock::iterator I = BBA->begin();
- for (; *I != A && *I != B; ++I) /*empty*/;
+ for (; &*I != A && &*I != B; ++I) /*empty*/;
// A dominates B if it is found first in the basic block...
- return *I == A;
+ return &*I == A;
}
// calcForwardDominatorSet - This method calculates the forward dominator sets
// for the specified function.
//
-void DominatorSet::calcForwardDominatorSet(Function *M) {
- Root = M->getEntryNode();
+void DominatorSet::calcForwardDominatorSet(Function &F) {
+ Root = &F.getEntryNode();
assert(pred_begin(Root) == pred_end(Root) &&
"Root node has predecessors in function!");
@@ -59,7 +59,7 @@ void DominatorSet::calcForwardDominatorSet(Function *M) {
Changed = false;
DomSetType WorkingSet;
- df_iterator<Function*> It = df_begin(M), End = df_end(M);
+ df_iterator<Function*> It = df_begin(&F), End = df_end(&F);
for ( ; It != End; ++It) {
BasicBlock *BB = *It;
pred_iterator PI = pred_begin(BB), PEnd = pred_end(BB);
@@ -93,7 +93,7 @@ void DominatorSet::calcForwardDominatorSet(Function *M) {
// only have a single exit node (return stmt), then calculates the post
// dominance sets for the function.
//
-void DominatorSet::calcPostDominatorSet(Function *F) {
+void DominatorSet::calcPostDominatorSet(Function &F) {
// Since we require that the unify all exit nodes pass has been run, we know
// that there can be at most one return instruction in the function left.
// Get it.
@@ -101,8 +101,8 @@ void DominatorSet::calcPostDominatorSet(Function *F) {
Root = getAnalysis<UnifyFunctionExitNodes>().getExitNode();
if (Root == 0) { // No exit node for the function? Postdomsets are all empty
- for (Function::iterator FI = F->begin(), FE = F->end(); FI != FE; ++FI)
- Doms[*FI] = DomSetType();
+ for (Function::iterator FI = F.begin(), FE = F.end(); FI != FE; ++FI)
+ Doms[FI] = DomSetType();
return;
}