OpenADFortTk (basic)
src/xaif2whirl/XlateExpression.h
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines