[Bug target/41399] [4.5 Regression] Scheduler gives huge dependence graph compiling fortran/intrinsic.c on ARM
rearnsha at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Fri Jan 29 10:19:00 GMT 2010
------- Comment #20 from rearnsha at gcc dot gnu dot org 2010-01-29 10:18 -------
(In reply to comment #18)
> Function that seems to cost the most time is add_functions(), which is one big
> basic block of ~7500 insns (~500 of them call insns).
>
> List scheduling is quadratic in the number of insns per basic block. I don't
> know the scheduler very well, but I would expect GCC has some kind of moving
> window to limit the number of insns we consider for scheduling within a basic
> block. If so, then this is broken now.
>
Sched-deps.c contains the following chunk of code:
if (!deps->readonly
&& ((deps->pending_read_list_length +
deps->pending_write_list_length)
> MAX_PENDING_LIST_LENGTH))
{
/* Flush all pending reads and writes to prevent the pending lists
from getting any larger. Insn scheduling runs too slowly when
these lists get long. When compiling GCC with itself,
this flush occurs 8 times for sparc, and 10 times for m88k using
the default value of 32. */
flush_pending_lists (deps, insn, false, true);
}
but presumably this is not being triggered any more.
> That doesn't explain why only ARM seems to be hit by this, though.
>
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41399
More information about the Gcc-bugs
mailing list