https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86968

--- Comment #12 from Thomas Preud'homme <thopre01 at gcc dot gnu.org> ---
(In reply to Eric Botcazou from comment #11)
> > Therefore unaligned access are handled by extract_bit_field. This in turns
> > call extract_bit_field_1 and later extract_integral_bit_field where things
> > are different between little endian and big endian. For little endian, it
> > goes in the following if block:
> > 
> >   /* If OP0 is a memory, try copying it to a register and seeing if a
> >      cheap register alternative is available.  */
> >   if (MEM_P (op0) & !reverse)
> > 
> > For big endian it continues and calls extract_fixed_bit_field. I'm wondering
> > if an extra call to flip_storage_order when reverse is true would solve the
> > issue. Need to understand better whe is it safe to call flip_storage_order.
> 
> Where do you want to add a call to flip_storage_order exactly?  The correct
> thing to do would be to move the !reverse test from the top-level if to the
> first inner if (in order to bypass only the extv business) and see what
> happens next (and be prepared for adjusting adjust_bit_field_mem_for_reg to
> reverse SSO).

Forgive my naive question as I'm not too familiar with that part of the
compiler: why should the get_best_mem_extraction_insn be guarded with reverse?
I thought I'd just ad an if (reverse) if it succeeds and call
flip_storage_order there, likewise after the call to extract_bit_field_1 below
if successful.

Reply via email to