http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54781



Richard Biener <rguenth at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

             Status|WAITING                     |ASSIGNED

         AssignedTo|unassigned at gcc dot       |rguenth at gcc dot gnu.org

                   |gnu.org                     |



--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> 2012-12-17 
12:39:10 UTC ---

Ah, I'm testing the following, which seems to fix the testcase with a cross.



Index: alias.c

===================================================================

--- alias.c     (revision 194552)

+++ alias.c     (working copy)

@@ -283,20 +283,14 @@ ao_ref_from_mem (ao_ref *ref, const_rtx

   if (base == NULL_TREE)

     return false;



-  /* The tree oracle doesn't like to have these.  */

-  if (TREE_CODE (base) == FUNCTION_DECL

-      || TREE_CODE (base) == LABEL_DECL)

-    return false;

-

-  /* If this is a pointer dereference of a non-SSA_NAME punt.

-     ???  We could replace it with a pointer to anything.  */

-  if ((INDIRECT_REF_P (base)

-       || TREE_CODE (base) == MEM_REF)

-      && TREE_CODE (TREE_OPERAND (base, 0)) != SSA_NAME)

-    return false;

-  if (TREE_CODE (base) == TARGET_MEM_REF

-      && TMR_BASE (base)

-      && TREE_CODE (TMR_BASE (base)) != SSA_NAME)

+  /* The tree oracle doesn't like bases that are neither decls

+     nor indirect references of SSA names.  */

+  if (!DECL_P (base)

+      && (TREE_CODE (base) != MEM_REF

+         || TREE_CODE (TREE_OPERAND (base, 0)) != SSA_NAME)

+      && (TREE_CODE (base) != TARGET_MEM_REF

+         || (TMR_BASE (base)

+             && TREE_CODE (TMR_BASE (base)) != SSA_NAME)))

     return false;



   /* If this is a reference based on a partitioned decl replace the

Reply via email to