ParamBindings.cpp

Go to the documentation of this file.
00001 
00016 #include "ParamBindings.hpp"
00017 
00018 namespace OA {
00019   namespace DataFlow {
00020 
00022 MemRefHandle 
00023 ParamBindings::getCallerMemRef(CallHandle call, SymHandle calleeFormal)
00024 {
00025     return mCalleeToCallerMap[call][calleeFormal];
00026 }
00027 
00029 OA_ptr<MemRefHandleIterator> ParamBindings::getActualIterator(CallHandle call)
00030 {
00031     OA_ptr<MemRefIterator> retval;
00032     OA_ptr<std::set<OA::MemRefHandle> > retSet;
00033     OA_ptr<std::set<OA::MemRefHandle> > memrefSet = mCallToActualSetMap[call];
00034     if (memrefSet.ptrEqual(0)) {
00035         retSet = new std::set<OA::MemRefHandle>;
00036     } else {
00037         retSet = mCallToActualSetMap[call];
00038     }
00039     retval = new MemRefIterator(retSet);
00040     return retval;
00041 }
00042 
00044 SymHandle 
00045 ParamBindings::getCalleeFormal(CallHandle call, MemRefHandle callerRef,
00046                                ProcHandle callee)
00047 {
00048     return mCallerToCalleeMap[call][callee][callerRef];
00049 }
00050 
00052 OA_ptr<SymHandleIterator> ParamBindings::getFormalIterator(ProcHandle proc)
00053 {
00054     OA_ptr<SymIterator> retval;
00055     if (mProcToFormalSetMap[proc].ptrEqual(0)) {
00056         OA_ptr<std::set<SymHandle> > emptySet;
00057         emptySet = new std::set<SymHandle>;
00058         retval = new SymIterator(emptySet);
00059     } else {
00060         retval = new SymIterator(mProcToFormalSetMap[proc]);
00061     }
00062     return retval;
00063 }
00064 
00066 OA_ptr<ExprHandleIterator> 
00067 ParamBindings::getActualExprHandleIterator(CallHandle call) {
00068 
00069   OA_ptr<ExprHandleIterator> retval;
00070   if (mCallToExprListMap[call].ptrEqual(0)) {
00071     OA_ptr<std::list<ExprHandle> > emptyList;
00072     emptyList = new std::list<ExprHandle>;
00073     retval = new ExprIterator(emptyList);
00074   } else {
00075     retval = new ExprIterator(mCallToExprListMap[call]);
00076   }
00077   return retval;
00078 }
00079 
00081 OA_ptr<ExprTree> ParamBindings::getActualExprTree(ExprHandle expr){
00082   return mExprToTreeMap[expr];
00083 }
00084 
00086 ExprHandle ParamBindings::getActualExprHandle(CallHandle call, SymHandle formal) {
00087   return mCallToFormalToActualMap[call][formal];
00088 }
00089 
00090 
00091 
00092 
00093 //*****************************************************************
00094 // Construction methods 
00095 //*****************************************************************
00096 void ParamBindings::mapMemRefToFormal(CallHandle call, MemRefHandle actual, 
00097                                       ProcHandle callee, SymHandle sym)
00098 {
00099     mCallerToCalleeMap[call][callee][actual] = sym;
00100     mCalleeToCallerMap[call][sym] = actual;
00101     if (mCallToActualSetMap[call].ptrEqual(0)) {
00102         mCallToActualSetMap[call] = new std::set<MemRefHandle>;
00103     }
00104     mCallToActualSetMap[call]->insert(actual);
00105 }
00106 
00107 
00108 void ParamBindings::mapFormalToProc(SymHandle formal, ProcHandle proc) 
00109 {
00110     if (mProcToFormalSetMap[proc].ptrEqual(0)) {
00111         mProcToFormalSetMap[proc] = new std::set<SymHandle>;
00112     }
00113     mProcToFormalSetMap[proc]->insert(formal);
00114 }
00115 
00116 /*
00117 void ParamBindings::mapActualToCall(MemRefHandle actual, ExprHandle call) 
00118 {
00119     if (mCallToActualSetMap[call].ptrEqual(0)) {
00120         mCallToActualSetMap[call] = new std::set<MemRefHandle>;
00121     }
00122     mCallToActualSetMap[call]->insert(actual);
00123 }
00124 */
00125 
00126 
00127 void ParamBindings::mapCallToExprList(CallHandle call,
00128                                       OA_ptr<std::list<ExprHandle> > elist)
00129 {
00130   mCallToExprListMap[call] = elist;
00131 }
00132 
00133 void ParamBindings::mapExprToTree(ExprHandle expr, OA_ptr<ExprTree> etree)
00134 {
00135   mExprToTreeMap[expr] = etree;
00136 }
00137 
00138 void ParamBindings::mapFormalToExpr(CallHandle call, SymHandle formal, 
00139                                     ExprHandle act_expr)
00140 {
00141   mCallToFormalToActualMap[call][formal] = act_expr;
00142 }
00143 
00144 
00145 void ParamBindings::dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> ir)
00146 {
00147     os << "====================== ParamBindings" << std::endl;
00148 
00149     // iterate over all the calls we have information about
00150     std::map<CallHandle,std::map<ProcHandle,std::map<MemRefHandle,SymHandle> > >::iterator callIter;
00151     for (callIter=mCallerToCalleeMap.begin();
00152          callIter!=mCallerToCalleeMap.end(); callIter++) 
00153     {
00154         /*
00155         os << "Call = " << ir->toString(callIter->first) << std::endl;
00156         std::map<MemRefHandle,SymHandle>::iterator memRefIter;
00157         for (memRefIter=callIter->second.begin();
00158              memRefIter!=callIter->second.end(); memRefIter++)
00159         {
00160             MemRefHandle ref = memRefIter->first;
00161             SymHandle sym = memRefIter->second;
00162             os << "\tCaller MemRef = " << ir->toString(ref);
00163             os << ", Callee Formal = " << ir->toString(sym);
00164             os << std::endl;
00165         }
00166         */
00167     }
00168 
00169 }
00170 
00171   } // end of DataFlow namespace
00172 } // end of OA namespace
00173