|
OpenADFortTk (basic)
|
00001 // -*-Mode: C++;-*- 00002 // $Header: /Volumes/cvsrep/developer/OpenADFortTk/src/xaif2whirl/XAIF_DOMFilters.h,v 1.18 2006/05/12 16:12:23 utke Exp $ 00003 00004 00005 #ifndef XAIF_DOMFilters_INCLUDED_h 00006 #define XAIF_DOMFilters_INCLUDED_h 00007 00008 #include <iostream> 00009 00010 #include "xercesc/dom/DOMNodeFilter.hpp" 00011 00012 namespace xaif2whirl { 00013 00014 // Dumps only this node 00015 void 00016 XercesPrintNode(std::ostream& os, const xercesc::DOMNode* n); 00017 00018 // Dumps the tree rooted at 'n' 00019 void 00020 XercesPrintTree(std::ostream& os, const xercesc::DOMNode* n); 00021 00022 std::ostream& 00023 operator<<(std::ostream& os, const xercesc::DOMElement& elem); 00024 00025 // Shortcut for XercesPrintNode 00026 void 00027 XercesDumpNode(const xercesc::DOMNode* n); 00028 00029 // Shortcut for XercesPrintTree 00030 void 00031 XercesDumpTree(const xercesc::DOMNode* n); 00032 00033 void 00034 XercesDumpNode(void* n); // For *^#% debuggers 00035 00036 void 00037 XercesDumpTree(void* n); // For *^#% debuggers 00038 00039 xercesc::DOMElement* 00040 GetFirstChildElement(const xercesc::DOMNode* n); 00041 00042 xercesc::DOMElement* 00043 GetLastChildElement(const xercesc::DOMNode* n); 00044 00045 xercesc::DOMElement* 00046 GetChildElement(const xercesc::DOMNode* n, const XMLCh* name); 00047 00048 xercesc::DOMElement* 00049 GetChildElement(const xercesc::DOMNode* n, const xercesc::DOMNodeFilter* filter); 00050 00051 unsigned int 00052 GetChildElementCount(const xercesc::DOMNode* n); 00053 00054 xercesc::DOMElement* 00055 GetPrevSiblingElement(const xercesc::DOMNode* n); 00056 00057 xercesc::DOMElement* 00058 GetNextSiblingElement(const xercesc::DOMNode* n); 00059 00060 xercesc::DOMElement* 00061 GetNextSiblingElement(const xercesc::DOMNode* n, const XMLCh* name); 00062 00063 xercesc::DOMElement* 00064 GetNextSiblingElement(const xercesc::DOMNode* n, const xercesc::DOMNodeFilter* filter); 00065 00066 class XAIF_ElemFilter : public xercesc::DOMNodeFilter { 00067 public: 00068 XAIF_ElemFilter(const XMLCh* name) : mName(name) { } 00069 ~XAIF_ElemFilter() { } 00070 short acceptNode(const xercesc::DOMNode *node) const; 00071 private: 00072 const XMLCh* mName; 00073 }; 00074 00075 class XAIF_ScopeElemFilter : public xercesc::DOMNodeFilter { 00076 public: 00077 XAIF_ScopeElemFilter() { } 00078 ~XAIF_ScopeElemFilter() { } 00079 short acceptNode(const xercesc::DOMNode *node) const; 00080 }; 00081 00082 class XAIF_SymbolElemFilter : public xercesc::DOMNodeFilter { 00083 public: 00084 XAIF_SymbolElemFilter() { } 00085 ~XAIF_SymbolElemFilter() { } 00086 short acceptNode(const xercesc::DOMNode *node) const; 00087 }; 00088 00089 class XAIF_DimensionBoundsElemFilter : public xercesc::DOMNodeFilter { 00090 public: 00091 XAIF_DimensionBoundsElemFilter() { } 00092 ~XAIF_DimensionBoundsElemFilter() { } 00093 short acceptNode(const xercesc::DOMNode *node) const; 00094 }; 00095 00096 class XAIF_CFGElemFilter : public xercesc::DOMNodeFilter { 00097 public: 00098 XAIF_CFGElemFilter(bool cfgOrReplaceList_ = true) 00099 : cfgOrReplaceList(cfgOrReplaceList_) { } 00100 ~XAIF_CFGElemFilter() { } 00101 00102 short acceptNode(const xercesc::DOMNode *node) const; 00103 00104 static bool IsCFG(const xercesc::DOMNode *node); 00105 static bool IsReplaceList(const xercesc::DOMNode *node); 00106 static bool IsReplacement(const xercesc::DOMNode *node); 00107 private: 00108 bool cfgOrReplaceList; 00109 }; 00110 00111 00112 class XAIF_BBElemFilter : public xercesc::DOMNodeFilter { 00113 public: 00114 // if 'onlyBasicBlock' is true, only xaif:BasicBlocks are in the iteration 00115 XAIF_BBElemFilter(bool edges = true) 00116 : includeEdges(edges) { } 00117 ~XAIF_BBElemFilter() { } 00118 00119 short acceptNode(const xercesc::DOMNode *node) const; 00120 00121 static bool IsAnyBB(const xercesc::DOMNode *node); 00122 static bool IsBBEntry(const xercesc::DOMNode *node); 00123 static bool IsBBExit(const xercesc::DOMNode *node); 00124 static bool IsBB(const xercesc::DOMNode *node); 00125 static bool IsBBBranch(const xercesc::DOMNode *node); 00126 static bool IsBBEndBr(const xercesc::DOMNode *node); 00127 static bool IsBBForLoop(const xercesc::DOMNode *node); 00128 static bool IsBBPreLoop(const xercesc::DOMNode *node); 00129 static bool IsBBPostLoop(const xercesc::DOMNode *node); 00130 static bool IsBBEndLoop(const xercesc::DOMNode *node); 00131 static bool IsEdge(const xercesc::DOMNode *node); 00132 private: 00133 bool includeEdges; 00134 }; 00135 00136 00137 // Accepts: basic block statements and DerivativeAccumulator 00138 class XAIF_BBStmtElemFilter : public xercesc::DOMNodeFilter { 00139 public: 00140 XAIF_BBStmtElemFilter() { } 00141 ~XAIF_BBStmtElemFilter() { } 00142 00143 short acceptNode(const xercesc::DOMNode *node) const; 00144 00145 static bool IsAnyStmt(const xercesc::DOMNode *node); 00146 static bool IsAssign(const xercesc::DOMNode *node); 00147 static bool IsSubCall(const xercesc::DOMNode *node); 00148 static bool IsInlinableSubCall(const xercesc::DOMNode *node); 00149 static bool IsMarker(const xercesc::DOMNode *node); 00150 static bool IsDerivProp(const xercesc::DOMNode *node); 00151 }; 00152 00153 00154 class XAIF_DerivPropStmt : public xercesc::DOMNodeFilter { 00155 public: 00156 XAIF_DerivPropStmt() { } 00157 ~XAIF_DerivPropStmt() { } 00158 00159 short acceptNode(const xercesc::DOMNode *node) const; 00160 00161 static bool IsSetDeriv(const xercesc::DOMNode *node); 00162 static bool IsSetNegDeriv(const xercesc::DOMNode *node); 00163 static bool IsIncDeriv(const xercesc::DOMNode *node); 00164 static bool IsDecDeriv(const xercesc::DOMNode *node); 00165 static bool IsSax(const xercesc::DOMNode *node); 00166 static bool IsSaxpy(const xercesc::DOMNode *node); 00167 static bool IsZeroDeriv(const xercesc::DOMNode *node); 00168 }; 00169 00170 } 00171 00172 #endif