[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