--- gcc/alias.c (/gcc-local/trunk) (revision 30596) +++ gcc/alias.c (/gcc-local/export-ddg) (revision 30596) @@ -46,6 +46,7 @@ along with GCC; see the file COPYING3. #include "tree-pass.h" #include "ipa-type-escape.h" #include "df.h" +#include "tree-data-ref-export.h" /* The aliasing API provided here solves related but different problems: @@ -2127,6 +2128,8 @@ true_dependence (const_rtx mem, enum mac || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER) return 1; + may_alias_mems_by_ddr (x, mem, 0); + if (DIFFERENT_ALIAS_SETS_P (x, mem)) return 0; @@ -2161,6 +2164,9 @@ true_dependence (const_rtx mem, enum mac SIZE_FOR_MODE (x), x_addr, 0)) return 0; + if (! may_alias_mems_by_ddr (x, mem, 1)) + return 0; + if (aliases_everything_p (x)) return 1; @@ -2203,6 +2209,8 @@ canon_true_dependence (const_rtx mem, en || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER) return 1; + may_alias_mems_by_ddr (x, mem, 0); + if (DIFFERENT_ALIAS_SETS_P (x, mem)) return 0; @@ -2225,6 +2233,9 @@ canon_true_dependence (const_rtx mem, en SIZE_FOR_MODE (x), x_addr, 0)) return 0; + if (! may_alias_mems_by_ddr (x, mem, 1)) + return 0; + if (aliases_everything_p (x)) return 1; @@ -2265,6 +2276,8 @@ write_dependence_p (const_rtx mem, const || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER) return 1; + may_alias_mems_by_ddr (x, mem, 0); + if (DIFFERENT_ALIAS_SETS_P (x, mem)) return 0; @@ -2298,6 +2311,9 @@ write_dependence_p (const_rtx mem, const SIZE_FOR_MODE (x), x_addr, 0)) return 0; + if (! may_alias_mems_by_ddr (x, mem, 1)) + return 0; + fixed_scalar = fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr, rtx_addr_varies_p);