[RFA]: Fix reload of paradoxical subreg on big-endian platforms when reg is in memory
Jan Hubicka
jh@suse.cz
Sun Apr 13 13:25:00 GMT 2003
> Hi!
>
> Jan Hubicka wrote:
> >>Hi!
> >>
> >>I've found a reload problem with paradoxical subregs on big-endian
> >>platforms.
> >>When a register is in memory and its paradoxical subreg is reloaded, we
> >>compute its address but we come up with a wrong address representing the
> >>high part instead of the low part. It is a regression compared to 3.0.4.
> >
> >
> >It seems to be that it is invlid to reload paradoxical memory subreg
> >without reloading the inner value first, because we may access
> >unintialized or missaligned memory. Perhaps reload_inner_reg_of_subreg
> >needs extra check?
> >
> >Honza
> >
>
> No because reload_inner_reg_of_subreg() is called only from
> push_reload()/combine_reloads()
> and it's too late. It can only deal with a hard reg not in the good class.
>
> The register is in memory (reg_equiv_memory_loc[regno] != 0) and
> find_reloads_toplev
> together with find_reloads_subreg_address will reload that memory rtx.
Then I believe that find_reloads_subreg_address is wrong here because we
result in wrong memory access. Other palce, like combiner or
reload_inner_reg_of_subreg special case this. One simply can elliminat
paradoxical subreg on memory.
In fact I do have separate patch for subreg in addresses reloading in
the queue. Perhaps it is the answer to your testcase too?
http://gcc.gnu.org/ml/gcc-patches/2003-04/msg00379.html
It was designed for different problem, but the code in question should
deal correctly with paradoxical subregs as well.
Honza
>
> Stephane
>
>
More information about the Gcc-patches
mailing list