The attached test case produces this RTL sequence after lreg, when compiled at -O2 -mcpu=m32cm:
(insn 12 11 13 2 ba-bug.ii:24 (set (reg:DI 26 [ p.2 ]) (mem/s:DI (reg/f:PSI 31) [3 S8 A8])) 176 {movdi_splittable} (expr_list:R EG_DEAD (reg/f:PSI 31) (nil))) (insn 13 12 14 2 ba-bug.ii:24 (set (reg:PSI 25 [ p$second ]) (subreg:PSI (reg:DI 26 [ p.2 ]) 4)) 172 {movpsi_op} (nil)) [For reference, in -mcpu=m32cm mode, this target uses PSImode for 24-bit pointers, which appear to be being padded to 32 bits in memory.] During processing of insn 13, reload demands a MODE_PARTIAL_INT mode with at least 64 bits. There is no such mode, and the compiler aborts in smallest_mode_for_size. The test case is simplified from libstdc++ bitmap_alloc.cc. It is extremely fragile; any further simplification and the problem RTL sequence will be eliminated by earlier optimizers. -- Summary: abort during reload on (subreg:PSI (reg:DI ...) 4) Product: gcc Version: 4.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: zackw at panix dot com GCC target triplet: m32c-unknown-elf http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32659