[llvm-commits] Fixing Bug 13662: paired register for inline asm with 64-bit data on ARM

Jakob Stoklund Olesen stoklund at 2pi.dk
Tue Dec 4 10:18:34 PST 2012


On Dec 4, 2012, at 9:04 AM, Weiming Zhao <weimingz at codeaurora.org> wrote:

I have to change CodeGen/SelectionDAG/InstrEmitter.cpp a litte bit because: for the inline asm nodes, I have to put a virtual reg instead of a value node.

Hi Weiming,

I'm a bit concerned about this change. A RegisterSDNode doesn't include any kind of dependency edges, so you have a 50/50 chance of you virtual register def coming before your use. I don't think you can use virtual registers in the SelectionDAG that way.

And due to “untyped” type, I can’t insert CopyFromReg or CopyToReg as the framework won’t find the GPRPairReg class.
So I have to directly connect ExtractSubReg, RegSequence with a Register SDNode.

An 'untyped' SelectionDAG edge only works when InstrEmitter can derive its register class from the defining node. That currently works for REG_SEQUENCE nodes - you probably need to make it work for INLINEASM nodes as well.

It would also be a good idea to break your patch in two: One part for providing the target-independent framework needed, and one part that fixes the ARM target.

/jakob

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20121204/510eb31a/attachment.html>


More information about the llvm-commits mailing list