[Bug middle-end/55259] plus_constant doesn't handle zero-extended address properly
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55259 --- Comment #2 from Eric Botcazou ebotcazou at gcc dot gnu.org 2012-11-11 21:52:53 UTC --- Author: ebotcazou Date: Sun Nov 11 21:52:49 2012 New Revision: 193415 URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=193415 Log: PR rtl-optimization/55247 PR middle-end/55259 * emit-rtl.c (adjust_address_1): If POINTERS_EXTEND_UNSIGNED 0, handle ZERO_EXTEND. * recog.c (offsettable_address_addr_space_p): Likewise. Added: trunk/gcc/testsuite/gcc.target/i386/pr55247-2.c Modified: trunk/gcc/ChangeLog trunk/gcc/emit-rtl.c trunk/gcc/recog.c trunk/gcc/testsuite/ChangeLog
[Bug middle-end/55259] plus_constant doesn't handle zero-extended address properly
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55259 H.J. Lu hjl.tools at gmail dot com changed: What|Removed |Added Status|UNCONFIRMED |RESOLVED Resolution||FIXED Target Milestone|--- |4.8.0 --- Comment #3 from H.J. Lu hjl.tools at gmail dot com 2012-11-11 23:54:51 UTC --- Fixed.
[Bug middle-end/55259] plus_constant doesn't handle zero-extended address properly
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55259 --- Comment #1 from H.J. Lu hjl.tools at gmail dot com 2012-11-10 04:13:32 UTC --- A potential fix: diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 95bbfa7..d7c454c 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -2109,6 +2109,12 @@ adjust_address_1 (rtx memref, enum machine_mode mode, HOS T_WIDE_INT offset, addr = gen_rtx_LO_SUM (address_mode, XEXP (addr, 0), plus_constant (address_mode, XEXP (addr, 1), offset)); + else if (GET_CODE (addr) == ZERO_EXTEND) +{ + addr = XEXP (addr, 0); + addr = plus_constant (GET_MODE (addr), addr, offset); + addr = gen_rtx_ZERO_EXTEND (address_mode, addr); +} else addr = plus_constant (address_mode, addr, offset); }