This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: Superblock Scheduling Alg in GCC
- From: Vladimir Makarov <vmakarov at redhat dot com>
- To: Ghassan Shobaki <gshobaki at ece dot ucdavis dot edu>
- Cc: Jan Hubicka <jh at suse dot cz>, Jan Hubicka <hubicka at ucw dot cz>, gcc-help at gcc dot gnu dot org, gcc at gnu dot org
- Date: Tue, 10 Feb 2004 15:08:45 -0500
- Subject: Re: Superblock Scheduling Alg in GCC
- References: <Pine.GHP.4.58.0312022125060.26397@dante.ece.ucdavis.edu> <3FCDEE2C.19E04DE3@redhat.com> <20031204000558.GD23084@atrey.karlin.mff.cuni.cz> <Pine.GHP.4.58.0401271638150.25927@dante.ece.ucdavis.edu> <20040128122317.GI8094@kam.mff.cuni.cz> <Pine.GHP.4.58.0401282211460.5040@dante.ece.ucdavis.edu> <20040129101203.GB30883@atrey.karlin.mff.cuni.cz> <Pine.GHP.4.58.0402010953470.22447@dante.ece.ucdavis.edu> <20040201215520.GI30324@kam.mff.cuni.cz> <Pine.LNX.4.58.0402101010420.9430@hawking.ece.ucdavis.edu>
Ghassan Shobaki wrote:
Are there any documents describing the algorithm used in the superblock instruction
scheduler?
I don't know one.
Does it use any (or a combination of) of published
techniques such as critical path and speculative hedge and
successive retirement ..etc? Or it just has its own algorithm?
It uses own algorithm which was grown from original haifa-scheduler.
Earlier it was one file which was divided. Superblock scheduler uses
code of sched-deps.c and haifa-sched.c and directs them through a few hooks.
Generally speaking suberblock is believed to be a basic block to which
list scheduling is applied. The superblock scheduler just checks that
the insn can be issued speculatively and prefer to issue more frequently
executed insns when the priority is the same (and now when insn register
weights are the same). But calculation of insn priorities does not take
basic block frequencies (or belonging to different basic blocks) into
account. So the algorithm is very simple.
No more advanced approaches like heuristics based on critical path to
the last exit of superblock, dependence height and speculative yeild
(taking block excution probability into account when the insn priority
is calculated), sucessive retirment (preference of non-speculative insn
movement first), or speculative hedge aiming to achieve minimal delay to
all exits are used.
So there are a lot of things to improve the code. But it will be not
easy to add them because big part of code is used by the region based
scheduler too.
Vlad.