[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