}
PHINode::~PHINode() {
- dropHungoffUses(OperandList);
+ if (OperandList)
+ dropHungoffUses(OperandList);
}
// removeIncomingValue - Remove an incoming value. This is useful if a
: Instruction(IVI.getType(), InsertValue,
OperandTraits<InsertValueInst>::op_begin(this), 2),
Indices(IVI.Indices) {
+ Op<0>() = IVI.getOperand(0);
+ Op<1>() = IVI.getOperand(1);
}
InsertValueInst::InsertValueInst(Value *Agg,
// ExtractValueInst Class
//===----------------------------------------------------------------------===//
-void ExtractValueInst::init(Value *Agg, const unsigned *Idx, unsigned NumIdx,
+void ExtractValueInst::init(const unsigned *Idx, unsigned NumIdx,
const std::string &Name) {
assert(NumOperands == 1 && "NumOperands not initialized?");
- Op<0>() = Agg;
Indices.insert(Indices.end(), Idx, Idx + NumIdx);
setName(Name);
}
-void ExtractValueInst::init(Value *Agg, unsigned Idx, const std::string &Name) {
+void ExtractValueInst::init(unsigned Idx, const std::string &Name) {
assert(NumOperands == 1 && "NumOperands not initialized?");
- Op<0>() = Agg;
Indices.push_back(Idx);
setName(Name);
return CurIdx == NumIdx ? Agg : 0;
}
+const Type* ExtractValueInst::getIndexedType(const Type *Agg,
+ unsigned Idx) {
+ return getIndexedType(Agg, &Idx, 1);
+}
+
ExtractValueInst::ExtractValueInst(Value *Agg,
unsigned Idx,
const std::string &Name,
BasicBlock *InsertAtEnd)
: UnaryInstruction(checkType(getIndexedType(Agg->getType(), &Idx, 1)),
ExtractValue, Agg, InsertAtEnd) {
- init(Agg, Idx, Name);
+ init(Idx, Name);
}
ExtractValueInst::ExtractValueInst(Value *Agg,
Instruction *InsertBefore)
: UnaryInstruction(checkType(getIndexedType(Agg->getType(), &Idx, 1)),
ExtractValue, Agg, InsertBefore) {
- init(Agg, Idx, Name);
+ init(Idx, Name);
}
//===----------------------------------------------------------------------===//