[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