Allocation insts always have one operand
[oota-llvm.git] / lib / VMCore / iCall.cpp
index 3f73933690d210d2b2737baabe5c026827829273..3a0545f17425f828377a97326ffaa52acb54a87e 100644 (file)
@@ -7,24 +7,24 @@
 #include "llvm/iOther.h"
 #include "llvm/iTerminators.h"
 #include "llvm/DerivedTypes.h"
-#include "llvm/Method.h"
+#include "llvm/Function.h"
 
 //===----------------------------------------------------------------------===//
 //                        CallInst Implementation
 //===----------------------------------------------------------------------===//
 
-CallInst::CallInst(Value *Meth, const vector<Value*> &params, 
-                   const string &Name) 
-  : Instruction(cast<MethodType>(cast<PointerType>(Meth->getType())
-                                ->getValueType())->getReturnType(),
-               Instruction::Call, Name) {
+CallInst::CallInst(Value *Func, const std::vector<Value*> &params, 
+                   const std::string &Name, Instruction *InsertBefore) 
+  : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType())
+                                ->getElementType())->getReturnType(),
+               Instruction::Call, Name, InsertBefore) {
   Operands.reserve(1+params.size());
-  Operands.push_back(Use(Meth, this));
+  Operands.push_back(Use(Func, this));
 
-  const MethodType *MTy = 
-    cast<MethodType>(cast<PointerType>(Meth->getType())->getValueType());
+  const FunctionType *MTy = 
+    cast<FunctionType>(cast<PointerType>(Func->getType())->getElementType());
 
-  const MethodType::ParamTypes &PL = MTy->getParamTypes();
+  const FunctionType::ParamTypes &PL = MTy->getParamTypes();
   assert((params.size() == PL.size()) || 
         (MTy->isVarArg() && params.size() >= PL.size()) &&
         "Calling a function with bad signature");
@@ -43,20 +43,21 @@ CallInst::CallInst(const CallInst &CI)
 //                        InvokeInst Implementation
 //===----------------------------------------------------------------------===//
 
-InvokeInst::InvokeInst(Value *Meth, BasicBlock *IfNormal, \
-                      BasicBlock *IfException, const vector<Value*>&params,
-                      const string &Name)
-  : TerminatorInst(cast<MethodType>(cast<PointerType>(Meth->getType())
-                                   ->getValueType())->getReturnType(),
-                  Instruction::Invoke, Name) {
+InvokeInst::InvokeInst(Value *Func, BasicBlock *IfNormal,
+                      BasicBlock *IfException,
+                       const std::vector<Value*> &params,
+                      const std::string &Name, Instruction *InsertBefore)
+  : TerminatorInst(cast<FunctionType>(cast<PointerType>(Func->getType())
+                                   ->getElementType())->getReturnType(),
+                  Instruction::Invoke, Name, InsertBefore) {
   Operands.reserve(3+params.size());
-  Operands.push_back(Use(Meth, this));
-  Operands.push_back(Use(IfNormal, this));
-  Operands.push_back(Use(IfException, this));
-  const MethodType *MTy = 
-    cast<MethodType>(cast<PointerType>(Meth->getType())->getValueType());
+  Operands.push_back(Use(Func, this));
+  Operands.push_back(Use((Value*)IfNormal, this));
+  Operands.push_back(Use((Value*)IfException, this));
+  const FunctionType *MTy = 
+    cast<FunctionType>(cast<PointerType>(Func->getType())->getElementType());
   
-  const MethodType::ParamTypes &PL = MTy->getParamTypes();
+  const FunctionType::ParamTypes &PL = MTy->getParamTypes();
   assert((params.size() == PL.size()) || 
         (MTy->isVarArg() && params.size() > PL.size()) &&
         "Calling a function with bad signature");