https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84111
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Seems during cunroll we end up with: y_8 = PHI <y_29(20), y_29(13)> ... y_29 = PHI <y_37(5)> ... y_37 = PHI <y_8(11), y_37(14)> where all 3 PHIs are degenerate and thus: 1539 static tree 1540 follow_copies_to_constant (tree var) 1541 { 1542 tree res = var; 1543 while (TREE_CODE (res) == SSA_NAME) 1544 { 1545 gimple *def = SSA_NAME_DEF_STMT (res); 1546 if (gphi *phi = dyn_cast <gphi *> (def)) 1547 { 1548 if (tree rhs = degenerate_phi_result (phi)) 1549 res = rhs; 1550 else 1551 break; 1552 } 1553 else if (gimple_assign_single_p (def)) 1554 /* Will exit loop if not an SSA_NAME. */ 1555 res = gimple_assign_rhs1 (def); 1556 else 1557 break; 1558 } loops on that forever, with res being ... y_37, y_8, y_29, y_37, ... emergency_dump_function at the point of looping: foo (int x, int y, int z) { int c; int * b; int a; unsigned int ivtmp_1; unsigned int ivtmp_2; int _4; unsigned int ivtmp_6; unsigned int ivtmp_13; unsigned int ivtmp_14; unsigned int ivtmp_16; unsigned int ivtmp_24; unsigned int ivtmp_27; ;; basic block 2, loop depth 0 ;; pred: ENTRY ;; succ: 15 ;; basic block 15, loop depth 0 ;; pred: 2 # y_25 = PHI <y_20(D)(2)> # a_3 = PHI <0(2)> # ivtmp_16 = PHI <2(2)> ivtmp_14 = ivtmp_27 - 1; if (ivtmp_24 != 0) goto <bb 16>; [100.00%] else goto <bb 7>; [0.00%] ;; succ: 16 ;; 7 ;; basic block 16, loop depth 0 ;; pred: 15 ;; succ: 17 ;; basic block 17, loop depth 1 ;; pred: 16 ;; 19 # y_10 = PHI <y_8(16), y_37(19)> # a_17 = PHI <0(16), a_28(19)> # ivtmp_13 = PHI <36(16), ivtmp_2(19)> if (y_8 <= 0) goto <bb 10>; [89.00%] else goto <bb 18>; [11.00%] ;; succ: 10 ;; 18 ;; basic block 18, loop depth 1 ;; pred: 17 a_9 = a_38 + 1; ivtmp_6 = ivtmp_1 - 1; if (ivtmp_2 != 0) goto <bb 19>; [97.23%] else goto <bb 20>; [2.77%] ;; succ: 19 ;; 20 ;; basic block 19, loop depth 1 ;; pred: 18 goto <bb 17>; [100.00%] ;; succ: 17 ;; basic block 20, loop depth 0 ;; pred: 18 # y_5 = PHI <y_37(18)> goto <bb 6>; [100.00%] ;; succ: 6 ;; basic block 11, loop depth 1 ;; pred: 6 ;; succ: 3 ;; basic block 3, loop depth 2 ;; pred: 11 ;; 14 # y_37 = PHI <y_8(11), y_37(14)> # a_38 = PHI <0(11), a_28(14)> # ivtmp_1 = PHI <36(11), ivtmp_2(14)> if (y_8 <= 0) goto <bb 10>; [89.00%] else goto <bb 5>; [11.00%] ;; succ: 10 ;; 5 ;; basic block 10, loop depth 0 ;; pred: 3 ;; 17 ;; succ: 4 ;; basic block 4, loop depth 1 ;; pred: 10 ;; 12 ;; succ: 12 ;; basic block 12, loop depth 1 ;; pred: 4 goto <bb 4>; [100.00%] ;; succ: 4 ;; basic block 5, loop depth 2 ;; pred: 3 a_28 = a_38 + 1; ivtmp_2 = ivtmp_1 - 1; if (ivtmp_2 != 0) goto <bb 14>; [97.23%] else goto <bb 13>; [2.77%] ;; succ: 14 ;; 13 ;; basic block 14, loop depth 2 ;; pred: 5 goto <bb 3>; [100.00%] ;; succ: 3 ;; basic block 13, loop depth 1 ;; pred: 5 # y_29 = PHI <y_37(5)> ;; succ: 6 ;; basic block 6, loop depth 1 ;; pred: 20 ;; 13 # y_8 = PHI <y_29(20), y_29(13)> # a_12 = PHI <36(20), 36(13)> # ivtmp_27 = PHI <ivtmp_24(20), ivtmp_24(13)> ivtmp_24 = ivtmp_27 - 1; if (0 != 0) goto <bb 11>; [0.00%] else goto <bb 7>; [100.00%] ;; succ: 11 ;; 7 ;; basic block 7, loop depth 0 ;; pred: 6 ;; 15 if (z_21(D) <= 32) goto <bb 8>; [94.50%] else goto <bb 9>; [5.50%] ;; succ: 8 ;; 9 ;; basic block 8, loop depth 0 ;; pred: 7 _4 ={v} MEM[(int *)0B]; __builtin_trap (); ;; succ: ;; basic block 9, loop depth 0 ;; pred: 7 return; ;; succ: EXIT }