[Bug jit/64722] On 2nd time libgccjit is run in-process on i686, generated code clobbers %ebx register

dmalcolm at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Jan 22 14:53:00 GMT 2015


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64722

--- Comment #7 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #3)
> But then wonder if/how target_reinit works for i?86 32-bit.
> Perhaps pic_offset_table_rtx should be cleared in init_emit_regs before
> computing it?
>   pic_offset_table_rtx = NULL_RTX;
>   if ((unsigned) PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM)
>     pic_offset_table_rtx = gen_raw_REG (Pmode, PIC_OFFSET_TABLE_REGNUM);

Adding the line:
    pic_offset_table_rtx = NULL_RTX;
does indeed fix the issue; with that (or with my patch from comment #2) the jit
testsuite fully passes on i686.

I was hoping to keep the patch confined to toplev::finalize, since only the jit
calls this, reducing the scope of the proposed change, but if you think it's
better to have it in init_emit_regs, I'll defer to your judgement.



More information about the Gcc-bugs mailing list