http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52436
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> 2013-04-02
08:27:51 UTC ---
The patch looks fine to me, though it might be a bit expensive. I'd
re-organize it like
if (TREE_INT_CST_LOW (arg1) % BITS_PER_UNIT == 0
&& TREE_INT_CST_LOW (arg2) % BITS_PER_UNIT == 0)
{
HOST_WIDE_INT coffset;
tree base = get_addr_base_and_unit_offset (arg0, &coffset);
if (base)
return fold_build2 (MEM_REF, type,
build_fold_addr_expr (base),
build_int_cst (build_pointer_type
(TYPE_MAIN_VARIANT (type)), coffset + TREE_INT_CST_LOW (arg1) /
BITS_PER_UNIT));
}
it avoids building a tree just to feed it into get_addr_base_and_unit_offset
It also avoids it if the access is not of byte-granularity which
get_addr_base_and_unit_offset does not even consider (it assumes it is fed
the argument of an ADDR_EXPR which obviously is byte-aligned).
The tree-flow-inline.h bits look ok.
I'm not sure what you need the forwprop / tree-ssa-propagate changes for.