public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug ipa/92535] [10/11 regression] ICF is relatively expensive and became less effective
       [not found] <bug-92535-4@http.gcc.gnu.org/bugzilla/>
@ 2020-05-07 11:56 ` jakub at gcc dot gnu.org
  2020-07-23  6:51 ` rguenth at gcc dot gnu.org
                   ` (14 subsequent siblings)
  15 siblings, 0 replies; 16+ messages in thread
From: jakub at gcc dot gnu.org @ 2020-05-07 11:56 UTC (permalink / raw)
  To: gcc-bugs

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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|10.0                        |10.2

--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
GCC 10.1 has been released.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug ipa/92535] [10/11 regression] ICF is relatively expensive and became less effective
       [not found] <bug-92535-4@http.gcc.gnu.org/bugzilla/>
  2020-05-07 11:56 ` [Bug ipa/92535] [10/11 regression] ICF is relatively expensive and became less effective jakub at gcc dot gnu.org
@ 2020-07-23  6:51 ` rguenth at gcc dot gnu.org
  2020-11-17 19:49 ` hubicka at gcc dot gnu.org
                   ` (13 subsequent siblings)
  15 siblings, 0 replies; 16+ messages in thread
From: rguenth at gcc dot gnu.org @ 2020-07-23  6:51 UTC (permalink / raw)
  To: gcc-bugs

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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|10.2                        |10.3

--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
GCC 10.2 is released, adjusting target milestone.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug ipa/92535] [10/11 regression] ICF is relatively expensive and became less effective
       [not found] <bug-92535-4@http.gcc.gnu.org/bugzilla/>
  2020-05-07 11:56 ` [Bug ipa/92535] [10/11 regression] ICF is relatively expensive and became less effective jakub at gcc dot gnu.org
  2020-07-23  6:51 ` rguenth at gcc dot gnu.org
@ 2020-11-17 19:49 ` hubicka at gcc dot gnu.org
  2020-11-17 20:03 ` hubicka at gcc dot gnu.org
                   ` (12 subsequent siblings)
  15 siblings, 0 replies; 16+ messages in thread
From: hubicka at gcc dot gnu.org @ 2020-11-17 19:49 UTC (permalink / raw)
  To: gcc-bugs

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

Jan Hubicka <hubicka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |hubicka at gcc dot gnu.org

--- Comment #7 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
With today trunk (after icf memory handling patches) I get 
     VM SIZE                          FILE SIZE
 ++++++++++++++ GROWING            ++++++++++++++
  +1.3% +1.21Mi .text              +1.21Mi  +1.3%
  +5.2%  +440Ki .eh_frame           +440Ki  +5.2%
  +7.1%  +126Ki .eh_frame_hdr       +126Ki  +7.1%
  +0.4% +74.8Ki .rodata            +74.8Ki  +0.4%
  +0.6% +61.0Ki .rela.dyn          +61.0Ki  +0.6%
  +0.4% +15.4Ki .data.rel.ro.local +15.4Ki  +0.4%
  +1.1% +11.1Ki .data.rel.ro       +11.1Ki  +1.1%
  [ = ]       0 .symtab            +2.55Ki  +0.0%
  +0.0%     +64 .data                  +64  +0.0%
  +0.0%     +24 .rela.plt              +24  +0.0%
  +0.0%     +16 .plt                   +16  +0.0%
  +0.2%     +12 .gcc_except_table      +12  +0.2%
  +0.0%      +8 .got.plt                +8  +0.0%

 -------------- SHRINKING          --------------
  [ = ]       0 .strtab            -29.6Ki  -0.1%
  -0.0%     -32 .bss                     0  [ = ]
  -0.0%      -8 .got                    -8  -0.0%

 -+-+-+-+-+-+-+ MIXED              +-+-+-+-+-+-+-
   +17%     +44 [Unmapped]         -3.74Ki -90.8%

  +1.3% +1.92Mi TOTAL              +1.89Mi  +0.9%

time report of WPA with ICF:
 ipa lto gimple in                  :   6.45 (  4%)   2.65 ( 16%)   9.04 (  5%)
  810M ( 12%)
 ipa lto gimple out                 :   1.87 (  1%)   0.80 (  5%)   2.72 (  1%)
    0  (  0%)
 ipa lto decl in                    :  18.63 ( 11%)   1.26 (  7%)  20.02 ( 10%)
 2682M ( 41%)
 ipa lto decl out                   :   4.64 (  3%)   0.20 (  1%)   4.84 (  3%)
    0  (  0%)
 ipa icf                            :  17.58 ( 10%)   0.59 (  4%)  18.22 (  9%)
   24M (  0%)
 TOTAL                              : 176.22         16.82        193.31       
 6617M

