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