diff options
| author | Chris Lattner <sabre@nondot.org> | 2001-07-07 08:36:50 +0000 | 
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2001-07-07 08:36:50 +0000 | 
| commit | a073acb22d6262e40bef357279fd61ab0ef8b642 (patch) | |
| tree | b9a1ef2336895d1d3d250a339370d84b6b99f8d1 /llvm/lib/VMCore/iCall.cpp | |
| parent | 37099990b3d340de8cfa635cd8559ef79e8b2c5f (diff) | |
| download | bcm5719-llvm-a073acb22d6262e40bef357279fd61ab0ef8b642.tar.gz bcm5719-llvm-a073acb22d6262e40bef357279fd61ab0ef8b642.zip  | |
Changed the fundemental architecture of Operands for Instructions.  Now
Operands are maintained as a vector<Use> in the User class, and operator
iterators are provided as before.  Getting an operand no longer requires
a virtual function call.
WARNING: getOperand(x) where x >= getNumOperands() will now assert instead
of returning null!
llvm-svn: 149
Diffstat (limited to 'llvm/lib/VMCore/iCall.cpp')
| -rw-r--r-- | llvm/lib/VMCore/iCall.cpp | 37 | 
1 files changed, 13 insertions, 24 deletions
diff --git a/llvm/lib/VMCore/iCall.cpp b/llvm/lib/VMCore/iCall.cpp index 7632798c66a..67826ff4bcb 100644 --- a/llvm/lib/VMCore/iCall.cpp +++ b/llvm/lib/VMCore/iCall.cpp @@ -1,6 +1,6 @@ -//===-- iCall.cpp - Implement the Call & Invoke instructions -----*- C++ -*--=// +//===-- iCall.cpp - Implement the call & icall instructions ------*- C++ -*--=//  // -// This file implements the call and invoke instructions. +// This file implements the call and icall instructions.  //  //===----------------------------------------------------------------------===// @@ -8,9 +8,12 @@  #include "llvm/DerivedTypes.h"  #include "llvm/Method.h" -CallInst::CallInst(Method *m, vector<Value*> ¶ms,  +CallInst::CallInst(Method *M, vector<Value*> ¶ms,                      const string &Name)  -  : Instruction(m->getReturnType(), Instruction::Call, Name), M(m, this) { +  : Instruction(M->getReturnType(), Instruction::Call, Name) { + +  Operands.reserve(1+params.size()); +  Operands.push_back(Use(M, this));    const MethodType* MT = M->getMethodType();    const MethodType::ParamTypes &PL = MT->getParamTypes(); @@ -19,29 +22,15 @@ CallInst::CallInst(Method *m, vector<Value*> ¶ms,    MethodType::ParamTypes::const_iterator It = PL.begin();  #endif    for (unsigned i = 0; i < params.size(); i++) { -    assert(*It++ == params[i]->getType()); -    Params.push_back(Use(params[i], this)); +    assert(*It++ == params[i]->getType() && "Call Operands not correct type!"); +    Operands.push_back(Use(params[i], this));    }  }  CallInst::CallInst(const CallInst &CI)  -  : Instruction(CI.getType(), Instruction::Call), M(CI.M, this) { -  for (unsigned i = 0; i < CI.Params.size(); i++) -    Params.push_back(Use(CI.Params[i], this)); -} - -void CallInst::dropAllReferences() {  -  M = 0; -  Params.clear();  +  : 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));  } -bool CallInst::setOperand(unsigned i, Value *Val) { -  if (i > Params.size()) return false; -  if (i == 0) { -    M = Val->castMethodAsserting(); -  } else { -    // TODO: assert = method arg type -    Params[i-1] = Val; -  } -  return true; -}  | 

