https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92213
--- Comment #7 from Hongtao.liu <crazylht at gmail dot com> --- Created attachment 47124 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=47124&action=edit command to show cfg of this file xdot test.dot(attachment name) The root cause of live in for ;; lr in 68 [k0] <<<<<< This doesn't look right. comes from BB 17: gen: 17: 17 18 68(k0)(there's no use of k0 in bb17) gen 68(k0) is generated by exception edge from bb6--> bb17, bb6 has spill 68(k0) which make k0 as gen of bb17. refer to --------------------- 1039 /* No need to record conflicts for call clobbered regs if we 1040 have nonlocal labels around, as we don't ever try to 1041 allocate such regs in this case. */ 1042 if (!cfun->has_nonlocal_label 1043 && has_abnormal_call_or_eh_pred_edge_p (bb)) 1044 for (px = 0; HARD_REGISTER_NUM_P (px); px++) 1045 if (eh_edge_abi.clobbers_at_least_part_of_reg_p (px) 1046#ifdef REAL_PIC_OFFSET_TABLE_REGNUM 1047 /* We should create a conflict of PIC pseudo with PIC 1048 hard reg as PIC hard reg can have a wrong value after 1049 jump described by the abnormal edge. In this case we 1050 cannot allocate PIC hard reg to PIC pseudo as PIC 1051 pseudo will also have a wrong value. */ 1052 || (px == REAL_PIC_OFFSET_TABLE_REGNUM 1053 && pic_offset_table_rtx != NULL_RTX 1054 && !HARD_REGISTER_P (pic_offset_table_rtx)) 1055#endif 1056 ) 1057 make_hard_regno_live (px); 1058 } ------------------ Then df analyze will take 68(k0) as liveout for all pred bb which is too conservative. so when bb2 use 68(k0) as assignment, it shows that it would be used by liveout, then there's an asserttion failure. ------------------------ 6678BB 2: 6679 killed: 2: 6680 6681 17 132 140 146 153 164 171 175 182 186 189 6682 191 196 200 201 203 205 209 210 211 212 215 6683 217 218 220 221 223 224 226 227 228 230 232 6684 234 236 238 253 257 258 259 265 266 267 268 6685 269 270 271 272 273 274 275 276 277 295 296 6686 297 307 308 309 310 6687 livein: 2: 6688 6689 68 6690 liveout: 2: 6691 6692 6 7 16 19 68<----(comes from bb17) 201 --------------------------- If you're on server, you can use dot -Tpng test.dot -o test.png, then copy test.png outside.