MEGAPATCH checkin.
[oota-llvm.git] / lib / Transforms / ExprTypeConvert.cpp
1 //===- ExprTypeConvert.cpp - Code to change an LLVM Expr Type ---------------=//
2 //
3 // This file implements the part of level raising that checks to see if it is
4 // possible to coerce an entire expression tree into a different type.  If
5 // convertable, other routines from this file will do the conversion.
6 //
7 //===----------------------------------------------------------------------===//
8
9 #include "TransformInternals.h"
10 #include "llvm/iOther.h"
11 #include "llvm/iPHINode.h"
12 #include "llvm/iMemory.h"
13 #include "llvm/ConstantHandling.h"
14 #include "llvm/Analysis/Expressions.h"
15 #include "Support/STLExtras.h"
16 #include "Support/StatisticReporter.h"
17 #include <algorithm>
18 #include <iostream>
19 using std::cerr;
20
21 static bool OperandConvertableToType(User *U, Value *V, const Type *Ty,
22                                      ValueTypeCache &ConvertedTypes);
23
24 static void ConvertOperandToType(User *U, Value *OldVal, Value *NewVal,
25                                  ValueMapCache &VMC);
26
27 // AllIndicesZero - Return true if all of the indices of the specified memory
28 // access instruction are zero, indicating an effectively nil offset to the 
29 // pointer value.
30 //
31 static bool AllIndicesZero(const MemAccessInst *MAI) {
32   for (User::const_op_iterator S = MAI->idx_begin(), E = MAI->idx_end();
33        S != E; ++S)
34     if (!isa<Constant>(S->get()) || !cast<Constant>(S->get())->isNullValue())
35       return false;
36   return true;
37 }
38
39
40 // Peephole Malloc instructions: we take a look at the use chain of the
41 // malloc instruction, and try to find out if the following conditions hold:
42 //   1. The malloc is of the form: 'malloc [sbyte], uint <constant>'
43 //   2. The only users of the malloc are cast & add instructions
44 //   3. Of the cast instructions, there is only one destination pointer type
45 //      [RTy] where the size of the pointed to object is equal to the number
46 //      of bytes allocated.
47 //
48 // If these conditions hold, we convert the malloc to allocate an [RTy]
49 // element.  TODO: This comment is out of date WRT arrays
50 //
51 static bool MallocConvertableToType(MallocInst *MI, const Type *Ty,
52                                     ValueTypeCache &CTMap) {
53   if (!isa<PointerType>(Ty)) return false;   // Malloc always returns pointers
54
55   // Deal with the type to allocate, not the pointer type...
56   Ty = cast<PointerType>(Ty)->getElementType();
57   if (!Ty->isSized()) return false;      // Can only alloc something with a size
58
59   // Analyze the number of bytes allocated...
60   analysis::ExprType Expr = analysis::ClassifyExpression(MI->getArraySize());
61
62   // Get information about the base datatype being allocated, before & after
63   int ReqTypeSize = TD.getTypeSize(Ty);
64   unsigned OldTypeSize = TD.getTypeSize(MI->getType()->getElementType());
65
66   // Must have a scale or offset to analyze it...
67   if (!Expr.Offset && !Expr.Scale && OldTypeSize == 1) return false;
68
69   // Get the offset and scale of the allocation...
70   int OffsetVal = Expr.Offset ? getConstantValue(Expr.Offset) : 0;
71   int ScaleVal = Expr.Scale ? getConstantValue(Expr.Scale) : (Expr.Var ? 1 : 0);
72
73   // The old type might not be of unit size, take old size into consideration
74   // here...
75   int Offset = OffsetVal * OldTypeSize;
76   int Scale  = ScaleVal  * OldTypeSize;
77   
78   // In order to be successful, both the scale and the offset must be a multiple
79   // of the requested data type's size.
80   //
81   if (Offset/ReqTypeSize*ReqTypeSize != Offset ||
82       Scale/ReqTypeSize*ReqTypeSize != Scale)
83     return false;   // Nope.
84
85   return true;
86 }
87
88 static Instruction *ConvertMallocToType(MallocInst *MI, const Type *Ty,
89                                         const std::string &Name,
90                                         ValueMapCache &VMC){
91   BasicBlock *BB = MI->getParent();
92   BasicBlock::iterator It = BB->end();
93
94   // Analyze the number of bytes allocated...
95   analysis::ExprType Expr = analysis::ClassifyExpression(MI->getArraySize());
96
97   const PointerType *AllocTy = cast<PointerType>(Ty);
98   const Type *ElType = AllocTy->getElementType();
99
100   unsigned DataSize = TD.getTypeSize(ElType);
101   unsigned OldTypeSize = TD.getTypeSize(MI->getType()->getElementType());
102
103   // Get the offset and scale coefficients that we are allocating...
104   int OffsetVal = (Expr.Offset ? getConstantValue(Expr.Offset) : 0);
105   int ScaleVal = Expr.Scale ? getConstantValue(Expr.Scale) : (Expr.Var ? 1 : 0);
106
107   // The old type might not be of unit size, take old size into consideration
108   // here...
109   unsigned Offset = (unsigned)OffsetVal * OldTypeSize / DataSize;
110   unsigned Scale  = (unsigned)ScaleVal  * OldTypeSize / DataSize;
111
112   // Locate the malloc instruction, because we may be inserting instructions
113   It = MI;
114
115   // If we have a scale, apply it first...
116   if (Expr.Var) {
117     // Expr.Var is not neccesarily unsigned right now, insert a cast now.
118     if (Expr.Var->getType() != Type::UIntTy) {
119       Instruction *CI = new CastInst(Expr.Var, Type::UIntTy);
120       if (Expr.Var->hasName()) CI->setName(Expr.Var->getName()+"-uint");
121       It = ++BB->getInstList().insert(It, CI);
122       Expr.Var = CI;
123     }
124
125     if (Scale != 1) {
126       Instruction *ScI =
127         BinaryOperator::create(Instruction::Mul, Expr.Var,
128                                ConstantUInt::get(Type::UIntTy, Scale));
129       if (Expr.Var->hasName()) ScI->setName(Expr.Var->getName()+"-scl");
130       It = ++BB->getInstList().insert(It, ScI);
131       Expr.Var = ScI;
132     }
133
134   } else {
135     // If we are not scaling anything, just make the offset be the "var"...
136     Expr.Var = ConstantUInt::get(Type::UIntTy, Offset);
137     Offset = 0; Scale = 1;
138   }
139
140   // If we have an offset now, add it in...
141   if (Offset != 0) {
142     assert(Expr.Var && "Var must be nonnull by now!");
143
144     Instruction *AddI =
145       BinaryOperator::create(Instruction::Add, Expr.Var,
146                              ConstantUInt::get(Type::UIntTy, Offset));
147     if (Expr.Var->hasName()) AddI->setName(Expr.Var->getName()+"-off");
148     It = ++BB->getInstList().insert(It, AddI);
149     Expr.Var = AddI;
150   }
151
152   Instruction *NewI = new MallocInst(AllocTy, Expr.Var, Name);
153
154   assert(AllocTy == Ty);
155   return NewI;
156 }
157
158
159 // ExpressionConvertableToType - Return true if it is possible
160 bool ExpressionConvertableToType(Value *V, const Type *Ty,
161                                  ValueTypeCache &CTMap) {
162   if (V->getType() == Ty) return true;  // Expression already correct type!
163
164   // Expression type must be holdable in a register.
165   if (!Ty->isFirstClassType())
166     return false;
167   
168   ValueTypeCache::iterator CTMI = CTMap.find(V);
169   if (CTMI != CTMap.end()) return CTMI->second == Ty;
170
171   CTMap[V] = Ty;
172
173   Instruction *I = dyn_cast<Instruction>(V);
174   if (I == 0) {
175     // It's not an instruction, check to see if it's a constant... all constants
176     // can be converted to an equivalent value (except pointers, they can't be
177     // const prop'd in general).  We just ask the constant propogator to see if
178     // it can convert the value...
179     //
180     if (Constant *CPV = dyn_cast<Constant>(V))
181       if (ConstantFoldCastInstruction(CPV, Ty))
182         return true;  // Don't worry about deallocating, it's a constant.
183
184     return false;              // Otherwise, we can't convert!
185   }
186
187   switch (I->getOpcode()) {
188   case Instruction::Cast:
189     // We can convert the expr if the cast destination type is losslessly
190     // convertable to the requested type.
191     if (!Ty->isLosslesslyConvertableTo(I->getType())) return false;
192
193     // We also do not allow conversion of a cast that casts from a ptr to array
194     // of X to a *X.  For example: cast [4 x %List *] * %val to %List * *
195     //
196     if (const PointerType *SPT = 
197         dyn_cast<PointerType>(I->getOperand(0)->getType()))
198       if (const PointerType *DPT = dyn_cast<PointerType>(I->getType()))
199         if (const ArrayType *AT = dyn_cast<ArrayType>(SPT->getElementType()))
200           if (AT->getElementType() == DPT->getElementType())
201             return false;
202     break;
203
204   case Instruction::Add:
205   case Instruction::Sub:
206     if (!ExpressionConvertableToType(I->getOperand(0), Ty, CTMap) ||
207         !ExpressionConvertableToType(I->getOperand(1), Ty, CTMap))
208       return false;
209     break;
210   case Instruction::Shr:
211     if (Ty->isSigned() != V->getType()->isSigned()) return false;
212     // FALL THROUGH
213   case Instruction::Shl:
214     if (!ExpressionConvertableToType(I->getOperand(0), Ty, CTMap))
215       return false;
216     break;
217
218   case Instruction::Load: {
219     LoadInst *LI = cast<LoadInst>(I);
220     if (LI->hasIndices() && !AllIndicesZero(LI)) {
221       // We can't convert a load expression if it has indices... unless they are
222       // all zero.
223       return false;
224     }
225
226     if (!ExpressionConvertableToType(LI->getPointerOperand(),
227                                      PointerType::get(Ty), CTMap))
228       return false;
229     break;                                     
230   }
231   case Instruction::PHINode: {
232     PHINode *PN = cast<PHINode>(I);
233     for (unsigned i = 0; i < PN->getNumIncomingValues(); ++i)
234       if (!ExpressionConvertableToType(PN->getIncomingValue(i), Ty, CTMap))
235         return false;
236     break;
237   }
238
239   case Instruction::Malloc:
240     if (!MallocConvertableToType(cast<MallocInst>(I), Ty, CTMap))
241       return false;
242     break;
243
244   case Instruction::GetElementPtr: {
245     // GetElementPtr's are directly convertable to a pointer type if they have
246     // a number of zeros at the end.  Because removing these values does not
247     // change the logical offset of the GEP, it is okay and fair to remove them.
248     // This can change this:
249     //   %t1 = getelementptr %Hosp * %hosp, ubyte 4, ubyte 0  ; <%List **>
250     //   %t2 = cast %List * * %t1 to %List *
251     // into
252     //   %t2 = getelementptr %Hosp * %hosp, ubyte 4           ; <%List *>
253     // 
254     GetElementPtrInst *GEP = cast<GetElementPtrInst>(I);
255     const PointerType *PTy = dyn_cast<PointerType>(Ty);
256     if (!PTy) return false;  // GEP must always return a pointer...
257     const Type *PVTy = PTy->getElementType();
258
259     // Check to see if there are zero elements that we can remove from the
260     // index array.  If there are, check to see if removing them causes us to
261     // get to the right type...
262     //
263     std::vector<Value*> Indices = GEP->copyIndices();
264     const Type *BaseType = GEP->getPointerOperand()->getType();
265     const Type *ElTy = 0;
266
267     while (!Indices.empty() && isa<ConstantUInt>(Indices.back()) &&
268            cast<ConstantUInt>(Indices.back())->getValue() == 0) {
269       Indices.pop_back();
270       ElTy = GetElementPtrInst::getIndexedType(BaseType, Indices, true);
271       if (ElTy == PVTy)
272         break;  // Found a match!!
273       ElTy = 0;
274     }
275
276     if (ElTy) break;   // Found a number of zeros we can strip off!
277
278     // Otherwise, we can convert a GEP from one form to the other iff the
279     // current gep is of the form 'getelementptr sbyte*, unsigned N
280     // and we could convert this to an appropriate GEP for the new type.
281     //
282     if (GEP->getNumOperands() == 2 &&
283         GEP->getOperand(1)->getType() == Type::UIntTy &&
284         GEP->getType() == PointerType::get(Type::SByteTy)) {
285
286       // Do not Check to see if our incoming pointer can be converted
287       // to be a ptr to an array of the right type... because in more cases than
288       // not, it is simply not analyzable because of pointer/array
289       // discrepencies.  To fix this, we will insert a cast before the GEP.
290       //
291
292       // Check to see if 'N' is an expression that can be converted to
293       // the appropriate size... if so, allow it.
294       //
295       std::vector<Value*> Indices;
296       const Type *ElTy = ConvertableToGEP(PTy, I->getOperand(1), Indices);
297       if (ElTy == PVTy) {
298         if (!ExpressionConvertableToType(I->getOperand(0),
299                                          PointerType::get(ElTy), CTMap))
300           return false;  // Can't continue, ExConToTy might have polluted set!
301         break;
302       }
303     }
304
305     // Otherwise, it could be that we have something like this:
306     //     getelementptr [[sbyte] *] * %reg115, uint %reg138    ; [sbyte]**
307     // and want to convert it into something like this:
308     //     getelemenptr [[int] *] * %reg115, uint %reg138      ; [int]**
309     //
310     if (GEP->getNumOperands() == 2 && 
311         GEP->getOperand(1)->getType() == Type::UIntTy &&
312         TD.getTypeSize(PTy->getElementType()) == 
313         TD.getTypeSize(GEP->getType()->getElementType())) {
314       const PointerType *NewSrcTy = PointerType::get(PVTy);
315       if (!ExpressionConvertableToType(I->getOperand(0), NewSrcTy, CTMap))
316         return false;
317       break;
318     }
319
320     return false;   // No match, maybe next time.
321   }
322
323   default:
324     return false;
325   }
326
327   // Expressions are only convertable if all of the users of the expression can
328   // have this value converted.  This makes use of the map to avoid infinite
329   // recursion.
330   //
331   for (Value::use_iterator It = I->use_begin(), E = I->use_end(); It != E; ++It)
332     if (!OperandConvertableToType(*It, I, Ty, CTMap))
333       return false;
334
335   return true;
336 }
337
338
339 Value *ConvertExpressionToType(Value *V, const Type *Ty, ValueMapCache &VMC) {
340   if (V->getType() == Ty) return V;  // Already where we need to be?
341
342   ValueMapCache::ExprMapTy::iterator VMCI = VMC.ExprMap.find(V);
343   if (VMCI != VMC.ExprMap.end()) {
344     assert(VMCI->second->getType() == Ty);
345
346     if (Instruction *I = dyn_cast<Instruction>(V))
347       ValueHandle IHandle(VMC, I);  // Remove I if it is unused now!
348
349     return VMCI->second;
350   }
351
352   DEBUG(cerr << "CETT: " << (void*)V << " " << V);
353
354   Instruction *I = dyn_cast<Instruction>(V);
355   if (I == 0)
356     if (Constant *CPV = cast<Constant>(V)) {
357       // Constants are converted by constant folding the cast that is required.
358       // We assume here that all casts are implemented for constant prop.
359       Value *Result = ConstantFoldCastInstruction(CPV, Ty);
360       assert(Result && "ConstantFoldCastInstruction Failed!!!");
361       assert(Result->getType() == Ty && "Const prop of cast failed!");
362
363       // Add the instruction to the expression map
364       VMC.ExprMap[V] = Result;
365       return Result;
366     }
367
368
369   BasicBlock *BB = I->getParent();
370   BasicBlock::InstListType &BIL = BB->getInstList();
371   std::string Name = I->getName();  if (!Name.empty()) I->setName("");
372   Instruction *Res;     // Result of conversion
373
374   ValueHandle IHandle(VMC, I);  // Prevent I from being removed!
375   
376   Constant *Dummy = Constant::getNullValue(Ty);
377
378   switch (I->getOpcode()) {
379   case Instruction::Cast:
380     Res = new CastInst(I->getOperand(0), Ty, Name);
381     break;
382     
383   case Instruction::Add:
384   case Instruction::Sub:
385     Res = BinaryOperator::create(cast<BinaryOperator>(I)->getOpcode(),
386                                  Dummy, Dummy, Name);
387     VMC.ExprMap[I] = Res;   // Add node to expression eagerly
388
389     Res->setOperand(0, ConvertExpressionToType(I->getOperand(0), Ty, VMC));
390     Res->setOperand(1, ConvertExpressionToType(I->getOperand(1), Ty, VMC));
391     break;
392
393   case Instruction::Shl:
394   case Instruction::Shr:
395     Res = new ShiftInst(cast<ShiftInst>(I)->getOpcode(), Dummy,
396                         I->getOperand(1), Name);
397     VMC.ExprMap[I] = Res;
398     Res->setOperand(0, ConvertExpressionToType(I->getOperand(0), Ty, VMC));
399     break;
400
401   case Instruction::Load: {
402     LoadInst *LI = cast<LoadInst>(I);
403     assert(!LI->hasIndices() || AllIndicesZero(LI));
404
405     Res = new LoadInst(Constant::getNullValue(PointerType::get(Ty)), Name);
406     VMC.ExprMap[I] = Res;
407     Res->setOperand(0, ConvertExpressionToType(LI->getPointerOperand(),
408                                                PointerType::get(Ty), VMC));
409     assert(Res->getOperand(0)->getType() == PointerType::get(Ty));
410     assert(Ty == Res->getType());
411     assert(Res->getType()->isFirstClassType() && "Load of structure or array!");
412     break;
413   }
414
415   case Instruction::PHINode: {
416     PHINode *OldPN = cast<PHINode>(I);
417     PHINode *NewPN = new PHINode(Ty, Name);
418
419     VMC.ExprMap[I] = NewPN;   // Add node to expression eagerly
420     while (OldPN->getNumOperands()) {
421       BasicBlock *BB = OldPN->getIncomingBlock(0);
422       Value *OldVal = OldPN->getIncomingValue(0);
423       ValueHandle OldValHandle(VMC, OldVal);
424       OldPN->removeIncomingValue(BB);
425       Value *V = ConvertExpressionToType(OldVal, Ty, VMC);
426       NewPN->addIncoming(V, BB);
427     }
428     Res = NewPN;
429     break;
430   }
431
432   case Instruction::Malloc: {
433     Res = ConvertMallocToType(cast<MallocInst>(I), Ty, Name, VMC);
434     break;
435   }
436
437   case Instruction::GetElementPtr: {
438     // GetElementPtr's are directly convertable to a pointer type if they have
439     // a number of zeros at the end.  Because removing these values does not
440     // change the logical offset of the GEP, it is okay and fair to remove them.
441     // This can change this:
442     //   %t1 = getelementptr %Hosp * %hosp, ubyte 4, ubyte 0  ; <%List **>
443     //   %t2 = cast %List * * %t1 to %List *
444     // into
445     //   %t2 = getelementptr %Hosp * %hosp, ubyte 4           ; <%List *>
446     // 
447     GetElementPtrInst *GEP = cast<GetElementPtrInst>(I);
448
449     // Check to see if there are zero elements that we can remove from the
450     // index array.  If there are, check to see if removing them causes us to
451     // get to the right type...
452     //
453     std::vector<Value*> Indices = GEP->copyIndices();
454     const Type *BaseType = GEP->getPointerOperand()->getType();
455     const Type *PVTy = cast<PointerType>(Ty)->getElementType();
456     Res = 0;
457     while (!Indices.empty() && isa<ConstantUInt>(Indices.back()) &&
458            cast<ConstantUInt>(Indices.back())->getValue() == 0) {
459       Indices.pop_back();
460       if (GetElementPtrInst::getIndexedType(BaseType, Indices, true) == PVTy) {
461         if (Indices.size() == 0) {
462           Res = new CastInst(GEP->getPointerOperand(), BaseType); // NOOP
463         } else {
464           Res = new GetElementPtrInst(GEP->getPointerOperand(), Indices, Name);
465         }
466         break;
467       }
468     }
469
470     if (Res == 0 && GEP->getNumOperands() == 2 &&
471         GEP->getOperand(1)->getType() == Type::UIntTy &&
472         GEP->getType() == PointerType::get(Type::SByteTy)) {
473       
474       // Otherwise, we can convert a GEP from one form to the other iff the
475       // current gep is of the form 'getelementptr [sbyte]*, unsigned N
476       // and we could convert this to an appropriate GEP for the new type.
477       //
478       const PointerType *NewSrcTy = PointerType::get(PVTy);
479       BasicBlock::iterator It = I;
480
481       // Check to see if 'N' is an expression that can be converted to
482       // the appropriate size... if so, allow it.
483       //
484       std::vector<Value*> Indices;
485       const Type *ElTy = ConvertableToGEP(NewSrcTy, I->getOperand(1),
486                                           Indices, &It);
487       if (ElTy) {        
488         assert(ElTy == PVTy && "Internal error, setup wrong!");
489         Res = new GetElementPtrInst(Constant::getNullValue(NewSrcTy),
490                                     Indices, Name);
491         VMC.ExprMap[I] = Res;
492         Res->setOperand(0, ConvertExpressionToType(I->getOperand(0),
493                                                    NewSrcTy, VMC));
494       }
495     }
496
497     // Otherwise, it could be that we have something like this:
498     //     getelementptr [[sbyte] *] * %reg115, uint %reg138    ; [sbyte]**
499     // and want to convert it into something like this:
500     //     getelemenptr [[int] *] * %reg115, uint %reg138      ; [int]**
501     //
502     if (Res == 0) {
503       const PointerType *NewSrcTy = PointerType::get(PVTy);
504       Res = new GetElementPtrInst(Constant::getNullValue(NewSrcTy),
505                                   GEP->copyIndices(), Name);
506       VMC.ExprMap[I] = Res;
507       Res->setOperand(0, ConvertExpressionToType(I->getOperand(0),
508                                                  NewSrcTy, VMC));
509     }
510
511
512     assert(Res && "Didn't find match!");
513     break;   // No match, maybe next time.
514   }
515
516   default:
517     assert(0 && "Expression convertable, but don't know how to convert?");
518     return 0;
519   }
520
521   assert(Res->getType() == Ty && "Didn't convert expr to correct type!");
522
523   BIL.insert(I, Res);
524
525   // Add the instruction to the expression map
526   VMC.ExprMap[I] = Res;
527
528   // Expressions are only convertable if all of the users of the expression can
529   // have this value converted.  This makes use of the map to avoid infinite
530   // recursion.
531   //
532   unsigned NumUses = I->use_size();
533   for (unsigned It = 0; It < NumUses; ) {
534     unsigned OldSize = NumUses;
535     ConvertOperandToType(*(I->use_begin()+It), I, Res, VMC);
536     NumUses = I->use_size();
537     if (NumUses == OldSize) ++It;
538   }
539
540   DEBUG(cerr << "ExpIn: " << (void*)I << " " << I
541              << "ExpOut: " << (void*)Res << " " << Res);
542
543   if (I->use_empty()) {
544     DEBUG(cerr << "EXPR DELETING: " << (void*)I << " " << I);
545     BIL.remove(I);
546     VMC.OperandsMapped.erase(I);
547     VMC.ExprMap.erase(I);
548     delete I;
549   }
550
551   return Res;
552 }
553
554
555
556 // ValueConvertableToType - Return true if it is possible
557 bool ValueConvertableToType(Value *V, const Type *Ty,
558                              ValueTypeCache &ConvertedTypes) {
559   ValueTypeCache::iterator I = ConvertedTypes.find(V);
560   if (I != ConvertedTypes.end()) return I->second == Ty;
561   ConvertedTypes[V] = Ty;
562
563   // It is safe to convert the specified value to the specified type IFF all of
564   // the uses of the value can be converted to accept the new typed value.
565   //
566   if (V->getType() != Ty) {
567     for (Value::use_iterator I = V->use_begin(), E = V->use_end(); I != E; ++I)
568       if (!OperandConvertableToType(*I, V, Ty, ConvertedTypes))
569         return false;
570   }
571
572   return true;
573 }
574
575
576
577
578
579 // OperandConvertableToType - Return true if it is possible to convert operand
580 // V of User (instruction) U to the specified type.  This is true iff it is
581 // possible to change the specified instruction to accept this.  CTMap is a map
582 // of converted types, so that circular definitions will see the future type of
583 // the expression, not the static current type.
584 //
585 static bool OperandConvertableToType(User *U, Value *V, const Type *Ty,
586                                      ValueTypeCache &CTMap) {
587   //  if (V->getType() == Ty) return true;   // Operand already the right type?
588
589   // Expression type must be holdable in a register.
590   if (!Ty->isFirstClassType())
591     return false;
592
593   Instruction *I = dyn_cast<Instruction>(U);
594   if (I == 0) return false;              // We can't convert!
595
596   switch (I->getOpcode()) {
597   case Instruction::Cast:
598     assert(I->getOperand(0) == V);
599     // We can convert the expr if the cast destination type is losslessly
600     // convertable to the requested type.
601     // Also, do not change a cast that is a noop cast.  For all intents and
602     // purposes it should be eliminated.
603     if (!Ty->isLosslesslyConvertableTo(I->getOperand(0)->getType()) ||
604         I->getType() == I->getOperand(0)->getType())
605       return false;
606
607     // Do not allow a 'cast ushort %V to uint' to have it's first operand be
608     // converted to a 'short' type.  Doing so changes the way sign promotion
609     // happens, and breaks things.  Only allow the cast to take place if the
610     // signedness doesn't change... or if the current cast is not a lossy
611     // conversion.
612     //
613     if (!I->getType()->isLosslesslyConvertableTo(I->getOperand(0)->getType()) &&
614         I->getOperand(0)->getType()->isSigned() != Ty->isSigned())
615       return false;
616
617     // We also do not allow conversion of a cast that casts from a ptr to array
618     // of X to a *X.  For example: cast [4 x %List *] * %val to %List * *
619     //
620     if (const PointerType *SPT = 
621         dyn_cast<PointerType>(I->getOperand(0)->getType()))
622       if (const PointerType *DPT = dyn_cast<PointerType>(I->getType()))
623         if (const ArrayType *AT = dyn_cast<ArrayType>(SPT->getElementType()))
624           if (AT->getElementType() == DPT->getElementType())
625             return false;
626     return true;
627
628   case Instruction::Add:
629     if (isa<PointerType>(Ty)) {
630       Value *IndexVal = I->getOperand(V == I->getOperand(0) ? 1 : 0);
631       std::vector<Value*> Indices;
632       if (const Type *ETy = ConvertableToGEP(Ty, IndexVal, Indices)) {
633         const Type *RetTy = PointerType::get(ETy);
634
635         // Only successful if we can convert this type to the required type
636         if (ValueConvertableToType(I, RetTy, CTMap)) {
637           CTMap[I] = RetTy;
638           return true;
639         }
640         // We have to return failure here because ValueConvertableToType could 
641         // have polluted our map
642         return false;
643       }
644     }
645     // FALLTHROUGH
646   case Instruction::Sub: {
647     Value *OtherOp = I->getOperand((V == I->getOperand(0)) ? 1 : 0);
648     return ValueConvertableToType(I, Ty, CTMap) &&
649            ExpressionConvertableToType(OtherOp, Ty, CTMap);
650   }
651   case Instruction::SetEQ:
652   case Instruction::SetNE: {
653     Value *OtherOp = I->getOperand((V == I->getOperand(0)) ? 1 : 0);
654     return ExpressionConvertableToType(OtherOp, Ty, CTMap);
655   }
656   case Instruction::Shr:
657     if (Ty->isSigned() != V->getType()->isSigned()) return false;
658     // FALL THROUGH
659   case Instruction::Shl:
660     assert(I->getOperand(0) == V);
661     return ValueConvertableToType(I, Ty, CTMap);
662
663   case Instruction::Free:
664     assert(I->getOperand(0) == V);
665     return isa<PointerType>(Ty);    // Free can free any pointer type!
666
667   case Instruction::Load:
668     // Cannot convert the types of any subscripts...
669     if (I->getOperand(0) != V) return false;
670
671     if (const PointerType *PT = dyn_cast<PointerType>(Ty)) {
672       LoadInst *LI = cast<LoadInst>(I);
673       
674       if (LI->hasIndices() && !AllIndicesZero(LI))
675         return false;
676
677       const Type *LoadedTy = PT->getElementType();
678
679       // They could be loading the first element of a composite type...
680       if (const CompositeType *CT = dyn_cast<CompositeType>(LoadedTy)) {
681         unsigned Offset = 0;     // No offset, get first leaf.
682         std::vector<Value*> Indices;  // Discarded...
683         LoadedTy = getStructOffsetType(CT, Offset, Indices, false);
684         assert(Offset == 0 && "Offset changed from zero???");
685       }
686
687       if (!LoadedTy->isFirstClassType())
688         return false;
689
690       if (TD.getTypeSize(LoadedTy) != TD.getTypeSize(LI->getType()))
691         return false;
692
693       return ValueConvertableToType(LI, LoadedTy, CTMap);
694     }
695     return false;
696
697   case Instruction::Store: {
698     StoreInst *SI = cast<StoreInst>(I);
699     if (SI->hasIndices()) return false;
700
701     if (V == I->getOperand(0)) {
702       ValueTypeCache::iterator CTMI = CTMap.find(I->getOperand(1));
703       if (CTMI != CTMap.end()) {   // Operand #1 is in the table already?
704         // If so, check to see if it's Ty*, or, more importantly, if it is a
705         // pointer to a structure where the first element is a Ty... this code
706         // is neccesary because we might be trying to change the source and
707         // destination type of the store (they might be related) and the dest
708         // pointer type might be a pointer to structure.  Below we allow pointer
709         // to structures where the 0th element is compatible with the value,
710         // now we have to support the symmetrical part of this.
711         //
712         const Type *ElTy = cast<PointerType>(CTMI->second)->getElementType();
713
714         // Already a pointer to what we want?  Trivially accept...
715         if (ElTy == Ty) return true;
716
717         // Tricky case now, if the destination is a pointer to structure,
718         // obviously the source is not allowed to be a structure (cannot copy
719         // a whole structure at a time), so the level raiser must be trying to
720         // store into the first field.  Check for this and allow it now:
721         //
722         if (const StructType *SElTy = dyn_cast<StructType>(ElTy)) {
723           unsigned Offset = 0;
724           std::vector<Value*> Indices;
725           ElTy = getStructOffsetType(ElTy, Offset, Indices, false);
726           assert(Offset == 0 && "Offset changed!");
727           if (ElTy == 0)    // Element at offset zero in struct doesn't exist!
728             return false;   // Can only happen for {}*
729           
730           if (ElTy == Ty)   // Looks like the 0th element of structure is
731             return true;    // compatible!  Accept now!
732
733           // Otherwise we know that we can't work, so just stop trying now.
734           return false;
735         }
736       }
737
738       // Can convert the store if we can convert the pointer operand to match
739       // the new  value type...
740       return ExpressionConvertableToType(I->getOperand(1), PointerType::get(Ty),
741                                          CTMap);
742     } else if (const PointerType *PT = dyn_cast<PointerType>(Ty)) {
743       const Type *ElTy = PT->getElementType();
744       assert(V == I->getOperand(1));
745
746       if (isa<StructType>(ElTy)) {
747         // We can change the destination pointer if we can store our first
748         // argument into the first element of the structure...
749         //
750         unsigned Offset = 0;
751         std::vector<Value*> Indices;
752         ElTy = getStructOffsetType(ElTy, Offset, Indices, false);
753         assert(Offset == 0 && "Offset changed!");
754         if (ElTy == 0)    // Element at offset zero in struct doesn't exist!
755           return false;   // Can only happen for {}*
756       }
757
758       // Must move the same amount of data...
759       if (TD.getTypeSize(ElTy) != TD.getTypeSize(I->getOperand(0)->getType()))
760         return false;
761
762       // Can convert store if the incoming value is convertable...
763       return ExpressionConvertableToType(I->getOperand(0), ElTy, CTMap);
764     }
765     return false;
766   }
767
768   case Instruction::GetElementPtr:
769     if (V != I->getOperand(0) || !isa<PointerType>(Ty)) return false;
770
771     // If we have a two operand form of getelementptr, this is really little
772     // more than a simple addition.  As with addition, check to see if the
773     // getelementptr instruction can be changed to index into the new type.
774     //
775     if (I->getNumOperands() == 2) {
776       const Type *OldElTy = cast<PointerType>(I->getType())->getElementType();
777       unsigned DataSize = TD.getTypeSize(OldElTy);
778       Value *Index = I->getOperand(1);
779       Instruction *TempScale = 0;
780
781       // If the old data element is not unit sized, we have to create a scale
782       // instruction so that ConvertableToGEP will know the REAL amount we are
783       // indexing by.  Note that this is never inserted into the instruction
784       // stream, so we have to delete it when we're done.
785       //
786       if (DataSize != 1) {
787         TempScale = BinaryOperator::create(Instruction::Mul, Index,
788                                            ConstantUInt::get(Type::UIntTy,
789                                                              DataSize));
790         Index = TempScale;
791       }
792
793       // Check to see if the second argument is an expression that can
794       // be converted to the appropriate size... if so, allow it.
795       //
796       std::vector<Value*> Indices;
797       const Type *ElTy = ConvertableToGEP(Ty, Index, Indices);
798       delete TempScale;   // Free our temporary multiply if we made it
799
800       if (ElTy == 0) return false;  // Cannot make conversion...
801       return ValueConvertableToType(I, PointerType::get(ElTy), CTMap);
802     }
803     return false;
804
805   case Instruction::PHINode: {
806     PHINode *PN = cast<PHINode>(I);
807     for (unsigned i = 0; i < PN->getNumIncomingValues(); ++i)
808       if (!ExpressionConvertableToType(PN->getIncomingValue(i), Ty, CTMap))
809         return false;
810     return ValueConvertableToType(PN, Ty, CTMap);
811   }
812
813   case Instruction::Call: {
814     User::op_iterator OI = find(I->op_begin(), I->op_end(), V);
815     assert (OI != I->op_end() && "Not using value!");
816     unsigned OpNum = OI - I->op_begin();
817
818     // Are we trying to change the function pointer value to a new type?
819     if (OpNum == 0) {
820       const PointerType *PTy = dyn_cast<PointerType>(Ty);
821       if (PTy == 0) return false;  // Can't convert to a non-pointer type...
822       const FunctionType *MTy = dyn_cast<FunctionType>(PTy->getElementType());
823       if (MTy == 0) return false;  // Can't convert to a non ptr to function...
824
825       // Perform sanity checks to make sure that new function type has the
826       // correct number of arguments...
827       //
828       unsigned NumArgs = I->getNumOperands()-1;  // Don't include function ptr
829
830       // Cannot convert to a type that requires more fixed arguments than
831       // the call provides...
832       //
833       if (NumArgs < MTy->getParamTypes().size()) return false;
834       
835       // Unless this is a vararg function type, we cannot provide more arguments
836       // than are desired...
837       //
838       if (!MTy->isVarArg() && NumArgs > MTy->getParamTypes().size())
839         return false;
840
841       // Okay, at this point, we know that the call and the function type match
842       // number of arguments.  Now we see if we can convert the arguments
843       // themselves.  Note that we do not require operands to be convertable,
844       // we can insert casts if they are convertible but not compatible.  The
845       // reason for this is that we prefer to have resolved functions but casted
846       // arguments if possible.
847       //
848       const FunctionType::ParamTypes &PTs = MTy->getParamTypes();
849       for (unsigned i = 0, NA = PTs.size(); i < NA; ++i)
850         if (!PTs[i]->isLosslesslyConvertableTo(I->getOperand(i+1)->getType()))
851           return false;   // Operands must have compatible types!
852
853       // Okay, at this point, we know that all of the arguments can be
854       // converted.  We succeed if we can change the return type if
855       // neccesary...
856       //
857       return ValueConvertableToType(I, MTy->getReturnType(), CTMap);
858     }
859     
860     const PointerType *MPtr = cast<PointerType>(I->getOperand(0)->getType());
861     const FunctionType *MTy = cast<FunctionType>(MPtr->getElementType());
862     if (!MTy->isVarArg()) return false;
863
864     if ((OpNum-1) < MTy->getParamTypes().size())
865       return false;  // It's not in the varargs section...
866
867     // If we get this far, we know the value is in the varargs section of the
868     // function!  We can convert if we don't reinterpret the value...
869     //
870     return Ty->isLosslesslyConvertableTo(V->getType());
871   }
872   }
873   return false;
874 }
875
876
877 void ConvertValueToNewType(Value *V, Value *NewVal, ValueMapCache &VMC) {
878   ValueHandle VH(VMC, V);
879
880   unsigned NumUses = V->use_size();
881   for (unsigned It = 0; It < NumUses; ) {
882     unsigned OldSize = NumUses;
883     ConvertOperandToType(*(V->use_begin()+It), V, NewVal, VMC);
884     NumUses = V->use_size();
885     if (NumUses == OldSize) ++It;
886   }
887 }
888
889
890
891 static void ConvertOperandToType(User *U, Value *OldVal, Value *NewVal,
892                                  ValueMapCache &VMC) {
893   if (isa<ValueHandle>(U)) return;  // Valuehandles don't let go of operands...
894
895   if (VMC.OperandsMapped.count(U)) return;
896   VMC.OperandsMapped.insert(U);
897
898   ValueMapCache::ExprMapTy::iterator VMCI = VMC.ExprMap.find(U);
899   if (VMCI != VMC.ExprMap.end())
900     return;
901
902
903   Instruction *I = cast<Instruction>(U);  // Only Instructions convertable
904
905   BasicBlock *BB = I->getParent();
906   BasicBlock::InstListType &BIL = BB->getInstList();
907   std::string Name = I->getName();  if (!Name.empty()) I->setName("");
908   Instruction *Res;     // Result of conversion
909
910   //cerr << endl << endl << "Type:\t" << Ty << "\nInst: " << I << "BB Before: " << BB << endl;
911
912   // Prevent I from being removed...
913   ValueHandle IHandle(VMC, I);
914
915   const Type *NewTy = NewVal->getType();
916   Constant *Dummy = (NewTy != Type::VoidTy) ? 
917                   Constant::getNullValue(NewTy) : 0;
918
919   switch (I->getOpcode()) {
920   case Instruction::Cast:
921     assert(I->getOperand(0) == OldVal);
922     Res = new CastInst(NewVal, I->getType(), Name);
923     break;
924
925   case Instruction::Add:
926     if (isa<PointerType>(NewTy)) {
927       Value *IndexVal = I->getOperand(OldVal == I->getOperand(0) ? 1 : 0);
928       std::vector<Value*> Indices;
929       BasicBlock::iterator It = I;
930
931       if (const Type *ETy = ConvertableToGEP(NewTy, IndexVal, Indices, &It)) {
932         // If successful, convert the add to a GEP
933         //const Type *RetTy = PointerType::get(ETy);
934         // First operand is actually the given pointer...
935         Res = new GetElementPtrInst(NewVal, Indices, Name);
936         assert(cast<PointerType>(Res->getType())->getElementType() == ETy &&
937                "ConvertableToGEP broken!");
938         break;
939       }
940     }
941     // FALLTHROUGH
942
943   case Instruction::Sub:
944   case Instruction::SetEQ:
945   case Instruction::SetNE: {
946     Res = BinaryOperator::create(cast<BinaryOperator>(I)->getOpcode(),
947                                  Dummy, Dummy, Name);
948     VMC.ExprMap[I] = Res;   // Add node to expression eagerly
949
950     unsigned OtherIdx = (OldVal == I->getOperand(0)) ? 1 : 0;
951     Value *OtherOp    = I->getOperand(OtherIdx);
952     Value *NewOther   = ConvertExpressionToType(OtherOp, NewTy, VMC);
953
954     Res->setOperand(OtherIdx, NewOther);
955     Res->setOperand(!OtherIdx, NewVal);
956     break;
957   }
958   case Instruction::Shl:
959   case Instruction::Shr:
960     assert(I->getOperand(0) == OldVal);
961     Res = new ShiftInst(cast<ShiftInst>(I)->getOpcode(), NewVal,
962                         I->getOperand(1), Name);
963     break;
964
965   case Instruction::Free:            // Free can free any pointer type!
966     assert(I->getOperand(0) == OldVal);
967     Res = new FreeInst(NewVal);
968     break;
969
970
971   case Instruction::Load: {
972     assert(I->getOperand(0) == OldVal && isa<PointerType>(NewVal->getType()));
973     const Type *LoadedTy =
974       cast<PointerType>(NewVal->getType())->getElementType();
975
976     std::vector<Value*> Indices;
977     Indices.push_back(ConstantUInt::get(Type::UIntTy, 0));
978
979     if (const CompositeType *CT = dyn_cast<CompositeType>(LoadedTy)) {
980       unsigned Offset = 0;   // No offset, get first leaf.
981       LoadedTy = getStructOffsetType(CT, Offset, Indices, false);
982     }
983     assert(LoadedTy->isFirstClassType());
984
985     Res = new LoadInst(NewVal, Indices, Name);
986     assert(Res->getType()->isFirstClassType() && "Load of structure or array!");
987     break;
988   }
989
990   case Instruction::Store: {
991     if (I->getOperand(0) == OldVal) {  // Replace the source value
992       const PointerType *NewPT = PointerType::get(NewTy);
993       Res = new StoreInst(NewVal, Constant::getNullValue(NewPT));
994       VMC.ExprMap[I] = Res;
995       Res->setOperand(1, ConvertExpressionToType(I->getOperand(1), NewPT, VMC));
996     } else {                           // Replace the source pointer
997       const Type *ValTy = cast<PointerType>(NewTy)->getElementType();
998       std::vector<Value*> Indices;
999
1000       if (isa<StructType>(ValTy)) {
1001         unsigned Offset = 0;
1002         Indices.push_back(ConstantUInt::get(Type::UIntTy, 0));
1003         ValTy = getStructOffsetType(ValTy, Offset, Indices, false);
1004         assert(Offset == 0 && ValTy);
1005       }
1006
1007       Res = new StoreInst(Constant::getNullValue(ValTy), NewVal, Indices);
1008       VMC.ExprMap[I] = Res;
1009       Res->setOperand(0, ConvertExpressionToType(I->getOperand(0), ValTy, VMC));
1010     }
1011     break;
1012   }
1013
1014
1015   case Instruction::GetElementPtr: {
1016     // Convert a one index getelementptr into just about anything that is
1017     // desired.
1018     //
1019     BasicBlock::iterator It = I;
1020     const Type *OldElTy = cast<PointerType>(I->getType())->getElementType();
1021     unsigned DataSize = TD.getTypeSize(OldElTy);
1022     Value *Index = I->getOperand(1);
1023
1024     if (DataSize != 1) {
1025       // Insert a multiply of the old element type is not a unit size...
1026       Index = BinaryOperator::create(Instruction::Mul, Index,
1027                                      ConstantUInt::get(Type::UIntTy, DataSize));
1028       It = ++BIL.insert(It, cast<Instruction>(Index));
1029     }
1030
1031     // Perform the conversion now...
1032     //
1033     std::vector<Value*> Indices;
1034     const Type *ElTy = ConvertableToGEP(NewVal->getType(), Index, Indices, &It);
1035     assert(ElTy != 0 && "GEP Conversion Failure!");
1036     Res = new GetElementPtrInst(NewVal, Indices, Name);
1037     assert(Res->getType() == PointerType::get(ElTy) &&
1038            "ConvertableToGet failed!");
1039   }
1040 #if 0
1041     if (I->getType() == PointerType::get(Type::SByteTy)) {
1042       // Convert a getelementptr sbyte * %reg111, uint 16 freely back to
1043       // anything that is a pointer type...
1044       //
1045       BasicBlock::iterator It = I;
1046     
1047       // Check to see if the second argument is an expression that can
1048       // be converted to the appropriate size... if so, allow it.
1049       //
1050       std::vector<Value*> Indices;
1051       const Type *ElTy = ConvertableToGEP(NewVal->getType(), I->getOperand(1),
1052                                           Indices, &It);
1053       assert(ElTy != 0 && "GEP Conversion Failure!");
1054       
1055       Res = new GetElementPtrInst(NewVal, Indices, Name);
1056     } else {
1057       // Convert a getelementptr ulong * %reg123, uint %N
1058       // to        getelementptr  long * %reg123, uint %N
1059       // ... where the type must simply stay the same size...
1060       //
1061       Res = new GetElementPtrInst(NewVal,
1062                                   cast<GetElementPtrInst>(I)->copyIndices(),
1063                                   Name);
1064     }
1065 #endif
1066     break;
1067
1068   case Instruction::PHINode: {
1069     PHINode *OldPN = cast<PHINode>(I);
1070     PHINode *NewPN = new PHINode(NewTy, Name);
1071     VMC.ExprMap[I] = NewPN;
1072
1073     while (OldPN->getNumOperands()) {
1074       BasicBlock *BB = OldPN->getIncomingBlock(0);
1075       Value *OldVal = OldPN->getIncomingValue(0);
1076       OldPN->removeIncomingValue(BB);
1077       Value *V = ConvertExpressionToType(OldVal, NewTy, VMC);
1078       NewPN->addIncoming(V, BB);
1079     }
1080     Res = NewPN;
1081     break;
1082   }
1083
1084   case Instruction::Call: {
1085     Value *Meth = I->getOperand(0);
1086     std::vector<Value*> Params(I->op_begin()+1, I->op_end());
1087
1088     if (Meth == OldVal) {   // Changing the function pointer?
1089       const PointerType *NewPTy = cast<PointerType>(NewVal->getType());
1090       const FunctionType *NewTy = cast<FunctionType>(NewPTy->getElementType());
1091       const FunctionType::ParamTypes &PTs = NewTy->getParamTypes();
1092
1093       // Get an iterator to the call instruction so that we can insert casts for
1094       // operands if needbe.  Note that we do not require operands to be
1095       // convertable, we can insert casts if they are convertible but not
1096       // compatible.  The reason for this is that we prefer to have resolved
1097       // functions but casted arguments if possible.
1098       //
1099       BasicBlock::iterator It = I;
1100
1101       // Convert over all of the call operands to their new types... but only
1102       // convert over the part that is not in the vararg section of the call.
1103       //
1104       for (unsigned i = 0; i < PTs.size(); ++i)
1105         if (Params[i]->getType() != PTs[i]) {
1106           // Create a cast to convert it to the right type, we know that this
1107           // is a lossless cast...
1108           //
1109           Params[i] = new CastInst(Params[i], PTs[i], "call.resolve.cast");
1110           It = ++BIL.insert(It, cast<Instruction>(Params[i]));
1111         }
1112       Meth = NewVal;  // Update call destination to new value
1113
1114     } else {                   // Changing an argument, must be in vararg area
1115       std::vector<Value*>::iterator OI =
1116         find(Params.begin(), Params.end(), OldVal);
1117       assert (OI != Params.end() && "Not using value!");
1118
1119       *OI = NewVal;
1120     }
1121
1122     Res = new CallInst(Meth, Params, Name);
1123     break;
1124   }
1125   default:
1126     assert(0 && "Expression convertable, but don't know how to convert?");
1127     return;
1128   }
1129
1130   // If the instruction was newly created, insert it into the instruction
1131   // stream.
1132   //
1133   BasicBlock::iterator It = I;
1134   assert(It != BIL.end() && "Instruction not in own basic block??");
1135   BIL.insert(It, Res);   // Keep It pointing to old instruction
1136
1137   DEBUG(cerr << "COT CREATED: "  << (void*)Res << " " << Res
1138              << "In: " << (void*)I << " " << I << "Out: " << (void*)Res
1139              << " " << Res);
1140
1141   // Add the instruction to the expression map
1142   VMC.ExprMap[I] = Res;
1143
1144   if (I->getType() != Res->getType())
1145     ConvertValueToNewType(I, Res, VMC);
1146   else {
1147     for (unsigned It = 0; It < I->use_size(); ) {
1148       User *Use = *(I->use_begin()+It);
1149       if (isa<ValueHandle>(Use))            // Don't remove ValueHandles!
1150         ++It;
1151       else
1152         Use->replaceUsesOfWith(I, Res);
1153     }
1154
1155     if (I->use_empty()) {
1156       // Now we just need to remove the old instruction so we don't get infinite
1157       // loops.  Note that we cannot use DCE because DCE won't remove a store
1158       // instruction, for example.
1159       //
1160       DEBUG(cerr << "DELETING: " << (void*)I << " " << I);
1161       BIL.remove(I);
1162       VMC.OperandsMapped.erase(I);
1163       VMC.ExprMap.erase(I);
1164       delete I;
1165     } else {
1166       for (Value::use_iterator UI = I->use_begin(), UE = I->use_end();
1167            UI != UE; ++UI)
1168         assert(isa<ValueHandle>((Value*)*UI) &&"Uses of Instruction remain!!!");
1169     }
1170   }
1171 }
1172
1173
1174 ValueHandle::ValueHandle(ValueMapCache &VMC, Value *V)
1175   : Instruction(Type::VoidTy, UserOp1, ""), Cache(VMC) {
1176   //DEBUG(cerr << "VH AQUIRING: " << (void*)V << " " << V);
1177   Operands.push_back(Use(V, this));
1178 }
1179
1180 static void RecursiveDelete(ValueMapCache &Cache, Instruction *I) {
1181   if (!I || !I->use_empty()) return;
1182
1183   assert(I->getParent() && "Inst not in basic block!");
1184
1185   //DEBUG(cerr << "VH DELETING: " << (void*)I << " " << I);
1186
1187   for (User::op_iterator OI = I->op_begin(), OE = I->op_end(); 
1188        OI != OE; ++OI)
1189     if (Instruction *U = dyn_cast<Instruction>(OI->get())) {
1190       *OI = 0;
1191       RecursiveDelete(Cache, U);
1192     }
1193
1194   I->getParent()->getInstList().remove(I);
1195
1196   Cache.OperandsMapped.erase(I);
1197   Cache.ExprMap.erase(I);
1198   delete I;
1199 }
1200
1201 ValueHandle::~ValueHandle() {
1202   if (Operands[0]->use_size() == 1) {
1203     Value *V = Operands[0];
1204     Operands[0] = 0;   // Drop use!
1205
1206     // Now we just need to remove the old instruction so we don't get infinite
1207     // loops.  Note that we cannot use DCE because DCE won't remove a store
1208     // instruction, for example.
1209     //
1210     RecursiveDelete(Cache, dyn_cast<Instruction>(V));
1211   } else {
1212     //DEBUG(cerr << "VH RELEASING: " << (void*)Operands[0].get() << " "
1213     //           << Operands[0]->use_size() << " " << Operands[0]);
1214   }
1215 }