mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-12 22:28:22 +00:00
Add new VarArgInst class for the va_arg instruction
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6027 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c567567759
commit
fb892e51ed
@ -119,10 +119,11 @@ HANDLE_OTHER_INST(28, Call , CallInst ) // Call a function
|
||||
|
||||
HANDLE_OTHER_INST(29, Shl , ShiftInst ) // Shift operations
|
||||
HANDLE_OTHER_INST(30, Shr , ShiftInst )
|
||||
HANDLE_OTHER_INST(31, VarArg , VarArgInst ) // va_arg instruction
|
||||
|
||||
HANDLE_OTHER_INST(31, UserOp1, Instruction) // May be used internally in a pass
|
||||
HANDLE_OTHER_INST(32, UserOp2, Instruction)
|
||||
LAST_OTHER_INST(32)
|
||||
HANDLE_OTHER_INST(32, UserOp1, Instruction) // May be used internally in a pass
|
||||
HANDLE_OTHER_INST(33, UserOp2, Instruction)
|
||||
LAST_OTHER_INST(33)
|
||||
|
||||
#undef FIRST_TERM_INST
|
||||
#undef HANDLE_TERM_INST
|
||||
|
@ -121,4 +121,40 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// VarArgInst Class
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
/// VarArgInst - This class represents the va_arg llvm instruction, which reads
|
||||
/// an argument of the destination type from the va_list operand pointed to by
|
||||
/// the only operand.
|
||||
///
|
||||
class VarArgInst : public Instruction {
|
||||
VarArgInst(const VarArgInst &VAI) : Instruction(VAI.getType(), VarArg) {
|
||||
Operands.reserve(1);
|
||||
Operands.push_back(Use(VAI.Operands[0], this));
|
||||
}
|
||||
public:
|
||||
VarArgInst(Value *S, const Type *Ty, const std::string &Name = "",
|
||||
Instruction *InsertBefore = 0)
|
||||
: Instruction(Ty, VarArg, Name, InsertBefore) {
|
||||
Operands.reserve(1);
|
||||
Operands.push_back(Use(S, this));
|
||||
}
|
||||
|
||||
virtual Instruction *clone() const { return new VarArgInst(*this); }
|
||||
|
||||
bool mayWriteToMemory() const { return true; }
|
||||
|
||||
// Methods for support type inquiry through isa, cast, and dyn_cast:
|
||||
static inline bool classof(const VarArgInst *) { return true; }
|
||||
static inline bool classof(const Instruction *I) {
|
||||
return I->getOpcode() == VarArg;
|
||||
}
|
||||
static inline bool classof(const Value *V) {
|
||||
return isa<Instruction>(V) && classof(cast<Instruction>(V));
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user