Home | History | Annotate | Download | only in VMCore
      1 //===- ConstantFold.cpp - LLVM constant folder ----------------------------===//
      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 folding of constants for LLVM.  This implements the
     11 // (internal) ConstantFold.h interface, which is used by the
     12 // ConstantExpr::get* methods to automatically fold constants when possible.
     13 //
     14 // The current constant folding implementation is implemented in two pieces: the
     15 // pieces that don't need TargetData, and the pieces that do. This is to avoid
     16 // a dependence in VMCore on Target.
     17 //
     18 //===----------------------------------------------------------------------===//
     19 
     20 #include "ConstantFold.h"
     21 #include "llvm/Constants.h"
     22 #include "llvm/Instructions.h"
     23 #include "llvm/DerivedTypes.h"
     24 #include "llvm/Function.h"
     25 #include "llvm/GlobalAlias.h"
     26 #include "llvm/GlobalVariable.h"
     27 #include "llvm/Operator.h"
     28 #include "llvm/ADT/SmallVector.h"
     29 #include "llvm/Support/Compiler.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 <limits>
     35 using namespace llvm;
     36 
     37 //===----------------------------------------------------------------------===//
     38 //                ConstantFold*Instruction Implementations
     39 //===----------------------------------------------------------------------===//
     40 
     41 /// BitCastConstantVector - Convert the specified ConstantVector node to the
     42 /// specified vector type.  At this point, we know that the elements of the
     43 /// input vector constant are all simple integer or FP values.
     44 static Constant *BitCastConstantVector(ConstantVector *CV,
     45                                        VectorType *DstTy) {
     46 
     47   if (CV->isAllOnesValue()) return Constant::getAllOnesValue(DstTy);
     48   if (CV->isNullValue()) return Constant::getNullValue(DstTy);
     49 
     50   // If this cast changes element count then we can't handle it here:
     51   // doing so requires endianness information.  This should be handled by
     52   // Analysis/ConstantFolding.cpp
     53   unsigned NumElts = DstTy->getNumElements();
     54   if (NumElts != CV->getNumOperands())
     55     return 0;
     56 
     57   // Check to verify that all elements of the input are simple.
     58   for (unsigned i = 0; i != NumElts; ++i) {
     59     if (!isa<ConstantInt>(CV->getOperand(i)) &&
     60         !isa<ConstantFP>(CV->getOperand(i)))
     61       return 0;
     62   }
     63 
     64   // Bitcast each element now.
     65   std::vector<Constant*> Result;
     66   Type *DstEltTy = DstTy->getElementType();
     67   for (unsigned i = 0; i != NumElts; ++i)
     68     Result.push_back(ConstantExpr::getBitCast(CV->getOperand(i),
     69                                                     DstEltTy));
     70   return ConstantVector::get(Result);
     71 }
     72 
     73 /// This function determines which opcode to use to fold two constant cast
     74 /// expressions together. It uses CastInst::isEliminableCastPair to determine
     75 /// the opcode. Consequently its just a wrapper around that function.
     76 /// @brief Determine if it is valid to fold a cast of a cast
     77 static unsigned
     78 foldConstantCastPair(
     79   unsigned opc,          ///< opcode of the second cast constant expression
     80   ConstantExpr *Op,      ///< the first cast constant expression
     81   Type *DstTy      ///< desintation type of the first cast
     82 ) {
     83   assert(Op && Op->isCast() && "Can't fold cast of cast without a cast!");
     84   assert(DstTy && DstTy->isFirstClassType() && "Invalid cast destination type");
     85   assert(CastInst::isCast(opc) && "Invalid cast opcode");
     86 
     87   // The the types and opcodes for the two Cast constant expressions
     88   Type *SrcTy = Op->getOperand(0)->getType();
     89   Type *MidTy = Op->getType();
     90   Instruction::CastOps firstOp = Instruction::CastOps(Op->getOpcode());
     91   Instruction::CastOps secondOp = Instruction::CastOps(opc);
     92 
     93   // Let CastInst::isEliminableCastPair do the heavy lifting.
     94   return CastInst::isEliminableCastPair(firstOp, secondOp, SrcTy, MidTy, DstTy,
     95                                         Type::getInt64Ty(DstTy->getContext()));
     96 }
     97 
     98 static Constant *FoldBitCast(Constant *V, Type *DestTy) {
     99   Type *SrcTy = V->getType();
    100   if (SrcTy == DestTy)
    101     return V; // no-op cast
    102 
    103   // Check to see if we are casting a pointer to an aggregate to a pointer to
    104   // the first element.  If so, return the appropriate GEP instruction.
    105   if (PointerType *PTy = dyn_cast<PointerType>(V->getType()))
    106     if (PointerType *DPTy = dyn_cast<PointerType>(DestTy))
    107       if (PTy->getAddressSpace() == DPTy->getAddressSpace()) {
    108         SmallVector<Value*, 8> IdxList;
    109         Value *Zero =
    110           Constant::getNullValue(Type::getInt32Ty(DPTy->getContext()));
    111         IdxList.push_back(Zero);
    112         Type *ElTy = PTy->getElementType();
    113         while (ElTy != DPTy->getElementType()) {
    114           if (StructType *STy = dyn_cast<StructType>(ElTy)) {
    115             if (STy->getNumElements() == 0) break;
    116             ElTy = STy->getElementType(0);
    117             IdxList.push_back(Zero);
    118           } else if (SequentialType *STy =
    119                      dyn_cast<SequentialType>(ElTy)) {
    120             if (ElTy->isPointerTy()) break;  // Can't index into pointers!
    121             ElTy = STy->getElementType();
    122             IdxList.push_back(Zero);
    123           } else {
    124             break;
    125           }
    126         }
    127 
    128         if (ElTy == DPTy->getElementType())
    129           // This GEP is inbounds because all indices are zero.
    130           return ConstantExpr::getInBoundsGetElementPtr(V, IdxList);
    131       }
    132 
    133   // Handle casts from one vector constant to another.  We know that the src
    134   // and dest type have the same size (otherwise its an illegal cast).
    135   if (VectorType *DestPTy = dyn_cast<VectorType>(DestTy)) {
    136     if (VectorType *SrcTy = dyn_cast<VectorType>(V->getType())) {
    137       assert(DestPTy->getBitWidth() == SrcTy->getBitWidth() &&
    138              "Not cast between same sized vectors!");
    139       SrcTy = NULL;
    140       // First, check for null.  Undef is already handled.
    141       if (isa<ConstantAggregateZero>(V))
    142         return Constant::getNullValue(DestTy);
    143 
    144       if (ConstantVector *CV = dyn_cast<ConstantVector>(V))
    145         return BitCastConstantVector(CV, DestPTy);
    146     }
    147 
    148     // Canonicalize scalar-to-vector bitcasts into vector-to-vector bitcasts
    149     // This allows for other simplifications (although some of them
    150     // can only be handled by Analysis/ConstantFolding.cpp).
    151     if (isa<ConstantInt>(V) || isa<ConstantFP>(V))
    152       return ConstantExpr::getBitCast(ConstantVector::get(V), DestPTy);
    153   }
    154 
    155   // Finally, implement bitcast folding now.   The code below doesn't handle
    156   // bitcast right.
    157   if (isa<ConstantPointerNull>(V))  // ptr->ptr cast.
    158     return ConstantPointerNull::get(cast<PointerType>(DestTy));
    159 
    160   // Handle integral constant input.
    161   if (ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
    162     if (DestTy->isIntegerTy())
    163       // Integral -> Integral. This is a no-op because the bit widths must
    164       // be the same. Consequently, we just fold to V.
    165       return V;
    166 
    167     if (DestTy->isFloatingPointTy())
    168       return ConstantFP::get(DestTy->getContext(),
    169                              APFloat(CI->getValue(),
    170                                      !DestTy->isPPC_FP128Ty()));
    171 
    172     // Otherwise, can't fold this (vector?)
    173     return 0;
    174   }
    175 
    176   // Handle ConstantFP input: FP -> Integral.
    177   if (ConstantFP *FP = dyn_cast<ConstantFP>(V))
    178     return ConstantInt::get(FP->getContext(),
    179                             FP->getValueAPF().bitcastToAPInt());
    180 
    181   return 0;
    182 }
    183 
    184 
    185 /// ExtractConstantBytes - V is an integer constant which only has a subset of
    186 /// its bytes used.  The bytes used are indicated by ByteStart (which is the
    187 /// first byte used, counting from the least significant byte) and ByteSize,
    188 /// which is the number of bytes used.
    189 ///
    190 /// This function analyzes the specified constant to see if the specified byte
    191 /// range can be returned as a simplified constant.  If so, the constant is
    192 /// returned, otherwise null is returned.
    193 ///
    194 static Constant *ExtractConstantBytes(Constant *C, unsigned ByteStart,
    195                                       unsigned ByteSize) {
    196   assert(C->getType()->isIntegerTy() &&
    197          (cast<IntegerType>(C->getType())->getBitWidth() & 7) == 0 &&
    198          "Non-byte sized integer input");
    199   unsigned CSize = cast<IntegerType>(C->getType())->getBitWidth()/8;
    200   assert(ByteSize && "Must be accessing some piece");
    201   assert(ByteStart+ByteSize <= CSize && "Extracting invalid piece from input");
    202   assert(ByteSize != CSize && "Should not extract everything");
    203 
    204   // Constant Integers are simple.
    205   if (ConstantInt *CI = dyn_cast<ConstantInt>(C)) {
    206     APInt V = CI->getValue();
    207     if (ByteStart)
    208       V = V.lshr(ByteStart*8);
    209     V = V.trunc(ByteSize*8);
    210     return ConstantInt::get(CI->getContext(), V);
    211   }
    212 
    213   // In the input is a constant expr, we might be able to recursively simplify.
    214   // If not, we definitely can't do anything.
    215   ConstantExpr *CE = dyn_cast<ConstantExpr>(C);
    216   if (CE == 0) return 0;
    217 
    218   switch (CE->getOpcode()) {
    219   default: return 0;
    220   case Instruction::Or: {
    221     Constant *RHS = ExtractConstantBytes(CE->getOperand(1), ByteStart,ByteSize);
    222     if (RHS == 0)
    223       return 0;
    224 
    225     // X | -1 -> -1.
    226     if (ConstantInt *RHSC = dyn_cast<ConstantInt>(RHS))
    227       if (RHSC->isAllOnesValue())
    228         return RHSC;
    229 
    230     Constant *LHS = ExtractConstantBytes(CE->getOperand(0), ByteStart,ByteSize);
    231     if (LHS == 0)
    232       return 0;
    233     return ConstantExpr::getOr(LHS, RHS);
    234   }
    235   case Instruction::And: {
    236     Constant *RHS = ExtractConstantBytes(CE->getOperand(1), ByteStart,ByteSize);
    237     if (RHS == 0)
    238       return 0;
    239 
    240     // X & 0 -> 0.
    241     if (RHS->isNullValue())
    242       return RHS;
    243 
    244     Constant *LHS = ExtractConstantBytes(CE->getOperand(0), ByteStart,ByteSize);
    245     if (LHS == 0)
    246       return 0;
    247     return ConstantExpr::getAnd(LHS, RHS);
    248   }
    249   case Instruction::LShr: {
    250     ConstantInt *Amt = dyn_cast<ConstantInt>(CE->getOperand(1));
    251     if (Amt == 0)
    252       return 0;
    253     unsigned ShAmt = Amt->getZExtValue();
    254     // Cannot analyze non-byte shifts.
    255     if ((ShAmt & 7) != 0)
    256       return 0;
    257     ShAmt >>= 3;
    258 
    259     // If the extract is known to be all zeros, return zero.
    260     if (ByteStart >= CSize-ShAmt)
    261       return Constant::getNullValue(IntegerType::get(CE->getContext(),
    262                                                      ByteSize*8));
    263     // If the extract is known to be fully in the input, extract it.
    264     if (ByteStart+ByteSize+ShAmt <= CSize)
    265       return ExtractConstantBytes(CE->getOperand(0), ByteStart+ShAmt, ByteSize);
    266 
    267     // TODO: Handle the 'partially zero' case.
    268     return 0;
    269   }
    270 
    271   case Instruction::Shl: {
    272     ConstantInt *Amt = dyn_cast<ConstantInt>(CE->getOperand(1));
    273     if (Amt == 0)
    274       return 0;
    275     unsigned ShAmt = Amt->getZExtValue();
    276     // Cannot analyze non-byte shifts.
    277     if ((ShAmt & 7) != 0)
    278       return 0;
    279     ShAmt >>= 3;
    280 
    281     // If the extract is known to be all zeros, return zero.
    282     if (ByteStart+ByteSize <= ShAmt)
    283       return Constant::getNullValue(IntegerType::get(CE->getContext(),
    284                                                      ByteSize*8));
    285     // If the extract is known to be fully in the input, extract it.
    286     if (ByteStart >= ShAmt)
    287       return ExtractConstantBytes(CE->getOperand(0), ByteStart-ShAmt, ByteSize);
    288 
    289     // TODO: Handle the 'partially zero' case.
    290     return 0;
    291   }
    292 
    293   case Instruction::ZExt: {
    294     unsigned SrcBitSize =
    295       cast<IntegerType>(CE->getOperand(0)->getType())->getBitWidth();
    296 
    297     // If extracting something that is completely zero, return 0.
    298     if (ByteStart*8 >= SrcBitSize)
    299       return Constant::getNullValue(IntegerType::get(CE->getContext(),
    300                                                      ByteSize*8));
    301 
    302     // If exactly extracting the input, return it.
    303     if (ByteStart == 0 && ByteSize*8 == SrcBitSize)
    304       return CE->getOperand(0);
    305 
    306     // If extracting something completely in the input, if if the input is a
    307     // multiple of 8 bits, recurse.
    308     if ((SrcBitSize&7) == 0 && (ByteStart+ByteSize)*8 <= SrcBitSize)
    309       return ExtractConstantBytes(CE->getOperand(0), ByteStart, ByteSize);
    310 
    311     // Otherwise, if extracting a subset of the input, which is not multiple of
    312     // 8 bits, do a shift and trunc to get the bits.
    313     if ((ByteStart+ByteSize)*8 < SrcBitSize) {
    314       assert((SrcBitSize&7) && "Shouldn't get byte sized case here");
    315       Constant *Res = CE->getOperand(0);
    316       if (ByteStart)
    317         Res = ConstantExpr::getLShr(Res,
    318                                  ConstantInt::get(Res->getType(), ByteStart*8));
    319       return ConstantExpr::getTrunc(Res, IntegerType::get(C->getContext(),
    320                                                           ByteSize*8));
    321     }
    322 
    323     // TODO: Handle the 'partially zero' case.
    324     return 0;
    325   }
    326   }
    327 }
    328 
    329 /// getFoldedSizeOf - Return a ConstantExpr with type DestTy for sizeof
    330 /// on Ty, with any known factors factored out. If Folded is false,
    331 /// return null if no factoring was possible, to avoid endlessly
    332 /// bouncing an unfoldable expression back into the top-level folder.
    333 ///
    334 static Constant *getFoldedSizeOf(Type *Ty, Type *DestTy,
    335                                  bool Folded) {
    336   if (ArrayType *ATy = dyn_cast<ArrayType>(Ty)) {
    337     Constant *N = ConstantInt::get(DestTy, ATy->getNumElements());
    338     Constant *E = getFoldedSizeOf(ATy->getElementType(), DestTy, true);
    339     return ConstantExpr::getNUWMul(E, N);
    340   }
    341 
    342   if (StructType *STy = dyn_cast<StructType>(Ty))
    343     if (!STy->isPacked()) {
    344       unsigned NumElems = STy->getNumElements();
    345       // An empty struct has size zero.
    346       if (NumElems == 0)
    347         return ConstantExpr::getNullValue(DestTy);
    348       // Check for a struct with all members having the same size.
    349       Constant *MemberSize =
    350         getFoldedSizeOf(STy->getElementType(0), DestTy, true);
    351       bool AllSame = true;
    352       for (unsigned i = 1; i != NumElems; ++i)
    353         if (MemberSize !=
    354             getFoldedSizeOf(STy->getElementType(i), DestTy, true)) {
    355           AllSame = false;
    356           break;
    357         }
    358       if (AllSame) {
    359         Constant *N = ConstantInt::get(DestTy, NumElems);
    360         return ConstantExpr::getNUWMul(MemberSize, N);
    361       }
    362     }
    363 
    364   // Pointer size doesn't depend on the pointee type, so canonicalize them
    365   // to an arbitrary pointee.
    366   if (PointerType *PTy = dyn_cast<PointerType>(Ty))
    367     if (!PTy->getElementType()->isIntegerTy(1))
    368       return
    369         getFoldedSizeOf(PointerType::get(IntegerType::get(PTy->getContext(), 1),
    370                                          PTy->getAddressSpace()),
    371                         DestTy, true);
    372 
    373   // If there's no interesting folding happening, bail so that we don't create
    374   // a constant that looks like it needs folding but really doesn't.
    375   if (!Folded)
    376     return 0;
    377 
    378   // Base case: Get a regular sizeof expression.
    379   Constant *C = ConstantExpr::getSizeOf(Ty);
    380   C = ConstantExpr::getCast(CastInst::getCastOpcode(C, false,
    381                                                     DestTy, false),
    382                             C, DestTy);
    383   return C;
    384 }
    385 
    386 /// getFoldedAlignOf - Return a ConstantExpr with type DestTy for alignof
    387 /// on Ty, with any known factors factored out. If Folded is false,
    388 /// return null if no factoring was possible, to avoid endlessly
    389 /// bouncing an unfoldable expression back into the top-level folder.
    390 ///
    391 static Constant *getFoldedAlignOf(Type *Ty, Type *DestTy,
    392                                   bool Folded) {
    393   // The alignment of an array is equal to the alignment of the
    394   // array element. Note that this is not always true for vectors.
    395   if (ArrayType *ATy = dyn_cast<ArrayType>(Ty)) {
    396     Constant *C = ConstantExpr::getAlignOf(ATy->getElementType());
    397     C = ConstantExpr::getCast(CastInst::getCastOpcode(C, false,
    398                                                       DestTy,
    399                                                       false),
    400                               C, DestTy);
    401     return C;
    402   }
    403 
    404   if (StructType *STy = dyn_cast<StructType>(Ty)) {
    405     // Packed structs always have an alignment of 1.
    406     if (STy->isPacked())
    407       return ConstantInt::get(DestTy, 1);
    408 
    409     // Otherwise, struct alignment is the maximum alignment of any member.
    410     // Without target data, we can't compare much, but we can check to see
    411     // if all the members have the same alignment.
    412     unsigned NumElems = STy->getNumElements();
    413     // An empty struct has minimal alignment.
    414     if (NumElems == 0)
    415       return ConstantInt::get(DestTy, 1);
    416     // Check for a struct with all members having the same alignment.
    417     Constant *MemberAlign =
    418       getFoldedAlignOf(STy->getElementType(0), DestTy, true);
    419     bool AllSame = true;
    420     for (unsigned i = 1; i != NumElems; ++i)
    421       if (MemberAlign != getFoldedAlignOf(STy->getElementType(i), DestTy, true)) {
    422         AllSame = false;
    423         break;
    424       }
    425     if (AllSame)
    426       return MemberAlign;
    427   }
    428 
    429   // Pointer alignment doesn't depend on the pointee type, so canonicalize them
    430   // to an arbitrary pointee.
    431   if (PointerType *PTy = dyn_cast<PointerType>(Ty))
    432     if (!PTy->getElementType()->isIntegerTy(1))
    433       return
    434         getFoldedAlignOf(PointerType::get(IntegerType::get(PTy->getContext(),
    435                                                            1),
    436                                           PTy->getAddressSpace()),
    437                          DestTy, true);
    438 
    439   // If there's no interesting folding happening, bail so that we don't create
    440   // a constant that looks like it needs folding but really doesn't.
    441   if (!Folded)
    442     return 0;
    443 
    444   // Base case: Get a regular alignof expression.
    445   Constant *C = ConstantExpr::getAlignOf(Ty);
    446   C = ConstantExpr::getCast(CastInst::getCastOpcode(C, false,
    447                                                     DestTy, false),
    448                             C, DestTy);
    449   return C;
    450 }
    451 
    452 /// getFoldedOffsetOf - Return a ConstantExpr with type DestTy for offsetof
    453 /// on Ty and FieldNo, with any known factors factored out. If Folded is false,
    454 /// return null if no factoring was possible, to avoid endlessly
    455 /// bouncing an unfoldable expression back into the top-level folder.
    456 ///
    457 static Constant *getFoldedOffsetOf(Type *Ty, Constant *FieldNo,
    458                                    Type *DestTy,
    459                                    bool Folded) {
    460   if (ArrayType *ATy = dyn_cast<ArrayType>(Ty)) {
    461     Constant *N = ConstantExpr::getCast(CastInst::getCastOpcode(FieldNo, false,
    462                                                                 DestTy, false),
    463                                         FieldNo, DestTy);
    464     Constant *E = getFoldedSizeOf(ATy->getElementType(), DestTy, true);
    465     return ConstantExpr::getNUWMul(E, N);
    466   }
    467 
    468   if (StructType *STy = dyn_cast<StructType>(Ty))
    469     if (!STy->isPacked()) {
    470       unsigned NumElems = STy->getNumElements();
    471       // An empty struct has no members.
    472       if (NumElems == 0)
    473         return 0;
    474       // Check for a struct with all members having the same size.
    475       Constant *MemberSize =
    476         getFoldedSizeOf(STy->getElementType(0), DestTy, true);
    477       bool AllSame = true;
    478       for (unsigned i = 1; i != NumElems; ++i)
    479         if (MemberSize !=
    480             getFoldedSizeOf(STy->getElementType(i), DestTy, true)) {
    481           AllSame = false;
    482           break;
    483         }
    484       if (AllSame) {
    485         Constant *N = ConstantExpr::getCast(CastInst::getCastOpcode(FieldNo,
    486                                                                     false,
    487                                                                     DestTy,
    488                                                                     false),
    489                                             FieldNo, DestTy);
    490         return ConstantExpr::getNUWMul(MemberSize, N);
    491       }
    492     }
    493 
    494   // If there's no interesting folding happening, bail so that we don't create
    495   // a constant that looks like it needs folding but really doesn't.
    496   if (!Folded)
    497     return 0;
    498 
    499   // Base case: Get a regular offsetof expression.
    500   Constant *C = ConstantExpr::getOffsetOf(Ty, FieldNo);
    501   C = ConstantExpr::getCast(CastInst::getCastOpcode(C, false,
    502                                                     DestTy, false),
    503                             C, DestTy);
    504   return C;
    505 }
    506 
    507 Constant *llvm::ConstantFoldCastInstruction(unsigned opc, Constant *V,
    508                                             Type *DestTy) {
    509   if (isa<UndefValue>(V)) {
    510     // zext(undef) = 0, because the top bits will be zero.
    511     // sext(undef) = 0, because the top bits will all be the same.
    512     // [us]itofp(undef) = 0, because the result value is bounded.
    513     if (opc == Instruction::ZExt || opc == Instruction::SExt ||
    514         opc == Instruction::UIToFP || opc == Instruction::SIToFP)
    515       return Constant::getNullValue(DestTy);
    516     return UndefValue::get(DestTy);
    517   }
    518 
    519   // No compile-time operations on this type yet.
    520   if (V->getType()->isPPC_FP128Ty() || DestTy->isPPC_FP128Ty())
    521     return 0;
    522 
    523   if (V->isNullValue() && !DestTy->isX86_MMXTy())
    524     return Constant::getNullValue(DestTy);
    525 
    526   // If the cast operand is a constant expression, there's a few things we can
    527   // do to try to simplify it.
    528   if (ConstantExpr *CE = dyn_cast<ConstantExpr>(V)) {
    529     if (CE->isCast()) {
    530       // Try hard to fold cast of cast because they are often eliminable.
    531       if (unsigned newOpc = foldConstantCastPair(opc, CE, DestTy))
    532         return ConstantExpr::getCast(newOpc, CE->getOperand(0), DestTy);
    533     } else if (CE->getOpcode() == Instruction::GetElementPtr) {
    534       // If all of the indexes in the GEP are null values, there is no pointer
    535       // adjustment going on.  We might as well cast the source pointer.
    536       bool isAllNull = true;
    537       for (unsigned i = 1, e = CE->getNumOperands(); i != e; ++i)
    538         if (!CE->getOperand(i)->isNullValue()) {
    539           isAllNull = false;
    540           break;
    541         }
    542       if (isAllNull)
    543         // This is casting one pointer type to another, always BitCast
    544         return ConstantExpr::getPointerCast(CE->getOperand(0), DestTy);
    545     }
    546   }
    547 
    548   // If the cast operand is a constant vector, perform the cast by
    549   // operating on each element. In the cast of bitcasts, the element
    550   // count may be mismatched; don't attempt to handle that here.
    551   if (ConstantVector *CV = dyn_cast<ConstantVector>(V))
    552     if (DestTy->isVectorTy() &&
    553         cast<VectorType>(DestTy)->getNumElements() ==
    554         CV->getType()->getNumElements()) {
    555       std::vector<Constant*> res;
    556       VectorType *DestVecTy = cast<VectorType>(DestTy);
    557       Type *DstEltTy = DestVecTy->getElementType();
    558       for (unsigned i = 0, e = CV->getType()->getNumElements(); i != e; ++i)
    559         res.push_back(ConstantExpr::getCast(opc,
    560                                             CV->getOperand(i), DstEltTy));
    561       return ConstantVector::get(res);
    562     }
    563 
    564   // We actually have to do a cast now. Perform the cast according to the
    565   // opcode specified.
    566   switch (opc) {
    567   default:
    568     llvm_unreachable("Failed to cast constant expression");
    569   case Instruction::FPTrunc:
    570   case Instruction::FPExt:
    571     if (ConstantFP *FPC = dyn_cast<ConstantFP>(V)) {
    572       bool ignored;
    573       APFloat Val = FPC->getValueAPF();
    574       Val.convert(DestTy->isFloatTy() ? APFloat::IEEEsingle :
    575                   DestTy->isDoubleTy() ? APFloat::IEEEdouble :
    576                   DestTy->isX86_FP80Ty() ? APFloat::x87DoubleExtended :
    577                   DestTy->isFP128Ty() ? APFloat::IEEEquad :
    578                   APFloat::Bogus,
    579                   APFloat::rmNearestTiesToEven, &ignored);
    580       return ConstantFP::get(V->getContext(), Val);
    581     }
    582     return 0; // Can't fold.
    583   case Instruction::FPToUI:
    584   case Instruction::FPToSI:
    585     if (ConstantFP *FPC = dyn_cast<ConstantFP>(V)) {
    586       const APFloat &V = FPC->getValueAPF();
    587       bool ignored;
    588       uint64_t x[2];
    589       uint32_t DestBitWidth = cast<IntegerType>(DestTy)->getBitWidth();
    590       (void) V.convertToInteger(x, DestBitWidth, opc==Instruction::FPToSI,
    591                                 APFloat::rmTowardZero, &ignored);
    592       APInt Val(DestBitWidth, x);
    593       return ConstantInt::get(FPC->getContext(), Val);
    594     }
    595     return 0; // Can't fold.
    596   case Instruction::IntToPtr:   //always treated as unsigned
    597     if (V->isNullValue())       // Is it an integral null value?
    598       return ConstantPointerNull::get(cast<PointerType>(DestTy));
    599     return 0;                   // Other pointer types cannot be casted
    600   case Instruction::PtrToInt:   // always treated as unsigned
    601     // Is it a null pointer value?
    602     if (V->isNullValue())
    603       return ConstantInt::get(DestTy, 0);
    604     // If this is a sizeof-like expression, pull out multiplications by
    605     // known factors to expose them to subsequent folding. If it's an
    606     // alignof-like expression, factor out known factors.
    607     if (ConstantExpr *CE = dyn_cast<ConstantExpr>(V))
    608       if (CE->getOpcode() == Instruction::GetElementPtr &&
    609           CE->getOperand(0)->isNullValue()) {
    610         Type *Ty =
    611           cast<PointerType>(CE->getOperand(0)->getType())->getElementType();
    612         if (CE->getNumOperands() == 2) {
    613           // Handle a sizeof-like expression.
    614           Constant *Idx = CE->getOperand(1);
    615           bool isOne = isa<ConstantInt>(Idx) && cast<ConstantInt>(Idx)->isOne();
    616           if (Constant *C = getFoldedSizeOf(Ty, DestTy, !isOne)) {
    617             Idx = ConstantExpr::getCast(CastInst::getCastOpcode(Idx, true,
    618                                                                 DestTy, false),
    619                                         Idx, DestTy);
    620             return ConstantExpr::getMul(C, Idx);
    621           }
    622         } else if (CE->getNumOperands() == 3 &&
    623                    CE->getOperand(1)->isNullValue()) {
    624           // Handle an alignof-like expression.
    625           if (StructType *STy = dyn_cast<StructType>(Ty))
    626             if (!STy->isPacked()) {
    627               ConstantInt *CI = cast<ConstantInt>(CE->getOperand(2));
    628               if (CI->isOne() &&
    629                   STy->getNumElements() == 2 &&
    630                   STy->getElementType(0)->isIntegerTy(1)) {
    631                 return getFoldedAlignOf(STy->getElementType(1), DestTy, false);
    632               }
    633             }
    634           // Handle an offsetof-like expression.
    635           if (Ty->isStructTy() || Ty->isArrayTy()) {
    636             if (Constant *C = getFoldedOffsetOf(Ty, CE->getOperand(2),
    637                                                 DestTy, false))
    638               return C;
    639           }
    640         }
    641       }
    642     // Other pointer types cannot be casted
    643     return 0;
    644   case Instruction::UIToFP:
    645   case Instruction::SIToFP:
    646     if (ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
    647       APInt api = CI->getValue();
    648       APFloat apf(APInt::getNullValue(DestTy->getPrimitiveSizeInBits()), true);
    649       (void)apf.convertFromAPInt(api,
    650                                  opc==Instruction::SIToFP,
    651                                  APFloat::rmNearestTiesToEven);
    652       return ConstantFP::get(V->getContext(), apf);
    653     }
    654     return 0;
    655   case Instruction::ZExt:
    656     if (ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
    657       uint32_t BitWidth = cast<IntegerType>(DestTy)->getBitWidth();
    658       return ConstantInt::get(V->getContext(),
    659                               CI->getValue().zext(BitWidth));
    660     }
    661     return 0;
    662   case Instruction::SExt:
    663     if (ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
    664       uint32_t BitWidth = cast<IntegerType>(DestTy)->getBitWidth();
    665       return ConstantInt::get(V->getContext(),
    666                               CI->getValue().sext(BitWidth));
    667     }
    668     return 0;
    669   case Instruction::Trunc: {
    670     uint32_t DestBitWidth = cast<IntegerType>(DestTy)->getBitWidth();
    671     if (ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
    672       return ConstantInt::get(V->getContext(),
    673                               CI->getValue().trunc(DestBitWidth));
    674     }
    675 
    676     // The input must be a constantexpr.  See if we can simplify this based on
    677     // the bytes we are demanding.  Only do this if the source and dest are an
    678     // even multiple of a byte.
    679     if ((DestBitWidth & 7) == 0 &&
    680         (cast<IntegerType>(V->getType())->getBitWidth() & 7) == 0)
    681       if (Constant *Res = ExtractConstantBytes(V, 0, DestBitWidth / 8))
    682         return Res;
    683 
    684     return 0;
    685   }
    686   case Instruction::BitCast:
    687     return FoldBitCast(V, DestTy);
    688   }
    689 }
    690 
    691 Constant *llvm::ConstantFoldSelectInstruction(Constant *Cond,
    692                                               Constant *V1, Constant *V2) {
    693   if (ConstantInt *CB = dyn_cast<ConstantInt>(Cond))
    694     return CB->getZExtValue() ? V1 : V2;
    695 
    696   // Check for zero aggregate and ConstantVector of zeros
    697   if (Cond->isNullValue()) return V2;
    698 
    699   if (ConstantVector* CondV = dyn_cast<ConstantVector>(Cond)) {
    700 
    701     if (CondV->isAllOnesValue()) return V1;
    702 
    703     VectorType *VTy = cast<VectorType>(V1->getType());
    704     ConstantVector *CP1 = dyn_cast<ConstantVector>(V1);
    705     ConstantVector *CP2 = dyn_cast<ConstantVector>(V2);
    706 
    707     if ((CP1 || isa<ConstantAggregateZero>(V1)) &&
    708         (CP2 || isa<ConstantAggregateZero>(V2))) {
    709 
    710       // Find the element type of the returned vector
    711       Type *EltTy = VTy->getElementType();
    712       unsigned NumElem = VTy->getNumElements();
    713       std::vector<Constant*> Res(NumElem);
    714 
    715       bool Valid = true;
    716       for (unsigned i = 0; i < NumElem; ++i) {
    717         ConstantInt* c = dyn_cast<ConstantInt>(CondV->getOperand(i));
    718         if (!c) {
    719           Valid = false;
    720           break;
    721         }
    722         Constant *C1 = CP1 ? CP1->getOperand(i) : Constant::getNullValue(EltTy);
    723         Constant *C2 = CP2 ? CP2->getOperand(i) : Constant::getNullValue(EltTy);
    724         Res[i] = c->getZExtValue() ? C1 : C2;
    725       }
    726       // If we were able to build the vector, return it
    727       if (Valid) return ConstantVector::get(Res);
    728     }
    729   }
    730 
    731 
    732   if (isa<UndefValue>(Cond)) {
    733     if (isa<UndefValue>(V1)) return V1;
    734     return V2;
    735   }
    736   if (isa<UndefValue>(V1)) return V2;
    737   if (isa<UndefValue>(V2)) return V1;
    738   if (V1 == V2) return V1;
    739 
    740   if (ConstantExpr *TrueVal = dyn_cast<ConstantExpr>(V1)) {
    741     if (TrueVal->getOpcode() == Instruction::Select)
    742       if (TrueVal->getOperand(0) == Cond)
    743 	return ConstantExpr::getSelect(Cond, TrueVal->getOperand(1), V2);
    744   }
    745   if (ConstantExpr *FalseVal = dyn_cast<ConstantExpr>(V2)) {
    746     if (FalseVal->getOpcode() == Instruction::Select)
    747       if (FalseVal->getOperand(0) == Cond)
    748 	return ConstantExpr::getSelect(Cond, V1, FalseVal->getOperand(2));
    749   }
    750 
    751   return 0;
    752 }
    753 
    754 Constant *llvm::ConstantFoldExtractElementInstruction(Constant *Val,
    755                                                       Constant *Idx) {
    756   if (isa<UndefValue>(Val))  // ee(undef, x) -> undef
    757     return UndefValue::get(cast<VectorType>(Val->getType())->getElementType());
    758   if (Val->isNullValue())  // ee(zero, x) -> zero
    759     return Constant::getNullValue(
    760                           cast<VectorType>(Val->getType())->getElementType());
    761 
    762   if (ConstantVector *CVal = dyn_cast<ConstantVector>(Val)) {
    763     if (ConstantInt *CIdx = dyn_cast<ConstantInt>(Idx)) {
    764       uint64_t Index = CIdx->getZExtValue();
    765       if (Index >= CVal->getNumOperands())
    766         // ee({w,x,y,z}, wrong_value) -> undef
    767         return UndefValue::get(cast<VectorType>(Val->getType())->getElementType());
    768       return CVal->getOperand(CIdx->getZExtValue());
    769     } else if (isa<UndefValue>(Idx)) {
    770       // ee({w,x,y,z}, undef) -> undef
    771       return UndefValue::get(cast<VectorType>(Val->getType())->getElementType());
    772     }
    773   }
    774   return 0;
    775 }
    776 
    777 Constant *llvm::ConstantFoldInsertElementInstruction(Constant *Val,
    778                                                      Constant *Elt,
    779                                                      Constant *Idx) {
    780   ConstantInt *CIdx = dyn_cast<ConstantInt>(Idx);
    781   if (!CIdx) return 0;
    782   APInt idxVal = CIdx->getValue();
    783   if (isa<UndefValue>(Val)) {
    784     // Insertion of scalar constant into vector undef
    785     // Optimize away insertion of undef
    786     if (isa<UndefValue>(Elt))
    787       return Val;
    788     // Otherwise break the aggregate undef into multiple undefs and do
    789     // the insertion
    790     unsigned numOps =
    791       cast<VectorType>(Val->getType())->getNumElements();
    792     std::vector<Constant*> Ops;
    793     Ops.reserve(numOps);
    794     for (unsigned i = 0; i < numOps; ++i) {
    795       Constant *Op =
    796         (idxVal == i) ? Elt : UndefValue::get(Elt->getType());
    797       Ops.push_back(Op);
    798     }
    799     return ConstantVector::get(Ops);
    800   }
    801   if (isa<ConstantAggregateZero>(Val)) {
    802     // Insertion of scalar constant into vector aggregate zero
    803     // Optimize away insertion of zero
    804     if (Elt->isNullValue())
    805       return Val;
    806     // Otherwise break the aggregate zero into multiple zeros and do
    807     // the insertion
    808     unsigned numOps =
    809       cast<VectorType>(Val->getType())->getNumElements();
    810     std::vector<Constant*> Ops;
    811     Ops.reserve(numOps);
    812     for (unsigned i = 0; i < numOps; ++i) {
    813       Constant *Op =
    814         (idxVal == i) ? Elt : Constant::getNullValue(Elt->getType());
    815       Ops.push_back(Op);
    816     }
    817     return ConstantVector::get(Ops);
    818   }
    819   if (ConstantVector *CVal = dyn_cast<ConstantVector>(Val)) {
    820     // Insertion of scalar constant into vector constant
    821     std::vector<Constant*> Ops;
    822     Ops.reserve(CVal->getNumOperands());
    823     for (unsigned i = 0; i < CVal->getNumOperands(); ++i) {
    824       Constant *Op =
    825         (idxVal == i) ? Elt : cast<Constant>(CVal->getOperand(i));
    826       Ops.push_back(Op);
    827     }
    828     return ConstantVector::get(Ops);
    829   }
    830 
    831   return 0;
    832 }
    833 
    834 /// GetVectorElement - If C is a ConstantVector, ConstantAggregateZero or Undef
    835 /// return the specified element value.  Otherwise return null.
    836 static Constant *GetVectorElement(Constant *C, unsigned EltNo) {
    837   if (ConstantVector *CV = dyn_cast<ConstantVector>(C))
    838     return CV->getOperand(EltNo);
    839 
    840   Type *EltTy = cast<VectorType>(C->getType())->getElementType();
    841   if (isa<ConstantAggregateZero>(C))
    842     return Constant::getNullValue(EltTy);
    843   if (isa<UndefValue>(C))
    844     return UndefValue::get(EltTy);
    845   return 0;
    846 }
    847 
    848 Constant *llvm::ConstantFoldShuffleVectorInstruction(Constant *V1,
    849                                                      Constant *V2,
    850                                                      Constant *Mask) {
    851   // Undefined shuffle mask -> undefined value.
    852   if (isa<UndefValue>(Mask)) return UndefValue::get(V1->getType());
    853 
    854   unsigned MaskNumElts = cast<VectorType>(Mask->getType())->getNumElements();
    855   unsigned SrcNumElts = cast<VectorType>(V1->getType())->getNumElements();
    856   Type *EltTy = cast<VectorType>(V1->getType())->getElementType();
    857 
    858   // Loop over the shuffle mask, evaluating each element.
    859   SmallVector<Constant*, 32> Result;
    860   for (unsigned i = 0; i != MaskNumElts; ++i) {
    861     Constant *InElt = GetVectorElement(Mask, i);
    862     if (InElt == 0) return 0;
    863 
    864     if (isa<UndefValue>(InElt))
    865       InElt = UndefValue::get(EltTy);
    866     else if (ConstantInt *CI = dyn_cast<ConstantInt>(InElt)) {
    867       unsigned Elt = CI->getZExtValue();
    868       if (Elt >= SrcNumElts*2)
    869         InElt = UndefValue::get(EltTy);
    870       else if (Elt >= SrcNumElts)
    871         InElt = GetVectorElement(V2, Elt - SrcNumElts);
    872       else
    873         InElt = GetVectorElement(V1, Elt);
    874       if (InElt == 0) return 0;
    875     } else {
    876       // Unknown value.
    877       return 0;
    878     }
    879     Result.push_back(InElt);
    880   }
    881 
    882   return ConstantVector::get(Result);
    883 }
    884 
    885 Constant *llvm::ConstantFoldExtractValueInstruction(Constant *Agg,
    886                                                     ArrayRef<unsigned> Idxs) {
    887   // Base case: no indices, so return the entire value.
    888   if (Idxs.empty())
    889     return Agg;
    890 
    891   if (isa<UndefValue>(Agg))  // ev(undef, x) -> undef
    892     return UndefValue::get(ExtractValueInst::getIndexedType(Agg->getType(),
    893                                                             Idxs));
    894 
    895   if (isa<ConstantAggregateZero>(Agg))  // ev(0, x) -> 0
    896     return
    897       Constant::getNullValue(ExtractValueInst::getIndexedType(Agg->getType(),
    898                                                               Idxs));
    899 
    900   // Otherwise recurse.
    901   if (ConstantStruct *CS = dyn_cast<ConstantStruct>(Agg))
    902     return ConstantFoldExtractValueInstruction(CS->getOperand(Idxs[0]),
    903                                                Idxs.slice(1));
    904 
    905   if (ConstantArray *CA = dyn_cast<ConstantArray>(Agg))
    906     return ConstantFoldExtractValueInstruction(CA->getOperand(Idxs[0]),
    907                                                Idxs.slice(1));
    908   ConstantVector *CV = cast<ConstantVector>(Agg);
    909   return ConstantFoldExtractValueInstruction(CV->getOperand(Idxs[0]),
    910                                              Idxs.slice(1));
    911 }
    912 
    913 Constant *llvm::ConstantFoldInsertValueInstruction(Constant *Agg,
    914                                                    Constant *Val,
    915                                                    ArrayRef<unsigned> Idxs) {
    916   // Base case: no indices, so replace the entire value.
    917   if (Idxs.empty())
    918     return Val;
    919 
    920   if (isa<UndefValue>(Agg)) {
    921     // Insertion of constant into aggregate undef
    922     // Optimize away insertion of undef.
    923     if (isa<UndefValue>(Val))
    924       return Agg;
    925 
    926     // Otherwise break the aggregate undef into multiple undefs and do
    927     // the insertion.
    928     CompositeType *AggTy = cast<CompositeType>(Agg->getType());
    929     unsigned numOps;
    930     if (ArrayType *AR = dyn_cast<ArrayType>(AggTy))
    931       numOps = AR->getNumElements();
    932     else
    933       numOps = cast<StructType>(AggTy)->getNumElements();
    934 
    935     std::vector<Constant*> Ops(numOps);
    936     for (unsigned i = 0; i < numOps; ++i) {
    937       Type *MemberTy = AggTy->getTypeAtIndex(i);
    938       Constant *Op =
    939         (Idxs[0] == i) ?
    940         ConstantFoldInsertValueInstruction(UndefValue::get(MemberTy),
    941                                            Val, Idxs.slice(1)) :
    942         UndefValue::get(MemberTy);
    943       Ops[i] = Op;
    944     }
    945 
    946     if (StructType* ST = dyn_cast<StructType>(AggTy))
    947       return ConstantStruct::get(ST, Ops);
    948     return ConstantArray::get(cast<ArrayType>(AggTy), Ops);
    949   }
    950 
    951   if (isa<ConstantAggregateZero>(Agg)) {
    952     // Insertion of constant into aggregate zero
    953     // Optimize away insertion of zero.
    954     if (Val->isNullValue())
    955       return Agg;
    956 
    957     // Otherwise break the aggregate zero into multiple zeros and do
    958     // the insertion.
    959     CompositeType *AggTy = cast<CompositeType>(Agg->getType());
    960     unsigned numOps;
    961     if (ArrayType *AR = dyn_cast<ArrayType>(AggTy))
    962       numOps = AR->getNumElements();
    963     else
    964       numOps = cast<StructType>(AggTy)->getNumElements();
    965 
    966     std::vector<Constant*> Ops(numOps);
    967     for (unsigned i = 0; i < numOps; ++i) {
    968       Type *MemberTy = AggTy->getTypeAtIndex(i);
    969       Constant *Op =
    970         (Idxs[0] == i) ?
    971         ConstantFoldInsertValueInstruction(Constant::getNullValue(MemberTy),
    972                                            Val, Idxs.slice(1)) :
    973         Constant::getNullValue(MemberTy);
    974       Ops[i] = Op;
    975     }
    976 
    977     if (StructType *ST = dyn_cast<StructType>(AggTy))
    978       return ConstantStruct::get(ST, Ops);
    979     return ConstantArray::get(cast<ArrayType>(AggTy), Ops);
    980   }
    981 
    982   if (isa<ConstantStruct>(Agg) || isa<ConstantArray>(Agg)) {
    983     // Insertion of constant into aggregate constant.
    984     std::vector<Constant*> Ops(Agg->getNumOperands());
    985     for (unsigned i = 0; i < Agg->getNumOperands(); ++i) {
    986       Constant *Op = cast<Constant>(Agg->getOperand(i));
    987       if (Idxs[0] == i)
    988         Op = ConstantFoldInsertValueInstruction(Op, Val, Idxs.slice(1));
    989       Ops[i] = Op;
    990     }
    991 
    992     if (StructType* ST = dyn_cast<StructType>(Agg->getType()))
    993       return ConstantStruct::get(ST, Ops);
    994     return ConstantArray::get(cast<ArrayType>(Agg->getType()), Ops);
    995   }
    996 
    997   return 0;
    998 }
    999 
   1000 
   1001 Constant *llvm::ConstantFoldBinaryInstruction(unsigned Opcode,
   1002                                               Constant *C1, Constant *C2) {
   1003   // No compile-time operations on this type yet.
   1004   if (C1->getType()->isPPC_FP128Ty())
   1005     return 0;
   1006 
   1007   // Handle UndefValue up front.
   1008   if (isa<UndefValue>(C1) || isa<UndefValue>(C2)) {
   1009     switch (Opcode) {
   1010     case Instruction::Xor:
   1011       if (isa<UndefValue>(C1) && isa<UndefValue>(C2))
   1012         // Handle undef ^ undef -> 0 special case. This is a common
   1013         // idiom (misuse).
   1014         return Constant::getNullValue(C1->getType());
   1015       // Fallthrough
   1016     case Instruction::Add:
   1017     case Instruction::Sub:
   1018       return UndefValue::get(C1->getType());
   1019     case Instruction::And:
   1020       if (isa<UndefValue>(C1) && isa<UndefValue>(C2)) // undef & undef -> undef
   1021         return C1;
   1022       return Constant::getNullValue(C1->getType());   // undef & X -> 0
   1023     case Instruction::Mul: {
   1024       ConstantInt *CI;
   1025       // X * undef -> undef   if X is odd or undef
   1026       if (((CI = dyn_cast<ConstantInt>(C1)) && CI->getValue()[0]) ||
   1027           ((CI = dyn_cast<ConstantInt>(C2)) && CI->getValue()[0]) ||
   1028           (isa<UndefValue>(C1) && isa<UndefValue>(C2)))
   1029         return UndefValue::get(C1->getType());
   1030 
   1031       // X * undef -> 0       otherwise
   1032       return Constant::getNullValue(C1->getType());
   1033     }
   1034     case Instruction::UDiv:
   1035     case Instruction::SDiv:
   1036       // undef / 1 -> undef
   1037       if (Opcode == Instruction::UDiv || Opcode == Instruction::SDiv)
   1038         if (ConstantInt *CI2 = dyn_cast<ConstantInt>(C2))
   1039           if (CI2->isOne())
   1040             return C1;
   1041       // FALL THROUGH
   1042     case Instruction::URem:
   1043     case Instruction::SRem:
   1044       if (!isa<UndefValue>(C2))                    // undef / X -> 0
   1045         return Constant::getNullValue(C1->getType());
   1046       return C2;                                   // X / undef -> undef
   1047     case Instruction::Or:                          // X | undef -> -1
   1048       if (isa<UndefValue>(C1) && isa<UndefValue>(C2)) // undef | undef -> undef
   1049         return C1;
   1050       return Constant::getAllOnesValue(C1->getType()); // undef | X -> ~0
   1051     case Instruction::LShr:
   1052       if (isa<UndefValue>(C2) && isa<UndefValue>(C1))
   1053         return C1;                                  // undef lshr undef -> undef
   1054       return Constant::getNullValue(C1->getType()); // X lshr undef -> 0
   1055                                                     // undef lshr X -> 0
   1056     case Instruction::AShr:
   1057       if (!isa<UndefValue>(C2))                     // undef ashr X --> all ones
   1058         return Constant::getAllOnesValue(C1->getType());
   1059       else if (isa<UndefValue>(C1))
   1060         return C1;                                  // undef ashr undef -> undef
   1061       else
   1062         return C1;                                  // X ashr undef --> X
   1063     case Instruction::Shl:
   1064       if (isa<UndefValue>(C2) && isa<UndefValue>(C1))
   1065         return C1;                                  // undef shl undef -> undef
   1066       // undef << X -> 0   or   X << undef -> 0
   1067       return Constant::getNullValue(C1->getType());
   1068     }
   1069   }
   1070 
   1071   // Handle simplifications when the RHS is a constant int.
   1072   if (ConstantInt *CI2 = dyn_cast<ConstantInt>(C2)) {
   1073     switch (Opcode) {
   1074     case Instruction::Add:
   1075       if (CI2->equalsInt(0)) return C1;                         // X + 0 == X
   1076       break;
   1077     case Instruction::Sub:
   1078       if (CI2->equalsInt(0)) return C1;                         // X - 0 == X
   1079       break;
   1080     case Instruction::Mul:
   1081       if (CI2->equalsInt(0)) return C2;                         // X * 0 == 0
   1082       if (CI2->equalsInt(1))
   1083         return C1;                                              // X * 1 == X
   1084       break;
   1085     case Instruction::UDiv:
   1086     case Instruction::SDiv:
   1087       if (CI2->equalsInt(1))
   1088         return C1;                                            // X / 1 == X
   1089       if (CI2->equalsInt(0))
   1090         return UndefValue::get(CI2->getType());               // X / 0 == undef
   1091       break;
   1092     case Instruction::URem:
   1093     case Instruction::SRem:
   1094       if (CI2->equalsInt(1))
   1095         return Constant::getNullValue(CI2->getType());        // X % 1 == 0
   1096       if (CI2->equalsInt(0))
   1097         return UndefValue::get(CI2->getType());               // X % 0 == undef
   1098       break;
   1099     case Instruction::And:
   1100       if (CI2->isZero()) return C2;                           // X & 0 == 0
   1101       if (CI2->isAllOnesValue())
   1102         return C1;                                            // X & -1 == X
   1103 
   1104       if (ConstantExpr *CE1 = dyn_cast<ConstantExpr>(C1)) {
   1105         // (zext i32 to i64) & 4294967295 -> (zext i32 to i64)
   1106         if (CE1->getOpcode() == Instruction::ZExt) {
   1107           unsigned DstWidth = CI2->getType()->getBitWidth();
   1108           unsigned SrcWidth =
   1109             CE1->getOperand(0)->getType()->getPrimitiveSizeInBits();
   1110           APInt PossiblySetBits(APInt::getLowBitsSet(DstWidth, SrcWidth));
   1111           if ((PossiblySetBits & CI2->getValue()) == PossiblySetBits)
   1112             return C1;
   1113         }
   1114 
   1115         // If and'ing the address of a global with a constant, fold it.
   1116         if (CE1->getOpcode() == Instruction::PtrToInt &&
   1117             isa<GlobalValue>(CE1->getOperand(0))) {
   1118           GlobalValue *GV = cast<GlobalValue>(CE1->getOperand(0));
   1119 
   1120           // Functions are at least 4-byte aligned.
   1121           unsigned GVAlign = GV->getAlignment();
   1122           if (isa<Function>(GV))
   1123             GVAlign = std::max(GVAlign, 4U);
   1124 
   1125           if (GVAlign > 1) {
   1126             unsigned DstWidth = CI2->getType()->getBitWidth();
   1127             unsigned SrcWidth = std::min(DstWidth, Log2_32(GVAlign));
   1128             APInt BitsNotSet(APInt::getLowBitsSet(DstWidth, SrcWidth));
   1129 
   1130             // If checking bits we know are clear, return zero.
   1131             if ((CI2->getValue() & BitsNotSet) == CI2->getValue())
   1132               return Constant::getNullValue(CI2->getType());
   1133           }
   1134         }
   1135       }
   1136       break;
   1137     case Instruction::Or:
   1138       if (CI2->equalsInt(0)) return C1;    // X | 0 == X
   1139       if (CI2->isAllOnesValue())
   1140         return C2;                         // X | -1 == -1
   1141       break;
   1142     case Instruction::Xor:
   1143       if (CI2->equalsInt(0)) return C1;    // X ^ 0 == X
   1144 
   1145       if (ConstantExpr *CE1 = dyn_cast<ConstantExpr>(C1)) {
   1146         switch (CE1->getOpcode()) {
   1147         default: break;
   1148         case Instruction::ICmp:
   1149         case Instruction::FCmp:
   1150           // cmp pred ^ true -> cmp !pred
   1151           assert(CI2->equalsInt(1));
   1152           CmpInst::Predicate pred = (CmpInst::Predicate)CE1->getPredicate();
   1153           pred = CmpInst::getInversePredicate(pred);
   1154           return ConstantExpr::getCompare(pred, CE1->getOperand(0),
   1155                                           CE1->getOperand(1));
   1156         }
   1157       }
   1158       break;
   1159     case Instruction::AShr:
   1160       // ashr (zext C to Ty), C2 -> lshr (zext C, CSA), C2
   1161       if (ConstantExpr *CE1 = dyn_cast<ConstantExpr>(C1))
   1162         if (CE1->getOpcode() == Instruction::ZExt)  // Top bits known zero.
   1163           return ConstantExpr::getLShr(C1, C2);
   1164       break;
   1165     }
   1166   } else if (isa<ConstantInt>(C1)) {
   1167     // If C1 is a ConstantInt and C2 is not, swap the operands.
   1168     if (Instruction::isCommutative(Opcode))
   1169       return ConstantExpr::get(Opcode, C2, C1);
   1170   }
   1171 
   1172   // At this point we know neither constant is an UndefValue.
   1173   if (ConstantInt *CI1 = dyn_cast<ConstantInt>(C1)) {
   1174     if (ConstantInt *CI2 = dyn_cast<ConstantInt>(C2)) {
   1175       using namespace APIntOps;
   1176       const APInt &C1V = CI1->getValue();
   1177       const APInt &C2V = CI2->getValue();
   1178       switch (Opcode) {
   1179       default:
   1180         break;
   1181       case Instruction::Add:
   1182         return ConstantInt::get(CI1->getContext(), C1V + C2V);
   1183       case Instruction::Sub:
   1184         return ConstantInt::get(CI1->getContext(), C1V - C2V);
   1185       case Instruction::Mul:
   1186         return ConstantInt::get(CI1->getContext(), C1V * C2V);
   1187       case Instruction::UDiv:
   1188         assert(!CI2->isNullValue() && "Div by zero handled above");
   1189         return ConstantInt::get(CI1->getContext(), C1V.udiv(C2V));
   1190       case Instruction::SDiv:
   1191         assert(!CI2->isNullValue() && "Div by zero handled above");
   1192         if (C2V.isAllOnesValue() && C1V.isMinSignedValue())
   1193           return UndefValue::get(CI1->getType());   // MIN_INT / -1 -> undef
   1194         return ConstantInt::get(CI1->getContext(), C1V.sdiv(C2V));
   1195       case Instruction::URem:
   1196         assert(!CI2->isNullValue() && "Div by zero handled above");
   1197         return ConstantInt::get(CI1->getContext(), C1V.urem(C2V));
   1198       case Instruction::SRem:
   1199         assert(!CI2->isNullValue() && "Div by zero handled above");
   1200         if (C2V.isAllOnesValue() && C1V.isMinSignedValue())
   1201           return UndefValue::get(CI1->getType());   // MIN_INT % -1 -> undef
   1202         return ConstantInt::get(CI1->getContext(), C1V.srem(C2V));
   1203       case Instruction::And:
   1204         return ConstantInt::get(CI1->getContext(), C1V & C2V);
   1205       case Instruction::Or:
   1206         return ConstantInt::get(CI1->getContext(), C1V | C2V);
   1207       case Instruction::Xor:
   1208         return ConstantInt::get(CI1->getContext(), C1V ^ C2V);
   1209       case Instruction::Shl: {
   1210         uint32_t shiftAmt = C2V.getZExtValue();
   1211         if (shiftAmt < C1V.getBitWidth())
   1212           return ConstantInt::get(CI1->getContext(), C1V.shl(shiftAmt));
   1213         else
   1214           return UndefValue::get(C1->getType()); // too big shift is undef
   1215       }
   1216       case Instruction::LShr: {
   1217         uint32_t shiftAmt = C2V.getZExtValue();
   1218         if (shiftAmt < C1V.getBitWidth())
   1219           return ConstantInt::get(CI1->getContext(), C1V.lshr(shiftAmt));
   1220         else
   1221           return UndefValue::get(C1->getType()); // too big shift is undef
   1222       }
   1223       case Instruction::AShr: {
   1224         uint32_t shiftAmt = C2V.getZExtValue();
   1225         if (shiftAmt < C1V.getBitWidth())
   1226           return ConstantInt::get(CI1->getContext(), C1V.ashr(shiftAmt));
   1227         else
   1228           return UndefValue::get(C1->getType()); // too big shift is undef
   1229       }
   1230       }
   1231     }
   1232 
   1233     switch (Opcode) {
   1234     case Instruction::SDiv:
   1235     case Instruction::UDiv:
   1236     case Instruction::URem:
   1237     case Instruction::SRem:
   1238     case Instruction::LShr:
   1239     case Instruction::AShr:
   1240     case Instruction::Shl:
   1241       if (CI1->equalsInt(0)) return C1;
   1242       break;
   1243     default:
   1244       break;
   1245     }
   1246   } else if (ConstantFP *CFP1 = dyn_cast<ConstantFP>(C1)) {
   1247     if (ConstantFP *CFP2 = dyn_cast<ConstantFP>(C2)) {
   1248       APFloat C1V = CFP1->getValueAPF();
   1249       APFloat C2V = CFP2->getValueAPF();
   1250       APFloat C3V = C1V;  // copy for modification
   1251       switch (Opcode) {
   1252       default:
   1253         break;
   1254       case Instruction::FAdd:
   1255         (void)C3V.add(C2V, APFloat::rmNearestTiesToEven);
   1256         return ConstantFP::get(C1->getContext(), C3V);
   1257       case Instruction::FSub:
   1258         (void)C3V.subtract(C2V, APFloat::rmNearestTiesToEven);
   1259         return ConstantFP::get(C1->getContext(), C3V);
   1260       case Instruction::FMul:
   1261         (void)C3V.multiply(C2V, APFloat::rmNearestTiesToEven);
   1262         return ConstantFP::get(C1->getContext(), C3V);
   1263       case Instruction::FDiv:
   1264         (void)C3V.divide(C2V, APFloat::rmNearestTiesToEven);
   1265         return ConstantFP::get(C1->getContext(), C3V);
   1266       case Instruction::FRem:
   1267         (void)C3V.mod(C2V, APFloat::rmNearestTiesToEven);
   1268         return ConstantFP::get(C1->getContext(), C3V);
   1269       }
   1270     }
   1271   } else if (VectorType *VTy = dyn_cast<VectorType>(C1->getType())) {
   1272     ConstantVector *CP1 = dyn_cast<ConstantVector>(C1);
   1273     ConstantVector *CP2 = dyn_cast<ConstantVector>(C2);
   1274     if ((CP1 != NULL || isa<ConstantAggregateZero>(C1)) &&
   1275         (CP2 != NULL || isa<ConstantAggregateZero>(C2))) {
   1276       std::vector<Constant*> Res;
   1277       Type* EltTy = VTy->getElementType();
   1278       Constant *C1 = 0;
   1279       Constant *C2 = 0;
   1280       switch (Opcode) {
   1281       default:
   1282         break;
   1283       case Instruction::Add:
   1284         for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
   1285           C1 = CP1 ? CP1->getOperand(i) : Constant::getNullValue(EltTy);
   1286           C2 = CP2 ? CP2->getOperand(i) : Constant::getNullValue(EltTy);
   1287           Res.push_back(ConstantExpr::getAdd(C1, C2));
   1288         }
   1289         return ConstantVector::get(Res);
   1290       case Instruction::FAdd:
   1291         for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
   1292           C1 = CP1 ? CP1->getOperand(i) : Constant::getNullValue(EltTy);
   1293           C2 = CP2 ? CP2->getOperand(i) : Constant::getNullValue(EltTy);
   1294           Res.push_back(ConstantExpr::getFAdd(C1, C2));
   1295         }
   1296         return ConstantVector::get(Res);
   1297       case Instruction::Sub:
   1298         for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
   1299           C1 = CP1 ? CP1->getOperand(i) : Constant::getNullValue(EltTy);
   1300           C2 = CP2 ? CP2->getOperand(i) : Constant::getNullValue(EltTy);
   1301           Res.push_back(ConstantExpr::getSub(C1, C2));
   1302         }
   1303         return ConstantVector::get(Res);
   1304       case Instruction::FSub:
   1305         for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
   1306           C1 = CP1 ? CP1->getOperand(i) : Constant::getNullValue(EltTy);
   1307           C2 = CP2 ? CP2->getOperand(i) : Constant::getNullValue(EltTy);
   1308           Res.push_back(ConstantExpr::getFSub(C1, C2));
   1309         }
   1310         return ConstantVector::get(Res);
   1311       case Instruction::Mul:
   1312         for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
   1313           C1 = CP1 ? CP1->getOperand(i) : Constant::getNullValue(EltTy);
   1314           C2 = CP2 ? CP2->getOperand(i) : Constant::getNullValue(EltTy);
   1315           Res.push_back(ConstantExpr::getMul(C1, C2));
   1316         }
   1317         return ConstantVector::get(Res);
   1318       case Instruction::FMul:
   1319         for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
   1320           C1 = CP1 ? CP1->getOperand(i) : Constant::getNullValue(EltTy);
   1321           C2 = CP2 ? CP2->getOperand(i) : Constant::getNullValue(EltTy);
   1322           Res.push_back(ConstantExpr::getFMul(C1, C2));
   1323         }
   1324         return ConstantVector::get(Res);
   1325       case Instruction::UDiv:
   1326         for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
   1327           C1 = CP1 ? CP1->getOperand(i) : Constant::getNullValue(EltTy);
   1328           C2 = CP2 ? CP2->getOperand(i) : Constant::getNullValue(EltTy);
   1329           Res.push_back(ConstantExpr::getUDiv(C1, C2));
   1330         }
   1331         return ConstantVector::get(Res);
   1332       case Instruction::SDiv:
   1333         for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
   1334           C1 = CP1 ? CP1->getOperand(i) : Constant::getNullValue(EltTy);
   1335           C2 = CP2 ? CP2->getOperand(i) : Constant::getNullValue(EltTy);
   1336           Res.push_back(ConstantExpr::getSDiv(C1, C2));
   1337         }
   1338         return ConstantVector::get(Res);
   1339       case Instruction::FDiv:
   1340         for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
   1341           C1 = CP1 ? CP1->getOperand(i) : Constant::getNullValue(EltTy);
   1342           C2 = CP2 ? CP2->getOperand(i) : Constant::getNullValue(EltTy);
   1343           Res.push_back(ConstantExpr::getFDiv(C1, C2));
   1344         }
   1345         return ConstantVector::get(Res);
   1346       case Instruction::URem:
   1347         for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
   1348           C1 = CP1 ? CP1->getOperand(i) : Constant::getNullValue(EltTy);
   1349           C2 = CP2 ? CP2->getOperand(i) : Constant::getNullValue(EltTy);
   1350           Res.push_back(ConstantExpr::getURem(C1, C2));
   1351         }
   1352         return ConstantVector::get(Res);
   1353       case Instruction::SRem:
   1354         for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
   1355           C1 = CP1 ? CP1->getOperand(i) : Constant::getNullValue(EltTy);
   1356           C2 = CP2 ? CP2->getOperand(i) : Constant::getNullValue(EltTy);
   1357           Res.push_back(ConstantExpr::getSRem(C1, C2));
   1358         }
   1359         return ConstantVector::get(Res);
   1360       case Instruction::FRem:
   1361         for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
   1362           C1 = CP1 ? CP1->getOperand(i) : Constant::getNullValue(EltTy);
   1363           C2 = CP2 ? CP2->getOperand(i) : Constant::getNullValue(EltTy);
   1364           Res.push_back(ConstantExpr::getFRem(C1, C2));
   1365         }
   1366         return ConstantVector::get(Res);
   1367       case Instruction::And:
   1368         for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
   1369           C1 = CP1 ? CP1->getOperand(i) : Constant::getNullValue(EltTy);
   1370           C2 = CP2 ? CP2->getOperand(i) : Constant::getNullValue(EltTy);
   1371           Res.push_back(ConstantExpr::getAnd(C1, C2));
   1372         }
   1373         return ConstantVector::get(Res);
   1374       case Instruction::Or:
   1375         for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
   1376           C1 = CP1 ? CP1->getOperand(i) : Constant::getNullValue(EltTy);
   1377           C2 = CP2 ? CP2->getOperand(i) : Constant::getNullValue(EltTy);
   1378           Res.push_back(ConstantExpr::getOr(C1, C2));
   1379         }
   1380         return ConstantVector::get(Res);
   1381       case Instruction::Xor:
   1382         for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
   1383           C1 = CP1 ? CP1->getOperand(i) : Constant::getNullValue(EltTy);
   1384           C2 = CP2 ? CP2->getOperand(i) : Constant::getNullValue(EltTy);
   1385           Res.push_back(ConstantExpr::getXor(C1, C2));
   1386         }
   1387         return ConstantVector::get(Res);
   1388       case Instruction::LShr:
   1389         for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
   1390           C1 = CP1 ? CP1->getOperand(i) : Constant::getNullValue(EltTy);
   1391           C2 = CP2 ? CP2->getOperand(i) : Constant::getNullValue(EltTy);
   1392           Res.push_back(ConstantExpr::getLShr(C1, C2));
   1393         }
   1394         return ConstantVector::get(Res);
   1395       case Instruction::AShr:
   1396         for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
   1397           C1 = CP1 ? CP1->getOperand(i) : Constant::getNullValue(EltTy);
   1398           C2 = CP2 ? CP2->getOperand(i) : Constant::getNullValue(EltTy);
   1399           Res.push_back(ConstantExpr::getAShr(C1, C2));
   1400         }
   1401         return ConstantVector::get(Res);
   1402       case Instruction::Shl:
   1403         for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
   1404           C1 = CP1 ? CP1->getOperand(i) : Constant::getNullValue(EltTy);
   1405           C2 = CP2 ? CP2->getOperand(i) : Constant::getNullValue(EltTy);
   1406           Res.push_back(ConstantExpr::getShl(C1, C2));
   1407         }
   1408         return ConstantVector::get(Res);
   1409       }
   1410     }
   1411   }
   1412 
   1413   if (ConstantExpr *CE1 = dyn_cast<ConstantExpr>(C1)) {
   1414     // There are many possible foldings we could do here.  We should probably
   1415     // at least fold add of a pointer with an integer into the appropriate
   1416     // getelementptr.  This will improve alias analysis a bit.
   1417 
   1418     // Given ((a + b) + c), if (b + c) folds to something interesting, return
   1419     // (a + (b + c)).
   1420     if (Instruction::isAssociative(Opcode) && CE1->getOpcode() == Opcode) {
   1421       Constant *T = ConstantExpr::get(Opcode, CE1->getOperand(1), C2);
   1422       if (!isa<ConstantExpr>(T) || cast<ConstantExpr>(T)->getOpcode() != Opcode)
   1423         return ConstantExpr::get(Opcode, CE1->getOperand(0), T);
   1424     }
   1425   } else if (isa<ConstantExpr>(C2)) {
   1426     // If C2 is a constant expr and C1 isn't, flop them around and fold the
   1427     // other way if possible.
   1428     if (Instruction::isCommutative(Opcode))
   1429       return ConstantFoldBinaryInstruction(Opcode, C2, C1);
   1430   }
   1431 
   1432   // i1 can be simplified in many cases.
   1433   if (C1->getType()->isIntegerTy(1)) {
   1434     switch (Opcode) {
   1435     case Instruction::Add:
   1436     case Instruction::Sub:
   1437       return ConstantExpr::getXor(C1, C2);
   1438     case Instruction::Mul:
   1439       return ConstantExpr::getAnd(C1, C2);
   1440     case Instruction::Shl:
   1441     case Instruction::LShr:
   1442     case Instruction::AShr:
   1443       // We can assume that C2 == 0.  If it were one the result would be
   1444       // undefined because the shift value is as large as the bitwidth.
   1445       return C1;
   1446     case Instruction::SDiv:
   1447     case Instruction::UDiv:
   1448       // We can assume that C2 == 1.  If it were zero the result would be
   1449       // undefined through division by zero.
   1450       return C1;
   1451     case Instruction::URem:
   1452     case Instruction::SRem:
   1453       // We can assume that C2 == 1.  If it were zero the result would be
   1454       // undefined through division by zero.
   1455       return ConstantInt::getFalse(C1->getContext());
   1456     default:
   1457       break;
   1458     }
   1459   }
   1460 
   1461   // We don't know how to fold this.
   1462   return 0;
   1463 }
   1464 
   1465 /// isZeroSizedType - This type is zero sized if its an array or structure of
   1466 /// zero sized types.  The only leaf zero sized type is an empty structure.
   1467 static bool isMaybeZeroSizedType(Type *Ty) {
   1468   if (StructType *STy = dyn_cast<StructType>(Ty)) {
   1469     if (STy->isOpaque()) return true;  // Can't say.
   1470 
   1471     // If all of elements have zero size, this does too.
   1472     for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i)
   1473       if (!isMaybeZeroSizedType(STy->getElementType(i))) return false;
   1474     return true;
   1475 
   1476   } else if (ArrayType *ATy = dyn_cast<ArrayType>(Ty)) {
   1477     return isMaybeZeroSizedType(ATy->getElementType());
   1478   }
   1479   return false;
   1480 }
   1481 
   1482 /// IdxCompare - Compare the two constants as though they were getelementptr
   1483 /// indices.  This allows coersion of the types to be the same thing.
   1484 ///
   1485 /// If the two constants are the "same" (after coersion), return 0.  If the
   1486 /// first is less than the second, return -1, if the second is less than the
   1487 /// first, return 1.  If the constants are not integral, return -2.
   1488 ///
   1489 static int IdxCompare(Constant *C1, Constant *C2, Type *ElTy) {
   1490   if (C1 == C2) return 0;
   1491 
   1492   // Ok, we found a different index.  If they are not ConstantInt, we can't do
   1493   // anything with them.
   1494   if (!isa<ConstantInt>(C1) || !isa<ConstantInt>(C2))
   1495     return -2; // don't know!
   1496 
   1497   // Ok, we have two differing integer indices.  Sign extend them to be the same
   1498   // type.  Long is always big enough, so we use it.
   1499   if (!C1->getType()->isIntegerTy(64))
   1500     C1 = ConstantExpr::getSExt(C1, Type::getInt64Ty(C1->getContext()));
   1501 
   1502   if (!C2->getType()->isIntegerTy(64))
   1503     C2 = ConstantExpr::getSExt(C2, Type::getInt64Ty(C1->getContext()));
   1504 
   1505   if (C1 == C2) return 0;  // They are equal
   1506 
   1507   // If the type being indexed over is really just a zero sized type, there is
   1508   // no pointer difference being made here.
   1509   if (isMaybeZeroSizedType(ElTy))
   1510     return -2; // dunno.
   1511 
   1512   // If they are really different, now that they are the same type, then we
   1513   // found a difference!
   1514   if (cast<ConstantInt>(C1)->getSExtValue() <
   1515       cast<ConstantInt>(C2)->getSExtValue())
   1516     return -1;
   1517   else
   1518     return 1;
   1519 }
   1520 
   1521 /// evaluateFCmpRelation - This function determines if there is anything we can
   1522 /// decide about the two constants provided.  This doesn't need to handle simple
   1523 /// things like ConstantFP comparisons, but should instead handle ConstantExprs.
   1524 /// If we can determine that the two constants have a particular relation to
   1525 /// each other, we should return the corresponding FCmpInst predicate,
   1526 /// otherwise return FCmpInst::BAD_FCMP_PREDICATE. This is used below in
   1527 /// ConstantFoldCompareInstruction.
   1528 ///
   1529 /// To simplify this code we canonicalize the relation so that the first
   1530 /// operand is always the most "complex" of the two.  We consider ConstantFP
   1531 /// to be the simplest, and ConstantExprs to be the most complex.
   1532 static FCmpInst::Predicate evaluateFCmpRelation(Constant *V1, Constant *V2) {
   1533   assert(V1->getType() == V2->getType() &&
   1534          "Cannot compare values of different types!");
   1535 
   1536   // No compile-time operations on this type yet.
   1537   if (V1->getType()->isPPC_FP128Ty())
   1538     return FCmpInst::BAD_FCMP_PREDICATE;
   1539 
   1540   // Handle degenerate case quickly
   1541   if (V1 == V2) return FCmpInst::FCMP_OEQ;
   1542 
   1543   if (!isa<ConstantExpr>(V1)) {
   1544     if (!isa<ConstantExpr>(V2)) {
   1545       // We distilled thisUse the standard constant folder for a few cases
   1546       ConstantInt *R = 0;
   1547       R = dyn_cast<ConstantInt>(
   1548                       ConstantExpr::getFCmp(FCmpInst::FCMP_OEQ, V1, V2));
   1549       if (R && !R->isZero())
   1550         return FCmpInst::FCMP_OEQ;
   1551       R = dyn_cast<ConstantInt>(
   1552                       ConstantExpr::getFCmp(FCmpInst::FCMP_OLT, V1, V2));
   1553       if (R && !R->isZero())
   1554         return FCmpInst::FCMP_OLT;
   1555       R = dyn_cast<ConstantInt>(
   1556                       ConstantExpr::getFCmp(FCmpInst::FCMP_OGT, V1, V2));
   1557       if (R && !R->isZero())
   1558         return FCmpInst::FCMP_OGT;
   1559 
   1560       // Nothing more we can do
   1561       return FCmpInst::BAD_FCMP_PREDICATE;
   1562     }
   1563 
   1564     // If the first operand is simple and second is ConstantExpr, swap operands.
   1565     FCmpInst::Predicate SwappedRelation = evaluateFCmpRelation(V2, V1);
   1566     if (SwappedRelation != FCmpInst::BAD_FCMP_PREDICATE)
   1567       return FCmpInst::getSwappedPredicate(SwappedRelation);
   1568   } else {
   1569     // Ok, the LHS is known to be a constantexpr.  The RHS can be any of a
   1570     // constantexpr or a simple constant.
   1571     ConstantExpr *CE1 = cast<ConstantExpr>(V1);
   1572     switch (CE1->getOpcode()) {
   1573     case Instruction::FPTrunc:
   1574     case Instruction::FPExt:
   1575     case Instruction::UIToFP:
   1576     case Instruction::SIToFP:
   1577       // We might be able to do something with these but we don't right now.
   1578       break;
   1579     default:
   1580       break;
   1581     }
   1582   }
   1583   // There are MANY other foldings that we could perform here.  They will
   1584   // probably be added on demand, as they seem needed.
   1585   return FCmpInst::BAD_FCMP_PREDICATE;
   1586 }
   1587 
   1588 /// evaluateICmpRelation - This function determines if there is anything we can
   1589 /// decide about the two constants provided.  This doesn't need to handle simple
   1590 /// things like integer comparisons, but should instead handle ConstantExprs
   1591 /// and GlobalValues.  If we can determine that the two constants have a
   1592 /// particular relation to each other, we should return the corresponding ICmp
   1593 /// predicate, otherwise return ICmpInst::BAD_ICMP_PREDICATE.
   1594 ///
   1595 /// To simplify this code we canonicalize the relation so that the first
   1596 /// operand is always the most "complex" of the two.  We consider simple
   1597 /// constants (like ConstantInt) to be the simplest, followed by
   1598 /// GlobalValues, followed by ConstantExpr's (the most complex).
   1599 ///
   1600 static ICmpInst::Predicate evaluateICmpRelation(Constant *V1, Constant *V2,
   1601                                                 bool isSigned) {
   1602   assert(V1->getType() == V2->getType() &&
   1603          "Cannot compare different types of values!");
   1604   if (V1 == V2) return ICmpInst::ICMP_EQ;
   1605 
   1606   if (!isa<ConstantExpr>(V1) && !isa<GlobalValue>(V1) &&
   1607       !isa<BlockAddress>(V1)) {
   1608     if (!isa<GlobalValue>(V2) && !isa<ConstantExpr>(V2) &&
   1609         !isa<BlockAddress>(V2)) {
   1610       // We distilled this down to a simple case, use the standard constant
   1611       // folder.
   1612       ConstantInt *R = 0;
   1613       ICmpInst::Predicate pred = ICmpInst::ICMP_EQ;
   1614       R = dyn_cast<ConstantInt>(ConstantExpr::getICmp(pred, V1, V2));
   1615       if (R && !R->isZero())
   1616         return pred;
   1617       pred = isSigned ? ICmpInst::ICMP_SLT : ICmpInst::ICMP_ULT;
   1618       R = dyn_cast<ConstantInt>(ConstantExpr::getICmp(pred, V1, V2));
   1619       if (R && !R->isZero())
   1620         return pred;
   1621       pred = isSigned ? ICmpInst::ICMP_SGT : ICmpInst::ICMP_UGT;
   1622       R = dyn_cast<ConstantInt>(ConstantExpr::getICmp(pred, V1, V2));
   1623       if (R && !R->isZero())
   1624         return pred;
   1625 
   1626       // If we couldn't figure it out, bail.
   1627       return ICmpInst::BAD_ICMP_PREDICATE;
   1628     }
   1629 
   1630     // If the first operand is simple, swap operands.
   1631     ICmpInst::Predicate SwappedRelation =
   1632       evaluateICmpRelation(V2, V1, isSigned);
   1633     if (SwappedRelation != ICmpInst::BAD_ICMP_PREDICATE)
   1634       return ICmpInst::getSwappedPredicate(SwappedRelation);
   1635 
   1636   } else if (const GlobalValue *GV = dyn_cast<GlobalValue>(V1)) {
   1637     if (isa<ConstantExpr>(V2)) {  // Swap as necessary.
   1638       ICmpInst::Predicate SwappedRelation =
   1639         evaluateICmpRelation(V2, V1, isSigned);
   1640       if (SwappedRelation != ICmpInst::BAD_ICMP_PREDICATE)
   1641         return ICmpInst::getSwappedPredicate(SwappedRelation);
   1642       return ICmpInst::BAD_ICMP_PREDICATE;
   1643     }
   1644 
   1645     // Now we know that the RHS is a GlobalValue, BlockAddress or simple
   1646     // constant (which, since the types must match, means that it's a
   1647     // ConstantPointerNull).
   1648     if (const GlobalValue *GV2 = dyn_cast<GlobalValue>(V2)) {
   1649       // Don't try to decide equality of aliases.
   1650       if (!isa<GlobalAlias>(GV) && !isa<GlobalAlias>(GV2))
   1651         if (!GV->hasExternalWeakLinkage() || !GV2->hasExternalWeakLinkage())
   1652           return ICmpInst::ICMP_NE;
   1653     } else if (isa<BlockAddress>(V2)) {
   1654       return ICmpInst::ICMP_NE; // Globals never equal labels.
   1655     } else {
   1656       assert(isa<ConstantPointerNull>(V2) && "Canonicalization guarantee!");
   1657       // GlobalVals can never be null unless they have external weak linkage.
   1658       // We don't try to evaluate aliases here.
   1659       if (!GV->hasExternalWeakLinkage() && !isa<GlobalAlias>(GV))
   1660         return ICmpInst::ICMP_NE;
   1661     }
   1662   } else if (const BlockAddress *BA = dyn_cast<BlockAddress>(V1)) {
   1663     if (isa<ConstantExpr>(V2)) {  // Swap as necessary.
   1664       ICmpInst::Predicate SwappedRelation =
   1665         evaluateICmpRelation(V2, V1, isSigned);
   1666       if (SwappedRelation != ICmpInst::BAD_ICMP_PREDICATE)
   1667         return ICmpInst::getSwappedPredicate(SwappedRelation);
   1668       return ICmpInst::BAD_ICMP_PREDICATE;
   1669     }
   1670 
   1671     // Now we know that the RHS is a GlobalValue, BlockAddress or simple
   1672     // constant (which, since the types must match, means that it is a
   1673     // ConstantPointerNull).
   1674     if (const BlockAddress *BA2 = dyn_cast<BlockAddress>(V2)) {
   1675       // Block address in another function can't equal this one, but block
   1676       // addresses in the current function might be the same if blocks are
   1677       // empty.
   1678       if (BA2->getFunction() != BA->getFunction())
   1679         return ICmpInst::ICMP_NE;
   1680     } else {
   1681       // Block addresses aren't null, don't equal the address of globals.
   1682       assert((isa<ConstantPointerNull>(V2) || isa<GlobalValue>(V2)) &&
   1683              "Canonicalization guarantee!");
   1684       return ICmpInst::ICMP_NE;
   1685     }
   1686   } else {
   1687     // Ok, the LHS is known to be a constantexpr.  The RHS can be any of a
   1688     // constantexpr, a global, block address, or a simple constant.
   1689     ConstantExpr *CE1 = cast<ConstantExpr>(V1);
   1690     Constant *CE1Op0 = CE1->getOperand(0);
   1691 
   1692     switch (CE1->getOpcode()) {
   1693     case Instruction::Trunc:
   1694     case Instruction::FPTrunc:
   1695     case Instruction::FPExt:
   1696     case Instruction::FPToUI:
   1697     case Instruction::FPToSI:
   1698       break; // We can't evaluate floating point casts or truncations.
   1699 
   1700     case Instruction::UIToFP:
   1701     case Instruction::SIToFP:
   1702     case Instruction::BitCast:
   1703     case Instruction::ZExt:
   1704     case Instruction::SExt:
   1705       // If the cast is not actually changing bits, and the second operand is a
   1706       // null pointer, do the comparison with the pre-casted value.
   1707       if (V2->isNullValue() &&
   1708           (CE1->getType()->isPointerTy() || CE1->getType()->isIntegerTy())) {
   1709         if (CE1->getOpcode() == Instruction::ZExt) isSigned = false;
   1710         if (CE1->getOpcode() == Instruction::SExt) isSigned = true;
   1711         return evaluateICmpRelation(CE1Op0,
   1712                                     Constant::getNullValue(CE1Op0->getType()),
   1713                                     isSigned);
   1714       }
   1715       break;
   1716 
   1717     case Instruction::GetElementPtr:
   1718       // Ok, since this is a getelementptr, we know that the constant has a
   1719       // pointer type.  Check the various cases.
   1720       if (isa<ConstantPointerNull>(V2)) {
   1721         // If we are comparing a GEP to a null pointer, check to see if the base
   1722         // of the GEP equals the null pointer.
   1723         if (const GlobalValue *GV = dyn_cast<GlobalValue>(CE1Op0)) {
   1724           if (GV->hasExternalWeakLinkage())
   1725             // Weak linkage GVals could be zero or not. We're comparing that
   1726             // to null pointer so its greater-or-equal
   1727             return isSigned ? ICmpInst::ICMP_SGE : ICmpInst::ICMP_UGE;
   1728           else
   1729             // If its not weak linkage, the GVal must have a non-zero address
   1730             // so the result is greater-than
   1731             return isSigned ? ICmpInst::ICMP_SGT : ICmpInst::ICMP_UGT;
   1732         } else if (isa<ConstantPointerNull>(CE1Op0)) {
   1733           // If we are indexing from a null pointer, check to see if we have any
   1734           // non-zero indices.
   1735           for (unsigned i = 1, e = CE1->getNumOperands(); i != e; ++i)
   1736             if (!CE1->getOperand(i)->isNullValue())
   1737               // Offsetting from null, must not be equal.
   1738               return isSigned ? ICmpInst::ICMP_SGT : ICmpInst::ICMP_UGT;
   1739           // Only zero indexes from null, must still be zero.
   1740           return ICmpInst::ICMP_EQ;
   1741         }
   1742         // Otherwise, we can't really say if the first operand is null or not.
   1743       } else if (const GlobalValue *GV2 = dyn_cast<GlobalValue>(V2)) {
   1744         if (isa<ConstantPointerNull>(CE1Op0)) {
   1745           if (GV2->hasExternalWeakLinkage())
   1746             // Weak linkage GVals could be zero or not. We're comparing it to
   1747             // a null pointer, so its less-or-equal
   1748             return isSigned ? ICmpInst::ICMP_SLE : ICmpInst::ICMP_ULE;
   1749           else
   1750             // If its not weak linkage, the GVal must have a non-zero address
   1751             // so the result is less-than
   1752             return isSigned ? ICmpInst::ICMP_SLT : ICmpInst::ICMP_ULT;
   1753         } else if (const GlobalValue *GV = dyn_cast<GlobalValue>(CE1Op0)) {
   1754           if (GV == GV2) {
   1755             // If this is a getelementptr of the same global, then it must be
   1756             // different.  Because the types must match, the getelementptr could
   1757             // only have at most one index, and because we fold getelementptr's
   1758             // with a single zero index, it must be nonzero.
   1759             assert(CE1->getNumOperands() == 2 &&
   1760                    !CE1->getOperand(1)->isNullValue() &&
   1761                    "Surprising getelementptr!");
   1762             return isSigned ? ICmpInst::ICMP_SGT : ICmpInst::ICMP_UGT;
   1763           } else {
   1764             // If they are different globals, we don't know what the value is,
   1765             // but they can't be equal.
   1766             return ICmpInst::ICMP_NE;
   1767           }
   1768         }
   1769       } else {
   1770         ConstantExpr *CE2 = cast<ConstantExpr>(V2);
   1771         Constant *CE2Op0 = CE2->getOperand(0);
   1772 
   1773         // There are MANY other foldings that we could perform here.  They will
   1774         // probably be added on demand, as they seem needed.
   1775         switch (CE2->getOpcode()) {
   1776         default: break;
   1777         case Instruction::GetElementPtr:
   1778           // By far the most common case to handle is when the base pointers are
   1779           // obviously to the same or different globals.
   1780           if (isa<GlobalValue>(CE1Op0) && isa<GlobalValue>(CE2Op0)) {
   1781             if (CE1Op0 != CE2Op0) // Don't know relative ordering, but not equal
   1782               return ICmpInst::ICMP_NE;
   1783             // Ok, we know that both getelementptr instructions are based on the
   1784             // same global.  From this, we can precisely determine the relative
   1785             // ordering of the resultant pointers.
   1786             unsigned i = 1;
   1787 
   1788             // The logic below assumes that the result of the comparison
   1789             // can be determined by finding the first index that differs.
   1790             // This doesn't work if there is over-indexing in any
   1791             // subsequent indices, so check for that case first.
   1792             if (!CE1->isGEPWithNoNotionalOverIndexing() ||
   1793                 !CE2->isGEPWithNoNotionalOverIndexing())
   1794                return ICmpInst::BAD_ICMP_PREDICATE; // Might be equal.
   1795 
   1796             // Compare all of the operands the GEP's have in common.
   1797             gep_type_iterator GTI = gep_type_begin(CE1);
   1798             for (;i != CE1->getNumOperands() && i != CE2->getNumOperands();
   1799                  ++i, ++GTI)
   1800               switch (IdxCompare(CE1->getOperand(i),
   1801                                  CE2->getOperand(i), GTI.getIndexedType())) {
   1802               case -1: return isSigned ? ICmpInst::ICMP_SLT:ICmpInst::ICMP_ULT;
   1803               case 1:  return isSigned ? ICmpInst::ICMP_SGT:ICmpInst::ICMP_UGT;
   1804               case -2: return ICmpInst::BAD_ICMP_PREDICATE;
   1805               }
   1806 
   1807             // Ok, we ran out of things they have in common.  If any leftovers
   1808             // are non-zero then we have a difference, otherwise we are equal.
   1809             for (; i < CE1->getNumOperands(); ++i)
   1810               if (!CE1->getOperand(i)->isNullValue()) {
   1811                 if (isa<ConstantInt>(CE1->getOperand(i)))
   1812                   return isSigned ? ICmpInst::ICMP_SGT : ICmpInst::ICMP_UGT;
   1813                 else
   1814                   return ICmpInst::BAD_ICMP_PREDICATE; // Might be equal.
   1815               }
   1816 
   1817             for (; i < CE2->getNumOperands(); ++i)
   1818               if (!CE2->getOperand(i)->isNullValue()) {
   1819                 if (isa<ConstantInt>(CE2->getOperand(i)))
   1820                   return isSigned ? ICmpInst::ICMP_SLT : ICmpInst::ICMP_ULT;
   1821                 else
   1822                   return ICmpInst::BAD_ICMP_PREDICATE; // Might be equal.
   1823               }
   1824             return ICmpInst::ICMP_EQ;
   1825           }
   1826         }
   1827       }
   1828     default:
   1829       break;
   1830     }
   1831   }
   1832 
   1833   return ICmpInst::BAD_ICMP_PREDICATE;
   1834 }
   1835 
   1836 Constant *llvm::ConstantFoldCompareInstruction(unsigned short pred,
   1837                                                Constant *C1, Constant *C2) {
   1838   Type *ResultTy;
   1839   if (VectorType *VT = dyn_cast<VectorType>(C1->getType()))
   1840     ResultTy = VectorType::get(Type::getInt1Ty(C1->getContext()),
   1841                                VT->getNumElements());
   1842   else
   1843     ResultTy = Type::getInt1Ty(C1->getContext());
   1844 
   1845   // Fold FCMP_FALSE/FCMP_TRUE unconditionally.
   1846   if (pred == FCmpInst::FCMP_FALSE)
   1847     return Constant::getNullValue(ResultTy);
   1848 
   1849   if (pred == FCmpInst::FCMP_TRUE)
   1850     return Constant::getAllOnesValue(ResultTy);
   1851 
   1852   // Handle some degenerate cases first
   1853   if (isa<UndefValue>(C1) || isa<UndefValue>(C2)) {
   1854     // For EQ and NE, we can always pick a value for the undef to make the
   1855     // predicate pass or fail, so we can return undef.
   1856     // Also, if both operands are undef, we can return undef.
   1857     if (ICmpInst::isEquality(ICmpInst::Predicate(pred)) ||
   1858         (isa<UndefValue>(C1) && isa<UndefValue>(C2)))
   1859       return UndefValue::get(ResultTy);
   1860     // Otherwise, pick the same value as the non-undef operand, and fold
   1861     // it to true or false.
   1862     return ConstantInt::get(ResultTy, CmpInst::isTrueWhenEqual(pred));
   1863   }
   1864 
   1865   // No compile-time operations on this type yet.
   1866   if (C1->getType()->isPPC_FP128Ty())
   1867     return 0;
   1868 
   1869   // icmp eq/ne(null,GV) -> false/true
   1870   if (C1->isNullValue()) {
   1871     if (const GlobalValue *GV = dyn_cast<GlobalValue>(C2))
   1872       // Don't try to evaluate aliases.  External weak GV can be null.
   1873       if (!isa<GlobalAlias>(GV) && !GV->hasExternalWeakLinkage()) {
   1874         if (pred == ICmpInst::ICMP_EQ)
   1875           return ConstantInt::getFalse(C1->getContext());
   1876         else if (pred == ICmpInst::ICMP_NE)
   1877           return ConstantInt::getTrue(C1->getContext());
   1878       }
   1879   // icmp eq/ne(GV,null) -> false/true
   1880   } else if (C2->isNullValue()) {
   1881     if (const GlobalValue *GV = dyn_cast<GlobalValue>(C1))
   1882       // Don't try to evaluate aliases.  External weak GV can be null.
   1883       if (!isa<GlobalAlias>(GV) && !GV->hasExternalWeakLinkage()) {
   1884         if (pred == ICmpInst::ICMP_EQ)
   1885           return ConstantInt::getFalse(C1->getContext());
   1886         else if (pred == ICmpInst::ICMP_NE)
   1887           return ConstantInt::getTrue(C1->getContext());
   1888       }
   1889   }
   1890 
   1891   // If the comparison is a comparison between two i1's, simplify it.
   1892   if (C1->getType()->isIntegerTy(1)) {
   1893     switch(pred) {
   1894     case ICmpInst::ICMP_EQ:
   1895       if (isa<ConstantInt>(C2))
   1896         return ConstantExpr::getXor(C1, ConstantExpr::getNot(C2));
   1897       return ConstantExpr::getXor(ConstantExpr::getNot(C1), C2);
   1898     case ICmpInst::ICMP_NE:
   1899       return ConstantExpr::getXor(C1, C2);
   1900     default:
   1901       break;
   1902     }
   1903   }
   1904 
   1905   if (isa<ConstantInt>(C1) && isa<ConstantInt>(C2)) {
   1906     APInt V1 = cast<ConstantInt>(C1)->getValue();
   1907     APInt V2 = cast<ConstantInt>(C2)->getValue();
   1908     switch (pred) {
   1909     default: llvm_unreachable("Invalid ICmp Predicate"); return 0;
   1910     case ICmpInst::ICMP_EQ:  return ConstantInt::get(ResultTy, V1 == V2);
   1911     case ICmpInst::ICMP_NE:  return ConstantInt::get(ResultTy, V1 != V2);
   1912     case ICmpInst::ICMP_SLT: return ConstantInt::get(ResultTy, V1.slt(V2));
   1913     case ICmpInst::ICMP_SGT: return ConstantInt::get(ResultTy, V1.sgt(V2));
   1914     case ICmpInst::ICMP_SLE: return ConstantInt::get(ResultTy, V1.sle(V2));
   1915     case ICmpInst::ICMP_SGE: return ConstantInt::get(ResultTy, V1.sge(V2));
   1916     case ICmpInst::ICMP_ULT: return ConstantInt::get(ResultTy, V1.ult(V2));
   1917     case ICmpInst::ICMP_UGT: return ConstantInt::get(ResultTy, V1.ugt(V2));
   1918     case ICmpInst::ICMP_ULE: return ConstantInt::get(ResultTy, V1.ule(V2));
   1919     case ICmpInst::ICMP_UGE: return ConstantInt::get(ResultTy, V1.uge(V2));
   1920     }
   1921   } else if (isa<ConstantFP>(C1) && isa<ConstantFP>(C2)) {
   1922     APFloat C1V = cast<ConstantFP>(C1)->getValueAPF();
   1923     APFloat C2V = cast<ConstantFP>(C2)->getValueAPF();
   1924     APFloat::cmpResult R = C1V.compare(C2V);
   1925     switch (pred) {
   1926     default: llvm_unreachable("Invalid FCmp Predicate"); return 0;
   1927     case FCmpInst::FCMP_FALSE: return Constant::getNullValue(ResultTy);
   1928     case FCmpInst::FCMP_TRUE:  return Constant::getAllOnesValue(ResultTy);
   1929     case FCmpInst::FCMP_UNO:
   1930       return ConstantInt::get(ResultTy, R==APFloat::cmpUnordered);
   1931     case FCmpInst::FCMP_ORD:
   1932       return ConstantInt::get(ResultTy, R!=APFloat::cmpUnordered);
   1933     case FCmpInst::FCMP_UEQ:
   1934       return ConstantInt::get(ResultTy, R==APFloat::cmpUnordered ||
   1935                                         R==APFloat::cmpEqual);
   1936     case FCmpInst::FCMP_OEQ:
   1937       return ConstantInt::get(ResultTy, R==APFloat::cmpEqual);
   1938     case FCmpInst::FCMP_UNE:
   1939       return ConstantInt::get(ResultTy, R!=APFloat::cmpEqual);
   1940     case FCmpInst::FCMP_ONE:
   1941       return ConstantInt::get(ResultTy, R==APFloat::cmpLessThan ||
   1942                                         R==APFloat::cmpGreaterThan);
   1943     case FCmpInst::FCMP_ULT:
   1944       return ConstantInt::get(ResultTy, R==APFloat::cmpUnordered ||
   1945                                         R==APFloat::cmpLessThan);
   1946     case FCmpInst::FCMP_OLT:
   1947       return ConstantInt::get(ResultTy, R==APFloat::cmpLessThan);
   1948     case FCmpInst::FCMP_UGT:
   1949       return ConstantInt::get(ResultTy, R==APFloat::cmpUnordered ||
   1950                                         R==APFloat::cmpGreaterThan);
   1951     case FCmpInst::FCMP_OGT:
   1952       return ConstantInt::get(ResultTy, R==APFloat::cmpGreaterThan);
   1953     case FCmpInst::FCMP_ULE:
   1954       return ConstantInt::get(ResultTy, R!=APFloat::cmpGreaterThan);
   1955     case FCmpInst::FCMP_OLE:
   1956       return ConstantInt::get(ResultTy, R==APFloat::cmpLessThan ||
   1957                                         R==APFloat::cmpEqual);
   1958     case FCmpInst::FCMP_UGE:
   1959       return ConstantInt::get(ResultTy, R!=APFloat::cmpLessThan);
   1960     case FCmpInst::FCMP_OGE:
   1961       return ConstantInt::get(ResultTy, R==APFloat::cmpGreaterThan ||
   1962                                         R==APFloat::cmpEqual);
   1963     }
   1964   } else if (C1->getType()->isVectorTy()) {
   1965     SmallVector<Constant*, 16> C1Elts, C2Elts;
   1966     C1->getVectorElements(C1Elts);
   1967     C2->getVectorElements(C2Elts);
   1968     if (C1Elts.empty() || C2Elts.empty())
   1969       return 0;
   1970 
   1971     // If we can constant fold the comparison of each element, constant fold
   1972     // the whole vector comparison.
   1973     SmallVector<Constant*, 4> ResElts;
   1974     // Compare the elements, producing an i1 result or constant expr.
   1975     for (unsigned i = 0, e = C1Elts.size(); i != e; ++i)
   1976       ResElts.push_back(ConstantExpr::getCompare(pred, C1Elts[i], C2Elts[i]));
   1977 
   1978     return ConstantVector::get(ResElts);
   1979   }
   1980 
   1981   if (C1->getType()->isFloatingPointTy()) {
   1982     int Result = -1;  // -1 = unknown, 0 = known false, 1 = known true.
   1983     switch (evaluateFCmpRelation(C1, C2)) {
   1984     default: llvm_unreachable("Unknown relation!");
   1985     case FCmpInst::FCMP_UNO:
   1986     case FCmpInst::FCMP_ORD:
   1987     case FCmpInst::FCMP_UEQ:
   1988     case FCmpInst::FCMP_UNE:
   1989     case FCmpInst::FCMP_ULT:
   1990     case FCmpInst::FCMP_UGT:
   1991     case FCmpInst::FCMP_ULE:
   1992     case FCmpInst::FCMP_UGE:
   1993     case FCmpInst::FCMP_TRUE:
   1994     case FCmpInst::FCMP_FALSE:
   1995     case FCmpInst::BAD_FCMP_PREDICATE:
   1996       break; // Couldn't determine anything about these constants.
   1997     case FCmpInst::FCMP_OEQ: // We know that C1 == C2
   1998       Result = (pred == FCmpInst::FCMP_UEQ || pred == FCmpInst::FCMP_OEQ ||
   1999                 pred == FCmpInst::FCMP_ULE || pred == FCmpInst::FCMP_OLE ||
   2000                 pred == FCmpInst::FCMP_UGE || pred == FCmpInst::FCMP_OGE);
   2001       break;
   2002     case FCmpInst::FCMP_OLT: // We know that C1 < C2
   2003       Result = (pred == FCmpInst::FCMP_UNE || pred == FCmpInst::FCMP_ONE ||
   2004                 pred == FCmpInst::FCMP_ULT || pred == FCmpInst::FCMP_OLT ||
   2005                 pred == FCmpInst::FCMP_ULE || pred == FCmpInst::FCMP_OLE);
   2006       break;
   2007     case FCmpInst::FCMP_OGT: // We know that C1 > C2
   2008       Result = (pred == FCmpInst::FCMP_UNE || pred == FCmpInst::FCMP_ONE ||
   2009                 pred == FCmpInst::FCMP_UGT || pred == FCmpInst::FCMP_OGT ||
   2010                 pred == FCmpInst::FCMP_UGE || pred == FCmpInst::FCMP_OGE);
   2011       break;
   2012     case FCmpInst::FCMP_OLE: // We know that C1 <= C2
   2013       // We can only partially decide this relation.
   2014       if (pred == FCmpInst::FCMP_UGT || pred == FCmpInst::FCMP_OGT)
   2015         Result = 0;
   2016       else if (pred == FCmpInst::FCMP_ULT || pred == FCmpInst::FCMP_OLT)
   2017         Result = 1;
   2018       break;
   2019     case FCmpInst::FCMP_OGE: // We known that C1 >= C2
   2020       // We can only partially decide this relation.
   2021       if (pred == FCmpInst::FCMP_ULT || pred == FCmpInst::FCMP_OLT)
   2022         Result = 0;
   2023       else if (pred == FCmpInst::FCMP_UGT || pred == FCmpInst::FCMP_OGT)
   2024         Result = 1;
   2025       break;
   2026     case FCmpInst::FCMP_ONE: // We know that C1 != C2
   2027       // We can only partially decide this relation.
   2028       if (pred == FCmpInst::FCMP_OEQ || pred == FCmpInst::FCMP_UEQ)
   2029         Result = 0;
   2030       else if (pred == FCmpInst::FCMP_ONE || pred == FCmpInst::FCMP_UNE)
   2031         Result = 1;
   2032       break;
   2033     }
   2034 
   2035     // If we evaluated the result, return it now.
   2036     if (Result != -1)
   2037       return ConstantInt::get(ResultTy, Result);
   2038 
   2039   } else {
   2040     // Evaluate the relation between the two constants, per the predicate.
   2041     int Result = -1;  // -1 = unknown, 0 = known false, 1 = known true.
   2042     switch (evaluateICmpRelation(C1, C2, CmpInst::isSigned(pred))) {
   2043     default: llvm_unreachable("Unknown relational!");
   2044     case ICmpInst::BAD_ICMP_PREDICATE:
   2045       break;  // Couldn't determine anything about these constants.
   2046     case ICmpInst::ICMP_EQ:   // We know the constants are equal!
   2047       // If we know the constants are equal, we can decide the result of this
   2048       // computation precisely.
   2049       Result = ICmpInst::isTrueWhenEqual((ICmpInst::Predicate)pred);
   2050       break;
   2051     case ICmpInst::ICMP_ULT:
   2052       switch (pred) {
   2053       case ICmpInst::ICMP_ULT: case ICmpInst::ICMP_NE: case ICmpInst::ICMP_ULE:
   2054         Result = 1; break;
   2055       case ICmpInst::ICMP_UGT: case ICmpInst::ICMP_EQ: case ICmpInst::ICMP_UGE:
   2056         Result = 0; break;
   2057       }
   2058       break;
   2059     case ICmpInst::ICMP_SLT:
   2060       switch (pred) {
   2061       case ICmpInst::ICMP_SLT: case ICmpInst::ICMP_NE: case ICmpInst::ICMP_SLE:
   2062         Result = 1; break;
   2063       case ICmpInst::ICMP_SGT: case ICmpInst::ICMP_EQ: case ICmpInst::ICMP_SGE:
   2064         Result = 0; break;
   2065       }
   2066       break;
   2067     case ICmpInst::ICMP_UGT:
   2068       switch (pred) {
   2069       case ICmpInst::ICMP_UGT: case ICmpInst::ICMP_NE: case ICmpInst::ICMP_UGE:
   2070         Result = 1; break;
   2071       case ICmpInst::ICMP_ULT: case ICmpInst::ICMP_EQ: case ICmpInst::ICMP_ULE:
   2072         Result = 0; break;
   2073       }
   2074       break;
   2075     case ICmpInst::ICMP_SGT:
   2076       switch (pred) {
   2077       case ICmpInst::ICMP_SGT: case ICmpInst::ICMP_NE: case ICmpInst::ICMP_SGE:
   2078         Result = 1; break;
   2079       case ICmpInst::ICMP_SLT: case ICmpInst::ICMP_EQ: case ICmpInst::ICMP_SLE:
   2080         Result = 0; break;
   2081       }
   2082       break;
   2083     case ICmpInst::ICMP_ULE:
   2084       if (pred == ICmpInst::ICMP_UGT) Result = 0;
   2085       if (pred == ICmpInst::ICMP_ULT || pred == ICmpInst::ICMP_ULE) Result = 1;
   2086       break;
   2087     case ICmpInst::ICMP_SLE:
   2088       if (pred == ICmpInst::ICMP_SGT) Result = 0;
   2089       if (pred == ICmpInst::ICMP_SLT || pred == ICmpInst::ICMP_SLE) Result = 1;
   2090       break;
   2091     case ICmpInst::ICMP_UGE:
   2092       if (pred == ICmpInst::ICMP_ULT) Result = 0;
   2093       if (pred == ICmpInst::ICMP_UGT || pred == ICmpInst::ICMP_UGE) Result = 1;
   2094       break;
   2095     case ICmpInst::ICMP_SGE:
   2096       if (pred == ICmpInst::ICMP_SLT) Result = 0;
   2097       if (pred == ICmpInst::ICMP_SGT || pred == ICmpInst::ICMP_SGE) Result = 1;
   2098       break;
   2099     case ICmpInst::ICMP_NE:
   2100       if (pred == ICmpInst::ICMP_EQ) Result = 0;
   2101       if (pred == ICmpInst::ICMP_NE) Result = 1;
   2102       break;
   2103     }
   2104 
   2105     // If we evaluated the result, return it now.
   2106     if (Result != -1)
   2107       return ConstantInt::get(ResultTy, Result);
   2108 
   2109     // If the right hand side is a bitcast, try using its inverse to simplify
   2110     // it by moving it to the left hand side.  We can't do this if it would turn
   2111     // a vector compare into a scalar compare or visa versa.
   2112     if (ConstantExpr *CE2 = dyn_cast<ConstantExpr>(C2)) {
   2113       Constant *CE2Op0 = CE2->getOperand(0);
   2114       if (CE2->getOpcode() == Instruction::BitCast &&
   2115           CE2->getType()->isVectorTy() == CE2Op0->getType()->isVectorTy()) {
   2116         Constant *Inverse = ConstantExpr::getBitCast(C1, CE2Op0->getType());
   2117         return ConstantExpr::getICmp(pred, Inverse, CE2Op0);
   2118       }
   2119     }
   2120 
   2121     // If the left hand side is an extension, try eliminating it.
   2122     if (ConstantExpr *CE1 = dyn_cast<ConstantExpr>(C1)) {
   2123       if ((CE1->getOpcode() == Instruction::SExt && ICmpInst::isSigned(pred)) ||
   2124           (CE1->getOpcode() == Instruction::ZExt && !ICmpInst::isSigned(pred))){
   2125         Constant *CE1Op0 = CE1->getOperand(0);
   2126         Constant *CE1Inverse = ConstantExpr::getTrunc(CE1, CE1Op0->getType());
   2127         if (CE1Inverse == CE1Op0) {
   2128           // Check whether we can safely truncate the right hand side.
   2129           Constant *C2Inverse = ConstantExpr::getTrunc(C2, CE1Op0->getType());
   2130           if (ConstantExpr::getZExt(C2Inverse, C2->getType()) == C2) {
   2131             return ConstantExpr::getICmp(pred, CE1Inverse, C2Inverse);
   2132           }
   2133         }
   2134       }
   2135     }
   2136 
   2137     if ((!isa<ConstantExpr>(C1) && isa<ConstantExpr>(C2)) ||
   2138         (C1->isNullValue() && !C2->isNullValue())) {
   2139       // If C2 is a constant expr and C1 isn't, flip them around and fold the
   2140       // other way if possible.
   2141       // Also, if C1 is null and C2 isn't, flip them around.
   2142       pred = ICmpInst::getSwappedPredicate((ICmpInst::Predicate)pred);
   2143       return ConstantExpr::getICmp(pred, C2, C1);
   2144     }
   2145   }
   2146   return 0;
   2147 }
   2148 
   2149 /// isInBoundsIndices - Test whether the given sequence of *normalized* indices
   2150 /// is "inbounds".
   2151 template<typename IndexTy>
   2152 static bool isInBoundsIndices(ArrayRef<IndexTy> Idxs) {
   2153   // No indices means nothing that could be out of bounds.
   2154   if (Idxs.empty()) return true;
   2155 
   2156   // If the first index is zero, it's in bounds.
   2157   if (cast<Constant>(Idxs[0])->isNullValue()) return true;
   2158 
   2159   // If the first index is one and all the rest are zero, it's in bounds,
   2160   // by the one-past-the-end rule.
   2161   if (!cast<ConstantInt>(Idxs[0])->isOne())
   2162     return false;
   2163   for (unsigned i = 1, e = Idxs.size(); i != e; ++i)
   2164     if (!cast<Constant>(Idxs[i])->isNullValue())
   2165       return false;
   2166   return true;
   2167 }
   2168 
   2169 template<typename IndexTy>
   2170 static Constant *ConstantFoldGetElementPtrImpl(Constant *C,
   2171                                                bool inBounds,
   2172                                                ArrayRef<IndexTy> Idxs) {
   2173   if (Idxs.empty()) return C;
   2174   Constant *Idx0 = cast<Constant>(Idxs[0]);
   2175   if ((Idxs.size() == 1 && Idx0->isNullValue()))
   2176     return C;
   2177 
   2178   if (isa<UndefValue>(C)) {
   2179     PointerType *Ptr = cast<PointerType>(C->getType());
   2180     Type *Ty = GetElementPtrInst::getIndexedType(Ptr, Idxs);
   2181     assert(Ty != 0 && "Invalid indices for GEP!");
   2182     return UndefValue::get(PointerType::get(Ty, Ptr->getAddressSpace()));
   2183   }
   2184 
   2185   if (C->isNullValue()) {
   2186     bool isNull = true;
   2187     for (unsigned i = 0, e = Idxs.size(); i != e; ++i)
   2188       if (!cast<Constant>(Idxs[i])->isNullValue()) {
   2189         isNull = false;
   2190         break;
   2191       }
   2192     if (isNull) {
   2193       PointerType *Ptr = cast<PointerType>(C->getType());
   2194       Type *Ty = GetElementPtrInst::getIndexedType(Ptr, Idxs);
   2195       assert(Ty != 0 && "Invalid indices for GEP!");
   2196       return ConstantPointerNull::get(PointerType::get(Ty,
   2197                                                        Ptr->getAddressSpace()));
   2198     }
   2199   }
   2200 
   2201   if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) {
   2202     // Combine Indices - If the source pointer to this getelementptr instruction
   2203     // is a getelementptr instruction, combine the indices of the two
   2204     // getelementptr instructions into a single instruction.
   2205     //
   2206     if (CE->getOpcode() == Instruction::GetElementPtr) {
   2207       Type *LastTy = 0;
   2208       for (gep_type_iterator I = gep_type_begin(CE), E = gep_type_end(CE);
   2209            I != E; ++I)
   2210         LastTy = *I;
   2211 
   2212       if ((LastTy && LastTy->isArrayTy()) || Idx0->isNullValue()) {
   2213         SmallVector<Value*, 16> NewIndices;
   2214         NewIndices.reserve(Idxs.size() + CE->getNumOperands());
   2215         for (unsigned i = 1, e = CE->getNumOperands()-1; i != e; ++i)
   2216           NewIndices.push_back(CE->getOperand(i));
   2217 
   2218         // Add the last index of the source with the first index of the new GEP.
   2219         // Make sure to handle the case when they are actually different types.
   2220         Constant *Combined = CE->getOperand(CE->getNumOperands()-1);
   2221         // Otherwise it must be an array.
   2222         if (!Idx0->isNullValue()) {
   2223           Type *IdxTy = Combined->getType();
   2224           if (IdxTy != Idx0->getType()) {
   2225             Type *Int64Ty = Type::getInt64Ty(IdxTy->getContext());
   2226             Constant *C1 = ConstantExpr::getSExtOrBitCast(Idx0, Int64Ty);
   2227             Constant *C2 = ConstantExpr::getSExtOrBitCast(Combined, Int64Ty);
   2228             Combined = ConstantExpr::get(Instruction::Add, C1, C2);
   2229           } else {
   2230             Combined =
   2231               ConstantExpr::get(Instruction::Add, Idx0, Combined);
   2232           }
   2233         }
   2234 
   2235         NewIndices.push_back(Combined);
   2236         NewIndices.append(Idxs.begin() + 1, Idxs.end());
   2237         return
   2238           ConstantExpr::getGetElementPtr(CE->getOperand(0), NewIndices,
   2239                                          inBounds &&
   2240                                            cast<GEPOperator>(CE)->isInBounds());
   2241       }
   2242     }
   2243 
   2244     // Implement folding of:
   2245     //    i32* getelementptr ([2 x i32]* bitcast ([3 x i32]* %X to [2 x i32]*),
   2246     //                        i64 0, i64 0)
   2247     // To: i32* getelementptr ([3 x i32]* %X, i64 0, i64 0)
   2248     //
   2249     if (CE->isCast() && Idxs.size() > 1 && Idx0->isNullValue()) {
   2250       if (PointerType *SPT =
   2251           dyn_cast<PointerType>(CE->getOperand(0)->getType()))
   2252         if (ArrayType *SAT = dyn_cast<ArrayType>(SPT->getElementType()))
   2253           if (ArrayType *CAT =
   2254         dyn_cast<ArrayType>(cast<PointerType>(C->getType())->getElementType()))
   2255             if (CAT->getElementType() == SAT->getElementType())
   2256               return
   2257                 ConstantExpr::getGetElementPtr((Constant*)CE->getOperand(0),
   2258                                                Idxs, inBounds);
   2259     }
   2260   }
   2261 
   2262   // Check to see if any array indices are not within the corresponding
   2263   // notional array bounds. If so, try to determine if they can be factored
   2264   // out into preceding dimensions.
   2265   bool Unknown = false;
   2266   SmallVector<Constant *, 8> NewIdxs;
   2267   Type *Ty = C->getType();
   2268   Type *Prev = 0;
   2269   for (unsigned i = 0, e = Idxs.size(); i != e;
   2270        Prev = Ty, Ty = cast<CompositeType>(Ty)->getTypeAtIndex(Idxs[i]), ++i) {
   2271     if (ConstantInt *CI = dyn_cast<ConstantInt>(Idxs[i])) {
   2272       if (ArrayType *ATy = dyn_cast<ArrayType>(Ty))
   2273         if (ATy->getNumElements() <= INT64_MAX &&
   2274             ATy->getNumElements() != 0 &&
   2275             CI->getSExtValue() >= (int64_t)ATy->getNumElements()) {
   2276           if (isa<SequentialType>(Prev)) {
   2277             // It's out of range, but we can factor it into the prior
   2278             // dimension.
   2279             NewIdxs.resize(Idxs.size());
   2280             ConstantInt *Factor = ConstantInt::get(CI->getType(),
   2281                                                    ATy->getNumElements());
   2282             NewIdxs[i] = ConstantExpr::getSRem(CI, Factor);
   2283 
   2284             Constant *PrevIdx = cast<Constant>(Idxs[i-1]);
   2285             Constant *Div = ConstantExpr::getSDiv(CI, Factor);
   2286 
   2287             // Before adding, extend both operands to i64 to avoid
   2288             // overflow trouble.
   2289             if (!PrevIdx->getType()->isIntegerTy(64))
   2290               PrevIdx = ConstantExpr::getSExt(PrevIdx,
   2291                                            Type::getInt64Ty(Div->getContext()));
   2292             if (!Div->getType()->isIntegerTy(64))
   2293               Div = ConstantExpr::getSExt(Div,
   2294                                           Type::getInt64Ty(Div->getContext()));
   2295 
   2296             NewIdxs[i-1] = ConstantExpr::getAdd(PrevIdx, Div);
   2297           } else {
   2298             // It's out of range, but the prior dimension is a struct
   2299             // so we can't do anything about it.
   2300             Unknown = true;
   2301           }
   2302         }
   2303     } else {
   2304       // We don't know if it's in range or not.
   2305       Unknown = true;
   2306     }
   2307   }
   2308 
   2309   // If we did any factoring, start over with the adjusted indices.
   2310   if (!NewIdxs.empty()) {
   2311     for (unsigned i = 0, e = Idxs.size(); i != e; ++i)
   2312       if (!NewIdxs[i]) NewIdxs[i] = cast<Constant>(Idxs[i]);
   2313     return ConstantExpr::getGetElementPtr(C, NewIdxs, inBounds);
   2314   }
   2315 
   2316   // If all indices are known integers and normalized, we can do a simple
   2317   // check for the "inbounds" property.
   2318   if (!Unknown && !inBounds &&
   2319       isa<GlobalVariable>(C) && isInBoundsIndices(Idxs))
   2320     return ConstantExpr::getInBoundsGetElementPtr(C, Idxs);
   2321 
   2322   return 0;
   2323 }
   2324 
   2325 Constant *llvm::ConstantFoldGetElementPtr(Constant *C,
   2326                                           bool inBounds,
   2327                                           ArrayRef<Constant *> Idxs) {
   2328   return ConstantFoldGetElementPtrImpl(C, inBounds, Idxs);
   2329 }
   2330 
   2331 Constant *llvm::ConstantFoldGetElementPtr(Constant *C,
   2332                                           bool inBounds,
   2333                                           ArrayRef<Value *> Idxs) {
   2334   return ConstantFoldGetElementPtrImpl(C, inBounds, Idxs);
   2335 }
   2336