[llvm-dev] Canonical way to handle zero registers?

Simon Dardis via llvm-dev llvm-dev at lists.llvm.org
Fri Dec 22 14:17:55 PST 2017


Hi Sean,

Have you looked at inheriting from llvm:SelectionDAGISel for your target, invoking runOnMachineFunction to perform
ISEL, then post processing the output by finding the cases where -1 is synthesized then used and replacing the uses
of the synthesized -1 with the register wired to -1?

The MIPS backend takes this approach for dealing with the zero register, see MipSEISelDAGToDAG.cpp for reference.

Thanks,
Simon
________________________________
From: llvm-dev [llvm-dev-bounces at lists.llvm.org] on behalf of Sean Silva via llvm-dev [llvm-dev at lists.llvm.org]
Sent: Friday, December 22, 2017 5:22 AM
To: llvm-dev
Subject: [llvm-dev] Canonical way to handle zero registers?

I looked around the codebase and didn't see anything that obviously looked like the natural place to turn constant zero immediates into zero-registers (i.e. registers that always return zero when read). Right now we are expanding them in ISelLowering::LowerOperation but that seems too early.

The specific issue I'm hitting is that we have a register that reads as -1 and so when we replace -1 too early with this register, the standard "not" pattern (xor x, -1) will fail to match to "not".

Thanks,
Sean Silva
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171222/c5d8f77e/attachment.html>


More information about the llvm-dev mailing list