我试图使C65 LLVM后端(https://github.com/Peppar/llvm-C65)与LLVM 8.0.1(如果是LLVM 3则为原始版本)一起使用。 经过一些修复后,所有内容均可正确编译,但TableGen会生成一些错误。
错误消息都是这样的:
add_frag(dst, src1, src2): (set node:{}:$dst, (add:{} node:{}:$src1, node:{}:$src2))
Included from F:/Projects/llvm-65816/lib/Target/C65/C65.td:59:
F:/Projects/llvm-65816/lib/Target/C65\C65InstrInfo.td:1353:1: error: In add_frag: Node transform 'set' requires one operand! (got 2)
def add_frag : PatFrag<(ops node:$dst, node:$src1, node:$src2),
^
这是导致它的行(在https://github.com/Peppar/llvm-C65/blob/master/C65InstrInfo.td#L1353):
def add_frag : PatFrag<(ops node:$dst, node:$src1, node:$src2),
(set node:$dst, (add node:$src1, node:$src2))>;
TableGen语言的记录不如LLVM IR记录得那么清楚,因此我正在努力找出问题所在,但我认为这是由类型引起的。
我有以下问题:
node
是什么意思,为什么在这种情况下(如果是)这是个问题?