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

--- Comment #15 from Jeffrey A. Law <law at redhat dot com> ---
So this is definitely related to the FSM threader not being able to share a
single jump threading path.  Here's an example:

j.c.110t.dom2:  Registering FSM jump thread: (23, 25) incoming edge;  (25, 28) 
(28, 27)  (27, 11)  (11, 13)  (13, 14)  (14, 24) nocopy; (14, 24) 
j.c.110t.dom2:  Registering FSM jump thread: (22, 25) incoming edge;  (25, 28) 
(28, 27)  (27, 11)  (11, 13)  (13, 14)  (14, 24) nocopy; (14, 24) 


Note that the only difference is the incoming edge.  The old threader would
duplicate the path once and redirect both incoming edges to that single
duplicate path.   The FSM threader doesn't have that ability and won't until
gcc-7.

In bb27 and bb11 we have a fairly significant sequence of shifts and ior
operations that result in the large number of duplicated statements.

I'm a bit surprised that the statements-to-copy clamp didn't kick in here and
that's what I'll be looking at for gcc-6.  For gcc-7 sharing jump thread paths
is high on the TODO list.

Reply via email to