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:
Chris Lattner 2003-05-08 02:42:50 +00:00
parent c567567759
commit fb892e51ed
2 changed files with 40 additions and 3 deletions

View File

@ -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

View File

@ -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