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
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
00118
00119
00120
00121
00122
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
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
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167 }
00168
00169 }
00170
00171 }
00172 }
00173