compared to:
 ipa lto gimple in                  :   0.48 (  0%)   0.11 (  1%)   0.77 (  1%)
 2905k (  0%)
 ipa lto gimple out                 :   1.01 (  1%)   0.84 (  8%)   1.84 (  1%)
    0  (  0%)
 ipa lto decl in                    :  18.74 ( 14%)   1.31 ( 12%)  19.90 ( 13%)
 2682M ( 47%)
 ipa lto decl out                   :   4.34 (  3%)   0.47 (  4%)   4.79 (  3%)
    0  (  0%)
 TOTAL                              : 138.62         10.61        149.39       
 5715M

So still pretty bad.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug ipa/92535] [10/11 regression] ICF is relatively expensive and became less effective
       [not found] <bug-92535-4@http.gcc.gnu.org/bugzilla/>
                   ` (2 preceding siblings ...)
  2020-11-17 19:49 ` hubicka at gcc dot gnu.org
@ 2020-11-17 20:03 ` hubicka at gcc dot gnu.org
  2020-11-17 20:05 ` hubicka at gcc dot gnu.org
                   ` (11 subsequent siblings)
  15 siblings, 0 replies; 16+ messages in thread
From: hubicka at gcc dot gnu.org @ 2020-11-17 20:03 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #8 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
Created attachment 49577
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=49577&action=edit
Memory use of GCC trunk (11) with ICF

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug ipa/92535] [10/11 regression] ICF is relatively expensive and became less effective
       [not found] <bug-92535-4@http.gcc.gnu.org/bugzilla/>
                   ` (3 preceding siblings ...)
  2020-11-17 20:03 ` hubicka at gcc dot gnu.org
@ 2020-11-17 20:05 ` hubicka at gcc dot gnu.org
  2020-11-17 20:21 ` hubicka at gcc dot gnu.org
                   ` (10 subsequent siblings)
  15 siblings, 0 replies; 16+ messages in thread
From: hubicka at gcc dot gnu.org @ 2020-11-17 20:05 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #9 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
Created attachment 49578
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=49578&action=edit
Memory use of GCC trunk (11) without ICF

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug ipa/92535] [10/11 regression] ICF is relatively expensive and became less effective
       [not found] <bug-92535-4@http.gcc.gnu.org/bugzilla/>
                   ` (4 preceding siblings ...)
  2020-11-17 20:05 ` hubicka at gcc dot gnu.org
