return TrackedGlobals;
}
+ inline void markOverdefined(Value *V) {
+ markOverdefined(ValueState[V], V);
+ }
private:
// markConstant - Make a value be marked as "constant". If the value
OverdefinedInstWorkList.push_back(V);
}
}
- inline void markOverdefined(Value *V) {
- markOverdefined(ValueState[V], V);
- }
inline void mergeInValue(LatticeVal &IV, Value *V, LatticeVal &MergeWithV) {
if (IV.isOverdefined() || MergeWithV.isUndefined())
Solver.MarkBlockExecutable(F.begin());
// Mark all arguments to the function as being overdefined.
- std::map<Value*, LatticeVal> &Values = Solver.getValueMapping();
for (Function::arg_iterator AI = F.arg_begin(), E = F.arg_end(); AI != E; ++AI)
- Values[AI].markOverdefined();
+ Solver.markOverdefined(AI);
// Solve for constants.
bool ResolvedUndefs = true;
//
SmallSet<BasicBlock*, 16> &ExecutableBBs = Solver.getExecutableBlocks();
SmallVector<Instruction*, 32> Insts;
+ std::map<Value*, LatticeVal> &Values = Solver.getValueMapping();
+
for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
if (!ExecutableBBs.count(BB)) {
DOUT << " BasicBlock Dead:" << *BB;
// Loop over all functions, marking arguments to those with their addresses
// taken or that are external as overdefined.
//
- std::map<Value*, LatticeVal> &Values = Solver.getValueMapping();
for (Module::iterator F = M.begin(), E = M.end(); F != E; ++F)
if (!F->hasInternalLinkage() || AddressIsTaken(F)) {
if (!F->isDeclaration())
Solver.MarkBlockExecutable(F->begin());
for (Function::arg_iterator AI = F->arg_begin(), E = F->arg_end();
AI != E; ++AI)
- Values[AI].markOverdefined();
+ Solver.markOverdefined(AI);
} else {
Solver.AddTrackedFunction(F);
}
SmallSet<BasicBlock*, 16> &ExecutableBBs = Solver.getExecutableBlocks();
SmallVector<Instruction*, 32> Insts;
SmallVector<BasicBlock*, 32> BlocksToErase;
+ std::map<Value*, LatticeVal> &Values = Solver.getValueMapping();
for (Module::iterator F = M.begin(), E = M.end(); F != E; ++F) {
for (Function::arg_iterator AI = F->arg_begin(), E = F->arg_end();