OSDN Git Service

remove #include of Function.h from IRBuilder
authorChris Lattner <sabre@nondot.org>
Mon, 28 Dec 2009 21:50:56 +0000 (21:50 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 28 Dec 2009 21:50:56 +0000 (21:50 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92231 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/IRBuilder.h
lib/VMCore/IRBuilder.cpp

index a89d5a6..7f744d6 100644 (file)
@@ -17,7 +17,7 @@
 
 #include "llvm/Constants.h"
 #include "llvm/Instructions.h"
-#include "llvm/Function.h"
+#include "llvm/BasicBlock.h"
 #include "llvm/ADT/Twine.h"
 #include "llvm/Support/ConstantFolder.h"
 
@@ -143,6 +143,10 @@ public:
   const Type *getVoidTy() {
     return Type::getVoidTy(Context);
   }
+  
+  /// getCurrentFunctionReturnType - Get the return type of the current function
+  /// that we're emitting into.
+  const Type *getCurrentFunctionReturnType() const;
 };
   
 /// IRBuilder - This provides a uniform API for creating instructions and
@@ -221,7 +225,7 @@ public:
   ReturnInst *CreateRet(Value *V) {
     return Insert(ReturnInst::Create(Context, V));
   }
-
+  
   /// CreateAggregateRet - Create a sequence of N insertvalue instructions,
   /// with one Value from the retVals array each, that build a aggregate
   /// return value one value at a time, and a ret instruction to return
@@ -229,9 +233,8 @@ public:
   /// code that uses aggregate return values as a vehicle for having
   /// multiple return values.
   ///
-  ReturnInst *CreateAggregateRet(Value * const* retVals, unsigned N) {
-    const Type *RetType = BB->getParent()->getReturnType();
-    Value *V = UndefValue::get(RetType);
+  ReturnInst *CreateAggregateRet(Value *const *retVals, unsigned N) {
+    Value *V = UndefValue::get(getCurrentFunctionReturnType());
     for (unsigned i = 0; i != N; ++i)
       V = CreateInsertValue(V, retVals[i], i, "mrv");
     return Insert(ReturnInst::Create(Context, V));
index 99803f1..0b4a109 100644 (file)
@@ -14,6 +14,7 @@
 
 #include "llvm/Support/IRBuilder.h"
 #include "llvm/GlobalVariable.h"
+#include "llvm/Function.h"
 #include "llvm/Metadata.h"
 #include "llvm/LLVMContext.h"
 using namespace llvm;
@@ -44,3 +45,8 @@ void IRBuilderBase::SetInstDebugLocation(Instruction *I) const {
   if (CurDbgLocation)
     Context.getMetadata().addMD(DbgMDKind, CurDbgLocation, I);
 }
+
+const Type *IRBuilderBase::getCurrentFunctionReturnType() const {
+  assert(BB && BB->getParent() && "No current function!");
+  return BB->getParent()->getReturnType();
+}