@ 2020-11-17 20:21 ` hubicka at gcc dot gnu.org
  2020-11-17 21:37 ` hubicka at gcc dot gnu.org
                   ` (9 subsequent siblings)
  15 siblings, 0 replies; 16+ messages in thread
From: hubicka at gcc dot gnu.org @ 2020-11-17 20:21 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #10 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
Here are main reason for miscompares:
   1125 libxul.so.wpa.076i.icf:  false returned: 'variables types are
different' in equals at ../../gcc/ipa-icf.c:1697
   1171 libxul.so.wpa.076i.icf:  false returned: 'DECL_CXX_CONSTRUCTOR
mismatch' in equals_wpa at ../../gcc/ipa-icf.c:562
   2211 libxul.so.wpa.076i.icf:  false returned: 'different decl attributes' in
equals_wpa at ../../gcc/ipa-icf.c:662
   3362 libxul.so.wpa.076i.icf:  false returned: 'ctor polymorphic type
mismatch' in equals_wpa at ../../gcc/ipa-icf.c:585
   3627 libxul.so.wpa.076i.icf:  false returned: 'GIMPLE LHS type mismatch' in
compare_gimple_assign at ../../gcc/ipa-icf-gimple.c:695
   5297 libxul.so.wpa.076i.icf:  false returned: '' in compare_decl at
../../gcc/ipa-icf-gimple.c:157
   5304 libxul.so.wpa.076i.icf:  false returned: '' in compare_variable_decl at
../../gcc/ipa-icf-gimple.c:422
   5304 libxul.so.wpa.076i.icf:  false returned: '' in operand_equal_p at
../../gcc/ipa-icf-gimple.c:291
   8588 libxul.so.wpa.076i.icf:  false returned: 'parameter type is not
compatible' in compatible_parm_types_p at ../../gcc/ipa-icf.c:512
  10188 libxul.so.wpa.076i.icf:  false returned: 'inline attributes are
different' in compare_referenced_symbol_properties at ../../gcc/ipa-icf.c:350
  16218 libxul.so.wpa.076i.icf:  false returned: 'parameter types are not
compatible' in equals_wpa at ../../gcc/ipa-icf.c:639
  26076 libxul.so.wpa.076i.icf:  false returned: 'references to virtual tables
cannot be merged' in compare_referenced_symbol_properties at
../../gcc/ipa-icf.c:373
  28813 libxul.so.wpa.076i.icf:  false returned: 'decl_or_type flags are
different' in equals_wpa at ../../gcc/ipa-icf.c:572
  32478 libxul.so.wpa.076i.icf:  false returned: 'different tree types' in
compatible_types_p at ../../gcc/ipa-icf-gimple.c:206
  60520 libxul.so.wpa.076i.icf:  false returned: 'call function types are not
compatible' in compare_gimple_call at ../../gcc/ipa-icf-gimple.c:635
 106399 libxul.so.wpa.076i.icf:  false returned: 'types are not compatible' in
compatible_types_p at ../../gcc/ipa-icf-gimple.c:212
 120240 libxul.so.wpa.076i.icf:  false returned: 'result types are different'
in equals_wpa at ../../gcc/ipa-icf.c:621
 269745 libxul.so.wpa.076i.icf:  false returned: 'compare_ao_refs failed
(semantic difference)' in compare_operand at ../../gcc/ipa-icf-gimple.c:336
 355772 libxul.so.wpa.076i.icf:  false returned: '' in compare_gimple_call at
../../gcc/ipa-icf-gimple.c:607
 456913 libxul.so.wpa.076i.icf:  false returned: 'THIS pointer ODR type
mismatch' in equals_wpa at ../../gcc/ipa-icf.c:677
 460252 libxul.so.wpa.076i.icf:  false returned: 'types are not same for ODR'
in compatible_polymorphic_types_p at ../../gcc/ipa-icf-gimple.c:197
1391954 libxul.so.wpa.076i.icf:  false returned: 'GIMPLE assignment operands
are different' in compare_gimple_assign at ../../gcc/ipa-icf-gimple.c:699
1477890 libxul.so.wpa.076i.icf:  false returned: 'operand_equal_p failed' in
compare_operand at ../../gcc/ipa-icf-gimple.c:356
1840986 libxul.so.wpa.076i.icf:  false returned: '' in equals_private at
../../gcc/ipa-icf.c:886

So compare_ao_refs is not really a top even though it can be improved.  I
suppose it is time to improve the hash.

Common problem is
OBJ_TYPE_REF(_7;(struct nsServerSocket)_1->2) (_1);                             
OBJ_TYPE_REF(_7;(struct nsJSProtocolHandler)_1->2) (_1);                        
this happens 350645 (24% of the operand_equal_p failures) so I guess one can
start from there.

here clearly we want to hash ODR name of the OTR type.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug ipa/92535] [10/11 regression] ICF is relatively expensive and became less effective
       [not found] <bug-92535-4@http.gcc.gnu.org/bugzilla/>
                   ` (5 preceding siblings ...)
  2020-11-17 20:21 ` hubicka at gcc dot gnu.org
@ 2020-11-17 21:37 ` hubicka at gcc dot gnu.org
  2020-11-18  7:33 ` hubicka at gcc dot gnu.org
                   ` (8 subsequent siblings)
  15 siblings, 0 replies; 16+ messages in thread
From: hubicka at gcc dot gnu.org @ 2020-11-17 21:37 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #11 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
Created attachment 49582
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=49582&action=edit
Memory use of GCC 10 release branch with ICF

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug ipa/92535] [10/11 regression] ICF is relatively expensive and became less effective
       [not found] <bug-92535-4@http.gcc.gnu.org/bugzilla/>
                   ` (6 preceding siblings ...)
  2020-11-17 21:37 ` hubicka at gcc dot gnu.org
