[PATCH][5/n] Allow anonymous SSA names
Richard Guenther
rguenther@suse.de
Thu Aug 9 10:58:00 GMT 2012
Another set of small changes.
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.
Richard.
2012-08-09 Richard Guenther <rguenther@suse.de>
* tree.h (SSA_VAR_P): Simplify.
* tree-ssanames.c (make_ssa_name_fn): Strengthen assert.
* fold-const.c (fold_comparison): Check for default def first
before checking for PARM_DECL.
* tree-complex.c (get_component_ssa_name): Likewise.
* tree-inline.c (remap_ssa_name): Likewise.
* tree-ssa-loop-ivopts.c (parm_decl_cost): Likewise.
* tree-ssa-structalias.c (get_fi_for_callee): Likewise.
(find_what_p_points_to): Likewise.
* tree-ssa-operands.c (add_stmt_operand): Simplify.
Index: trunk/gcc/fold-const.c
===================================================================
*** trunk.orig/gcc/fold-const.c 2012-08-08 16:49:38.000000000 +0200
--- trunk/gcc/fold-const.c 2012-08-09 11:08:52.273217092 +0200
*************** fold_comparison (location_t loc, enum tr
*** 8940,8955 ****
&& auto_var_in_fn_p (base0, current_function_decl)
&& !indirect_base1
&& TREE_CODE (base1) == SSA_NAME
! && TREE_CODE (SSA_NAME_VAR (base1)) == PARM_DECL
! && SSA_NAME_IS_DEFAULT_DEF (base1))
|| (TREE_CODE (arg1) == ADDR_EXPR
&& indirect_base1
&& TREE_CODE (base1) == VAR_DECL
&& auto_var_in_fn_p (base1, current_function_decl)
&& !indirect_base0
&& TREE_CODE (base0) == SSA_NAME
! && TREE_CODE (SSA_NAME_VAR (base0)) == PARM_DECL
! && SSA_NAME_IS_DEFAULT_DEF (base0)))
{
if (code == NE_EXPR)
return constant_boolean_node (1, type);
--- 8940,8955 ----
&& auto_var_in_fn_p (base0, current_function_decl)
&& !indirect_base1
&& TREE_CODE (base1) == SSA_NAME
! && SSA_NAME_IS_DEFAULT_DEF (base1)
! && TREE_CODE (SSA_NAME_VAR (base1)) == PARM_DECL)
|| (TREE_CODE (arg1) == ADDR_EXPR
&& indirect_base1
&& TREE_CODE (base1) == VAR_DECL
&& auto_var_in_fn_p (base1, current_function_decl)
&& !indirect_base0
&& TREE_CODE (base0) == SSA_NAME
! && SSA_NAME_IS_DEFAULT_DEF (base0)
! && TREE_CODE (SSA_NAME_VAR (base0)) == PARM_DECL))
{
if (code == NE_EXPR)
return constant_boolean_node (1, type);
Index: trunk/gcc/tree-complex.c
===================================================================
*** trunk.orig/gcc/tree-complex.c 2012-08-08 16:49:38.000000000 +0200
--- trunk/gcc/tree-complex.c 2012-08-09 11:19:15.799195507 +0200
*************** get_component_ssa_name (tree ssa_name, b
*** 495,502 ****
is used in an abnormal phi, and whether it's uninitialized. */
SSA_NAME_OCCURS_IN_ABNORMAL_PHI (ret)
= SSA_NAME_OCCURS_IN_ABNORMAL_PHI (ssa_name);
! if (TREE_CODE (SSA_NAME_VAR (ssa_name)) == VAR_DECL
! && SSA_NAME_IS_DEFAULT_DEF (ssa_name))
{
SSA_NAME_DEF_STMT (ret) = SSA_NAME_DEF_STMT (ssa_name);
set_ssa_default_def (cfun, SSA_NAME_VAR (ret), ret);
--- 495,502 ----
is used in an abnormal phi, and whether it's uninitialized. */
SSA_NAME_OCCURS_IN_ABNORMAL_PHI (ret)
= SSA_NAME_OCCURS_IN_ABNORMAL_PHI (ssa_name);
! if (SSA_NAME_IS_DEFAULT_DEF (ssa_name)
! && TREE_CODE (SSA_NAME_VAR (ssa_name)) == VAR_DECL)
{
SSA_NAME_DEF_STMT (ret) = SSA_NAME_DEF_STMT (ssa_name);
set_ssa_default_def (cfun, SSA_NAME_VAR (ret), ret);
Index: trunk/gcc/tree-inline.c
===================================================================
*** trunk.orig/gcc/tree-inline.c 2012-08-08 16:49:38.000000000 +0200
--- trunk/gcc/tree-inline.c 2012-08-09 11:19:15.800195507 +0200
*************** remap_ssa_name (tree name, copy_body_dat
*** 187,194 ****
if (processing_debug_stmt)
{
! if (TREE_CODE (SSA_NAME_VAR (name)) == PARM_DECL
! && SSA_NAME_IS_DEFAULT_DEF (name)
&& id->entry_bb == NULL
&& single_succ_p (ENTRY_BLOCK_PTR))
{
--- 187,194 ----
if (processing_debug_stmt)
{
! if (SSA_NAME_IS_DEFAULT_DEF (name)
! && TREE_CODE (SSA_NAME_VAR (name)) == PARM_DECL
&& id->entry_bb == NULL
&& single_succ_p (ENTRY_BLOCK_PTR))
{
Index: trunk/gcc/tree-ssa-loop-ivopts.c
===================================================================
*** trunk.orig/gcc/tree-ssa-loop-ivopts.c 2012-08-08 16:49:38.000000000 +0200
--- trunk/gcc/tree-ssa-loop-ivopts.c 2012-08-09 11:19:15.801195507 +0200
*************** parm_decl_cost (struct ivopts_data *data
*** 4657,4664 ****
STRIP_NOPS (sbound);
if (TREE_CODE (sbound) == SSA_NAME
&& TREE_CODE (SSA_NAME_VAR (sbound)) == PARM_DECL
- && gimple_nop_p (SSA_NAME_DEF_STMT (sbound))
&& data->body_includes_call)
return COSTS_N_INSNS (1);
--- 4657,4664 ----
STRIP_NOPS (sbound);
if (TREE_CODE (sbound) == SSA_NAME
+ && SSA_NAME_IS_DEFAULT_DEF (sbound)
&& TREE_CODE (SSA_NAME_VAR (sbound)) == PARM_DECL
&& data->body_includes_call)
return COSTS_N_INSNS (1);
Index: trunk/gcc/tree-ssa-operands.c
===================================================================
*** trunk.orig/gcc/tree-ssa-operands.c 2012-08-08 16:49:46.000000000 +0200
--- trunk/gcc/tree-ssa-operands.c 2012-08-08 16:50:16.663499320 +0200
*************** add_virtual_operand (gimple stmt ATTRIBU
*** 615,633 ****
static void
add_stmt_operand (tree *var_p, gimple stmt, int flags)
{
! tree var, sym;
gcc_assert (SSA_VAR_P (*var_p));
! var = *var_p;
! sym = (TREE_CODE (var) == SSA_NAME ? SSA_NAME_VAR (var) : var);
!
! /* Mark statements with volatile operands. */
! if (!(flags & opf_no_vops)
! && TREE_THIS_VOLATILE (sym))
! gimple_set_has_volatile_ops (stmt, true);
!
! if (is_gimple_reg (sym))
{
/* The variable is a GIMPLE register. Add it to real operands. */
if (flags & opf_def)
--- 615,625 ----
static void
add_stmt_operand (tree *var_p, gimple stmt, int flags)
{
! tree var = *var_p;
gcc_assert (SSA_VAR_P (*var_p));
! if (is_gimple_reg (var))
{
/* The variable is a GIMPLE register. Add it to real operands. */
if (flags & opf_def)
*************** add_stmt_operand (tree *var_p, gimple st
*** 636,642 ****
append_use (var_p);
}
else
! add_virtual_operand (stmt, flags);
}
/* Mark the base address of REF as having its address taken.
--- 628,642 ----
append_use (var_p);
}
else
! {
! /* Mark statements with volatile operands. */
! if (!(flags & opf_no_vops)
! && TREE_THIS_VOLATILE (var))
! gimple_set_has_volatile_ops (stmt, true);
!
! /* The variable is a memory access. Add virtual operands. */
! add_virtual_operand (stmt, flags);
! }
}
/* Mark the base address of REF as having its address taken.
Index: trunk/gcc/tree-ssa-structalias.c
===================================================================
*** trunk.orig/gcc/tree-ssa-structalias.c 2012-08-08 16:49:38.000000000 +0200
--- trunk/gcc/tree-ssa-structalias.c 2012-08-09 11:20:31.608192901 +0200
*************** get_fi_for_callee (gimple call)
*** 3976,3984 ****
if (!fn || TREE_CODE (fn) != SSA_NAME)
return get_varinfo (anything_id);
! if ((TREE_CODE (SSA_NAME_VAR (fn)) == PARM_DECL
! || TREE_CODE (SSA_NAME_VAR (fn)) == RESULT_DECL)
! && SSA_NAME_IS_DEFAULT_DEF (fn))
fn = SSA_NAME_VAR (fn);
return get_vi_for_tree (fn);
--- 3976,3984 ----
if (!fn || TREE_CODE (fn) != SSA_NAME)
return get_varinfo (anything_id);
! if (SSA_NAME_IS_DEFAULT_DEF (fn)
! && (TREE_CODE (SSA_NAME_VAR (fn)) == PARM_DECL
! || TREE_CODE (SSA_NAME_VAR (fn)) == RESULT_DECL))
fn = SSA_NAME_VAR (fn);
return get_vi_for_tree (fn);
*************** find_what_p_points_to (tree p)
*** 5915,5923 ****
/* For parameters, get at the points-to set for the actual parm
decl. */
if (TREE_CODE (p) == SSA_NAME
&& (TREE_CODE (SSA_NAME_VAR (p)) == PARM_DECL
! || TREE_CODE (SSA_NAME_VAR (p)) == RESULT_DECL)
! && SSA_NAME_IS_DEFAULT_DEF (p))
lookup_p = SSA_NAME_VAR (p);
vi = lookup_vi_for_tree (lookup_p);
--- 5915,5923 ----
/* For parameters, get at the points-to set for the actual parm
decl. */
if (TREE_CODE (p) == SSA_NAME
+ && SSA_NAME_IS_DEFAULT_DEF (p)
&& (TREE_CODE (SSA_NAME_VAR (p)) == PARM_DECL
! || TREE_CODE (SSA_NAME_VAR (p)) == RESULT_DECL))
lookup_p = SSA_NAME_VAR (p);
vi = lookup_vi_for_tree (lookup_p);
Index: trunk/gcc/tree-ssanames.c
===================================================================
*** trunk.orig/gcc/tree-ssanames.c 2012-08-08 16:49:38.000000000 +0200
--- trunk/gcc/tree-ssanames.c 2012-08-09 11:22:03.026189723 +0200
*************** make_ssa_name_fn (struct function *fn, t
*** 118,124 ****
tree t;
use_operand_p imm;
! gcc_assert (DECL_P (var));
/* If our free list has an element, then use it. */
if (!VEC_empty (tree, FREE_SSANAMES (fn)))
--- 118,126 ----
tree t;
use_operand_p imm;
! gcc_assert (TREE_CODE (var) == VAR_DECL
! || TREE_CODE (var) == PARM_DECL
! || TREE_CODE (var) == RESULT_DECL);
/* If our free list has an element, then use it. */
if (!VEC_empty (tree, FREE_SSANAMES (fn)))
Index: trunk/gcc/tree.h
===================================================================
*** trunk.orig/gcc/tree.h 2012-08-08 16:49:38.000000000 +0200
--- trunk/gcc/tree.h 2012-08-09 11:22:54.653187917 +0200
*************** struct GTY (()) tree_binfo {
*** 2635,2650 ****
/* Define fields and accessors for nodes representing declared names. */
! /* Nonzero if DECL represents a variable for the SSA passes. */
#define SSA_VAR_P(DECL) \
(TREE_CODE (DECL) == VAR_DECL \
|| TREE_CODE (DECL) == PARM_DECL \
|| TREE_CODE (DECL) == RESULT_DECL \
! || (TREE_CODE (DECL) == SSA_NAME \
! && (TREE_CODE (SSA_NAME_VAR (DECL)) == VAR_DECL \
! || TREE_CODE (SSA_NAME_VAR (DECL)) == PARM_DECL \
! || TREE_CODE (SSA_NAME_VAR (DECL)) == RESULT_DECL)))
!
--- 2652,2664 ----
/* Define fields and accessors for nodes representing declared names. */
! /* Nonzero if DECL represents an SSA name or a variable that can possibly
! have an associated SSA name. */
#define SSA_VAR_P(DECL) \
(TREE_CODE (DECL) == VAR_DECL \
|| TREE_CODE (DECL) == PARM_DECL \
|| TREE_CODE (DECL) == RESULT_DECL \
! || TREE_CODE (DECL) == SSA_NAME)
More information about the Gcc-patches
mailing list