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