@ 2020-11-18  7:33 ` hubicka at gcc dot gnu.org
  2020-11-18  8:26 ` hubicka at gcc dot gnu.org
                   ` (7 subsequent siblings)
  15 siblings, 0 replies; 16+ messages in thread
From: hubicka at gcc dot gnu.org @ 2020-11-18  7:33 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #12 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
With ODR name hashing fix and fix to streaming the access types we now get:

    957   false returned: 'different references' in compare_symbol_references
at ../../gcc/ipa-icf.c:465
    961   false returned: 'size mismatch' in equals_wpa at
../../gcc/ipa-icf.c:1651
   1171   false returned: 'DECL_CXX_CONSTRUCTOR mismatch' in equals_wpa at
../../gcc/ipa-icf.c:562
   1360   false returned: '' in compare_gimple_call at
../../gcc/ipa-icf-gimple.c:607
   2209   false returned: 'different decl attributes' in equals_wpa at
../../gcc/ipa-icf.c:662
   3362   false returned: 'ctor polymorphic type mismatch' in equals_wpa at
../../gcc/ipa-icf.c:585
   8399   false returned: 'parameter type is not compatible' in
compatible_parm_types_p at ../../gcc/ipa-icf.c:512
  10161   false returned: 'inline attributes are different' in
compare_referenced_symbol_properties at ../../gcc/ipa-icf.c:350
  16217   false returned: 'parameter types are not compatible' in equals_wpa at
../../gcc/ipa-icf.c:639
  26071   false returned: 'references to virtual tables cannot be merged' in
compare_referenced_symbol_properties at ../../gcc/ipa-icf.c:373
  28812   false returned: 'decl_or_type flags are different' in equals_wpa at
../../gcc/ipa-icf.c:572
  29308   false returned: 'different tree types' in compatible_types_p at
../../gcc/ipa-icf-gimple.c:206
  99308   false returned: 'types are not compatible' in compatible_types_p at
../../gcc/ipa-icf-gimple.c:212
 119994   false returned: 'result types are different' in equals_wpa at
../../gcc/ipa-icf.c:621
 128276   false returned: 'compare_ao_refs failed (semantic difference)' in
compare_operand at ../../gcc/ipa-icf-gimple.c:336
 242454   false returned: 'operand_equal_p failed' in compare_operand at
../../gcc/ipa-icf-gimple.c:356
 369360   false returned: 'GIMPLE assignment operands are different' in
compare_gimple_assign at ../../gcc/ipa-icf-gimple.c:699
 370952   false returned: '' in equals_private at ../../gcc/ipa-icf.c:886
 456907   false returned: 'THIS pointer ODR type mismatch' in equals_wpa at
../../gcc/ipa-icf.c:677
 460246   false returned: 'types are not same for ODR' in
compatible_polymorphic_types_p at ../../gcc/ipa-icf-gimple.c:197

so ODR types of THIS pointers come next.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug ipa/92535] [10/11 regression] ICF is relatively expensive and became less effective
       [not found] <bug-92535-4@http.gcc.gnu.org/bugzilla/>
                   ` (7 preceding siblings ...)
  2020-11-18  7:33 ` hubicka at gcc dot gnu.org
@ 2020-11-18  8:26 ` hubicka at gcc dot gnu.org
  2020-11-19 13:57 ` hubicka at gcc dot gnu.org
                   ` (6 subsequent siblings)
  15 siblings, 0 replies; 16+ messages in thread
From: hubicka at gcc dot gnu.org @ 2020-11-18  8:26 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #13 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
Actually, I did not wait long enough for ICF to finish dumping. Here is the
correct output. Still nice improvement for OBJ_TYPE_REF

   8399   false returned: 'parameter type is not compatible' in
compatible_parm_types_p at ../../gcc/ipa-icf.c:512
  10187   false returned: 'inline attributes are different' in
compare_referenced_symbol_properties at ../../gcc/ipa-icf.c:350
  16217   false returned: 'parameter types are not compatible' in equals_wpa at
../../gcc/ipa-icf.c:639
  26071   false returned: 'references to virtual tables cannot be merged' in
compare_referenced_symbol_properties at ../../gcc/ipa-icf.c:373
  28812   false returned: 'decl_or_type flags are different' in equals_wpa at
../../gcc/ipa-icf.c:572
  32287   false returned: 'different tree types' in compatible_types_p at
../../gcc/ipa-icf-gimple.c:206
  60520   false returned: 'call function types are not compatible' in
compare_gimple_call at ../../gcc/ipa-icf-gimple.c:635
 103684   false returned: 'types are not compatible' in compatible_types_p at
../../gcc/ipa-icf-gimple.c:212
 119994   false returned: 'result types are different' in equals_wpa at
../../gcc/ipa-icf.c:621
 134888   false returned: '' in compare_gimple_call at
../../gcc/ipa-icf-gimple.c:607
 264624   false returned: 'compare_ao_refs failed (semantic difference)' in
compare_operand at ../../gcc/ipa-icf-gimple.c:336
 456907   false returned: 'THIS pointer ODR type mismatch' in equals_wpa at
../../gcc/ipa-icf.c:677
 460246   false returned: 'types are not same for ODR' in
compatible_polymorphic_types_p at ../../gcc/ipa-icf-gimple.c:197
 881974   false returned: 'operand_equal_p failed' in compare_operand at
../../gcc/ipa-icf-gimple.c:356
1011296   false returned: 'GIMPLE assignment operands are different' in
compare_gimple_assign at ../../gcc/ipa-icf-gimple.c:699
1239444   false returned: '' in equals_private at ../../gcc/ipa-icf.c:886

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug ipa/92535] [10/11 regression] ICF is relatively expensive and became less effective
       [not found] <bug-92535-4@http.gcc.gnu.org/bugzilla/>
                   ` (8 preceding siblings ...)
  2020-11-18  8:26 ` hubicka at gcc dot gnu.org
