[llvm-dev] TableGen error message: top-level forms in instruction pattern should have void types

Phil Tomson via llvm-dev llvm-dev at lists.llvm.org
Thu Jan 7 11:55:00 PST 2016


I'm trying to figure out what this error message means:

error: In RelAddr: Top-level forms in instruction pattern should have void
types

The definitions it's complaining about:


//===----------------------------------------------------------------------===//
// RELADDR
//===----------------------------------------------------------------------===//

def SDT_RELADDR       : SDTypeProfile<1, 2, [SDTCisInt<0>, SDTCisSameAs<0,
1>]>;
def XSTGRELADDR       : SDNode<"XSTGISD::RELADDR", SDT_RELADDR>;

let Uses= [GRP] in {
  def RelAddr           : XSTGPseudo< (outs),
                                      (ins GPRC:$spoff, GPRC:$dst),
                                      "! RELADDR $spoff, $dst",
                                      [(XSTGRELADDR GPRC:$spoff, GPRC:
$dst)]>;
}


(specifically that 'def RelAddr' line)

If I change it to have an empty pattern match like this:
let Uses= [GRP] in {
  def RelAddr           : XSTGPseudo< (outs),
                                      (ins GPRC:$spoff, GPRC:$dst),
                                      "! RELADDR $spoff, $dst",
                                      []>;
}


It will compile, but without the pattern it's not a very useful def.

Any suggestions?

I have other XSGTGPseudo definitions in the .td file which are similar
which do compile, like this:

def SDT_XSTGEhRet : SDTypeProfile<0, 2, [SDTCisInt<0>, SDTCisPtrTy<1>]>;
def XSTGEhReturn  : SDNode<"XSTGISD::EH_Return", SDT_XSTGEhRet,
                             [SDNPHasChain, SDNPOptInGlue]>;
//
// EhReturn takes the place of regular return instruction
// but takes two arguments (R2, R3) which are used for storing
// the offset and return address respectively.
//
let Uses = [R2, R3], isTerminator = 1, isReturn = 1, isBarrier = 1 in {
  def EhReturn : XSTGPseudo< (outs),
                             (ins GPRC:$spoff, GPRC:$dst),
                             "! EH_RETURN $spoff, $dst",
                             [(XSTGEhReturn GPRC:$spoff, GPRC:$dst)]>;
}



Phil
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160107/57b58345/attachment.html>


More information about the llvm-dev mailing list