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