mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-27 22:15:18 +00:00
Derive GetResultInst from UnaryInstruction, this simplifies code and removes a FIXME.
llvm-svn: 51023
This commit is contained in:
parent
138a53b303
commit
22afb1f8f0
@ -85,8 +85,9 @@ public:
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
class UnaryInstruction : public Instruction {
|
||||
void *operator new(size_t, unsigned); // Do not implement
|
||||
|
||||
void *operator new(size_t, unsigned); // Do not implement
|
||||
UnaryInstruction(const UnaryInstruction&); // Do not implement
|
||||
|
||||
protected:
|
||||
UnaryInstruction(const Type *Ty, unsigned iType, Value *V, Instruction *IB = 0)
|
||||
: Instruction(Ty, iType, &Op<0>(), 1, IB) {
|
||||
@ -116,6 +117,7 @@ public:
|
||||
I->getOpcode() == Instruction::Free ||
|
||||
I->getOpcode() == Instruction::Load ||
|
||||
I->getOpcode() == Instruction::VAArg ||
|
||||
I->getOpcode() == Instruction::GetResult ||
|
||||
(I->getOpcode() >= CastOpsBegin && I->getOpcode() < CastOpsEnd);
|
||||
}
|
||||
static inline bool classof(const Value *V) {
|
||||
|
@ -2761,20 +2761,14 @@ public:
|
||||
/// GetResultInst - This instruction extracts individual result value from
|
||||
/// aggregate value, where aggregate value is returned by CallInst.
|
||||
///
|
||||
class GetResultInst : public /*FIXME: Unary*/Instruction {
|
||||
void *operator new(size_t, unsigned); // DO NOT IMPLEMENT
|
||||
class GetResultInst : public UnaryInstruction {
|
||||
unsigned Idx;
|
||||
GetResultInst(const GetResultInst &GRI) :
|
||||
Instruction(GRI.getType(), Instruction::GetResult, &Op<0>(), 1) {
|
||||
Op<0>().init(GRI.Op<0>(), this);
|
||||
Idx = GRI.Idx;
|
||||
UnaryInstruction(GRI.getType(), Instruction::GetResult, GRI.getOperand(0)),
|
||||
Idx(GRI.Idx) {
|
||||
}
|
||||
|
||||
public:
|
||||
// allocate space for exactly one operand
|
||||
void *operator new(size_t s) {
|
||||
return User::operator new(s, 1);
|
||||
}
|
||||
GetResultInst(Value *Aggr, unsigned index,
|
||||
const std::string &Name = "",
|
||||
Instruction *InsertBefore = 0);
|
||||
@ -2797,9 +2791,6 @@ public:
|
||||
return Idx;
|
||||
}
|
||||
|
||||
/// Provide fast operand accessors
|
||||
DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
|
||||
|
||||
// Methods for support type inquiry through isa, cast, and dyn_cast:
|
||||
static inline bool classof(const GetResultInst *) { return true; }
|
||||
static inline bool classof(const Instruction *I) {
|
||||
@ -2810,14 +2801,6 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
// FIXME: these are redundant if GetResultInst < UnaryInstruction
|
||||
template <>
|
||||
struct OperandTraits<GetResultInst> : FixedNumOperandTraits<1> {
|
||||
};
|
||||
|
||||
DEFINE_TRANSPARENT_OPERAND_ACCESSORS(GetResultInst, Value)
|
||||
|
||||
|
||||
} // End llvm namespace
|
||||
|
||||
#endif
|
||||
|
@ -2734,14 +2734,12 @@ void SwitchInst::setSuccessorV(unsigned idx, BasicBlock *B) {
|
||||
GetResultInst::GetResultInst(Value *Aggregate, unsigned Index,
|
||||
const std::string &Name,
|
||||
Instruction *InsertBef)
|
||||
: Instruction(cast<StructType>(Aggregate->getType())->getElementType(Index),
|
||||
GetResult,
|
||||
OperandTraits<GetResultInst>::op_begin(this),
|
||||
OperandTraits<GetResultInst>::operands(this),
|
||||
InsertBef) {
|
||||
assert(isValidOperands(Aggregate, Index) && "Invalid GetResultInst operands!");
|
||||
Op<0>().init(Aggregate, this);
|
||||
Idx = Index;
|
||||
: UnaryInstruction(cast<StructType>(Aggregate->getType())
|
||||
->getElementType(Index),
|
||||
GetResult, Aggregate, InsertBef),
|
||||
Idx(Index) {
|
||||
assert(isValidOperands(Aggregate, Index)
|
||||
&& "Invalid GetResultInst operands!");
|
||||
setName(Name);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user