[Bug debug/44694] [4.5/4.6 Regression] Long var tracking compile time of GiNaC tests

2010-06-30 Thread jakub at gcc dot gnu dot org


--- Comment #9 from jakub at gcc dot gnu dot org  2010-06-30 06:12 ---
Subject: Bug 44694

Author: jakub
Date: Wed Jun 30 06:12:22 2010
New Revision: 161587

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=161587
Log:
PR debug/44694
* cselib.h (cselib_preserve_cfa_base_value): Add regno argument.
* cselib.c (cfa_base_preserved_regno): New static variable.
(cselib_reset_table): Don't reset cfa_base_preserved_regno instead
of REGNO (cfa_base_preserved_val-locs-loc).
(cselib_preserve_cfa_base_value): Add regno argument, set
cfa_base_preserved_regno to it.
(cselib_invalidate_regno): Allow removal of registers other than
cfa_base_preserved_regno from cfa_base_preserved_val.
(cselib_finish): Set cfa_base_preserved_regno to INVALID_REGNUM.
* var-tracking.c (adjust_mems): Replace sp or hfp even outside
of MEM addresses, if not on LHS.
(reverse_op): Don't add reverse ops for cfa_base_rtx.
(vt_init_cfa_base): Adjust cselib_preserve_cfa_base_value caller.

Modified:
trunk/gcc/ChangeLog
trunk/gcc/cselib.c
trunk/gcc/cselib.h
trunk/gcc/var-tracking.c


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44694



[Bug debug/44694] [4.5/4.6 Regression] Long var tracking compile time of GiNaC tests

2010-06-29 Thread jakub at gcc dot gnu dot org


--- Comment #5 from jakub at gcc dot gnu dot org  2010-06-29 06:28 ---
The extremely long location lists are caused mainly by reverse_op created
equivalences.  Wonder whether we shouldn't on RHS replace sp and sp + const_int
with framep and framep + const_int even outside of memory addresses and of
course not do reverse_op if the register is framep - the framep is always
computable, so it isn't useful to reverse it.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44694



[Bug debug/44694] [4.5/4.6 Regression] Long var tracking compile time of GiNaC tests

2010-06-29 Thread jakub at gcc dot gnu dot org


--- Comment #6 from jakub at gcc dot gnu dot org  2010-06-29 08:53 ---
Created an attachment (id=21035)
 -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=21035action=view)
gcc46-pr44694.patch

With this patchlet the compile time on ginac.ii went down from more than 3
minutes to 16 seconds.  The same number of DIEs as before have DW_AT_location,
just .debug_loc got bigger, so need to investigate whether it is because the
debug info is more completely, or if it is worse or just less compact.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44694



[Bug debug/44694] [4.5/4.6 Regression] Long var tracking compile time of GiNaC tests

2010-06-29 Thread jakub at gcc dot gnu dot org


--- Comment #7 from jakub at gcc dot gnu dot org  2010-06-29 09:09 ---
readelf -wo ginac.o1 | grep 'End of' | wc -l; readelf -wo ginac.o2 | grep 'End
of' | wc -l; readelf -wo ginac.o1 | wc -l; readelf -wo ginac.o2 | wc -l;
readelf -wo ginac.o1 | grep fbreg | wc -l; readelf -wo ginac.o2 | grep fbreg |
wc -l
11850
11796
351354
462546
8117
341790

As the number of DW_AT_location (and DW_AT_const_value) attributes in
.debug_info is identical, the above means that with the patch 54 vars no longer
use .debug_loc (which means they cover the whole function while before they
didn't).  For the tiny bit fewer location lists the patched version has more
entries in many of them (which can still mean either that the coverage is
better, or worse (there could be more holes)) and that DW_OP_fbreg is now used
much more often than before (that is quite expected with this patch).


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44694



[Bug debug/44694] [4.5/4.6 Regression] Long var tracking compile time of GiNaC tests

2010-06-29 Thread jakub at gcc dot gnu dot org


--- Comment #8 from jakub at gcc dot gnu dot org  2010-06-29 14:11 ---
Created an attachment (id=21039)
 -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=21039action=view)
gcc46-pr44694.patch

Updated patch that actually passed bootstrap/regtested on x86_64-linux and
i686-linux.  When (frame) is present outside of MEM addresses, some tweaks to
cselib are needed, otherwise it ICEs quite often.


-- 

jakub at gcc dot gnu dot org changed:

   What|Removed |Added

  Attachment #21035|0   |1
is obsolete||
 AssignedTo|unassigned at gcc dot gnu   |jakub at gcc dot gnu dot org
   |dot org |
 Status|NEW |ASSIGNED


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44694



[Bug debug/44694] [4.5/4.6 Regression] Long var tracking compile time of GiNaC tests

2010-06-28 Thread rguenth at gcc dot gnu dot org


--- Comment #2 from rguenth at gcc dot gnu dot org  2010-06-28 09:13 ---
Confirmed.  At -O2 -g we get for 4.4.x

 variable tracking :   0.26 ( 1%) usr   0.00 ( 0%) sys   0.24 ( 1%) wall   
1870 kB ( 1%) ggc
 TOTAL :  26.74 1.1929.62
282737 kB

while for the current 4.5 branch we have

 variable tracking : 392.60 (96%) usr   2.69 (73%) sys 397.72 (96%) wall  
30099 kB (11%) ggc
 TOTAL : 409.66 3.69   415.97
279266 kB


-- 

rguenth at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
 Ever Confirmed|0   |1
   Keywords||compile-time-hog
   Last reconfirmed|-00-00 00:00:00 |2010-06-28 09:13:08
   date||
Summary|[4.4 4.5 regression] Long   |[4.5/4.6 Regression] Long
   |var tracking compile time of|var tracking compile time of
   |GiNaC tests |GiNaC tests
   Target Milestone|--- |4.5.1


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44694



[Bug debug/44694] [4.5/4.6 Regression] Long var tracking compile time of GiNaC tests

2010-06-28 Thread rguenth at gcc dot gnu dot org


--- Comment #3 from rguenth at gcc dot gnu dot org  2010-06-28 09:13 ---
Created an attachment (id=21023)
 -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=21023action=view)
unincluded testcase


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44694



[Bug debug/44694] [4.5/4.6 Regression] Long var tracking compile time of GiNaC tests

2010-06-28 Thread jakub at gcc dot gnu dot org


--- Comment #4 from jakub at gcc dot gnu dot org  2010-06-28 16:12 ---
Seems the problem here is extremely long loc_chain lists (the longest one in
insert_into_intersection has 3740 entries), so e.g. insert_into_intersection is
extremely time consuming.  Most of the locations in the long lists are of the
form
(plus:DI (value:DI ...) (const_int ...))
with different values and offsets.


-- 

jakub at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||aoliva at gcc dot gnu dot
   ||org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44694