SVF
Public Member Functions | Static Public Attributes | Private Member Functions | Private Attributes | List of all members
SVF::IteratedDominanceFrontier Class Reference

#include <DataFlowUtil.h>

Inheritance diagram for SVF::IteratedDominanceFrontier:

Public Member Functions

 IteratedDominanceFrontier ()
 
virtual ~IteratedDominanceFrontier ()
 
virtual void getAnalysisUsage (AnalysisUsage &AU) const
 
iterator getIDFSet (BasicBlock *B)
 

Static Public Attributes

static char ID = 0
 

Private Member Functions

void calculate (BasicBlock *, const DominanceFrontier &DF)
 

Private Attributes

const DominanceFrontierDF
 

Detailed Description

Iterated dominance frontier

Definition at line 151 of file DataFlowUtil.h.

Constructor & Destructor Documentation

◆ IteratedDominanceFrontier()

SVF::IteratedDominanceFrontier::IteratedDominanceFrontier ( )
inline

Definition at line 162 of file DataFlowUtil.h.

162  :
163  DominanceFrontierBase(), DF(nullptr)
164  {
165  }
llvm::DominanceFrontierBase< BasicBlock, false > DominanceFrontierBase
Definition: BasicTypes.h:196
const DominanceFrontier * DF
Definition: DataFlowUtil.h:155

◆ ~IteratedDominanceFrontier()

virtual SVF::IteratedDominanceFrontier::~IteratedDominanceFrontier ( )
inlinevirtual

Definition at line 167 of file DataFlowUtil.h.

168  {
169  }

Member Function Documentation

◆ calculate()

void IteratedDominanceFrontier::calculate ( BasicBlock bb,
const DominanceFrontier DF 
)
private

Definition at line 125 of file DataFlowUtil.cpp.

127 {
128 
129  DomSetType worklist;
130 
132  assert(it != DF.end());
133 
134  worklist.insert(it->second.begin(), it->second.end());
135  while (!worklist.empty())
136  {
137  BasicBlock *item = *worklist.begin();
138  worklist.erase(worklist.begin());
139  if (Frontiers[bb].find(item) == Frontiers[bb].end())
140  {
141  Frontiers[bb].insert(item);
142  const_iterator parent = DF.find(item);
143  assert(parent != DF.end());
144  worklist.insert(parent->second.begin(), parent->second.end());
145  }
146  }
147 }
llvm::BasicBlock BasicBlock
Definition: BasicTypes.h:77
#define assert(ex)
Definition: util.h:141
llvm::DominanceFrontierBase< BasicBlock, false > DominanceFrontierBase
Definition: BasicTypes.h:196
const DominanceFrontier * DF
Definition: DataFlowUtil.h:155

◆ getAnalysisUsage()

virtual void SVF::IteratedDominanceFrontier::getAnalysisUsage ( AnalysisUsage AU) const
inlinevirtual

Definition at line 171 of file DataFlowUtil.h.

172  {
173  AU.setPreservesAll();
174  // AU.addRequired<DominanceFrontier>();
175  }

◆ getIDFSet()

iterator SVF::IteratedDominanceFrontier::getIDFSet ( BasicBlock B)
inline

Definition at line 183 of file DataFlowUtil.h.

184  {
185  if (Frontiers.find(B) == Frontiers.end())
186  calculate(B, *DF);
187  return Frontiers.find(B);
188  }
void calculate(BasicBlock *, const DominanceFrontier &DF)
const DominanceFrontier * DF
Definition: DataFlowUtil.h:155

Member Data Documentation

◆ DF

const DominanceFrontier* SVF::IteratedDominanceFrontier::DF
private

Definition at line 155 of file DataFlowUtil.h.

◆ ID

char IteratedDominanceFrontier::ID = 0
static

Definition at line 160 of file DataFlowUtil.h.


The documentation for this class was generated from the following files: