|
||
Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages
udduChains.hGo to the documentation of this file.00001 // ---------------------------------------------------------------------- 00002 // 00003 // C-Breeze 00004 // C Compiler Framework 00005 // 00006 // Copyright (c) 2000 University of Texas at Austin 00007 // 00008 // Teck Bok Tok 00009 // Samuel Z. Guyer 00010 // Daniel A. Jimenez 00011 // Calvin Lin 00012 // 00013 // Permission is hereby granted, free of charge, to any person 00014 // obtaining a copy of this software and associated documentation 00015 // files (the "Software"), to deal in the Software without 00016 // restriction, including without limitation the rights to use, copy, 00017 // modify, merge, publish, distribute, sublicense, and/or sell copies 00018 // of the Software, and to permit persons to whom the Software is 00019 // furnished to do so, subject to the following conditions: 00020 // 00021 // The above copyright notice and this permission notice shall be 00022 // included in all copies or substantial portions of the Software. 00023 // 00024 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 00025 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 00026 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 00027 // NONINFRINGEMENT. IN NO EVENT SHALL THE UNIVERSITY OF TEXAS AT 00028 // AUSTIN BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 00029 // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 00030 // OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 00031 // THE SOFTWARE. 00032 // 00033 // We acknowledge the C-to-C Translator from MIT Laboratory for 00034 // Computer Science for inspiring parts of the C-Breeze design. 00035 // 00036 // ---------------------------------------------------------------------- 00037 00038 #ifndef CBZ_UDDUCHAINS_H 00039 #define CBZ_UDDUCHAINS_H 00040 00041 #include "c_breeze.h" 00042 00057 class udduChains { 00058 public: 00059 typedef list<threeAddrNode*> threeAddr_list; 00060 00061 private: 00062 map<exprNode*,threeAddr_list> ud_chain; 00063 map<threeAddrNode*,expr_list> du_chain; 00064 map<threeAddrNode*,stmt_list> du_site_chain; 00065 00066 public: 00067 udduChains(void) {} 00068 00069 #define contain(L,x) (find(L.begin(),L.end(),x) != L.end()) 00070 00072 inline void add(exprNode *use, threeAddrNode *def, stmtNode *useSite=NULL) { 00073 if(!use) return; 00074 if(! contain(ud_chain[use], def)) 00075 ud_chain[use].push_back(def); 00076 if(! contain(du_chain[def], use)) 00077 du_chain[def].push_back(use); 00078 if(useSite && ! contain(du_site_chain[def], useSite)) 00079 du_site_chain[def].push_back(useSite); 00080 } 00081 00083 inline threeAddr_list defs(exprNode *use) const { 00084 if(use && ud_chain.find(use)!=ud_chain.end()) 00085 return ud_chain.find(use)->second; 00086 return threeAddr_list(); 00087 } 00088 00090 inline expr_list uses(threeAddrNode *def) const { 00091 if(def && du_chain.find(def)!=du_chain.end()) 00092 return du_chain.find(def)->second; 00093 return expr_list(); 00094 } 00095 00097 inline stmt_list useSites(threeAddrNode *def) const { 00098 if(def && du_site_chain.find(def)!=du_site_chain.end()) 00099 return du_site_chain.find(def)->second; 00100 return stmt_list(); 00101 } 00102 00104 void reset() { ud_chain.clear(); du_chain.clear(); du_site_chain.clear(); } 00105 }; 00106 00107 #endif |
Generated on February 1, 2006
Back to the C-Breeze home page