This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: PATCH: reorg branch displacement fix
- From: tm <tm at mail dot kloo dot net>
- To: Joern Rennecke <joern dot rennecke at superh dot com>
- Cc: law at redhat dot com, kkojima at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org
- Date: Fri, 1 Nov 2002 14:44:32 -0800 (PST)
- Subject: Re: PATCH: reorg branch displacement fix
On Fri, 1 Nov 2002, Joern Rennecke wrote:
> > > * reorg.c (relax_delay_slots): Don't thread conditional jump
> > > through unconditional jump if the conditional jump can't reach
> > > the branch target on this processor target.
> > This is wrong. reorg does not and should not be checking branch displacements.
> > That is a problem for shorten-branches and the backend.
>
> The SH does some early branch shortening in machine_dependent_reorg because
> a long conditional branch has to be split into a short conditional branch
> around an unconditional branch, or a short conditional branch to an unconditional
> branch (that might have been inserted elsewhere after an inverted condbranch).
> Unconditional branches have mandatory delay slots, so we get additional
> delay slots exposed by doing this splitting before reorg, and the conditional
> branches have optional delay slots, which obviously can't be used in the same
> way when the branch is reversed or redirected.
> Thus, machine_dependent_reorg already makes sure all the conditional branches
> that need splitting are split. If reorg redirects conditional branches
> willy-nilly, it destroys the very data it is supposed to operate on.
It sounds like there should be a machine-independent branch-lengthening
pass for machines which have limited branch displacements. There must be
other processors which have this same problem?
Toshi