The trunk compiler fails to compile libffi.call/cls_8byte.c with -O2 -fomit-frame-pointer. Here is a reduced test case:
typedef struct s8 { int a; float b; } s8; s8 s8_fn (struct s8 a1, struct s8 a2) { struct s8 result; result.b = a1.b + a2.b; bar (a1.a, a1.b, a2.a, a2.b, result.a, result.b); return result; } With -O2 -fomit-frame-pointer, it causes foo.c:15: error: unable to find a register to spill in class 'R0_REGS' foo.c:15: error: this is the insn: (insn:HI 23 44 45 3 foo.c:14 (parallel [ (set (subreg:SF (reg:SI 1 r1 [orig:174 D.1226+4 ] [174]) 0) (reg:SF 163 [ D.1218 ])) (use (reg/v:PSI 151 )) (clobber (scratch:SI)) ]) 205 {movsf_ie} (expr_list:REG_DEAD (reg:SF 163 [ D.1218 ]) (nil))) foo.c:15: internal compiler error: in spill_failure, at reload1.c:2098 -- Summary: [4.4 Regression] SH: spill failure for R0_REGS Product: gcc Version: 4.4.0 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: kkojima at gcc dot gnu dot org GCC target triplet: sh4-unknown-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37270