1/* Generic dominator tree walker 2 Copyright (C) 2003-2015 Free Software Foundation, Inc. 3 Contributed by Diego Novillo <dnovillo@redhat.com> 4 5This file is part of GCC. 6 7GCC is free software; you can redistribute it and/or modify 8it under the terms of the GNU General Public License as published by 9the Free Software Foundation; either version 3, or (at your option) 10any later version. 11 12GCC is distributed in the hope that it will be useful, 13but WITHOUT ANY WARRANTY; without even the implied warranty of 14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15GNU General Public License for more details. 16 17You should have received a copy of the GNU General Public License 18along with GCC; see the file COPYING3. If not see 19<http://www.gnu.org/licenses/>. */ 20 21#ifndef GCC_DOM_WALK_H 22#define GCC_DOM_WALK_H 23 24/** 25 * This is the main class for the dominator walker. It is expected that 26 * consumers will have a custom class inheriting from it, which will over ride 27 * at least one of before_dom_children and after_dom_children to implement the 28 * custom behavior. 29 */ 30class dom_walker 31{ 32public: 33 dom_walker (cdi_direction direction) : m_dom_direction (direction) {} 34 35 /* Walk the dominator tree. */ 36 void walk (basic_block); 37 38 /* Function to call before the recursive walk of the dominator children. */ 39 virtual void before_dom_children (basic_block) {} 40 41 /* Function to call after the recursive walk of the dominator children. */ 42 virtual void after_dom_children (basic_block) {} 43 44private: 45 /* This is the direction of the dominator tree we want to walk. i.e., 46 if it is set to CDI_DOMINATORS, then we walk the dominator tree, 47 if it is set to CDI_POST_DOMINATORS, then we walk the post 48 dominator tree. */ 49 const ENUM_BITFIELD (cdi_direction) m_dom_direction : 2; 50}; 51 52#endif 53