This is the mail archive of the
mailing list for the GCC project.
Re: PATCH: reorg branch displacement fix
- From: Joern Rennecke <joern dot rennecke at superh dot com>
- To: law at redhat dot com
- Cc: tm <tm at mail dot kloo dot net>, kkojima at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org
- Date: Fri, 01 Nov 2002 22:13:03 +0000
- Subject: Re: PATCH: reorg branch displacement fix
- Organization: SuperH UK Ltd.
> > * 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.
SuperH (UK) Ltd.
2410 Aztec West / Almondsbury / BRISTOL / BS32 4QX
T:+44 1454 465658