mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-13 10:32:06 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53224 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2e033f31dc
commit
8c174a9b5a
@ -130,12 +130,9 @@ public:
|
||||
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 @@ public:
|
||||
|
||||
/// 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 @@ public:
|
||||
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
|
||||
|
Loading…
x
Reference in New Issue
Block a user