add a new CreateStackTemporary helper method.
authorChris Lattner <sabre@nondot.org>
Mon, 15 Oct 2007 17:47:20 +0000 (17:47 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 15 Oct 2007 17:47:20 +0000 (17:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42994 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/SelectionDAG.h
lib/CodeGen/SelectionDAG/SelectionDAG.cpp

index 0120e99c8b65f5a7c42d439f68c12f1eb52869a9..aef63d6edc13a05f123b0983c129f9e0267fcd2b 100644 (file)
@@ -492,6 +492,10 @@ public:
 
   void dump() const;
 
+  /// CreateStackTemporary - Create a stack temporary, suitable for holding the
+  /// specified value type.
+  SDOperand CreateStackTemporary(MVT::ValueType VT);
+  
   /// FoldSetCC - Constant fold a setcc to true or false.
   SDOperand FoldSetCC(MVT::ValueType VT, SDOperand N1,
                       SDOperand N2, ISD::CondCode Cond);
index 9a1ea7cb3867bead52a017601049a1f708ff8b33..b1b3bd4fb856da120a1ac4f25b1be29bf0c59722 100644 (file)
@@ -19,6 +19,7 @@
 #include "llvm/Assembly/Writer.h"
 #include "llvm/CodeGen/MachineBasicBlock.h"
 #include "llvm/CodeGen/MachineConstantPool.h"
+#include "llvm/CodeGen/MachineFrameInfo.h"
 #include "llvm/Support/MathExtras.h"
 #include "llvm/Target/MRegisterInfo.h"
 #include "llvm/Target/TargetData.h"
@@ -913,6 +914,18 @@ SDOperand SelectionDAG::getSrcValue(const Value *V, int Offset) {
   return SDOperand(N, 0);
 }
 
+/// CreateStackTemporary - Create a stack temporary, suitable for holding the
+/// specified value type.
+SDOperand SelectionDAG::CreateStackTemporary(MVT::ValueType VT) {
+  MachineFrameInfo *FrameInfo = getMachineFunction().getFrameInfo();
+  unsigned ByteSize = MVT::getSizeInBits(VT)/8;
+  const Type *Ty = MVT::getTypeForValueType(VT);
+  unsigned StackAlign = (unsigned)TLI.getTargetData()->getPrefTypeAlignment(Ty);
+  int FrameIdx = FrameInfo->CreateStackObject(ByteSize, StackAlign);
+  return getFrameIndex(FrameIdx, TLI.getPointerTy());
+}
+
+
 SDOperand SelectionDAG::FoldSetCC(MVT::ValueType VT, SDOperand N1,
                                   SDOperand N2, ISD::CondCode Cond) {
   // These setcc operations always fold.