On 11/18/20 3:50 PM, Jan Hubicka wrote:
On 11/13/20 6:50 PM, Jan Hubicka wrote:
Bootstrapped/regtested x86_64-linux. I plan to commit it on monday if there are
no complains.

Hello Honza.

Thank you very much for the patch set.
It's a nice improvement and it will eventually fix the WPA slowness caused by 
IPA ICF.

I made some measurements for master before a first patch and this patch (3/4) 
on godot
game engine:

BEFORE:

Equal symbols: 15690
Totally needed symbols: 17913, fraction of loaded symbols: 39.05%

2156989   false returned: '' in equals_private at 
/home/marxin/Programming/gcc2/gcc/ipa-icf.c:879
1099887   false returned: 'operand_equal_p failed' in compare_operand at 
/home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:307
1048605   false returned: 'types are not compatible' in compatible_types_p at 
/home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:210
1047679   false returned: 'GIMPLE assignment operands are different' in 
compare_gimple_assign at /home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:632
1047517   false returned: 'GIMPLE NOP LHS type mismatch' in 
compare_gimple_assign at /home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:628
   57659   false returned: 'call function types are not compatible' in 
compare_gimple_call at /home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:573
   52088   false returned: 'PHI node comparison returns false' in 
equals_private at /home/marxin/Programming/gcc2/gcc/ipa-icf.c:914
   52088   false returned: '' in compare_phi_node at 
/home/marxin/Programming/gcc2/gcc/ipa-icf.c:1552
   13565   false returned: 'decl_or_type flags are different' in equals_wpa at 
/home/marxin/Programming/gcc2/gcc/ipa-icf.c:567
    9919   false returned: 'result types are different' in equals_wpa at 
/home/marxin/Programming/gcc2/gcc/ipa-icf.c:616

Time variable                                   usr           sys          wall 
          GGC
  ipa icf                            :   4.31 (  7%)   0.06 (  2%)   4.38 (  
7%)  6008k (  0%)
  TOTAL                              :  57.57          3.49         61.11       
  4830M

AFTER:

Equal symbols: 17019
Totally needed symbols: 19875, fraction of loaded symbols: 70.88%

  377327   false returned: '' in equals_private at 
/home/marxin/Programming/gcc2/gcc/ipa-icf.c:886
  213086   false returned: 'operand_equal_p failed' in compare_operand at 
/home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:356
  212179   false returned: 'compare_ao_refs failed (access path difference)' in 
compare_operand at /home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:345
  159947   false returned: '' in compare_gimple_call at 
/home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:607
  147098   false returned: 'GIMPLE assignment operands are different' in 
compare_gimple_assign at /home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:699
   66123   false returned: 'GIMPLE call operands are different' in 
compare_gimple_call at /home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:656
   52088   false returned: 'PHI node comparison returns false' in 
equals_private at /home/marxin/Programming/gcc2/gcc/ipa-icf.c:921
   52088   false returned: '' in compare_phi_node at 
/home/marxin/Programming/gcc2/gcc/ipa-icf.c:1580
   12643   false returned: 'decl_or_type flags are different' in equals_wpa at 
/home/marxin/Programming/gcc2/gcc/ipa-icf.c:572
    6318   false returned: 'different tree types' in compatible_types_p at 
/home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:206

Time variable                                   usr           sys          wall 
          GGC
  ipa icf                            :   3.40 (  6%)   0.09 (  3%)   3.49 (  
6%)    27M (  1%)
  TOTAL                              :  56.60          2.94         59.58       
  4478M

and I'm also sending usage-wrapper graphs.

Thanks for checking!  I also uploaded some data to
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92535

Nice!


Note that you want to also note gimple in timevar since that is also
mostly ICF related.

I know about that, good reminder.


It seems that ICF performance is highly sensitive to application: it now
behaves very well on cc1plus, seems to do quite well on godot and still
does very bad on Firefox (we still have regression there compared to gcc
9 that itself did relatively bad).

I noticed one stupid bug in operand_equal_p on coponent_refs (I am just
testing a fix) and there are quite few important things that we compare
but do not hash. Those should be easy to fix. I plan to iterate through
this on firefox.

It would be great to get chromium data.  Did you suceeded building it
recently?

It has LTO enabled, you can build it:
https://build.opensuse.org/package/show/openSUSE:Factory/chromium

I now got last year firefox building and working and I am
looking into updating it to current firefox tree that will probaby keep
me occupied for some time.

You can probably also test our package:
https://build.opensuse.org/package/show/openSUSE:Factory/MozillaFirefox

Martin


Honza

Martin



Reply via email to