------- Comment #4 from jakub at gcc dot gnu dot org  2008-10-21 09:55 -------
I think this is rs6000_legitimate_address at fault here, it shouldn't say it is
valid memory address.  In the:
if (GET_CODE (x) == PRE_MODIFY block in that function,
rs6000_legitimate_offset_address_p (mode, XEXP (x, 1), reg_ok_strict)
is true because:
3649          if (mode == DFmode || mode == DDmode || !TARGET_POWERPC64)
3650            extra = 4;
3651          else if (offset & 3)
3652            return false;
only checks the offset being multiple of 4 if not DFmode or DDmode.  If that is
correct, I think rs6000_legitimate_address should in the PRE_MODIFY case
explicitly check that if offset is a constant that it is multiple of 4.


-- 

jakub at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dje at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37878

Reply via email to