[llvm-dev] Branch relaxation at assembler level (RISCV)
Bruce Hoult via llvm-dev
llvm-dev at lists.llvm.org
Tue Dec 4 16:56:13 PST 2018
On Tue, Dec 4, 2018 at 12:13 PM Friedman, Eli via llvm-dev <
llvm-dev at lists.llvm.org> wrote:
> On 12/3/2018 2:45 PM, Paolo via llvm-dev wrote:
> > Hi all,
> >
> > I'm trying to implement the same branch relaxation mechanism implemented
> > in CodeGen in the MC layer of RISCV.
> >
> > beqz t1, L1
> >
> > =>
> >
> > bnez t1, L2
> >
> > j L1
> >
> > That's because LLVM does not apply the CodeGen optimizations when
> > compiling directly from assembly code.
> >
> > What I'd like to do would be to add a pass that does that on the MC
> > instructions or at least to find a way to implement this relaxation in
> > the MC assembler.
> >
> > Any suggestions on where/how to do it? Or any existing fixes?
>
> The RISCV assembler already has code for similar transforms; see
> RISCVAsmBackend::mayNeedRelaxation and
> RISCVAsmBackend::relaxInstruction. The only tricky bit is that the
> relaxation interface doesn't expect one instruction to be relaxed to two
> instructions... probably not too hard to change, though, if necessary.
Note that it is *extremely* important that RISC-V relaxations only ever
make the code shorter, never longer.
If the instructions stay the same size, it can not be permitted to replace
one instruction with two.
Changing a 32 bit instruction to two 16 bit instructions could be ok, but
I'm struggling to think of an example when that would be beneficial.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20181204/31520760/attachment.html>
More information about the llvm-dev
mailing list