[llvm-dev] tablegen dag syntax question

Nicolai Hähnle via llvm-dev llvm-dev at lists.llvm.org
Sat Apr 27 02:58:08 PDT 2019

On 27.04.19 01:39, Chris Sears via llvm-dev wrote:
> What is the difference between these two fragments (taken from two 
> different tblgen record dumps)?
>    dag OutOperandList = (outs GPR:$rd);
>    dag OutOperandList = (outs R2);
> The first is from the RISCV backend record dump. There will be a 
> substitution at some point for $rd. In the second, I'm specifying R2, no 
> substitution necessary.
> If I specify GPR64:R2 or i64:R2 in my Instruction def, rather than just 
> R2, tblgen complains:
>    error: expected variable name in dag literal

This is because the syntax for dag operands is <value>:$name, where both 
parts are optional, and your attempt to use a TableGen value in place of 
the name makes no sense.

The value is typically a TableGen record (something that was created 
with a `def`), though in contexts other than the OutOperandList it could 
also be an integer, as you often see in ISel patterns.

The name is simply a symbolic name that has no meaning in the TableGen 
language itself, but is interpreted by the TableGen backend in order to 
link various parts of the instruction definition together. For example, 
the names in the OutOperandList are linked to the names mentioned in the 
definition of the textual assembly, and this link is used to 
automatically generated assembly printer and parser tables and code.

For this reason, operands in the OutOperandList really always need a name.


> If I use R1000 (which isn't defined) I get what I'd expect:
>    error: Variable not defined: 'R1000'
> There isn't any documentation (that I could find) for this syntax. 
> Consequently, I'm a little worried that using R2 rather than 
> something:R2 is somehow wrong.
> Why does the RISCV dag use GPR:$rd rather than just $rd?
> C
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.

More information about the llvm-dev mailing list