[Bug target/15286] ICE cause by reload

uweigand at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Mon Oct 25 17:17:00 GMT 2004


------- Additional Comments From uweigand at gcc dot gnu dot org  2004-10-25 17:17 -------
Well, as I understand it, SUBREG (MEM) is *supposed* to be generated
for the case of SUBREG (pseudo) where the pseudo gets a stack slot.

The scan_paradoxical_subregs mechanism was supposed to have allocated
a large enough stack slot, and cleanup_subreg_operands is then supposed
to convert the SUBREG (MEM) to a MEM with its address offset accordingly.

However, cleanup_subreg_operands first recognizes the insn, and this is
where it presumably fails; due to this weird piece of code in general_operand:

#ifdef INSN_SCHEDULING
      /* On machines that have insn scheduling, we want all memory
         reference to be explicit, so outlaw paradoxical SUBREGs.  */
      if (MEM_P (sub)
          && GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (sub)))
        return 0;
#endif

(What the ... has INSN_SCHEDULING to do with what insns we want
to recognize?!)

Does it work if you add an && !reload_completed to that if?

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15286



More information about the Gcc-bugs mailing list