[Bug tree-optimization/84111] [8 Regression] Compile time hog w/ -O2
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Jan 29 18:11:00 GMT 2018
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
}
More information about the Gcc-bugs
mailing list