|
OpenADFortTk (basic)
|
00001 // -*-Mode: C++;-*- 00002 // $Header: /Volumes/cvsrep/developer/OpenADFortTk/src/xaif2whirl/XlateStmt.h,v 1.2 2006/05/12 16:12:24 utke Exp $ 00003 00004 #ifndef XlateStmt_INCLUDED_h 00005 #define XlateStmt_INCLUDED_h 00006 00007 #include <iostream> 00008 00009 #include "xercesc/dom/DOMDocument.hpp" 00010 00011 #include "Open64IRInterface/Open64BasicTypes.h" 00012 00013 #include "PUXlationContext.h" 00014 00015 namespace xaif2whirl { 00016 00017 class XlateStmt { 00018 00019 public: 00020 00021 static WN* translateStmt(const DOMElement* stmt, 00022 PUXlationContext& ctxt); 00023 00029 static WN* translateAssignmentSimple(const DOMElement* stmt, 00030 PUXlationContext& ctxt); 00031 00032 static WN* patchWNStmt(WN* wn, PUXlationContext& ctxt); 00033 00034 private: 00035 00036 static WN* xlate_Assignment(const DOMElement* elem, 00037 PUXlationContext& ctxt); 00038 00039 static WN* xlate_AssignmentLHS(const DOMElement* elem, 00040 PUXlationContext& ctxt); 00041 00042 static WN* xlate_AssignmentRHS(const DOMElement* elem, 00043 PUXlationContext& ctxt); 00044 00045 static WN* xlate_SubroutineCall(const DOMElement* elem, 00046 PUXlationContext& ctxt); 00047 00048 static WN* xlate_InlinableSubroutineCall(const DOMElement* elem, 00049 PUXlationContext& ctxt); 00050 00054 static WN* xlate_DerivativePropagator(const DOMElement* elem, 00055 PUXlationContext& ctxt); 00056 00057 static WN* xlate_SetDeriv(const DOMElement* elem, 00058 PUXlationContext& ctxt); 00059 00060 static WN* xlate_SetNegDeriv(const DOMElement* elem, 00061 PUXlationContext& ctxt); 00062 00063 static WN* xlate_IncDeriv(const DOMElement* elem, 00064 PUXlationContext& ctxt); 00065 00066 static WN* xlate_DecDeriv(const DOMElement* elem, 00067 PUXlationContext& ctxt); 00068 00069 static WN* xlate_ZeroDeriv(const DOMElement* elem, 00070 PUXlationContext& ctxt); 00076 static WN* xlate_Saxpy(const DOMElement* elem, 00077 PUXlationContext& ctxt, 00078 bool saxpy); 00079 00080 static void patchWN_IO(WN* wn, 00081 PUXlationContext& ctxt); 00082 00083 static void patchWN_IO_cray(WN* wn, 00084 PUXlationContext& ctxt); 00085 00086 static void patchWN_IO_ITEM_list(WN* wn, 00087 PUXlationContext& ctxt); 00088 00089 static WN* createAssignment(WN* lhs, WN* rhs); 00090 00091 static WN* createAssignment(ST* lhs, WN_OFFSET oset, WN* rhs); 00092 00093 static WN* createZeroConst(TYPE_ID ty); 00094 00095 static WN* createOpenADInline(const char* fname, std::vector<WN*>& args); 00096 00097 }; 00098 } 00099 00100 #endif