[llvm-dev] [ARM] Thumb code-gen for 8-bit imm arguments results in extra reg copies

Prathamesh Kulkarni via llvm-dev llvm-dev at lists.llvm.org
Thu Jun 18 02:38:25 PDT 2020


On Tue, 16 Jun 2020 at 15:47, Tim Northover <t.p.northover at gmail.com> wrote:
>
> On Tue, 16 Jun 2020 at 10:23, Prathamesh Kulkarni via llvm-dev
> <llvm-dev at lists.llvm.org> wrote:
> > (b) Modifies RegisterCoalescer::reMaterializeTrivialDef and
> > TargetInstrInfo::isReallyTriviallyReMaterializableGeneric to check
> > for single live def, instead of single def.
>
> This seems dodgy to me. The instruction does also change CPSR so for
> the transformation to be valid you have to know that register is dead
> where the new instruction is being inserted. As far as I can tell the
> hasOneDef check in reMaterializeTrivialDef is a simple heuristic to
> keep the analysis local and avoid dealing with such issues.
>
> I also don't know how other users of the rematerializable property
> will cope with a wider range of
> isReallyTriviallyReMaterializableGeneric instructions.
>
> Once you start having to consider the surroundings, is it still
> "trivial"? I honestly don't know right now.
Hi Tim,
Thanks for the response!
Sorry, I didn't entirely understand why it isn't safe to propagate
while checking for single live def, could you please elaborate ?
IIUC, for above case, tmovi8 (movs) would update cpsr n/z flags, but
since it's overwritten by following instructions, it's marked as dead
in both cases ?
The patch just checks that only one def is live and remaining defs of
DefMI are dead in reMaterializeTrivialDef, in which case I assume it
should be safe to
propagate value of CopyMI into DefMI ?
If reMaterializeTrivialDef is not the right place to handle the
transform, could you please suggest where should I look for adding it
?
Thanks!

Regards,
Prathamesh
>
> Cheers.
>
> Tim.


More information about the llvm-dev mailing list