[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