Main Page   Modules   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members   Related Pages  

dfpreds.h

Go 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 //  Samuel Z. Guyer
00009 //  Daniel A. Jimenez
00010 //  Calvin Lin
00011 // 
00012 //  Permission is hereby granted, free of charge, to any person
00013 //  obtaining a copy of this software and associated documentation
00014 //  files (the "Software"), to deal in the Software without
00015 //  restriction, including without limitation the rights to use, copy,
00016 //  modify, merge, publish, distribute, sublicense, and/or sell copies
00017 //  of the Software, and to permit persons to whom the Software is
00018 //  furnished to do so, subject to the following conditions:
00019 //  
00020 //  The above copyright notice and this permission notice shall be
00021 //  included in all copies or substantial portions of the Software.
00022 //  
00023 //  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00024 //  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00025 //  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
00026 //  NONINFRINGEMENT.  IN NO EVENT SHALL THE UNIVERSITY OF TEXAS AT
00027 //  AUSTIN BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
00028 //  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
00029 //  OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
00030 //  THE SOFTWARE.
00031 //
00032 //  We acknowledge the C-to-C Translator from MIT Laboratory for
00033 //  Computer Science for inspiring parts of the C-Breeze design.
00034 //
00035 // ----------------------------------------------------------------------
00036 
00037 #ifndef CBZ_DFPREDS_H
00038 #define CBZ_DFPREDS_H
00039 
00040 #include <set>
00041 #include "pointers_common.h"
00042 #include "clone_changer.h"
00043 #include "dominators.h"
00044 
00045 // The DominanceFrontier class compute the dominance frontier for the
00046 // procedure given in its constructor. This version of the algorithm
00047 // also computes the particular set of predecessors of each element of
00048 // the dominance frontier. For example:
00049 
00050 //        _____3_______
00051 //       /             \
00052 //  1 __/               >--6
00053 //      \       __5____/
00054 //       \__2__/      /
00055 //             \__4__/
00056 
00057 // In the above graph, if we have a def at (2), the dominance frontier
00058 // is {6}. However, we also want to record the fact that the
00059 // particular predecessors of (6) that (2) dominates are {4,5}. This
00060 // will allow us to put the reaching definition directly into the
00061 // appropriate entry of the phi function at (6).
00062 
00063 // Store the dominance frontier entries (with predecessor sets)
00064 
00065 typedef map< basicblockNode *, basicblock_set > basicblock_set_map;
00066 typedef basicblock_set_map::iterator basicblock_set_map_p;
00067 
00068 // Store all the dominance frontiers
00069 
00070 typedef map< basicblockNode *, basicblock_set_map > basicblock_set_map_map;
00071 typedef basicblock_set_map_map::iterator basicblock_set_map_map_p;
00072 
00073 /*
00074 typedef map< basicblockNode *, basicblock_set > basicblockset_map;
00075 typedef basicblockset_map::iterator basicblockset_map_p;
00076 
00077 typedef map< basicblockNode *, basicblock_list> basicblock_map;
00078 typedef basicblock_map::iterator basicblock_map_p;
00079 */
00080 
00081 typedef vector<basicblockNode *> basicblock_vec;
00082 typedef basicblock_vec::iterator basicblock_vec_p;
00083 
00084 class DFPreds : public basicblock_set_map_map
00085 {
00086 private:
00087 
00088   // --- The procedure to analyze
00089 
00090   procNode * _proc;
00091 
00092   // --- The root node
00093 
00094   basicblockNode * _root;
00095 
00096   // --- Basic blocks in depth first order
00097 
00098   basicblock_vec df_vec;
00099 
00100   // --- Compute
00101 
00102   void depth_first_search(basicblockNode * node);
00103   void compute_dominance_frontiers();
00104   int _index;
00105 
00106 public:
00107 
00108   DFPreds(procNode * proc);
00109 };
00110 
00111 #endif // 

Generated on Thu Jan 10 12:06:19 2002 for C-Breeze by doxygen1.2.13.1 written by Dimitri van Heesch, © 1997-2001