OA::Alias::ManagerFIAlias Class Reference

#include <ManagerFIAlias.hpp>

Inheritance diagram for OA::Alias::ManagerFIAlias:
Inheritance graph
[legend]
Collaboration diagram for OA::Alias::ManagerFIAlias:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 ManagerFIAlias (OA_ptr< AliasIRInterface > _ir)
 ~ManagerFIAlias ()
OA_ptr< UnionFindUniverseperformFIAlias (OA_ptr< IRProcIterator > procIter, FIAliasImplement implement=ALL_PROCS)
OA_ptr< IRProcIteratorgetAnalyzedProcIter ()
void mergeSubSetRefs (OA_ptr< UnionFindUniverse > ufset)

Protected Member Functions

void recordMRE (OA_ptr< MemRefExpr > mre, ProcHandle proc, MemRefHandle memref)
 maps mre to the given proc and memref, also assigns mre a unique ID
void recordMRE (OA_ptr< MemRefExpr > mre, ProcHandle proc)
OA_ptr< MemRefExprcreateDeref (OA_ptr< MemRefExpr > mre)
 creates a dereferenced version of the given mre
std::set< OA_ptr< MemRefExpr > > allMemRefExprsInSameSet (OA_ptr< MemRefExpr > pMRE, OA_ptr< UnionFindUniverse > ufset)
void initMemRefExprs (ProcHandle proc)
 records all memory reference expressions in a given procedure
void initMemRefExprs (OA_ptr< IRProcIterator > procIter)
 records all memory reference expressions in all procedures
void addProcToWorkList (ProcHandle proc)
 increment versions of FIAlias use a worklist. this does not, so this is a noop.
void doPhase1Iteration (StmtHandle stmt, ProcHandle currProc, OA_ptr< UnionFindUniverse > ufset)
 perform Ryder phase 1 on stmt.
bool doPhase2Iteration (OA_ptr< UnionFindUniverse > ufset, std::map< int, std::map< OA_ptr< MemRefExpr >, int > > &map)
 perform Ryder phase 2
void doPhase3Iteration (CallHandle call, ProcHandle currProc, OA_ptr< UnionFindUniverse > ufset, std::map< int, std::map< OA_ptr< MemRefExpr >, int > > &map)
 perform Ryder phase 3 on the callsite call invoked from caller currProc.
OA_ptr< UnionFindUniverseperformFIAliasAllProcs (OA_ptr< IRProcIterator > procIter)
 Perform FIAlias using Ryder's original algorithm that analyzes all procs.
OA_ptr< UnionFindUniverseperformFIAliasReachableProcs (OA_ptr< IRProcIterator > procIter)
 Perform FIAlias using a modification that only visits reachable procs.

Protected Attributes

OA_ptr< AliasIRInterfacemIR
std::map< OA_ptr< MemRefExpr >
, int > 
mMREToID
int mCount
std::map< OA_ptr< MemRefExpr >
, std::set< MemRefHandle > > 
mMREToMemRefHandles
std::map< OA_ptr< MemRefExpr >
, std::set< ProcHandle > > 
mMREToProcs
std::map< MemRefHandle,
ProcHandle
mMemRefHandleToProc
std::map< ProcHandle, std::set
< SymHandle > > 
mProcToFormalSet
 set of formal symbols associated with each procedure
std::set< ProcHandlemAnalyzedProcs
 A set of reachable procs that have been analyzed.

Private Member Functions

void outputMREsInSet (int setID, OA_ptr< UnionFindUniverse > ufset, std::map< int, std::map< OA_ptr< MemRefExpr >, int > > &map)
void merge (int part1, int part2, OA_ptr< UnionFindUniverse > ufset, std::map< int, std::map< OA_ptr< MemRefExpr >, int > > &map)

Private Attributes

std::set< ProcHandlemWorklist
 The list of procedures to be analyzed.
FIAliasImplement mImplement
 The flavor of FIAlias--examine all procs or only reachable procs.

Friends

class RecordMREsVisitor

Detailed Description

Creates a union-find universe holding sets of aliased MREs. Uses the FIAlias algorithm described in the Ryder2001 journal paper. Note that ManagerFIAlias no longer satisfies the Alias::Interface.hpp interface. Returning a concrete representation of alias relations (via performAnalysis) is now left to subclasses of ManagerFIAlias, such as ManagerFIAliasEquivSets and ManagerFIAliasAliasMap.

Definition at line 189 of file ManagerFIAlias.hpp.


Constructor & Destructor Documentation

OA::Alias::ManagerFIAlias::ManagerFIAlias ( OA_ptr< AliasIRInterface _ir  ) 

Definition at line 138 of file ManagerFIAlias.cpp.

References OA::Alias::debug, and OA_DEBUG_CTRL_MACRO.

