Yes, I should have thought about it too. The error message threw me a
bit off, thanks for clearing that. Thanks for that !
Final question about this all:
I have a cost adjustment to make if the register operand 0 is used
later on. Basically, if that one is used, I have a +6 cost otherwise
if it's simply the 66 register, it's +1 cost.
I added this to the adjust_cost function :
/* Otherwise, if one is our instruction, we must check the dependencies */
if (isMyInst (dep_insn))
{
// Get statement
rtx stmt = PATTERN (dep_insn);
// Get target of the set, it's our instruction, we know where
it is exactly
int regno = REGNO (SET_DEST (XVECEXP (stmt, 0, 0)));
/* Depending on if the def of dep_insn is used in insn, we
adjust the cost */
bitmap tmp_uses = BITMAP_ALLOC (®_obstack);
/* Get the uses */
df_simulate_uses (insn, tmp_uses);
/* If ever one of the uses is our Set, add 6 */
if (bitmap_bit_p (tmp_uses, regno))
{
cost += 6;
}
/* Free bitmap */
BITMAP_FREE (tmp_uses), tmp_uses = NULL;
}
Basically, my question is: I'm using the df_simulate_uses because
that's the simplest I know how to get all the uses. Is this safe
without doing a df_analyse at the beginning of the adjust_cost
function ?
It works but I'd like to get some input on it.
Thanks again,
Jc
On Thu, Mar 4, 2010 at 6:42 PM, Andrew Pinski <[email protected]> wrote:
> On Thu, Mar 4, 2010 at 3:38 PM, Jean Christophe Beyler
> <[email protected]> wrote:
>> Yeah that's what I had tried first but I get :
>>
>> genextract: Internal error: abort in VEC_safe_set_locstr
>>
>> And I can't seem to get rid of that error.
>>
>> Any idea why this happens?
>
> Oh because the second time for the match_operand, you should be using
> match_dup (and yes the error message should be better). I had forgot
> about that :).
> So try this:
> (define_insn "myInst"
> [
> (set (match_operand:DI 0 "register_operand" "=r")
> (unspec:DI [(match_operand:DI 1 "register_operand" "r")
> (match_operand:DI 2 "register_operand" "r")
> (reg:DI 66)] 5))
> (set (reg:DI 66)
> (unspec:DI [(match_dup 1)
> (match_dup 2)
> (reg:DI 66)] 6))
> ]
> ""
> "myInst\\t%0,%1,%2"
> [(set_attr "type" "arith")
> (set_attr "mode" "DI")
> (set_attr "length" "1")])
>
>
> Thanks,
> Andrew Pinski
>