37 using namespace SVFUtil;
43 void FlowDDA::computeDDAPts(
NodeID id)
46 LocDPItem::setMaxBudget(Options::FlowBudget());
48 PAGNode* node = getPAG()->getGNode(
id);
52 DOTIMESTAT(
double start = DDAStat::getClk(
true));
54 DOTIMESTAT(ddaStat->_AnaTimePerQuery = DDAStat::getClk(
true) - start);
55 DOTIMESTAT(ddaStat->_TotalTimeOfQueries += ddaStat->_AnaTimePerQuery);
57 if(isOutOfBudgetQuery() ==
false)
58 unionPts(node->
getId(),pts);
60 handleOutOfBudgetDpm(dpm);
72 void FlowDDA::handleOutOfBudgetDpm(
const LocDPItem& dpm)
74 DBOUT(
DGENERAL,
outs() <<
"~~~Out of budget query, downgrade to andersen analysis \n");
76 updateCachedPointsTo(dpm,anderPts);
78 addOutOfBudgetDpm(dpm);
86 if(getPAG()->isIndirectCallSites(cbn))
88 if(getCallGraph()->hasIndCSCallees(cbn))
90 const FunctionSet& funset = getCallGraph()->getIndCSCallees(cbn);
91 if(funset.find(callee)!=funset.end())
147 if (isBlkObjOrConstantObj(ptd))
154 setObjFieldInsensitive(ptd);
155 tmpDstPts.
set(getFIObjVar(ptd));
160 tmpDstPts.
set(fieldSrcPtdNode);
179 const MemObj* mem = _pag->getObject(getPtrNodeID(var));
180 assert(mem &&
"memory object is null??");
#define DBOUT(TYPE, X)
LLVM debug macros, define type of your DBUG model of each pass.
APOffset getConstantStructFldIdx() const
Get methods.
NodeID getCurNodeID() const
BVDataPTAImpl::FunctionSet FunctionSet
NodeType * getSrcNode() const
bool isVariantFieldGep() const
Gep statement with a variant field index (pointer arithmetic) for struct field access.
const AccessPath & getAccessPath() const
const_iterator end() const
void set(u32_t n)
Inserts n in the set.
const_iterator begin() const
NodeID getId() const
Get ID.
const PAGEdge * getPAGEdge() const
void dumpSet(NodeBS To, OutStream &O=SVFUtil::outs())
Dump sparse bitvector set.
std::ostream & outs()
Overwrite llvm::outs()