https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110215
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|RA fails to allocate |RA fails to allocate |register when loop |register when loop |invariant lives through EH |invariant lives across |region |calls Keywords|ra | --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- happens on aarch64 also: ``` .L41: ldr q31, [x0] ldr q29, [sp, 112] fabd v31.4s, v29.4s, v31.4s fadd v30.4s, v30.4s, v31.4s str q31, [x0], 16 cmp x1, x0 bne .L41 ``` Gimple level looks like: <bb 19> [local count: 372044713]: # vect_sum_lsm.128_11.134_88 = PHI <vect__7.142_39(19), { 0.0, 0.0, 0.0, 0.0 }(18)> # ivtmp.155_176 = PHI <ivtmp.155_175(19), ivtmp.155_174(18)> _173 = (void *) ivtmp.155_176; vect__4.137_85 = MEM <vector(4) float> [(value_type &)_173]; vect__5.138_74 = vect_cst__84 - vect__4.137_85; vect__38.139_68 = ABS_EXPR <vect__5.138_74>; MEM <vector(4) float> [(value_type &)_173] = vect__38.139_68; vect__7.142_39 = vect__38.139_68 + vect_sum_lsm.128_11.134_88; ivtmp.155_175 = ivtmp.155_176 + 16; if (_6 != ivtmp.155_175) goto <bb 19>; [83.33%] else goto <bb 20>; [16.67%] That would be vect_cst__84 . So what I think is happening is the spilling is happening is not related at all to EH but rather a call.