llvm-6502/lib/VMCore/iCall.cpp
Chris Lattner 2fbfdcffd3 Change references to the Method class to be references to the Function
class.  The Method class is obsolete (renamed) and all references to it
are being converted over to Function.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2144 91177308-0d34-0410-b5e6-96231b3b80d8
2002-04-07 20:49:59 +00:00

76 lines
2.8 KiB
C++

//===-- iCall.cpp - Implement the call & invoke instructions -----*- C++ -*--=//
//
// This file implements the call and invoke instructions.
//
//===----------------------------------------------------------------------===//
#include "llvm/iOther.h"
#include "llvm/iTerminators.h"
#include "llvm/DerivedTypes.h"
#include "llvm/Function.h"
//===----------------------------------------------------------------------===//
// CallInst Implementation
//===----------------------------------------------------------------------===//
CallInst::CallInst(Value *Func, const std::vector<Value*> &params,
const std::string &Name)
: Instruction(cast<FunctionType>(cast<PointerType>(Func->getType())
->getElementType())->getReturnType(),
Instruction::Call, Name) {
Operands.reserve(1+params.size());
Operands.push_back(Use(Func, this));
const FunctionType *MTy =
cast<FunctionType>(cast<PointerType>(Func->getType())->getElementType());
const FunctionType::ParamTypes &PL = MTy->getParamTypes();
assert((params.size() == PL.size()) ||
(MTy->isVarArg() && params.size() >= PL.size()) &&
"Calling a function with bad signature");
for (unsigned i = 0; i < params.size(); i++)
Operands.push_back(Use(params[i], this));
}
CallInst::CallInst(const CallInst &CI)
: Instruction(CI.getType(), Instruction::Call) {
Operands.reserve(CI.Operands.size());
for (unsigned i = 0; i < CI.Operands.size(); ++i)
Operands.push_back(Use(CI.Operands[i], this));
}
//===----------------------------------------------------------------------===//
// InvokeInst Implementation
//===----------------------------------------------------------------------===//
InvokeInst::InvokeInst(Value *Func, BasicBlock *IfNormal, \
BasicBlock *IfException,
const std::vector<Value*> &params,
const std::string &Name)
: TerminatorInst(cast<FunctionType>(cast<PointerType>(Func->getType())
->getElementType())->getReturnType(),
Instruction::Invoke, Name) {
Operands.reserve(3+params.size());
Operands.push_back(Use(Func, this));
Operands.push_back(Use(IfNormal, this));
Operands.push_back(Use(IfException, this));
const FunctionType *MTy =
cast<FunctionType>(cast<PointerType>(Func->getType())->getElementType());
const FunctionType::ParamTypes &PL = MTy->getParamTypes();
assert((params.size() == PL.size()) ||
(MTy->isVarArg() && params.size() > PL.size()) &&
"Calling a function with bad signature");
for (unsigned i = 0; i < params.size(); i++)
Operands.push_back(Use(params[i], this));
}
InvokeInst::InvokeInst(const InvokeInst &CI)
: TerminatorInst(CI.getType(), Instruction::Invoke) {
Operands.reserve(CI.Operands.size());
for (unsigned i = 0; i < CI.Operands.size(); ++i)
Operands.push_back(Use(CI.Operands[i], this));
}