1 /* Static Single Assignment (SSA) definitions for GNU C-Compiler 2 Copyright (C) 2000, 2001 Free Software Foundation, Inc. 3 Written by Jeffrey D. Oldham <oldham@codesourcery.com>. 4 5 This file is part of GCC. 6 7 GCC is free software; you can redistribute it and/or modify it under 8 the terms of the GNU General Public License as published by the Free 9 Software Foundation; either version 2, or (at your option) any later 10 version. 11 12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 13 WARRANTY; without even the implied warranty of MERCHANTABILITY or 14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15 for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with GCC; see the file COPYING. If not, write to the Free 19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 20 02111-1307, USA. */ 21 22 23 /* Main SSA routines. */ 24 extern void convert_to_ssa PARAMS ((void)); 25 extern void convert_from_ssa PARAMS ((void)); 26 typedef int (*successor_phi_fn) PARAMS ((rtx, int, int, void *)); 27 extern int for_each_successor_phi PARAMS ((basic_block bb, 28 successor_phi_fn, 29 void *)); 30 void compute_dominance_frontiers PARAMS ((sbitmap *frontiers, 31 dominance_info idom)); 32 extern int remove_phi_alternative PARAMS ((rtx, basic_block)); 33 34 35 /* Optimizations. */ 36 /* In ssa-dce.c */ 37 extern void ssa_eliminate_dead_code PARAMS ((void)); 38 39 /* In ssa-ccp.c */ 40 extern void ssa_const_prop PARAMS ((void)); 41 42 43 /* SSA definitions and uses. */ 44 /* This flag is set when the CFG is in SSA form. */ 45 extern int in_ssa_form; 46 47 /* Element I is the single instruction that sets register I. */ 48 extern GTY(()) varray_type ssa_definition; 49 50 /* Element I is an INSN_LIST of instructions that use register I. */ 51 extern varray_type ssa_uses; 52 53 54 /* Specify which hard registers should be converted. */ 55 56 /* All pseudo-registers (having register number >= 57 FIRST_PSEUDO_REGISTER) and hard registers satisfying 58 CONVERT_HARD_REGISTER_TO_SSA_P are converted to SSA form. */ 59 60 /* Given a hard register number REG_NO, return nonzero if and only if 61 the register should be converted to SSA. */ 62 63 #ifndef CONVERT_HARD_REGISTER_TO_SSA_P 64 #define CONVERT_HARD_REGISTER_TO_SSA_P(REG_NO) (0) /* default of no hard registers */ 65 #endif /* CONVERT_HARD_REGISTER_TO_SSA_P */ 66 67 /* Given a register number REG_NO, return nonzero if and only if the 68 register should be converted to SSA. */ 69 70 #define CONVERT_REGISTER_TO_SSA_P(REG_NO) \ 71 ((!HARD_REGISTER_NUM_P (REG_NO)) || \ 72 (CONVERT_HARD_REGISTER_TO_SSA_P (REG_NO))) 73