/* Tree SCC value numbering Copyright (C) 2007 Free Software Foundation, Inc. Contributed by Daniel Berlin This file is part of GCC. GCC is free software; you can redistribute it and/or modify under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ #ifndef TREE_SSA_SCCVN_H #define TREE_SSA_SCCVN_H /* TOP of the VN lattice. */ extern tree VN_TOP; typedef struct vn_ssa_aux { /* Value number. This may be an SSA name or a constant. */ tree valnum; /* Representative expression, if not a direct constant. */ tree expr; /* SCC information. */ unsigned int dfsnum; unsigned int low; unsigned visited : 1; unsigned on_sccstack : 1; /* Whether the representative expression contains constants. */ unsigned has_constants : 1; /* Whether the SSA_NAME has been value numbered already. This is only saying whether visit_use has been called on it at least once. It cannot be used to avoid visitation for SSA_NAME's involved in non-singleton SCC's. */ unsigned use_processed : 1; /* Whether the SSA_NAME has no defining statement and thus an insertion of such with EXPR as definition is required before a use can be created of it. */ unsigned needs_insertion : 1; } *vn_ssa_aux_t; /* Return the value numbering info for an SSA_NAME. */ extern vn_ssa_aux_t VN_INFO (tree); extern vn_ssa_aux_t VN_INFO_GET (tree); bool run_scc_vn (bool); void free_scc_vn (void); void switch_to_PRE_table (void); tree vn_nary_op_lookup (tree); void vn_nary_op_insert (tree, tree); tree vn_reference_lookup (tree, VEC (tree, gc) *); void vn_reference_insert (tree, tree, VEC (tree, gc) *); VEC (tree, gc) *shared_vuses_from_stmt (tree); VEC (tree, gc) *copy_vuses_from_stmt (tree); #endif /* TREE_SSA_SCCVN_H */