This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH: reorg branch displacement fix

> > * 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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]