OSDN Git Service

Adjust Valuehandle to hold its operand directly in it.
authorChris Lattner <sabre@nondot.org>
Sat, 29 Jan 2005 00:37:36 +0000 (00:37 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 29 Jan 2005 00:37:36 +0000 (00:37 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19897 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/ExprTypeConvert.cpp
lib/Transforms/TransformInternals.h

index c95efac..5822124 100644 (file)
@@ -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
index b5747c9..9b90fcc 100644 (file)
@@ -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);