VOIDmode in ZERO_EXTEND crashed

Paolo Bonzini bonzini@gnu.org
Mon Oct 12 14:22:00 GMT 2009


>> That exactly is the problem.  You can't have a CONST_INT inside a
>> ZERO_EXTEND.  That is not valid.
>> You'll need a separate pattern to recognize the CONST_INT without a
>> ZERO_EXTEND around it.  Unfortunately, this will not give reload
>> the freedom it should have.
>>
>
>
> You mean I should remove the const_int (by predicator) in umulhisi3 pattern?
> I mean if I remove it,  how to deal with the "reg = const_int * reg"
> in umulhisi3 pattern.

You follow these steps:

1) rename the existing pattern to something else than umulhisi3, and 
make it only accept register_operands

2) create another insn that matches (mult (zero_extend (match_operand 
"register_operand") (const_int))

3) create a define_expand that checks for a CONST_INT and does not wrap 
it (but wraps REGs and SUBREGs and if applicable MEMs).

This is in general how you deal with too-forgiving predicates during 
expansion.

Paolo



More information about the Gcc mailing list