[patch] for PR23509

Zdenek Dvorak rakdver@atrey.karlin.mff.cuni.cz
Sat Aug 27 22:07:00 GMT 2005


Hello,

here is a new version of the patch, which makes replace_uses_by
to merge the alias info when pointers are propagated.
Bootstrapped & regtested on i686.

Zdenek

	PR tree-optimization/23509
	* tree-cfg.c (replace_uses_by): Use replace_exp.
	* tree-ssa-loop-ivopts.c (get_ref_tag): Assert that dereferenced
	pointers have name_mem_tag or type_mem_tag set.

Index: tree-cfg.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-cfg.c,v
retrieving revision 2.217
diff -c -3 -p -r2.217 tree-cfg.c
*** tree-cfg.c	24 Aug 2005 07:56:54 -0000	2.217
--- tree-cfg.c	27 Aug 2005 18:18:40 -0000
*************** replace_uses_by (tree name, tree val)
*** 1237,1244 ****
    FOR_EACH_IMM_USE_SAFE (use, imm_iter, name)
      {
        stmt = USE_STMT (use);
! 
!       SET_USE (use, val);
  
        if (TREE_CODE (stmt) == PHI_NODE)
  	{
--- 1237,1243 ----
    FOR_EACH_IMM_USE_SAFE (use, imm_iter, name)
      {
        stmt = USE_STMT (use);
!       replace_exp (use, val);
  
        if (TREE_CODE (stmt) == PHI_NODE)
  	{
Index: tree-ssa-loop-ivopts.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-ssa-loop-ivopts.c,v
retrieving revision 2.87
diff -c -3 -p -r2.87 tree-ssa-loop-ivopts.c
*** tree-ssa-loop-ivopts.c	13 Aug 2005 17:28:40 -0000	2.87
--- tree-ssa-loop-ivopts.c	27 Aug 2005 18:18:44 -0000
*************** get_ref_tag (tree ref)
*** 5448,5456 ****
      return NULL_TREE;
  
    if (TREE_CODE (var) == INDIRECT_REF)
-     var = TREE_OPERAND (var, 0);
-   if (TREE_CODE (var) == SSA_NAME)
      {
        if (SSA_NAME_PTR_INFO (var))
  	{
  	  tag = SSA_NAME_PTR_INFO (var)->name_mem_tag;
--- 5448,5460 ----
      return NULL_TREE;
  
    if (TREE_CODE (var) == INDIRECT_REF)
      {
+       /* In case the base is a dereference of a pointer, first check its name
+ 	 mem tag, and if it does not have one, use type mem tag.  */
+       var = TREE_OPERAND (var, 0);
+       if (TREE_CODE (var) != SSA_NAME)
+ 	return NULL_TREE;
+ 
        if (SSA_NAME_PTR_INFO (var))
  	{
  	  tag = SSA_NAME_PTR_INFO (var)->name_mem_tag;
*************** get_ref_tag (tree ref)
*** 5459,5476 ****
  	}
   
        var = SSA_NAME_VAR (var);
      }
!  
!   if (DECL_P (var))
!     {
        tag = var_ann (var)->type_mem_tag;
        if (tag)
  	return tag;
  
        return var;
      }
- 
-   return NULL_TREE;
  }
  
  /* Copies the reference information from OLD_REF to NEW_REF.  */
--- 5463,5483 ----
  	}
   
        var = SSA_NAME_VAR (var);
+       tag = var_ann (var)->type_mem_tag;
+       gcc_assert (tag != NULL_TREE);
+       return tag;
      }
!   else
!     { 
!       if (!DECL_P (var))
! 	return NULL_TREE;
! 
        tag = var_ann (var)->type_mem_tag;
        if (tag)
  	return tag;
  
        return var;
      }
  }
  
  /* Copies the reference information from OLD_REF to NEW_REF.  */



More information about the Gcc-patches mailing list