Hi,
I am having an RTL problem trying to make a function call from a
COND_EXEC rtx.  The reload pass has been called, and very simply I
want to compare on an 64bit x86 %rdx with a specific integer value,
and if that value is true, my function call executes.  I can call the
function fine outside of the conditional, but when I set it in the
conditional expression, I get the following error:

test.c:6:1: error: unrecognizable insn:
(insn 27 13 20 2 (cond_exec (eq:BI (const_int 42 [0x2a])
            (reg:DI 1 dx))
        (call (mem:DI (symbol_ref:DI ("abort")) [0 S8 A8])
            (const_int 0 [0]))) -1
     (nil))
test.c:6:1: internal compiler error: in insn_default_length, at
config/i386/i386.md:591

The original code for the condition:
rtx cmp = gen_rtx_EQ(
        BImode,
        gen_rtx_CONST_INT(VOIDmode, 42),
        gen_rtx_REG(DImode, 1));

And the original code for the COND_EXEC expression, which is what I
emit into the program:
rtx sym = gen_rtx_SYMBOL_REF(Pmode, "abort");
rtx abrt_addr = gen_rtx_MEM(Pmode, sym);
rtx abrt = gen_rtx_CALL(VOIDmode, abrt_addr, const0_rtx);
rtx cond = gen_rtx_COND_EXEC(VOIDmode, cmp, abrt);

Thanks

-Matt

Reply via email to