https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116002
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Known to fail| |14.1.1
Component|c |rtl-optimization
Ever confirmed|0 |1
Summary|GCC Compiler Hang with |GCC Compiler time-hog with
|Recursive Macros in |large basic block in
|Function |Function
Last reconfirmed| |2024-07-19
Keywords| |compile-time-hog
Status|UNCONFIRMED |NEW
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
With only 'E E' it's
CPROP : 18.28 ( 62%)
with 'E E E'
dead store elim1 : 17.04 ( 22%)
CPROP : 50.19 ( 65%)
with 'E E E E'
dead store elim1 : 36.41 ( 23%)
CPROP : 106.68 ( 67%)
this is the usual gcse memory/compile-time hog with its (and DF) bitmap
operations.
We already disable it via gcse_or_cprop_is_too_expensive but the heuristic
doesn't trigger here - it's few basic blocks only. We end up
<bb 2> [local count: 1073741824]:
if (c_11666(D) <= 12344)
goto <bb 3>; [50.00%]
else
goto <bb 4>; [50.00%]
<bb 3> [local count: 536870912]:
d_11667 = c_11666(D) % 12345;
_1 = d_11667 * 12345;
e_11668 = _1 ^ c_11666(D);
_2 = c_11666(D) * d_11667;
_3 = _2 % e_11668;
f_11669 = _3 % 12345;
_4 = f_11669 * 12345;
e_11670 = _4 ^ f_11669;
_5 = f_11669 * f_11669;
_6 = _5 % e_11670;
f_11671 = _6 % 12345;
_7 = f_11671 * 12345;
e_11672 = _7 ^ f_11671;
_8 = f_11671 * f_11671;
_9 = _8 % e_11672;
...
_11664 = _11663 % e_19442;
f_19443 = _11664 % 12345;
<bb 4> [local count: 1073741824]:
# c_11665 = PHI <c_11666(D)(2), f_19443(3)>
return c_11665;
thus very many pseudos and insns but few basic-blocks. I believe there's
a duplicate.
Samples: 114K of event 'cycles:P', Event count (approx.): 121898207258
Overhead Samples Command Shared Object Symbol
61.00% 70222 cc1 cc1 [.]
_Z22rtx_equal_for_cselib_1P7rtx_defS0_12machine_modei
10.17% 11704 cc1 cc1 [.]
_Z13cselib_lookupP7rtx_def12machine_modeiS1_
6.42% 7400 cc1 cc1 [.]
_ZN10hash_tableI13cselib_hasherLb0E11xcallocatorE19find_slot_with
4.75% 5251 cc1 cc1 [.]
_ZL10topo_visitP16constraint_graphR3vecIj7va_heap6vl_ptrEP17simpl
2.91% 3219 cc1 cc1 [.]
_ZL11solve_graphP16constraint_graph
ah, I've seen this as well - the CSELIB hashing is a joke; I've run into this
earlier. It certainly will produce collisions a lot
with a lot of expressions with the same RTX code like this. Ah, it was
cse.cc hashing that was even worse. But CSELIB hashing also uses + for
mixing.