66 assert(
false &&
"FullSparseAbstractInterpretation::getAbsValue not implemented");
73 assert(
false &&
"FullSparseAbstractInterpretation::hasAbsValue not implemented");
80 assert(
svfg &&
"SVFG is not built for full-sparse AE");
92 assert(
svfg &&
"SVFG is not built for full-sparse AE");
99 assert(
svfg &&
"SVFG is not built for full-sparse AE");
114 assert(
svfg &&
"SVFG is not built for full-sparse AE");
168 for (
const auto& [
id,
val] :
next.getVarToVal())
187 for (
const auto& [
id,
val] :
next.getVarToVal())
AndersenWaveDiff * getPointerAnalysis() const
Accessors for Andersen's results.
const Set< const ValVar * > getCycleValVars(const ICFGCycleWTO *cycle) const
virtual bool narrowCycleState(const AbstractState &prev, const AbstractState &cur, const ICFGCycleWTO *cycle)
virtual AbstractState getFullCycleHeadState(const ICFGCycleWTO *cycle)
virtual bool widenCycleState(const AbstractState &prev, const AbstractState &cur, const ICFGCycleWTO *cycle)
SVFIR * svfir
Data and helpers reachable from SparseAbstractInterpretation.
Map< const ICFGNode *, AbstractState > abstractTrace
per-node trace; owned here
const ICFGNode * getDefSiteOfValVar(const ValVar *var) const
const Set< const ICFGNode * > getDefSiteOfObjVar(const ObjVar *obj, const ICFGNode *node) const
bool hasAbsValue(const ValVar *var, const ICFGNode *node) const override
Side-effect-free existence check.
const Set< const ICFGNode * > getUseSitesOfValVar(const ValVar *var) const
const AbstractValue & getAbsValue(const ValVar *var, const ICFGNode *node) override
~FullSparseAbstractInterpretation() override
void buildSVFG()
Build the SVFG on top of the semi-sparse precompute.
const Set< const ICFGNode * > getUseSitesOfObjVar(const ObjVar *obj, const ICFGNode *node) const
const VFGNodeList & getVFGNodes() const
SVFG * buildFullSVFG(BVDataPTAImpl *pta)
const Set< const SVFGNode * > getDefSiteOfObjVar(const ObjVar *obj, const SVFGNode *node) const
const Set< const SVFGNode * > getUseSitesOfObjVar(const ObjVar *obj, const SVFGNode *node) const
const Set< const SVFGNode * > getUseSitesOfValVar(const ValVar *var) const
const SVFGNode * getDefSiteOfValVar(const ValVar *var) const
const SVFVar * getSVFVar(NodeID id) const
ObjVar/GepObjVar/BaseObjVar.
bool narrowCycleState(const AbstractState &prev, const AbstractState &cur, const ICFGCycleWTO *cycle) override
const AbstractValue & getAbsValue(const ValVar *var, const ICFGNode *node) override
AbstractState getFullCycleHeadState(const ICFGCycleWTO *cycle) override
bool widenCycleState(const AbstractState &prev, const AbstractState &cur, const ICFGCycleWTO *cycle) override
void updateAbsValue(const ValVar *var, const AbstractValue &val, const ICFGNode *node) override
bool hasAbsValue(const ValVar *var, const ICFGNode *node) const override
Side-effect-free existence check.
virtual const ICFGNode * getICFGNode() const
Return corresponding ICFG node.
llvm::IRBuilder IRBuilder