https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67756
--- Comment #11 from Bernd Edlinger <bernd.edlinger at hotmail dot de> --- I must admit, that I don't know what I am doing here, ... but this (completely untested) patch seems to fix the ICE: (and at least my linux kernel compiles without ICE now) --- lra-assigns.c.jj 2015-07-16 17:26:35.000000000 +0200 +++ lra-assigns.c 2015-10-01 14:40:06.262300720 +0200 @@ -576,7 +576,7 @@ find_hard_regno_for_1 (int regno, int *c /* Remember about multi-register pseudos. For example, 2 hard register pseudos can start on the same hard register but can not start on HR and HR+1/HR-1. */ - for (hr = conflict_hr + 1; + for (hr = conflict_hr; hr < FIRST_PSEUDO_REGISTER && hr < conflict_hr + nregs; hr++) SET_HARD_REG_BIT (impossible_start_hard_regs, hr); The problem starts when lra assigns r143 and r144 to r1 although both have obviously conflicting live ranges.