On Sat, Dec 31, 2011 at 12:51 AM, Alexander Monakov <amona...@ispras.ru> wrote:
>
>
> On Sat, 31 Dec 2011, Matt Davis wrote:
>
>> 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:
>
> Indeed, x86 does not have a "conditional call" instruction.  You would have to
> generate the call in a separate basic block and add a conditional branch
> instruction around it.  You can reference the following code, which attempts
> to convert any COND_EXECs to explicit control flow:
>
> http://gcc.gnu.org/ml/gcc-patches/2011-10/msg02383.html
>
> (but you will probably need to additionally generate comparison instructions).
>
> Hope that helps,

Thanks Alexander.  This does help.  What I have been doing is writing
the same code in c.  Compiling that, and then dumping the RTL.  I then
try to create the same RTL by hand.  The second thing I need to do, as
the first is already in place in my code, is to compare a register
with a constant.  So, just to test things, I just perform a simple
"COMPARE" and set the mode to CCZ, and is what my analogue C variant
produces in the RTL dump.  Unfortunately, I'm still getting a similar
error "unrecognizable insn"   I feel lame asking so many questions,
but this is something I want to get stronger with, so aside from my
current gcc research, I am tossing this into the mix in my free time.
I've looked at the rtl.def and nothing seems incorrect.

My RTX:
rtx cmp2 = gen_rtx_COMPARE(
        CCZmode,
        gen_rtx_REG(DImode, 1),
        gen_rtx_CONST_INT(VOIDmode, 42));

Once this is in place I would wrap a SET rtx and actually set the CCZ
register.  I'm primarily just concerned with getting the comparison
piece in place first.

-Matt

Reply via email to