------- 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