在构建我的LLVM项目时,我得到了这个断言:
`Ops.size()> = NumSrcResults &&“没有提供足够的结果”'
这是导致它的指令:
def ASTI: F<0b100001,(outs),(ins i32imm:$i10s),"ASTI $i10s",[(set SP, (i32 (add (i32 SP), (i32 sext12To32Trunc2imm:$i10s))))] > {
let isReMaterializable = 1;
let mayLoad = 0;
let mayStore = 0;
let Defs = [SP];
let Uses = [SP];
}
我已经盯着它看了一段时间,无法确定问题所在。应该将立即数添加到SP并将结果存储回SP中(即SP = SP + i10s)。当我打印Ops.size()和NumSrcResults时,我得到0和2
谢谢。
2019年1月2日:快速更新:如果添加输出寄存器,则断言消失。
def ASTI:F <0b100001,(输出CPURegs:$ ra),(在i32imm:$ i10s中),“ ASTI $ i10s”,[(设置 CPURegs:$ ra < / strong>,(i32(添加(i32 SP),(i32 sext12To32Trunc2imm:$ i10s))))]> {
为什么该指令不能没有输出寄存器?