[Bug target/63679] [5/6 Regression][AArch64] Failure to constant fold.
rguenther at suse dot de
gcc-bugzilla@gcc.gnu.org
Tue Aug 4 09:30:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63679
--- Comment #38 from rguenther at suse dot de <rguenther at suse dot de> ---
On Mon, 3 Aug 2015, alalaw01 at gcc dot gnu.org wrote:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63679
>
> --- Comment #37 from alalaw01 at gcc dot gnu.org ---
> Hmmm, no it's not the hashing - that pretty much ignores all types. It's the
> comparison in hashable_expr_equal_p, which just uses operand_equal_p,
> specifically this part (in fold-const.c):
>
> case MEM_REF:
> /* Require equal access sizes, and similar pointer types.
> We can have incomplete types for array references of
> variable-sized arrays from the Fortran frontend
> though. Also verify the types are compatible. */
> if (!((TYPE_SIZE (TREE_TYPE (arg0)) == TYPE_SIZE (TREE_TYPE (arg1))
> || (TYPE_SIZE (TREE_TYPE (arg0))
> && TYPE_SIZE (TREE_TYPE (arg1))
> && operand_equal_p (TYPE_SIZE (TREE_TYPE (arg0)),
> TYPE_SIZE (TREE_TYPE (arg1)),
> flags)))
> && types_compatible_p (TREE_TYPE (arg0), TREE_TYPE (arg1))
> && ((flags & OEP_ADDRESS_OF)
> || (alias_ptr_types_compatible_p
> (TREE_TYPE (TREE_OPERAND (arg0, 1)),
> TREE_TYPE (TREE_OPERAND (arg1, 1)))
> && (MR_DEPENDENCE_CLIQUE (arg0)
> == MR_DEPENDENCE_CLIQUE (arg1))
> && (MR_DEPENDENCE_BASE (arg0)
> == MR_DEPENDENCE_BASE (arg1))
> && (TYPE_ALIGN (TREE_TYPE (arg0))
> == TYPE_ALIGN (TREE_TYPE (arg1)))))))
>
> specifically, a pointer to int, and a pointer to an array of int, are not
> alias_ptr_types_compatible_p. (I'm not clear that they should be, either!?)
As said neither the hashing nor operand_equal_p are perfect fits for
the constraints on equality DOM needs to put on memory references.
More information about the Gcc-bugs
mailing list