@ 2020-11-19 13:57 ` hubicka at gcc dot gnu.org
  2020-11-19 18:10 ` hubicka at gcc dot gnu.org
                   ` (5 subsequent siblings)
  15 siblings, 0 replies; 16+ messages in thread
From: hubicka at gcc dot gnu.org @ 2020-11-19 13:57 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #14 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
I fixed some issues
 1) merging of OBJ_TYPE_REF was broken
 2) last version of my COMPONENT_REF patch clears incorrectly OEP_ADDRESS_OF
 3) gimple clobbers mismatches for no good reason
 4) volatile memory references can are never considered equal
 5) alignment of memory accesses is not hashed and may cause late mismatch
(common in vector code)

With this I get
    141   false returned: 'Declaration mismatch' in equals at
../../gcc/ipa-icf.c:1817
    162   false returned: 'DECL_CXX_DESTRUCTOR mismatch' in equals_wpa at
../../gcc/ipa-icf.c:565
    169   false returned: '' in compare_decl at ../../gcc/ipa-icf-gimple.c:162
    246   false returned: 'final flag mismatch' in
compare_referenced_symbol_properties at ../../gcc/ipa-icf.c:401
    380   false returned: '' in compare_phi_node at ../../gcc/ipa-icf.c:1595
    380   false returned: 'PHI node comparison returns false' in equals_private
at ../../gcc/ipa-icf.c:916
    513   false returned: 'different decl attributes' in equals_wpa at
../../gcc/ipa-icf.c:662
    571   false returned: 'compare_ao_refs failed (dependence clique
difference)' in compare_operand at ../../gcc/ipa-icf-gimple.c:368
    811   false returned: 'GIMPLE call operands are different' in
compare_gimple_call at ../../gcc/ipa-icf-gimple.c:676
    912   false returned: 'different references' in compare_symbol_references
at ../../gcc/ipa-icf.c:465
    961   false returned: 'size mismatch' in equals_wpa at
../../gcc/ipa-icf.c:1666
   1125   false returned: 'variables types are different' in equals at
../../gcc/ipa-icf.c:1712
   1129   false returned: 'DECL_CXX_CONSTRUCTOR mismatch' in equals_wpa at
../../gcc/ipa-icf.c:562
   1453   false returned: 'operand_equal_p failed' in compare_operand at
../../gcc/ipa-icf-gimple.c:376
   2917   false returned: 'compare_ao_refs failed (semantic difference)' in
compare_operand at ../../gcc/ipa-icf-gimple.c:356
   3362   false returned: 'ctor polymorphic type mismatch' in equals_wpa at
../../gcc/ipa-icf.c:585
   3527   false returned: '' in compare_decl at ../../gcc/ipa-icf-gimple.c:157
   3535   false returned: '' in compare_variable_decl at
../../gcc/ipa-icf-gimple.c:442
   3535   false returned: '' in operand_equal_p at
../../gcc/ipa-icf-gimple.c:307
   3563   false returned: 'GIMPLE assignment operands are different' in
compare_gimple_assign at ../../gcc/ipa-icf-gimple.c:719
   4604   false returned: 'GIMPLE LHS type mismatch' in compare_gimple_assign
at ../../gcc/ipa-icf-gimple.c:715
   6577   false returned: 'parameter type is not compatible' in
compatible_parm_types_p at ../../gcc/ipa-icf.c:512
   8441   false returned: 'inline attributes are different' in
compare_referenced_symbol_properties at ../../gcc/ipa-icf.c:350
  11259   false returned: 'parameter types are not compatible' in equals_wpa at
../../gcc/ipa-icf.c:639
  25276   false returned: 'different tree types' in compatible_types_p at
../../gcc/ipa-icf-gimple.c:206
  26073   false returned: 'references to virtual tables cannot be merged' in
compare_referenced_symbol_properties at ../../gcc/ipa-icf.c:373
  26693   false returned: 'decl_or_type flags are different' in equals_wpa at
../../gcc/ipa-icf.c:572
  61657   false returned: 'call function types are not compatible' in
compare_gimple_call at ../../gcc/ipa-icf-gimple.c:655
  70880   false returned: '' in equals_private at ../../gcc/ipa-icf.c:881
 104034   false returned: 'types are not compatible' in compatible_types_p at
../../gcc/ipa-icf-gimple.c:212
 113477   false returned: 'result types are different' in equals_wpa at
../../gcc/ipa-icf.c:621
 410680   false returned: 'THIS pointer ODR type of cdtor mismatch' in
equals_wpa at ../../gcc/ipa-icf.c:673
 414222   false returned: 'types are not same for ODR' in
compatible_polymorphic_types_p at ../../gcc/ipa-icf-gimple.c:197

and more code size savings
     VM SIZE                          FILE SIZE
 ++++++++++++++ GROWING            ++++++++++++++
  [ = ]       0 .strtab             +439Ki  +1.0%
  [ = ]       0 .symtab            +73.4Ki  +0.4%
  +0.0%     +32 .data                  +32  +0.0%

 -------------- SHRINKING          --------------
  -2.9% -2.67Mi .text              -2.67Mi  -2.9%
  -6.3%  -555Ki .eh_frame           -555Ki  -6.3%
  -7.8%  -148Ki .eh_frame_hdr       -148Ki  -7.8%
  -0.4% -78.2Ki .rodata            -78.2Ki  -0.4%
  -0.5% -58.8Ki .rela.dyn          -58.8Ki  -0.5%
  -0.4% -15.0Ki .data.rel.ro.local -15.0Ki  -0.4%
  -1.0% -10.4Ki .data.rel.ro       -10.4Ki  -1.0%
  -0.0%     -64 .bss                     0  [ = ]
  -0.4%     -32 .gcc_except_table      -32  -0.4%

 -+-+-+-+-+-+-+ MIXED              +-+-+-+-+-+-+-
   +14%     +40 [Unmapped]         -1.40Ki -42.6%

  -2.3% -3.51Mi TOTAL              -3.01Mi  -1.4%

ICF still take quite some memory:
 ipa lto gimple in                  :   5.82 (  4%)   2.10 ( 15%)   8.05 (  5%)
  776M ( 12%)
 ipa lto gimple out                 :   1.52 (  1%)   0.69 (  5%)   2.23 (  1%)
    0  (  0%)
 ipa icf                            :  11.64 (  7%)   0.51 (  4%)  12.23 (  7%)
   43M (  1%)
 TOTAL                              : 163.47         13.69        177.49       
 6537M

So about 100 reduction and ICF got faster. It also improved the chance that
functions read in are actually merged.
The times are not 100% comparable to my previous report since my earlier build
was with profiledbootstrap while now I bootstrapped the normal way. 

There are still quite many nonsences.  In particular
 1) we could enable merging different polymorphic ODR types of this pointers.
    Late devitualization is not that important, but we would need to have way
    to notice such merges. This is discussed in thread
    https://gcc.gnu.org/pipermail/gcc-patches/2020-November/559573.html
 2) result types, operand types and ODR types can be hashed in before the
equals_wpa process start to avoid refining the partitions (that should get rid
of good part of ipa-icf time that now seems to be dominated by equal_wpa and
fibonaci heap)
 3) we should be able to do something about call operand types compare - it is
way too sensitive.
 4) gimple LHS type test is overactive.  I see it is needed for conversions but
it is not needed otherwise.
 5) we do bad job on hashing SSA_NAMES.  In Firefox there seems to be quite few
functions that differs only by permutation of parameters or permutation of
parameters of callee which we do not see as a difference in hash functions

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug ipa/92535] [10/11 regression] ICF is relatively expensive and became less effective
       [not found] <bug-92535-4@http.gcc.gnu.org/bugzilla/>
                   ` (9 preceding siblings ...)
  2020-11-19 13:57 ` hubicka at gcc dot gnu.org
@ 2020-11-19 18:10 ` hubicka at gcc dot gnu.org
  2021-04-08 12:02 ` rguenth at gcc dot gnu.org
                   ` (4 subsequent siblings)
  15 siblings, 0 replies; 16+ messages in thread
