[llvm-commits] [llvm] r53224 - /llvm/trunk/include/llvm/Support/CallSite.h
Matthijs Kooijman
matthijs at stdin.nl
Tue Jul 8 01:50:35 PDT 2008
Author: matthijs
Date: Tue Jul 8 03:50:32 2008
New Revision: 53224
URL: http://llvm.org/viewvc/llvm-project?rev=53224&view=rev
Log:
Add CallSite::getArgumentOffset() to hide the differences in operands betwen
Call and Invoke in a single method instead of having it hardcoded in multiple
places.
Modified:
llvm/trunk/include/llvm/Support/CallSite.h
Modified: llvm/trunk/include/llvm/Support/CallSite.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/CallSite.h?rev=53224&r1=53223&r2=53224&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/CallSite.h (original)
+++ llvm/trunk/include/llvm/Support/CallSite.h Tue Jul 8 03:50:32 2008
@@ -130,12 +130,9 @@
void setArgument(unsigned ArgNo, Value* newVal) {
assert(I && "Not a call or invoke instruction!");
assert(arg_begin() + ArgNo < arg_end() && "Argument # out of range!");
- if (I->getOpcode() == Instruction::Call)
- I->setOperand(ArgNo+1, newVal); // Skip Function
- else
- I->setOperand(ArgNo+3, newVal); // Skip Function, BB, BB
+ I->setOperand(getArgumentOffset() + ArgNo, newVal);
}
-
+
/// hasArgument - Returns true if this CallSite passes the given Value* as an
/// argument to the called function.
bool hasArgument(const Value *Arg) const;
@@ -146,14 +143,11 @@
/// arg_begin/arg_end - Return iterators corresponding to the actual argument
/// list for a call site.
- ///
arg_iterator arg_begin() const {
assert(I && "Not a call or invoke instruction!");
- if (I->getOpcode() == Instruction::Call)
- return I->op_begin()+1; // Skip Function
- else
- return I->op_begin()+3; // Skip Function, BB, BB
+ return I->op_begin() + getArgumentOffset(); // Skip non-arguments
}
+
arg_iterator arg_end() const { return I->op_end(); }
bool arg_empty() const { return arg_end() == arg_begin(); }
unsigned arg_size() const { return unsigned(arg_end() - arg_begin()); }
@@ -161,6 +155,15 @@
bool operator<(const CallSite &CS) const {
return getInstruction() < CS.getInstruction();
}
+
+private:
+ /// Returns the operand number of the first argument
+ unsigned getArgumentOffset() const {
+ if (I->getOpcode() == Instruction::Call)
+ return 1; // Skip Function
+ else
+ return 3; // Skip Function, BB, BB
+ }
};
} // End llvm namespace
More information about the llvm-commits
mailing list