[LLVMdev] register constraints
Bob Wilson
bob.wilson at apple.com
Fri Oct 8 09:48:34 PDT 2010
On Oct 8, 2010, at 5:21 AM, Jonas Paulsson wrote:
> Hi,
>
> I have worked with GCC prior to using LLVM, and I am a bit startled to find no way to use an earlier operand as is done in GCC.
>
> For example, a sext instruction on my target takes one the operand of a low-part register, and then sign extends into the full register.I find that there is no way to use for example (set RC:$srsc, sext($src, 16)), or in any other way use a sext operator to perform this on one register.
LLVM keeps the IR in SSA form until just before register allocation. You can't have an instruction like that in SSA because $src would have multiple definitions. Instead, you can add a constraint to the instruction definition, something like "$dst = $src", to indicate that both operands must be allocated to the same register. The TwoAddressInstructionPass will then make sure that happens.
> It would be neat to be able to do this somehow. When I define a sext_inreg instruction, LLVM does not match the sext node in the DAG with this, unfortunately.
This might be a different problem. I suspect you're confusing the sext and sext_inreg operations.
If the type that you are extending from, e.g., 16-bit integer, is not a legal type for your target, then before selection DAG matching all the 16-bit values will be legalized to some legal types, e.g., 32-bit integers. At that point a "sext" (e.g., 16 to 32 bits) may turn into a "sext_inreg" (e.g., source operand is already 32 bits but the high bits need to be set).
Those are just a few things to get you started on the right track. I hope it helps.
>
> How is feats like this supposed to be done? Right now it seems that I need to do a custom lowering impelementation to replace the sext-SDValue with a subgraph with a 32bit virtual register, a copy to the low subregister, and then a sext_inreg node. Am I right?
>
> I would appreciate any answer,
>
> Jonas
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20101008/f60d7aa1/attachment.html>
More information about the llvm-dev
mailing list