Removed iostream #includes. Replaced std::cerr with DOUT.
[oota-llvm.git] / lib / VMCore / Constants.cpp
1 //===-- Constants.cpp - Implement Constant nodes --------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by the LLVM research group and is distributed under
6 // the University of Illinois Open Source License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements the Constant* classes...
11 //
12 //===----------------------------------------------------------------------===//
13
14 #include "llvm/Constants.h"
15 #include "ConstantFolding.h"
16 #include "llvm/DerivedTypes.h"
17 #include "llvm/GlobalValue.h"
18 #include "llvm/Instructions.h"
19 #include "llvm/SymbolTable.h"
20 #include "llvm/Module.h"
21 #include "llvm/ADT/StringExtras.h"
22 #include "llvm/Support/Compiler.h"
23 #include "llvm/Support/Debug.h"
24 #include "llvm/Support/ManagedStatic.h"
25 #include "llvm/Support/MathExtras.h"
26 #include <algorithm>
27 using namespace llvm;
28
29 //===----------------------------------------------------------------------===//
30 //                              Constant Class
31 //===----------------------------------------------------------------------===//
32
33 void Constant::destroyConstantImpl() {
34   // When a Constant is destroyed, there may be lingering
35   // references to the constant by other constants in the constant pool.  These
36   // constants are implicitly dependent on the module that is being deleted,
37   // but they don't know that.  Because we only find out when the CPV is
38   // deleted, we must now notify all of our users (that should only be
39   // Constants) that they are, in fact, invalid now and should be deleted.
40   //
41   while (!use_empty()) {
42     Value *V = use_back();
43 #ifndef NDEBUG      // Only in -g mode...
44     if (!isa<Constant>(V))
45       DOUT << "While deleting: " << *this
46            << "\n\nUse still stuck around after Def is destroyed: "
47            << *V << "\n\n";
48 #endif
49     assert(isa<Constant>(V) && "References remain to Constant being destroyed");
50     Constant *CV = cast<Constant>(V);
51     CV->destroyConstant();
52
53     // The constant should remove itself from our use list...
54     assert((use_empty() || use_back() != V) && "Constant not removed!");
55   }
56
57   // Value has no outstanding references it is safe to delete it now...
58   delete this;
59 }
60
61 /// canTrap - Return true if evaluation of this constant could trap.  This is
62 /// true for things like constant expressions that could divide by zero.
63 bool Constant::canTrap() const {
64   assert(getType()->isFirstClassType() && "Cannot evaluate aggregate vals!");
65   // The only thing that could possibly trap are constant exprs.
66   const ConstantExpr *CE = dyn_cast<ConstantExpr>(this);
67   if (!CE) return false;
68   
69   // ConstantExpr traps if any operands can trap. 
70   for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
71     if (getOperand(i)->canTrap()) 
72       return true;
73
74   // Otherwise, only specific operations can trap.
75   switch (CE->getOpcode()) {
76   default:
77     return false;
78   case Instruction::UDiv:
79   case Instruction::SDiv:
80   case Instruction::FDiv:
81   case Instruction::URem:
82   case Instruction::SRem:
83   case Instruction::FRem:
84     // Div and rem can trap if the RHS is not known to be non-zero.
85     if (!isa<ConstantInt>(getOperand(1)) || getOperand(1)->isNullValue())
86       return true;
87     return false;
88   }
89 }
90
91
92 // Static constructor to create a '0' constant of arbitrary type...
93 Constant *Constant::getNullValue(const Type *Ty) {
94   switch (Ty->getTypeID()) {
95   case Type::BoolTyID: {
96     static Constant *NullBool = ConstantBool::get(false);
97     return NullBool;
98   }
99   case Type::SByteTyID: {
100     static Constant *NullSByte = ConstantInt::get(Type::SByteTy, 0);
101     return NullSByte;
102   }
103   case Type::UByteTyID: {
104     static Constant *NullUByte = ConstantInt::get(Type::UByteTy, 0);
105     return NullUByte;
106   }
107   case Type::ShortTyID: {
108     static Constant *NullShort = ConstantInt::get(Type::ShortTy, 0);
109     return NullShort;
110   }
111   case Type::UShortTyID: {
112     static Constant *NullUShort = ConstantInt::get(Type::UShortTy, 0);
113     return NullUShort;
114   }
115   case Type::IntTyID: {
116     static Constant *NullInt = ConstantInt::get(Type::IntTy, 0);
117     return NullInt;
118   }
119   case Type::UIntTyID: {
120     static Constant *NullUInt = ConstantInt::get(Type::UIntTy, 0);
121     return NullUInt;
122   }
123   case Type::LongTyID: {
124     static Constant *NullLong = ConstantInt::get(Type::LongTy, 0);
125     return NullLong;
126   }
127   case Type::ULongTyID: {
128     static Constant *NullULong = ConstantInt::get(Type::ULongTy, 0);
129     return NullULong;
130   }
131
132   case Type::FloatTyID: {
133     static Constant *NullFloat = ConstantFP::get(Type::FloatTy, 0);
134     return NullFloat;
135   }
136   case Type::DoubleTyID: {
137     static Constant *NullDouble = ConstantFP::get(Type::DoubleTy, 0);
138     return NullDouble;
139   }
140
141   case Type::PointerTyID:
142     return ConstantPointerNull::get(cast<PointerType>(Ty));
143
144   case Type::StructTyID:
145   case Type::ArrayTyID:
146   case Type::PackedTyID:
147     return ConstantAggregateZero::get(Ty);
148   default:
149     // Function, Label, or Opaque type?
150     assert(!"Cannot create a null constant of that type!");
151     return 0;
152   }
153 }
154
155 // Static constructor to create the maximum constant of an integral type...
156 ConstantIntegral *ConstantIntegral::getMaxValue(const Type *Ty) {
157   switch (Ty->getTypeID()) {
158   case Type::BoolTyID:   return ConstantBool::getTrue();
159   case Type::SByteTyID:
160   case Type::ShortTyID:
161   case Type::IntTyID:
162   case Type::LongTyID: {
163     // Calculate 011111111111111...
164     unsigned TypeBits = Ty->getPrimitiveSize()*8;
165     int64_t Val = INT64_MAX;             // All ones
166     Val >>= 64-TypeBits;                 // Shift out unwanted 1 bits...
167     return ConstantInt::get(Ty, Val);
168   }
169
170   case Type::UByteTyID:
171   case Type::UShortTyID:
172   case Type::UIntTyID:
173   case Type::ULongTyID:  return getAllOnesValue(Ty);
174
175   default: return 0;
176   }
177 }
178
179 // Static constructor to create the minimum constant for an integral type...
180 ConstantIntegral *ConstantIntegral::getMinValue(const Type *Ty) {
181   switch (Ty->getTypeID()) {
182   case Type::BoolTyID:   return ConstantBool::getFalse();
183   case Type::SByteTyID:
184   case Type::ShortTyID:
185   case Type::IntTyID:
186   case Type::LongTyID: {
187      // Calculate 1111111111000000000000
188      unsigned TypeBits = Ty->getPrimitiveSize()*8;
189      int64_t Val = -1;                    // All ones
190      Val <<= TypeBits-1;                  // Shift over to the right spot
191      return ConstantInt::get(Ty, Val);
192   }
193
194   case Type::UByteTyID:
195   case Type::UShortTyID:
196   case Type::UIntTyID:
197   case Type::ULongTyID:  return ConstantInt::get(Ty, 0);
198
199   default: return 0;
200   }
201 }
202
203 // Static constructor to create an integral constant with all bits set
204 ConstantIntegral *ConstantIntegral::getAllOnesValue(const Type *Ty) {
205   switch (Ty->getTypeID()) {
206   case Type::BoolTyID:   return ConstantBool::getTrue();
207   case Type::SByteTyID:
208   case Type::ShortTyID:
209   case Type::IntTyID:
210   case Type::LongTyID:   return ConstantInt::get(Ty, -1);
211
212   case Type::UByteTyID:
213   case Type::UShortTyID:
214   case Type::UIntTyID:
215   case Type::ULongTyID: {
216     // Calculate ~0 of the right type...
217     unsigned TypeBits = Ty->getPrimitiveSize()*8;
218     uint64_t Val = ~0ULL;                // All ones
219     Val >>= 64-TypeBits;                 // Shift out unwanted 1 bits...
220     return ConstantInt::get(Ty, Val);
221   }
222   default: return 0;
223   }
224 }
225
226 //===----------------------------------------------------------------------===//
227 //                            ConstantXXX Classes
228 //===----------------------------------------------------------------------===//
229
230 //===----------------------------------------------------------------------===//
231 //                             Normal Constructors
232
233 ConstantIntegral::ConstantIntegral(const Type *Ty, ValueTy VT, uint64_t V)
234   : Constant(Ty, VT, 0, 0), Val(V) {
235 }
236
237 ConstantBool::ConstantBool(bool V) 
238   : ConstantIntegral(Type::BoolTy, ConstantBoolVal, uint64_t(V)) {
239 }
240
241 ConstantInt::ConstantInt(const Type *Ty, uint64_t V)
242   : ConstantIntegral(Ty, ConstantIntVal, V) {
243 }
244
245 ConstantFP::ConstantFP(const Type *Ty, double V)
246   : Constant(Ty, ConstantFPVal, 0, 0) {
247   assert(isValueValidForType(Ty, V) && "Value too large for type!");
248   Val = V;
249 }
250
251 ConstantArray::ConstantArray(const ArrayType *T,
252                              const std::vector<Constant*> &V)
253   : Constant(T, ConstantArrayVal, new Use[V.size()], V.size()) {
254   assert(V.size() == T->getNumElements() &&
255          "Invalid initializer vector for constant array");
256   Use *OL = OperandList;
257   for (std::vector<Constant*>::const_iterator I = V.begin(), E = V.end();
258        I != E; ++I, ++OL) {
259     Constant *C = *I;
260     assert((C->getType() == T->getElementType() ||
261             (T->isAbstract() &&
262              C->getType()->getTypeID() == T->getElementType()->getTypeID())) &&
263            "Initializer for array element doesn't match array element type!");
264     OL->init(C, this);
265   }
266 }
267
268 ConstantArray::~ConstantArray() {
269   delete [] OperandList;
270 }
271
272 ConstantStruct::ConstantStruct(const StructType *T,
273                                const std::vector<Constant*> &V)
274   : Constant(T, ConstantStructVal, new Use[V.size()], V.size()) {
275   assert(V.size() == T->getNumElements() &&
276          "Invalid initializer vector for constant structure");
277   Use *OL = OperandList;
278   for (std::vector<Constant*>::const_iterator I = V.begin(), E = V.end();
279        I != E; ++I, ++OL) {
280     Constant *C = *I;
281     assert((C->getType() == T->getElementType(I-V.begin()) ||
282             ((T->getElementType(I-V.begin())->isAbstract() ||
283               C->getType()->isAbstract()) &&
284              T->getElementType(I-V.begin())->getTypeID() == 
285                    C->getType()->getTypeID())) &&
286            "Initializer for struct element doesn't match struct element type!");
287     OL->init(C, this);
288   }
289 }
290
291 ConstantStruct::~ConstantStruct() {
292   delete [] OperandList;
293 }
294
295
296 ConstantPacked::ConstantPacked(const PackedType *T,
297                                const std::vector<Constant*> &V)
298   : Constant(T, ConstantPackedVal, new Use[V.size()], V.size()) {
299   Use *OL = OperandList;
300     for (std::vector<Constant*>::const_iterator I = V.begin(), E = V.end();
301          I != E; ++I, ++OL) {
302       Constant *C = *I;
303       assert((C->getType() == T->getElementType() ||
304             (T->isAbstract() &&
305              C->getType()->getTypeID() == T->getElementType()->getTypeID())) &&
306            "Initializer for packed element doesn't match packed element type!");
307     OL->init(C, this);
308   }
309 }
310
311 ConstantPacked::~ConstantPacked() {
312   delete [] OperandList;
313 }
314
315 /// UnaryConstantExpr - This class is private to Constants.cpp, and is used
316 /// behind the scenes to implement unary constant exprs.
317 namespace {
318 class VISIBILITY_HIDDEN UnaryConstantExpr : public ConstantExpr {
319   Use Op;
320 public:
321   UnaryConstantExpr(unsigned Opcode, Constant *C, const Type *Ty)
322     : ConstantExpr(Ty, Opcode, &Op, 1), Op(C, this) {}
323 };
324 }
325
326 static bool isSetCC(unsigned Opcode) {
327   return Opcode == Instruction::SetEQ || Opcode == Instruction::SetNE ||
328          Opcode == Instruction::SetLT || Opcode == Instruction::SetGT ||
329          Opcode == Instruction::SetLE || Opcode == Instruction::SetGE;
330 }
331
332 /// BinaryConstantExpr - This class is private to Constants.cpp, and is used
333 /// behind the scenes to implement binary constant exprs.
334 namespace {
335 class VISIBILITY_HIDDEN BinaryConstantExpr : public ConstantExpr {
336   Use Ops[2];
337 public:
338   BinaryConstantExpr(unsigned Opcode, Constant *C1, Constant *C2)
339     : ConstantExpr(isSetCC(Opcode) ? Type::BoolTy : C1->getType(),
340                    Opcode, Ops, 2) {
341     Ops[0].init(C1, this);
342     Ops[1].init(C2, this);
343   }
344 };
345 }
346
347 /// SelectConstantExpr - This class is private to Constants.cpp, and is used
348 /// behind the scenes to implement select constant exprs.
349 namespace {
350 class VISIBILITY_HIDDEN SelectConstantExpr : public ConstantExpr {
351   Use Ops[3];
352 public:
353   SelectConstantExpr(Constant *C1, Constant *C2, Constant *C3)
354     : ConstantExpr(C2->getType(), Instruction::Select, Ops, 3) {
355     Ops[0].init(C1, this);
356     Ops[1].init(C2, this);
357     Ops[2].init(C3, this);
358   }
359 };
360 }
361
362 /// ExtractElementConstantExpr - This class is private to
363 /// Constants.cpp, and is used behind the scenes to implement
364 /// extractelement constant exprs.
365 namespace {
366 class VISIBILITY_HIDDEN ExtractElementConstantExpr : public ConstantExpr {
367   Use Ops[2];
368 public:
369   ExtractElementConstantExpr(Constant *C1, Constant *C2)
370     : ConstantExpr(cast<PackedType>(C1->getType())->getElementType(), 
371                    Instruction::ExtractElement, Ops, 2) {
372     Ops[0].init(C1, this);
373     Ops[1].init(C2, this);
374   }
375 };
376 }
377
378 /// InsertElementConstantExpr - This class is private to
379 /// Constants.cpp, and is used behind the scenes to implement
380 /// insertelement constant exprs.
381 namespace {
382 class VISIBILITY_HIDDEN InsertElementConstantExpr : public ConstantExpr {
383   Use Ops[3];
384 public:
385   InsertElementConstantExpr(Constant *C1, Constant *C2, Constant *C3)
386     : ConstantExpr(C1->getType(), Instruction::InsertElement, 
387                    Ops, 3) {
388     Ops[0].init(C1, this);
389     Ops[1].init(C2, this);
390     Ops[2].init(C3, this);
391   }
392 };
393 }
394
395 /// ShuffleVectorConstantExpr - This class is private to
396 /// Constants.cpp, and is used behind the scenes to implement
397 /// shufflevector constant exprs.
398 namespace {
399 class VISIBILITY_HIDDEN ShuffleVectorConstantExpr : public ConstantExpr {
400   Use Ops[3];
401 public:
402   ShuffleVectorConstantExpr(Constant *C1, Constant *C2, Constant *C3)
403   : ConstantExpr(C1->getType(), Instruction::ShuffleVector, 
404                  Ops, 3) {
405     Ops[0].init(C1, this);
406     Ops[1].init(C2, this);
407     Ops[2].init(C3, this);
408   }
409 };
410 }
411
412 /// GetElementPtrConstantExpr - This class is private to Constants.cpp, and is
413 /// used behind the scenes to implement getelementpr constant exprs.
414 namespace {
415 struct VISIBILITY_HIDDEN GetElementPtrConstantExpr : public ConstantExpr {
416   GetElementPtrConstantExpr(Constant *C, const std::vector<Constant*> &IdxList,
417                             const Type *DestTy)
418     : ConstantExpr(DestTy, Instruction::GetElementPtr,
419                    new Use[IdxList.size()+1], IdxList.size()+1) {
420     OperandList[0].init(C, this);
421     for (unsigned i = 0, E = IdxList.size(); i != E; ++i)
422       OperandList[i+1].init(IdxList[i], this);
423   }
424   ~GetElementPtrConstantExpr() {
425     delete [] OperandList;
426   }
427 };
428 }
429
430 /// ConstantExpr::get* - Return some common constants without having to
431 /// specify the full Instruction::OPCODE identifier.
432 ///
433 Constant *ConstantExpr::getNeg(Constant *C) {
434   if (!C->getType()->isFloatingPoint())
435     return get(Instruction::Sub, getNullValue(C->getType()), C);
436   else
437     return get(Instruction::Sub, ConstantFP::get(C->getType(), -0.0), C);
438 }
439 Constant *ConstantExpr::getNot(Constant *C) {
440   assert(isa<ConstantIntegral>(C) && "Cannot NOT a nonintegral type!");
441   return get(Instruction::Xor, C,
442              ConstantIntegral::getAllOnesValue(C->getType()));
443 }
444 Constant *ConstantExpr::getAdd(Constant *C1, Constant *C2) {
445   return get(Instruction::Add, C1, C2);
446 }
447 Constant *ConstantExpr::getSub(Constant *C1, Constant *C2) {
448   return get(Instruction::Sub, C1, C2);
449 }
450 Constant *ConstantExpr::getMul(Constant *C1, Constant *C2) {
451   return get(Instruction::Mul, C1, C2);
452 }
453 Constant *ConstantExpr::getUDiv(Constant *C1, Constant *C2) {
454   return get(Instruction::UDiv, C1, C2);
455 }
456 Constant *ConstantExpr::getSDiv(Constant *C1, Constant *C2) {
457   return get(Instruction::SDiv, C1, C2);
458 }
459 Constant *ConstantExpr::getFDiv(Constant *C1, Constant *C2) {
460   return get(Instruction::FDiv, C1, C2);
461 }
462 Constant *ConstantExpr::getURem(Constant *C1, Constant *C2) {
463   return get(Instruction::URem, C1, C2);
464 }
465 Constant *ConstantExpr::getSRem(Constant *C1, Constant *C2) {
466   return get(Instruction::SRem, C1, C2);
467 }
468 Constant *ConstantExpr::getFRem(Constant *C1, Constant *C2) {
469   return get(Instruction::FRem, C1, C2);
470 }
471 Constant *ConstantExpr::getAnd(Constant *C1, Constant *C2) {
472   return get(Instruction::And, C1, C2);
473 }
474 Constant *ConstantExpr::getOr(Constant *C1, Constant *C2) {
475   return get(Instruction::Or, C1, C2);
476 }
477 Constant *ConstantExpr::getXor(Constant *C1, Constant *C2) {
478   return get(Instruction::Xor, C1, C2);
479 }
480 Constant *ConstantExpr::getSetEQ(Constant *C1, Constant *C2) {
481   return get(Instruction::SetEQ, C1, C2);
482 }
483 Constant *ConstantExpr::getSetNE(Constant *C1, Constant *C2) {
484   return get(Instruction::SetNE, C1, C2);
485 }
486 Constant *ConstantExpr::getSetLT(Constant *C1, Constant *C2) {
487   return get(Instruction::SetLT, C1, C2);
488 }
489 Constant *ConstantExpr::getSetGT(Constant *C1, Constant *C2) {
490   return get(Instruction::SetGT, C1, C2);
491 }
492 Constant *ConstantExpr::getSetLE(Constant *C1, Constant *C2) {
493   return get(Instruction::SetLE, C1, C2);
494 }
495 Constant *ConstantExpr::getSetGE(Constant *C1, Constant *C2) {
496   return get(Instruction::SetGE, C1, C2);
497 }
498 Constant *ConstantExpr::getShl(Constant *C1, Constant *C2) {
499   return get(Instruction::Shl, C1, C2);
500 }
501 Constant *ConstantExpr::getLShr(Constant *C1, Constant *C2) {
502   return get(Instruction::LShr, C1, C2);
503 }
504 Constant *ConstantExpr::getAShr(Constant *C1, Constant *C2) {
505   return get(Instruction::AShr, C1, C2);
506 }
507
508 /// getWithOperandReplaced - Return a constant expression identical to this
509 /// one, but with the specified operand set to the specified value.
510 Constant *ConstantExpr::getWithOperandReplaced(unsigned OpNo,
511                                                Constant *Op) const {
512   assert(OpNo < getNumOperands() && "Operand num is out of range!");
513   assert(Op->getType() == getOperand(OpNo)->getType() &&
514          "Replacing operand with value of different type!");
515   if (getOperand(OpNo) == Op)
516     return const_cast<ConstantExpr*>(this);
517   
518   Constant *Op0, *Op1, *Op2;
519   switch (getOpcode()) {
520   case Instruction::Cast:
521     return ConstantExpr::getCast(Op, getType());
522   case Instruction::Select:
523     Op0 = (OpNo == 0) ? Op : getOperand(0);
524     Op1 = (OpNo == 1) ? Op : getOperand(1);
525     Op2 = (OpNo == 2) ? Op : getOperand(2);
526     return ConstantExpr::getSelect(Op0, Op1, Op2);
527   case Instruction::InsertElement:
528     Op0 = (OpNo == 0) ? Op : getOperand(0);
529     Op1 = (OpNo == 1) ? Op : getOperand(1);
530     Op2 = (OpNo == 2) ? Op : getOperand(2);
531     return ConstantExpr::getInsertElement(Op0, Op1, Op2);
532   case Instruction::ExtractElement:
533     Op0 = (OpNo == 0) ? Op : getOperand(0);
534     Op1 = (OpNo == 1) ? Op : getOperand(1);
535     return ConstantExpr::getExtractElement(Op0, Op1);
536   case Instruction::ShuffleVector:
537     Op0 = (OpNo == 0) ? Op : getOperand(0);
538     Op1 = (OpNo == 1) ? Op : getOperand(1);
539     Op2 = (OpNo == 2) ? Op : getOperand(2);
540     return ConstantExpr::getShuffleVector(Op0, Op1, Op2);
541   case Instruction::GetElementPtr: {
542     std::vector<Constant*> Ops;
543     for (unsigned i = 1, e = getNumOperands(); i != e; ++i)
544       Ops.push_back(getOperand(i));
545     if (OpNo == 0)
546       return ConstantExpr::getGetElementPtr(Op, Ops);
547     Ops[OpNo-1] = Op;
548     return ConstantExpr::getGetElementPtr(getOperand(0), Ops);
549   }
550   default:
551     assert(getNumOperands() == 2 && "Must be binary operator?");
552     Op0 = (OpNo == 0) ? Op : getOperand(0);
553     Op1 = (OpNo == 1) ? Op : getOperand(1);
554     return ConstantExpr::get(getOpcode(), Op0, Op1);
555   }
556 }
557
558 /// getWithOperands - This returns the current constant expression with the
559 /// operands replaced with the specified values.  The specified operands must
560 /// match count and type with the existing ones.
561 Constant *ConstantExpr::
562 getWithOperands(const std::vector<Constant*> &Ops) const {
563   assert(Ops.size() == getNumOperands() && "Operand count mismatch!");
564   bool AnyChange = false;
565   for (unsigned i = 0, e = Ops.size(); i != e; ++i) {
566     assert(Ops[i]->getType() == getOperand(i)->getType() &&
567            "Operand type mismatch!");
568     AnyChange |= Ops[i] != getOperand(i);
569   }
570   if (!AnyChange)  // No operands changed, return self.
571     return const_cast<ConstantExpr*>(this);
572
573   switch (getOpcode()) {
574   case Instruction::Cast:
575     return ConstantExpr::getCast(Ops[0], getType());
576   case Instruction::Select:
577     return ConstantExpr::getSelect(Ops[0], Ops[1], Ops[2]);
578   case Instruction::InsertElement:
579     return ConstantExpr::getInsertElement(Ops[0], Ops[1], Ops[2]);
580   case Instruction::ExtractElement:
581     return ConstantExpr::getExtractElement(Ops[0], Ops[1]);
582   case Instruction::ShuffleVector:
583     return ConstantExpr::getShuffleVector(Ops[0], Ops[1], Ops[2]);
584   case Instruction::GetElementPtr: {
585     std::vector<Constant*> ActualOps(Ops.begin()+1, Ops.end());
586     return ConstantExpr::getGetElementPtr(Ops[0], ActualOps);
587   }
588   default:
589     assert(getNumOperands() == 2 && "Must be binary operator?");
590     return ConstantExpr::get(getOpcode(), Ops[0], Ops[1]);
591   }
592 }
593
594
595 //===----------------------------------------------------------------------===//
596 //                      isValueValidForType implementations
597
598 bool ConstantInt::isValueValidForType(const Type *Ty, int64_t Val) {
599   switch (Ty->getTypeID()) {
600   default:
601     return false;         // These can't be represented as integers!!!
602     // Signed types...
603   case Type::SByteTyID:
604     return (Val <= INT8_MAX && Val >= INT8_MIN);
605   case Type::UByteTyID:
606     return (Val >= 0) && (Val <= UINT8_MAX);
607   case Type::ShortTyID:
608     return (Val <= INT16_MAX && Val >= INT16_MIN);
609   case Type::UShortTyID:
610     return (Val >= 0) && (Val <= UINT16_MAX);
611   case Type::IntTyID:
612     return (Val <= int(INT32_MAX) && Val >= int(INT32_MIN));
613   case Type::UIntTyID:
614     return (Val >= 0) && (Val <= UINT32_MAX);
615   case Type::LongTyID:
616   case Type::ULongTyID:
617     return true; // always true, has to fit in largest type
618   }
619 }
620
621 bool ConstantFP::isValueValidForType(const Type *Ty, double Val) {
622   switch (Ty->getTypeID()) {
623   default:
624     return false;         // These can't be represented as floating point!
625
626     // TODO: Figure out how to test if a double can be cast to a float!
627   case Type::FloatTyID:
628   case Type::DoubleTyID:
629     return true;          // This is the largest type...
630   }
631 }
632
633 //===----------------------------------------------------------------------===//
634 //                      Factory Function Implementation
635
636 // ConstantCreator - A class that is used to create constants by
637 // ValueMap*.  This class should be partially specialized if there is
638 // something strange that needs to be done to interface to the ctor for the
639 // constant.
640 //
641 namespace llvm {
642   template<class ConstantClass, class TypeClass, class ValType>
643   struct VISIBILITY_HIDDEN ConstantCreator {
644     static ConstantClass *create(const TypeClass *Ty, const ValType &V) {
645       return new ConstantClass(Ty, V);
646     }
647   };
648
649   template<class ConstantClass, class TypeClass>
650   struct VISIBILITY_HIDDEN ConvertConstantType {
651     static void convert(ConstantClass *OldC, const TypeClass *NewTy) {
652       assert(0 && "This type cannot be converted!\n");
653       abort();
654     }
655   };
656
657   template<class ValType, class TypeClass, class ConstantClass,
658            bool HasLargeKey = false  /*true for arrays and structs*/ >
659   class VISIBILITY_HIDDEN ValueMap : public AbstractTypeUser {
660   public:
661     typedef std::pair<const Type*, ValType> MapKey;
662     typedef std::map<MapKey, Constant *> MapTy;
663     typedef std::map<Constant*, typename MapTy::iterator> InverseMapTy;
664     typedef std::map<const Type*, typename MapTy::iterator> AbstractTypeMapTy;
665   private:
666     /// Map - This is the main map from the element descriptor to the Constants.
667     /// This is the primary way we avoid creating two of the same shape
668     /// constant.
669     MapTy Map;
670     
671     /// InverseMap - If "HasLargeKey" is true, this contains an inverse mapping
672     /// from the constants to their element in Map.  This is important for
673     /// removal of constants from the array, which would otherwise have to scan
674     /// through the map with very large keys.
675     InverseMapTy InverseMap;
676
677     /// AbstractTypeMap - Map for abstract type constants.
678     ///
679     AbstractTypeMapTy AbstractTypeMap;
680
681   private:
682     void clear(std::vector<Constant *> &Constants) {
683       for(typename MapTy::iterator I = Map.begin(); I != Map.end(); ++I)
684         Constants.push_back(I->second);
685       Map.clear();
686       AbstractTypeMap.clear();
687       InverseMap.clear();
688     }
689
690   public:
691     typename MapTy::iterator map_end() { return Map.end(); }
692     
693     /// InsertOrGetItem - Return an iterator for the specified element.
694     /// If the element exists in the map, the returned iterator points to the
695     /// entry and Exists=true.  If not, the iterator points to the newly
696     /// inserted entry and returns Exists=false.  Newly inserted entries have
697     /// I->second == 0, and should be filled in.
698     typename MapTy::iterator InsertOrGetItem(std::pair<MapKey, Constant *>
699                                    &InsertVal,
700                                    bool &Exists) {
701       std::pair<typename MapTy::iterator, bool> IP = Map.insert(InsertVal);
702       Exists = !IP.second;
703       return IP.first;
704     }
705     
706 private:
707     typename MapTy::iterator FindExistingElement(ConstantClass *CP) {
708       if (HasLargeKey) {
709         typename InverseMapTy::iterator IMI = InverseMap.find(CP);
710         assert(IMI != InverseMap.end() && IMI->second != Map.end() &&
711                IMI->second->second == CP &&
712                "InverseMap corrupt!");
713         return IMI->second;
714       }
715       
716       typename MapTy::iterator I =
717         Map.find(MapKey((TypeClass*)CP->getRawType(), getValType(CP)));
718       if (I == Map.end() || I->second != CP) {
719         // FIXME: This should not use a linear scan.  If this gets to be a
720         // performance problem, someone should look at this.
721         for (I = Map.begin(); I != Map.end() && I->second != CP; ++I)
722           /* empty */;
723       }
724       return I;
725     }
726 public:
727     
728     /// getOrCreate - Return the specified constant from the map, creating it if
729     /// necessary.
730     ConstantClass *getOrCreate(const TypeClass *Ty, const ValType &V) {
731       MapKey Lookup(Ty, V);
732       typename MapTy::iterator I = Map.lower_bound(Lookup);
733       // Is it in the map?      
734       if (I != Map.end() && I->first == Lookup)
735         return static_cast<ConstantClass *>(I->second);  
736
737       // If no preexisting value, create one now...
738       ConstantClass *Result =
739         ConstantCreator<ConstantClass,TypeClass,ValType>::create(Ty, V);
740
741       /// FIXME: why does this assert fail when loading 176.gcc?
742       //assert(Result->getType() == Ty && "Type specified is not correct!");
743       I = Map.insert(I, std::make_pair(MapKey(Ty, V), Result));
744
745       if (HasLargeKey)  // Remember the reverse mapping if needed.
746         InverseMap.insert(std::make_pair(Result, I));
747       
748       // If the type of the constant is abstract, make sure that an entry exists
749       // for it in the AbstractTypeMap.
750       if (Ty->isAbstract()) {
751         typename AbstractTypeMapTy::iterator TI =
752           AbstractTypeMap.lower_bound(Ty);
753
754         if (TI == AbstractTypeMap.end() || TI->first != Ty) {
755           // Add ourselves to the ATU list of the type.
756           cast<DerivedType>(Ty)->addAbstractTypeUser(this);
757
758           AbstractTypeMap.insert(TI, std::make_pair(Ty, I));
759         }
760       }
761       return Result;
762     }
763
764     void remove(ConstantClass *CP) {
765       typename MapTy::iterator I = FindExistingElement(CP);
766       assert(I != Map.end() && "Constant not found in constant table!");
767       assert(I->second == CP && "Didn't find correct element?");
768
769       if (HasLargeKey)  // Remember the reverse mapping if needed.
770         InverseMap.erase(CP);
771       
772       // Now that we found the entry, make sure this isn't the entry that
773       // the AbstractTypeMap points to.
774       const TypeClass *Ty = static_cast<const TypeClass *>(I->first.first);
775       if (Ty->isAbstract()) {
776         assert(AbstractTypeMap.count(Ty) &&
777                "Abstract type not in AbstractTypeMap?");
778         typename MapTy::iterator &ATMEntryIt = AbstractTypeMap[Ty];
779         if (ATMEntryIt == I) {
780           // Yes, we are removing the representative entry for this type.
781           // See if there are any other entries of the same type.
782           typename MapTy::iterator TmpIt = ATMEntryIt;
783
784           // First check the entry before this one...
785           if (TmpIt != Map.begin()) {
786             --TmpIt;
787             if (TmpIt->first.first != Ty) // Not the same type, move back...
788               ++TmpIt;
789           }
790
791           // If we didn't find the same type, try to move forward...
792           if (TmpIt == ATMEntryIt) {
793             ++TmpIt;
794             if (TmpIt == Map.end() || TmpIt->first.first != Ty)
795               --TmpIt;   // No entry afterwards with the same type
796           }
797
798           // If there is another entry in the map of the same abstract type,
799           // update the AbstractTypeMap entry now.
800           if (TmpIt != ATMEntryIt) {
801             ATMEntryIt = TmpIt;
802           } else {
803             // Otherwise, we are removing the last instance of this type
804             // from the table.  Remove from the ATM, and from user list.
805             cast<DerivedType>(Ty)->removeAbstractTypeUser(this);
806             AbstractTypeMap.erase(Ty);
807           }
808         }
809       }
810
811       Map.erase(I);
812     }
813
814     
815     /// MoveConstantToNewSlot - If we are about to change C to be the element
816     /// specified by I, update our internal data structures to reflect this
817     /// fact.
818     void MoveConstantToNewSlot(ConstantClass *C, typename MapTy::iterator I) {
819       // First, remove the old location of the specified constant in the map.
820       typename MapTy::iterator OldI = FindExistingElement(C);
821       assert(OldI != Map.end() && "Constant not found in constant table!");
822       assert(OldI->second == C && "Didn't find correct element?");
823       
824       // If this constant is the representative element for its abstract type,
825       // update the AbstractTypeMap so that the representative element is I.
826       if (C->getType()->isAbstract()) {
827         typename AbstractTypeMapTy::iterator ATI =
828             AbstractTypeMap.find(C->getType());
829         assert(ATI != AbstractTypeMap.end() &&
830                "Abstract type not in AbstractTypeMap?");
831         if (ATI->second == OldI)
832           ATI->second = I;
833       }
834       
835       // Remove the old entry from the map.
836       Map.erase(OldI);
837       
838       // Update the inverse map so that we know that this constant is now
839       // located at descriptor I.
840       if (HasLargeKey) {
841         assert(I->second == C && "Bad inversemap entry!");
842         InverseMap[C] = I;
843       }
844     }
845     
846     void refineAbstractType(const DerivedType *OldTy, const Type *NewTy) {
847       typename AbstractTypeMapTy::iterator I =
848         AbstractTypeMap.find(cast<Type>(OldTy));
849
850       assert(I != AbstractTypeMap.end() &&
851              "Abstract type not in AbstractTypeMap?");
852
853       // Convert a constant at a time until the last one is gone.  The last one
854       // leaving will remove() itself, causing the AbstractTypeMapEntry to be
855       // eliminated eventually.
856       do {
857         ConvertConstantType<ConstantClass,
858                             TypeClass>::convert(
859                                 static_cast<ConstantClass *>(I->second->second),
860                                                 cast<TypeClass>(NewTy));
861
862         I = AbstractTypeMap.find(cast<Type>(OldTy));
863       } while (I != AbstractTypeMap.end());
864     }
865
866     // If the type became concrete without being refined to any other existing
867     // type, we just remove ourselves from the ATU list.
868     void typeBecameConcrete(const DerivedType *AbsTy) {
869       AbsTy->removeAbstractTypeUser(this);
870     }
871
872     void dump() const {
873       DOUT << "Constant.cpp: ValueMap\n";
874     }
875   };
876 }
877
878
879 //---- ConstantBool::get*() implementation.
880
881 ConstantBool *ConstantBool::getTrue() {
882   static ConstantBool *T = 0;
883   if (T) return T;
884   return T = new ConstantBool(true);
885 }
886 ConstantBool *ConstantBool::getFalse() {
887   static ConstantBool *F = 0;
888   if (F) return F;
889   return F = new ConstantBool(false);
890 }
891
892 //---- ConstantInt::get() implementations...
893 //
894 static ManagedStatic<ValueMap<uint64_t, Type, ConstantInt> > IntConstants;
895
896 // Get a ConstantInt from an int64_t. Note here that we canoncialize the value
897 // to a uint64_t value that has been zero extended down to the size of the
898 // integer type of the ConstantInt. This allows the getZExtValue method to 
899 // just return the stored value while getSExtValue has to convert back to sign
900 // extended. getZExtValue is more common in LLVM than getSExtValue().
901 ConstantInt *ConstantInt::get(const Type *Ty, int64_t V) {
902   unsigned Size = Ty->getPrimitiveSizeInBits();
903   uint64_t ZeroExtendedCanonicalization = V & (~uint64_t(0UL) >> (64-Size));
904   return IntConstants->getOrCreate(Ty, ZeroExtendedCanonicalization );
905 }
906
907 //---- ConstantFP::get() implementation...
908 //
909 namespace llvm {
910   template<>
911   struct ConstantCreator<ConstantFP, Type, uint64_t> {
912     static ConstantFP *create(const Type *Ty, uint64_t V) {
913       assert(Ty == Type::DoubleTy);
914       return new ConstantFP(Ty, BitsToDouble(V));
915     }
916   };
917   template<>
918   struct ConstantCreator<ConstantFP, Type, uint32_t> {
919     static ConstantFP *create(const Type *Ty, uint32_t V) {
920       assert(Ty == Type::FloatTy);
921       return new ConstantFP(Ty, BitsToFloat(V));
922     }
923   };
924 }
925
926 static ManagedStatic<ValueMap<uint64_t, Type, ConstantFP> > DoubleConstants;
927 static ManagedStatic<ValueMap<uint32_t, Type, ConstantFP> > FloatConstants;
928
929 bool ConstantFP::isNullValue() const {
930   return DoubleToBits(Val) == 0;
931 }
932
933 bool ConstantFP::isExactlyValue(double V) const {
934   return DoubleToBits(V) == DoubleToBits(Val);
935 }
936
937
938 ConstantFP *ConstantFP::get(const Type *Ty, double V) {
939   if (Ty == Type::FloatTy) {
940     // Force the value through memory to normalize it.
941     return FloatConstants->getOrCreate(Ty, FloatToBits(V));
942   } else {
943     assert(Ty == Type::DoubleTy);
944     return DoubleConstants->getOrCreate(Ty, DoubleToBits(V));
945   }
946 }
947
948 //---- ConstantAggregateZero::get() implementation...
949 //
950 namespace llvm {
951   // ConstantAggregateZero does not take extra "value" argument...
952   template<class ValType>
953   struct ConstantCreator<ConstantAggregateZero, Type, ValType> {
954     static ConstantAggregateZero *create(const Type *Ty, const ValType &V){
955       return new ConstantAggregateZero(Ty);
956     }
957   };
958
959   template<>
960   struct ConvertConstantType<ConstantAggregateZero, Type> {
961     static void convert(ConstantAggregateZero *OldC, const Type *NewTy) {
962       // Make everyone now use a constant of the new type...
963       Constant *New = ConstantAggregateZero::get(NewTy);
964       assert(New != OldC && "Didn't replace constant??");
965       OldC->uncheckedReplaceAllUsesWith(New);
966       OldC->destroyConstant();     // This constant is now dead, destroy it.
967     }
968   };
969 }
970
971 static ManagedStatic<ValueMap<char, Type, 
972                               ConstantAggregateZero> > AggZeroConstants;
973
974 static char getValType(ConstantAggregateZero *CPZ) { return 0; }
975
976 Constant *ConstantAggregateZero::get(const Type *Ty) {
977   assert((isa<StructType>(Ty) || isa<ArrayType>(Ty) || isa<PackedType>(Ty)) &&
978          "Cannot create an aggregate zero of non-aggregate type!");
979   return AggZeroConstants->getOrCreate(Ty, 0);
980 }
981
982 // destroyConstant - Remove the constant from the constant table...
983 //
984 void ConstantAggregateZero::destroyConstant() {
985   AggZeroConstants->remove(this);
986   destroyConstantImpl();
987 }
988
989 //---- ConstantArray::get() implementation...
990 //
991 namespace llvm {
992   template<>
993   struct ConvertConstantType<ConstantArray, ArrayType> {
994     static void convert(ConstantArray *OldC, const ArrayType *NewTy) {
995       // Make everyone now use a constant of the new type...
996       std::vector<Constant*> C;
997       for (unsigned i = 0, e = OldC->getNumOperands(); i != e; ++i)
998         C.push_back(cast<Constant>(OldC->getOperand(i)));
999       Constant *New = ConstantArray::get(NewTy, C);
1000       assert(New != OldC && "Didn't replace constant??");
1001       OldC->uncheckedReplaceAllUsesWith(New);
1002       OldC->destroyConstant();    // This constant is now dead, destroy it.
1003     }
1004   };
1005 }
1006
1007 static std::vector<Constant*> getValType(ConstantArray *CA) {
1008   std::vector<Constant*> Elements;
1009   Elements.reserve(CA->getNumOperands());
1010   for (unsigned i = 0, e = CA->getNumOperands(); i != e; ++i)
1011     Elements.push_back(cast<Constant>(CA->getOperand(i)));
1012   return Elements;
1013 }
1014
1015 typedef ValueMap<std::vector<Constant*>, ArrayType, 
1016                  ConstantArray, true /*largekey*/> ArrayConstantsTy;
1017 static ManagedStatic<ArrayConstantsTy> ArrayConstants;
1018
1019 Constant *ConstantArray::get(const ArrayType *Ty,
1020                              const std::vector<Constant*> &V) {
1021   // If this is an all-zero array, return a ConstantAggregateZero object
1022   if (!V.empty()) {
1023     Constant *C = V[0];
1024     if (!C->isNullValue())
1025       return ArrayConstants->getOrCreate(Ty, V);
1026     for (unsigned i = 1, e = V.size(); i != e; ++i)
1027       if (V[i] != C)
1028         return ArrayConstants->getOrCreate(Ty, V);
1029   }
1030   return ConstantAggregateZero::get(Ty);
1031 }
1032
1033 // destroyConstant - Remove the constant from the constant table...
1034 //
1035 void ConstantArray::destroyConstant() {
1036   ArrayConstants->remove(this);
1037   destroyConstantImpl();
1038 }
1039
1040 /// ConstantArray::get(const string&) - Return an array that is initialized to
1041 /// contain the specified string.  If length is zero then a null terminator is 
1042 /// added to the specified string so that it may be used in a natural way. 
1043 /// Otherwise, the length parameter specifies how much of the string to use 
1044 /// and it won't be null terminated.
1045 ///
1046 Constant *ConstantArray::get(const std::string &Str, bool AddNull) {
1047   std::vector<Constant*> ElementVals;
1048   for (unsigned i = 0; i < Str.length(); ++i)
1049     ElementVals.push_back(ConstantInt::get(Type::SByteTy, Str[i]));
1050
1051   // Add a null terminator to the string...
1052   if (AddNull) {
1053     ElementVals.push_back(ConstantInt::get(Type::SByteTy, 0));
1054   }
1055
1056   ArrayType *ATy = ArrayType::get(Type::SByteTy, ElementVals.size());
1057   return ConstantArray::get(ATy, ElementVals);
1058 }
1059
1060 /// isString - This method returns true if the array is an array of sbyte or
1061 /// ubyte, and if the elements of the array are all ConstantInt's.
1062 bool ConstantArray::isString() const {
1063   // Check the element type for sbyte or ubyte...
1064   if (getType()->getElementType() != Type::UByteTy &&
1065       getType()->getElementType() != Type::SByteTy)
1066     return false;
1067   // Check the elements to make sure they are all integers, not constant
1068   // expressions.
1069   for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
1070     if (!isa<ConstantInt>(getOperand(i)))
1071       return false;
1072   return true;
1073 }
1074
1075 /// isCString - This method returns true if the array is a string (see
1076 /// isString) and it ends in a null byte \0 and does not contains any other
1077 /// null bytes except its terminator.
1078 bool ConstantArray::isCString() const {
1079   // Check the element type for sbyte or ubyte...
1080   if (getType()->getElementType() != Type::UByteTy &&
1081       getType()->getElementType() != Type::SByteTy)
1082     return false;
1083   Constant *Zero = Constant::getNullValue(getOperand(0)->getType());
1084   // Last element must be a null.
1085   if (getOperand(getNumOperands()-1) != Zero)
1086     return false;
1087   // Other elements must be non-null integers.
1088   for (unsigned i = 0, e = getNumOperands()-1; i != e; ++i) {
1089     if (!isa<ConstantInt>(getOperand(i)))
1090       return false;
1091     if (getOperand(i) == Zero)
1092       return false;
1093   }
1094   return true;
1095 }
1096
1097
1098 // getAsString - If the sub-element type of this array is either sbyte or ubyte,
1099 // then this method converts the array to an std::string and returns it.
1100 // Otherwise, it asserts out.
1101 //
1102 std::string ConstantArray::getAsString() const {
1103   assert(isString() && "Not a string!");
1104   std::string Result;
1105   for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
1106     Result += (char)cast<ConstantInt>(getOperand(i))->getZExtValue();
1107   return Result;
1108 }
1109
1110
1111 //---- ConstantStruct::get() implementation...
1112 //
1113
1114 namespace llvm {
1115   template<>
1116   struct ConvertConstantType<ConstantStruct, StructType> {
1117     static void convert(ConstantStruct *OldC, const StructType *NewTy) {
1118       // Make everyone now use a constant of the new type...
1119       std::vector<Constant*> C;
1120       for (unsigned i = 0, e = OldC->getNumOperands(); i != e; ++i)
1121         C.push_back(cast<Constant>(OldC->getOperand(i)));
1122       Constant *New = ConstantStruct::get(NewTy, C);
1123       assert(New != OldC && "Didn't replace constant??");
1124
1125       OldC->uncheckedReplaceAllUsesWith(New);
1126       OldC->destroyConstant();    // This constant is now dead, destroy it.
1127     }
1128   };
1129 }
1130
1131 typedef ValueMap<std::vector<Constant*>, StructType,
1132                  ConstantStruct, true /*largekey*/> StructConstantsTy;
1133 static ManagedStatic<StructConstantsTy> StructConstants;
1134
1135 static std::vector<Constant*> getValType(ConstantStruct *CS) {
1136   std::vector<Constant*> Elements;
1137   Elements.reserve(CS->getNumOperands());
1138   for (unsigned i = 0, e = CS->getNumOperands(); i != e; ++i)
1139     Elements.push_back(cast<Constant>(CS->getOperand(i)));
1140   return Elements;
1141 }
1142
1143 Constant *ConstantStruct::get(const StructType *Ty,
1144                               const std::vector<Constant*> &V) {
1145   // Create a ConstantAggregateZero value if all elements are zeros...
1146   for (unsigned i = 0, e = V.size(); i != e; ++i)
1147     if (!V[i]->isNullValue())
1148       return StructConstants->getOrCreate(Ty, V);
1149
1150   return ConstantAggregateZero::get(Ty);
1151 }
1152
1153 Constant *ConstantStruct::get(const std::vector<Constant*> &V) {
1154   std::vector<const Type*> StructEls;
1155   StructEls.reserve(V.size());
1156   for (unsigned i = 0, e = V.size(); i != e; ++i)
1157     StructEls.push_back(V[i]->getType());
1158   return get(StructType::get(StructEls), V);
1159 }
1160
1161 // destroyConstant - Remove the constant from the constant table...
1162 //
1163 void ConstantStruct::destroyConstant() {
1164   StructConstants->remove(this);
1165   destroyConstantImpl();
1166 }
1167
1168 //---- ConstantPacked::get() implementation...
1169 //
1170 namespace llvm {
1171   template<>
1172   struct ConvertConstantType<ConstantPacked, PackedType> {
1173     static void convert(ConstantPacked *OldC, const PackedType *NewTy) {
1174       // Make everyone now use a constant of the new type...
1175       std::vector<Constant*> C;
1176       for (unsigned i = 0, e = OldC->getNumOperands(); i != e; ++i)
1177         C.push_back(cast<Constant>(OldC->getOperand(i)));
1178       Constant *New = ConstantPacked::get(NewTy, C);
1179       assert(New != OldC && "Didn't replace constant??");
1180       OldC->uncheckedReplaceAllUsesWith(New);
1181       OldC->destroyConstant();    // This constant is now dead, destroy it.
1182     }
1183   };
1184 }
1185
1186 static std::vector<Constant*> getValType(ConstantPacked *CP) {
1187   std::vector<Constant*> Elements;
1188   Elements.reserve(CP->getNumOperands());
1189   for (unsigned i = 0, e = CP->getNumOperands(); i != e; ++i)
1190     Elements.push_back(CP->getOperand(i));
1191   return Elements;
1192 }
1193
1194 static ManagedStatic<ValueMap<std::vector<Constant*>, PackedType,
1195                               ConstantPacked> > PackedConstants;
1196
1197 Constant *ConstantPacked::get(const PackedType *Ty,
1198                               const std::vector<Constant*> &V) {
1199   // If this is an all-zero packed, return a ConstantAggregateZero object
1200   if (!V.empty()) {
1201     Constant *C = V[0];
1202     if (!C->isNullValue())
1203       return PackedConstants->getOrCreate(Ty, V);
1204     for (unsigned i = 1, e = V.size(); i != e; ++i)
1205       if (V[i] != C)
1206         return PackedConstants->getOrCreate(Ty, V);
1207   }
1208   return ConstantAggregateZero::get(Ty);
1209 }
1210
1211 Constant *ConstantPacked::get(const std::vector<Constant*> &V) {
1212   assert(!V.empty() && "Cannot infer type if V is empty");
1213   return get(PackedType::get(V.front()->getType(),V.size()), V);
1214 }
1215
1216 // destroyConstant - Remove the constant from the constant table...
1217 //
1218 void ConstantPacked::destroyConstant() {
1219   PackedConstants->remove(this);
1220   destroyConstantImpl();
1221 }
1222
1223 //---- ConstantPointerNull::get() implementation...
1224 //
1225
1226 namespace llvm {
1227   // ConstantPointerNull does not take extra "value" argument...
1228   template<class ValType>
1229   struct ConstantCreator<ConstantPointerNull, PointerType, ValType> {
1230     static ConstantPointerNull *create(const PointerType *Ty, const ValType &V){
1231       return new ConstantPointerNull(Ty);
1232     }
1233   };
1234
1235   template<>
1236   struct ConvertConstantType<ConstantPointerNull, PointerType> {
1237     static void convert(ConstantPointerNull *OldC, const PointerType *NewTy) {
1238       // Make everyone now use a constant of the new type...
1239       Constant *New = ConstantPointerNull::get(NewTy);
1240       assert(New != OldC && "Didn't replace constant??");
1241       OldC->uncheckedReplaceAllUsesWith(New);
1242       OldC->destroyConstant();     // This constant is now dead, destroy it.
1243     }
1244   };
1245 }
1246
1247 static ManagedStatic<ValueMap<char, PointerType, 
1248                               ConstantPointerNull> > NullPtrConstants;
1249
1250 static char getValType(ConstantPointerNull *) {
1251   return 0;
1252 }
1253
1254
1255 ConstantPointerNull *ConstantPointerNull::get(const PointerType *Ty) {
1256   return NullPtrConstants->getOrCreate(Ty, 0);
1257 }
1258
1259 // destroyConstant - Remove the constant from the constant table...
1260 //
1261 void ConstantPointerNull::destroyConstant() {
1262   NullPtrConstants->remove(this);
1263   destroyConstantImpl();
1264 }
1265
1266
1267 //---- UndefValue::get() implementation...
1268 //
1269
1270 namespace llvm {
1271   // UndefValue does not take extra "value" argument...
1272   template<class ValType>
1273   struct ConstantCreator<UndefValue, Type, ValType> {
1274     static UndefValue *create(const Type *Ty, const ValType &V) {
1275       return new UndefValue(Ty);
1276     }
1277   };
1278
1279   template<>
1280   struct ConvertConstantType<UndefValue, Type> {
1281     static void convert(UndefValue *OldC, const Type *NewTy) {
1282       // Make everyone now use a constant of the new type.
1283       Constant *New = UndefValue::get(NewTy);
1284       assert(New != OldC && "Didn't replace constant??");
1285       OldC->uncheckedReplaceAllUsesWith(New);
1286       OldC->destroyConstant();     // This constant is now dead, destroy it.
1287     }
1288   };
1289 }
1290
1291 static ManagedStatic<ValueMap<char, Type, UndefValue> > UndefValueConstants;
1292
1293 static char getValType(UndefValue *) {
1294   return 0;
1295 }
1296
1297
1298 UndefValue *UndefValue::get(const Type *Ty) {
1299   return UndefValueConstants->getOrCreate(Ty, 0);
1300 }
1301
1302 // destroyConstant - Remove the constant from the constant table.
1303 //
1304 void UndefValue::destroyConstant() {
1305   UndefValueConstants->remove(this);
1306   destroyConstantImpl();
1307 }
1308
1309
1310
1311
1312 //---- ConstantExpr::get() implementations...
1313 //
1314 typedef std::pair<unsigned, std::vector<Constant*> > ExprMapKeyType;
1315
1316 namespace llvm {
1317   template<>
1318   struct ConstantCreator<ConstantExpr, Type, ExprMapKeyType> {
1319     static ConstantExpr *create(const Type *Ty, const ExprMapKeyType &V) {
1320       if (V.first == Instruction::Cast)
1321         return new UnaryConstantExpr(Instruction::Cast, V.second[0], Ty);
1322       if ((V.first >= Instruction::BinaryOpsBegin &&
1323            V.first < Instruction::BinaryOpsEnd) ||
1324           V.first == Instruction::Shl           || 
1325           V.first == Instruction::LShr          ||
1326           V.first == Instruction::AShr)
1327         return new BinaryConstantExpr(V.first, V.second[0], V.second[1]);
1328       if (V.first == Instruction::Select)
1329         return new SelectConstantExpr(V.second[0], V.second[1], V.second[2]);
1330       if (V.first == Instruction::ExtractElement)
1331         return new ExtractElementConstantExpr(V.second[0], V.second[1]);
1332       if (V.first == Instruction::InsertElement)
1333         return new InsertElementConstantExpr(V.second[0], V.second[1],
1334                                              V.second[2]);
1335       if (V.first == Instruction::ShuffleVector)
1336         return new ShuffleVectorConstantExpr(V.second[0], V.second[1],
1337                                              V.second[2]);
1338       
1339       assert(V.first == Instruction::GetElementPtr && "Invalid ConstantExpr!");
1340
1341       std::vector<Constant*> IdxList(V.second.begin()+1, V.second.end());
1342       return new GetElementPtrConstantExpr(V.second[0], IdxList, Ty);
1343     }
1344   };
1345
1346   template<>
1347   struct ConvertConstantType<ConstantExpr, Type> {
1348     static void convert(ConstantExpr *OldC, const Type *NewTy) {
1349       Constant *New;
1350       switch (OldC->getOpcode()) {
1351       case Instruction::Cast:
1352         New = ConstantExpr::getCast(OldC->getOperand(0), NewTy);
1353         break;
1354       case Instruction::Select:
1355         New = ConstantExpr::getSelectTy(NewTy, OldC->getOperand(0),
1356                                         OldC->getOperand(1),
1357                                         OldC->getOperand(2));
1358         break;
1359       case Instruction::Shl:
1360       case Instruction::LShr:
1361       case Instruction::AShr:
1362         New = ConstantExpr::getShiftTy(NewTy, OldC->getOpcode(),
1363                                      OldC->getOperand(0), OldC->getOperand(1));
1364         break;
1365       default:
1366         assert(OldC->getOpcode() >= Instruction::BinaryOpsBegin &&
1367                OldC->getOpcode() <  Instruction::BinaryOpsEnd);
1368         New = ConstantExpr::getTy(NewTy, OldC->getOpcode(), OldC->getOperand(0),
1369                                   OldC->getOperand(1));
1370         break;
1371       case Instruction::GetElementPtr:
1372         // Make everyone now use a constant of the new type...
1373         std::vector<Value*> Idx(OldC->op_begin()+1, OldC->op_end());
1374         New = ConstantExpr::getGetElementPtrTy(NewTy, OldC->getOperand(0), Idx);
1375         break;
1376       }
1377
1378       assert(New != OldC && "Didn't replace constant??");
1379       OldC->uncheckedReplaceAllUsesWith(New);
1380       OldC->destroyConstant();    // This constant is now dead, destroy it.
1381     }
1382   };
1383 } // end namespace llvm
1384
1385
1386 static ExprMapKeyType getValType(ConstantExpr *CE) {
1387   std::vector<Constant*> Operands;
1388   Operands.reserve(CE->getNumOperands());
1389   for (unsigned i = 0, e = CE->getNumOperands(); i != e; ++i)
1390     Operands.push_back(cast<Constant>(CE->getOperand(i)));
1391   return ExprMapKeyType(CE->getOpcode(), Operands);
1392 }
1393
1394 static ManagedStatic<ValueMap<ExprMapKeyType, Type,
1395                               ConstantExpr> > ExprConstants;
1396
1397 Constant *ConstantExpr::getCast(Constant *C, const Type *Ty) {
1398   assert(Ty->isFirstClassType() && "Cannot cast to an aggregate type!");
1399
1400   if (Constant *FC = ConstantFoldCastInstruction(C, Ty))
1401     return FC;          // Fold a few common cases...
1402
1403   // Look up the constant in the table first to ensure uniqueness
1404   std::vector<Constant*> argVec(1, C);
1405   ExprMapKeyType Key = std::make_pair(Instruction::Cast, argVec);
1406   return ExprConstants->getOrCreate(Ty, Key);
1407 }
1408
1409 Constant *ConstantExpr::getSignExtend(Constant *C, const Type *Ty) {
1410   assert(C->getType()->isIntegral() && Ty->isIntegral() &&
1411          C->getType()->getPrimitiveSize() <= Ty->getPrimitiveSize() &&
1412          "This is an illegal sign extension!");
1413   if (C->getType() != Type::BoolTy) {
1414     C = ConstantExpr::getCast(C, C->getType()->getSignedVersion());
1415     return ConstantExpr::getCast(C, Ty);
1416   } else {
1417     if (C == ConstantBool::getTrue())
1418       return ConstantIntegral::getAllOnesValue(Ty);
1419     else
1420       return ConstantIntegral::getNullValue(Ty);
1421   }
1422 }
1423
1424 Constant *ConstantExpr::getZeroExtend(Constant *C, const Type *Ty) {
1425   assert(C->getType()->isIntegral() && Ty->isIntegral() &&
1426          C->getType()->getPrimitiveSize() <= Ty->getPrimitiveSize() &&
1427          "This is an illegal zero extension!");
1428   if (C->getType() != Type::BoolTy)
1429     C = ConstantExpr::getCast(C, C->getType()->getUnsignedVersion());
1430   return ConstantExpr::getCast(C, Ty);
1431 }
1432
1433 Constant *ConstantExpr::getSizeOf(const Type *Ty) {
1434   // sizeof is implemented as: (ulong) gep (Ty*)null, 1
1435   return getCast(
1436     getGetElementPtr(getNullValue(PointerType::get(Ty)),
1437                  std::vector<Constant*>(1, ConstantInt::get(Type::UIntTy, 1))),
1438     Type::ULongTy);
1439 }
1440
1441 Constant *ConstantExpr::getPtrPtrFromArrayPtr(Constant *C) {
1442   // pointer from array is implemented as: getelementptr arr ptr, 0, 0
1443   static std::vector<Constant*> Indices(2, ConstantInt::get(Type::UIntTy, 0));
1444
1445   return ConstantExpr::getGetElementPtr(C, Indices);
1446 }
1447
1448 Constant *ConstantExpr::getTy(const Type *ReqTy, unsigned Opcode,
1449                               Constant *C1, Constant *C2) {
1450   if (Opcode == Instruction::Shl || Opcode == Instruction::LShr ||
1451       Opcode == Instruction::AShr)
1452     return getShiftTy(ReqTy, Opcode, C1, C2);
1453   // Check the operands for consistency first
1454   assert(Opcode >= Instruction::BinaryOpsBegin &&
1455          Opcode <  Instruction::BinaryOpsEnd   &&
1456          "Invalid opcode in binary constant expression");
1457   assert(C1->getType() == C2->getType() &&
1458          "Operand types in binary constant expression should match");
1459
1460   if (ReqTy == C1->getType() || (Instruction::isComparison(Opcode) &&
1461                                  ReqTy == Type::BoolTy))
1462     if (Constant *FC = ConstantFoldBinaryInstruction(Opcode, C1, C2))
1463       return FC;          // Fold a few common cases...
1464
1465   std::vector<Constant*> argVec(1, C1); argVec.push_back(C2);
1466   ExprMapKeyType Key = std::make_pair(Opcode, argVec);
1467   return ExprConstants->getOrCreate(ReqTy, Key);
1468 }
1469
1470 Constant *ConstantExpr::get(unsigned Opcode, Constant *C1, Constant *C2) {
1471 #ifndef NDEBUG
1472   switch (Opcode) {
1473   case Instruction::Add: 
1474   case Instruction::Sub:
1475   case Instruction::Mul: 
1476     assert(C1->getType() == C2->getType() && "Op types should be identical!");
1477     assert((C1->getType()->isInteger() || C1->getType()->isFloatingPoint() ||
1478             isa<PackedType>(C1->getType())) &&
1479            "Tried to create an arithmetic operation on a non-arithmetic type!");
1480     break;
1481   case Instruction::UDiv: 
1482   case Instruction::SDiv: 
1483     assert(C1->getType() == C2->getType() && "Op types should be identical!");
1484     assert((C1->getType()->isInteger() || (isa<PackedType>(C1->getType()) &&
1485       cast<PackedType>(C1->getType())->getElementType()->isInteger())) &&
1486            "Tried to create an arithmetic operation on a non-arithmetic type!");
1487     break;
1488   case Instruction::FDiv:
1489     assert(C1->getType() == C2->getType() && "Op types should be identical!");
1490     assert((C1->getType()->isFloatingPoint() || (isa<PackedType>(C1->getType())
1491       && cast<PackedType>(C1->getType())->getElementType()->isFloatingPoint())) 
1492       && "Tried to create an arithmetic operation on a non-arithmetic type!");
1493     break;
1494   case Instruction::URem: 
1495   case Instruction::SRem: 
1496     assert(C1->getType() == C2->getType() && "Op types should be identical!");
1497     assert((C1->getType()->isInteger() || (isa<PackedType>(C1->getType()) &&
1498       cast<PackedType>(C1->getType())->getElementType()->isInteger())) &&
1499            "Tried to create an arithmetic operation on a non-arithmetic type!");
1500     break;
1501   case Instruction::FRem:
1502     assert(C1->getType() == C2->getType() && "Op types should be identical!");
1503     assert((C1->getType()->isFloatingPoint() || (isa<PackedType>(C1->getType())
1504       && cast<PackedType>(C1->getType())->getElementType()->isFloatingPoint())) 
1505       && "Tried to create an arithmetic operation on a non-arithmetic type!");
1506     break;
1507   case Instruction::And:
1508   case Instruction::Or:
1509   case Instruction::Xor:
1510     assert(C1->getType() == C2->getType() && "Op types should be identical!");
1511     assert((C1->getType()->isIntegral() || isa<PackedType>(C1->getType())) &&
1512            "Tried to create a logical operation on a non-integral type!");
1513     break;
1514   case Instruction::SetLT: case Instruction::SetGT: case Instruction::SetLE:
1515   case Instruction::SetGE: case Instruction::SetEQ: case Instruction::SetNE:
1516     assert(C1->getType() == C2->getType() && "Op types should be identical!");
1517     break;
1518   case Instruction::Shl:
1519   case Instruction::LShr:
1520   case Instruction::AShr:
1521     assert(C2->getType() == Type::UByteTy && "Shift should be by ubyte!");
1522     assert(C1->getType()->isInteger() &&
1523            "Tried to create a shift operation on a non-integer type!");
1524     break;
1525   default:
1526     break;
1527   }
1528 #endif
1529
1530   if (Instruction::isComparison(Opcode))
1531     return getTy(Type::BoolTy, Opcode, C1, C2);
1532   else
1533     return getTy(C1->getType(), Opcode, C1, C2);
1534 }
1535
1536 Constant *ConstantExpr::getSelectTy(const Type *ReqTy, Constant *C,
1537                                     Constant *V1, Constant *V2) {
1538   assert(C->getType() == Type::BoolTy && "Select condition must be bool!");
1539   assert(V1->getType() == V2->getType() && "Select value types must match!");
1540   assert(V1->getType()->isFirstClassType() && "Cannot select aggregate type!");
1541
1542   if (ReqTy == V1->getType())
1543     if (Constant *SC = ConstantFoldSelectInstruction(C, V1, V2))
1544       return SC;        // Fold common cases
1545
1546   std::vector<Constant*> argVec(3, C);
1547   argVec[1] = V1;
1548   argVec[2] = V2;
1549   ExprMapKeyType Key = std::make_pair(Instruction::Select, argVec);
1550   return ExprConstants->getOrCreate(ReqTy, Key);
1551 }
1552
1553 /// getShiftTy - Return a shift left or shift right constant expr
1554 Constant *ConstantExpr::getShiftTy(const Type *ReqTy, unsigned Opcode,
1555                                    Constant *C1, Constant *C2) {
1556   // Check the operands for consistency first
1557   assert((Opcode == Instruction::Shl   ||
1558           Opcode == Instruction::LShr  ||
1559           Opcode == Instruction::AShr) &&
1560          "Invalid opcode in binary constant expression");
1561   assert(C1->getType()->isIntegral() && C2->getType() == Type::UByteTy &&
1562          "Invalid operand types for Shift constant expr!");
1563
1564   if (Constant *FC = ConstantFoldBinaryInstruction(Opcode, C1, C2))
1565     return FC;          // Fold a few common cases...
1566
1567   // Look up the constant in the table first to ensure uniqueness
1568   std::vector<Constant*> argVec(1, C1); argVec.push_back(C2);
1569   ExprMapKeyType Key = std::make_pair(Opcode, argVec);
1570   return ExprConstants->getOrCreate(ReqTy, Key);
1571 }
1572
1573
1574 Constant *ConstantExpr::getGetElementPtrTy(const Type *ReqTy, Constant *C,
1575                                            const std::vector<Value*> &IdxList) {
1576   assert(GetElementPtrInst::getIndexedType(C->getType(), IdxList, true) &&
1577          "GEP indices invalid!");
1578
1579   if (Constant *FC = ConstantFoldGetElementPtr(C, IdxList))
1580     return FC;          // Fold a few common cases...
1581
1582   assert(isa<PointerType>(C->getType()) &&
1583          "Non-pointer type for constant GetElementPtr expression");
1584   // Look up the constant in the table first to ensure uniqueness
1585   std::vector<Constant*> ArgVec;
1586   ArgVec.reserve(IdxList.size()+1);
1587   ArgVec.push_back(C);
1588   for (unsigned i = 0, e = IdxList.size(); i != e; ++i)
1589     ArgVec.push_back(cast<Constant>(IdxList[i]));
1590   const ExprMapKeyType &Key = std::make_pair(Instruction::GetElementPtr,ArgVec);
1591   return ExprConstants->getOrCreate(ReqTy, Key);
1592 }
1593
1594 Constant *ConstantExpr::getGetElementPtr(Constant *C,
1595                                          const std::vector<Constant*> &IdxList){
1596   // Get the result type of the getelementptr!
1597   std::vector<Value*> VIdxList(IdxList.begin(), IdxList.end());
1598
1599   const Type *Ty = GetElementPtrInst::getIndexedType(C->getType(), VIdxList,
1600                                                      true);
1601   assert(Ty && "GEP indices invalid!");
1602   return getGetElementPtrTy(PointerType::get(Ty), C, VIdxList);
1603 }
1604
1605 Constant *ConstantExpr::getGetElementPtr(Constant *C,
1606                                          const std::vector<Value*> &IdxList) {
1607   // Get the result type of the getelementptr!
1608   const Type *Ty = GetElementPtrInst::getIndexedType(C->getType(), IdxList,
1609                                                      true);
1610   assert(Ty && "GEP indices invalid!");
1611   return getGetElementPtrTy(PointerType::get(Ty), C, IdxList);
1612 }
1613
1614 Constant *ConstantExpr::getExtractElementTy(const Type *ReqTy, Constant *Val,
1615                                             Constant *Idx) {
1616   if (Constant *FC = ConstantFoldExtractElementInstruction(Val, Idx))
1617     return FC;          // Fold a few common cases...
1618   // Look up the constant in the table first to ensure uniqueness
1619   std::vector<Constant*> ArgVec(1, Val);
1620   ArgVec.push_back(Idx);
1621   const ExprMapKeyType &Key = std::make_pair(Instruction::ExtractElement,ArgVec);
1622   return ExprConstants->getOrCreate(ReqTy, Key);
1623 }
1624
1625 Constant *ConstantExpr::getExtractElement(Constant *Val, Constant *Idx) {
1626   assert(isa<PackedType>(Val->getType()) &&
1627          "Tried to create extractelement operation on non-packed type!");
1628   assert(Idx->getType() == Type::UIntTy &&
1629          "Extractelement index must be uint type!");
1630   return getExtractElementTy(cast<PackedType>(Val->getType())->getElementType(),
1631                              Val, Idx);
1632 }
1633
1634 Constant *ConstantExpr::getInsertElementTy(const Type *ReqTy, Constant *Val,
1635                                            Constant *Elt, Constant *Idx) {
1636   if (Constant *FC = ConstantFoldInsertElementInstruction(Val, Elt, Idx))
1637     return FC;          // Fold a few common cases...
1638   // Look up the constant in the table first to ensure uniqueness
1639   std::vector<Constant*> ArgVec(1, Val);
1640   ArgVec.push_back(Elt);
1641   ArgVec.push_back(Idx);
1642   const ExprMapKeyType &Key = std::make_pair(Instruction::InsertElement,ArgVec);
1643   return ExprConstants->getOrCreate(ReqTy, Key);
1644 }
1645
1646 Constant *ConstantExpr::getInsertElement(Constant *Val, Constant *Elt, 
1647                                          Constant *Idx) {
1648   assert(isa<PackedType>(Val->getType()) &&
1649          "Tried to create insertelement operation on non-packed type!");
1650   assert(Elt->getType() == cast<PackedType>(Val->getType())->getElementType()
1651          && "Insertelement types must match!");
1652   assert(Idx->getType() == Type::UIntTy &&
1653          "Insertelement index must be uint type!");
1654   return getInsertElementTy(cast<PackedType>(Val->getType())->getElementType(),
1655                             Val, Elt, Idx);
1656 }
1657
1658 Constant *ConstantExpr::getShuffleVectorTy(const Type *ReqTy, Constant *V1,
1659                                            Constant *V2, Constant *Mask) {
1660   if (Constant *FC = ConstantFoldShuffleVectorInstruction(V1, V2, Mask))
1661     return FC;          // Fold a few common cases...
1662   // Look up the constant in the table first to ensure uniqueness
1663   std::vector<Constant*> ArgVec(1, V1);
1664   ArgVec.push_back(V2);
1665   ArgVec.push_back(Mask);
1666   const ExprMapKeyType &Key = std::make_pair(Instruction::ShuffleVector,ArgVec);
1667   return ExprConstants->getOrCreate(ReqTy, Key);
1668 }
1669
1670 Constant *ConstantExpr::getShuffleVector(Constant *V1, Constant *V2, 
1671                                          Constant *Mask) {
1672   assert(ShuffleVectorInst::isValidOperands(V1, V2, Mask) &&
1673          "Invalid shuffle vector constant expr operands!");
1674   return getShuffleVectorTy(V1->getType(), V1, V2, Mask);
1675 }
1676
1677
1678 // destroyConstant - Remove the constant from the constant table...
1679 //
1680 void ConstantExpr::destroyConstant() {
1681   ExprConstants->remove(this);
1682   destroyConstantImpl();
1683 }
1684
1685 const char *ConstantExpr::getOpcodeName() const {
1686   return Instruction::getOpcodeName(getOpcode());
1687 }
1688
1689 //===----------------------------------------------------------------------===//
1690 //                replaceUsesOfWithOnConstant implementations
1691
1692 void ConstantArray::replaceUsesOfWithOnConstant(Value *From, Value *To,
1693                                                 Use *U) {
1694   assert(isa<Constant>(To) && "Cannot make Constant refer to non-constant!");
1695   Constant *ToC = cast<Constant>(To);
1696
1697   unsigned OperandToUpdate = U-OperandList;
1698   assert(getOperand(OperandToUpdate) == From && "ReplaceAllUsesWith broken!");
1699
1700   std::pair<ArrayConstantsTy::MapKey, Constant*> Lookup;
1701   Lookup.first.first = getType();
1702   Lookup.second = this;
1703
1704   std::vector<Constant*> &Values = Lookup.first.second;
1705   Values.reserve(getNumOperands());  // Build replacement array.
1706
1707   // Fill values with the modified operands of the constant array.  Also, 
1708   // compute whether this turns into an all-zeros array.
1709   bool isAllZeros = false;
1710   if (!ToC->isNullValue()) {
1711     for (Use *O = OperandList, *E = OperandList+getNumOperands(); O != E; ++O)
1712       Values.push_back(cast<Constant>(O->get()));
1713   } else {
1714     isAllZeros = true;
1715     for (Use *O = OperandList, *E = OperandList+getNumOperands(); O != E; ++O) {
1716       Constant *Val = cast<Constant>(O->get());
1717       Values.push_back(Val);
1718       if (isAllZeros) isAllZeros = Val->isNullValue();
1719     }
1720   }
1721   Values[OperandToUpdate] = ToC;
1722   
1723   Constant *Replacement = 0;
1724   if (isAllZeros) {
1725     Replacement = ConstantAggregateZero::get(getType());
1726   } else {
1727     // Check to see if we have this array type already.
1728     bool Exists;
1729     ArrayConstantsTy::MapTy::iterator I =
1730       ArrayConstants->InsertOrGetItem(Lookup, Exists);
1731     
1732     if (Exists) {
1733       Replacement = I->second;
1734     } else {
1735       // Okay, the new shape doesn't exist in the system yet.  Instead of
1736       // creating a new constant array, inserting it, replaceallusesof'ing the
1737       // old with the new, then deleting the old... just update the current one
1738       // in place!
1739       ArrayConstants->MoveConstantToNewSlot(this, I);
1740       
1741       // Update to the new value.
1742       setOperand(OperandToUpdate, ToC);
1743       return;
1744     }
1745   }
1746  
1747   // Otherwise, I do need to replace this with an existing value.
1748   assert(Replacement != this && "I didn't contain From!");
1749   
1750   // Everyone using this now uses the replacement.
1751   uncheckedReplaceAllUsesWith(Replacement);
1752   
1753   // Delete the old constant!
1754   destroyConstant();
1755 }
1756
1757 void ConstantStruct::replaceUsesOfWithOnConstant(Value *From, Value *To,
1758                                                  Use *U) {
1759   assert(isa<Constant>(To) && "Cannot make Constant refer to non-constant!");
1760   Constant *ToC = cast<Constant>(To);
1761
1762   unsigned OperandToUpdate = U-OperandList;
1763   assert(getOperand(OperandToUpdate) == From && "ReplaceAllUsesWith broken!");
1764
1765   std::pair<StructConstantsTy::MapKey, Constant*> Lookup;
1766   Lookup.first.first = getType();
1767   Lookup.second = this;
1768   std::vector<Constant*> &Values = Lookup.first.second;
1769   Values.reserve(getNumOperands());  // Build replacement struct.
1770   
1771   
1772   // Fill values with the modified operands of the constant struct.  Also, 
1773   // compute whether this turns into an all-zeros struct.
1774   bool isAllZeros = false;
1775   if (!ToC->isNullValue()) {
1776     for (Use *O = OperandList, *E = OperandList+getNumOperands(); O != E; ++O)
1777       Values.push_back(cast<Constant>(O->get()));
1778   } else {
1779     isAllZeros = true;
1780     for (Use *O = OperandList, *E = OperandList+getNumOperands(); O != E; ++O) {
1781       Constant *Val = cast<Constant>(O->get());
1782       Values.push_back(Val);
1783       if (isAllZeros) isAllZeros = Val->isNullValue();
1784     }
1785   }
1786   Values[OperandToUpdate] = ToC;
1787   
1788   Constant *Replacement = 0;
1789   if (isAllZeros) {
1790     Replacement = ConstantAggregateZero::get(getType());
1791   } else {
1792     // Check to see if we have this array type already.
1793     bool Exists;
1794     StructConstantsTy::MapTy::iterator I =
1795       StructConstants->InsertOrGetItem(Lookup, Exists);
1796     
1797     if (Exists) {
1798       Replacement = I->second;
1799     } else {
1800       // Okay, the new shape doesn't exist in the system yet.  Instead of
1801       // creating a new constant struct, inserting it, replaceallusesof'ing the
1802       // old with the new, then deleting the old... just update the current one
1803       // in place!
1804       StructConstants->MoveConstantToNewSlot(this, I);
1805       
1806       // Update to the new value.
1807       setOperand(OperandToUpdate, ToC);
1808       return;
1809     }
1810   }
1811   
1812   assert(Replacement != this && "I didn't contain From!");
1813   
1814   // Everyone using this now uses the replacement.
1815   uncheckedReplaceAllUsesWith(Replacement);
1816   
1817   // Delete the old constant!
1818   destroyConstant();
1819 }
1820
1821 void ConstantPacked::replaceUsesOfWithOnConstant(Value *From, Value *To,
1822                                                  Use *U) {
1823   assert(isa<Constant>(To) && "Cannot make Constant refer to non-constant!");
1824   
1825   std::vector<Constant*> Values;
1826   Values.reserve(getNumOperands());  // Build replacement array...
1827   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
1828     Constant *Val = getOperand(i);
1829     if (Val == From) Val = cast<Constant>(To);
1830     Values.push_back(Val);
1831   }
1832   
1833   Constant *Replacement = ConstantPacked::get(getType(), Values);
1834   assert(Replacement != this && "I didn't contain From!");
1835   
1836   // Everyone using this now uses the replacement.
1837   uncheckedReplaceAllUsesWith(Replacement);
1838   
1839   // Delete the old constant!
1840   destroyConstant();
1841 }
1842
1843 void ConstantExpr::replaceUsesOfWithOnConstant(Value *From, Value *ToV,
1844                                                Use *U) {
1845   assert(isa<Constant>(ToV) && "Cannot make Constant refer to non-constant!");
1846   Constant *To = cast<Constant>(ToV);
1847   
1848   Constant *Replacement = 0;
1849   if (getOpcode() == Instruction::GetElementPtr) {
1850     std::vector<Constant*> Indices;
1851     Constant *Pointer = getOperand(0);
1852     Indices.reserve(getNumOperands()-1);
1853     if (Pointer == From) Pointer = To;
1854     
1855     for (unsigned i = 1, e = getNumOperands(); i != e; ++i) {
1856       Constant *Val = getOperand(i);
1857       if (Val == From) Val = To;
1858       Indices.push_back(Val);
1859     }
1860     Replacement = ConstantExpr::getGetElementPtr(Pointer, Indices);
1861   } else if (getOpcode() == Instruction::Cast) {
1862     assert(getOperand(0) == From && "Cast only has one use!");
1863     Replacement = ConstantExpr::getCast(To, getType());
1864   } else if (getOpcode() == Instruction::Select) {
1865     Constant *C1 = getOperand(0);
1866     Constant *C2 = getOperand(1);
1867     Constant *C3 = getOperand(2);
1868     if (C1 == From) C1 = To;
1869     if (C2 == From) C2 = To;
1870     if (C3 == From) C3 = To;
1871     Replacement = ConstantExpr::getSelect(C1, C2, C3);
1872   } else if (getOpcode() == Instruction::ExtractElement) {
1873     Constant *C1 = getOperand(0);
1874     Constant *C2 = getOperand(1);
1875     if (C1 == From) C1 = To;
1876     if (C2 == From) C2 = To;
1877     Replacement = ConstantExpr::getExtractElement(C1, C2);
1878   } else if (getOpcode() == Instruction::InsertElement) {
1879     Constant *C1 = getOperand(0);
1880     Constant *C2 = getOperand(1);
1881     Constant *C3 = getOperand(1);
1882     if (C1 == From) C1 = To;
1883     if (C2 == From) C2 = To;
1884     if (C3 == From) C3 = To;
1885     Replacement = ConstantExpr::getInsertElement(C1, C2, C3);
1886   } else if (getOpcode() == Instruction::ShuffleVector) {
1887     Constant *C1 = getOperand(0);
1888     Constant *C2 = getOperand(1);
1889     Constant *C3 = getOperand(2);
1890     if (C1 == From) C1 = To;
1891     if (C2 == From) C2 = To;
1892     if (C3 == From) C3 = To;
1893     Replacement = ConstantExpr::getShuffleVector(C1, C2, C3);
1894   } else if (getNumOperands() == 2) {
1895     Constant *C1 = getOperand(0);
1896     Constant *C2 = getOperand(1);
1897     if (C1 == From) C1 = To;
1898     if (C2 == From) C2 = To;
1899     Replacement = ConstantExpr::get(getOpcode(), C1, C2);
1900   } else {
1901     assert(0 && "Unknown ConstantExpr type!");
1902     return;
1903   }
1904   
1905   assert(Replacement != this && "I didn't contain From!");
1906   
1907   // Everyone using this now uses the replacement.
1908   uncheckedReplaceAllUsesWith(Replacement);
1909   
1910   // Delete the old constant!
1911   destroyConstant();
1912 }
1913
1914
1915 /// getStringValue - Turn an LLVM constant pointer that eventually points to a
1916 /// global into a string value.  Return an empty string if we can't do it.
1917 /// Parameter Chop determines if the result is chopped at the first null
1918 /// terminator.
1919 ///
1920 std::string Constant::getStringValue(bool Chop, unsigned Offset) {
1921   if (GlobalVariable *GV = dyn_cast<GlobalVariable>(this)) {
1922     if (GV->hasInitializer() && isa<ConstantArray>(GV->getInitializer())) {
1923       ConstantArray *Init = cast<ConstantArray>(GV->getInitializer());
1924       if (Init->isString()) {
1925         std::string Result = Init->getAsString();
1926         if (Offset < Result.size()) {
1927           // If we are pointing INTO The string, erase the beginning...
1928           Result.erase(Result.begin(), Result.begin()+Offset);
1929
1930           // Take off the null terminator, and any string fragments after it.
1931           if (Chop) {
1932             std::string::size_type NullPos = Result.find_first_of((char)0);
1933             if (NullPos != std::string::npos)
1934               Result.erase(Result.begin()+NullPos, Result.end());
1935           }
1936           return Result;
1937         }
1938       }
1939     }
1940   } else if (Constant *C = dyn_cast<Constant>(this)) {
1941     if (GlobalValue *GV = dyn_cast<GlobalValue>(C))
1942       return GV->getStringValue(Chop, Offset);
1943     else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) {
1944       if (CE->getOpcode() == Instruction::GetElementPtr) {
1945         // Turn a gep into the specified offset.
1946         if (CE->getNumOperands() == 3 &&
1947             cast<Constant>(CE->getOperand(1))->isNullValue() &&
1948             isa<ConstantInt>(CE->getOperand(2))) {
1949           Offset += cast<ConstantInt>(CE->getOperand(2))->getZExtValue();
1950           return CE->getOperand(0)->getStringValue(Chop, Offset);
1951         }
1952       }
1953     }
1954   }
1955   return "";
1956 }
1957