This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Bad code generated by inter-block scheduling
- From: Jeffrey A Law <law at redhat dot com>
- To: Ulrich Weigand <weigand at i1 dot informatik dot uni-erlangen dot de>
- Cc: gcc at gcc dot gnu dot org
- Date: Wed, 22 Sep 2004 14:46:18 -0600
- Subject: Re: Bad code generated by inter-block scheduling
- Organization: Red Hat, Inc
- References: <200409221834.UAA05495@faui1m.informatik.uni-erlangen.de>
- Reply-to: law at redhat dot com
On Wed, 2004-09-22 at 12:34, Ulrich Weigand wrote:
>
> The task of distiguishing between interblock and speculative motion
> is done using the notion of 'potential-split-edges', as computed
> by compute_dom_prob_ps in sched-rgn.c. As I understand this code,
> it looks for (generalized versions of) situations like this:
>
> [A]
> / \
> [B] [C]
>
> If it finds such an edge A -> C, then a move from B to A would be
> speculative, else it is a regular interblock motion.
>
> Now, in this particular case, we obviously *do* have exactly that
> situation, with [A] = bb2, [B] = bb 1, [C] = exit block.
>
> However, the data structures available to compute_dom_prob_ps simply
> do not contain the 'bb2 -> exit' edge in the first place! This is
> because where the private structures in sched-rgn.c are built
> (build_control_flow), all edges leading to the exit block are
> completely ignored:
>
> nr_edges = 0;
> for (i = 0; i < num_edges; i++)
> {
> edge e = INDEX_EDGE (edge_list, i);
>
> if (e->dest != EXIT_BLOCK_PTR
> && e->src != ENTRY_BLOCK_PTR)
> new_edge (e->src->index, e->dest->index);
> }
>
> >From what I see from the revision histories, the behaviour apparently
> has been the same since forever, so I don't know why this suddenly
> shows up as a problem ...
>
> Simply adding entry/exit edges to the sched-rgn.c tables is not completely
> trivial due to the negative block index numbers; several global arrays in
> sched-rgn.c are indexed by block number. Any suggestions how to fix this?
I've always hated the potential-split-edges nonsense in the
interblock scheduling code. It seems to me what they're really
after is just post-dominance.
jeff