From: hubicka at gcc dot gnu.org @ 2020-11-19 18:10 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #15 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
Current  mainline with 
 1) fix to COMPONENT_REFs described above
 2) improvement of ODR type having for THIS pointers
 3) gimple_clobber fix (already approved)
 4) compare_ao_refs fix for volatile accesses
 5) compare_decs change so it does not test type compatibility of automatic
vars (since these types have little meaning)

      1   false returned: '' in compare_decl at ../../gcc/ipa-icf-gimple.c:163 
                                                                               
                                1   false returned: 'replaceable operator flags
are different' in compare_referenced_symbol_properties at
../../gcc/ipa-icf.c:359                                                        
4   false returned: '' in compare_bb at ../../gcc/ipa-icf-gimple.c:606         
                                                                               
                          7   false returned: 'Mismatched number of parameters'
in equals_wpa at ../../gcc/ipa-icf.c:651                                       
                                                    9   false returned: '' in
compare_variable_decl at ../../gcc/ipa-icf-gimple.c:447                        
                                                                               
9   false returned: '' in operand_equal_p at ../../gcc/ipa-icf-gimple.c:312    
                                                                               
                         10   false returned: 'INTEGER_CST precision mismatch'
in equals at ../../gcc/ipa-icf.c:1807                                          
                                                    11   false returned: 'case
low values are different' in compare_gimple_switch at
../../gcc/ipa-icf-gimple.c:808                                                 
                         23   false returned: '' in operand_equal_p at
../../gcc/ipa-icf-gimple.c:303                                                 
                                                            23   false
returned: 'one type is not polymorphic' in compatible_polymorphic_types_p at
../../gcc/ipa-icf-gimple.c:208                                                 
                  23   false returned: 'THIS pointer ODR type mismatch' in
