mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
add a new SDNPVariadic SDNP node flag, and use it in
dag isel gen instead of instruction properties. This allows the oh-so-useful behavior of matching a variadic non-root node. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98934 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5a9b8fb95c
commit
e8cabf3c2e
@ -219,6 +219,7 @@ def SDNPMayStore : SDNodeProperty; // May write to memory, sets 'mayStore'.
|
||||
def SDNPMayLoad : SDNodeProperty; // May read memory, sets 'mayLoad'.
|
||||
def SDNPSideEffect : SDNodeProperty; // Sets 'HasUnmodelledSideEffects'.
|
||||
def SDNPMemOperand : SDNodeProperty; // Touches memory, has assoc MemOperand
|
||||
def SDNPVariadic : SDNodeProperty; // Node has variable arguments.
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Selection DAG Node definitions.
|
||||
|
@ -119,12 +119,12 @@ def X86AtomSwap64 : SDNode<"X86ISD::ATOMSWAP64_DAG", SDTX86atomicBinary,
|
||||
[SDNPHasChain, SDNPMayStore,
|
||||
SDNPMayLoad, SDNPMemOperand]>;
|
||||
def X86retflag : SDNode<"X86ISD::RET_FLAG", SDTX86Ret,
|
||||
[SDNPHasChain, SDNPOptInFlag]>;
|
||||
[SDNPHasChain, SDNPOptInFlag, SDNPVariadic]>;
|
||||
|
||||
def X86vastart_save_xmm_regs :
|
||||
SDNode<"X86ISD::VASTART_SAVE_XMM_REGS",
|
||||
SDT_X86VASTART_SAVE_XMM_REGS,
|
||||
[SDNPHasChain]>;
|
||||
[SDNPHasChain, SDNPVariadic]>;
|
||||
|
||||
def X86callseq_start :
|
||||
SDNode<"ISD::CALLSEQ_START", SDT_X86CallSeqStart,
|
||||
@ -134,7 +134,8 @@ def X86callseq_end :
|
||||
[SDNPHasChain, SDNPOptInFlag, SDNPOutFlag]>;
|
||||
|
||||
def X86call : SDNode<"X86ISD::CALL", SDT_X86Call,
|
||||
[SDNPHasChain, SDNPOutFlag, SDNPOptInFlag]>;
|
||||
[SDNPHasChain, SDNPOutFlag, SDNPOptInFlag,
|
||||
SDNPVariadic]>;
|
||||
|
||||
def X86rep_stos: SDNode<"X86ISD::REP_STOS", SDTX86RepStr,
|
||||
[SDNPHasChain, SDNPInFlag, SDNPOutFlag, SDNPMayStore]>;
|
||||
@ -157,7 +158,7 @@ def X86ehret : SDNode<"X86ISD::EH_RETURN", SDT_X86EHRET,
|
||||
[SDNPHasChain]>;
|
||||
|
||||
def X86tcret : SDNode<"X86ISD::TC_RETURN", SDT_X86TCRET,
|
||||
[SDNPHasChain, SDNPOptInFlag]>;
|
||||
[SDNPHasChain, SDNPOptInFlag, SDNPVariadic]>;
|
||||
|
||||
def X86add_flag : SDNode<"X86ISD::ADD", SDTBinaryArithWithFlags,
|
||||
[SDNPCommutative]>;
|
||||
|
@ -671,6 +671,8 @@ SDNodeInfo::SDNodeInfo(Record *R) : Def(R) {
|
||||
Properties |= 1 << SDNPSideEffect;
|
||||
} else if (PropList[i]->getName() == "SDNPMemOperand") {
|
||||
Properties |= 1 << SDNPMemOperand;
|
||||
} else if (PropList[i]->getName() == "SDNPVariadic") {
|
||||
Properties |= 1 << SDNPVariadic;
|
||||
} else {
|
||||
errs() << "Unknown SD Node property '" << PropList[i]->getName()
|
||||
<< "' on node '" << R->getName() << "'!\n";
|
||||
|
@ -395,6 +395,8 @@ ComplexPattern::ComplexPattern(Record *R) {
|
||||
Properties |= 1 << SDNPSideEffect;
|
||||
} else if (PropList[i]->getName() == "SDNPMemOperand") {
|
||||
Properties |= 1 << SDNPMemOperand;
|
||||
} else if (PropList[i]->getName() == "SDNPVariadic") {
|
||||
Properties |= 1 << SDNPVariadic;
|
||||
} else {
|
||||
errs() << "Unsupported SD Node property '" << PropList[i]->getName()
|
||||
<< "' on ComplexPattern '" << R->getName() << "'!\n";
|
||||
|
@ -43,7 +43,8 @@ enum SDNP {
|
||||
SDNPMayLoad,
|
||||
SDNPMayStore,
|
||||
SDNPSideEffect,
|
||||
SDNPMemOperand
|
||||
SDNPMemOperand,
|
||||
SDNPVariadic
|
||||
};
|
||||
|
||||
/// getValueType - Return the MVT::SimpleValueType that the specified TableGen
|
||||
|
@ -738,7 +738,8 @@ EmitResultInstructionAsOperand(const TreePatternNode *N,
|
||||
// have an SDNP that indicates variadicism. The TargetInstrInfo isVariadic
|
||||
// property should be inferred from this when an instruction has a pattern.
|
||||
int NumFixedArityOperands = -1;
|
||||
if (isRoot && II.isVariadic)
|
||||
if (N->NodeHasProperty(SDNPVariadic, CGP) ||
|
||||
(isRoot && II.isVariadic))
|
||||
NumFixedArityOperands = Pattern.getSrcPattern()->getNumChildren();
|
||||
|
||||
// If this is the root node and any of the nodes matched nodes in the input
|
||||
|
Loading…
Reference in New Issue
Block a user