https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97953
--- Comment #16 from Martin Liška <marxin at gcc dot gnu.org> --- Then you will see the following diff in optimized dump: --- good 2020-11-25 16:27:16.795544128 +0100 +++ bad 2020-11-25 16:26:59.723620747 +0100 @@ -17022,7 +17022,6 @@ ;; Function rewrite_use_nonlinear_expr (_ZL26rewrite_use_nonlinear_exprP11ivopts_dataP6iv_useP7iv_cand, funcdef_no=3488, decl_uid=138891, cgraph_uid=2628, symbol_order=2806) -Removing basic block 55 Removing basic block 56 Removing basic block 57 Removing basic block 58 @@ -17049,6 +17048,10 @@ Removing basic block 79 Removing basic block 80 Removing basic block 81 +Removing basic block 82 +Removing basic block 83 +Removing basic block 84 +Removing basic block 85 __attribute__((noipa, noinline, noclone, no_icf)) rewrite_use_nonlinear_expr (struct ivopts_data * data, struct iv_use * use, struct iv_cand * cand) { @@ -17182,6 +17185,9 @@ struct gimple * pretmp_236; unsigned char _237; struct gimple * _239; + unsigned char _265; + struct gimple * prephitmp_268; + unsigned char _269; struct gimple * prephitmp_270; struct gimple * pretmp_272; struct gimple * _287; @@ -17252,7 +17258,7 @@ if (_11 == _12) goto <bb 11>; [30.00%] else - goto <bb 28>; [70.00%] + goto <bb 55>; [70.00%] <bb 11> [local count: 109521665]: _118 = MEM[(const struct gassign *)_12].D.92331.op[0]; @@ -17364,19 +17370,19 @@ <bb 27> [local count: 583887]: pretmp_236 = use_88(D)->stmt; - <bb 28> [local count: 972093934]: - # prephitmp_15 = PHI <pretmp_228(9), _12(10), pretmp_199(25), pretmp_236(27), pretmp_19(23)> + <bb 28> [local count: 716543374]: + # prephitmp_15 = PHI <pretmp_228(9), pretmp_19(23), pretmp_199(25), pretmp_236(27)> _184 = MEM[(const struct gimple *)prephitmp_15].code; if (_184 == 6) - goto <bb 36>; [44.98%] + goto <bb 36>; [25.49%] else - goto <bb 29>; [55.02%] + goto <bb 29>; [74.51%] - <bb 29> [local count: 972093934]: + <bb 29> [local count: 971122338]: if (_184 == 18) - goto <bb 30>; [99.90%] + goto <bb 30>; [100.00%] else - goto <bb 38>; [0.10%] + goto <bb 38>; [0.00%] <bb 30> [local count: 534347641]: _190 = MEM[(union tree_node * *)prephitmp_15 + 48B]; @@ -17431,17 +17437,19 @@ goto <bb 39>; [100.00%] <bb 36> [local count: 437211681]: - pretmp_211 = MEM[(const struct gassign *)prephitmp_15].D.92331.op[0]; + # prephitmp_268 = PHI <prephitmp_15(28), _12(55)> + pretmp_211 = MEM[(const struct gassign *)prephitmp_268].D.92331.op[0]; <bb 37> [local count: 534347641]: - # _287 = PHI <prephitmp_15(36), _12(13), _12(15), _12(19), _12(20)> + # _287 = PHI <prephitmp_268(36), _12(13), _12(15), _12(19), _12(20)> # prephitmp_212 = PHI <pretmp_211(36), _118(13), _118(15), _118(19), _118(20)> bsi = gsi_for_stmt (_287); pretmp_272 = use_88(D)->stmt; goto <bb 39>; [100.00%] <bb 38> [local count: 534606]: - retval.1249_113 = (int) _184; + # _265 = PHI <_184(29), _269(55)> + retval.1249_113 = (int) _265; internal_error ("XXXXXX, code==%d\n", retval.1249_113); <bb 39> [local count: 887017088]: @@ -17607,6 +17615,13 @@ _18 ={v} MEM[(struct gimple * *)0B]; __builtin_trap (); + <bb 55> [local count: 255550560]: + _269 = MEM[(const struct gimple *)_12].code; + if (_269 == 6) + goto <bb 36>; [99.62%] + else + goto <bb 38>; [0.38%] + }