[PATCH][2/n] Allow anonymous SSA names, a bunch of new predicates for SSA names

Richard Guenther rguenther@suse.de
Fri Aug 3 12:54:00 GMT 2012


This adds a bunch of new SSA name predicates to remove explicit uses
of SSA_NAME_VAR.

Bootstrapped and tested on x86_64-unknown-linux-gnu.

I'm leaving this for comments.  This mainly removes this cases from
explicit covering in further patches.

Richard.

2012-08-03  Richard Guenther  <rguenther@suse.de>

	* tree.h (SSA_NAME_IS_VIRTUAL_OPERAND): New predicate.
	(SSA_NAME_HAS_PARM_OR_RESULT_DECL): Likewise.
	(SSA_NAME_HAS_RESULT_DECL): Likewise.
	(SSA_NAME_HAS_PARM_DECL): Likewise.
	(VAR_PARM_OR_RESULT_DECL_P): Likewise.
	(SSA_VAR_P): Simplify.
	* tree-ssanames.c (make_ssa_name_fn): Strengthen assert.
	* cfgexpand.c (expand_debug_expr): Use SSA_NAME_HAS_PARM_DECL.
	* fold-const.c (fold_comparison): Use SSA_NAME_HAS_PARM_DECL.
	* gimple.c (is_gimple_reg): Use SSA_NAME_IS_VIRTUAL_OPERAND.
	* ipa-inline-analysis.c (unmodified_parm): Use
	SSA_NAME_HAS_PARM_DECL.
	(eliminated_by_inlining_prob): Use SSA_NAME_HAS_RESULT_DECL.
	* ipa-prop.c (get_ancestor_addr_info): Use SSA_NAME_HAS_PARM_DECL.
	(ipa_analyze_virtual_call_uses): Likewise.
	* ipa-split.c (test_nonssa_use): Use SSA_NAME_HAS_RESULT_DECL.
	(consider_split): Likewise.
	(mark_nonssa_use): Likewise.
	* tree-cfg.c (verify_gimple_return): Likewise.
	* tree-complex.c (get_component_ssa_name): Switch default-def
	and VAR_DEL check.
	* tree-inline.c (remap_ssa_name): Likewise.  Use new predicates.
	* tree-into-ssa.c (prepare_block_for_update): Use
	SSA_NAME_IS_VIRTUAL_OPERAND.
	* tree-sra.c (replace_removed_params_ssa_names): Use
	SSA_NAME_HAS_PARM_DECL.
	* tree-ssa-coalesce.c (create_outofssa_var_map): Use
	SSA_NAME_HAS_RESULT_DECL.
	* tree-ssa-loop-ivopts.c (parm_decl_cost): Use SSA_NAME_HAS_PARM_DECL.
	* tree-ssa-operands.c (add_stmt_operand): Simplify.
	* tree-ssa-structalias.c (get_constraint_for_ssa_var): Use
	SSA_NAME_HAS_PARM_OR_RESULT_DECL.
	(get_fi_for_callee): Likewise.
	(find_what_p_points_to): Likewise.
	* tree-ssa-uninit.c (ssa_undefined_value_p): Use
	SSA_NAME_HAS_RESULT_DECL.
	* tree-ssa.c (verify_def): Likewise.

