[IR] Add support for empty tokens
[oota-llvm.git] / lib / IR / Constants.cpp
1 //===-- Constants.cpp - Implement Constant nodes --------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements the Constant* classes.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #include "llvm/IR/Constants.h"
15 #include "ConstantFold.h"
16 #include "LLVMContextImpl.h"
17 #include "llvm/ADT/DenseMap.h"
18 #include "llvm/ADT/FoldingSet.h"
19 #include "llvm/ADT/STLExtras.h"
20 #include "llvm/ADT/SmallVector.h"
21 #include "llvm/ADT/StringExtras.h"
22 #include "llvm/ADT/StringMap.h"
23 #include "llvm/IR/DerivedTypes.h"
24 #include "llvm/IR/GetElementPtrTypeIterator.h"
25 #include "llvm/IR/GlobalValue.h"
26 #include "llvm/IR/Instructions.h"
27 #include "llvm/IR/Module.h"
28 #include "llvm/IR/Operator.h"
29 #include "llvm/Support/Compiler.h"
30 #include "llvm/Support/Debug.h"
31 #include "llvm/Support/ErrorHandling.h"
32 #include "llvm/Support/ManagedStatic.h"
33 #include "llvm/Support/MathExtras.h"
34 #include "llvm/Support/raw_ostream.h"
35 #include <algorithm>
36 #include <cstdarg>
37 using namespace llvm;
38
39 //===----------------------------------------------------------------------===//
40 //                              Constant Class
41 //===----------------------------------------------------------------------===//
42
43 void Constant::anchor() { }
44
45 bool Constant::isNegativeZeroValue() const {
46   // Floating point values have an explicit -0.0 value.
47   if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this))
48     return CFP->isZero() && CFP->isNegative();
49
50   // Equivalent for a vector of -0.0's.
51   if (const ConstantDataVector *CV = dyn_cast<ConstantDataVector>(this))
52     if (ConstantFP *SplatCFP = dyn_cast_or_null<ConstantFP>(CV->getSplatValue()))
53       if (SplatCFP && SplatCFP->isZero() && SplatCFP->isNegative())
54         return true;
55
56   // We've already handled true FP case; any other FP vectors can't represent -0.0.
57   if (getType()->isFPOrFPVectorTy())
58     return false;
59
60   // Otherwise, just use +0.0.
61   return isNullValue();
62 }
63
64 // Return true iff this constant is positive zero (floating point), negative
65 // zero (floating point), or a null value.
66 bool Constant::isZeroValue() const {
67   // Floating point values have an explicit -0.0 value.
68   if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this))
69     return CFP->isZero();
70
71   // Otherwise, just use +0.0.
72   return isNullValue();
73 }
74
75 bool Constant::isNullValue() const {
76   // 0 is null.
77   if (const ConstantInt *CI = dyn_cast<ConstantInt>(this))
78     return CI->isZero();
79
80   // +0.0 is null.
81   if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this))
82     return CFP->isZero() && !CFP->isNegative();
83
84   // constant zero is zero for aggregates, cpnull is null for pointers, none for
85   // tokens.
86   return isa<ConstantAggregateZero>(this) || isa<ConstantPointerNull>(this) ||
87          isa<ConstantTokenNone>(this);
88 }
89
90 bool Constant::isAllOnesValue() const {
91   // Check for -1 integers
92   if (const ConstantInt *CI = dyn_cast<ConstantInt>(this))
93     return CI->isMinusOne();
94
95   // Check for FP which are bitcasted from -1 integers
96   if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this))
97     return CFP->getValueAPF().bitcastToAPInt().isAllOnesValue();
98
99   // Check for constant vectors which are splats of -1 values.
100   if (const ConstantVector *CV = dyn_cast<ConstantVector>(this))
101     if (Constant *Splat = CV->getSplatValue())
102       return Splat->isAllOnesValue();
103
104   // Check for constant vectors which are splats of -1 values.
105   if (const ConstantDataVector *CV = dyn_cast<ConstantDataVector>(this))
106     if (Constant *Splat = CV->getSplatValue())
107       return Splat->isAllOnesValue();
108
109   return false;
110 }
111
112 bool Constant::isOneValue() const {
113   // Check for 1 integers
114   if (const ConstantInt *CI = dyn_cast<ConstantInt>(this))
115     return CI->isOne();
116
117   // Check for FP which are bitcasted from 1 integers
118   if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this))
119     return CFP->getValueAPF().bitcastToAPInt() == 1;
120
121   // Check for constant vectors which are splats of 1 values.
122   if (const ConstantVector *CV = dyn_cast<ConstantVector>(this))
123     if (Constant *Splat = CV->getSplatValue())
124       return Splat->isOneValue();
125
126   // Check for constant vectors which are splats of 1 values.
127   if (const ConstantDataVector *CV = dyn_cast<ConstantDataVector>(this))
128     if (Constant *Splat = CV->getSplatValue())
129       return Splat->isOneValue();
130
131   return false;
132 }
133
134 bool Constant::isMinSignedValue() const {
135   // Check for INT_MIN integers
136   if (const ConstantInt *CI = dyn_cast<ConstantInt>(this))
137     return CI->isMinValue(/*isSigned=*/true);
138
139   // Check for FP which are bitcasted from INT_MIN integers
140   if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this))
141     return CFP->getValueAPF().bitcastToAPInt().isMinSignedValue();
142
143   // Check for constant vectors which are splats of INT_MIN values.
144   if (const ConstantVector *CV = dyn_cast<ConstantVector>(this))
145     if (Constant *Splat = CV->getSplatValue())
146       return Splat->isMinSignedValue();
147
148   // Check for constant vectors which are splats of INT_MIN values.
149   if (const ConstantDataVector *CV = dyn_cast<ConstantDataVector>(this))
150     if (Constant *Splat = CV->getSplatValue())
151       return Splat->isMinSignedValue();
152
153   return false;
154 }
155
156 bool Constant::isNotMinSignedValue() const {
157   // Check for INT_MIN integers
158   if (const ConstantInt *CI = dyn_cast<ConstantInt>(this))
159     return !CI->isMinValue(/*isSigned=*/true);
160
161   // Check for FP which are bitcasted from INT_MIN integers
162   if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this))
163     return !CFP->getValueAPF().bitcastToAPInt().isMinSignedValue();
164
165   // Check for constant vectors which are splats of INT_MIN values.
166   if (const ConstantVector *CV = dyn_cast<ConstantVector>(this))
167     if (Constant *Splat = CV->getSplatValue())
168       return Splat->isNotMinSignedValue();
169
170   // Check for constant vectors which are splats of INT_MIN values.
171   if (const ConstantDataVector *CV = dyn_cast<ConstantDataVector>(this))
172     if (Constant *Splat = CV->getSplatValue())
173       return Splat->isNotMinSignedValue();
174
175   // It *may* contain INT_MIN, we can't tell.
176   return false;
177 }
178
179 // Constructor to create a '0' constant of arbitrary type...
180 Constant *Constant::getNullValue(Type *Ty) {
181   switch (Ty->getTypeID()) {
182   case Type::IntegerTyID:
183     return ConstantInt::get(Ty, 0);
184   case Type::HalfTyID:
185     return ConstantFP::get(Ty->getContext(),
186                            APFloat::getZero(APFloat::IEEEhalf));
187   case Type::FloatTyID:
188     return ConstantFP::get(Ty->getContext(),
189                            APFloat::getZero(APFloat::IEEEsingle));
190   case Type::DoubleTyID:
191     return ConstantFP::get(Ty->getContext(),
192                            APFloat::getZero(APFloat::IEEEdouble));
193   case Type::X86_FP80TyID:
194     return ConstantFP::get(Ty->getContext(),
195                            APFloat::getZero(APFloat::x87DoubleExtended));
196   case Type::FP128TyID:
197     return ConstantFP::get(Ty->getContext(),
198                            APFloat::getZero(APFloat::IEEEquad));
199   case Type::PPC_FP128TyID:
200     return ConstantFP::get(Ty->getContext(),
201                            APFloat(APFloat::PPCDoubleDouble,
202                                    APInt::getNullValue(128)));
203   case Type::PointerTyID:
204     return ConstantPointerNull::get(cast<PointerType>(Ty));
205   case Type::StructTyID:
206   case Type::ArrayTyID:
207   case Type::VectorTyID:
208     return ConstantAggregateZero::get(Ty);
209   case Type::TokenTyID:
210     return ConstantTokenNone::get(Ty->getContext());
211   default:
212     // Function, Label, or Opaque type?
213     llvm_unreachable("Cannot create a null constant of that type!");
214   }
215 }
216
217 Constant *Constant::getIntegerValue(Type *Ty, const APInt &V) {
218   Type *ScalarTy = Ty->getScalarType();
219
220   // Create the base integer constant.
221   Constant *C = ConstantInt::get(Ty->getContext(), V);
222
223   // Convert an integer to a pointer, if necessary.
224   if (PointerType *PTy = dyn_cast<PointerType>(ScalarTy))
225     C = ConstantExpr::getIntToPtr(C, PTy);
226
227   // Broadcast a scalar to a vector, if necessary.
228   if (VectorType *VTy = dyn_cast<VectorType>(Ty))
229     C = ConstantVector::getSplat(VTy->getNumElements(), C);
230
231   return C;
232 }
233
234 Constant *Constant::getAllOnesValue(Type *Ty) {
235   if (IntegerType *ITy = dyn_cast<IntegerType>(Ty))
236     return ConstantInt::get(Ty->getContext(),
237                             APInt::getAllOnesValue(ITy->getBitWidth()));
238
239   if (Ty->isFloatingPointTy()) {
240     APFloat FL = APFloat::getAllOnesValue(Ty->getPrimitiveSizeInBits(),
241                                           !Ty->isPPC_FP128Ty());
242     return ConstantFP::get(Ty->getContext(), FL);
243   }
244
245   VectorType *VTy = cast<VectorType>(Ty);
246   return ConstantVector::getSplat(VTy->getNumElements(),
247                                   getAllOnesValue(VTy->getElementType()));
248 }
249
250 /// getAggregateElement - For aggregates (struct/array/vector) return the
251 /// constant that corresponds to the specified element if possible, or null if
252 /// not.  This can return null if the element index is a ConstantExpr, or if
253 /// 'this' is a constant expr.
254 Constant *Constant::getAggregateElement(unsigned Elt) const {
255   if (const ConstantStruct *CS = dyn_cast<ConstantStruct>(this))
256     return Elt < CS->getNumOperands() ? CS->getOperand(Elt) : nullptr;
257
258   if (const ConstantArray *CA = dyn_cast<ConstantArray>(this))
259     return Elt < CA->getNumOperands() ? CA->getOperand(Elt) : nullptr;
260
261   if (const ConstantVector *CV = dyn_cast<ConstantVector>(this))
262     return Elt < CV->getNumOperands() ? CV->getOperand(Elt) : nullptr;
263
264   if (const ConstantAggregateZero *CAZ = dyn_cast<ConstantAggregateZero>(this))
265     return Elt < CAZ->getNumElements() ? CAZ->getElementValue(Elt) : nullptr;
266
267   if (const UndefValue *UV = dyn_cast<UndefValue>(this))
268     return Elt < UV->getNumElements() ? UV->getElementValue(Elt) : nullptr;
269
270   if (const ConstantDataSequential *CDS =dyn_cast<ConstantDataSequential>(this))
271     return Elt < CDS->getNumElements() ? CDS->getElementAsConstant(Elt)
272                                        : nullptr;
273   return nullptr;
274 }
275
276 Constant *Constant::getAggregateElement(Constant *Elt) const {
277   assert(isa<IntegerType>(Elt->getType()) && "Index must be an integer");
278   if (ConstantInt *CI = dyn_cast<ConstantInt>(Elt))
279     return getAggregateElement(CI->getZExtValue());
280   return nullptr;
281 }
282
283 void Constant::destroyConstant() {
284   /// First call destroyConstantImpl on the subclass.  This gives the subclass
285   /// a chance to remove the constant from any maps/pools it's contained in.
286   switch (getValueID()) {
287   default:
288     llvm_unreachable("Not a constant!");
289 #define HANDLE_CONSTANT(Name)                                                  \
290   case Value::Name##Val:                                                       \
291     cast<Name>(this)->destroyConstantImpl();                                   \
292     break;
293 #include "llvm/IR/Value.def"
294   }
295
296   // When a Constant is destroyed, there may be lingering
297   // references to the constant by other constants in the constant pool.  These
298   // constants are implicitly dependent on the module that is being deleted,
299   // but they don't know that.  Because we only find out when the CPV is
300   // deleted, we must now notify all of our users (that should only be
301   // Constants) that they are, in fact, invalid now and should be deleted.
302   //
303   while (!use_empty()) {
304     Value *V = user_back();
305 #ifndef NDEBUG // Only in -g mode...
306     if (!isa<Constant>(V)) {
307       dbgs() << "While deleting: " << *this
308              << "\n\nUse still stuck around after Def is destroyed: " << *V
309              << "\n\n";
310     }
311 #endif
312     assert(isa<Constant>(V) && "References remain to Constant being destroyed");
313     cast<Constant>(V)->destroyConstant();
314
315     // The constant should remove itself from our use list...
316     assert((use_empty() || user_back() != V) && "Constant not removed!");
317   }
318
319   // Value has no outstanding references it is safe to delete it now...
320   delete this;
321 }
322
323 static bool canTrapImpl(const Constant *C,
324                         SmallPtrSetImpl<const ConstantExpr *> &NonTrappingOps) {
325   assert(C->getType()->isFirstClassType() && "Cannot evaluate aggregate vals!");
326   // The only thing that could possibly trap are constant exprs.
327   const ConstantExpr *CE = dyn_cast<ConstantExpr>(C);
328   if (!CE)
329     return false;
330
331   // ConstantExpr traps if any operands can trap.
332   for (unsigned i = 0, e = C->getNumOperands(); i != e; ++i) {
333     if (ConstantExpr *Op = dyn_cast<ConstantExpr>(CE->getOperand(i))) {
334       if (NonTrappingOps.insert(Op).second && canTrapImpl(Op, NonTrappingOps))
335         return true;
336     }
337   }
338
339   // Otherwise, only specific operations can trap.
340   switch (CE->getOpcode()) {
341   default:
342     return false;
343   case Instruction::UDiv:
344   case Instruction::SDiv:
345   case Instruction::FDiv:
346   case Instruction::URem:
347   case Instruction::SRem:
348   case Instruction::FRem:
349     // Div and rem can trap if the RHS is not known to be non-zero.
350     if (!isa<ConstantInt>(CE->getOperand(1)) ||CE->getOperand(1)->isNullValue())
351       return true;
352     return false;
353   }
354 }
355
356 /// canTrap - Return true if evaluation of this constant could trap.  This is
357 /// true for things like constant expressions that could divide by zero.
358 bool Constant::canTrap() const {
359   SmallPtrSet<const ConstantExpr *, 4> NonTrappingOps;
360   return canTrapImpl(this, NonTrappingOps);
361 }
362
363 /// Check if C contains a GlobalValue for which Predicate is true.
364 static bool
365 ConstHasGlobalValuePredicate(const Constant *C,
366                              bool (*Predicate)(const GlobalValue *)) {
367   SmallPtrSet<const Constant *, 8> Visited;
368   SmallVector<const Constant *, 8> WorkList;
369   WorkList.push_back(C);
370   Visited.insert(C);
371
372   while (!WorkList.empty()) {
373     const Constant *WorkItem = WorkList.pop_back_val();
374     if (const auto *GV = dyn_cast<GlobalValue>(WorkItem))
375       if (Predicate(GV))
376         return true;
377     for (const Value *Op : WorkItem->operands()) {
378       const Constant *ConstOp = dyn_cast<Constant>(Op);
379       if (!ConstOp)
380         continue;
381       if (Visited.insert(ConstOp).second)
382         WorkList.push_back(ConstOp);
383     }
384   }
385   return false;
386 }
387
388 /// Return true if the value can vary between threads.
389 bool Constant::isThreadDependent() const {
390   auto DLLImportPredicate = [](const GlobalValue *GV) {
391     return GV->isThreadLocal();
392   };
393   return ConstHasGlobalValuePredicate(this, DLLImportPredicate);
394 }
395
396 bool Constant::isDLLImportDependent() const {
397   auto DLLImportPredicate = [](const GlobalValue *GV) {
398     return GV->hasDLLImportStorageClass();
399   };
400   return ConstHasGlobalValuePredicate(this, DLLImportPredicate);
401 }
402
403 /// Return true if the constant has users other than constant exprs and other
404 /// dangling things.
405 bool Constant::isConstantUsed() const {
406   for (const User *U : users()) {
407     const Constant *UC = dyn_cast<Constant>(U);
408     if (!UC || isa<GlobalValue>(UC))
409       return true;
410
411     if (UC->isConstantUsed())
412       return true;
413   }
414   return false;
415 }
416
417
418
419 /// getRelocationInfo - This method classifies the entry according to
420 /// whether or not it may generate a relocation entry.  This must be
421 /// conservative, so if it might codegen to a relocatable entry, it should say
422 /// so.  The return values are:
423 /// 
424 ///  NoRelocation: This constant pool entry is guaranteed to never have a
425 ///     relocation applied to it (because it holds a simple constant like
426 ///     '4').
427 ///  LocalRelocation: This entry has relocations, but the entries are
428 ///     guaranteed to be resolvable by the static linker, so the dynamic
429 ///     linker will never see them.
430 ///  GlobalRelocations: This entry may have arbitrary relocations.
431 ///
432 /// FIXME: This really should not be in IR.
433 Constant::PossibleRelocationsTy Constant::getRelocationInfo() const {
434   if (const GlobalValue *GV = dyn_cast<GlobalValue>(this)) {
435     if (GV->hasLocalLinkage() || GV->hasHiddenVisibility())
436       return LocalRelocation;  // Local to this file/library.
437     return GlobalRelocations;    // Global reference.
438   }
439   
440   if (const BlockAddress *BA = dyn_cast<BlockAddress>(this))
441     return BA->getFunction()->getRelocationInfo();
442   
443   // While raw uses of blockaddress need to be relocated, differences between
444   // two of them don't when they are for labels in the same function.  This is a
445   // common idiom when creating a table for the indirect goto extension, so we
446   // handle it efficiently here.
447   if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(this))
448     if (CE->getOpcode() == Instruction::Sub) {
449       ConstantExpr *LHS = dyn_cast<ConstantExpr>(CE->getOperand(0));
450       ConstantExpr *RHS = dyn_cast<ConstantExpr>(CE->getOperand(1));
451       if (LHS && RHS &&
452           LHS->getOpcode() == Instruction::PtrToInt &&
453           RHS->getOpcode() == Instruction::PtrToInt &&
454           isa<BlockAddress>(LHS->getOperand(0)) &&
455           isa<BlockAddress>(RHS->getOperand(0)) &&
456           cast<BlockAddress>(LHS->getOperand(0))->getFunction() ==
457             cast<BlockAddress>(RHS->getOperand(0))->getFunction())
458         return NoRelocation;
459     }
460
461   PossibleRelocationsTy Result = NoRelocation;
462   for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
463     Result = std::max(Result,
464                       cast<Constant>(getOperand(i))->getRelocationInfo());
465
466   return Result;
467 }
468
469 /// removeDeadUsersOfConstant - If the specified constantexpr is dead, remove
470 /// it.  This involves recursively eliminating any dead users of the
471 /// constantexpr.
472 static bool removeDeadUsersOfConstant(const Constant *C) {
473   if (isa<GlobalValue>(C)) return false; // Cannot remove this
474
475   while (!C->use_empty()) {
476     const Constant *User = dyn_cast<Constant>(C->user_back());
477     if (!User) return false; // Non-constant usage;
478     if (!removeDeadUsersOfConstant(User))
479       return false; // Constant wasn't dead
480   }
481
482   const_cast<Constant*>(C)->destroyConstant();
483   return true;
484 }
485
486
487 /// removeDeadConstantUsers - If there are any dead constant users dangling
488 /// off of this constant, remove them.  This method is useful for clients
489 /// that want to check to see if a global is unused, but don't want to deal
490 /// with potentially dead constants hanging off of the globals.
491 void Constant::removeDeadConstantUsers() const {
492   Value::const_user_iterator I = user_begin(), E = user_end();
493   Value::const_user_iterator LastNonDeadUser = E;
494   while (I != E) {
495     const Constant *User = dyn_cast<Constant>(*I);
496     if (!User) {
497       LastNonDeadUser = I;
498       ++I;
499       continue;
500     }
501
502     if (!removeDeadUsersOfConstant(User)) {
503       // If the constant wasn't dead, remember that this was the last live use
504       // and move on to the next constant.
505       LastNonDeadUser = I;
506       ++I;
507       continue;
508     }
509
510     // If the constant was dead, then the iterator is invalidated.
511     if (LastNonDeadUser == E) {
512       I = user_begin();
513       if (I == E) break;
514     } else {
515       I = LastNonDeadUser;
516       ++I;
517     }
518   }
519 }
520
521
522
523 //===----------------------------------------------------------------------===//
524 //                                ConstantInt
525 //===----------------------------------------------------------------------===//
526
527 void ConstantInt::anchor() { }
528
529 ConstantInt::ConstantInt(IntegerType *Ty, const APInt& V)
530   : Constant(Ty, ConstantIntVal, nullptr, 0), Val(V) {
531   assert(V.getBitWidth() == Ty->getBitWidth() && "Invalid constant for type");
532 }
533
534 ConstantInt *ConstantInt::getTrue(LLVMContext &Context) {
535   LLVMContextImpl *pImpl = Context.pImpl;
536   if (!pImpl->TheTrueVal)
537     pImpl->TheTrueVal = ConstantInt::get(Type::getInt1Ty(Context), 1);
538   return pImpl->TheTrueVal;
539 }
540
541 ConstantInt *ConstantInt::getFalse(LLVMContext &Context) {
542   LLVMContextImpl *pImpl = Context.pImpl;
543   if (!pImpl->TheFalseVal)
544     pImpl->TheFalseVal = ConstantInt::get(Type::getInt1Ty(Context), 0);
545   return pImpl->TheFalseVal;
546 }
547
548 Constant *ConstantInt::getTrue(Type *Ty) {
549   VectorType *VTy = dyn_cast<VectorType>(Ty);
550   if (!VTy) {
551     assert(Ty->isIntegerTy(1) && "True must be i1 or vector of i1.");
552     return ConstantInt::getTrue(Ty->getContext());
553   }
554   assert(VTy->getElementType()->isIntegerTy(1) &&
555          "True must be vector of i1 or i1.");
556   return ConstantVector::getSplat(VTy->getNumElements(),
557                                   ConstantInt::getTrue(Ty->getContext()));
558 }
559
560 Constant *ConstantInt::getFalse(Type *Ty) {
561   VectorType *VTy = dyn_cast<VectorType>(Ty);
562   if (!VTy) {
563     assert(Ty->isIntegerTy(1) && "False must be i1 or vector of i1.");
564     return ConstantInt::getFalse(Ty->getContext());
565   }
566   assert(VTy->getElementType()->isIntegerTy(1) &&
567          "False must be vector of i1 or i1.");
568   return ConstantVector::getSplat(VTy->getNumElements(),
569                                   ConstantInt::getFalse(Ty->getContext()));
570 }
571
572 // Get a ConstantInt from an APInt.
573 ConstantInt *ConstantInt::get(LLVMContext &Context, const APInt &V) {
574   // get an existing value or the insertion position
575   LLVMContextImpl *pImpl = Context.pImpl;
576   ConstantInt *&Slot = pImpl->IntConstants[V];
577   if (!Slot) {
578     // Get the corresponding integer type for the bit width of the value.
579     IntegerType *ITy = IntegerType::get(Context, V.getBitWidth());
580     Slot = new ConstantInt(ITy, V);
581   }
582   assert(Slot->getType() == IntegerType::get(Context, V.getBitWidth()));
583   return Slot;
584 }
585
586 Constant *ConstantInt::get(Type *Ty, uint64_t V, bool isSigned) {
587   Constant *C = get(cast<IntegerType>(Ty->getScalarType()), V, isSigned);
588
589   // For vectors, broadcast the value.
590   if (VectorType *VTy = dyn_cast<VectorType>(Ty))
591     return ConstantVector::getSplat(VTy->getNumElements(), C);
592
593   return C;
594 }
595
596 ConstantInt *ConstantInt::get(IntegerType *Ty, uint64_t V, 
597                               bool isSigned) {
598   return get(Ty->getContext(), APInt(Ty->getBitWidth(), V, isSigned));
599 }
600
601 ConstantInt *ConstantInt::getSigned(IntegerType *Ty, int64_t V) {
602   return get(Ty, V, true);
603 }
604
605 Constant *ConstantInt::getSigned(Type *Ty, int64_t V) {
606   return get(Ty, V, true);
607 }
608
609 Constant *ConstantInt::get(Type *Ty, const APInt& V) {
610   ConstantInt *C = get(Ty->getContext(), V);
611   assert(C->getType() == Ty->getScalarType() &&
612          "ConstantInt type doesn't match the type implied by its value!");
613
614   // For vectors, broadcast the value.
615   if (VectorType *VTy = dyn_cast<VectorType>(Ty))
616     return ConstantVector::getSplat(VTy->getNumElements(), C);
617
618   return C;
619 }
620
621 ConstantInt *ConstantInt::get(IntegerType* Ty, StringRef Str,
622                               uint8_t radix) {
623   return get(Ty->getContext(), APInt(Ty->getBitWidth(), Str, radix));
624 }
625
626 /// Remove the constant from the constant table.
627 void ConstantInt::destroyConstantImpl() {
628   llvm_unreachable("You can't ConstantInt->destroyConstantImpl()!");
629 }
630
631 //===----------------------------------------------------------------------===//
632 //                                ConstantFP
633 //===----------------------------------------------------------------------===//
634
635 static const fltSemantics *TypeToFloatSemantics(Type *Ty) {
636   if (Ty->isHalfTy())
637     return &APFloat::IEEEhalf;
638   if (Ty->isFloatTy())
639     return &APFloat::IEEEsingle;
640   if (Ty->isDoubleTy())
641     return &APFloat::IEEEdouble;
642   if (Ty->isX86_FP80Ty())
643     return &APFloat::x87DoubleExtended;
644   else if (Ty->isFP128Ty())
645     return &APFloat::IEEEquad;
646
647   assert(Ty->isPPC_FP128Ty() && "Unknown FP format");
648   return &APFloat::PPCDoubleDouble;
649 }
650
651 void ConstantFP::anchor() { }
652
653 /// get() - This returns a constant fp for the specified value in the
654 /// specified type.  This should only be used for simple constant values like
655 /// 2.0/1.0 etc, that are known-valid both as double and as the target format.
656 Constant *ConstantFP::get(Type *Ty, double V) {
657   LLVMContext &Context = Ty->getContext();
658
659   APFloat FV(V);
660   bool ignored;
661   FV.convert(*TypeToFloatSemantics(Ty->getScalarType()),
662              APFloat::rmNearestTiesToEven, &ignored);
663   Constant *C = get(Context, FV);
664
665   // For vectors, broadcast the value.
666   if (VectorType *VTy = dyn_cast<VectorType>(Ty))
667     return ConstantVector::getSplat(VTy->getNumElements(), C);
668
669   return C;
670 }
671
672
673 Constant *ConstantFP::get(Type *Ty, StringRef Str) {
674   LLVMContext &Context = Ty->getContext();
675
676   APFloat FV(*TypeToFloatSemantics(Ty->getScalarType()), Str);
677   Constant *C = get(Context, FV);
678
679   // For vectors, broadcast the value.
680   if (VectorType *VTy = dyn_cast<VectorType>(Ty))
681     return ConstantVector::getSplat(VTy->getNumElements(), C);
682
683   return C; 
684 }
685
686 Constant *ConstantFP::getNaN(Type *Ty, bool Negative, unsigned Type) {
687   const fltSemantics &Semantics = *TypeToFloatSemantics(Ty->getScalarType());
688   APFloat NaN = APFloat::getNaN(Semantics, Negative, Type);
689   Constant *C = get(Ty->getContext(), NaN);
690
691   if (VectorType *VTy = dyn_cast<VectorType>(Ty))
692     return ConstantVector::getSplat(VTy->getNumElements(), C);
693
694   return C;
695 }
696
697 Constant *ConstantFP::getNegativeZero(Type *Ty) {
698   const fltSemantics &Semantics = *TypeToFloatSemantics(Ty->getScalarType());
699   APFloat NegZero = APFloat::getZero(Semantics, /*Negative=*/true);
700   Constant *C = get(Ty->getContext(), NegZero);
701
702   if (VectorType *VTy = dyn_cast<VectorType>(Ty))
703     return ConstantVector::getSplat(VTy->getNumElements(), C);
704
705   return C;
706 }
707
708
709 Constant *ConstantFP::getZeroValueForNegation(Type *Ty) {
710   if (Ty->isFPOrFPVectorTy())
711     return getNegativeZero(Ty);
712
713   return Constant::getNullValue(Ty);
714 }
715
716
717 // ConstantFP accessors.
718 ConstantFP* ConstantFP::get(LLVMContext &Context, const APFloat& V) {
719   LLVMContextImpl* pImpl = Context.pImpl;
720
721   ConstantFP *&Slot = pImpl->FPConstants[V];
722
723   if (!Slot) {
724     Type *Ty;
725     if (&V.getSemantics() == &APFloat::IEEEhalf)
726       Ty = Type::getHalfTy(Context);
727     else if (&V.getSemantics() == &APFloat::IEEEsingle)
728       Ty = Type::getFloatTy(Context);
729     else if (&V.getSemantics() == &APFloat::IEEEdouble)
730       Ty = Type::getDoubleTy(Context);
731     else if (&V.getSemantics() == &APFloat::x87DoubleExtended)
732       Ty = Type::getX86_FP80Ty(Context);
733     else if (&V.getSemantics() == &APFloat::IEEEquad)
734       Ty = Type::getFP128Ty(Context);
735     else {
736       assert(&V.getSemantics() == &APFloat::PPCDoubleDouble && 
737              "Unknown FP format");
738       Ty = Type::getPPC_FP128Ty(Context);
739     }
740     Slot = new ConstantFP(Ty, V);
741   }
742
743   return Slot;
744 }
745
746 Constant *ConstantFP::getInfinity(Type *Ty, bool Negative) {
747   const fltSemantics &Semantics = *TypeToFloatSemantics(Ty->getScalarType());
748   Constant *C = get(Ty->getContext(), APFloat::getInf(Semantics, Negative));
749
750   if (VectorType *VTy = dyn_cast<VectorType>(Ty))
751     return ConstantVector::getSplat(VTy->getNumElements(), C);
752
753   return C;
754 }
755
756 ConstantFP::ConstantFP(Type *Ty, const APFloat& V)
757   : Constant(Ty, ConstantFPVal, nullptr, 0), Val(V) {
758   assert(&V.getSemantics() == TypeToFloatSemantics(Ty) &&
759          "FP type Mismatch");
760 }
761
762 bool ConstantFP::isExactlyValue(const APFloat &V) const {
763   return Val.bitwiseIsEqual(V);
764 }
765
766 /// Remove the constant from the constant table.
767 void ConstantFP::destroyConstantImpl() {
768   llvm_unreachable("You can't ConstantInt->destroyConstantImpl()!");
769 }
770
771 //===----------------------------------------------------------------------===//
772 //                   ConstantAggregateZero Implementation
773 //===----------------------------------------------------------------------===//
774
775 /// getSequentialElement - If this CAZ has array or vector type, return a zero
776 /// with the right element type.
777 Constant *ConstantAggregateZero::getSequentialElement() const {
778   return Constant::getNullValue(getType()->getSequentialElementType());
779 }
780
781 /// getStructElement - If this CAZ has struct type, return a zero with the
782 /// right element type for the specified element.
783 Constant *ConstantAggregateZero::getStructElement(unsigned Elt) const {
784   return Constant::getNullValue(getType()->getStructElementType(Elt));
785 }
786
787 /// getElementValue - Return a zero of the right value for the specified GEP
788 /// index if we can, otherwise return null (e.g. if C is a ConstantExpr).
789 Constant *ConstantAggregateZero::getElementValue(Constant *C) const {
790   if (isa<SequentialType>(getType()))
791     return getSequentialElement();
792   return getStructElement(cast<ConstantInt>(C)->getZExtValue());
793 }
794
795 /// getElementValue - Return a zero of the right value for the specified GEP
796 /// index.
797 Constant *ConstantAggregateZero::getElementValue(unsigned Idx) const {
798   if (isa<SequentialType>(getType()))
799     return getSequentialElement();
800   return getStructElement(Idx);
801 }
802
803 unsigned ConstantAggregateZero::getNumElements() const {
804   Type *Ty = getType();
805   if (auto *AT = dyn_cast<ArrayType>(Ty))
806     return AT->getNumElements();
807   if (auto *VT = dyn_cast<VectorType>(Ty))
808     return VT->getNumElements();
809   return Ty->getStructNumElements();
810 }
811
812 //===----------------------------------------------------------------------===//
813 //                         UndefValue Implementation
814 //===----------------------------------------------------------------------===//
815
816 /// getSequentialElement - If this undef has array or vector type, return an
817 /// undef with the right element type.
818 UndefValue *UndefValue::getSequentialElement() const {
819   return UndefValue::get(getType()->getSequentialElementType());
820 }
821
822 /// getStructElement - If this undef has struct type, return a zero with the
823 /// right element type for the specified element.
824 UndefValue *UndefValue::getStructElement(unsigned Elt) const {
825   return UndefValue::get(getType()->getStructElementType(Elt));
826 }
827
828 /// getElementValue - Return an undef of the right value for the specified GEP
829 /// index if we can, otherwise return null (e.g. if C is a ConstantExpr).
830 UndefValue *UndefValue::getElementValue(Constant *C) const {
831   if (isa<SequentialType>(getType()))
832     return getSequentialElement();
833   return getStructElement(cast<ConstantInt>(C)->getZExtValue());
834 }
835
836 /// getElementValue - Return an undef of the right value for the specified GEP
837 /// index.
838 UndefValue *UndefValue::getElementValue(unsigned Idx) const {
839   if (isa<SequentialType>(getType()))
840     return getSequentialElement();
841   return getStructElement(Idx);
842 }
843
844 unsigned UndefValue::getNumElements() const {
845   Type *Ty = getType();
846   if (auto *AT = dyn_cast<ArrayType>(Ty))
847     return AT->getNumElements();
848   if (auto *VT = dyn_cast<VectorType>(Ty))
849     return VT->getNumElements();
850   return Ty->getStructNumElements();
851 }
852
853 //===----------------------------------------------------------------------===//
854 //                            ConstantXXX Classes
855 //===----------------------------------------------------------------------===//
856
857 template <typename ItTy, typename EltTy>
858 static bool rangeOnlyContains(ItTy Start, ItTy End, EltTy Elt) {
859   for (; Start != End; ++Start)
860     if (*Start != Elt)
861       return false;
862   return true;
863 }
864
865 ConstantArray::ConstantArray(ArrayType *T, ArrayRef<Constant *> V)
866   : Constant(T, ConstantArrayVal,
867              OperandTraits<ConstantArray>::op_end(this) - V.size(),
868              V.size()) {
869   assert(V.size() == T->getNumElements() &&
870          "Invalid initializer vector for constant array");
871   for (unsigned i = 0, e = V.size(); i != e; ++i)
872     assert(V[i]->getType() == T->getElementType() &&
873            "Initializer for array element doesn't match array element type!");
874   std::copy(V.begin(), V.end(), op_begin());
875 }
876
877 Constant *ConstantArray::get(ArrayType *Ty, ArrayRef<Constant*> V) {
878   if (Constant *C = getImpl(Ty, V))
879     return C;
880   return Ty->getContext().pImpl->ArrayConstants.getOrCreate(Ty, V);
881 }
882 Constant *ConstantArray::getImpl(ArrayType *Ty, ArrayRef<Constant*> V) {
883   // Empty arrays are canonicalized to ConstantAggregateZero.
884   if (V.empty())
885     return ConstantAggregateZero::get(Ty);
886
887   for (unsigned i = 0, e = V.size(); i != e; ++i) {
888     assert(V[i]->getType() == Ty->getElementType() &&
889            "Wrong type in array element initializer");
890   }
891
892   // If this is an all-zero array, return a ConstantAggregateZero object.  If
893   // all undef, return an UndefValue, if "all simple", then return a
894   // ConstantDataArray.
895   Constant *C = V[0];
896   if (isa<UndefValue>(C) && rangeOnlyContains(V.begin(), V.end(), C))
897     return UndefValue::get(Ty);
898
899   if (C->isNullValue() && rangeOnlyContains(V.begin(), V.end(), C))
900     return ConstantAggregateZero::get(Ty);
901
902   // Check to see if all of the elements are ConstantFP or ConstantInt and if
903   // the element type is compatible with ConstantDataVector.  If so, use it.
904   if (ConstantDataSequential::isElementTypeCompatible(C->getType())) {
905     // We speculatively build the elements here even if it turns out that there
906     // is a constantexpr or something else weird in the array, since it is so
907     // uncommon for that to happen.
908     if (ConstantInt *CI = dyn_cast<ConstantInt>(C)) {
909       if (CI->getType()->isIntegerTy(8)) {
910         SmallVector<uint8_t, 16> Elts;
911         for (unsigned i = 0, e = V.size(); i != e; ++i)
912           if (ConstantInt *CI = dyn_cast<ConstantInt>(V[i]))
913             Elts.push_back(CI->getZExtValue());
914           else
915             break;
916         if (Elts.size() == V.size())
917           return ConstantDataArray::get(C->getContext(), Elts);
918       } else if (CI->getType()->isIntegerTy(16)) {
919         SmallVector<uint16_t, 16> Elts;
920         for (unsigned i = 0, e = V.size(); i != e; ++i)
921           if (ConstantInt *CI = dyn_cast<ConstantInt>(V[i]))
922             Elts.push_back(CI->getZExtValue());
923           else
924             break;
925         if (Elts.size() == V.size())
926           return ConstantDataArray::get(C->getContext(), Elts);
927       } else if (CI->getType()->isIntegerTy(32)) {
928         SmallVector<uint32_t, 16> Elts;
929         for (unsigned i = 0, e = V.size(); i != e; ++i)
930           if (ConstantInt *CI = dyn_cast<ConstantInt>(V[i]))
931             Elts.push_back(CI->getZExtValue());
932           else
933             break;
934         if (Elts.size() == V.size())
935           return ConstantDataArray::get(C->getContext(), Elts);
936       } else if (CI->getType()->isIntegerTy(64)) {
937         SmallVector<uint64_t, 16> Elts;
938         for (unsigned i = 0, e = V.size(); i != e; ++i)
939           if (ConstantInt *CI = dyn_cast<ConstantInt>(V[i]))
940             Elts.push_back(CI->getZExtValue());
941           else
942             break;
943         if (Elts.size() == V.size())
944           return ConstantDataArray::get(C->getContext(), Elts);
945       }
946     }
947
948     if (ConstantFP *CFP = dyn_cast<ConstantFP>(C)) {
949       if (CFP->getType()->isFloatTy()) {
950         SmallVector<uint32_t, 16> Elts;
951         for (unsigned i = 0, e = V.size(); i != e; ++i)
952           if (ConstantFP *CFP = dyn_cast<ConstantFP>(V[i]))
953             Elts.push_back(
954                 CFP->getValueAPF().bitcastToAPInt().getLimitedValue());
955           else
956             break;
957         if (Elts.size() == V.size())
958           return ConstantDataArray::getFP(C->getContext(), Elts);
959       } else if (CFP->getType()->isDoubleTy()) {
960         SmallVector<uint64_t, 16> Elts;
961         for (unsigned i = 0, e = V.size(); i != e; ++i)
962           if (ConstantFP *CFP = dyn_cast<ConstantFP>(V[i]))
963             Elts.push_back(
964                 CFP->getValueAPF().bitcastToAPInt().getLimitedValue());
965           else
966             break;
967         if (Elts.size() == V.size())
968           return ConstantDataArray::getFP(C->getContext(), Elts);
969       }
970     }
971   }
972
973   // Otherwise, we really do want to create a ConstantArray.
974   return nullptr;
975 }
976
977 /// getTypeForElements - Return an anonymous struct type to use for a constant
978 /// with the specified set of elements.  The list must not be empty.
979 StructType *ConstantStruct::getTypeForElements(LLVMContext &Context,
980                                                ArrayRef<Constant*> V,
981                                                bool Packed) {
982   unsigned VecSize = V.size();
983   SmallVector<Type*, 16> EltTypes(VecSize);
984   for (unsigned i = 0; i != VecSize; ++i)
985     EltTypes[i] = V[i]->getType();
986
987   return StructType::get(Context, EltTypes, Packed);
988 }
989
990
991 StructType *ConstantStruct::getTypeForElements(ArrayRef<Constant*> V,
992                                                bool Packed) {
993   assert(!V.empty() &&
994          "ConstantStruct::getTypeForElements cannot be called on empty list");
995   return getTypeForElements(V[0]->getContext(), V, Packed);
996 }
997
998
999 ConstantStruct::ConstantStruct(StructType *T, ArrayRef<Constant *> V)
1000   : Constant(T, ConstantStructVal,
1001              OperandTraits<ConstantStruct>::op_end(this) - V.size(),
1002              V.size()) {
1003   assert(V.size() == T->getNumElements() &&
1004          "Invalid initializer vector for constant structure");
1005   for (unsigned i = 0, e = V.size(); i != e; ++i)
1006     assert((T->isOpaque() || V[i]->getType() == T->getElementType(i)) &&
1007            "Initializer for struct element doesn't match struct element type!");
1008   std::copy(V.begin(), V.end(), op_begin());
1009 }
1010
1011 // ConstantStruct accessors.
1012 Constant *ConstantStruct::get(StructType *ST, ArrayRef<Constant*> V) {
1013   assert((ST->isOpaque() || ST->getNumElements() == V.size()) &&
1014          "Incorrect # elements specified to ConstantStruct::get");
1015
1016   // Create a ConstantAggregateZero value if all elements are zeros.
1017   bool isZero = true;
1018   bool isUndef = false;
1019   
1020   if (!V.empty()) {
1021     isUndef = isa<UndefValue>(V[0]);
1022     isZero = V[0]->isNullValue();
1023     if (isUndef || isZero) {
1024       for (unsigned i = 0, e = V.size(); i != e; ++i) {
1025         if (!V[i]->isNullValue())
1026           isZero = false;
1027         if (!isa<UndefValue>(V[i]))
1028           isUndef = false;
1029       }
1030     }
1031   }
1032   if (isZero)
1033     return ConstantAggregateZero::get(ST);
1034   if (isUndef)
1035     return UndefValue::get(ST);
1036
1037   return ST->getContext().pImpl->StructConstants.getOrCreate(ST, V);
1038 }
1039
1040 Constant *ConstantStruct::get(StructType *T, ...) {
1041   va_list ap;
1042   SmallVector<Constant*, 8> Values;
1043   va_start(ap, T);
1044   while (Constant *Val = va_arg(ap, llvm::Constant*))
1045     Values.push_back(Val);
1046   va_end(ap);
1047   return get(T, Values);
1048 }
1049
1050 ConstantVector::ConstantVector(VectorType *T, ArrayRef<Constant *> V)
1051   : Constant(T, ConstantVectorVal,
1052              OperandTraits<ConstantVector>::op_end(this) - V.size(),
1053              V.size()) {
1054   for (size_t i = 0, e = V.size(); i != e; i++)
1055     assert(V[i]->getType() == T->getElementType() &&
1056            "Initializer for vector element doesn't match vector element type!");
1057   std::copy(V.begin(), V.end(), op_begin());
1058 }
1059
1060 // ConstantVector accessors.
1061 Constant *ConstantVector::get(ArrayRef<Constant*> V) {
1062   if (Constant *C = getImpl(V))
1063     return C;
1064   VectorType *Ty = VectorType::get(V.front()->getType(), V.size());
1065   return Ty->getContext().pImpl->VectorConstants.getOrCreate(Ty, V);
1066 }
1067 Constant *ConstantVector::getImpl(ArrayRef<Constant*> V) {
1068   assert(!V.empty() && "Vectors can't be empty");
1069   VectorType *T = VectorType::get(V.front()->getType(), V.size());
1070
1071   // If this is an all-undef or all-zero vector, return a
1072   // ConstantAggregateZero or UndefValue.
1073   Constant *C = V[0];
1074   bool isZero = C->isNullValue();
1075   bool isUndef = isa<UndefValue>(C);
1076
1077   if (isZero || isUndef) {
1078     for (unsigned i = 1, e = V.size(); i != e; ++i)
1079       if (V[i] != C) {
1080         isZero = isUndef = false;
1081         break;
1082       }
1083   }
1084
1085   if (isZero)
1086     return ConstantAggregateZero::get(T);
1087   if (isUndef)
1088     return UndefValue::get(T);
1089
1090   // Check to see if all of the elements are ConstantFP or ConstantInt and if
1091   // the element type is compatible with ConstantDataVector.  If so, use it.
1092   if (ConstantDataSequential::isElementTypeCompatible(C->getType())) {
1093     // We speculatively build the elements here even if it turns out that there
1094     // is a constantexpr or something else weird in the array, since it is so
1095     // uncommon for that to happen.
1096     if (ConstantInt *CI = dyn_cast<ConstantInt>(C)) {
1097       if (CI->getType()->isIntegerTy(8)) {
1098         SmallVector<uint8_t, 16> Elts;
1099         for (unsigned i = 0, e = V.size(); i != e; ++i)
1100           if (ConstantInt *CI = dyn_cast<ConstantInt>(V[i]))
1101             Elts.push_back(CI->getZExtValue());
1102           else
1103             break;
1104         if (Elts.size() == V.size())
1105           return ConstantDataVector::get(C->getContext(), Elts);
1106       } else if (CI->getType()->isIntegerTy(16)) {
1107         SmallVector<uint16_t, 16> Elts;
1108         for (unsigned i = 0, e = V.size(); i != e; ++i)
1109           if (ConstantInt *CI = dyn_cast<ConstantInt>(V[i]))
1110             Elts.push_back(CI->getZExtValue());
1111           else
1112             break;
1113         if (Elts.size() == V.size())
1114           return ConstantDataVector::get(C->getContext(), Elts);
1115       } else if (CI->getType()->isIntegerTy(32)) {
1116         SmallVector<uint32_t, 16> Elts;
1117         for (unsigned i = 0, e = V.size(); i != e; ++i)
1118           if (ConstantInt *CI = dyn_cast<ConstantInt>(V[i]))
1119             Elts.push_back(CI->getZExtValue());
1120           else
1121             break;
1122         if (Elts.size() == V.size())
1123           return ConstantDataVector::get(C->getContext(), Elts);
1124       } else if (CI->getType()->isIntegerTy(64)) {
1125         SmallVector<uint64_t, 16> Elts;
1126         for (unsigned i = 0, e = V.size(); i != e; ++i)
1127           if (ConstantInt *CI = dyn_cast<ConstantInt>(V[i]))
1128             Elts.push_back(CI->getZExtValue());
1129           else
1130             break;
1131         if (Elts.size() == V.size())
1132           return ConstantDataVector::get(C->getContext(), Elts);
1133       }
1134     }
1135
1136     if (ConstantFP *CFP = dyn_cast<ConstantFP>(C)) {
1137       if (CFP->getType()->isFloatTy()) {
1138         SmallVector<uint32_t, 16> Elts;
1139         for (unsigned i = 0, e = V.size(); i != e; ++i)
1140           if (ConstantFP *CFP = dyn_cast<ConstantFP>(V[i]))
1141             Elts.push_back(
1142                 CFP->getValueAPF().bitcastToAPInt().getLimitedValue());
1143           else
1144             break;
1145         if (Elts.size() == V.size())
1146           return ConstantDataVector::getFP(C->getContext(), Elts);
1147       } else if (CFP->getType()->isDoubleTy()) {
1148         SmallVector<uint64_t, 16> Elts;
1149         for (unsigned i = 0, e = V.size(); i != e; ++i)
1150           if (ConstantFP *CFP = dyn_cast<ConstantFP>(V[i]))
1151             Elts.push_back(
1152                 CFP->getValueAPF().bitcastToAPInt().getLimitedValue());
1153           else
1154             break;
1155         if (Elts.size() == V.size())
1156           return ConstantDataVector::getFP(C->getContext(), Elts);
1157       }
1158     }
1159   }
1160
1161   // Otherwise, the element type isn't compatible with ConstantDataVector, or
1162   // the operand list constants a ConstantExpr or something else strange.
1163   return nullptr;
1164 }
1165
1166 Constant *ConstantVector::getSplat(unsigned NumElts, Constant *V) {
1167   // If this splat is compatible with ConstantDataVector, use it instead of
1168   // ConstantVector.
1169   if ((isa<ConstantFP>(V) || isa<ConstantInt>(V)) &&
1170       ConstantDataSequential::isElementTypeCompatible(V->getType()))
1171     return ConstantDataVector::getSplat(NumElts, V);
1172
1173   SmallVector<Constant*, 32> Elts(NumElts, V);
1174   return get(Elts);
1175 }
1176
1177 ConstantTokenNone *ConstantTokenNone::get(LLVMContext &Context) {
1178   LLVMContextImpl *pImpl = Context.pImpl;
1179   if (!pImpl->TheNoneToken)
1180     pImpl->TheNoneToken = new ConstantTokenNone(Context);
1181   return pImpl->TheNoneToken;
1182 }
1183
1184 /// Remove the constant from the constant table.
1185 void ConstantTokenNone::destroyConstantImpl() {
1186   llvm_unreachable("You can't ConstantTokenNone->destroyConstantImpl()!");
1187 }
1188
1189 // Utility function for determining if a ConstantExpr is a CastOp or not. This
1190 // can't be inline because we don't want to #include Instruction.h into
1191 // Constant.h
1192 bool ConstantExpr::isCast() const {
1193   return Instruction::isCast(getOpcode());
1194 }
1195
1196 bool ConstantExpr::isCompare() const {
1197   return getOpcode() == Instruction::ICmp || getOpcode() == Instruction::FCmp;
1198 }
1199
1200 bool ConstantExpr::isGEPWithNoNotionalOverIndexing() const {
1201   if (getOpcode() != Instruction::GetElementPtr) return false;
1202
1203   gep_type_iterator GEPI = gep_type_begin(this), E = gep_type_end(this);
1204   User::const_op_iterator OI = std::next(this->op_begin());
1205
1206   // Skip the first index, as it has no static limit.
1207   ++GEPI;
1208   ++OI;
1209
1210   // The remaining indices must be compile-time known integers within the
1211   // bounds of the corresponding notional static array types.
1212   for (; GEPI != E; ++GEPI, ++OI) {
1213     ConstantInt *CI = dyn_cast<ConstantInt>(*OI);
1214     if (!CI) return false;
1215     if (ArrayType *ATy = dyn_cast<ArrayType>(*GEPI))
1216       if (CI->getValue().getActiveBits() > 64 ||
1217           CI->getZExtValue() >= ATy->getNumElements())
1218         return false;
1219   }
1220
1221   // All the indices checked out.
1222   return true;
1223 }
1224
1225 bool ConstantExpr::hasIndices() const {
1226   return getOpcode() == Instruction::ExtractValue ||
1227          getOpcode() == Instruction::InsertValue;
1228 }
1229
1230 ArrayRef<unsigned> ConstantExpr::getIndices() const {
1231   if (const ExtractValueConstantExpr *EVCE =
1232         dyn_cast<ExtractValueConstantExpr>(this))
1233     return EVCE->Indices;
1234
1235   return cast<InsertValueConstantExpr>(this)->Indices;
1236 }
1237
1238 unsigned ConstantExpr::getPredicate() const {
1239   assert(isCompare());
1240   return ((const CompareConstantExpr*)this)->predicate;
1241 }
1242
1243 /// getWithOperandReplaced - Return a constant expression identical to this
1244 /// one, but with the specified operand set to the specified value.
1245 Constant *
1246 ConstantExpr::getWithOperandReplaced(unsigned OpNo, Constant *Op) const {
1247   assert(Op->getType() == getOperand(OpNo)->getType() &&
1248          "Replacing operand with value of different type!");
1249   if (getOperand(OpNo) == Op)
1250     return const_cast<ConstantExpr*>(this);
1251
1252   SmallVector<Constant*, 8> NewOps;
1253   for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
1254     NewOps.push_back(i == OpNo ? Op : getOperand(i));
1255
1256   return getWithOperands(NewOps);
1257 }
1258
1259 /// getWithOperands - This returns the current constant expression with the
1260 /// operands replaced with the specified values.  The specified array must
1261 /// have the same number of operands as our current one.
1262 Constant *ConstantExpr::getWithOperands(ArrayRef<Constant *> Ops, Type *Ty,
1263                                         bool OnlyIfReduced, Type *SrcTy) const {
1264   assert(Ops.size() == getNumOperands() && "Operand count mismatch!");
1265
1266   // If no operands changed return self.
1267   if (Ty == getType() && std::equal(Ops.begin(), Ops.end(), op_begin()))
1268     return const_cast<ConstantExpr*>(this);
1269
1270   Type *OnlyIfReducedTy = OnlyIfReduced ? Ty : nullptr;
1271   switch (getOpcode()) {
1272   case Instruction::Trunc:
1273   case Instruction::ZExt:
1274   case Instruction::SExt:
1275   case Instruction::FPTrunc:
1276   case Instruction::FPExt:
1277   case Instruction::UIToFP:
1278   case Instruction::SIToFP:
1279   case Instruction::FPToUI:
1280   case Instruction::FPToSI:
1281   case Instruction::PtrToInt:
1282   case Instruction::IntToPtr:
1283   case Instruction::BitCast:
1284   case Instruction::AddrSpaceCast:
1285     return ConstantExpr::getCast(getOpcode(), Ops[0], Ty, OnlyIfReduced);
1286   case Instruction::Select:
1287     return ConstantExpr::getSelect(Ops[0], Ops[1], Ops[2], OnlyIfReducedTy);
1288   case Instruction::InsertElement:
1289     return ConstantExpr::getInsertElement(Ops[0], Ops[1], Ops[2],
1290                                           OnlyIfReducedTy);
1291   case Instruction::ExtractElement:
1292     return ConstantExpr::getExtractElement(Ops[0], Ops[1], OnlyIfReducedTy);
1293   case Instruction::InsertValue:
1294     return ConstantExpr::getInsertValue(Ops[0], Ops[1], getIndices(),
1295                                         OnlyIfReducedTy);
1296   case Instruction::ExtractValue:
1297     return ConstantExpr::getExtractValue(Ops[0], getIndices(), OnlyIfReducedTy);
1298   case Instruction::ShuffleVector:
1299     return ConstantExpr::getShuffleVector(Ops[0], Ops[1], Ops[2],
1300                                           OnlyIfReducedTy);
1301   case Instruction::GetElementPtr: {
1302     auto *GEPO = cast<GEPOperator>(this);
1303     assert(SrcTy || (Ops[0]->getType() == getOperand(0)->getType()));
1304     return ConstantExpr::getGetElementPtr(
1305         SrcTy ? SrcTy : GEPO->getSourceElementType(), Ops[0], Ops.slice(1),
1306         GEPO->isInBounds(), OnlyIfReducedTy);
1307   }
1308   case Instruction::ICmp:
1309   case Instruction::FCmp:
1310     return ConstantExpr::getCompare(getPredicate(), Ops[0], Ops[1],
1311                                     OnlyIfReducedTy);
1312   default:
1313     assert(getNumOperands() == 2 && "Must be binary operator?");
1314     return ConstantExpr::get(getOpcode(), Ops[0], Ops[1], SubclassOptionalData,
1315                              OnlyIfReducedTy);
1316   }
1317 }
1318
1319
1320 //===----------------------------------------------------------------------===//
1321 //                      isValueValidForType implementations
1322
1323 bool ConstantInt::isValueValidForType(Type *Ty, uint64_t Val) {
1324   unsigned NumBits = Ty->getIntegerBitWidth(); // assert okay
1325   if (Ty->isIntegerTy(1))
1326     return Val == 0 || Val == 1;
1327   if (NumBits >= 64)
1328     return true; // always true, has to fit in largest type
1329   uint64_t Max = (1ll << NumBits) - 1;
1330   return Val <= Max;
1331 }
1332
1333 bool ConstantInt::isValueValidForType(Type *Ty, int64_t Val) {
1334   unsigned NumBits = Ty->getIntegerBitWidth();
1335   if (Ty->isIntegerTy(1))
1336     return Val == 0 || Val == 1 || Val == -1;
1337   if (NumBits >= 64)
1338     return true; // always true, has to fit in largest type
1339   int64_t Min = -(1ll << (NumBits-1));
1340   int64_t Max = (1ll << (NumBits-1)) - 1;
1341   return (Val >= Min && Val <= Max);
1342 }
1343
1344 bool ConstantFP::isValueValidForType(Type *Ty, const APFloat& Val) {
1345   // convert modifies in place, so make a copy.
1346   APFloat Val2 = APFloat(Val);
1347   bool losesInfo;
1348   switch (Ty->getTypeID()) {
1349   default:
1350     return false;         // These can't be represented as floating point!
1351
1352   // FIXME rounding mode needs to be more flexible
1353   case Type::HalfTyID: {
1354     if (&Val2.getSemantics() == &APFloat::IEEEhalf)
1355       return true;
1356     Val2.convert(APFloat::IEEEhalf, APFloat::rmNearestTiesToEven, &losesInfo);
1357     return !losesInfo;
1358   }
1359   case Type::FloatTyID: {
1360     if (&Val2.getSemantics() == &APFloat::IEEEsingle)
1361       return true;
1362     Val2.convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven, &losesInfo);
1363     return !losesInfo;
1364   }
1365   case Type::DoubleTyID: {
1366     if (&Val2.getSemantics() == &APFloat::IEEEhalf ||
1367         &Val2.getSemantics() == &APFloat::IEEEsingle ||
1368         &Val2.getSemantics() == &APFloat::IEEEdouble)
1369       return true;
1370     Val2.convert(APFloat::IEEEdouble, APFloat::rmNearestTiesToEven, &losesInfo);
1371     return !losesInfo;
1372   }
1373   case Type::X86_FP80TyID:
1374     return &Val2.getSemantics() == &APFloat::IEEEhalf ||
1375            &Val2.getSemantics() == &APFloat::IEEEsingle || 
1376            &Val2.getSemantics() == &APFloat::IEEEdouble ||
1377            &Val2.getSemantics() == &APFloat::x87DoubleExtended;
1378   case Type::FP128TyID:
1379     return &Val2.getSemantics() == &APFloat::IEEEhalf ||
1380            &Val2.getSemantics() == &APFloat::IEEEsingle || 
1381            &Val2.getSemantics() == &APFloat::IEEEdouble ||
1382            &Val2.getSemantics() == &APFloat::IEEEquad;
1383   case Type::PPC_FP128TyID:
1384     return &Val2.getSemantics() == &APFloat::IEEEhalf ||
1385            &Val2.getSemantics() == &APFloat::IEEEsingle || 
1386            &Val2.getSemantics() == &APFloat::IEEEdouble ||
1387            &Val2.getSemantics() == &APFloat::PPCDoubleDouble;
1388   }
1389 }
1390
1391
1392 //===----------------------------------------------------------------------===//
1393 //                      Factory Function Implementation
1394
1395 ConstantAggregateZero *ConstantAggregateZero::get(Type *Ty) {
1396   assert((Ty->isStructTy() || Ty->isArrayTy() || Ty->isVectorTy()) &&
1397          "Cannot create an aggregate zero of non-aggregate type!");
1398   
1399   ConstantAggregateZero *&Entry = Ty->getContext().pImpl->CAZConstants[Ty];
1400   if (!Entry)
1401     Entry = new ConstantAggregateZero(Ty);
1402
1403   return Entry;
1404 }
1405
1406 /// destroyConstant - Remove the constant from the constant table.
1407 ///
1408 void ConstantAggregateZero::destroyConstantImpl() {
1409   getContext().pImpl->CAZConstants.erase(getType());
1410 }
1411
1412 /// destroyConstant - Remove the constant from the constant table...
1413 ///
1414 void ConstantArray::destroyConstantImpl() {
1415   getType()->getContext().pImpl->ArrayConstants.remove(this);
1416 }
1417
1418
1419 //---- ConstantStruct::get() implementation...
1420 //
1421
1422 // destroyConstant - Remove the constant from the constant table...
1423 //
1424 void ConstantStruct::destroyConstantImpl() {
1425   getType()->getContext().pImpl->StructConstants.remove(this);
1426 }
1427
1428 // destroyConstant - Remove the constant from the constant table...
1429 //
1430 void ConstantVector::destroyConstantImpl() {
1431   getType()->getContext().pImpl->VectorConstants.remove(this);
1432 }
1433
1434 /// getSplatValue - If this is a splat vector constant, meaning that all of
1435 /// the elements have the same value, return that value. Otherwise return 0.
1436 Constant *Constant::getSplatValue() const {
1437   assert(this->getType()->isVectorTy() && "Only valid for vectors!");
1438   if (isa<ConstantAggregateZero>(this))
1439     return getNullValue(this->getType()->getVectorElementType());
1440   if (const ConstantDataVector *CV = dyn_cast<ConstantDataVector>(this))
1441     return CV->getSplatValue();
1442   if (const ConstantVector *CV = dyn_cast<ConstantVector>(this))
1443     return CV->getSplatValue();
1444   return nullptr;
1445 }
1446
1447 /// getSplatValue - If this is a splat constant, where all of the
1448 /// elements have the same value, return that value. Otherwise return null.
1449 Constant *ConstantVector::getSplatValue() const {
1450   // Check out first element.
1451   Constant *Elt = getOperand(0);
1452   // Then make sure all remaining elements point to the same value.
1453   for (unsigned I = 1, E = getNumOperands(); I < E; ++I)
1454     if (getOperand(I) != Elt)
1455       return nullptr;
1456   return Elt;
1457 }
1458
1459 /// If C is a constant integer then return its value, otherwise C must be a
1460 /// vector of constant integers, all equal, and the common value is returned.
1461 const APInt &Constant::getUniqueInteger() const {
1462   if (const ConstantInt *CI = dyn_cast<ConstantInt>(this))
1463     return CI->getValue();
1464   assert(this->getSplatValue() && "Doesn't contain a unique integer!");
1465   const Constant *C = this->getAggregateElement(0U);
1466   assert(C && isa<ConstantInt>(C) && "Not a vector of numbers!");
1467   return cast<ConstantInt>(C)->getValue();
1468 }
1469
1470 //---- ConstantPointerNull::get() implementation.
1471 //
1472
1473 ConstantPointerNull *ConstantPointerNull::get(PointerType *Ty) {
1474   ConstantPointerNull *&Entry = Ty->getContext().pImpl->CPNConstants[Ty];
1475   if (!Entry)
1476     Entry = new ConstantPointerNull(Ty);
1477
1478   return Entry;
1479 }
1480
1481 // destroyConstant - Remove the constant from the constant table...
1482 //
1483 void ConstantPointerNull::destroyConstantImpl() {
1484   getContext().pImpl->CPNConstants.erase(getType());
1485 }
1486
1487
1488 //---- UndefValue::get() implementation.
1489 //
1490
1491 UndefValue *UndefValue::get(Type *Ty) {
1492   UndefValue *&Entry = Ty->getContext().pImpl->UVConstants[Ty];
1493   if (!Entry)
1494     Entry = new UndefValue(Ty);
1495
1496   return Entry;
1497 }
1498
1499 // destroyConstant - Remove the constant from the constant table.
1500 //
1501 void UndefValue::destroyConstantImpl() {
1502   // Free the constant and any dangling references to it.
1503   getContext().pImpl->UVConstants.erase(getType());
1504 }
1505
1506 //---- BlockAddress::get() implementation.
1507 //
1508
1509 BlockAddress *BlockAddress::get(BasicBlock *BB) {
1510   assert(BB->getParent() && "Block must have a parent");
1511   return get(BB->getParent(), BB);
1512 }
1513
1514 BlockAddress *BlockAddress::get(Function *F, BasicBlock *BB) {
1515   BlockAddress *&BA =
1516     F->getContext().pImpl->BlockAddresses[std::make_pair(F, BB)];
1517   if (!BA)
1518     BA = new BlockAddress(F, BB);
1519
1520   assert(BA->getFunction() == F && "Basic block moved between functions");
1521   return BA;
1522 }
1523
1524 BlockAddress::BlockAddress(Function *F, BasicBlock *BB)
1525 : Constant(Type::getInt8PtrTy(F->getContext()), Value::BlockAddressVal,
1526            &Op<0>(), 2) {
1527   setOperand(0, F);
1528   setOperand(1, BB);
1529   BB->AdjustBlockAddressRefCount(1);
1530 }
1531
1532 BlockAddress *BlockAddress::lookup(const BasicBlock *BB) {
1533   if (!BB->hasAddressTaken())
1534     return nullptr;
1535
1536   const Function *F = BB->getParent();
1537   assert(F && "Block must have a parent");
1538   BlockAddress *BA =
1539       F->getContext().pImpl->BlockAddresses.lookup(std::make_pair(F, BB));
1540   assert(BA && "Refcount and block address map disagree!");
1541   return BA;
1542 }
1543
1544 // destroyConstant - Remove the constant from the constant table.
1545 //
1546 void BlockAddress::destroyConstantImpl() {
1547   getFunction()->getType()->getContext().pImpl
1548     ->BlockAddresses.erase(std::make_pair(getFunction(), getBasicBlock()));
1549   getBasicBlock()->AdjustBlockAddressRefCount(-1);
1550 }
1551
1552 Value *BlockAddress::handleOperandChangeImpl(Value *From, Value *To, Use *U) {
1553   // This could be replacing either the Basic Block or the Function.  In either
1554   // case, we have to remove the map entry.
1555   Function *NewF = getFunction();
1556   BasicBlock *NewBB = getBasicBlock();
1557
1558   if (U == &Op<0>())
1559     NewF = cast<Function>(To->stripPointerCasts());
1560   else
1561     NewBB = cast<BasicBlock>(To);
1562
1563   // See if the 'new' entry already exists, if not, just update this in place
1564   // and return early.
1565   BlockAddress *&NewBA =
1566     getContext().pImpl->BlockAddresses[std::make_pair(NewF, NewBB)];
1567   if (NewBA)
1568     return NewBA;
1569
1570   getBasicBlock()->AdjustBlockAddressRefCount(-1);
1571
1572   // Remove the old entry, this can't cause the map to rehash (just a
1573   // tombstone will get added).
1574   getContext().pImpl->BlockAddresses.erase(std::make_pair(getFunction(),
1575                                                           getBasicBlock()));
1576   NewBA = this;
1577   setOperand(0, NewF);
1578   setOperand(1, NewBB);
1579   getBasicBlock()->AdjustBlockAddressRefCount(1);
1580
1581   // If we just want to keep the existing value, then return null.
1582   // Callers know that this means we shouldn't delete this value.
1583   return nullptr;
1584 }
1585
1586 //---- ConstantExpr::get() implementations.
1587 //
1588
1589 /// This is a utility function to handle folding of casts and lookup of the
1590 /// cast in the ExprConstants map. It is used by the various get* methods below.
1591 static Constant *getFoldedCast(Instruction::CastOps opc, Constant *C, Type *Ty,
1592                                bool OnlyIfReduced = false) {
1593   assert(Ty->isFirstClassType() && "Cannot cast to an aggregate type!");
1594   // Fold a few common cases
1595   if (Constant *FC = ConstantFoldCastInstruction(opc, C, Ty))
1596     return FC;
1597
1598   if (OnlyIfReduced)
1599     return nullptr;
1600
1601   LLVMContextImpl *pImpl = Ty->getContext().pImpl;
1602
1603   // Look up the constant in the table first to ensure uniqueness.
1604   ConstantExprKeyType Key(opc, C);
1605
1606   return pImpl->ExprConstants.getOrCreate(Ty, Key);
1607 }
1608
1609 Constant *ConstantExpr::getCast(unsigned oc, Constant *C, Type *Ty,
1610                                 bool OnlyIfReduced) {
1611   Instruction::CastOps opc = Instruction::CastOps(oc);
1612   assert(Instruction::isCast(opc) && "opcode out of range");
1613   assert(C && Ty && "Null arguments to getCast");
1614   assert(CastInst::castIsValid(opc, C, Ty) && "Invalid constantexpr cast!");
1615
1616   switch (opc) {
1617   default:
1618     llvm_unreachable("Invalid cast opcode");
1619   case Instruction::Trunc:
1620     return getTrunc(C, Ty, OnlyIfReduced);
1621   case Instruction::ZExt:
1622     return getZExt(C, Ty, OnlyIfReduced);
1623   case Instruction::SExt:
1624     return getSExt(C, Ty, OnlyIfReduced);
1625   case Instruction::FPTrunc:
1626     return getFPTrunc(C, Ty, OnlyIfReduced);
1627   case Instruction::FPExt:
1628     return getFPExtend(C, Ty, OnlyIfReduced);
1629   case Instruction::UIToFP:
1630     return getUIToFP(C, Ty, OnlyIfReduced);
1631   case Instruction::SIToFP:
1632     return getSIToFP(C, Ty, OnlyIfReduced);
1633   case Instruction::FPToUI:
1634     return getFPToUI(C, Ty, OnlyIfReduced);
1635   case Instruction::FPToSI:
1636     return getFPToSI(C, Ty, OnlyIfReduced);
1637   case Instruction::PtrToInt:
1638     return getPtrToInt(C, Ty, OnlyIfReduced);
1639   case Instruction::IntToPtr:
1640     return getIntToPtr(C, Ty, OnlyIfReduced);
1641   case Instruction::BitCast:
1642     return getBitCast(C, Ty, OnlyIfReduced);
1643   case Instruction::AddrSpaceCast:
1644     return getAddrSpaceCast(C, Ty, OnlyIfReduced);
1645   }
1646 }
1647
1648 Constant *ConstantExpr::getZExtOrBitCast(Constant *C, Type *Ty) {
1649   if (C->getType()->getScalarSizeInBits() == Ty->getScalarSizeInBits())
1650     return getBitCast(C, Ty);
1651   return getZExt(C, Ty);
1652 }
1653
1654 Constant *ConstantExpr::getSExtOrBitCast(Constant *C, Type *Ty) {
1655   if (C->getType()->getScalarSizeInBits() == Ty->getScalarSizeInBits())
1656     return getBitCast(C, Ty);
1657   return getSExt(C, Ty);
1658 }
1659
1660 Constant *ConstantExpr::getTruncOrBitCast(Constant *C, Type *Ty) {
1661   if (C->getType()->getScalarSizeInBits() == Ty->getScalarSizeInBits())
1662     return getBitCast(C, Ty);
1663   return getTrunc(C, Ty);
1664 }
1665
1666 Constant *ConstantExpr::getPointerCast(Constant *S, Type *Ty) {
1667   assert(S->getType()->isPtrOrPtrVectorTy() && "Invalid cast");
1668   assert((Ty->isIntOrIntVectorTy() || Ty->isPtrOrPtrVectorTy()) &&
1669           "Invalid cast");
1670
1671   if (Ty->isIntOrIntVectorTy())
1672     return getPtrToInt(S, Ty);
1673
1674   unsigned SrcAS = S->getType()->getPointerAddressSpace();
1675   if (Ty->isPtrOrPtrVectorTy() && SrcAS != Ty->getPointerAddressSpace())
1676     return getAddrSpaceCast(S, Ty);
1677
1678   return getBitCast(S, Ty);
1679 }
1680
1681 Constant *ConstantExpr::getPointerBitCastOrAddrSpaceCast(Constant *S,
1682                                                          Type *Ty) {
1683   assert(S->getType()->isPtrOrPtrVectorTy() && "Invalid cast");
1684   assert(Ty->isPtrOrPtrVectorTy() && "Invalid cast");
1685
1686   if (S->getType()->getPointerAddressSpace() != Ty->getPointerAddressSpace())
1687     return getAddrSpaceCast(S, Ty);
1688
1689   return getBitCast(S, Ty);
1690 }
1691
1692 Constant *ConstantExpr::getIntegerCast(Constant *C, Type *Ty,
1693                                        bool isSigned) {
1694   assert(C->getType()->isIntOrIntVectorTy() &&
1695          Ty->isIntOrIntVectorTy() && "Invalid cast");
1696   unsigned SrcBits = C->getType()->getScalarSizeInBits();
1697   unsigned DstBits = Ty->getScalarSizeInBits();
1698   Instruction::CastOps opcode =
1699     (SrcBits == DstBits ? Instruction::BitCast :
1700      (SrcBits > DstBits ? Instruction::Trunc :
1701       (isSigned ? Instruction::SExt : Instruction::ZExt)));
1702   return getCast(opcode, C, Ty);
1703 }
1704
1705 Constant *ConstantExpr::getFPCast(Constant *C, Type *Ty) {
1706   assert(C->getType()->isFPOrFPVectorTy() && Ty->isFPOrFPVectorTy() &&
1707          "Invalid cast");
1708   unsigned SrcBits = C->getType()->getScalarSizeInBits();
1709   unsigned DstBits = Ty->getScalarSizeInBits();
1710   if (SrcBits == DstBits)
1711     return C; // Avoid a useless cast
1712   Instruction::CastOps opcode =
1713     (SrcBits > DstBits ? Instruction::FPTrunc : Instruction::FPExt);
1714   return getCast(opcode, C, Ty);
1715 }
1716
1717 Constant *ConstantExpr::getTrunc(Constant *C, Type *Ty, bool OnlyIfReduced) {
1718 #ifndef NDEBUG
1719   bool fromVec = C->getType()->getTypeID() == Type::VectorTyID;
1720   bool toVec = Ty->getTypeID() == Type::VectorTyID;
1721 #endif
1722   assert((fromVec == toVec) && "Cannot convert from scalar to/from vector");
1723   assert(C->getType()->isIntOrIntVectorTy() && "Trunc operand must be integer");
1724   assert(Ty->isIntOrIntVectorTy() && "Trunc produces only integral");
1725   assert(C->getType()->getScalarSizeInBits() > Ty->getScalarSizeInBits()&&
1726          "SrcTy must be larger than DestTy for Trunc!");
1727
1728   return getFoldedCast(Instruction::Trunc, C, Ty, OnlyIfReduced);
1729 }
1730
1731 Constant *ConstantExpr::getSExt(Constant *C, Type *Ty, bool OnlyIfReduced) {
1732 #ifndef NDEBUG
1733   bool fromVec = C->getType()->getTypeID() == Type::VectorTyID;
1734   bool toVec = Ty->getTypeID() == Type::VectorTyID;
1735 #endif
1736   assert((fromVec == toVec) && "Cannot convert from scalar to/from vector");
1737   assert(C->getType()->isIntOrIntVectorTy() && "SExt operand must be integral");
1738   assert(Ty->isIntOrIntVectorTy() && "SExt produces only integer");
1739   assert(C->getType()->getScalarSizeInBits() < Ty->getScalarSizeInBits()&&
1740          "SrcTy must be smaller than DestTy for SExt!");
1741
1742   return getFoldedCast(Instruction::SExt, C, Ty, OnlyIfReduced);
1743 }
1744
1745 Constant *ConstantExpr::getZExt(Constant *C, Type *Ty, bool OnlyIfReduced) {
1746 #ifndef NDEBUG
1747   bool fromVec = C->getType()->getTypeID() == Type::VectorTyID;
1748   bool toVec = Ty->getTypeID() == Type::VectorTyID;
1749 #endif
1750   assert((fromVec == toVec) && "Cannot convert from scalar to/from vector");
1751   assert(C->getType()->isIntOrIntVectorTy() && "ZEXt operand must be integral");
1752   assert(Ty->isIntOrIntVectorTy() && "ZExt produces only integer");
1753   assert(C->getType()->getScalarSizeInBits() < Ty->getScalarSizeInBits()&&
1754          "SrcTy must be smaller than DestTy for ZExt!");
1755
1756   return getFoldedCast(Instruction::ZExt, C, Ty, OnlyIfReduced);
1757 }
1758
1759 Constant *ConstantExpr::getFPTrunc(Constant *C, Type *Ty, bool OnlyIfReduced) {
1760 #ifndef NDEBUG
1761   bool fromVec = C->getType()->getTypeID() == Type::VectorTyID;
1762   bool toVec = Ty->getTypeID() == Type::VectorTyID;
1763 #endif
1764   assert((fromVec == toVec) && "Cannot convert from scalar to/from vector");
1765   assert(C->getType()->isFPOrFPVectorTy() && Ty->isFPOrFPVectorTy() &&
1766          C->getType()->getScalarSizeInBits() > Ty->getScalarSizeInBits()&&
1767          "This is an illegal floating point truncation!");
1768   return getFoldedCast(Instruction::FPTrunc, C, Ty, OnlyIfReduced);
1769 }
1770
1771 Constant *ConstantExpr::getFPExtend(Constant *C, Type *Ty, bool OnlyIfReduced) {
1772 #ifndef NDEBUG
1773   bool fromVec = C->getType()->getTypeID() == Type::VectorTyID;
1774   bool toVec = Ty->getTypeID() == Type::VectorTyID;
1775 #endif
1776   assert((fromVec == toVec) && "Cannot convert from scalar to/from vector");
1777   assert(C->getType()->isFPOrFPVectorTy() && Ty->isFPOrFPVectorTy() &&
1778          C->getType()->getScalarSizeInBits() < Ty->getScalarSizeInBits()&&
1779          "This is an illegal floating point extension!");
1780   return getFoldedCast(Instruction::FPExt, C, Ty, OnlyIfReduced);
1781 }
1782
1783 Constant *ConstantExpr::getUIToFP(Constant *C, Type *Ty, bool OnlyIfReduced) {
1784 #ifndef NDEBUG
1785   bool fromVec = C->getType()->getTypeID() == Type::VectorTyID;
1786   bool toVec = Ty->getTypeID() == Type::VectorTyID;
1787 #endif
1788   assert((fromVec == toVec) && "Cannot convert from scalar to/from vector");
1789   assert(C->getType()->isIntOrIntVectorTy() && Ty->isFPOrFPVectorTy() &&
1790          "This is an illegal uint to floating point cast!");
1791   return getFoldedCast(Instruction::UIToFP, C, Ty, OnlyIfReduced);
1792 }
1793
1794 Constant *ConstantExpr::getSIToFP(Constant *C, Type *Ty, bool OnlyIfReduced) {
1795 #ifndef NDEBUG
1796   bool fromVec = C->getType()->getTypeID() == Type::VectorTyID;
1797   bool toVec = Ty->getTypeID() == Type::VectorTyID;
1798 #endif
1799   assert((fromVec == toVec) && "Cannot convert from scalar to/from vector");
1800   assert(C->getType()->isIntOrIntVectorTy() && Ty->isFPOrFPVectorTy() &&
1801          "This is an illegal sint to floating point cast!");
1802   return getFoldedCast(Instruction::SIToFP, C, Ty, OnlyIfReduced);
1803 }
1804
1805 Constant *ConstantExpr::getFPToUI(Constant *C, Type *Ty, bool OnlyIfReduced) {
1806 #ifndef NDEBUG
1807   bool fromVec = C->getType()->getTypeID() == Type::VectorTyID;
1808   bool toVec = Ty->getTypeID() == Type::VectorTyID;
1809 #endif
1810   assert((fromVec == toVec) && "Cannot convert from scalar to/from vector");
1811   assert(C->getType()->isFPOrFPVectorTy() && Ty->isIntOrIntVectorTy() &&
1812          "This is an illegal floating point to uint cast!");
1813   return getFoldedCast(Instruction::FPToUI, C, Ty, OnlyIfReduced);
1814 }
1815
1816 Constant *ConstantExpr::getFPToSI(Constant *C, Type *Ty, bool OnlyIfReduced) {
1817 #ifndef NDEBUG
1818   bool fromVec = C->getType()->getTypeID() == Type::VectorTyID;
1819   bool toVec = Ty->getTypeID() == Type::VectorTyID;
1820 #endif
1821   assert((fromVec == toVec) && "Cannot convert from scalar to/from vector");
1822   assert(C->getType()->isFPOrFPVectorTy() && Ty->isIntOrIntVectorTy() &&
1823          "This is an illegal floating point to sint cast!");
1824   return getFoldedCast(Instruction::FPToSI, C, Ty, OnlyIfReduced);
1825 }
1826
1827 Constant *ConstantExpr::getPtrToInt(Constant *C, Type *DstTy,
1828                                     bool OnlyIfReduced) {
1829   assert(C->getType()->getScalarType()->isPointerTy() &&
1830          "PtrToInt source must be pointer or pointer vector");
1831   assert(DstTy->getScalarType()->isIntegerTy() && 
1832          "PtrToInt destination must be integer or integer vector");
1833   assert(isa<VectorType>(C->getType()) == isa<VectorType>(DstTy));
1834   if (isa<VectorType>(C->getType()))
1835     assert(C->getType()->getVectorNumElements()==DstTy->getVectorNumElements()&&
1836            "Invalid cast between a different number of vector elements");
1837   return getFoldedCast(Instruction::PtrToInt, C, DstTy, OnlyIfReduced);
1838 }
1839
1840 Constant *ConstantExpr::getIntToPtr(Constant *C, Type *DstTy,
1841                                     bool OnlyIfReduced) {
1842   assert(C->getType()->getScalarType()->isIntegerTy() &&
1843          "IntToPtr source must be integer or integer vector");
1844   assert(DstTy->getScalarType()->isPointerTy() &&
1845          "IntToPtr destination must be a pointer or pointer vector");
1846   assert(isa<VectorType>(C->getType()) == isa<VectorType>(DstTy));
1847   if (isa<VectorType>(C->getType()))
1848     assert(C->getType()->getVectorNumElements()==DstTy->getVectorNumElements()&&
1849            "Invalid cast between a different number of vector elements");
1850   return getFoldedCast(Instruction::IntToPtr, C, DstTy, OnlyIfReduced);
1851 }
1852
1853 Constant *ConstantExpr::getBitCast(Constant *C, Type *DstTy,
1854                                    bool OnlyIfReduced) {
1855   assert(CastInst::castIsValid(Instruction::BitCast, C, DstTy) &&
1856          "Invalid constantexpr bitcast!");
1857
1858   // It is common to ask for a bitcast of a value to its own type, handle this
1859   // speedily.
1860   if (C->getType() == DstTy) return C;
1861
1862   return getFoldedCast(Instruction::BitCast, C, DstTy, OnlyIfReduced);
1863 }
1864
1865 Constant *ConstantExpr::getAddrSpaceCast(Constant *C, Type *DstTy,
1866                                          bool OnlyIfReduced) {
1867   assert(CastInst::castIsValid(Instruction::AddrSpaceCast, C, DstTy) &&
1868          "Invalid constantexpr addrspacecast!");
1869
1870   // Canonicalize addrspacecasts between different pointer types by first
1871   // bitcasting the pointer type and then converting the address space.
1872   PointerType *SrcScalarTy = cast<PointerType>(C->getType()->getScalarType());
1873   PointerType *DstScalarTy = cast<PointerType>(DstTy->getScalarType());
1874   Type *DstElemTy = DstScalarTy->getElementType();
1875   if (SrcScalarTy->getElementType() != DstElemTy) {
1876     Type *MidTy = PointerType::get(DstElemTy, SrcScalarTy->getAddressSpace());
1877     if (VectorType *VT = dyn_cast<VectorType>(DstTy)) {
1878       // Handle vectors of pointers.
1879       MidTy = VectorType::get(MidTy, VT->getNumElements());
1880     }
1881     C = getBitCast(C, MidTy);
1882   }
1883   return getFoldedCast(Instruction::AddrSpaceCast, C, DstTy, OnlyIfReduced);
1884 }
1885
1886 Constant *ConstantExpr::get(unsigned Opcode, Constant *C1, Constant *C2,
1887                             unsigned Flags, Type *OnlyIfReducedTy) {
1888   // Check the operands for consistency first.
1889   assert(Opcode >= Instruction::BinaryOpsBegin &&
1890          Opcode <  Instruction::BinaryOpsEnd   &&
1891          "Invalid opcode in binary constant expression");
1892   assert(C1->getType() == C2->getType() &&
1893          "Operand types in binary constant expression should match");
1894
1895 #ifndef NDEBUG
1896   switch (Opcode) {
1897   case Instruction::Add:
1898   case Instruction::Sub:
1899   case Instruction::Mul:
1900     assert(C1->getType() == C2->getType() && "Op types should be identical!");
1901     assert(C1->getType()->isIntOrIntVectorTy() &&
1902            "Tried to create an integer operation on a non-integer type!");
1903     break;
1904   case Instruction::FAdd:
1905   case Instruction::FSub:
1906   case Instruction::FMul:
1907     assert(C1->getType() == C2->getType() && "Op types should be identical!");
1908     assert(C1->getType()->isFPOrFPVectorTy() &&
1909            "Tried to create a floating-point operation on a "
1910            "non-floating-point type!");
1911     break;
1912   case Instruction::UDiv: 
1913   case Instruction::SDiv: 
1914     assert(C1->getType() == C2->getType() && "Op types should be identical!");
1915     assert(C1->getType()->isIntOrIntVectorTy() &&
1916            "Tried to create an arithmetic operation on a non-arithmetic type!");
1917     break;
1918   case Instruction::FDiv:
1919     assert(C1->getType() == C2->getType() && "Op types should be identical!");
1920     assert(C1->getType()->isFPOrFPVectorTy() &&
1921            "Tried to create an arithmetic operation on a non-arithmetic type!");
1922     break;
1923   case Instruction::URem: 
1924   case Instruction::SRem: 
1925     assert(C1->getType() == C2->getType() && "Op types should be identical!");
1926     assert(C1->getType()->isIntOrIntVectorTy() &&
1927            "Tried to create an arithmetic operation on a non-arithmetic type!");
1928     break;
1929   case Instruction::FRem:
1930     assert(C1->getType() == C2->getType() && "Op types should be identical!");
1931     assert(C1->getType()->isFPOrFPVectorTy() &&
1932            "Tried to create an arithmetic operation on a non-arithmetic type!");
1933     break;
1934   case Instruction::And:
1935   case Instruction::Or:
1936   case Instruction::Xor:
1937     assert(C1->getType() == C2->getType() && "Op types should be identical!");
1938     assert(C1->getType()->isIntOrIntVectorTy() &&
1939            "Tried to create a logical operation on a non-integral type!");
1940     break;
1941   case Instruction::Shl:
1942   case Instruction::LShr:
1943   case Instruction::AShr:
1944     assert(C1->getType() == C2->getType() && "Op types should be identical!");
1945     assert(C1->getType()->isIntOrIntVectorTy() &&
1946            "Tried to create a shift operation on a non-integer type!");
1947     break;
1948   default:
1949     break;
1950   }
1951 #endif
1952
1953   if (Constant *FC = ConstantFoldBinaryInstruction(Opcode, C1, C2))
1954     return FC;          // Fold a few common cases.
1955
1956   if (OnlyIfReducedTy == C1->getType())
1957     return nullptr;
1958
1959   Constant *ArgVec[] = { C1, C2 };
1960   ConstantExprKeyType Key(Opcode, ArgVec, 0, Flags);
1961
1962   LLVMContextImpl *pImpl = C1->getContext().pImpl;
1963   return pImpl->ExprConstants.getOrCreate(C1->getType(), Key);
1964 }
1965
1966 Constant *ConstantExpr::getSizeOf(Type* Ty) {
1967   // sizeof is implemented as: (i64) gep (Ty*)null, 1
1968   // Note that a non-inbounds gep is used, as null isn't within any object.
1969   Constant *GEPIdx = ConstantInt::get(Type::getInt32Ty(Ty->getContext()), 1);
1970   Constant *GEP = getGetElementPtr(
1971       Ty, Constant::getNullValue(PointerType::getUnqual(Ty)), GEPIdx);
1972   return getPtrToInt(GEP, 
1973                      Type::getInt64Ty(Ty->getContext()));
1974 }
1975
1976 Constant *ConstantExpr::getAlignOf(Type* Ty) {
1977   // alignof is implemented as: (i64) gep ({i1,Ty}*)null, 0, 1
1978   // Note that a non-inbounds gep is used, as null isn't within any object.
1979   Type *AligningTy = 
1980     StructType::get(Type::getInt1Ty(Ty->getContext()), Ty, nullptr);
1981   Constant *NullPtr = Constant::getNullValue(AligningTy->getPointerTo(0));
1982   Constant *Zero = ConstantInt::get(Type::getInt64Ty(Ty->getContext()), 0);
1983   Constant *One = ConstantInt::get(Type::getInt32Ty(Ty->getContext()), 1);
1984   Constant *Indices[2] = { Zero, One };
1985   Constant *GEP = getGetElementPtr(AligningTy, NullPtr, Indices);
1986   return getPtrToInt(GEP,
1987                      Type::getInt64Ty(Ty->getContext()));
1988 }
1989
1990 Constant *ConstantExpr::getOffsetOf(StructType* STy, unsigned FieldNo) {
1991   return getOffsetOf(STy, ConstantInt::get(Type::getInt32Ty(STy->getContext()),
1992                                            FieldNo));
1993 }
1994
1995 Constant *ConstantExpr::getOffsetOf(Type* Ty, Constant *FieldNo) {
1996   // offsetof is implemented as: (i64) gep (Ty*)null, 0, FieldNo
1997   // Note that a non-inbounds gep is used, as null isn't within any object.
1998   Constant *GEPIdx[] = {
1999     ConstantInt::get(Type::getInt64Ty(Ty->getContext()), 0),
2000     FieldNo
2001   };
2002   Constant *GEP = getGetElementPtr(
2003       Ty, Constant::getNullValue(PointerType::getUnqual(Ty)), GEPIdx);
2004   return getPtrToInt(GEP,
2005                      Type::getInt64Ty(Ty->getContext()));
2006 }
2007
2008 Constant *ConstantExpr::getCompare(unsigned short Predicate, Constant *C1,
2009                                    Constant *C2, bool OnlyIfReduced) {
2010   assert(C1->getType() == C2->getType() && "Op types should be identical!");
2011
2012   switch (Predicate) {
2013   default: llvm_unreachable("Invalid CmpInst predicate");
2014   case CmpInst::FCMP_FALSE: case CmpInst::FCMP_OEQ: case CmpInst::FCMP_OGT:
2015   case CmpInst::FCMP_OGE:   case CmpInst::FCMP_OLT: case CmpInst::FCMP_OLE:
2016   case CmpInst::FCMP_ONE:   case CmpInst::FCMP_ORD: case CmpInst::FCMP_UNO:
2017   case CmpInst::FCMP_UEQ:   case CmpInst::FCMP_UGT: case CmpInst::FCMP_UGE:
2018   case CmpInst::FCMP_ULT:   case CmpInst::FCMP_ULE: case CmpInst::FCMP_UNE:
2019   case CmpInst::FCMP_TRUE:
2020     return getFCmp(Predicate, C1, C2, OnlyIfReduced);
2021
2022   case CmpInst::ICMP_EQ:  case CmpInst::ICMP_NE:  case CmpInst::ICMP_UGT:
2023   case CmpInst::ICMP_UGE: case CmpInst::ICMP_ULT: case CmpInst::ICMP_ULE:
2024   case CmpInst::ICMP_SGT: case CmpInst::ICMP_SGE: case CmpInst::ICMP_SLT:
2025   case CmpInst::ICMP_SLE:
2026     return getICmp(Predicate, C1, C2, OnlyIfReduced);
2027   }
2028 }
2029
2030 Constant *ConstantExpr::getSelect(Constant *C, Constant *V1, Constant *V2,
2031                                   Type *OnlyIfReducedTy) {
2032   assert(!SelectInst::areInvalidOperands(C, V1, V2)&&"Invalid select operands");
2033
2034   if (Constant *SC = ConstantFoldSelectInstruction(C, V1, V2))
2035     return SC;        // Fold common cases
2036
2037   if (OnlyIfReducedTy == V1->getType())
2038     return nullptr;
2039
2040   Constant *ArgVec[] = { C, V1, V2 };
2041   ConstantExprKeyType Key(Instruction::Select, ArgVec);
2042
2043   LLVMContextImpl *pImpl = C->getContext().pImpl;
2044   return pImpl->ExprConstants.getOrCreate(V1->getType(), Key);
2045 }
2046
2047 Constant *ConstantExpr::getGetElementPtr(Type *Ty, Constant *C,
2048                                          ArrayRef<Value *> Idxs, bool InBounds,
2049                                          Type *OnlyIfReducedTy) {
2050   if (!Ty)
2051     Ty = cast<PointerType>(C->getType()->getScalarType())->getElementType();
2052   else
2053     assert(
2054         Ty ==
2055         cast<PointerType>(C->getType()->getScalarType())->getContainedType(0u));
2056
2057   if (Constant *FC = ConstantFoldGetElementPtr(Ty, C, InBounds, Idxs))
2058     return FC;          // Fold a few common cases.
2059
2060   // Get the result type of the getelementptr!
2061   Type *DestTy = GetElementPtrInst::getIndexedType(Ty, Idxs);
2062   assert(DestTy && "GEP indices invalid!");
2063   unsigned AS = C->getType()->getPointerAddressSpace();
2064   Type *ReqTy = DestTy->getPointerTo(AS);
2065   if (VectorType *VecTy = dyn_cast<VectorType>(C->getType()))
2066     ReqTy = VectorType::get(ReqTy, VecTy->getNumElements());
2067
2068   if (OnlyIfReducedTy == ReqTy)
2069     return nullptr;
2070
2071   // Look up the constant in the table first to ensure uniqueness
2072   std::vector<Constant*> ArgVec;
2073   ArgVec.reserve(1 + Idxs.size());
2074   ArgVec.push_back(C);
2075   for (unsigned i = 0, e = Idxs.size(); i != e; ++i) {
2076     assert(Idxs[i]->getType()->isVectorTy() == ReqTy->isVectorTy() &&
2077            "getelementptr index type missmatch");
2078     assert((!Idxs[i]->getType()->isVectorTy() ||
2079             ReqTy->getVectorNumElements() ==
2080             Idxs[i]->getType()->getVectorNumElements()) &&
2081            "getelementptr index type missmatch");
2082     ArgVec.push_back(cast<Constant>(Idxs[i]));
2083   }
2084   const ConstantExprKeyType Key(Instruction::GetElementPtr, ArgVec, 0,
2085                                 InBounds ? GEPOperator::IsInBounds : 0, None,
2086                                 Ty);
2087
2088   LLVMContextImpl *pImpl = C->getContext().pImpl;
2089   return pImpl->ExprConstants.getOrCreate(ReqTy, Key);
2090 }
2091
2092 Constant *ConstantExpr::getICmp(unsigned short pred, Constant *LHS,
2093                                 Constant *RHS, bool OnlyIfReduced) {
2094   assert(LHS->getType() == RHS->getType());
2095   assert(pred >= ICmpInst::FIRST_ICMP_PREDICATE && 
2096          pred <= ICmpInst::LAST_ICMP_PREDICATE && "Invalid ICmp Predicate");
2097
2098   if (Constant *FC = ConstantFoldCompareInstruction(pred, LHS, RHS))
2099     return FC;          // Fold a few common cases...
2100
2101   if (OnlyIfReduced)
2102     return nullptr;
2103
2104   // Look up the constant in the table first to ensure uniqueness
2105   Constant *ArgVec[] = { LHS, RHS };
2106   // Get the key type with both the opcode and predicate
2107   const ConstantExprKeyType Key(Instruction::ICmp, ArgVec, pred);
2108
2109   Type *ResultTy = Type::getInt1Ty(LHS->getContext());
2110   if (VectorType *VT = dyn_cast<VectorType>(LHS->getType()))
2111     ResultTy = VectorType::get(ResultTy, VT->getNumElements());
2112
2113   LLVMContextImpl *pImpl = LHS->getType()->getContext().pImpl;
2114   return pImpl->ExprConstants.getOrCreate(ResultTy, Key);
2115 }
2116
2117 Constant *ConstantExpr::getFCmp(unsigned short pred, Constant *LHS,
2118                                 Constant *RHS, bool OnlyIfReduced) {
2119   assert(LHS->getType() == RHS->getType());
2120   assert(pred <= FCmpInst::LAST_FCMP_PREDICATE && "Invalid FCmp Predicate");
2121
2122   if (Constant *FC = ConstantFoldCompareInstruction(pred, LHS, RHS))
2123     return FC;          // Fold a few common cases...
2124
2125   if (OnlyIfReduced)
2126     return nullptr;
2127
2128   // Look up the constant in the table first to ensure uniqueness
2129   Constant *ArgVec[] = { LHS, RHS };
2130   // Get the key type with both the opcode and predicate
2131   const ConstantExprKeyType Key(Instruction::FCmp, ArgVec, pred);
2132
2133   Type *ResultTy = Type::getInt1Ty(LHS->getContext());
2134   if (VectorType *VT = dyn_cast<VectorType>(LHS->getType()))
2135     ResultTy = VectorType::get(ResultTy, VT->getNumElements());
2136
2137   LLVMContextImpl *pImpl = LHS->getType()->getContext().pImpl;
2138   return pImpl->ExprConstants.getOrCreate(ResultTy, Key);
2139 }
2140
2141 Constant *ConstantExpr::getExtractElement(Constant *Val, Constant *Idx,
2142                                           Type *OnlyIfReducedTy) {
2143   assert(Val->getType()->isVectorTy() &&
2144          "Tried to create extractelement operation on non-vector type!");
2145   assert(Idx->getType()->isIntegerTy() &&
2146          "Extractelement index must be an integer type!");
2147
2148   if (Constant *FC = ConstantFoldExtractElementInstruction(Val, Idx))
2149     return FC;          // Fold a few common cases.
2150
2151   Type *ReqTy = Val->getType()->getVectorElementType();
2152   if (OnlyIfReducedTy == ReqTy)
2153     return nullptr;
2154
2155   // Look up the constant in the table first to ensure uniqueness
2156   Constant *ArgVec[] = { Val, Idx };
2157   const ConstantExprKeyType Key(Instruction::ExtractElement, ArgVec);
2158
2159   LLVMContextImpl *pImpl = Val->getContext().pImpl;
2160   return pImpl->ExprConstants.getOrCreate(ReqTy, Key);
2161 }
2162
2163 Constant *ConstantExpr::getInsertElement(Constant *Val, Constant *Elt,
2164                                          Constant *Idx, Type *OnlyIfReducedTy) {
2165   assert(Val->getType()->isVectorTy() &&
2166          "Tried to create insertelement operation on non-vector type!");
2167   assert(Elt->getType() == Val->getType()->getVectorElementType() &&
2168          "Insertelement types must match!");
2169   assert(Idx->getType()->isIntegerTy() &&
2170          "Insertelement index must be i32 type!");
2171
2172   if (Constant *FC = ConstantFoldInsertElementInstruction(Val, Elt, Idx))
2173     return FC;          // Fold a few common cases.
2174
2175   if (OnlyIfReducedTy == Val->getType())
2176     return nullptr;
2177
2178   // Look up the constant in the table first to ensure uniqueness
2179   Constant *ArgVec[] = { Val, Elt, Idx };
2180   const ConstantExprKeyType Key(Instruction::InsertElement, ArgVec);
2181
2182   LLVMContextImpl *pImpl = Val->getContext().pImpl;
2183   return pImpl->ExprConstants.getOrCreate(Val->getType(), Key);
2184 }
2185
2186 Constant *ConstantExpr::getShuffleVector(Constant *V1, Constant *V2,
2187                                          Constant *Mask, Type *OnlyIfReducedTy) {
2188   assert(ShuffleVectorInst::isValidOperands(V1, V2, Mask) &&
2189          "Invalid shuffle vector constant expr operands!");
2190
2191   if (Constant *FC = ConstantFoldShuffleVectorInstruction(V1, V2, Mask))
2192     return FC;          // Fold a few common cases.
2193
2194   unsigned NElts = Mask->getType()->getVectorNumElements();
2195   Type *EltTy = V1->getType()->getVectorElementType();
2196   Type *ShufTy = VectorType::get(EltTy, NElts);
2197
2198   if (OnlyIfReducedTy == ShufTy)
2199     return nullptr;
2200
2201   // Look up the constant in the table first to ensure uniqueness
2202   Constant *ArgVec[] = { V1, V2, Mask };
2203   const ConstantExprKeyType Key(Instruction::ShuffleVector, ArgVec);
2204
2205   LLVMContextImpl *pImpl = ShufTy->getContext().pImpl;
2206   return pImpl->ExprConstants.getOrCreate(ShufTy, Key);
2207 }
2208
2209 Constant *ConstantExpr::getInsertValue(Constant *Agg, Constant *Val,
2210                                        ArrayRef<unsigned> Idxs,
2211                                        Type *OnlyIfReducedTy) {
2212   assert(Agg->getType()->isFirstClassType() &&
2213          "Non-first-class type for constant insertvalue expression");
2214
2215   assert(ExtractValueInst::getIndexedType(Agg->getType(),
2216                                           Idxs) == Val->getType() &&
2217          "insertvalue indices invalid!");
2218   Type *ReqTy = Val->getType();
2219
2220   if (Constant *FC = ConstantFoldInsertValueInstruction(Agg, Val, Idxs))
2221     return FC;
2222
2223   if (OnlyIfReducedTy == ReqTy)
2224     return nullptr;
2225
2226   Constant *ArgVec[] = { Agg, Val };
2227   const ConstantExprKeyType Key(Instruction::InsertValue, ArgVec, 0, 0, Idxs);
2228
2229   LLVMContextImpl *pImpl = Agg->getContext().pImpl;
2230   return pImpl->ExprConstants.getOrCreate(ReqTy, Key);
2231 }
2232
2233 Constant *ConstantExpr::getExtractValue(Constant *Agg, ArrayRef<unsigned> Idxs,
2234                                         Type *OnlyIfReducedTy) {
2235   assert(Agg->getType()->isFirstClassType() &&
2236          "Tried to create extractelement operation on non-first-class type!");
2237
2238   Type *ReqTy = ExtractValueInst::getIndexedType(Agg->getType(), Idxs);
2239   (void)ReqTy;
2240   assert(ReqTy && "extractvalue indices invalid!");
2241
2242   assert(Agg->getType()->isFirstClassType() &&
2243          "Non-first-class type for constant extractvalue expression");
2244   if (Constant *FC = ConstantFoldExtractValueInstruction(Agg, Idxs))
2245     return FC;
2246
2247   if (OnlyIfReducedTy == ReqTy)
2248     return nullptr;
2249
2250   Constant *ArgVec[] = { Agg };
2251   const ConstantExprKeyType Key(Instruction::ExtractValue, ArgVec, 0, 0, Idxs);
2252
2253   LLVMContextImpl *pImpl = Agg->getContext().pImpl;
2254   return pImpl->ExprConstants.getOrCreate(ReqTy, Key);
2255 }
2256
2257 Constant *ConstantExpr::getNeg(Constant *C, bool HasNUW, bool HasNSW) {
2258   assert(C->getType()->isIntOrIntVectorTy() &&
2259          "Cannot NEG a nonintegral value!");
2260   return getSub(ConstantFP::getZeroValueForNegation(C->getType()),
2261                 C, HasNUW, HasNSW);
2262 }
2263
2264 Constant *ConstantExpr::getFNeg(Constant *C) {
2265   assert(C->getType()->isFPOrFPVectorTy() &&
2266          "Cannot FNEG a non-floating-point value!");
2267   return getFSub(ConstantFP::getZeroValueForNegation(C->getType()), C);
2268 }
2269
2270 Constant *ConstantExpr::getNot(Constant *C) {
2271   assert(C->getType()->isIntOrIntVectorTy() &&
2272          "Cannot NOT a nonintegral value!");
2273   return get(Instruction::Xor, C, Constant::getAllOnesValue(C->getType()));
2274 }
2275
2276 Constant *ConstantExpr::getAdd(Constant *C1, Constant *C2,
2277                                bool HasNUW, bool HasNSW) {
2278   unsigned Flags = (HasNUW ? OverflowingBinaryOperator::NoUnsignedWrap : 0) |
2279                    (HasNSW ? OverflowingBinaryOperator::NoSignedWrap   : 0);
2280   return get(Instruction::Add, C1, C2, Flags);
2281 }
2282
2283 Constant *ConstantExpr::getFAdd(Constant *C1, Constant *C2) {
2284   return get(Instruction::FAdd, C1, C2);
2285 }
2286
2287 Constant *ConstantExpr::getSub(Constant *C1, Constant *C2,
2288                                bool HasNUW, bool HasNSW) {
2289   unsigned Flags = (HasNUW ? OverflowingBinaryOperator::NoUnsignedWrap : 0) |
2290                    (HasNSW ? OverflowingBinaryOperator::NoSignedWrap   : 0);
2291   return get(Instruction::Sub, C1, C2, Flags);
2292 }
2293
2294 Constant *ConstantExpr::getFSub(Constant *C1, Constant *C2) {
2295   return get(Instruction::FSub, C1, C2);
2296 }
2297
2298 Constant *ConstantExpr::getMul(Constant *C1, Constant *C2,
2299                                bool HasNUW, bool HasNSW) {
2300   unsigned Flags = (HasNUW ? OverflowingBinaryOperator::NoUnsignedWrap : 0) |
2301                    (HasNSW ? OverflowingBinaryOperator::NoSignedWrap   : 0);
2302   return get(Instruction::Mul, C1, C2, Flags);
2303 }
2304
2305 Constant *ConstantExpr::getFMul(Constant *C1, Constant *C2) {
2306   return get(Instruction::FMul, C1, C2);
2307 }
2308
2309 Constant *ConstantExpr::getUDiv(Constant *C1, Constant *C2, bool isExact) {
2310   return get(Instruction::UDiv, C1, C2,
2311              isExact ? PossiblyExactOperator::IsExact : 0);
2312 }
2313
2314 Constant *ConstantExpr::getSDiv(Constant *C1, Constant *C2, bool isExact) {
2315   return get(Instruction::SDiv, C1, C2,
2316              isExact ? PossiblyExactOperator::IsExact : 0);
2317 }
2318
2319 Constant *ConstantExpr::getFDiv(Constant *C1, Constant *C2) {
2320   return get(Instruction::FDiv, C1, C2);
2321 }
2322
2323 Constant *ConstantExpr::getURem(Constant *C1, Constant *C2) {
2324   return get(Instruction::URem, C1, C2);
2325 }
2326
2327 Constant *ConstantExpr::getSRem(Constant *C1, Constant *C2) {
2328   return get(Instruction::SRem, C1, C2);
2329 }
2330
2331 Constant *ConstantExpr::getFRem(Constant *C1, Constant *C2) {
2332   return get(Instruction::FRem, C1, C2);
2333 }
2334
2335 Constant *ConstantExpr::getAnd(Constant *C1, Constant *C2) {
2336   return get(Instruction::And, C1, C2);
2337 }
2338
2339 Constant *ConstantExpr::getOr(Constant *C1, Constant *C2) {
2340   return get(Instruction::Or, C1, C2);
2341 }
2342
2343 Constant *ConstantExpr::getXor(Constant *C1, Constant *C2) {
2344   return get(Instruction::Xor, C1, C2);
2345 }
2346
2347 Constant *ConstantExpr::getShl(Constant *C1, Constant *C2,
2348                                bool HasNUW, bool HasNSW) {
2349   unsigned Flags = (HasNUW ? OverflowingBinaryOperator::NoUnsignedWrap : 0) |
2350                    (HasNSW ? OverflowingBinaryOperator::NoSignedWrap   : 0);
2351   return get(Instruction::Shl, C1, C2, Flags);
2352 }
2353
2354 Constant *ConstantExpr::getLShr(Constant *C1, Constant *C2, bool isExact) {
2355   return get(Instruction::LShr, C1, C2,
2356              isExact ? PossiblyExactOperator::IsExact : 0);
2357 }
2358
2359 Constant *ConstantExpr::getAShr(Constant *C1, Constant *C2, bool isExact) {
2360   return get(Instruction::AShr, C1, C2,
2361              isExact ? PossiblyExactOperator::IsExact : 0);
2362 }
2363
2364 /// getBinOpIdentity - Return the identity for the given binary operation,
2365 /// i.e. a constant C such that X op C = X and C op X = X for every X.  It
2366 /// returns null if the operator doesn't have an identity.
2367 Constant *ConstantExpr::getBinOpIdentity(unsigned Opcode, Type *Ty) {
2368   switch (Opcode) {
2369   default:
2370     // Doesn't have an identity.
2371     return nullptr;
2372
2373   case Instruction::Add:
2374   case Instruction::Or:
2375   case Instruction::Xor:
2376     return Constant::getNullValue(Ty);
2377
2378   case Instruction::Mul:
2379     return ConstantInt::get(Ty, 1);
2380
2381   case Instruction::And:
2382     return Constant::getAllOnesValue(Ty);
2383   }
2384 }
2385
2386 /// getBinOpAbsorber - Return the absorbing element for the given binary
2387 /// operation, i.e. a constant C such that X op C = C and C op X = C for
2388 /// every X.  For example, this returns zero for integer multiplication.
2389 /// It returns null if the operator doesn't have an absorbing element.
2390 Constant *ConstantExpr::getBinOpAbsorber(unsigned Opcode, Type *Ty) {
2391   switch (Opcode) {
2392   default:
2393     // Doesn't have an absorber.
2394     return nullptr;
2395
2396   case Instruction::Or:
2397     return Constant::getAllOnesValue(Ty);
2398
2399   case Instruction::And:
2400   case Instruction::Mul:
2401     return Constant::getNullValue(Ty);
2402   }
2403 }
2404
2405 // destroyConstant - Remove the constant from the constant table...
2406 //
2407 void ConstantExpr::destroyConstantImpl() {
2408   getType()->getContext().pImpl->ExprConstants.remove(this);
2409 }
2410
2411 const char *ConstantExpr::getOpcodeName() const {
2412   return Instruction::getOpcodeName(getOpcode());
2413 }
2414
2415 GetElementPtrConstantExpr::GetElementPtrConstantExpr(
2416     Type *SrcElementTy, Constant *C, ArrayRef<Constant *> IdxList, Type *DestTy)
2417     : ConstantExpr(DestTy, Instruction::GetElementPtr,
2418                    OperandTraits<GetElementPtrConstantExpr>::op_end(this) -
2419                        (IdxList.size() + 1),
2420                    IdxList.size() + 1),
2421       SrcElementTy(SrcElementTy) {
2422   Op<0>() = C;
2423   Use *OperandList = getOperandList();
2424   for (unsigned i = 0, E = IdxList.size(); i != E; ++i)
2425     OperandList[i+1] = IdxList[i];
2426 }
2427
2428 Type *GetElementPtrConstantExpr::getSourceElementType() const {
2429   return SrcElementTy;
2430 }
2431
2432 //===----------------------------------------------------------------------===//
2433 //                       ConstantData* implementations
2434
2435 void ConstantDataArray::anchor() {}
2436 void ConstantDataVector::anchor() {}
2437
2438 /// getElementType - Return the element type of the array/vector.
2439 Type *ConstantDataSequential::getElementType() const {
2440   return getType()->getElementType();
2441 }
2442
2443 StringRef ConstantDataSequential::getRawDataValues() const {
2444   return StringRef(DataElements, getNumElements()*getElementByteSize());
2445 }
2446
2447 /// isElementTypeCompatible - Return true if a ConstantDataSequential can be
2448 /// formed with a vector or array of the specified element type.
2449 /// ConstantDataArray only works with normal float and int types that are
2450 /// stored densely in memory, not with things like i42 or x86_f80.
2451 bool ConstantDataSequential::isElementTypeCompatible(Type *Ty) {
2452   if (Ty->isFloatTy() || Ty->isDoubleTy()) return true;
2453   if (auto *IT = dyn_cast<IntegerType>(Ty)) {
2454     switch (IT->getBitWidth()) {
2455     case 8:
2456     case 16:
2457     case 32:
2458     case 64:
2459       return true;
2460     default: break;
2461     }
2462   }
2463   return false;
2464 }
2465
2466 /// getNumElements - Return the number of elements in the array or vector.
2467 unsigned ConstantDataSequential::getNumElements() const {
2468   if (ArrayType *AT = dyn_cast<ArrayType>(getType()))
2469     return AT->getNumElements();
2470   return getType()->getVectorNumElements();
2471 }
2472
2473
2474 /// getElementByteSize - Return the size in bytes of the elements in the data.
2475 uint64_t ConstantDataSequential::getElementByteSize() const {
2476   return getElementType()->getPrimitiveSizeInBits()/8;
2477 }
2478
2479 /// getElementPointer - Return the start of the specified element.
2480 const char *ConstantDataSequential::getElementPointer(unsigned Elt) const {
2481   assert(Elt < getNumElements() && "Invalid Elt");
2482   return DataElements+Elt*getElementByteSize();
2483 }
2484
2485
2486 /// isAllZeros - return true if the array is empty or all zeros.
2487 static bool isAllZeros(StringRef Arr) {
2488   for (StringRef::iterator I = Arr.begin(), E = Arr.end(); I != E; ++I)
2489     if (*I != 0)
2490       return false;
2491   return true;
2492 }
2493
2494 /// getImpl - This is the underlying implementation of all of the
2495 /// ConstantDataSequential::get methods.  They all thunk down to here, providing
2496 /// the correct element type.  We take the bytes in as a StringRef because
2497 /// we *want* an underlying "char*" to avoid TBAA type punning violations.
2498 Constant *ConstantDataSequential::getImpl(StringRef Elements, Type *Ty) {
2499   assert(isElementTypeCompatible(Ty->getSequentialElementType()));
2500   // If the elements are all zero or there are no elements, return a CAZ, which
2501   // is more dense and canonical.
2502   if (isAllZeros(Elements))
2503     return ConstantAggregateZero::get(Ty);
2504
2505   // Do a lookup to see if we have already formed one of these.
2506   auto &Slot =
2507       *Ty->getContext()
2508            .pImpl->CDSConstants.insert(std::make_pair(Elements, nullptr))
2509            .first;
2510
2511   // The bucket can point to a linked list of different CDS's that have the same
2512   // body but different types.  For example, 0,0,0,1 could be a 4 element array
2513   // of i8, or a 1-element array of i32.  They'll both end up in the same
2514   /// StringMap bucket, linked up by their Next pointers.  Walk the list.
2515   ConstantDataSequential **Entry = &Slot.second;
2516   for (ConstantDataSequential *Node = *Entry; Node;
2517        Entry = &Node->Next, Node = *Entry)
2518     if (Node->getType() == Ty)
2519       return Node;
2520
2521   // Okay, we didn't get a hit.  Create a node of the right class, link it in,
2522   // and return it.
2523   if (isa<ArrayType>(Ty))
2524     return *Entry = new ConstantDataArray(Ty, Slot.first().data());
2525
2526   assert(isa<VectorType>(Ty));
2527   return *Entry = new ConstantDataVector(Ty, Slot.first().data());
2528 }
2529
2530 void ConstantDataSequential::destroyConstantImpl() {
2531   // Remove the constant from the StringMap.
2532   StringMap<ConstantDataSequential*> &CDSConstants = 
2533     getType()->getContext().pImpl->CDSConstants;
2534
2535   StringMap<ConstantDataSequential*>::iterator Slot =
2536     CDSConstants.find(getRawDataValues());
2537
2538   assert(Slot != CDSConstants.end() && "CDS not found in uniquing table");
2539
2540   ConstantDataSequential **Entry = &Slot->getValue();
2541
2542   // Remove the entry from the hash table.
2543   if (!(*Entry)->Next) {
2544     // If there is only one value in the bucket (common case) it must be this
2545     // entry, and removing the entry should remove the bucket completely.
2546     assert((*Entry) == this && "Hash mismatch in ConstantDataSequential");
2547     getContext().pImpl->CDSConstants.erase(Slot);
2548   } else {
2549     // Otherwise, there are multiple entries linked off the bucket, unlink the 
2550     // node we care about but keep the bucket around.
2551     for (ConstantDataSequential *Node = *Entry; ;
2552          Entry = &Node->Next, Node = *Entry) {
2553       assert(Node && "Didn't find entry in its uniquing hash table!");
2554       // If we found our entry, unlink it from the list and we're done.
2555       if (Node == this) {
2556         *Entry = Node->Next;
2557         break;
2558       }
2559     }
2560   }
2561
2562   // If we were part of a list, make sure that we don't delete the list that is
2563   // still owned by the uniquing map.
2564   Next = nullptr;
2565 }
2566
2567 /// get() constructors - Return a constant with array type with an element
2568 /// count and element type matching the ArrayRef passed in.  Note that this
2569 /// can return a ConstantAggregateZero object.
2570 Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<uint8_t> Elts) {
2571   Type *Ty = ArrayType::get(Type::getInt8Ty(Context), Elts.size());
2572   const char *Data = reinterpret_cast<const char *>(Elts.data());
2573   return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*1), Ty);
2574 }
2575 Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<uint16_t> Elts){
2576   Type *Ty = ArrayType::get(Type::getInt16Ty(Context), Elts.size());
2577   const char *Data = reinterpret_cast<const char *>(Elts.data());
2578   return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*2), Ty);
2579 }
2580 Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<uint32_t> Elts){
2581   Type *Ty = ArrayType::get(Type::getInt32Ty(Context), Elts.size());
2582   const char *Data = reinterpret_cast<const char *>(Elts.data());
2583   return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*4), Ty);
2584 }
2585 Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<uint64_t> Elts){
2586   Type *Ty = ArrayType::get(Type::getInt64Ty(Context), Elts.size());
2587   const char *Data = reinterpret_cast<const char *>(Elts.data());
2588   return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*8), Ty);
2589 }
2590 Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<float> Elts) {
2591   Type *Ty = ArrayType::get(Type::getFloatTy(Context), Elts.size());
2592   const char *Data = reinterpret_cast<const char *>(Elts.data());
2593   return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*4), Ty);
2594 }
2595 Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<double> Elts) {
2596   Type *Ty = ArrayType::get(Type::getDoubleTy(Context), Elts.size());
2597   const char *Data = reinterpret_cast<const char *>(Elts.data());
2598   return getImpl(StringRef(const_cast<char *>(Data), Elts.size() * 8), Ty);
2599 }
2600
2601 /// getFP() constructors - Return a constant with array type with an element
2602 /// count and element type of float with precision matching the number of
2603 /// bits in the ArrayRef passed in. (i.e. half for 16bits, float for 32bits,
2604 /// double for 64bits) Note that this can return a ConstantAggregateZero
2605 /// object.
2606 Constant *ConstantDataArray::getFP(LLVMContext &Context,
2607                                    ArrayRef<uint16_t> Elts) {
2608   Type *Ty = VectorType::get(Type::getHalfTy(Context), Elts.size());
2609   const char *Data = reinterpret_cast<const char *>(Elts.data());
2610   return getImpl(StringRef(const_cast<char *>(Data), Elts.size() * 2), Ty);
2611 }
2612 Constant *ConstantDataArray::getFP(LLVMContext &Context,
2613                                    ArrayRef<uint32_t> Elts) {
2614   Type *Ty = ArrayType::get(Type::getFloatTy(Context), Elts.size());
2615   const char *Data = reinterpret_cast<const char *>(Elts.data());
2616   return getImpl(StringRef(const_cast<char *>(Data), Elts.size() * 4), Ty);
2617 }
2618 Constant *ConstantDataArray::getFP(LLVMContext &Context,
2619                                    ArrayRef<uint64_t> Elts) {
2620   Type *Ty = ArrayType::get(Type::getDoubleTy(Context), Elts.size());
2621   const char *Data = reinterpret_cast<const char *>(Elts.data());
2622   return getImpl(StringRef(const_cast<char *>(Data), Elts.size() * 8), Ty);
2623 }
2624
2625 /// getString - This method constructs a CDS and initializes it with a text
2626 /// string. The default behavior (AddNull==true) causes a null terminator to
2627 /// be placed at the end of the array (increasing the length of the string by
2628 /// one more than the StringRef would normally indicate.  Pass AddNull=false
2629 /// to disable this behavior.
2630 Constant *ConstantDataArray::getString(LLVMContext &Context,
2631                                        StringRef Str, bool AddNull) {
2632   if (!AddNull) {
2633     const uint8_t *Data = reinterpret_cast<const uint8_t *>(Str.data());
2634     return get(Context, makeArrayRef(const_cast<uint8_t *>(Data),
2635                Str.size()));
2636   }
2637
2638   SmallVector<uint8_t, 64> ElementVals;
2639   ElementVals.append(Str.begin(), Str.end());
2640   ElementVals.push_back(0);
2641   return get(Context, ElementVals);
2642 }
2643
2644 /// get() constructors - Return a constant with vector type with an element
2645 /// count and element type matching the ArrayRef passed in.  Note that this
2646 /// can return a ConstantAggregateZero object.
2647 Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint8_t> Elts){
2648   Type *Ty = VectorType::get(Type::getInt8Ty(Context), Elts.size());
2649   const char *Data = reinterpret_cast<const char *>(Elts.data());
2650   return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*1), Ty);
2651 }
2652 Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint16_t> Elts){
2653   Type *Ty = VectorType::get(Type::getInt16Ty(Context), Elts.size());
2654   const char *Data = reinterpret_cast<const char *>(Elts.data());
2655   return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*2), Ty);
2656 }
2657 Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint32_t> Elts){
2658   Type *Ty = VectorType::get(Type::getInt32Ty(Context), Elts.size());
2659   const char *Data = reinterpret_cast<const char *>(Elts.data());
2660   return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*4), Ty);
2661 }
2662 Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint64_t> Elts){
2663   Type *Ty = VectorType::get(Type::getInt64Ty(Context), Elts.size());
2664   const char *Data = reinterpret_cast<const char *>(Elts.data());
2665   return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*8), Ty);
2666 }
2667 Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<float> Elts) {
2668   Type *Ty = VectorType::get(Type::getFloatTy(Context), Elts.size());
2669   const char *Data = reinterpret_cast<const char *>(Elts.data());
2670   return getImpl(StringRef(const_cast<char *>(Data), Elts.size()*4), Ty);
2671 }
2672 Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<double> Elts) {
2673   Type *Ty = VectorType::get(Type::getDoubleTy(Context), Elts.size());
2674   const char *Data = reinterpret_cast<const char *>(Elts.data());
2675   return getImpl(StringRef(const_cast<char *>(Data), Elts.size() * 8), Ty);
2676 }
2677
2678 /// getFP() constructors - Return a constant with vector type with an element
2679 /// count and element type of float with the precision matching the number of
2680 /// bits in the ArrayRef passed in.  (i.e. half for 16bits, float for 32bits,
2681 /// double for 64bits) Note that this can return a ConstantAggregateZero
2682 /// object.
2683 Constant *ConstantDataVector::getFP(LLVMContext &Context,
2684                                     ArrayRef<uint16_t> Elts) {
2685   Type *Ty = VectorType::get(Type::getHalfTy(Context), Elts.size());
2686   const char *Data = reinterpret_cast<const char *>(Elts.data());
2687   return getImpl(StringRef(const_cast<char *>(Data), Elts.size() * 2), Ty);
2688 }
2689 Constant *ConstantDataVector::getFP(LLVMContext &Context,
2690                                     ArrayRef<uint32_t> Elts) {
2691   Type *Ty = VectorType::get(Type::getFloatTy(Context), Elts.size());
2692   const char *Data = reinterpret_cast<const char *>(Elts.data());
2693   return getImpl(StringRef(const_cast<char *>(Data), Elts.size() * 4), Ty);
2694 }
2695 Constant *ConstantDataVector::getFP(LLVMContext &Context,
2696                                     ArrayRef<uint64_t> Elts) {
2697   Type *Ty = VectorType::get(Type::getDoubleTy(Context), Elts.size());
2698   const char *Data = reinterpret_cast<const char *>(Elts.data());
2699   return getImpl(StringRef(const_cast<char *>(Data), Elts.size() * 8), Ty);
2700 }
2701
2702 Constant *ConstantDataVector::getSplat(unsigned NumElts, Constant *V) {
2703   assert(isElementTypeCompatible(V->getType()) &&
2704          "Element type not compatible with ConstantData");
2705   if (ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
2706     if (CI->getType()->isIntegerTy(8)) {
2707       SmallVector<uint8_t, 16> Elts(NumElts, CI->getZExtValue());
2708       return get(V->getContext(), Elts);
2709     }
2710     if (CI->getType()->isIntegerTy(16)) {
2711       SmallVector<uint16_t, 16> Elts(NumElts, CI->getZExtValue());
2712       return get(V->getContext(), Elts);
2713     }
2714     if (CI->getType()->isIntegerTy(32)) {
2715       SmallVector<uint32_t, 16> Elts(NumElts, CI->getZExtValue());
2716       return get(V->getContext(), Elts);
2717     }
2718     assert(CI->getType()->isIntegerTy(64) && "Unsupported ConstantData type");
2719     SmallVector<uint64_t, 16> Elts(NumElts, CI->getZExtValue());
2720     return get(V->getContext(), Elts);
2721   }
2722
2723   if (ConstantFP *CFP = dyn_cast<ConstantFP>(V)) {
2724     if (CFP->getType()->isFloatTy()) {
2725       SmallVector<uint32_t, 16> Elts(
2726           NumElts, CFP->getValueAPF().bitcastToAPInt().getLimitedValue());
2727       return getFP(V->getContext(), Elts);
2728     }
2729     if (CFP->getType()->isDoubleTy()) {
2730       SmallVector<uint64_t, 16> Elts(
2731           NumElts, CFP->getValueAPF().bitcastToAPInt().getLimitedValue());
2732       return getFP(V->getContext(), Elts);
2733     }
2734   }
2735   return ConstantVector::getSplat(NumElts, V);
2736 }
2737
2738
2739 /// getElementAsInteger - If this is a sequential container of integers (of
2740 /// any size), return the specified element in the low bits of a uint64_t.
2741 uint64_t ConstantDataSequential::getElementAsInteger(unsigned Elt) const {
2742   assert(isa<IntegerType>(getElementType()) &&
2743          "Accessor can only be used when element is an integer");
2744   const char *EltPtr = getElementPointer(Elt);
2745
2746   // The data is stored in host byte order, make sure to cast back to the right
2747   // type to load with the right endianness.
2748   switch (getElementType()->getIntegerBitWidth()) {
2749   default: llvm_unreachable("Invalid bitwidth for CDS");
2750   case 8:
2751     return *const_cast<uint8_t *>(reinterpret_cast<const uint8_t *>(EltPtr));
2752   case 16:
2753     return *const_cast<uint16_t *>(reinterpret_cast<const uint16_t *>(EltPtr));
2754   case 32:
2755     return *const_cast<uint32_t *>(reinterpret_cast<const uint32_t *>(EltPtr));
2756   case 64:
2757     return *const_cast<uint64_t *>(reinterpret_cast<const uint64_t *>(EltPtr));
2758   }
2759 }
2760
2761 /// getElementAsAPFloat - If this is a sequential container of floating point
2762 /// type, return the specified element as an APFloat.
2763 APFloat ConstantDataSequential::getElementAsAPFloat(unsigned Elt) const {
2764   const char *EltPtr = getElementPointer(Elt);
2765
2766   switch (getElementType()->getTypeID()) {
2767   default:
2768     llvm_unreachable("Accessor can only be used when element is float/double!");
2769   case Type::FloatTyID: {
2770     auto EltVal = *reinterpret_cast<const uint32_t *>(EltPtr);
2771     return APFloat(APFloat::IEEEsingle, APInt(32, EltVal));
2772   }
2773   case Type::DoubleTyID: {
2774     auto EltVal = *reinterpret_cast<const uint64_t *>(EltPtr);
2775     return APFloat(APFloat::IEEEdouble, APInt(64, EltVal));
2776   }
2777   }
2778 }
2779
2780 /// getElementAsFloat - If this is an sequential container of floats, return
2781 /// the specified element as a float.
2782 float ConstantDataSequential::getElementAsFloat(unsigned Elt) const {
2783   assert(getElementType()->isFloatTy() &&
2784          "Accessor can only be used when element is a 'float'");
2785   const float *EltPtr = reinterpret_cast<const float *>(getElementPointer(Elt));
2786   return *const_cast<float *>(EltPtr);
2787 }
2788
2789 /// getElementAsDouble - If this is an sequential container of doubles, return
2790 /// the specified element as a float.
2791 double ConstantDataSequential::getElementAsDouble(unsigned Elt) const {
2792   assert(getElementType()->isDoubleTy() &&
2793          "Accessor can only be used when element is a 'float'");
2794   const double *EltPtr =
2795       reinterpret_cast<const double *>(getElementPointer(Elt));
2796   return *const_cast<double *>(EltPtr);
2797 }
2798
2799 /// getElementAsConstant - Return a Constant for a specified index's element.
2800 /// Note that this has to compute a new constant to return, so it isn't as
2801 /// efficient as getElementAsInteger/Float/Double.
2802 Constant *ConstantDataSequential::getElementAsConstant(unsigned Elt) const {
2803   if (getElementType()->isFloatTy() || getElementType()->isDoubleTy())
2804     return ConstantFP::get(getContext(), getElementAsAPFloat(Elt));
2805
2806   return ConstantInt::get(getElementType(), getElementAsInteger(Elt));
2807 }
2808
2809 /// isString - This method returns true if this is an array of i8.
2810 bool ConstantDataSequential::isString() const {
2811   return isa<ArrayType>(getType()) && getElementType()->isIntegerTy(8);
2812 }
2813
2814 /// isCString - This method returns true if the array "isString", ends with a
2815 /// nul byte, and does not contains any other nul bytes.
2816 bool ConstantDataSequential::isCString() const {
2817   if (!isString())
2818     return false;
2819
2820   StringRef Str = getAsString();
2821
2822   // The last value must be nul.
2823   if (Str.back() != 0) return false;
2824
2825   // Other elements must be non-nul.
2826   return Str.drop_back().find(0) == StringRef::npos;
2827 }
2828
2829 /// getSplatValue - If this is a splat constant, meaning that all of the
2830 /// elements have the same value, return that value. Otherwise return nullptr.
2831 Constant *ConstantDataVector::getSplatValue() const {
2832   const char *Base = getRawDataValues().data();
2833
2834   // Compare elements 1+ to the 0'th element.
2835   unsigned EltSize = getElementByteSize();
2836   for (unsigned i = 1, e = getNumElements(); i != e; ++i)
2837     if (memcmp(Base, Base+i*EltSize, EltSize))
2838       return nullptr;
2839
2840   // If they're all the same, return the 0th one as a representative.
2841   return getElementAsConstant(0);
2842 }
2843
2844 //===----------------------------------------------------------------------===//
2845 //                handleOperandChange implementations
2846
2847 /// Update this constant array to change uses of
2848 /// 'From' to be uses of 'To'.  This must update the uniquing data structures
2849 /// etc.
2850 ///
2851 /// Note that we intentionally replace all uses of From with To here.  Consider
2852 /// a large array that uses 'From' 1000 times.  By handling this case all here,
2853 /// ConstantArray::handleOperandChange is only invoked once, and that
2854 /// single invocation handles all 1000 uses.  Handling them one at a time would
2855 /// work, but would be really slow because it would have to unique each updated
2856 /// array instance.
2857 ///
2858 void Constant::handleOperandChange(Value *From, Value *To, Use *U) {
2859   Value *Replacement = nullptr;
2860   switch (getValueID()) {
2861   default:
2862     llvm_unreachable("Not a constant!");
2863 #define HANDLE_CONSTANT(Name)                                                  \
2864   case Value::Name##Val:                                                       \
2865     Replacement = cast<Name>(this)->handleOperandChangeImpl(From, To, U);      \
2866     break;
2867 #include "llvm/IR/Value.def"
2868   }
2869
2870   // If handleOperandChangeImpl returned nullptr, then it handled
2871   // replacing itself and we don't want to delete or replace anything else here.
2872   if (!Replacement)
2873     return;
2874
2875   // I do need to replace this with an existing value.
2876   assert(Replacement != this && "I didn't contain From!");
2877
2878   // Everyone using this now uses the replacement.
2879   replaceAllUsesWith(Replacement);
2880
2881   // Delete the old constant!
2882   destroyConstant();
2883 }
2884
2885 Value *ConstantInt::handleOperandChangeImpl(Value *From, Value *To, Use *U) {
2886   llvm_unreachable("Unsupported class for handleOperandChange()!");
2887 }
2888
2889 Value *ConstantFP::handleOperandChangeImpl(Value *From, Value *To, Use *U) {
2890   llvm_unreachable("Unsupported class for handleOperandChange()!");
2891 }
2892
2893 Value *ConstantTokenNone::handleOperandChangeImpl(Value *From, Value *To,
2894                                                   Use *U) {
2895   llvm_unreachable("Unsupported class for handleOperandChange()!");
2896 }
2897
2898 Value *UndefValue::handleOperandChangeImpl(Value *From, Value *To, Use *U) {
2899   llvm_unreachable("Unsupported class for handleOperandChange()!");
2900 }
2901
2902 Value *ConstantPointerNull::handleOperandChangeImpl(Value *From, Value *To,
2903                                                     Use *U) {
2904   llvm_unreachable("Unsupported class for handleOperandChange()!");
2905 }
2906
2907 Value *ConstantAggregateZero::handleOperandChangeImpl(Value *From, Value *To,
2908                                                       Use *U) {
2909   llvm_unreachable("Unsupported class for handleOperandChange()!");
2910 }
2911
2912 Value *ConstantDataSequential::handleOperandChangeImpl(Value *From, Value *To,
2913                                                        Use *U) {
2914   llvm_unreachable("Unsupported class for handleOperandChange()!");
2915 }
2916
2917 Value *ConstantArray::handleOperandChangeImpl(Value *From, Value *To, Use *U) {
2918   assert(isa<Constant>(To) && "Cannot make Constant refer to non-constant!");
2919   Constant *ToC = cast<Constant>(To);
2920
2921   SmallVector<Constant*, 8> Values;
2922   Values.reserve(getNumOperands());  // Build replacement array.
2923
2924   // Fill values with the modified operands of the constant array.  Also,
2925   // compute whether this turns into an all-zeros array.
2926   unsigned NumUpdated = 0;
2927
2928   // Keep track of whether all the values in the array are "ToC".
2929   bool AllSame = true;
2930   Use *OperandList = getOperandList();
2931   for (Use *O = OperandList, *E = OperandList+getNumOperands(); O != E; ++O) {
2932     Constant *Val = cast<Constant>(O->get());
2933     if (Val == From) {
2934       Val = ToC;
2935       ++NumUpdated;
2936     }
2937     Values.push_back(Val);
2938     AllSame &= Val == ToC;
2939   }
2940
2941   if (AllSame && ToC->isNullValue())
2942     return ConstantAggregateZero::get(getType());
2943
2944   if (AllSame && isa<UndefValue>(ToC))
2945     return UndefValue::get(getType());
2946
2947   // Check for any other type of constant-folding.
2948   if (Constant *C = getImpl(getType(), Values))
2949     return C;
2950
2951   // Update to the new value.
2952   return getContext().pImpl->ArrayConstants.replaceOperandsInPlace(
2953       Values, this, From, ToC, NumUpdated, U - OperandList);
2954 }
2955
2956 Value *ConstantStruct::handleOperandChangeImpl(Value *From, Value *To, Use *U) {
2957   assert(isa<Constant>(To) && "Cannot make Constant refer to non-constant!");
2958   Constant *ToC = cast<Constant>(To);
2959
2960   Use *OperandList = getOperandList();
2961   unsigned OperandToUpdate = U-OperandList;
2962   assert(getOperand(OperandToUpdate) == From && "ReplaceAllUsesWith broken!");
2963
2964   SmallVector<Constant*, 8> Values;
2965   Values.reserve(getNumOperands());  // Build replacement struct.
2966
2967   // Fill values with the modified operands of the constant struct.  Also,
2968   // compute whether this turns into an all-zeros struct.
2969   bool isAllZeros = false;
2970   bool isAllUndef = false;
2971   if (ToC->isNullValue()) {
2972     isAllZeros = true;
2973     for (Use *O = OperandList, *E = OperandList+getNumOperands(); O != E; ++O) {
2974       Constant *Val = cast<Constant>(O->get());
2975       Values.push_back(Val);
2976       if (isAllZeros) isAllZeros = Val->isNullValue();
2977     }
2978   } else if (isa<UndefValue>(ToC)) {
2979     isAllUndef = true;
2980     for (Use *O = OperandList, *E = OperandList+getNumOperands(); O != E; ++O) {
2981       Constant *Val = cast<Constant>(O->get());
2982       Values.push_back(Val);
2983       if (isAllUndef) isAllUndef = isa<UndefValue>(Val);
2984     }
2985   } else {
2986     for (Use *O = OperandList, *E = OperandList + getNumOperands(); O != E; ++O)
2987       Values.push_back(cast<Constant>(O->get()));
2988   }
2989   Values[OperandToUpdate] = ToC;
2990
2991   if (isAllZeros)
2992     return ConstantAggregateZero::get(getType());
2993
2994   if (isAllUndef)
2995     return UndefValue::get(getType());
2996
2997   // Update to the new value.
2998   return getContext().pImpl->StructConstants.replaceOperandsInPlace(
2999       Values, this, From, ToC);
3000 }
3001
3002 Value *ConstantVector::handleOperandChangeImpl(Value *From, Value *To, Use *U) {
3003   assert(isa<Constant>(To) && "Cannot make Constant refer to non-constant!");
3004   Constant *ToC = cast<Constant>(To);
3005
3006   SmallVector<Constant*, 8> Values;
3007   Values.reserve(getNumOperands());  // Build replacement array...
3008   unsigned NumUpdated = 0;
3009   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
3010     Constant *Val = getOperand(i);
3011     if (Val == From) {
3012       ++NumUpdated;
3013       Val = ToC;
3014     }
3015     Values.push_back(Val);
3016   }
3017
3018   if (Constant *C = getImpl(Values))
3019     return C;
3020
3021   // Update to the new value.
3022   Use *OperandList = getOperandList();
3023   return getContext().pImpl->VectorConstants.replaceOperandsInPlace(
3024       Values, this, From, ToC, NumUpdated, U - OperandList);
3025 }
3026
3027 Value *ConstantExpr::handleOperandChangeImpl(Value *From, Value *ToV, Use *U) {
3028   assert(isa<Constant>(ToV) && "Cannot make Constant refer to non-constant!");
3029   Constant *To = cast<Constant>(ToV);
3030
3031   SmallVector<Constant*, 8> NewOps;
3032   unsigned NumUpdated = 0;
3033   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
3034     Constant *Op = getOperand(i);
3035     if (Op == From) {
3036       ++NumUpdated;
3037       Op = To;
3038     }
3039     NewOps.push_back(Op);
3040   }
3041   assert(NumUpdated && "I didn't contain From!");
3042
3043   if (Constant *C = getWithOperands(NewOps, getType(), true))
3044     return C;
3045
3046   // Update to the new value.
3047   Use *OperandList = getOperandList();
3048   return getContext().pImpl->ExprConstants.replaceOperandsInPlace(
3049       NewOps, this, From, To, NumUpdated, U - OperandList);
3050 }
3051
3052 Instruction *ConstantExpr::getAsInstruction() {
3053   SmallVector<Value *, 4> ValueOperands(op_begin(), op_end());
3054   ArrayRef<Value*> Ops(ValueOperands);
3055
3056   switch (getOpcode()) {
3057   case Instruction::Trunc:
3058   case Instruction::ZExt:
3059   case Instruction::SExt:
3060   case Instruction::FPTrunc:
3061   case Instruction::FPExt:
3062   case Instruction::UIToFP:
3063   case Instruction::SIToFP:
3064   case Instruction::FPToUI:
3065   case Instruction::FPToSI:
3066   case Instruction::PtrToInt:
3067   case Instruction::IntToPtr:
3068   case Instruction::BitCast:
3069   case Instruction::AddrSpaceCast:
3070     return CastInst::Create((Instruction::CastOps)getOpcode(),
3071                             Ops[0], getType());
3072   case Instruction::Select:
3073     return SelectInst::Create(Ops[0], Ops[1], Ops[2]);
3074   case Instruction::InsertElement:
3075     return InsertElementInst::Create(Ops[0], Ops[1], Ops[2]);
3076   case Instruction::ExtractElement:
3077     return ExtractElementInst::Create(Ops[0], Ops[1]);
3078   case Instruction::InsertValue:
3079     return InsertValueInst::Create(Ops[0], Ops[1], getIndices());
3080   case Instruction::ExtractValue:
3081     return ExtractValueInst::Create(Ops[0], getIndices());
3082   case Instruction::ShuffleVector:
3083     return new ShuffleVectorInst(Ops[0], Ops[1], Ops[2]);
3084
3085   case Instruction::GetElementPtr: {
3086     const auto *GO = cast<GEPOperator>(this);
3087     if (GO->isInBounds())
3088       return GetElementPtrInst::CreateInBounds(GO->getSourceElementType(),
3089                                                Ops[0], Ops.slice(1));
3090     return GetElementPtrInst::Create(GO->getSourceElementType(), Ops[0],
3091                                      Ops.slice(1));
3092   }
3093   case Instruction::ICmp:
3094   case Instruction::FCmp:
3095     return CmpInst::Create((Instruction::OtherOps)getOpcode(),
3096                            getPredicate(), Ops[0], Ops[1]);
3097
3098   default:
3099     assert(getNumOperands() == 2 && "Must be binary operator?");
3100     BinaryOperator *BO =
3101       BinaryOperator::Create((Instruction::BinaryOps)getOpcode(),
3102                              Ops[0], Ops[1]);
3103     if (isa<OverflowingBinaryOperator>(BO)) {
3104       BO->setHasNoUnsignedWrap(SubclassOptionalData &
3105                                OverflowingBinaryOperator::NoUnsignedWrap);
3106       BO->setHasNoSignedWrap(SubclassOptionalData &
3107                              OverflowingBinaryOperator::NoSignedWrap);
3108     }
3109     if (isa<PossiblyExactOperator>(BO))
3110       BO->setIsExact(SubclassOptionalData & PossiblyExactOperator::IsExact);
3111     return BO;
3112   }
3113 }