[llvm-commits] [llvm] r49625 - in /llvm/branches/ggreif/use-diet: include/llvm/Instructions.h lib/VMCore/Instructions.cpp
Gabor Greif
ggreif at gmail.com
Sun Apr 13 15:10:06 PDT 2008
Author: ggreif
Date: Sun Apr 13 17:10:04 2008
New Revision: 49625
URL: http://llvm.org/viewvc/llvm-project?rev=49625&view=rev
Log:
trait-ify Insert/ExtractElementInst
Modified:
llvm/branches/ggreif/use-diet/include/llvm/Instructions.h
llvm/branches/ggreif/use-diet/lib/VMCore/Instructions.cpp
Modified: llvm/branches/ggreif/use-diet/include/llvm/Instructions.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/ggreif/use-diet/include/llvm/Instructions.h?rev=49625&r1=49624&r2=49625&view=diff
==============================================================================
--- llvm/branches/ggreif/use-diet/include/llvm/Instructions.h (original)
+++ llvm/branches/ggreif/use-diet/include/llvm/Instructions.h Sun Apr 13 17:10:04 2008
@@ -1252,7 +1252,8 @@
virtual ExtractElementInst *clone() const;
/// Transparently provide more efficient getOperand methods.
- Value *getOperand(unsigned i) const {
+ DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
+ /* Value *getOperand(unsigned i) const {
assert(i < 2 && "getOperand() out of range!");
return OperandList[i];
}
@@ -1260,7 +1261,7 @@
assert(i < 2 && "setOperand() out of range!");
OperandList[i] = Val;
}
- unsigned getNumOperands() const { return 2; }
+ unsigned getNumOperands() const { return 2; }*/
// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const ExtractElementInst *) { return true; }
@@ -1272,6 +1273,12 @@
}
};
+template <>
+struct OperandTraits<ExtractElementInst> : FixedNumOperandTraits<2> {
+};
+
+DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ExtractElementInst, Value)
+
//===----------------------------------------------------------------------===//
// InsertElementInst Class
//===----------------------------------------------------------------------===//
@@ -1299,7 +1306,7 @@
}
static InsertElementInst *Create(Value *Vec, Value *NewElt, unsigned Idx,
const std::string &Name = "",Instruction *InsertBefore = 0) {
- return new(3/*FIXME*/) InsertElementInst(Vec, NewElt, Idx, Name, InsertBefore);
+ return new(3) InsertElementInst(Vec, NewElt, Idx, Name, InsertBefore);
}
static InsertElementInst *Create(Value *Vec, Value *NewElt, Value *Idx,
const std::string &Name, BasicBlock *InsertAtEnd) {
@@ -1307,7 +1314,7 @@
}
static InsertElementInst *Create(Value *Vec, Value *NewElt, unsigned Idx,
const std::string &Name, BasicBlock *InsertAtEnd) {
- return new(3/*FIXME*/) InsertElementInst(Vec, NewElt, Idx, Name, InsertAtEnd);
+ return new(3) InsertElementInst(Vec, NewElt, Idx, Name, InsertAtEnd);
}
/// isValidOperands - Return true if an insertelement instruction can be
@@ -1324,7 +1331,8 @@
}
/// Transparently provide more efficient getOperand methods.
- Value *getOperand(unsigned i) const {
+ DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
+ /* Value *getOperand(unsigned i) const {
assert(i < 3 && "getOperand() out of range!");
return OperandList[i];
}
@@ -1332,7 +1340,7 @@
assert(i < 3 && "setOperand() out of range!");
OperandList[i] = Val;
}
- unsigned getNumOperands() const { return 3; }
+ unsigned getNumOperands() const { return 3; }*/
// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const InsertElementInst *) { return true; }
@@ -1344,6 +1352,12 @@
}
};
+template <>
+struct OperandTraits<InsertElementInst> : FixedNumOperandTraits<3> {
+};
+
+DEFINE_TRANSPARENT_OPERAND_ACCESSORS(InsertElementInst, Value)
+
//===----------------------------------------------------------------------===//
// ShuffleVectorInst Class
//===----------------------------------------------------------------------===//
@@ -1378,19 +1392,6 @@
/// Transparently provide more efficient getOperand methods.
DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
- /* const Value *getOperand(unsigned i) const {
- assert(i < 3 && "getOperand() out of range!");
- return OperandList[i];
- }
- Value *getOperand(unsigned i) {
- assert(i < 3 && "getOperand() out of range!");
- return OperandList[i];
- }
- void setOperand(unsigned i, Value *Val) {
- assert(i < 3 && "setOperand() out of range!");
- OperandList[i] = Val;
- }
- unsigned getNumOperands() const { return 3; }*/
/// getMaskValue - Return the index from the shuffle mask for the specified
/// output result. This is either -1 if the element is undef or a number less
Modified: llvm/branches/ggreif/use-diet/lib/VMCore/Instructions.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/ggreif/use-diet/lib/VMCore/Instructions.cpp?rev=49625&r1=49624&r2=49625&view=diff
==============================================================================
--- llvm/branches/ggreif/use-diet/lib/VMCore/Instructions.cpp (original)
+++ llvm/branches/ggreif/use-diet/lib/VMCore/Instructions.cpp Sun Apr 13 17:10:04 2008
@@ -1114,7 +1114,9 @@
const std::string &Name,
Instruction *InsertBef)
: Instruction(cast<VectorType>(Val->getType())->getElementType(),
- ExtractElement, /*Ops*/NULL, 2, InsertBef) {
+ ExtractElement,
+ OperandTraits<ExtractElementInst>::op_begin(this),
+ 2, InsertBef) {
assert(isValidOperands(Val, Index) &&
"Invalid extractelement instruction operands!");
Op<0>().init(Val, this);
@@ -1126,7 +1128,9 @@
const std::string &Name,
Instruction *InsertBef)
: Instruction(cast<VectorType>(Val->getType())->getElementType(),
- ExtractElement, /*Ops*/NULL, 2, InsertBef) {
+ ExtractElement,
+ OperandTraits<ExtractElementInst>::op_begin(this),
+ 2, InsertBef) {
Constant *Index = ConstantInt::get(Type::Int32Ty, IndexV);
assert(isValidOperands(Val, Index) &&
"Invalid extractelement instruction operands!");
@@ -1140,7 +1144,9 @@
const std::string &Name,
BasicBlock *InsertAE)
: Instruction(cast<VectorType>(Val->getType())->getElementType(),
- ExtractElement, /*Ops*/NULL, 2, InsertAE) {
+ ExtractElement,
+ OperandTraits<ExtractElementInst>::op_begin(this),
+ 2, InsertAE) {
assert(isValidOperands(Val, Index) &&
"Invalid extractelement instruction operands!");
@@ -1153,7 +1159,9 @@
const std::string &Name,
BasicBlock *InsertAE)
: Instruction(cast<VectorType>(Val->getType())->getElementType(),
- ExtractElement, /*Ops*/NULL, 2, InsertAE) {
+ ExtractElement,
+ OperandTraits<ExtractElementInst>::op_begin(this),
+ 2, InsertAE) {
Constant *Index = ConstantInt::get(Type::Int32Ty, IndexV);
assert(isValidOperands(Val, Index) &&
"Invalid extractelement instruction operands!");
@@ -1176,7 +1184,8 @@
//===----------------------------------------------------------------------===//
InsertElementInst::InsertElementInst(const InsertElementInst &IE)
- : Instruction(IE.getType(), InsertElement, /*Ops*/NULL, 3) {
+ : Instruction(IE.getType(), InsertElement,
+ OperandTraits<InsertElementInst>::op_begin(this), 3) {
Op<0>().init(IE.Op<0>(), this);
Op<1>().init(IE.Op<1>(), this);
Op<2>().init(IE.Op<2>(), this);
@@ -1184,7 +1193,9 @@
InsertElementInst::InsertElementInst(Value *Vec, Value *Elt, Value *Index,
const std::string &Name,
Instruction *InsertBef)
- : Instruction(Vec->getType(), InsertElement, /*Ops*/NULL, 3, InsertBef) {
+ : Instruction(Vec->getType(), InsertElement,
+ OperandTraits<InsertElementInst>::op_begin(this),
+ 3, InsertBef) {
assert(isValidOperands(Vec, Elt, Index) &&
"Invalid insertelement instruction operands!");
Op<0>().init(Vec, this);
@@ -1196,7 +1207,9 @@
InsertElementInst::InsertElementInst(Value *Vec, Value *Elt, unsigned IndexV,
const std::string &Name,
Instruction *InsertBef)
- : Instruction(Vec->getType(), InsertElement, /*Ops*/NULL, 3, InsertBef) {
+ : Instruction(Vec->getType(), InsertElement,
+ OperandTraits<InsertElementInst>::op_begin(this),
+ 3, InsertBef) {
Constant *Index = ConstantInt::get(Type::Int32Ty, IndexV);
assert(isValidOperands(Vec, Elt, Index) &&
"Invalid insertelement instruction operands!");
@@ -1210,7 +1223,9 @@
InsertElementInst::InsertElementInst(Value *Vec, Value *Elt, Value *Index,
const std::string &Name,
BasicBlock *InsertAE)
- : Instruction(Vec->getType(), InsertElement, /*Ops*/NULL, 3, InsertAE) {
+ : Instruction(Vec->getType(), InsertElement,
+ OperandTraits<InsertElementInst>::op_begin(this),
+ 3, InsertAE) {
assert(isValidOperands(Vec, Elt, Index) &&
"Invalid insertelement instruction operands!");
@@ -1223,7 +1238,9 @@
InsertElementInst::InsertElementInst(Value *Vec, Value *Elt, unsigned IndexV,
const std::string &Name,
BasicBlock *InsertAE)
-: Instruction(Vec->getType(), InsertElement, /*Ops*/NULL, 3, InsertAE) {
+: Instruction(Vec->getType(), InsertElement,
+ OperandTraits<InsertElementInst>::op_begin(this),
+ 3, InsertAE) {
Constant *Index = ConstantInt::get(Type::Int32Ty, IndexV);
assert(isValidOperands(Vec, Elt, Index) &&
"Invalid insertelement instruction operands!");
More information about the llvm-commits
mailing list