diff options
-rw-r--r-- | lib/Transforms/ExprTypeConvert.cpp | 13 | ||||
-rw-r--r-- | lib/Transforms/TransformInternals.h | 1 |
2 files changed, 7 insertions, 7 deletions
diff --git a/lib/Transforms/ExprTypeConvert.cpp b/lib/Transforms/ExprTypeConvert.cpp index c95efacbbd..5822124231 100644 --- a/lib/Transforms/ExprTypeConvert.cpp +++ b/lib/Transforms/ExprTypeConvert.cpp @@ -1258,15 +1258,14 @@ static void ConvertOperandToType(User *U, Value *OldVal, Value *NewVal, ValueHandle::ValueHandle(ValueMapCache &VMC, Value *V) - : Instruction(Type::VoidTy, UserOp1, ""), Cache(VMC) { + : Instruction(Type::VoidTy, UserOp1, &Op, 1, ""), Op(V, this), Cache(VMC) { //DEBUG(std::cerr << "VH AQUIRING: " << (void*)V << " " << V); - Operands.push_back(Use(V, this)); } ValueHandle::ValueHandle(const ValueHandle &VH) - : Instruction(Type::VoidTy, UserOp1, ""), Cache(VH.Cache) { + : Instruction(Type::VoidTy, UserOp1, &Op, 1, ""), + Op(VH.Op, this), Cache(VH.Cache) { //DEBUG(std::cerr << "VH AQUIRING: " << (void*)V << " " << V); - Operands.push_back(Use((Value*)VH.getOperand(0), this)); } static void RecursiveDelete(ValueMapCache &Cache, Instruction *I) { @@ -1291,9 +1290,9 @@ static void RecursiveDelete(ValueMapCache &Cache, Instruction *I) { } ValueHandle::~ValueHandle() { - if (Operands[0]->hasOneUse()) { - Value *V = Operands[0]; - Operands[0] = 0; // Drop use! + if (Op->hasOneUse()) { + Value *V = Op; + Op.set(0); // Drop use! // Now we just need to remove the old instruction so we don't get infinite // loops. Note that we cannot use DCE because DCE won't remove a store diff --git a/lib/Transforms/TransformInternals.h b/lib/Transforms/TransformInternals.h index b5747c9130..9b90fcc112 100644 --- a/lib/Transforms/TransformInternals.h +++ b/lib/Transforms/TransformInternals.h @@ -59,6 +59,7 @@ const Type *ConvertibleToGEP(const Type *Ty, Value *V, // class ValueMapCache; class ValueHandle : public Instruction { + Use Op; ValueMapCache &Cache; public: ValueHandle(ValueMapCache &VMC, Value *V); |