equals_wpa at ../../gcc/ipa-icf.c:678                                          
                                                 29   false returned: 'ASM
strings are different' in compare_gimple_asm at ../../gcc/ipa-icf-gimple.c:909
     46   false returned: 'GIMPLE call operands are different' in
compare_gimple_call at ../../gcc/ipa-icf-gimple.c:681
    141   false returned: 'Declaration mismatch' in equals at
../../gcc/ipa-icf.c:1803
    169   false returned: '' in compare_decl at ../../gcc/ipa-icf-gimple.c:175
    182   false returned: 'DECL_CXX_DESTRUCTOR mismatch' in equals_wpa at
../../gcc/ipa-icf.c:565
    246   false returned: 'final flag mismatch' in
compare_referenced_symbol_properties at ../../gcc/ipa-icf.c:401
    391   false returned: '' in compare_phi_node at ../../gcc/ipa-icf.c:1581
    391   false returned: 'PHI node comparison returns false' in equals_private
at ../../gcc/ipa-icf.c:922
    571   false returned: 'compare_ao_refs failed (dependence clique
difference)' in compare_operand at ../../gcc/ipa-icf-gimple.c:373
    676   false returned: 'compare_ao_refs failed (semantic difference)' in
compare_operand at ../../gcc/ipa-icf-gimple.c:361
    676   false returned: 'METHOD_TYPE and FUNCTION_TYPE mismatch' in
equals_wpa at ../../gcc/ipa-icf.c:674
    707   false returned: 'operand_equal_p failed' in compare_operand at
../../gcc/ipa-icf-gimple.c:381
    957   false returned: 'different references' in compare_symbol_references
at ../../gcc/ipa-icf.c:465
    961   false returned: 'size mismatch' in equals_wpa at
../../gcc/ipa-icf.c:1652
   1125   false returned: 'variables types are different' in equals at
../../gcc/ipa-icf.c:1698
   1171   false returned: 'DECL_CXX_CONSTRUCTOR mismatch' in equals_wpa at
../../gcc/ipa-icf.c:562
   1321   false returned: 'GIMPLE assignment operands are different' in
compare_gimple_assign at ../../gcc/ipa-icf-gimple.c:724
   2209   false returned: 'different decl attributes' in equals_wpa at
../../gcc/ipa-icf.c:663
   4643   false returned: 'GIMPLE LHS type mismatch' in compare_gimple_assign
at ../../gcc/ipa-icf-gimple.c:720
   8400   false returned: 'parameter type is not compatible' in
compatible_parm_types_p at ../../gcc/ipa-icf.c:512
  10187   false returned: 'inline attributes are different' in
compare_referenced_symbol_properties at ../../gcc/ipa-icf.c:350
  16210   false returned: 'parameter types are not compatible' in equals_wpa at
../../gcc/ipa-icf.c:640
  26071   false returned: 'references to virtual tables cannot be merged' in
compare_referenced_symbol_properties at ../../gcc/ipa-icf.c:373
  28810   false returned: 'decl_or_type flags are different' in equals_wpa at
../../gcc/ipa-icf.c:572
  32971   false returned: 'different tree types' in compatible_types_p at
../../gcc/ipa-icf-gimple.c:219
  61665   false returned: 'call function types are not compatible' in
compare_gimple_call at ../../gcc/ipa-icf-gimple.c:660
  96652   false returned: '' in equals_private at ../../gcc/ipa-icf.c:887
 101194   false returned: 'types are not compatible' in compatible_types_p at
../../gcc/ipa-icf-gimple.c:225
 119996   false returned: 'result types are different' in equals_wpa at
../../gcc/ipa-icf.c:622

many of call function types are not compatible are indirect calls with
mismatched number of parameters.  This is because we hash SSA_NAME as nothing.
That is easy to fix.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug ipa/92535] [10/11 regression] ICF is relatively expensive and became less effective
       [not found] <bug-92535-4@http.gcc.gnu.org/bugzilla/>
                   ` (10 preceding siblings ...)
  2020-11-19 18:10 ` hubicka at gcc dot gnu.org
