[LLVMdev] Odd error with Return Instruction

Tiago Trevisan Jost tiagotrevisanjost at gmail.com
Tue May 5 19:30:50 PDT 2015


Hi everyone,

I am working on a new backend and I am having an odd problem with the
CodeGenEmitter (trying to create GenCodeEmitter.inc) when defining the
 "return" instruction of this architecture. I have followed other backends,
however, that did not solve it.

The "Return" instruction is defined as follows.

def Ret : SDNode<"ArchISD::RET", SDTNone,
                     [SDNPHasChain, SDNPOptInGlue, SDNPVariadic]>;

class ReturnInstr<string OpcStr, bits<8> OpVal, InstrItinClass Itin>
    : InstArch<(outs), (ins),
                OpcStr,
                [(Ret)], Itin>{
    let isReturn = 1;
}

def RET       : ReturnInstr<"return", 0b00100110, IIAlu>;


And the error is the following.

*Assertion failed: (i < OperandList.size() && "Invalid flat operand #"),
function getSubOperandNumber, file
llvm/utils/TableGen/CodeGenInstruction.h, line 186.*


The odd thing is: this is similar to other architectures.

It looks like I cannot make an instruction to be *SDTNone (no Ins)*, since
it worked when I changed this instruction by adding an Input DAG in it
(that is not what I want, though).

Any thoughts? Am I missing something?


Thanks,
Tiago
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150505/39817b00/attachment.html>


More information about the llvm-dev mailing list