[Bug middle-end/79514] [5/6/7 Regression] ICE in curr_insn_transform, at lra-constraints.c:3773
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Mar 2 08:04:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79514
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Uroš Bizjak from comment #6)
> (In reply to Uroš Bizjak from comment #5)
> > Maybe we should use our own pushxf expander?
>
> No. Middle end should be fixed. x86 does not define any of HAVE_PRE_MODIFY
> macros.
So what it can emit? PRE_DEC is not really right, because GET_MODE_SIZE
(XFmode) is in that case 12, but PUSH_ROUNDING increases that to 16. But the
push actually needs to adjust sp by 16, not 12.
With -m128bit-long-double, rounded_size is equal to GET_MODE_SIZE and we get
to:
4124 if (GET_MODE_SIZE (mode) == rounded_size)
4125 dest_addr = gen_rtx_fmt_e (STACK_PUSH_CODE, Pmode,
stack_pointer_rtx);
I think i386.md should have a pushxf1 expander enabled at least for the case
when GET_MODE_SIZE (XFmode) != PUSH_ROUNDING (GET_MODE_SIZE (XFmode)) and just
not use PRE_DEC in the pattern at all, just sp subtraction plus store.
More information about the Gcc-bugs
mailing list