[llvm-dev] How to represent two-address instruction with TableGen?
Diogo Sampaio via llvm-dev
llvm-dev at lists.llvm.org
Mon Dec 14 00:56:07 PST 2020
Hi Zhang,
I am not sure this is the only, nor the best, way to do it, but in our backend we define a "fake" input operand for two operands instructions. And we add the constraint of the first input being the same register of the output:
let Constraints = "$in0 = $out" in
def MY_INSTRUCTION : MY_INSTRUCTION_CLASS
<(outs MyRegClass:$out), (ins MyRegClass:$in0, MyRegClass:$in1)
I guess such constraints could be all the way in your instruction classes definitions.
Hope that was clear enough.
Cheers
Diogo
From: "llvm-dev" <llvm-dev at lists.llvm.org>
To: "llvm-dev" <llvm-dev at lists.llvm.org>
Sent: Monday, December 14, 2020 9:23:16 AM
Subject: [llvm-dev] How to represent two-address instruction with TableGen?
Hi:
I'm new to LLVM backend and is developing for a custom ISA which instruction has two addresses.
For example:
add $r0,$1 means r0=r0+r1.
Previously I just declare two operands for add as following:
```
"add $dst,$src"
(outs GPR64:$dst)
(ins GPR64:$src)
```
However when I tried to add ISel patterns to this instruction with the following pattern:
```
(set GPR64:$dst,(add GPR64:$src,GPR64:$dst))
```
I received error:
```
In ADDRR: Input operand $dst occurs in pattern but not in operands list!
```
Not sure about what I did wrong here, any hint would be much appreciate
_______________________________________________
LLVM Developers mailing list
llvm-dev at lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20201214/fc3f8f52/attachment.html>
More information about the llvm-dev
mailing list