diff options
| author | Chris Lattner <sabre@nondot.org> | 2005-12-04 19:01:59 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2005-12-04 19:01:59 +0000 |
| commit | f9797947175b23a7aa57c03413f3223946a8be45 (patch) | |
| tree | 639a5b15c7761a36a8019d71368bd635f1d39125 | |
| parent | fd857daa0de2f0150524655f10888a73b30752cd (diff) | |
| download | bcm5719-llvm-f9797947175b23a7aa57c03413f3223946a8be45.tar.gz bcm5719-llvm-f9797947175b23a7aa57c03413f3223946a8be45.zip | |
Autogen matching code for ADJCALLSTACK[UP|DOWN], thanks to Evan's tblgen
improvements.
llvm-svn: 24591
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp | 8 | ||||
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCInstrInfo.td | 15 |
2 files changed, 12 insertions, 11 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp index 9ed7de49809..368a8cf0f6b 100644 --- a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp +++ b/llvm/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<ConstantSDNode>(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/llvm/lib/Target/PowerPC/PPCInstrInfo.td b/llvm/lib/Target/PowerPC/PPCInstrInfo.td index ad8f91e06ba..ba8609611c9 100644 --- a/llvm/lib/Target/PowerPC/PPCInstrInfo.td +++ b/llvm/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<i8> { // 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))]>; |

