https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82002
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Daniel Santos from comment #2)
> Another problem when we throw in an ms to sysv call:
> /home/daniel/proj/sys/gcc/git/gcc/testsuite/gcc.target/i386/pr82002-2a.c: In
> function 'b':
> /home/daniel/proj/sys/gcc/git/gcc/testsuite/gcc.target/i386/pr82002-2a.c:12:
> 1: error: unrecognizable insn:
> (insn/f 36 35 37 2 (set (mem/c:V4SF (plus:DI (reg/f:DI 7 sp)
> (const_int 10000000016 [0x2540be410])) [2 S16 A128])
> (reg:V4SF 27 xmm6))
> "/home/daniel/proj/sys/gcc/git/gcc/testsuite/gcc.target/i386/pr82002-2a.c":7
> -1
> (expr_list:REG_DEAD (reg:V4SF 27 xmm6)
> (expr_list:REG_CFA_EXPRESSION (set (mem/c:V4SF (plus:DI (reg/f:DI 7
> sp)
> (const_int 10000000016 [0x2540be410])) [2 S16 A128])
> (reg:V4SF 27 xmm6))
> (nil))))
> during RTL pass: cprop_hardreg
> /home/daniel/proj/sys/gcc/git/gcc/testsuite/gcc.target/i386/pr82002-2a.c:12:
> 1: internal compiler error: in extract_insn, at recog.c:2306
> 0x5c1958 _fatal_insn(char const*, rtx_def const*, char const*, int, char
> const*)
> /home/daniel/proj/sys/gcc/git/gcc/rtl-error.c:108
> 0x5c1974 _fatal_insn_not_found(rtx_def const*, char const*, int, char const*)
> /home/daniel/proj/sys/gcc/git/gcc/rtl-error.c:116
> 0xba05a9 extract_insn(rtx_insn*)
> /home/daniel/proj/sys/gcc/git/gcc/recog.c:2306
> 0xba15e8 extract_constrain_insn(rtx_insn*)
> /home/daniel/proj/sys/gcc/git/gcc/recog.c:2206
> 0xbaaaf6 copyprop_hardreg_forward_1
> /home/daniel/proj/sys/gcc/git/gcc/regcprop.c:801
> 0xbab8a4 execute
> /home/daniel/proj/sys/gcc/git/gcc/regcprop.c:1308
>
>
> I guess we don't have a 64-bit offset instruction for (v)movabs :)
Of course there is none. Which is why e.g. pro_epilogue_adjust_stack has code
to handle the case when Pmode is not SImode and offset is not
x86_64_immediate_operand. So whatever generated this insn also needs to test
for sp + offset not being a valid address and load the offset into some hard
register first and use sp + that_reg. pro_and_epilogue pass is after reload,
so we can't wait for RA to handle it for us.