From: Chris Lattner Date: Sun, 4 Dec 2005 19:01:59 +0000 (+0000) Subject: Autogen matching code for ADJCALLSTACK[UP|DOWN], thanks to Evan's tblgen X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=937a79dbe3d71320e2bda8050541080f04412f14;p=oota-llvm.git Autogen matching code for ADJCALLSTACK[UP|DOWN], thanks to Evan's tblgen improvements. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24591 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp index 9ed7de49809..368a8cf0f6b 100644 --- a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp +++ b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp @@ -1190,14 +1190,6 @@ SDOperand PPCDAGToDAGISel::Select(SDOperand Op) { getI32Imm(BROpc)); } - case ISD::CALLSEQ_START: - case ISD::CALLSEQ_END: { - unsigned Amt = cast(N->getOperand(1))->getValue(); - unsigned Opc = N->getOpcode() == ISD::CALLSEQ_START ? - PPC::ADJCALLSTACKDOWN : PPC::ADJCALLSTACKUP; - return CurDAG->SelectNodeTo(N, Opc, MVT::Other, - getI32Imm(Amt), Select(N->getOperand(0))); - } case ISD::RET: { SDOperand Chain = Select(N->getOperand(0)); // Token chain. diff --git a/lib/Target/PowerPC/PPCInstrInfo.td b/lib/Target/PowerPC/PPCInstrInfo.td index ad8f91e06ba..ba8609611c9 100644 --- a/lib/Target/PowerPC/PPCInstrInfo.td +++ b/lib/Target/PowerPC/PPCInstrInfo.td @@ -30,6 +30,11 @@ def PPCfsel : SDNode<"PPCISD::FSEL", def PPChi : SDNode<"PPCISD::Hi", SDTIntBinOp, []>; def PPClo : SDNode<"PPCISD::Lo", SDTIntBinOp, []>; +// These are target-independent nodes, but have target-specific formats. +def SDT_PPCCallSeq : SDTypeProfile<0, 1, [ SDTCisVT<0, i32> ]>; +def callseq_start : SDNode<"ISD::CALLSEQ_START", SDT_PPCCallSeq,[SDNPHasChain]>; +def callseq_end : SDNode<"ISD::CALLSEQ_END", SDT_PPCCallSeq,[SDNPHasChain]>; + //===----------------------------------------------------------------------===// // PowerPC specific transformation functions and pattern fragments. // @@ -158,9 +163,13 @@ def crbitm: Operand { // Pseudo-instructions: def PHI : Pseudo<(ops variable_ops), "; PHI", []>; -let isLoad = 1 in { -def ADJCALLSTACKDOWN : Pseudo<(ops u16imm:$amt), "; ADJCALLSTACKDOWN", []>; -def ADJCALLSTACKUP : Pseudo<(ops u16imm:$amt), "; ADJCALLSTACKUP", []>; +let isLoad = 1, hasCtrlDep = 1 in { +def ADJCALLSTACKDOWN : Pseudo<(ops u16imm:$amt), + "; ADJCALLSTACKDOWN", + [(callseq_start imm:$amt)]>; +def ADJCALLSTACKUP : Pseudo<(ops u16imm:$amt), + "; ADJCALLSTACKUP", + [(callseq_end imm:$amt)]>; } def IMPLICIT_DEF_GPR : Pseudo<(ops GPRC:$rD), "; $rD = IMPLICIT_DEF_GPRC", [(set GPRC:$rD, (undef))]>;