42 std::vector<Lattice*>& initLattices, std::vector<NodeFact*>& initFacts)=0;
48 std::set<Function> visited;
54 { this->interAnalysis = intraDFAnalysis->interAnalysis; }
64 virtual bool runAnalysis(
const Function& func,
NodeState* state,
bool analyzeDueToCallers, std::set<Function> calleesUpdated)=0;
72 bool analyzeDueToCallers =
true;
75 std::set<Function> calleesUpdated;
77 return runAnalysis(func, state, analyzeDueToCallers, calleesUpdated);
217 bool runAnalysis(
const Function& func,
NodeState* state,
bool analyzeDueToCallers, std::set<Function> calleesUpdated);
222 bool propagateStateToNextNode(
223 const std::vector<Lattice*>& curNodeState,
DataflowNode curDFNode,
int nodeIndex,
224 const std::vector<Lattice*>& nextNodeState,
DataflowNode nextDFNode);
226 std::vector<DataflowNode> gatherDescendants(std::vector<DataflowEdge> edges,
231 getInitialWorklist(
const Function &func,
bool firstVisit,
bool analyzeDueToCallers,
const set<Function> &calleesUpdated,
NodeState *fState) = 0;
232 virtual vector<Lattice*> getLatticeAnte(
NodeState *state) = 0;
233 virtual vector<Lattice*> getLatticePost(
NodeState *state) = 0;
240 virtual vector<DataflowNode> getDescendants(
const DataflowNode &n) = 0;
395 std::vector<Lattice*> mergedLatsRetStmt;
396 std::vector<Lattice*> mergedLatsRetVal;
411 MergeAllReturnStates(
Analysis* analysis,
const std::vector<Lattice*>& mergedLatsRetStmt,
const std::vector<Lattice*>& mergedLatsRetVal):
412 analysis(analysis), mergedLatsRetStmt(mergedLatsRetStmt), mergedLatsRetVal(mergedLatsRetVal)
419 static bool mergeLats(std::vector<Lattice*>& mergedLat,
const std::vector<Lattice*>& lats);
422 std::vector<Lattice*>& getMergedLatsRetStmt() {
return mergedLatsRetStmt; }
425 std::vector<Lattice*>& getMergedLatsRetVal() {
return mergedLatsRetVal; }
428 bool getModified() {
return modified; }
440 std::vector<Lattice*>& latsAtFuncReturn;
442 std::vector<Lattice*>& latsRetVal;
447 DFStateAtReturns(std::vector<Lattice*>& latsAtFuncReturn, std::vector<Lattice*>& latsRetVal);
458 std::vector<Lattice*>& getLatsAtFuncReturn() {
return latsAtFuncReturn; }
461 std::vector<Lattice*>& getLatsRetVal() {
return latsRetVal; }
463 std::string str(std::string indent);