OA::Alias::ManagerFIAlias::~ManagerFIAlias (  )  [inline]

Definition at line 193 of file ManagerFIAlias.hpp.


Member Function Documentation

void OA::Alias::ManagerFIAlias::addProcToWorkList ( ProcHandle  proc  )  [protected]

increment versions of FIAlias use a worklist. this does not, so this is a noop.

Only incremental versions of FIAlias (e.g., FIAliasReachable) use a worklist. Therefore, this is a noop by default.

Definition at line 146 of file ManagerFIAlias.cpp.

References mAnalyzedProcs, mImplement, mWorklist, and OA::Alias::REACHABLE_PROCS.

Referenced by doPhase3Iteration(), and performFIAliasReachableProcs().

std::set< OA_ptr< MemRefExpr > > OA::Alias::ManagerFIAlias::allMemRefExprsInSameSet ( OA_ptr< MemRefExpr pMRE,
OA_ptr< UnionFindUniverse ufset 
) [protected]

Definition at line 1057 of file ManagerFIAlias.cpp.

References OA::Alias::debug, OA::OA_ptr< T >::dump(), and mMREToID.

Referenced by doPhase3Iteration().

Here is the call graph for this function:

OA_ptr< MemRefExpr > OA::Alias::ManagerFIAlias::createDeref ( OA_ptr< MemRefExpr mre  )  [protected]

creates a dereferenced version of the given mre

Definition at line 1025 of file ManagerFIAlias.cpp.

References OA::MemRefExpr::USE.

Referenced by doPhase1Iteration(), and doPhase3Iteration().

void OA::Alias::ManagerFIAlias::doPhase1Iteration ( StmtHandle  stmt,
ProcHandle  currProc,
OA_ptr< UnionFindUniverse ufset 
) [protected]

perform Ryder phase 1 on stmt.

Definition at line 408 of file ManagerFIAlias.cpp.

References createDeref(), OA::Alias::debug, mIR, mMREToID, and recordMRE().

Referenced by performFIAliasAllProcs(), and performFIAliasReachableProcs().

Here is the call graph for this function:

bool OA::Alias::ManagerFIAlias::doPhase2Iteration ( OA_ptr< UnionFindUniverse ufset,
std::map< int, std::map< OA_ptr< MemRefExpr >, int > > &  map 
) [protected]

perform Ryder phase 2

Definition at line 453 of file ManagerFIAlias.cpp.

References OA::OA_ptr< T >::convert(), OA::Alias::debug, OA::Alias::OuterRefOpVisitor::getOuterRefOp(), merge(), mIR, mMREToID, and OA::OA_ptr< T >::ptrEqual().

Referenced by performFIAliasAllProcs(), and performFIAliasReachableProcs().

Here is the call graph for this function:

void OA::Alias::ManagerFIAlias::doPhase3Iteration ( CallHandle  call,
ProcHandle  currProc,
OA_ptr< UnionFindUniverse ufset,
std::map< int, std::map< OA_ptr< MemRefExpr >, int > > &  map 
) [protected]

perform Ryder phase 3 on the callsite call invoked from caller currProc.

Definition at line 522 of file ManagerFIAlias.cpp.

References addProcToWorkList(), allMemRefExprsInSameSet(), OA::OA_ptr< T >::convert(), createDeref(), OA::Alias::debug, OA::MemRefExpr::DEF, merge(), mIR, mMREToID, and recordMRE().

Referenced by performFIAliasAllProcs(), and performFIAliasReachableProcs().

Here is the call graph for this function:

OA_ptr< IRProcIterator > OA::Alias::ManagerFIAlias::getAnalyzedProcIter (  ) 
void OA::Alias::ManagerFIAlias::initMemRefExprs ( OA_ptr< IRProcIterator procIter  )  [protected]

records all memory reference expressions in all procedures

Definition at line 1251 of file ManagerFIAlias.cpp.

References initMemRefExprs().

Here is the call graph for this function:

void OA::Alias::ManagerFIAlias::initMemRefExprs ( ProcHandle  proc  )  [protected]

records all memory reference expressions in a given procedure

Definition at line 1143 of file ManagerFIAlias.cpp.

References OA::Alias::debug, OA::MemRefExpr::DEF, OA::OA_ptr< T >::dump(), mIR, mProcToFormalSet, and recordMRE().

Referenced by initMemRefExprs(), performFIAliasAllProcs(), and performFIAliasReachableProcs().

Here is the call graph for this function:

void OA::Alias::ManagerFIAlias::merge ( int  part1,
int  part2,
OA_ptr< UnionFindUniverse ufset,
std::map< int, std::map< OA_ptr< MemRefExpr >, int > > &  map 
) [private]

An implementation of the merge function in the Ryder2001 description of FIAlias.

Definition at line 1265 of file ManagerFIAlias.cpp.

References OA::Alias::debug.

