2009/10/30 Jeff Law <l...@redhat.com>:
> On 10/30/09 07:13, Mohamed Shafi wrote:
>>
>> Hi,
>>
>> I am doing a port for a 32bit target in GCC 4.4.0. The target does not
>> have support for symbolic address in QImode for load operations.
>
> You'll need to make sure to reject such addresses for QImode in
> GO_IF_LEGITIMATE_ADDRESS.
>
>
>>  In
>> order to do this what i have done is in define_expand for moveqi
>> reject symbolic address it they come in source operands and i have
>> also written a predicate for *moveqi_internal to reject such cases.
>>
>
> OK.  Nothing wrong with these steps.  Though you really need to make sure
> GO_IF_LEGITIMATE_ADDRESS is defined correctly.
>
> IRA doesn't look at operand predicates or insn conditions.  It assumes that
> any insns are valid assuming any pseudo registers appearing in the insn get
> suitable hard registers.
>
> Based on the dumps you provided it appears that reg61 does not get a hard
> register and reload is generating the problematical insn #24.  This is a
> good indication that your GO_IF_LEGITIMATE_ADDRESS is incorrectly
> implemented.
>
   I the GO_IF_LEGITIMATE_ADDRESS address macro i am allowing this
address because the target supports symbolic address in QImode for
store operations. And in the macro GO_IF_LEGITIMATE_ADDRESS there is
no option to check if the address is used in load or store. Thats why
in define_expand for moveqi i reject symbolic address it they come in
source operands and a predicate for *moveqi_internal to reject such
cases. But still i am getting the ICE.  IIRC the control does not come
to TARGET_SECONDARY_RELOAD also. How can i overcome this?

Regards,
Shafi

Reply via email to