------- Comment #24 from rguenth at gcc dot gnu dot org 2010-04-02 15:20 ------- Alternative patch as suggested by Richard on IRC - it doesn't make sense to retain MEM_EXPR w/o MEM_OFFSET.
Index: gcc/cfgcleanup.c =================================================================== --- gcc/cfgcleanup.c (revision 157942) +++ gcc/cfgcleanup.c (working copy) @@ -891,18 +891,14 @@ merge_memattrs (rtx x, rtx y) set_mem_alias_set (y, 0); } - if (! mem_expr_equal_p (MEM_EXPR (x), MEM_EXPR (y))) + if (! mem_expr_equal_p (MEM_EXPR (x), MEM_EXPR (y)) + || MEM_OFFSET (x) != MEM_OFFSET (y)) { set_mem_expr (x, 0); set_mem_expr (y, 0); set_mem_offset (x, 0); set_mem_offset (y, 0); } - else if (MEM_OFFSET (x) != MEM_OFFSET (y)) - { - set_mem_offset (x, 0); - set_mem_offset (y, 0); - } if (!MEM_SIZE (x)) mem_size = NULL_RTX; -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC|rguenther at suse dot de |jakub at gcc dot gnu dot | |org, rguenth at gcc dot gnu | |dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42509