Referenced by doPhase2Iteration(), and doPhase3Iteration().

void OA::Alias::ManagerFIAlias::mergeSubSetRefs ( OA_ptr< UnionFindUniverse ufset  ) 
void OA::Alias::ManagerFIAlias::outputMREsInSet ( int  setID,
OA_ptr< UnionFindUniverse ufset,
std::map< int, std::map< OA_ptr< MemRefExpr >, int > > &  map 
) [private]

Definition at line 1315 of file ManagerFIAlias.cpp.

References mIR, and mMREToID.

OA_ptr< UnionFindUniverse > OA::Alias::ManagerFIAlias::performFIAlias ( OA_ptr< IRProcIterator procIter,
FIAliasImplement  implement = ALL_PROCS 
)
OA_ptr< UnionFindUniverse > OA::Alias::ManagerFIAlias::performFIAliasAllProcs ( OA_ptr< IRProcIterator procIter  )  [protected]

Perform FIAlias using Ryder's original algorithm that analyzes all procs.

Definition at line 690 of file ManagerFIAlias.cpp.

References OA::Alias::debug, doPhase1Iteration(), doPhase2Iteration(), doPhase3Iteration(), OA::OA_ptr< T >::dump(), initMemRefExprs(), mAnalyzedProcs, mCount, and mIR.

Referenced by performFIAlias().

Here is the call graph for this function:

OA_ptr< UnionFindUniverse > OA::Alias::ManagerFIAlias::performFIAliasReachableProcs ( OA_ptr< IRProcIterator procIter  )  [protected]

Perform FIAlias using a modification that only visits reachable procs.

Definition at line 804 of file ManagerFIAlias.cpp.

References addProcToWorkList(), OA::Alias::debug, doPhase1Iteration(), doPhase2Iteration(), doPhase3Iteration(), OA::OA_ptr< T >::dump(), initMemRefExprs(), mAnalyzedProcs, mIR, and mWorklist.

Referenced by performFIAlias().

Here is the call graph for this function:

void OA::Alias::ManagerFIAlias::recordMRE ( OA_ptr< MemRefExpr mre,
ProcHandle  proc 
) [protected]

Private method for associating an mre with a particular procedure.

Definition at line 975 of file ManagerFIAlias.cpp.

References OA::Alias::debug, mCount, mIR, mMREToID, and mMREToProcs.

void OA::Alias::ManagerFIAlias::recordMRE ( OA_ptr< MemRefExpr mre,
ProcHandle  proc,
MemRefHandle  memref 
) [protected]

maps mre to the given proc and memref, also assigns mre a unique ID

Private method for associating an mre with a particular procedure and MemRefHandle. Also associates MemRefHandle with given procedure.

Definition at line 998 of file ManagerFIAlias.cpp.

References OA::Alias::debug, OA::OA_ptr< T >::dump(), mCount, mIR, mMemRefHandleToProc, mMREToID, mMREToMemRefHandles, and mMREToProcs.

Referenced by doPhase1Iteration(), doPhase3Iteration(), initMemRefExprs(), OA::Alias::RecordMREsVisitor::visitDeref(), OA::Alias::RecordMREsVisitor::visitNamedRef(), OA::Alias::RecordMREsVisitor::visitSubSetRef(), OA::Alias::RecordMREsVisitor::visitUnknownRef(), and OA::Alias::RecordMREsVisitor::visitUnnamedRef().

Here is the call graph for this function:


Friends And Related Function Documentation

friend class RecordMREsVisitor [friend]

Definition at line 265 of file ManagerFIAlias.hpp.


Member Data Documentation

A set of reachable procs that have been analyzed.

Definition at line 255 of file ManagerFIAlias.hpp.

Referenced by addProcToWorkList(), getAnalyzedProcIter(), performFIAliasAllProcs(), and performFIAliasReachableProcs().

Definition at line 210 of file ManagerFIAlias.hpp.

Referenced by performFIAliasAllProcs(), and recordMRE().

The flavor of FIAlias--examine all procs or only reachable procs.

Definition at line 278 of file ManagerFIAlias.hpp.

Referenced by addProcToWorkList(), and performFIAlias().

Definition at line 214 of file ManagerFIAlias.hpp.

Referenced by recordMRE().

set of formal symbols associated with each procedure

Definition at line 224 of file ManagerFIAlias.hpp.

Referenced by OA::Alias::ManagerFIAliasAliasMap::buildAliasMaps(), OA::Alias::ManagerFIAliasEquivSets::buildEquivSets(), and initMemRefExprs().

The list of procedures to be analyzed.

Definition at line 275 of file ManagerFIAlias.hpp.

Referenced by addProcToWorkList(), and performFIAliasReachableProcs().


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

Generated on Sat Oct 31 05:29:59 2009 for OpenAnalysis by  doxygen 1.6.1