Index: trunk/gcc/cfgexpand.c
===================================================================
*** trunk.orig/gcc/cfgexpand.c	2012-08-03 12:49:33.000000000 +0200
--- trunk/gcc/cfgexpand.c	2012-08-03 13:21:46.695889693 +0200
*************** expand_debug_expr (tree exp)
*** 3360,3366 ****
  		   value is never used in the code, use PARM_DECL's
  		   DECL_RTL if set.  */
  		if (SSA_NAME_IS_DEFAULT_DEF (exp)
! 		    && TREE_CODE (SSA_NAME_VAR (exp)) == PARM_DECL)
  		  {
  		    op0 = expand_debug_parm_decl (SSA_NAME_VAR (exp));
  		    if (op0)
--- 3360,3366 ----
  		   value is never used in the code, use PARM_DECL's
  		   DECL_RTL if set.  */
  		if (SSA_NAME_IS_DEFAULT_DEF (exp)
! 		    && SSA_NAME_HAS_PARM_DECL (exp))
  		  {
  		    op0 = expand_debug_parm_decl (SSA_NAME_VAR (exp));
  		    if (op0)
Index: trunk/gcc/fold-const.c
===================================================================
*** trunk.orig/gcc/fold-const.c	2012-08-03 10:53:58.000000000 +0200
--- trunk/gcc/fold-const.c	2012-08-03 13:21:05.331891126 +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)
! 	   && SSA_NAME_HAS_PARM_DECL (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
!               && SSA_NAME_IS_DEFAULT_DEF (base0)
! 	      && SSA_NAME_HAS_PARM_DECL (base0)))
          {
            if (code == NE_EXPR)
              return constant_boolean_node (1, type);
Index: trunk/gcc/gimple.c
===================================================================
*** trunk.orig/gcc/gimple.c	2012-08-03 12:49:33.000000000 +0200
--- trunk/gcc/gimple.c	2012-08-03 13:01:27.451931909 +0200
*************** bool
*** 2783,2795 ****
  is_gimple_reg (tree t)
  {
    if (TREE_CODE (t) == SSA_NAME)
!     {
!       t = SSA_NAME_VAR (t);
!       if (TREE_CODE (t) == VAR_DECL
! 	  && VAR_DECL_IS_VIRTUAL_OPERAND (t))
! 	return false;
!       return true;
!     }
  
    if (TREE_CODE (t) == VAR_DECL
        && VAR_DECL_IS_VIRTUAL_OPERAND (t))
--- 2783,2789 ----
  is_gimple_reg (tree t)
  {
    if (TREE_CODE (t) == SSA_NAME)
!     return ! SSA_NAME_IS_VIRTUAL_OPERAND (t);
  
    if (TREE_CODE (t) == VAR_DECL
        && VAR_DECL_IS_VIRTUAL_OPERAND (t))
Index: trunk/gcc/ipa-inline-analysis.c
===================================================================
*** trunk.orig/gcc/ipa-inline-analysis.c	2012-08-03 12:49:33.000000000 +0200
--- trunk/gcc/ipa-inline-analysis.c	2012-08-03 13:22:01.648889182 +0200
*************** unmodified_parm (gimple stmt, tree op)
*** 1271,1277 ****
    /* SSA_NAME referring to parm default def?  */
    if (TREE_CODE (op) == SSA_NAME
        && SSA_NAME_IS_DEFAULT_DEF (op)
!       && TREE_CODE (SSA_NAME_VAR (op)) == PARM_DECL)
      return SSA_NAME_VAR (op);
    /* Non-SSA parm reference?  */
    if (TREE_CODE (op) == PARM_DECL)
--- 1271,1277 ----
    /* SSA_NAME referring to parm default def?  */
    if (TREE_CODE (op) == SSA_NAME
        && SSA_NAME_IS_DEFAULT_DEF (op)
!       && SSA_NAME_HAS_PARM_DECL (op))
      return SSA_NAME_VAR (op);
    /* Non-SSA parm reference?  */
    if (TREE_CODE (op) == PARM_DECL)
*************** eliminated_by_inlining_prob (gimple stmt
*** 1394,1402 ****
  	        || (TREE_CODE(inner_lhs) == MEM_REF
  		     && (unmodified_parm (stmt, TREE_OPERAND (inner_lhs, 0))
  			 || (TREE_CODE (TREE_OPERAND (inner_lhs, 0)) == SSA_NAME
! 			     && TREE_CODE (SSA_NAME_VAR
! 					    (TREE_OPERAND (inner_lhs, 0)))
! 			     == RESULT_DECL))))
  	      lhs_free = true;
  	    if (lhs_free
  		&& (is_gimple_reg (rhs) || is_gimple_min_invariant (rhs)))
--- 1394,1401 ----
  	        || (TREE_CODE(inner_lhs) == MEM_REF
  		     && (unmodified_parm (stmt, TREE_OPERAND (inner_lhs, 0))
  			 || (TREE_CODE (TREE_OPERAND (inner_lhs, 0)) == SSA_NAME
! 			     && SSA_NAME_HAS_RESULT_DECL
! 				  (TREE_OPERAND (inner_lhs, 0))))))
  	      lhs_free = true;
  	    if (lhs_free
  		&& (is_gimple_reg (rhs) || is_gimple_min_invariant (rhs)))
Index: trunk/gcc/ipa-prop.c
===================================================================
*** trunk.orig/gcc/ipa-prop.c	2012-08-02 13:39:40.000000000 +0200
--- trunk/gcc/ipa-prop.c	2012-08-03 13:23:21.054886415 +0200
*************** get_ancestor_addr_info (gimple assign, t
*** 796,802 ****
    parm = TREE_OPERAND (expr, 0);
    if (TREE_CODE (parm) != SSA_NAME
        || !SSA_NAME_IS_DEFAULT_DEF (parm)
!       || TREE_CODE (SSA_NAME_VAR (parm)) != PARM_DECL)
      return NULL_TREE;
  
    *offset += mem_ref_offset (expr).low * BITS_PER_UNIT;
--- 796,802 ----
    parm = TREE_OPERAND (expr, 0);
    if (TREE_CODE (parm) != SSA_NAME
        || !SSA_NAME_IS_DEFAULT_DEF (parm)
!       || !SSA_NAME_HAS_PARM_DECL (parm))
      return NULL_TREE;
  
    *offset += mem_ref_offset (expr).low * BITS_PER_UNIT;
*************** ipa_analyze_virtual_call_uses (struct cg
*** 1514,1520 ****
  
    if (SSA_NAME_IS_DEFAULT_DEF (obj))
      {
!       if (TREE_CODE (SSA_NAME_VAR (obj)) != PARM_DECL)
  	return;
  
        anc_offset = 0;
--- 1514,1520 ----
  
    if (SSA_NAME_IS_DEFAULT_DEF (obj))
      {
!       if (!SSA_NAME_HAS_PARM_DECL (obj))
  	return;
  
        anc_offset = 0;
Index: trunk/gcc/ipa-split.c
===================================================================
*** trunk.orig/gcc/ipa-split.c	2012-08-03 10:54:00.000000000 +0200
--- trunk/gcc/ipa-split.c	2012-08-03 13:24:13.710884591 +0200
*************** test_nonssa_use (gimple stmt ATTRIBUTE_U
*** 157,163 ****
       to pretend that the value pointed to is actual result decl.  */
    if ((TREE_CODE (t) == MEM_REF || INDIRECT_REF_P (t))
        && TREE_CODE (TREE_OPERAND (t, 0)) == SSA_NAME
!       && TREE_CODE (SSA_NAME_VAR (TREE_OPERAND (t, 0))) == RESULT_DECL
        && DECL_BY_REFERENCE (DECL_RESULT (current_function_decl)))
      return
        bitmap_bit_p ((bitmap)data,
--- 157,163 ----
       to pretend that the value pointed to is actual result decl.  */
    if ((TREE_CODE (t) == MEM_REF || INDIRECT_REF_P (t))
        && TREE_CODE (TREE_OPERAND (t, 0)) == SSA_NAME
!       && SSA_NAME_HAS_RESULT_DECL (TREE_OPERAND (t, 0))
        && DECL_BY_REFERENCE (DECL_RESULT (current_function_decl)))
      return
        bitmap_bit_p ((bitmap)data,
*************** consider_split (struct split_point *curr
*** 525,531 ****
    /* Special case is value returned by reference we record as if it was non-ssa
       set to result_decl.  */
    else if (TREE_CODE (retval) == SSA_NAME
! 	   && TREE_CODE (SSA_NAME_VAR (retval)) == RESULT_DECL
  	   && DECL_BY_REFERENCE (DECL_RESULT (current_function_decl)))
      current->split_part_set_retval
         = bitmap_bit_p (non_ssa_vars, DECL_UID (SSA_NAME_VAR (retval)));
--- 525,531 ----
    /* Special case is value returned by reference we record as if it was non-ssa
       set to result_decl.  */
    else if (TREE_CODE (retval) == SSA_NAME
! 	   && SSA_NAME_HAS_RESULT_DECL (retval)
  	   && DECL_BY_REFERENCE (DECL_RESULT (current_function_decl)))
      current->split_part_set_retval
         = bitmap_bit_p (non_ssa_vars, DECL_UID (SSA_NAME_VAR (retval)));
*************** mark_nonssa_use (gimple stmt ATTRIBUTE_U
*** 698,704 ****
       to pretend that the value pointed to is actual result decl.  */
    if ((TREE_CODE (t) == MEM_REF || INDIRECT_REF_P (t))
        && TREE_CODE (TREE_OPERAND (t, 0)) == SSA_NAME
!       && TREE_CODE (SSA_NAME_VAR (TREE_OPERAND (t, 0))) == RESULT_DECL
        && DECL_BY_REFERENCE (DECL_RESULT (current_function_decl)))
      return
        bitmap_bit_p ((bitmap)data,
--- 698,704 ----
       to pretend that the value pointed to is actual result decl.  */
    if ((TREE_CODE (t) == MEM_REF || INDIRECT_REF_P (t))
        && TREE_CODE (TREE_OPERAND (t, 0)) == SSA_NAME
!       && SSA_NAME_HAS_RESULT_DECL (TREE_OPERAND (t, 0))
        && DECL_BY_REFERENCE (DECL_RESULT (current_function_decl)))
      return
        bitmap_bit_p ((bitmap)data,
Index: trunk/gcc/tree-cfg.c
===================================================================
*** trunk.orig/gcc/tree-cfg.c	2012-08-03 12:49:33.000000000 +0200
--- trunk/gcc/tree-cfg.c	2012-08-03 13:08:53.232916475 +0200
*************** verify_gimple_return (gimple stmt)
*** 4176,4182 ****
    if ((TREE_CODE (op) == RESULT_DECL
         && DECL_BY_REFERENCE (op))
        || (TREE_CODE (op) == SSA_NAME
! 	  && TREE_CODE (SSA_NAME_VAR (op)) == RESULT_DECL
  	  && DECL_BY_REFERENCE (SSA_NAME_VAR (op))))
      op = TREE_TYPE (op);
  
--- 4176,4182 ----
    if ((TREE_CODE (op) == RESULT_DECL
         && DECL_BY_REFERENCE (op))
        || (TREE_CODE (op) == SSA_NAME
! 	  && SSA_NAME_HAS_RESULT_DECL (op)
  	  && DECL_BY_REFERENCE (SSA_NAME_VAR (op))))
      op = TREE_TYPE (op);
  
Index: trunk/gcc/tree-complex.c
===================================================================
*** trunk.orig/gcc/tree-complex.c	2012-08-02 13:39:40.000000000 +0200
--- trunk/gcc/tree-complex.c	2012-08-03 13:24:36.339883825 +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-03 12:49:33.000000000 +0200
--- trunk/gcc/tree-inline.c	2012-08-03 13:26:28.543879939 +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)
! 	  && SSA_NAME_HAS_PARM_DECL (name)
  	  && id->entry_bb == NULL
  	  && single_succ_p (ENTRY_BLOCK_PTR))
  	{
*************** remap_ssa_name (tree name, copy_body_dat
*** 229,235 ****
       inlining:  this saves us from need to introduce PHI node in a case
       return value is just partly initialized.  */
    if ((TREE_CODE (new_tree) == VAR_DECL || TREE_CODE (new_tree) == PARM_DECL)
!       && (TREE_CODE (SSA_NAME_VAR (name)) != RESULT_DECL
  	  || !id->transform_return_to_modify))
      {
        struct ptr_info_def *pi;
--- 229,235 ----
       inlining:  this saves us from need to introduce PHI node in a case
       return value is just partly initialized.  */
    if ((TREE_CODE (new_tree) == VAR_DECL || TREE_CODE (new_tree) == PARM_DECL)
!       && (!SSA_NAME_HAS_RESULT_DECL (name)
  	  || !id->transform_return_to_modify))
      {
        struct ptr_info_def *pi;
*************** remap_ssa_name (tree name, copy_body_dat
*** 259,265 ****
  	     regions of the CFG, but this is expensive to test.  */
  	  if (id->entry_bb
  	      && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name)
! 	      && TREE_CODE (SSA_NAME_VAR (name)) != PARM_DECL
  	      && (id->entry_bb != EDGE_SUCC (ENTRY_BLOCK_PTR, 0)->dest
  		  || EDGE_COUNT (id->entry_bb->preds) != 1))
  	    {
--- 259,265 ----
  	     regions of the CFG, but this is expensive to test.  */
  	  if (id->entry_bb
  	      && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name)
! 	      && ! SSA_NAME_HAS_PARM_DECL (name)
  	      && (id->entry_bb != EDGE_SUCC (ENTRY_BLOCK_PTR, 0)->dest
  		  || EDGE_COUNT (id->entry_bb->preds) != 1))
  	    {
*************** remap_gimple_stmt (gimple stmt, copy_bod
*** 1184,1190 ****
        if (retval
  	  && (TREE_CODE (retval) != RESULT_DECL
  	      && (TREE_CODE (retval) != SSA_NAME
! 		  || TREE_CODE (SSA_NAME_VAR (retval)) != RESULT_DECL)))
          {
  	  copy = gimple_build_assign (id->retvar, retval);
  	  /* id->retvar is already substituted.  Skip it on later remapping.  */
--- 1184,1190 ----
        if (retval
  	  && (TREE_CODE (retval) != RESULT_DECL
  	      && (TREE_CODE (retval) != SSA_NAME
! 		  || ! SSA_NAME_HAS_RESULT_DECL (retval))))
          {
  	  copy = gimple_build_assign (id->retvar, retval);
  	  /* id->retvar is already substituted.  Skip it on later remapping.  */
Index: trunk/gcc/tree-into-ssa.c
===================================================================
*** trunk.orig/gcc/tree-into-ssa.c	2012-08-03 12:49:33.000000000 +0200
--- trunk/gcc/tree-into-ssa.c	2012-08-03 13:10:46.630912530 +0200
*************** prepare_block_for_update (basic_block bb
*** 2535,2548 ****
        gimple phi = gsi_stmt (si);
        tree lhs_sym, lhs = gimple_phi_result (phi);
  
-       lhs_sym = DECL_P (lhs) ? lhs : SSA_NAME_VAR (lhs);
- 
        if (TREE_CODE (lhs) == SSA_NAME
! 	  && (TREE_CODE (lhs_sym) != VAR_DECL
! 	      || !VAR_DECL_IS_VIRTUAL_OPERAND (lhs_sym)
! 	      || !cfun->gimple_df->rename_vops))
  	continue;
  
        mark_for_renaming (lhs_sym);
        mark_def_interesting (lhs_sym, phi, bb, insert_phi_p);
  
--- 2535,2546 ----
        gimple phi = gsi_stmt (si);
        tree lhs_sym, lhs = gimple_phi_result (phi);
  
        if (TREE_CODE (lhs) == SSA_NAME
! 	  && (! SSA_NAME_IS_VIRTUAL_OPERAND (lhs)
! 	      || ! cfun->gimple_df->rename_vops))
  	continue;
  
+       lhs_sym = DECL_P (lhs) ? lhs : SSA_NAME_VAR (lhs);
        mark_for_renaming (lhs_sym);
        mark_def_interesting (lhs_sym, phi, bb, insert_phi_p);
  
Index: trunk/gcc/tree-sra.c
===================================================================
*** trunk.orig/gcc/tree-sra.c	2012-08-03 12:49:33.000000000 +0200
--- trunk/gcc/tree-sra.c	2012-08-03 13:17:21.183898915 +0200
*************** replace_removed_params_ssa_names (gimple
*** 4234,4245 ****
    else
      gcc_unreachable ();
  
!   if (TREE_CODE (lhs) != SSA_NAME)
!     return false;
!   decl = SSA_NAME_VAR (lhs);
!   if (TREE_CODE (decl) != PARM_DECL)
      return false;
  
    adj = get_adjustment_for_base (adjustments, decl);
    if (!adj)
      return false;
--- 4234,4244 ----
    else
      gcc_unreachable ();
  
!   if (TREE_CODE (lhs) != SSA_NAME
!       || ! SSA_NAME_HAS_PARM_DECL (lhs))
      return false;
  
+   decl = SSA_NAME_VAR (lhs);
    adj = get_adjustment_for_base (adjustments, decl);
    if (!adj)
      return false;
Index: trunk/gcc/tree-ssa-coalesce.c
===================================================================
*** trunk.orig/gcc/tree-ssa-coalesce.c	2012-08-03 12:49:33.000000000 +0200
--- trunk/gcc/tree-ssa-coalesce.c	2012-08-03 13:08:05.407918128 +0200
*************** create_outofssa_var_map (coalesce_list_p
*** 1130,1136 ****
        if (var != NULL_TREE && is_gimple_reg (var))
          {
  	  /* Add coalesces between all the result decls.  */
! 	  if (TREE_CODE (SSA_NAME_VAR (var)) == RESULT_DECL)
  	    {
  	      if (first == NULL_TREE)
  		first = var;
--- 1130,1136 ----
        if (var != NULL_TREE && is_gimple_reg (var))
          {
  	  /* Add coalesces between all the result decls.  */
! 	  if (SSA_NAME_HAS_RESULT_DECL (var))
  	    {
  	      if (first == NULL_TREE)
  		first = var;
Index: trunk/gcc/tree-ssa-loop-ivopts.c
===================================================================
*** trunk.orig/gcc/tree-ssa-loop-ivopts.c	2012-08-03 12:49:33.000000000 +0200
--- trunk/gcc/tree-ssa-loop-ivopts.c	2012-08-03 13:15:30.095902735 +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)
!       && SSA_NAME_HAS_PARM_DECL (sbound)
        && 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-03 12:49:33.000000000 +0200
--- trunk/gcc/tree-ssa-operands.c	2012-08-03 13:04:44.771925081 +0200
*************** add_virtual_operand (gimple stmt ATTRIBU
*** 626,644 ****
  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)
--- 626,636 ----
  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
*** 647,653 ****
  	append_use (var_p);
      }
    else
!     add_virtual_operand (stmt, flags);
  }
  
  /* Mark the base address of REF as having its address taken.
--- 639,653 ----
  	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-03 12:49:33.000000000 +0200
--- trunk/gcc/tree-ssa-structalias.c	2012-08-03 13:28:00.464876746 +0200
*************** get_constraint_for_ssa_var (tree t, VEC(
*** 2742,2749 ****
       decl.  */
    if (TREE_CODE (t) == SSA_NAME
        && SSA_NAME_IS_DEFAULT_DEF (t)
!       && (TREE_CODE (SSA_NAME_VAR (t)) == PARM_DECL
! 	  || TREE_CODE (SSA_NAME_VAR (t)) == RESULT_DECL))
      {
        get_constraint_for_ssa_var (SSA_NAME_VAR (t), results, address_p);
        return;
--- 2742,2748 ----
       decl.  */
    if (TREE_CODE (t) == SSA_NAME
        && SSA_NAME_IS_DEFAULT_DEF (t)
!       && SSA_NAME_HAS_PARM_OR_RESULT_DECL (t))
      {
        get_constraint_for_ssa_var (SSA_NAME_VAR (t), results, address_p);
        return;
*************** 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);
--- 3975,3982 ----
    if (!fn || TREE_CODE (fn) != SSA_NAME)
      return get_varinfo (anything_id);
  
!   if (SSA_NAME_IS_DEFAULT_DEF (fn)
!       && SSA_NAME_HAS_PARM_OR_RESULT_DECL (fn))
      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);
--- 5913,5920 ----
    /* 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)
!       && SSA_NAME_HAS_PARM_OR_RESULT_DECL (p))
      lookup_p = SSA_NAME_VAR (p);
  
    vi = lookup_vi_for_tree (lookup_p);
Index: trunk/gcc/tree-ssa-uninit.c
===================================================================
*** trunk.orig/gcc/tree-ssa-uninit.c	2012-08-03 12:49:33.000000000 +0200
--- trunk/gcc/tree-ssa-uninit.c	2012-08-03 13:13:10.382907565 +0200
*************** ssa_undefined_value_p (tree t)
*** 89,95 ****
  
    /* When returning by reference the return address is actually a hidden
       parameter.  */
!   if (TREE_CODE (SSA_NAME_VAR (t)) == RESULT_DECL
        && DECL_BY_REFERENCE (SSA_NAME_VAR (t)))
      return false;
  
--- 89,95 ----
  
    /* When returning by reference the return address is actually a hidden
       parameter.  */
!   if (SSA_NAME_HAS_RESULT_DECL (t)
        && DECL_BY_REFERENCE (SSA_NAME_VAR (t)))
      return false;
  
Index: trunk/gcc/tree-ssa.c
===================================================================
*** trunk.orig/gcc/tree-ssa.c	2012-08-03 12:49:33.000000000 +0200
--- trunk/gcc/tree-ssa.c	2012-08-03 13:06:43.104920973 +0200
*************** verify_def (basic_block bb, basic_block
*** 681,687 ****
    if (verify_ssa_name (ssa_name, is_virtual))
      goto err;
  
!   if (TREE_CODE (SSA_NAME_VAR (ssa_name)) == RESULT_DECL
        && DECL_BY_REFERENCE (SSA_NAME_VAR (ssa_name)))
      {
        error ("RESULT_DECL should be read only when DECL_BY_REFERENCE is set");
--- 681,687 ----
    if (verify_ssa_name (ssa_name, is_virtual))
      goto err;
  
!   if (SSA_NAME_HAS_RESULT_DECL (ssa_name)
        && DECL_BY_REFERENCE (SSA_NAME_VAR (ssa_name)))
      {
        error ("RESULT_DECL should be read only when DECL_BY_REFERENCE is set");
Index: trunk/gcc/tree-ssanames.c
===================================================================
*** trunk.orig/gcc/tree-ssanames.c	2012-08-03 12:49:33.000000000 +0200
--- trunk/gcc/tree-ssanames.c	2012-08-03 12:52:24.443950711 +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,124 ----
    tree t;
    use_operand_p imm;
  
!   gcc_assert (VAR_PARM_OR_RESULT_DECL_P (var));
  
    /* 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-03 12:49:33.000000000 +0200
--- trunk/gcc/tree.h	2012-08-03 13:13:56.369905981 +0200
*************** struct GTY(()) tree_exp {
*** 2011,2016 ****
--- 2011,2033 ----
  #define SSA_NAME_IS_DEFAULT_DEF(NODE) \
      SSA_NAME_CHECK (NODE)->base.default_def_flag
  
+ /* Nonzero if this SSA_NAME is a virtual operand.  */
+ #define SSA_NAME_IS_VIRTUAL_OPERAND(NODE)				\
+     (! SSA_NAME_HAS_PARM_OR_RESULT_DECL(NODE)				\
+      && VAR_DECL_IS_VIRTUAL_OPERAND (SSA_NAME_VAR (NODE)))
+ 
+ /* Nonzero if this SSA_NAME represents a PARM_DECL or a RESULT_DECL.  */
+ #define SSA_NAME_HAS_PARM_OR_RESULT_DECL(NODE) \
+     (TREE_CODE (SSA_NAME_VAR (NODE)) != VAR_DECL)
+ 
+ /* Nonzero if this SSA_NAME represents a RESULT_DECL.  */
+ #define SSA_NAME_HAS_RESULT_DECL(NODE) \
+     (TREE_CODE (SSA_NAME_VAR (NODE)) == RESULT_DECL)
+ 
+ /* Nonzero if this SSA_NAME represents a PARM_DECL.  */
+ #define SSA_NAME_HAS_PARM_DECL(NODE) \
+     (TREE_CODE (SSA_NAME_VAR (NODE)) == PARM_DECL)
+ 
  /* Attributes for SSA_NAMEs for pointer-type variables.  */
  #define SSA_NAME_PTR_INFO(N) \
      SSA_NAME_CHECK (N)->ssa_name.ptr_info
*************** 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,2668 ----
  
  /* Define fields and accessors for nodes representing declared names.  */
  
! /* Nonzero if DECL represents a VAR_DECL, PARM_DECL or RESULT_DECL.  */
! #define VAR_PARM_OR_RESULT_DECL_P(DECL)					\
  	(TREE_CODE (DECL) == VAR_DECL					\
  	 || TREE_CODE (DECL) == PARM_DECL				\
! 	 || TREE_CODE (DECL) == RESULT_DECL)
  
+ /* Nonzero if DECL represents an SSA name or a variable that can possibly
+    have an associated SSA name.  */
+ #define SSA_VAR_P(DECL)							\
+ 	(VAR_PARM_OR_RESULT_DECL_P (DECL)				\
+ 	 || TREE_CODE (DECL) == SSA_NAME)
  
  
  



More information about the Gcc-patches mailing list