[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