@ 2021-04-08 12:02 ` rguenth at gcc dot gnu.org
  2021-04-15  9:38 ` [Bug ipa/92535] [10 " hubicka at gcc dot gnu.org
                   ` (3 subsequent siblings)
  15 siblings, 0 replies; 16+ messages in thread
From: rguenth at gcc dot gnu.org @ 2021-04-08 12:02 UTC (permalink / raw)
  To: gcc-bugs

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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|10.3                        |10.4

--- Comment #16 from Richard Biener <rguenth at gcc dot gnu.org> ---
GCC 10.3 is being released, retargeting bugs to GCC 10.4.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug ipa/92535] [10 regression] ICF is relatively expensive and became less effective
       [not found] <bug-92535-4@http.gcc.gnu.org/bugzilla/>
                   ` (11 preceding siblings ...)
  2021-04-08 12:02 ` rguenth at gcc dot gnu.org
@ 2021-04-15  9:38 ` hubicka at gcc dot gnu.org
  2021-05-04 12:31 ` rguenth at gcc dot gnu.org
                   ` (2 subsequent siblings)
  15 siblings, 0 replies; 16+ messages in thread
From: hubicka at gcc dot gnu.org @ 2021-04-15  9:38 UTC (permalink / raw)
  To: gcc-bugs

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

Jan Hubicka <hubicka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |NEW
            Summary|[10/11 regression] ICF is   |[10 regression] ICF is
                   |relatively expensive and    |relatively expensive and
                   |became less effective       |became less effective

--- Comment #17 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
For GCC 11 we now get faster build times with ICF than without on cc1plus,
Firefox and clang LTO build.  So I think we can consider it no longer
regression while ICF can always be improved (and I have some changes queues for
next stage1).

I have no plan to backport this to gcc10, so unasigning.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug ipa/92535] [10 regression] ICF is relatively expensive and became less effective
       [not found] <bug-92535-4@http.gcc.gnu.org/bugzilla/>
                   ` (12 preceding siblings ...)
  2021-04-15  9:38 ` [Bug ipa/92535] [10 " hubicka at gcc dot gnu.org
@ 2021-05-04 12:31 ` rguenth at gcc dot gnu.org
  2022-06-28 10:38 ` jakub at gcc dot gnu.org
  2023-07-07  8:41 ` rguenth at gcc dot gnu.org
  15 siblings, 0 replies; 16+ messages in thread
From: rguenth at gcc dot gnu.org @ 2021-05-04 12:31 UTC (permalink / raw)
  To: gcc-bugs

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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug ipa/92535] [10 regression] ICF is relatively expensive and became less effective
       [not found] <bug-92535-4@http.gcc.gnu.org/bugzilla/>
                   ` (13 preceding siblings ...)
  2021-05-04 12:31 ` rguenth at gcc dot gnu.org
@ 2022-06-28 10:38 ` jakub at gcc dot gnu.org
  2023-07-07  8:41 ` rguenth at gcc dot gnu.org
  15 siblings, 0 replies; 16+ messages in thread
From: jakub at gcc dot gnu.org @ 2022-06-28 10:38 UTC (permalink / raw)
  To: gcc-bugs

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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|10.4                        |10.5

--- Comment #18 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
GCC 10.4 is being released, retargeting bugs to GCC 10.5.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Bug ipa/92535] [10 regression] ICF is relatively expensive and became less effective
       [not found] <bug-92535-4@http.gcc.gnu.org/bugzilla/>
                   ` (14 preceding siblings ...)
  2022-06-28 10:38 ` jakub at gcc dot gnu.org
@ 2023-07-07  8:41 ` rguenth at gcc dot gnu.org
  15 siblings, 0 replies; 16+ messages in thread
From: rguenth at gcc dot gnu.org @ 2023-07-07  8:41 UTC (permalink / raw)
  To: gcc-bugs

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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|10.5                        |11.0
      Known to fail|                            |10.5.0
             Status|ASSIGNED                    |RESOLVED
         Resolution|---                         |FIXED

--- Comment #19 from Richard Biener <rguenth at gcc dot gnu.org> ---
Fixed in GCC 11 then.

--- Comment #20 from Richard Biener <rguenth at gcc dot gnu.org> ---
.

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2023-07-07  8:41 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <bug-92535-4@http.gcc.gnu.org/bugzilla/>
2020-05-07 11:56 ` [Bug ipa/92535] [10/11 regression] ICF is relatively expensive and became less effective jakub at gcc dot gnu.org
2020-07-23  6:51 ` rguenth at gcc dot gnu.org
2020-11-17 19:49 ` hubicka at gcc dot gnu.org
2020-11-17 20:03 ` hubicka at gcc dot gnu.org
2020-11-17 20:05 ` hubicka at gcc dot gnu.org
2020-11-17 20:21 ` hubicka at gcc dot gnu.org
2020-11-17 21:37 ` hubicka at gcc dot gnu.org
2020-11-18  7:33 ` hubicka at gcc dot gnu.org
2020-11-18  8:26 ` hubicka at gcc dot gnu.org
2020-11-19 13:57 ` hubicka at gcc dot gnu.org
2020-11-19 18:10 ` hubicka at gcc dot gnu.org
2021-04-08 12:02 ` rguenth at gcc dot gnu.org
2021-04-15  9:38 ` [Bug ipa/92535] [10 " hubicka at gcc dot gnu.org
2021-05-04 12:31 ` rguenth at gcc dot gnu.org
2022-06-28 10:38 ` jakub at gcc dot gnu.org
2023-07-07  8:41 ` rguenth at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).