Help with reload and naked constant sum causing ICE

Andy H hutchinsonandy@aim.com
Tue May 27 23:12:00 GMT 2008


Thank you very much for reply. reload is such a lonely place!
> TBH, it sounds like the opposite: LEGITIMIZE_RELOAD_ADDRESS should
> not be handling this address at all. 
Yes but reload will not do anything before call to L_R_A. So in practice 
that would mean L_R_A has
to check reg_equiv_constant[regno] to see if register were a constant 
and do nothing if it is.

>  If L_R_A does nothing with it,
> the normal reload handling will first try:
>
>   (const:HI (plus:HI (symbol_ref:HI ("chk_fail_buf") (const_int 2))))
>   

Are you sure? I think it will try

(plus:HI (symbol_ref:HI ("chk_fail_buf") (const_int 2)))

I could be wrong so I will rerun to check this. If const is missing it 
will  be  rejected as valid address.
Though I note parts of reload do not impose this check.

> If that's legitimate, that's the address you'll get.  If it isn't,
> the normal reload handling will reload the symbol_ref into a
> base register of class:
>
>   MODE_CODE_BASE_REG_CLASS (mem_mode, PLUS, CONST_INT)
>
> And it sounds from your message like that's exactly what you want.
>   
Not really. - though that might be what happens if cons wrapper is missing.
We can take any relocatable expressions. So first choice is a good one.

> Richard
>   



More information about the Gcc mailing list