|
OpenADFortTk (basic)
|
00001 #ifndef XlateExpression_INCLUDED_h 00002 #define XlateExpression_INCLUDED_h 00003 00004 #include <iostream> 00005 00006 #include "xercesc/dom/DOMDocument.hpp" 00007 #include "xercesc/dom/DOMElement.hpp" 00008 #include "xercesc/dom/DOMNode.hpp" 00009 00010 #include "Open64IRInterface/Open64BasicTypes.h" 00011 00012 #include "IntrinsicXlationTable.h" 00013 00014 #include "PUXlationContext.h" 00015 00016 #include "OpenAnalysis/Utils/DGraph/DGraphInterface.hpp" 00017 #include "OpenAnalysis/Utils/DGraph/DGraphImplement.hpp" 00018 00019 00020 00021 namespace xaif2whirl { 00022 00023 class MyDGNode; 00024 00025 class XlateExpression { 00026 00027 public: 00028 00032 static WN* translateExpression(const xercesc::DOMElement* elem, 00033 PUXlationContext& ctxt); 00034 00040 static WN* translateExpressionSimple(const xercesc::DOMElement* elem, 00041 PUXlationContext& ctxt); 00050 static WN* translateVarRef(const xercesc::DOMElement* elem, 00051 PUXlationContext& ctxt); 00052 00057 static std::pair<ST*, WN_OFFSET> translateVarRefSimple(const xercesc::DOMElement* elem, 00058 PUXlationContext& ctxt); 00059 00073 static WN* patchWNExpr(WN* parent, 00074 INT kidno, 00075 PUXlationContext& ctxt); 00076 00077 00078 static WN* translateConstant(const xercesc::DOMElement* elem, 00079 PUXlationContext& ctxt); 00080 00086 static WN* createValueSelector(WN* wn); 00087 00088 private: 00089 00090 static bool hasActiveSymbolType(WN* aWNp); 00091 00092 static WN* xlate_Expression(OA::OA_ptr<OA::DGraph::DGraphImplement> g, 00093 OA::OA_ptr<MyDGNode> n, 00094 PUXlationContext& ctxt); 00095 00096 static WN* xlate_VarRef(const xercesc::DOMElement* elem, 00097 PUXlationContext& ctxt); 00098 00099 static WN* xlate_VarRef(OA::OA_ptr<OA::DGraph::DGraphImplement> g, 00100 OA::OA_ptr<MyDGNode> n, 00101 PUXlationContext& ctxt); 00102 00103 static WN* xlate_Intrinsic(OA::OA_ptr<OA::DGraph::DGraphImplement> g, 00104 OA::OA_ptr<MyDGNode> n, 00105 PUXlationContext& ctxt); 00106 00107 static WN* xlate_FunctionCall(OA::OA_ptr<OA::DGraph::DGraphImplement> g, 00108 OA::OA_ptr<MyDGNode> n, 00109 PUXlationContext& ctxt); 00110 00111 static WN* xlate_BooleanOperation(OA::OA_ptr<OA::DGraph::DGraphImplement> g, 00112 OA::OA_ptr<MyDGNode> n, 00113 PUXlationContext& ctxt); 00114 00121 static WN* xlate_ExprOpUsingIntrinsicTable(fortTkSupport::IntrinsicXlationTable::XAIFOpr xopr, 00122 const char* xoprNm, const char* xIntrinKey, 00123 OA::OA_ptr<OA::DGraph::DGraphImplement> g, 00124 OA::OA_ptr<MyDGNode> n, 00125 PUXlationContext& ctxt); 00126 00132 static WN* xlate_SymbolReference(const xercesc::DOMElement* elem, 00133 PUXlationContext& ctxt); 00134 00140 static pair<ST*, WN_OFFSET> xlate_SymbolReferenceSimple(const xercesc::DOMElement* elem, 00141 PUXlationContext& ctxt); 00142 00143 static WN* xlate_SymbolReferenceCollapsedPath(const xercesc::DOMElement* elem, WN* pathVorlageWN, 00144 PUXlationContext& ctxt); 00145 00146 static WN* xlate_ArrayElementReference(OA::OA_ptr<OA::DGraph::DGraphImplement> g, 00147 OA::OA_ptr<MyDGNode> n, 00148 PUXlationContext& ctxt); 00149 00150 00178 static OA::OA_ptr<OA::DGraph::DGraphImplement> createExpressionGraph(const xercesc::DOMElement* elem, 00179 bool varRef = false); 00180 00186 static WN* createDerivSelector(WN* wn); 00187 00188 static TYPE_ID getRType(WN* wn); 00189 00190 static TYPE_ID getRTypeFromOpands(vector<WN*>& opands); 00191 00192 static TYPE_ID getRTypeFromOpands(TYPE_ID ty1, TYPE_ID ty2); 00193 00197 static TYPE_ID getMType(unsigned int cl, unsigned int bytesz); 00198 00199 static OPCODE getWNExprOpcode(OPERATOR opr, vector<WN*>& opands); 00200 00201 static INTRINSIC getWNIntrinsic(const char* intrnNm, vector<WN*>& opands, TYPE_ID* dtype); 00202 00203 }; 00204 00205 } 00206 00207 #endif