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

--- Comment #25 from Kazumoto Kojima <kkojima at gcc dot gnu.org> ---
Created attachment 33524
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=33524&action=edit
Reduced test case for ICE in assign_by_spill

I've looked into what is going on for the ICE in assign_by_spill.
The above test case ICEs on sh-elf with
"-m4 -ml -O1 -ftree-parallelize-loops=4 -ftree-vectorize".
.ira and .reload dumps show that the load and store insns

   42: r208:SI=[r202:SI+r185:SI]
   43: [r207:SI+r200:SI]=r218:HI // r218 = subreg:HI r208

are reloaded like as

   73: r217:SI=r200:SI
   79: r223:SI=r185:SI
   74: r218:HI=[r202:SI+r223:SI]
   43: [r207:SI+r217:SI]=r218:HI

and R0_REGS is assigned to both r217 and r223 because the only
register R0 can be used as the index register on SH.  .reload says
that the original insn 42 is deleted and the source operand r218
of insn 43 is substituted with its equiv [r202:SI+r185:SI].
It seems that it works also for SH if reload insn 73 was inserted
at just before insn 43.  I've attached .reload dump for this too.

Reply via email to