[llvm-dev] Help in understanding physreg LiveVariables

Matthias Braun via llvm-dev llvm-dev at lists.llvm.org
Tue Aug 23 13:43:00 PDT 2016


> On Aug 23, 2016, at 1:38 PM, Tyler Kenney <tjkenney at us.ibm.com> wrote:
> 
> Matthias,
>  
> Thanks for the response.
>  
> In short, I'm using physregs because my current design, in some cases, needs to create an entirely new var/reg during instruction legalization. This value can be passed from one basic block to another and, therefore, must be added as a live-in to a number of basic blocks. I was unable to find a way to add a virt reg as a live-in to an MBB, thus the need for physregs. I asked about adding new inputs & outputs to basic blocks during instruction legalization/selection earlier on:
>  
> http://lists.llvm.org/pipermail/llvm-dev/2016-June/100387.html <http://lists.llvm.org/pipermail/llvm-dev/2016-June/100387.html>
>  
> Tim Northover responded with some useful insight but I did not really get a direct answer to my question on how to add MBB inputs (or if it's possible). The solution that I developed myself is to use virtual registers within MBBs and build CopyFrom/ToReg nodes at the BB boundaries with a physreg number, then add this physreg as a live-in where appropriate. This has been working for a few weeks now and, until I discovered this new issue where my live-in is ignored, had no known issues.
>  
> So, to answer your question, what stops me from copying the physreg to a virtual register after the last def (and also stops me from avoiding pre-RA physregs entirely) is that I do not know how to add a virt reg live-in (and ensure the proper phi nodes get updated/created).
>  
> If it's assumed that allocatable (and unreserved) PhysRegs are only live within a basic block, why is it possible to add such a physreg as an MBB live-in? Should there be an assertion added to MachineBasicBlock::addLiveIn() ?
You should not need to worry about live-ins, they are only assumed to complete after register allocation. The only exception to this rule is the exception value on the edge to a landing part being marked as live-in and the per-function live-ins for arguments, but you should not need to worry about those two cases.

- Matthias


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160823/64b7133b/attachment.html>


More information about the llvm-dev mailing list