https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90930

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |rguenth at gcc dot 
gnu.org

--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
OK, so this is

UA_StatusCode ua_namespace0(UA_Server *server) {
UA_StatusCode retVal = 0x00;

UA_UInt16 ns[1];
ns[0] = UA_Server_addNamespace(server, "http://opcfoundation.org/UA/";);
retVal |= function_ua_namespace0_0_begin(server, ns);
retVal |= function_ua_namespace0_1_begin(server, ns);
retVal |= function_ua_namespace0_2_begin(server, ns);
retVal |= function_ua_namespace0_3_begin(server, ns);
...
retVal |= function_ua_namespace0_3832_begin(server, ns);
retVal |= function_ua_namespace0_3833_begin(server, ns);
retVal |= function_ua_namespace0_3834_begin(server, ns);
retVal |= function_ua_namespace0_3834_finish(server, ns);
retVal |= function_ua_namespace0_3833_finish(server, ns);
retVal |= function_ua_namespace0_3832_finish(server, ns);
retVal |= function_ua_namespace0_3831_finish(server, ns);
...
retVal |= function_ua_namespace0_3_finish(server, ns);
retVal |= function_ua_namespace0_2_finish(server, ns);
retVal |= function_ua_namespace0_1_finish(server, ns);
retVal |= function_ua_namespace0_0_finish(server, ns);
return retVal;
}

And on aarch64 before reassoc we have

_69005 = _80495 | _80496;
_26564 = MEM[(UA_UInt16 *)&ns];
_22992 = function_ua_namespace0_7_finish.isra.0 (server_3(D), _26564);
_26565 = MEM[(UA_UInt16 *)&ns];
_22995 = function_ua_namespace0_6_finish.isra.0 (server_3(D), _26565);
_69006 = _22995 | _22992;
_57512 = _69005 | _69006;

thus non-left-associative |s which we first linearize and then
re-write into two-assoc-width.  The latter process is what leaves
stmts not marked as visited and thus we re-process things over and over...

reproducible on x86 with --param tree-reassoc-width=2.

 tree reassociation                 :  23.01 ( 55%)   8.65 ( 57%)  31.25 ( 55%)
 444709 kB ( 64%)

and with the fix:

 tree reassociation                 :   0.04 (  1%)   0.02 (  8%)   0.06 (  1%)
    949 kB (  7%)

Reply via email to