From 4c1eae9fb329e0e371d453957c56426294de24e9 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 13 May 2005 18:40:17 +0000 Subject: [PATCH] add TAILCALL node git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21956 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/SelectionDAG.h | 8 ++++---- include/llvm/CodeGen/SelectionDAGNodes.h | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/include/llvm/CodeGen/SelectionDAG.h b/include/llvm/CodeGen/SelectionDAG.h index c7fa36cc048..26e11b6591c 100644 --- a/include/llvm/CodeGen/SelectionDAG.h +++ b/include/llvm/CodeGen/SelectionDAG.h @@ -129,8 +129,8 @@ public: /// getCall - Note that this destroys the vector of RetVals passed in. /// SDNode *getCall(std::vector &RetVals, SDOperand Chain, - SDOperand Callee) { - SDNode *NN = new SDNode(ISD::CALL, Chain, Callee); + SDOperand Callee, bool isTailCall = false) { + SDNode *NN = new SDNode(isTailCall ? ISD::TAILCALL : ISD::CALL, Chain, Callee); NN->setValueTypes(RetVals); AllNodes.push_back(NN); return NN; @@ -140,10 +140,10 @@ public: /// where arguments are passed in physical registers. This destroys the /// RetVals and ArgsInRegs vectors. SDNode *getCall(std::vector &RetVals, SDOperand Chain, - SDOperand Callee, std::vector &ArgsInRegs) { + SDOperand Callee, std::vector &ArgsInRegs, bool isTailCall = false) { ArgsInRegs.insert(ArgsInRegs.begin(), Callee); ArgsInRegs.insert(ArgsInRegs.begin(), Chain); - SDNode *NN = new SDNode(ISD::CALL, ArgsInRegs); + SDNode *NN = new SDNode(isTailCall ? ISD::TAILCALL : ISD::CALL, ArgsInRegs); NN->setValueTypes(RetVals); AllNodes.push_back(NN); return NN; diff --git a/include/llvm/CodeGen/SelectionDAGNodes.h b/include/llvm/CodeGen/SelectionDAGNodes.h index b3ac7db890e..06a7b20ff9c 100644 --- a/include/llvm/CodeGen/SelectionDAGNodes.h +++ b/include/llvm/CodeGen/SelectionDAGNodes.h @@ -234,8 +234,10 @@ namespace ISD { // CALL - Call to a function pointer. The first operand is the chain, the // second is the destination function pointer (a GlobalAddress for a direct // call). Arguments have already been lowered to explicit DAGs according to - // the calling convention in effect here. + // the calling convention in effect here. TAILCALL is the same as CALL, but + // the callee is known not to access the stack of the caller. CALL, + TAILCALL, // MEMSET/MEMCPY/MEMMOVE - The first operand is the chain, and the rest // correspond to the operands of the LLVM intrinsic functions. The only -- 2.34.1