[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