Add GetResultInst. First step for multiple return value support.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47348 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Devang Patel
2008-02-19 22:15:16 +00:00
parent 222ebf70b7
commit 40a04216da
6 changed files with 88 additions and 1 deletions

View File

@@ -2340,6 +2340,56 @@ public:
}
};
//===----------------------------------------------------------------------===//
// GetResultInst Class
//===----------------------------------------------------------------------===//
/// GetResultInst - This instruction extracts individual result value from
/// aggregate value, where aggregate value is returned by CallInst.
///
class GetResultInst : public Instruction {
Use Ops[2];
GetResultInst(const GetResultInst &GRI) :
Instruction(GRI.getType(), Instruction::GetResult, Ops, 2) {
Ops[0].init(GRI.Ops[0], this);
Ops[1].init(GRI.Ops[1], this);
}
public:
explicit GetResultInst(Value *Aggr, Value *Index,
const std::string &Name = "",
Instruction *InsertBefore = 0);
/// isValidOperands - Return true if an getresult instruction can be
/// formed with the specified operands.
static bool isValidOperands(const Value *Aggr, const Value *Idx);
virtual GetResultInst *clone() const;
// getType - Get aggregate value element type
inline const Type *getType() const {
return Ops[0]->getType();
}
Value *getAggregateValue() {
return getOperand(0);
}
const Value *geIndex() {
return getOperand(1);
}
unsigned getNumOperands() const { return 2; }
// 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) {
return (I->getOpcode() == Instruction::GetResult);
}
static inline bool classof(const Value *V) {
return isa<Instruction>(V) && classof(cast<Instruction>(V));
}
};
} // End llvm namespace
#endif