[llvm-dev] How to represent two-address instruction with TableGen?

Zhang via llvm-dev llvm-dev at lists.llvm.org
Mon Dec 14 01:12:55 PST 2020


Thanks Craig and Diogo.
I understand how this works for ALU Instructions. But how about MOV Instructions?
Let's say the ISA is:


```
MOV X0,#1 // X0=1
```
I'm not sure about where to put the fake new operand in the instruction pattern part. For now I uses the following which got rejected with message :
 Operand $op does not appear in the instruction pattern




```
(outs GP8:$dst)
(ins GP8:$op,i8imm:$imm)
(set GP8:$dst,(imm i8:$imm))
```






 
 
------------------ Original ------------------
From:  "Craig Topper"<craig.topper at gmail.com>;
Date:  Mon, Dec 14, 2020 04:54 PM
To:  "Zhang"<admin at mayuyu.io>; 
Cc:  "llvm-dev"<llvm-dev at lists.llvm.org>; 
Subject:  Re: [llvm-dev] How to represent two-address instruction with TableGen?

 

You'll need to declare two sources in "ins" like this


```
"add $dst,$src"
(outs GPR64:$dst)
(ins GPR64:$src1, GPR64:$src2)
```



And your pattern will need to be 


```
(set GPR64:$dst,(add GPR64:$src1,GPR64:$src2))
```



Then just above your instruction definition you need 


```
let Constraints = "$src1 = $dst" in
```


This will tell tell register allocation that they need to be the same register.




~Craig




On Mon, Dec 14, 2020 at 12:23 AM Zhang via llvm-dev <llvm-dev at lists.llvm.org> wrote:

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/8424a87f/attachment.html>


More information about the llvm-dev mailing list