[Bug rtl-optimization/79571] [5/6/7 Regression] ICE in Max. number of generated reload insns per insn is achieved (90)
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Mar 6 08:35:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79571
--- Comment #10 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Bernd Schmidt from comment #9)
> Maybe we just need to declare this address to be invalid for TImode. The
> following seems to cure the testcase; untested otherwise.
>
> Index: i386.c
> ===================================================================
> --- i386.c (revision 245685)
> +++ i386.c (working copy)
> @@ -15877,7 +15877,7 @@ ix86_validate_address_register (rtx op)
> be recognized. */
>
> static bool
> -ix86_legitimate_address_p (machine_mode, rtx addr, bool strict)
> +ix86_legitimate_address_p (machine_mode mem_mode, rtx addr, bool strict)
> {
> struct ix86_address parts;
> rtx base, index, disp;
> @@ -15899,7 +15899,8 @@ ix86_legitimate_address_p (machine_mode,
> {
> rtx reg = ix86_validate_address_register (base);
>
> - if (reg == NULL_RTX)
> + if (reg == NULL_RTX
> + || (GET_MODE (reg) != Pmode && mem_mode == TImode))
> return false;
>
> if ((strict && ! REG_OK_FOR_BASE_STRICT_P (reg))
Wouldn't it penalize other code? E.g. if you have a TImode MEM and store from
something in XMM register, then it doesn't have to be offsetable and can use
even zero_extend in the address.
More information about the Gcc-bugs
mailing list