[llvm-dev] Help in understanding physreg LiveVariables

Tyler Kenney via llvm-dev llvm-dev at lists.llvm.org
Tue Aug 23 14:07:22 PDT 2016


So if I create a value with a DAG.getUndef(myVT); call during instruction
legalization, how can I access that value as input in another BB/DAG (also
during instruction legalization) without worrying about live-ins and/or phi
nodes?

Can I create a single virtual register and build both a CopyToReg and a
CopyFromReg node with it? I assumed that would break SSA.

Perhaps I should have said that what stops me is that I don't know how to
pass a newly created virtual register from one MBB/DAG to another.

Tyler




From:	Matthias Braun <mbraun at apple.com>
To:	Tyler Kenney/Marlborough/IBM at IBMUS
Cc:	llvm-dev at lists.llvm.org
Date:	08/23/2016 04:43 PM
Subject:	Re: [llvm-dev] Help in understanding physreg LiveVariables
Sent by:	mbraun at apple.com




      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

      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/6e54ec46/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: graycol.gif
Type: image/gif
Size: 105 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160823/6e54ec46/attachment.gif>


More information about the llvm-dev mailing list