ConstantFold.cpp revision 041e2eb51721bcfecee5d9c9fc409ff185526e47
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// template-based folder for simple primitive constants like ConstantInt, and
16// the special case hackery that we use to symbolically evaluate expressions
17// that use ConstantExprs.
18//
19//===----------------------------------------------------------------------===//
20
21#include "ConstantFold.h"
22#include "llvm/Constants.h"
23#include "llvm/Instructions.h"
24#include "llvm/DerivedTypes.h"
25#include "llvm/Function.h"
26#include "llvm/GlobalAlias.h"
27#include "llvm/ADT/SmallVector.h"
28#include "llvm/Support/Compiler.h"
29#include "llvm/Support/GetElementPtrTypeIterator.h"
30#include "llvm/Support/ManagedStatic.h"
31#include "llvm/Support/MathExtras.h"
32#include <limits>
33using namespace llvm;
34
35//===----------------------------------------------------------------------===//
36//                ConstantFold*Instruction Implementations
37//===----------------------------------------------------------------------===//
38
39/// BitCastConstantVector - Convert the specified ConstantVector node to the
40/// specified vector type.  At this point, we know that the elements of the
41/// input vector constant are all simple integer or FP values.
42static Constant *BitCastConstantVector(ConstantVector *CV,
43                                       const VectorType *DstTy) {
44  // If this cast changes element count then we can't handle it here:
45  // doing so requires endianness information.  This should be handled by
46  // Analysis/ConstantFolding.cpp
47  unsigned NumElts = DstTy->getNumElements();
48  if (NumElts != CV->getNumOperands())
49    return 0;
50
51  // Check to verify that all elements of the input are simple.
52  for (unsigned i = 0; i != NumElts; ++i) {
53    if (!isa<ConstantInt>(CV->getOperand(i)) &&
54        !isa<ConstantFP>(CV->getOperand(i)))
55      return 0;
56  }
57
58  // Bitcast each element now.
59  std::vector<Constant*> Result;
60  const Type *DstEltTy = DstTy->getElementType();
61  for (unsigned i = 0; i != NumElts; ++i)
62    Result.push_back(ConstantExpr::getBitCast(CV->getOperand(i), DstEltTy));
63  return ConstantVector::get(Result);
64}
65
66/// This function determines which opcode to use to fold two constant cast
67/// expressions together. It uses CastInst::isEliminableCastPair to determine
68/// the opcode. Consequently its just a wrapper around that function.
69/// @brief Determine if it is valid to fold a cast of a cast
70static unsigned
71foldConstantCastPair(
72  unsigned opc,          ///< opcode of the second cast constant expression
73  const ConstantExpr*Op, ///< the first cast constant expression
74  const Type *DstTy      ///< desintation type of the first cast
75) {
76  assert(Op && Op->isCast() && "Can't fold cast of cast without a cast!");
77  assert(DstTy && DstTy->isFirstClassType() && "Invalid cast destination type");
78  assert(CastInst::isCast(opc) && "Invalid cast opcode");
79
80  // The the types and opcodes for the two Cast constant expressions
81  const Type *SrcTy = Op->getOperand(0)->getType();
82  const Type *MidTy = Op->getType();
83  Instruction::CastOps firstOp = Instruction::CastOps(Op->getOpcode());
84  Instruction::CastOps secondOp = Instruction::CastOps(opc);
85
86  // Let CastInst::isEliminableCastPair do the heavy lifting.
87  return CastInst::isEliminableCastPair(firstOp, secondOp, SrcTy, MidTy, DstTy,
88                                        Type::Int64Ty);
89}
90
91static Constant *FoldBitCast(Constant *V, const Type *DestTy) {
92  const Type *SrcTy = V->getType();
93  if (SrcTy == DestTy)
94    return V; // no-op cast
95
96  // Check to see if we are casting a pointer to an aggregate to a pointer to
97  // the first element.  If so, return the appropriate GEP instruction.
98  if (const PointerType *PTy = dyn_cast<PointerType>(V->getType()))
99    if (const PointerType *DPTy = dyn_cast<PointerType>(DestTy))
100      if (PTy->getAddressSpace() == DPTy->getAddressSpace()) {
101        SmallVector<Value*, 8> IdxList;
102        IdxList.push_back(Constant::getNullValue(Type::Int32Ty));
103        const Type *ElTy = PTy->getElementType();
104        while (ElTy != DPTy->getElementType()) {
105          if (const StructType *STy = dyn_cast<StructType>(ElTy)) {
106            if (STy->getNumElements() == 0) break;
107            ElTy = STy->getElementType(0);
108            IdxList.push_back(Constant::getNullValue(Type::Int32Ty));
109          } else if (const SequentialType *STy =
110                     dyn_cast<SequentialType>(ElTy)) {
111            if (isa<PointerType>(ElTy)) break;  // Can't index into pointers!
112            ElTy = STy->getElementType();
113            IdxList.push_back(IdxList[0]);
114          } else {
115            break;
116          }
117        }
118
119        if (ElTy == DPTy->getElementType())
120          return ConstantExpr::getGetElementPtr(V, &IdxList[0], IdxList.size());
121      }
122
123  // Handle casts from one vector constant to another.  We know that the src
124  // and dest type have the same size (otherwise its an illegal cast).
125  if (const VectorType *DestPTy = dyn_cast<VectorType>(DestTy)) {
126    if (const VectorType *SrcTy = dyn_cast<VectorType>(V->getType())) {
127      assert(DestPTy->getBitWidth() == SrcTy->getBitWidth() &&
128             "Not cast between same sized vectors!");
129      // First, check for null.  Undef is already handled.
130      if (isa<ConstantAggregateZero>(V))
131        return Constant::getNullValue(DestTy);
132
133      if (ConstantVector *CV = dyn_cast<ConstantVector>(V))
134        return BitCastConstantVector(CV, DestPTy);
135    }
136  }
137
138  // Finally, implement bitcast folding now.   The code below doesn't handle
139  // bitcast right.
140  if (isa<ConstantPointerNull>(V))  // ptr->ptr cast.
141    return ConstantPointerNull::get(cast<PointerType>(DestTy));
142
143  // Handle integral constant input.
144  if (const ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
145    if (DestTy->isInteger())
146      // Integral -> Integral. This is a no-op because the bit widths must
147      // be the same. Consequently, we just fold to V.
148      return V;
149
150    if (DestTy->isFloatingPoint()) {
151      assert((DestTy == Type::DoubleTy || DestTy == Type::FloatTy) &&
152             "Unknown FP type!");
153      return ConstantFP::get(APFloat(CI->getValue()));
154    }
155    // Otherwise, can't fold this (vector?)
156    return 0;
157  }
158
159  // Handle ConstantFP input.
160  if (const ConstantFP *FP = dyn_cast<ConstantFP>(V)) {
161    // FP -> Integral.
162    if (DestTy == Type::Int32Ty) {
163      return ConstantInt::get(FP->getValueAPF().convertToAPInt());
164    } else {
165      assert(DestTy == Type::Int64Ty && "only support f32/f64 for now!");
166      return ConstantInt::get(FP->getValueAPF().convertToAPInt());
167    }
168  }
169  return 0;
170}
171
172
173Constant *llvm::ConstantFoldCastInstruction(unsigned opc, const Constant *V,
174                                            const Type *DestTy) {
175  if (isa<UndefValue>(V)) {
176    // zext(undef) = 0, because the top bits will be zero.
177    // sext(undef) = 0, because the top bits will all be the same.
178    // [us]itofp(undef) = 0, because the result value is bounded.
179    if (opc == Instruction::ZExt || opc == Instruction::SExt ||
180        opc == Instruction::UIToFP || opc == Instruction::SIToFP)
181      return Constant::getNullValue(DestTy);
182    return UndefValue::get(DestTy);
183  }
184  // No compile-time operations on this type yet.
185  if (V->getType() == Type::PPC_FP128Ty || DestTy == Type::PPC_FP128Ty)
186    return 0;
187
188  // If the cast operand is a constant expression, there's a few things we can
189  // do to try to simplify it.
190  if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(V)) {
191    if (CE->isCast()) {
192      // Try hard to fold cast of cast because they are often eliminable.
193      if (unsigned newOpc = foldConstantCastPair(opc, CE, DestTy))
194        return ConstantExpr::getCast(newOpc, CE->getOperand(0), DestTy);
195    } else if (CE->getOpcode() == Instruction::GetElementPtr) {
196      // If all of the indexes in the GEP are null values, there is no pointer
197      // adjustment going on.  We might as well cast the source pointer.
198      bool isAllNull = true;
199      for (unsigned i = 1, e = CE->getNumOperands(); i != e; ++i)
200        if (!CE->getOperand(i)->isNullValue()) {
201          isAllNull = false;
202          break;
203        }
204      if (isAllNull)
205        // This is casting one pointer type to another, always BitCast
206        return ConstantExpr::getPointerCast(CE->getOperand(0), DestTy);
207    }
208  }
209
210  // We actually have to do a cast now. Perform the cast according to the
211  // opcode specified.
212  switch (opc) {
213  case Instruction::FPTrunc:
214  case Instruction::FPExt:
215    if (const ConstantFP *FPC = dyn_cast<ConstantFP>(V)) {
216      APFloat Val = FPC->getValueAPF();
217      Val.convert(DestTy == Type::FloatTy ? APFloat::IEEEsingle :
218                  DestTy == Type::DoubleTy ? APFloat::IEEEdouble :
219                  DestTy == Type::X86_FP80Ty ? APFloat::x87DoubleExtended :
220                  DestTy == Type::FP128Ty ? APFloat::IEEEquad :
221                  APFloat::Bogus,
222                  APFloat::rmNearestTiesToEven);
223      return ConstantFP::get(Val);
224    }
225    return 0; // Can't fold.
226  case Instruction::FPToUI:
227  case Instruction::FPToSI:
228    if (const ConstantFP *FPC = dyn_cast<ConstantFP>(V)) {
229      const APFloat &V = FPC->getValueAPF();
230      uint64_t x[2];
231      uint32_t DestBitWidth = cast<IntegerType>(DestTy)->getBitWidth();
232      (void) V.convertToInteger(x, DestBitWidth, opc==Instruction::FPToSI,
233                                APFloat::rmTowardZero);
234      APInt Val(DestBitWidth, 2, x);
235      return ConstantInt::get(Val);
236    }
237    if (const ConstantVector *CV = dyn_cast<ConstantVector>(V)) {
238      std::vector<Constant*> res;
239      const VectorType *DestVecTy = cast<VectorType>(DestTy);
240      const Type *DstEltTy = DestVecTy->getElementType();
241      for (unsigned i = 0, e = CV->getType()->getNumElements(); i != e; ++i)
242        res.push_back(ConstantFoldCastInstruction(opc, V->getOperand(i),
243                                                  DstEltTy));
244      return ConstantVector::get(DestVecTy, res);
245    }
246    return 0; // Can't fold.
247  case Instruction::IntToPtr:   //always treated as unsigned
248    if (V->isNullValue())       // Is it an integral null value?
249      return ConstantPointerNull::get(cast<PointerType>(DestTy));
250    return 0;                   // Other pointer types cannot be casted
251  case Instruction::PtrToInt:   // always treated as unsigned
252    if (V->isNullValue())       // is it a null pointer value?
253      return ConstantInt::get(DestTy, 0);
254    return 0;                   // Other pointer types cannot be casted
255  case Instruction::UIToFP:
256  case Instruction::SIToFP:
257    if (const ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
258      APInt api = CI->getValue();
259      const uint64_t zero[] = {0, 0};
260      APFloat apf = APFloat(APInt(DestTy->getPrimitiveSizeInBits(),
261                                  2, zero));
262      (void)apf.convertFromAPInt(api,
263                                 opc==Instruction::SIToFP,
264                                 APFloat::rmNearestTiesToEven);
265      return ConstantFP::get(apf);
266    }
267    if (const ConstantVector *CV = dyn_cast<ConstantVector>(V)) {
268      std::vector<Constant*> res;
269      const VectorType *DestVecTy = cast<VectorType>(DestTy);
270      const Type *DstEltTy = DestVecTy->getElementType();
271      for (unsigned i = 0, e = CV->getType()->getNumElements(); i != e; ++i)
272        res.push_back(ConstantFoldCastInstruction(opc, V->getOperand(i),
273                                                  DstEltTy));
274      return ConstantVector::get(DestVecTy, res);
275    }
276    return 0;
277  case Instruction::ZExt:
278    if (const ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
279      uint32_t BitWidth = cast<IntegerType>(DestTy)->getBitWidth();
280      APInt Result(CI->getValue());
281      Result.zext(BitWidth);
282      return ConstantInt::get(Result);
283    }
284    return 0;
285  case Instruction::SExt:
286    if (const ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
287      uint32_t BitWidth = cast<IntegerType>(DestTy)->getBitWidth();
288      APInt Result(CI->getValue());
289      Result.sext(BitWidth);
290      return ConstantInt::get(Result);
291    }
292    return 0;
293  case Instruction::Trunc:
294    if (const ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
295      uint32_t BitWidth = cast<IntegerType>(DestTy)->getBitWidth();
296      APInt Result(CI->getValue());
297      Result.trunc(BitWidth);
298      return ConstantInt::get(Result);
299    }
300    return 0;
301  case Instruction::BitCast:
302    return FoldBitCast(const_cast<Constant*>(V), DestTy);
303  default:
304    assert(!"Invalid CE CastInst opcode");
305    break;
306  }
307
308  assert(0 && "Failed to cast constant expression");
309  return 0;
310}
311
312Constant *llvm::ConstantFoldSelectInstruction(const Constant *Cond,
313                                              const Constant *V1,
314                                              const Constant *V2) {
315  if (const ConstantInt *CB = dyn_cast<ConstantInt>(Cond))
316    return const_cast<Constant*>(CB->getZExtValue() ? V1 : V2);
317
318  if (isa<UndefValue>(V1)) return const_cast<Constant*>(V2);
319  if (isa<UndefValue>(V2)) return const_cast<Constant*>(V1);
320  if (isa<UndefValue>(Cond)) return const_cast<Constant*>(V1);
321  if (V1 == V2) return const_cast<Constant*>(V1);
322  return 0;
323}
324
325Constant *llvm::ConstantFoldExtractElementInstruction(const Constant *Val,
326                                                      const Constant *Idx) {
327  if (isa<UndefValue>(Val))  // ee(undef, x) -> undef
328    return UndefValue::get(cast<VectorType>(Val->getType())->getElementType());
329  if (Val->isNullValue())  // ee(zero, x) -> zero
330    return Constant::getNullValue(
331                          cast<VectorType>(Val->getType())->getElementType());
332
333  if (const ConstantVector *CVal = dyn_cast<ConstantVector>(Val)) {
334    if (const ConstantInt *CIdx = dyn_cast<ConstantInt>(Idx)) {
335      return CVal->getOperand(CIdx->getZExtValue());
336    } else if (isa<UndefValue>(Idx)) {
337      // ee({w,x,y,z}, undef) -> w (an arbitrary value).
338      return CVal->getOperand(0);
339    }
340  }
341  return 0;
342}
343
344Constant *llvm::ConstantFoldInsertElementInstruction(const Constant *Val,
345                                                     const Constant *Elt,
346                                                     const Constant *Idx) {
347  const ConstantInt *CIdx = dyn_cast<ConstantInt>(Idx);
348  if (!CIdx) return 0;
349  APInt idxVal = CIdx->getValue();
350  if (isa<UndefValue>(Val)) {
351    // Insertion of scalar constant into vector undef
352    // Optimize away insertion of undef
353    if (isa<UndefValue>(Elt))
354      return const_cast<Constant*>(Val);
355    // Otherwise break the aggregate undef into multiple undefs and do
356    // the insertion
357    unsigned numOps =
358      cast<VectorType>(Val->getType())->getNumElements();
359    std::vector<Constant*> Ops;
360    Ops.reserve(numOps);
361    for (unsigned i = 0; i < numOps; ++i) {
362      const Constant *Op =
363        (idxVal == i) ? Elt : UndefValue::get(Elt->getType());
364      Ops.push_back(const_cast<Constant*>(Op));
365    }
366    return ConstantVector::get(Ops);
367  }
368  if (isa<ConstantAggregateZero>(Val)) {
369    // Insertion of scalar constant into vector aggregate zero
370    // Optimize away insertion of zero
371    if (Elt->isNullValue())
372      return const_cast<Constant*>(Val);
373    // Otherwise break the aggregate zero into multiple zeros and do
374    // the insertion
375    unsigned numOps =
376      cast<VectorType>(Val->getType())->getNumElements();
377    std::vector<Constant*> Ops;
378    Ops.reserve(numOps);
379    for (unsigned i = 0; i < numOps; ++i) {
380      const Constant *Op =
381        (idxVal == i) ? Elt : Constant::getNullValue(Elt->getType());
382      Ops.push_back(const_cast<Constant*>(Op));
383    }
384    return ConstantVector::get(Ops);
385  }
386  if (const ConstantVector *CVal = dyn_cast<ConstantVector>(Val)) {
387    // Insertion of scalar constant into vector constant
388    std::vector<Constant*> Ops;
389    Ops.reserve(CVal->getNumOperands());
390    for (unsigned i = 0; i < CVal->getNumOperands(); ++i) {
391      const Constant *Op =
392        (idxVal == i) ? Elt : cast<Constant>(CVal->getOperand(i));
393      Ops.push_back(const_cast<Constant*>(Op));
394    }
395    return ConstantVector::get(Ops);
396  }
397  return 0;
398}
399
400/// GetVectorElement - If C is a ConstantVector, ConstantAggregateZero or Undef
401/// return the specified element value.  Otherwise return null.
402static Constant *GetVectorElement(const Constant *C, unsigned EltNo) {
403  if (const ConstantVector *CV = dyn_cast<ConstantVector>(C))
404    return CV->getOperand(EltNo);
405
406  const Type *EltTy = cast<VectorType>(C->getType())->getElementType();
407  if (isa<ConstantAggregateZero>(C))
408    return Constant::getNullValue(EltTy);
409  if (isa<UndefValue>(C))
410    return UndefValue::get(EltTy);
411  return 0;
412}
413
414Constant *llvm::ConstantFoldShuffleVectorInstruction(const Constant *V1,
415                                                     const Constant *V2,
416                                                     const Constant *Mask) {
417  // Undefined shuffle mask -> undefined value.
418  if (isa<UndefValue>(Mask)) return UndefValue::get(V1->getType());
419
420  unsigned NumElts = cast<VectorType>(V1->getType())->getNumElements();
421  const Type *EltTy = cast<VectorType>(V1->getType())->getElementType();
422
423  // Loop over the shuffle mask, evaluating each element.
424  SmallVector<Constant*, 32> Result;
425  for (unsigned i = 0; i != NumElts; ++i) {
426    Constant *InElt = GetVectorElement(Mask, i);
427    if (InElt == 0) return 0;
428
429    if (isa<UndefValue>(InElt))
430      InElt = UndefValue::get(EltTy);
431    else if (ConstantInt *CI = dyn_cast<ConstantInt>(InElt)) {
432      unsigned Elt = CI->getZExtValue();
433      if (Elt >= NumElts*2)
434        InElt = UndefValue::get(EltTy);
435      else if (Elt >= NumElts)
436        InElt = GetVectorElement(V2, Elt-NumElts);
437      else
438        InElt = GetVectorElement(V1, Elt);
439      if (InElt == 0) return 0;
440    } else {
441      // Unknown value.
442      return 0;
443    }
444    Result.push_back(InElt);
445  }
446
447  return ConstantVector::get(&Result[0], Result.size());
448}
449
450Constant *llvm::ConstantFoldExtractValue(const Constant *Agg,
451                                         Constant* const *Idxs,
452                                         unsigned NumIdx) {
453  // FIXME: implement some constant folds
454  return 0;
455}
456
457Constant *llvm::ConstantFoldInsertValue(const Constant *Agg,
458                                        const Constant *Val,
459                                        Constant* const *Idxs,
460                                        unsigned NumIdx) {
461  // FIXME: implement some constant folds
462  return 0;
463}
464
465/// EvalVectorOp - Given two vector constants and a function pointer, apply the
466/// function pointer to each element pair, producing a new ConstantVector
467/// constant. Either or both of V1 and V2 may be NULL, meaning a
468/// ConstantAggregateZero operand.
469static Constant *EvalVectorOp(const ConstantVector *V1,
470                              const ConstantVector *V2,
471                              const VectorType *VTy,
472                              Constant *(*FP)(Constant*, Constant*)) {
473  std::vector<Constant*> Res;
474  const Type *EltTy = VTy->getElementType();
475  for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) {
476    const Constant *C1 = V1 ? V1->getOperand(i) : Constant::getNullValue(EltTy);
477    const Constant *C2 = V2 ? V2->getOperand(i) : Constant::getNullValue(EltTy);
478    Res.push_back(FP(const_cast<Constant*>(C1),
479                     const_cast<Constant*>(C2)));
480  }
481  return ConstantVector::get(Res);
482}
483
484Constant *llvm::ConstantFoldBinaryInstruction(unsigned Opcode,
485                                              const Constant *C1,
486                                              const Constant *C2) {
487  // No compile-time operations on this type yet.
488  if (C1->getType() == Type::PPC_FP128Ty)
489    return 0;
490
491  // Handle UndefValue up front
492  if (isa<UndefValue>(C1) || isa<UndefValue>(C2)) {
493    switch (Opcode) {
494    case Instruction::Xor:
495      if (isa<UndefValue>(C1) && isa<UndefValue>(C2))
496        // Handle undef ^ undef -> 0 special case. This is a common
497        // idiom (misuse).
498        return Constant::getNullValue(C1->getType());
499      // Fallthrough
500    case Instruction::Add:
501    case Instruction::Sub:
502      return UndefValue::get(C1->getType());
503    case Instruction::Mul:
504    case Instruction::And:
505      return Constant::getNullValue(C1->getType());
506    case Instruction::UDiv:
507    case Instruction::SDiv:
508    case Instruction::FDiv:
509    case Instruction::URem:
510    case Instruction::SRem:
511    case Instruction::FRem:
512      if (!isa<UndefValue>(C2))                    // undef / X -> 0
513        return Constant::getNullValue(C1->getType());
514      return const_cast<Constant*>(C2);            // X / undef -> undef
515    case Instruction::Or:                          // X | undef -> -1
516      if (const VectorType *PTy = dyn_cast<VectorType>(C1->getType()))
517        return ConstantVector::getAllOnesValue(PTy);
518      return ConstantInt::getAllOnesValue(C1->getType());
519    case Instruction::LShr:
520      if (isa<UndefValue>(C2) && isa<UndefValue>(C1))
521        return const_cast<Constant*>(C1);           // undef lshr undef -> undef
522      return Constant::getNullValue(C1->getType()); // X lshr undef -> 0
523                                                    // undef lshr X -> 0
524    case Instruction::AShr:
525      if (!isa<UndefValue>(C2))
526        return const_cast<Constant*>(C1);           // undef ashr X --> undef
527      else if (isa<UndefValue>(C1))
528        return const_cast<Constant*>(C1);           // undef ashr undef -> undef
529      else
530        return const_cast<Constant*>(C1);           // X ashr undef --> X
531    case Instruction::Shl:
532      // undef << X -> 0   or   X << undef -> 0
533      return Constant::getNullValue(C1->getType());
534    }
535  }
536
537  // Handle simplifications of the RHS when a constant int.
538  if (const ConstantInt *CI2 = dyn_cast<ConstantInt>(C2)) {
539    switch (Opcode) {
540    case Instruction::Add:
541      if (CI2->equalsInt(0)) return const_cast<Constant*>(C1);  // X + 0 == X
542      break;
543    case Instruction::Sub:
544      if (CI2->equalsInt(0)) return const_cast<Constant*>(C1);  // X - 0 == X
545      break;
546    case Instruction::Mul:
547      if (CI2->equalsInt(0)) return const_cast<Constant*>(C2);  // X * 0 == 0
548      if (CI2->equalsInt(1))
549        return const_cast<Constant*>(C1);                       // X * 1 == X
550      break;
551    case Instruction::UDiv:
552    case Instruction::SDiv:
553      if (CI2->equalsInt(1))
554        return const_cast<Constant*>(C1);                     // X / 1 == X
555      break;
556    case Instruction::URem:
557    case Instruction::SRem:
558      if (CI2->equalsInt(1))
559        return Constant::getNullValue(CI2->getType());        // X % 1 == 0
560      break;
561    case Instruction::And:
562      if (CI2->isZero()) return const_cast<Constant*>(C2);    // X & 0 == 0
563      if (CI2->isAllOnesValue())
564        return const_cast<Constant*>(C1);                     // X & -1 == X
565
566      if (const ConstantExpr *CE1 = dyn_cast<ConstantExpr>(C1)) {
567        // (zext i32 to i64) & 4294967295 -> (zext i32 to i64)
568        if (CE1->getOpcode() == Instruction::ZExt) {
569          unsigned DstWidth = CI2->getType()->getBitWidth();
570          unsigned SrcWidth =
571            CE1->getOperand(0)->getType()->getPrimitiveSizeInBits();
572          APInt PossiblySetBits(APInt::getLowBitsSet(DstWidth, SrcWidth));
573          if ((PossiblySetBits & CI2->getValue()) == PossiblySetBits)
574            return const_cast<Constant*>(C1);
575        }
576
577        // If and'ing the address of a global with a constant, fold it.
578        if (CE1->getOpcode() == Instruction::PtrToInt &&
579            isa<GlobalValue>(CE1->getOperand(0))) {
580          GlobalValue *GV = cast<GlobalValue>(CE1->getOperand(0));
581
582          // Functions are at least 4-byte aligned.
583          unsigned GVAlign = GV->getAlignment();
584          if (isa<Function>(GV))
585            GVAlign = std::max(GVAlign, 4U);
586
587          if (GVAlign > 1) {
588            unsigned DstWidth = CI2->getType()->getBitWidth();
589            unsigned SrcWidth = std::min(DstWidth, Log2_32(GVAlign));
590            APInt BitsNotSet(APInt::getLowBitsSet(DstWidth, SrcWidth));
591
592            // If checking bits we know are clear, return zero.
593            if ((CI2->getValue() & BitsNotSet) == CI2->getValue())
594              return Constant::getNullValue(CI2->getType());
595          }
596        }
597      }
598      break;
599    case Instruction::Or:
600      if (CI2->equalsInt(0)) return const_cast<Constant*>(C1);  // X | 0 == X
601      if (CI2->isAllOnesValue())
602        return const_cast<Constant*>(C2);  // X | -1 == -1
603      break;
604    case Instruction::Xor:
605      if (CI2->equalsInt(0)) return const_cast<Constant*>(C1);  // X ^ 0 == X
606      break;
607    case Instruction::AShr:
608      // ashr (zext C to Ty), C2 -> lshr (zext C, CSA), C2
609      if (const ConstantExpr *CE1 = dyn_cast<ConstantExpr>(C1))
610        if (CE1->getOpcode() == Instruction::ZExt)  // Top bits known zero.
611          return ConstantExpr::getLShr(const_cast<Constant*>(C1),
612                                       const_cast<Constant*>(C2));
613      break;
614    }
615  }
616
617  // At this point we know neither constant is an UndefValue.
618  if (const ConstantInt *CI1 = dyn_cast<ConstantInt>(C1)) {
619    if (const ConstantInt *CI2 = dyn_cast<ConstantInt>(C2)) {
620      using namespace APIntOps;
621      const APInt &C1V = CI1->getValue();
622      const APInt &C2V = CI2->getValue();
623      switch (Opcode) {
624      default:
625        break;
626      case Instruction::Add:
627        return ConstantInt::get(C1V + C2V);
628      case Instruction::Sub:
629        return ConstantInt::get(C1V - C2V);
630      case Instruction::Mul:
631        return ConstantInt::get(C1V * C2V);
632      case Instruction::UDiv:
633        if (CI2->isNullValue())
634          return 0;        // X / 0 -> can't fold
635        return ConstantInt::get(C1V.udiv(C2V));
636      case Instruction::SDiv:
637        if (CI2->isNullValue())
638          return 0;        // X / 0 -> can't fold
639        if (C2V.isAllOnesValue() && C1V.isMinSignedValue())
640          return 0;        // MIN_INT / -1 -> overflow
641        return ConstantInt::get(C1V.sdiv(C2V));
642      case Instruction::URem:
643        if (C2->isNullValue())
644          return 0;        // X / 0 -> can't fold
645        return ConstantInt::get(C1V.urem(C2V));
646      case Instruction::SRem:
647        if (CI2->isNullValue())
648          return 0;        // X % 0 -> can't fold
649        if (C2V.isAllOnesValue() && C1V.isMinSignedValue())
650          return 0;        // MIN_INT % -1 -> overflow
651        return ConstantInt::get(C1V.srem(C2V));
652      case Instruction::And:
653        return ConstantInt::get(C1V & C2V);
654      case Instruction::Or:
655        return ConstantInt::get(C1V | C2V);
656      case Instruction::Xor:
657        return ConstantInt::get(C1V ^ C2V);
658      case Instruction::Shl: {
659        uint32_t shiftAmt = C2V.getZExtValue();
660        if (shiftAmt < C1V.getBitWidth())
661          return ConstantInt::get(C1V.shl(shiftAmt));
662        else
663          return UndefValue::get(C1->getType()); // too big shift is undef
664      }
665      case Instruction::LShr: {
666        uint32_t shiftAmt = C2V.getZExtValue();
667        if (shiftAmt < C1V.getBitWidth())
668          return ConstantInt::get(C1V.lshr(shiftAmt));
669        else
670          return UndefValue::get(C1->getType()); // too big shift is undef
671      }
672      case Instruction::AShr: {
673        uint32_t shiftAmt = C2V.getZExtValue();
674        if (shiftAmt < C1V.getBitWidth())
675          return ConstantInt::get(C1V.ashr(shiftAmt));
676        else
677          return UndefValue::get(C1->getType()); // too big shift is undef
678      }
679      }
680    }
681  } else if (const ConstantFP *CFP1 = dyn_cast<ConstantFP>(C1)) {
682    if (const ConstantFP *CFP2 = dyn_cast<ConstantFP>(C2)) {
683      APFloat C1V = CFP1->getValueAPF();
684      APFloat C2V = CFP2->getValueAPF();
685      APFloat C3V = C1V;  // copy for modification
686      switch (Opcode) {
687      default:
688        break;
689      case Instruction::Add:
690        (void)C3V.add(C2V, APFloat::rmNearestTiesToEven);
691        return ConstantFP::get(C3V);
692      case Instruction::Sub:
693        (void)C3V.subtract(C2V, APFloat::rmNearestTiesToEven);
694        return ConstantFP::get(C3V);
695      case Instruction::Mul:
696        (void)C3V.multiply(C2V, APFloat::rmNearestTiesToEven);
697        return ConstantFP::get(C3V);
698      case Instruction::FDiv:
699        (void)C3V.divide(C2V, APFloat::rmNearestTiesToEven);
700        return ConstantFP::get(C3V);
701      case Instruction::FRem:
702        if (C2V.isZero()) {
703          // IEEE 754, Section 7.1, #5
704          if (CFP1->getType() == Type::DoubleTy)
705            return ConstantFP::get(APFloat(std::numeric_limits<double>::
706                                           quiet_NaN()));
707          if (CFP1->getType() == Type::FloatTy)
708            return ConstantFP::get(APFloat(std::numeric_limits<float>::
709                                           quiet_NaN()));
710          break;
711        }
712        (void)C3V.mod(C2V, APFloat::rmNearestTiesToEven);
713        return ConstantFP::get(C3V);
714      }
715    }
716  } else if (const VectorType *VTy = dyn_cast<VectorType>(C1->getType())) {
717    const ConstantVector *CP1 = dyn_cast<ConstantVector>(C1);
718    const ConstantVector *CP2 = dyn_cast<ConstantVector>(C2);
719    if ((CP1 != NULL || isa<ConstantAggregateZero>(C1)) &&
720        (CP2 != NULL || isa<ConstantAggregateZero>(C2))) {
721      switch (Opcode) {
722      default:
723        break;
724      case Instruction::Add:
725        return EvalVectorOp(CP1, CP2, VTy, ConstantExpr::getAdd);
726      case Instruction::Sub:
727        return EvalVectorOp(CP1, CP2, VTy, ConstantExpr::getSub);
728      case Instruction::Mul:
729        return EvalVectorOp(CP1, CP2, VTy, ConstantExpr::getMul);
730      case Instruction::UDiv:
731        return EvalVectorOp(CP1, CP2, VTy, ConstantExpr::getUDiv);
732      case Instruction::SDiv:
733        return EvalVectorOp(CP1, CP2, VTy, ConstantExpr::getSDiv);
734      case Instruction::FDiv:
735        return EvalVectorOp(CP1, CP2, VTy, ConstantExpr::getFDiv);
736      case Instruction::URem:
737        return EvalVectorOp(CP1, CP2, VTy, ConstantExpr::getURem);
738      case Instruction::SRem:
739        return EvalVectorOp(CP1, CP2, VTy, ConstantExpr::getSRem);
740      case Instruction::FRem:
741        return EvalVectorOp(CP1, CP2, VTy, ConstantExpr::getFRem);
742      case Instruction::And:
743        return EvalVectorOp(CP1, CP2, VTy, ConstantExpr::getAnd);
744      case Instruction::Or:
745        return EvalVectorOp(CP1, CP2, VTy, ConstantExpr::getOr);
746      case Instruction::Xor:
747        return EvalVectorOp(CP1, CP2, VTy, ConstantExpr::getXor);
748      }
749    }
750  }
751
752  if (isa<ConstantExpr>(C1)) {
753    // There are many possible foldings we could do here.  We should probably
754    // at least fold add of a pointer with an integer into the appropriate
755    // getelementptr.  This will improve alias analysis a bit.
756  } else if (isa<ConstantExpr>(C2)) {
757    // If C2 is a constant expr and C1 isn't, flop them around and fold the
758    // other way if possible.
759    switch (Opcode) {
760    case Instruction::Add:
761    case Instruction::Mul:
762    case Instruction::And:
763    case Instruction::Or:
764    case Instruction::Xor:
765      // No change of opcode required.
766      return ConstantFoldBinaryInstruction(Opcode, C2, C1);
767
768    case Instruction::Shl:
769    case Instruction::LShr:
770    case Instruction::AShr:
771    case Instruction::Sub:
772    case Instruction::SDiv:
773    case Instruction::UDiv:
774    case Instruction::FDiv:
775    case Instruction::URem:
776    case Instruction::SRem:
777    case Instruction::FRem:
778    default:  // These instructions cannot be flopped around.
779      break;
780    }
781  }
782
783  // We don't know how to fold this.
784  return 0;
785}
786
787/// isZeroSizedType - This type is zero sized if its an array or structure of
788/// zero sized types.  The only leaf zero sized type is an empty structure.
789static bool isMaybeZeroSizedType(const Type *Ty) {
790  if (isa<OpaqueType>(Ty)) return true;  // Can't say.
791  if (const StructType *STy = dyn_cast<StructType>(Ty)) {
792
793    // If all of elements have zero size, this does too.
794    for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i)
795      if (!isMaybeZeroSizedType(STy->getElementType(i))) return false;
796    return true;
797
798  } else if (const ArrayType *ATy = dyn_cast<ArrayType>(Ty)) {
799    return isMaybeZeroSizedType(ATy->getElementType());
800  }
801  return false;
802}
803
804/// IdxCompare - Compare the two constants as though they were getelementptr
805/// indices.  This allows coersion of the types to be the same thing.
806///
807/// If the two constants are the "same" (after coersion), return 0.  If the
808/// first is less than the second, return -1, if the second is less than the
809/// first, return 1.  If the constants are not integral, return -2.
810///
811static int IdxCompare(Constant *C1, Constant *C2, const Type *ElTy) {
812  if (C1 == C2) return 0;
813
814  // Ok, we found a different index.  If they are not ConstantInt, we can't do
815  // anything with them.
816  if (!isa<ConstantInt>(C1) || !isa<ConstantInt>(C2))
817    return -2; // don't know!
818
819  // Ok, we have two differing integer indices.  Sign extend them to be the same
820  // type.  Long is always big enough, so we use it.
821  if (C1->getType() != Type::Int64Ty)
822    C1 = ConstantExpr::getSExt(C1, Type::Int64Ty);
823
824  if (C2->getType() != Type::Int64Ty)
825    C2 = ConstantExpr::getSExt(C2, Type::Int64Ty);
826
827  if (C1 == C2) return 0;  // They are equal
828
829  // If the type being indexed over is really just a zero sized type, there is
830  // no pointer difference being made here.
831  if (isMaybeZeroSizedType(ElTy))
832    return -2; // dunno.
833
834  // If they are really different, now that they are the same type, then we
835  // found a difference!
836  if (cast<ConstantInt>(C1)->getSExtValue() <
837      cast<ConstantInt>(C2)->getSExtValue())
838    return -1;
839  else
840    return 1;
841}
842
843/// evaluateFCmpRelation - This function determines if there is anything we can
844/// decide about the two constants provided.  This doesn't need to handle simple
845/// things like ConstantFP comparisons, but should instead handle ConstantExprs.
846/// If we can determine that the two constants have a particular relation to
847/// each other, we should return the corresponding FCmpInst predicate,
848/// otherwise return FCmpInst::BAD_FCMP_PREDICATE. This is used below in
849/// ConstantFoldCompareInstruction.
850///
851/// To simplify this code we canonicalize the relation so that the first
852/// operand is always the most "complex" of the two.  We consider ConstantFP
853/// to be the simplest, and ConstantExprs to be the most complex.
854static FCmpInst::Predicate evaluateFCmpRelation(const Constant *V1,
855                                                const Constant *V2) {
856  assert(V1->getType() == V2->getType() &&
857         "Cannot compare values of different types!");
858
859  // No compile-time operations on this type yet.
860  if (V1->getType() == Type::PPC_FP128Ty)
861    return FCmpInst::BAD_FCMP_PREDICATE;
862
863  // Handle degenerate case quickly
864  if (V1 == V2) return FCmpInst::FCMP_OEQ;
865
866  if (!isa<ConstantExpr>(V1)) {
867    if (!isa<ConstantExpr>(V2)) {
868      // We distilled thisUse the standard constant folder for a few cases
869      ConstantInt *R = 0;
870      Constant *C1 = const_cast<Constant*>(V1);
871      Constant *C2 = const_cast<Constant*>(V2);
872      R = dyn_cast<ConstantInt>(
873                             ConstantExpr::getFCmp(FCmpInst::FCMP_OEQ, C1, C2));
874      if (R && !R->isZero())
875        return FCmpInst::FCMP_OEQ;
876      R = dyn_cast<ConstantInt>(
877                             ConstantExpr::getFCmp(FCmpInst::FCMP_OLT, C1, C2));
878      if (R && !R->isZero())
879        return FCmpInst::FCMP_OLT;
880      R = dyn_cast<ConstantInt>(
881                             ConstantExpr::getFCmp(FCmpInst::FCMP_OGT, C1, C2));
882      if (R && !R->isZero())
883        return FCmpInst::FCMP_OGT;
884
885      // Nothing more we can do
886      return FCmpInst::BAD_FCMP_PREDICATE;
887    }
888
889    // If the first operand is simple and second is ConstantExpr, swap operands.
890    FCmpInst::Predicate SwappedRelation = evaluateFCmpRelation(V2, V1);
891    if (SwappedRelation != FCmpInst::BAD_FCMP_PREDICATE)
892      return FCmpInst::getSwappedPredicate(SwappedRelation);
893  } else {
894    // Ok, the LHS is known to be a constantexpr.  The RHS can be any of a
895    // constantexpr or a simple constant.
896    const ConstantExpr *CE1 = cast<ConstantExpr>(V1);
897    switch (CE1->getOpcode()) {
898    case Instruction::FPTrunc:
899    case Instruction::FPExt:
900    case Instruction::UIToFP:
901    case Instruction::SIToFP:
902      // We might be able to do something with these but we don't right now.
903      break;
904    default:
905      break;
906    }
907  }
908  // There are MANY other foldings that we could perform here.  They will
909  // probably be added on demand, as they seem needed.
910  return FCmpInst::BAD_FCMP_PREDICATE;
911}
912
913/// evaluateICmpRelation - This function determines if there is anything we can
914/// decide about the two constants provided.  This doesn't need to handle simple
915/// things like integer comparisons, but should instead handle ConstantExprs
916/// and GlobalValues.  If we can determine that the two constants have a
917/// particular relation to each other, we should return the corresponding ICmp
918/// predicate, otherwise return ICmpInst::BAD_ICMP_PREDICATE.
919///
920/// To simplify this code we canonicalize the relation so that the first
921/// operand is always the most "complex" of the two.  We consider simple
922/// constants (like ConstantInt) to be the simplest, followed by
923/// GlobalValues, followed by ConstantExpr's (the most complex).
924///
925static ICmpInst::Predicate evaluateICmpRelation(const Constant *V1,
926                                                const Constant *V2,
927                                                bool isSigned) {
928  assert(V1->getType() == V2->getType() &&
929         "Cannot compare different types of values!");
930  if (V1 == V2) return ICmpInst::ICMP_EQ;
931
932  if (!isa<ConstantExpr>(V1) && !isa<GlobalValue>(V1)) {
933    if (!isa<GlobalValue>(V2) && !isa<ConstantExpr>(V2)) {
934      // We distilled this down to a simple case, use the standard constant
935      // folder.
936      ConstantInt *R = 0;
937      Constant *C1 = const_cast<Constant*>(V1);
938      Constant *C2 = const_cast<Constant*>(V2);
939      ICmpInst::Predicate pred = ICmpInst::ICMP_EQ;
940      R = dyn_cast<ConstantInt>(ConstantExpr::getICmp(pred, C1, C2));
941      if (R && !R->isZero())
942        return pred;
943      pred = isSigned ? ICmpInst::ICMP_SLT : ICmpInst::ICMP_ULT;
944      R = dyn_cast<ConstantInt>(ConstantExpr::getICmp(pred, C1, C2));
945      if (R && !R->isZero())
946        return pred;
947      pred = isSigned ?  ICmpInst::ICMP_SGT : ICmpInst::ICMP_UGT;
948      R = dyn_cast<ConstantInt>(ConstantExpr::getICmp(pred, C1, C2));
949      if (R && !R->isZero())
950        return pred;
951
952      // If we couldn't figure it out, bail.
953      return ICmpInst::BAD_ICMP_PREDICATE;
954    }
955
956    // If the first operand is simple, swap operands.
957    ICmpInst::Predicate SwappedRelation =
958      evaluateICmpRelation(V2, V1, isSigned);
959    if (SwappedRelation != ICmpInst::BAD_ICMP_PREDICATE)
960      return ICmpInst::getSwappedPredicate(SwappedRelation);
961
962  } else if (const GlobalValue *CPR1 = dyn_cast<GlobalValue>(V1)) {
963    if (isa<ConstantExpr>(V2)) {  // Swap as necessary.
964      ICmpInst::Predicate SwappedRelation =
965        evaluateICmpRelation(V2, V1, isSigned);
966      if (SwappedRelation != ICmpInst::BAD_ICMP_PREDICATE)
967        return ICmpInst::getSwappedPredicate(SwappedRelation);
968      else
969        return ICmpInst::BAD_ICMP_PREDICATE;
970    }
971
972    // Now we know that the RHS is a GlobalValue or simple constant,
973    // which (since the types must match) means that it's a ConstantPointerNull.
974    if (const GlobalValue *CPR2 = dyn_cast<GlobalValue>(V2)) {
975      // Don't try to decide equality of aliases.
976      if (!isa<GlobalAlias>(CPR1) && !isa<GlobalAlias>(CPR2))
977        if (!CPR1->hasExternalWeakLinkage() || !CPR2->hasExternalWeakLinkage())
978          return ICmpInst::ICMP_NE;
979    } else {
980      assert(isa<ConstantPointerNull>(V2) && "Canonicalization guarantee!");
981      // GlobalVals can never be null.  Don't try to evaluate aliases.
982      if (!CPR1->hasExternalWeakLinkage() && !isa<GlobalAlias>(CPR1))
983        return ICmpInst::ICMP_NE;
984    }
985  } else {
986    // Ok, the LHS is known to be a constantexpr.  The RHS can be any of a
987    // constantexpr, a CPR, or a simple constant.
988    const ConstantExpr *CE1 = cast<ConstantExpr>(V1);
989    const Constant *CE1Op0 = CE1->getOperand(0);
990
991    switch (CE1->getOpcode()) {
992    case Instruction::Trunc:
993    case Instruction::FPTrunc:
994    case Instruction::FPExt:
995    case Instruction::FPToUI:
996    case Instruction::FPToSI:
997      break; // We can't evaluate floating point casts or truncations.
998
999    case Instruction::UIToFP:
1000    case Instruction::SIToFP:
1001    case Instruction::BitCast:
1002    case Instruction::ZExt:
1003    case Instruction::SExt:
1004      // If the cast is not actually changing bits, and the second operand is a
1005      // null pointer, do the comparison with the pre-casted value.
1006      if (V2->isNullValue() &&
1007          (isa<PointerType>(CE1->getType()) || CE1->getType()->isInteger())) {
1008        bool sgnd = isSigned;
1009        if (CE1->getOpcode() == Instruction::ZExt) isSigned = false;
1010        if (CE1->getOpcode() == Instruction::SExt) isSigned = true;
1011        return evaluateICmpRelation(CE1Op0,
1012                                    Constant::getNullValue(CE1Op0->getType()),
1013                                    sgnd);
1014      }
1015
1016      // If the dest type is a pointer type, and the RHS is a constantexpr cast
1017      // from the same type as the src of the LHS, evaluate the inputs.  This is
1018      // important for things like "icmp eq (cast 4 to int*), (cast 5 to int*)",
1019      // which happens a lot in compilers with tagged integers.
1020      if (const ConstantExpr *CE2 = dyn_cast<ConstantExpr>(V2))
1021        if (CE2->isCast() && isa<PointerType>(CE1->getType()) &&
1022            CE1->getOperand(0)->getType() == CE2->getOperand(0)->getType() &&
1023            CE1->getOperand(0)->getType()->isInteger()) {
1024          bool sgnd = isSigned;
1025          if (CE1->getOpcode() == Instruction::ZExt) isSigned = false;
1026          if (CE1->getOpcode() == Instruction::SExt) isSigned = true;
1027          return evaluateICmpRelation(CE1->getOperand(0), CE2->getOperand(0),
1028                                      sgnd);
1029        }
1030      break;
1031
1032    case Instruction::GetElementPtr:
1033      // Ok, since this is a getelementptr, we know that the constant has a
1034      // pointer type.  Check the various cases.
1035      if (isa<ConstantPointerNull>(V2)) {
1036        // If we are comparing a GEP to a null pointer, check to see if the base
1037        // of the GEP equals the null pointer.
1038        if (const GlobalValue *GV = dyn_cast<GlobalValue>(CE1Op0)) {
1039          if (GV->hasExternalWeakLinkage())
1040            // Weak linkage GVals could be zero or not. We're comparing that
1041            // to null pointer so its greater-or-equal
1042            return isSigned ? ICmpInst::ICMP_SGE : ICmpInst::ICMP_UGE;
1043          else
1044            // If its not weak linkage, the GVal must have a non-zero address
1045            // so the result is greater-than
1046            return isSigned ? ICmpInst::ICMP_SGT :  ICmpInst::ICMP_UGT;
1047        } else if (isa<ConstantPointerNull>(CE1Op0)) {
1048          // If we are indexing from a null pointer, check to see if we have any
1049          // non-zero indices.
1050          for (unsigned i = 1, e = CE1->getNumOperands(); i != e; ++i)
1051            if (!CE1->getOperand(i)->isNullValue())
1052              // Offsetting from null, must not be equal.
1053              return isSigned ? ICmpInst::ICMP_SGT : ICmpInst::ICMP_UGT;
1054          // Only zero indexes from null, must still be zero.
1055          return ICmpInst::ICMP_EQ;
1056        }
1057        // Otherwise, we can't really say if the first operand is null or not.
1058      } else if (const GlobalValue *CPR2 = dyn_cast<GlobalValue>(V2)) {
1059        if (isa<ConstantPointerNull>(CE1Op0)) {
1060          if (CPR2->hasExternalWeakLinkage())
1061            // Weak linkage GVals could be zero or not. We're comparing it to
1062            // a null pointer, so its less-or-equal
1063            return isSigned ? ICmpInst::ICMP_SLE : ICmpInst::ICMP_ULE;
1064          else
1065            // If its not weak linkage, the GVal must have a non-zero address
1066            // so the result is less-than
1067            return isSigned ? ICmpInst::ICMP_SLT : ICmpInst::ICMP_ULT;
1068        } else if (const GlobalValue *CPR1 = dyn_cast<GlobalValue>(CE1Op0)) {
1069          if (CPR1 == CPR2) {
1070            // If this is a getelementptr of the same global, then it must be
1071            // different.  Because the types must match, the getelementptr could
1072            // only have at most one index, and because we fold getelementptr's
1073            // with a single zero index, it must be nonzero.
1074            assert(CE1->getNumOperands() == 2 &&
1075                   !CE1->getOperand(1)->isNullValue() &&
1076                   "Suprising getelementptr!");
1077            return isSigned ? ICmpInst::ICMP_SGT : ICmpInst::ICMP_UGT;
1078          } else {
1079            // If they are different globals, we don't know what the value is,
1080            // but they can't be equal.
1081            return ICmpInst::ICMP_NE;
1082          }
1083        }
1084      } else {
1085        const ConstantExpr *CE2 = cast<ConstantExpr>(V2);
1086        const Constant *CE2Op0 = CE2->getOperand(0);
1087
1088        // There are MANY other foldings that we could perform here.  They will
1089        // probably be added on demand, as they seem needed.
1090        switch (CE2->getOpcode()) {
1091        default: break;
1092        case Instruction::GetElementPtr:
1093          // By far the most common case to handle is when the base pointers are
1094          // obviously to the same or different globals.
1095          if (isa<GlobalValue>(CE1Op0) && isa<GlobalValue>(CE2Op0)) {
1096            if (CE1Op0 != CE2Op0) // Don't know relative ordering, but not equal
1097              return ICmpInst::ICMP_NE;
1098            // Ok, we know that both getelementptr instructions are based on the
1099            // same global.  From this, we can precisely determine the relative
1100            // ordering of the resultant pointers.
1101            unsigned i = 1;
1102
1103            // Compare all of the operands the GEP's have in common.
1104            gep_type_iterator GTI = gep_type_begin(CE1);
1105            for (;i != CE1->getNumOperands() && i != CE2->getNumOperands();
1106                 ++i, ++GTI)
1107              switch (IdxCompare(CE1->getOperand(i), CE2->getOperand(i),
1108                                 GTI.getIndexedType())) {
1109              case -1: return isSigned ? ICmpInst::ICMP_SLT:ICmpInst::ICMP_ULT;
1110              case 1:  return isSigned ? ICmpInst::ICMP_SGT:ICmpInst::ICMP_UGT;
1111              case -2: return ICmpInst::BAD_ICMP_PREDICATE;
1112              }
1113
1114            // Ok, we ran out of things they have in common.  If any leftovers
1115            // are non-zero then we have a difference, otherwise we are equal.
1116            for (; i < CE1->getNumOperands(); ++i)
1117              if (!CE1->getOperand(i)->isNullValue()) {
1118                if (isa<ConstantInt>(CE1->getOperand(i)))
1119                  return isSigned ? ICmpInst::ICMP_SGT : ICmpInst::ICMP_UGT;
1120                else
1121                  return ICmpInst::BAD_ICMP_PREDICATE; // Might be equal.
1122              }
1123
1124            for (; i < CE2->getNumOperands(); ++i)
1125              if (!CE2->getOperand(i)->isNullValue()) {
1126                if (isa<ConstantInt>(CE2->getOperand(i)))
1127                  return isSigned ? ICmpInst::ICMP_SLT : ICmpInst::ICMP_ULT;
1128                else
1129                  return ICmpInst::BAD_ICMP_PREDICATE; // Might be equal.
1130              }
1131            return ICmpInst::ICMP_EQ;
1132          }
1133        }
1134      }
1135    default:
1136      break;
1137    }
1138  }
1139
1140  return ICmpInst::BAD_ICMP_PREDICATE;
1141}
1142
1143Constant *llvm::ConstantFoldCompareInstruction(unsigned short pred,
1144                                               const Constant *C1,
1145                                               const Constant *C2) {
1146
1147  // Handle some degenerate cases first
1148  if (isa<UndefValue>(C1) || isa<UndefValue>(C2))
1149    return UndefValue::get(Type::Int1Ty);
1150
1151  // No compile-time operations on this type yet.
1152  if (C1->getType() == Type::PPC_FP128Ty)
1153    return 0;
1154
1155  // icmp eq/ne(null,GV) -> false/true
1156  if (C1->isNullValue()) {
1157    if (const GlobalValue *GV = dyn_cast<GlobalValue>(C2))
1158      // Don't try to evaluate aliases.  External weak GV can be null.
1159      if (!isa<GlobalAlias>(GV) && !GV->hasExternalWeakLinkage()) {
1160        if (pred == ICmpInst::ICMP_EQ)
1161          return ConstantInt::getFalse();
1162        else if (pred == ICmpInst::ICMP_NE)
1163          return ConstantInt::getTrue();
1164      }
1165  // icmp eq/ne(GV,null) -> false/true
1166  } else if (C2->isNullValue()) {
1167    if (const GlobalValue *GV = dyn_cast<GlobalValue>(C1))
1168      // Don't try to evaluate aliases.  External weak GV can be null.
1169      if (!isa<GlobalAlias>(GV) && !GV->hasExternalWeakLinkage()) {
1170        if (pred == ICmpInst::ICMP_EQ)
1171          return ConstantInt::getFalse();
1172        else if (pred == ICmpInst::ICMP_NE)
1173          return ConstantInt::getTrue();
1174      }
1175  }
1176
1177  if (isa<ConstantInt>(C1) && isa<ConstantInt>(C2)) {
1178    APInt V1 = cast<ConstantInt>(C1)->getValue();
1179    APInt V2 = cast<ConstantInt>(C2)->getValue();
1180    switch (pred) {
1181    default: assert(0 && "Invalid ICmp Predicate"); return 0;
1182    case ICmpInst::ICMP_EQ: return ConstantInt::get(Type::Int1Ty, V1 == V2);
1183    case ICmpInst::ICMP_NE: return ConstantInt::get(Type::Int1Ty, V1 != V2);
1184    case ICmpInst::ICMP_SLT:return ConstantInt::get(Type::Int1Ty, V1.slt(V2));
1185    case ICmpInst::ICMP_SGT:return ConstantInt::get(Type::Int1Ty, V1.sgt(V2));
1186    case ICmpInst::ICMP_SLE:return ConstantInt::get(Type::Int1Ty, V1.sle(V2));
1187    case ICmpInst::ICMP_SGE:return ConstantInt::get(Type::Int1Ty, V1.sge(V2));
1188    case ICmpInst::ICMP_ULT:return ConstantInt::get(Type::Int1Ty, V1.ult(V2));
1189    case ICmpInst::ICMP_UGT:return ConstantInt::get(Type::Int1Ty, V1.ugt(V2));
1190    case ICmpInst::ICMP_ULE:return ConstantInt::get(Type::Int1Ty, V1.ule(V2));
1191    case ICmpInst::ICMP_UGE:return ConstantInt::get(Type::Int1Ty, V1.uge(V2));
1192    }
1193  } else if (isa<ConstantFP>(C1) && isa<ConstantFP>(C2)) {
1194    APFloat C1V = cast<ConstantFP>(C1)->getValueAPF();
1195    APFloat C2V = cast<ConstantFP>(C2)->getValueAPF();
1196    APFloat::cmpResult R = C1V.compare(C2V);
1197    switch (pred) {
1198    default: assert(0 && "Invalid FCmp Predicate"); return 0;
1199    case FCmpInst::FCMP_FALSE: return ConstantInt::getFalse();
1200    case FCmpInst::FCMP_TRUE:  return ConstantInt::getTrue();
1201    case FCmpInst::FCMP_UNO:
1202      return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpUnordered);
1203    case FCmpInst::FCMP_ORD:
1204      return ConstantInt::get(Type::Int1Ty, R!=APFloat::cmpUnordered);
1205    case FCmpInst::FCMP_UEQ:
1206      return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpUnordered ||
1207                                            R==APFloat::cmpEqual);
1208    case FCmpInst::FCMP_OEQ:
1209      return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpEqual);
1210    case FCmpInst::FCMP_UNE:
1211      return ConstantInt::get(Type::Int1Ty, R!=APFloat::cmpEqual);
1212    case FCmpInst::FCMP_ONE:
1213      return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpLessThan ||
1214                                            R==APFloat::cmpGreaterThan);
1215    case FCmpInst::FCMP_ULT:
1216      return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpUnordered ||
1217                                            R==APFloat::cmpLessThan);
1218    case FCmpInst::FCMP_OLT:
1219      return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpLessThan);
1220    case FCmpInst::FCMP_UGT:
1221      return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpUnordered ||
1222                                            R==APFloat::cmpGreaterThan);
1223    case FCmpInst::FCMP_OGT:
1224      return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpGreaterThan);
1225    case FCmpInst::FCMP_ULE:
1226      return ConstantInt::get(Type::Int1Ty, R!=APFloat::cmpGreaterThan);
1227    case FCmpInst::FCMP_OLE:
1228      return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpLessThan ||
1229                                            R==APFloat::cmpEqual);
1230    case FCmpInst::FCMP_UGE:
1231      return ConstantInt::get(Type::Int1Ty, R!=APFloat::cmpLessThan);
1232    case FCmpInst::FCMP_OGE:
1233      return ConstantInt::get(Type::Int1Ty, R==APFloat::cmpGreaterThan ||
1234                                            R==APFloat::cmpEqual);
1235    }
1236  } else if (const ConstantVector *CP1 = dyn_cast<ConstantVector>(C1)) {
1237    if (const ConstantVector *CP2 = dyn_cast<ConstantVector>(C2)) {
1238      if (pred == FCmpInst::FCMP_OEQ || pred == FCmpInst::FCMP_UEQ) {
1239        for (unsigned i = 0, e = CP1->getNumOperands(); i != e; ++i) {
1240          Constant *C = ConstantExpr::getFCmp(FCmpInst::FCMP_OEQ,
1241                                              CP1->getOperand(i),
1242                                              CP2->getOperand(i));
1243          if (ConstantInt *CB = dyn_cast<ConstantInt>(C))
1244            return CB;
1245        }
1246        // Otherwise, could not decide from any element pairs.
1247        return 0;
1248      } else if (pred == ICmpInst::ICMP_EQ) {
1249        for (unsigned i = 0, e = CP1->getNumOperands(); i != e; ++i) {
1250          Constant *C = ConstantExpr::getICmp(ICmpInst::ICMP_EQ,
1251                                              CP1->getOperand(i),
1252                                              CP2->getOperand(i));
1253          if (ConstantInt *CB = dyn_cast<ConstantInt>(C))
1254            return CB;
1255        }
1256        // Otherwise, could not decide from any element pairs.
1257        return 0;
1258      }
1259    }
1260  }
1261
1262  if (C1->getType()->isFloatingPoint()) {
1263    switch (evaluateFCmpRelation(C1, C2)) {
1264    default: assert(0 && "Unknown relation!");
1265    case FCmpInst::FCMP_UNO:
1266    case FCmpInst::FCMP_ORD:
1267    case FCmpInst::FCMP_UEQ:
1268    case FCmpInst::FCMP_UNE:
1269    case FCmpInst::FCMP_ULT:
1270    case FCmpInst::FCMP_UGT:
1271    case FCmpInst::FCMP_ULE:
1272    case FCmpInst::FCMP_UGE:
1273    case FCmpInst::FCMP_TRUE:
1274    case FCmpInst::FCMP_FALSE:
1275    case FCmpInst::BAD_FCMP_PREDICATE:
1276      break; // Couldn't determine anything about these constants.
1277    case FCmpInst::FCMP_OEQ: // We know that C1 == C2
1278      return ConstantInt::get(Type::Int1Ty,
1279          pred == FCmpInst::FCMP_UEQ || pred == FCmpInst::FCMP_OEQ ||
1280          pred == FCmpInst::FCMP_ULE || pred == FCmpInst::FCMP_OLE ||
1281          pred == FCmpInst::FCMP_UGE || pred == FCmpInst::FCMP_OGE);
1282    case FCmpInst::FCMP_OLT: // We know that C1 < C2
1283      return ConstantInt::get(Type::Int1Ty,
1284          pred == FCmpInst::FCMP_UNE || pred == FCmpInst::FCMP_ONE ||
1285          pred == FCmpInst::FCMP_ULT || pred == FCmpInst::FCMP_OLT ||
1286          pred == FCmpInst::FCMP_ULE || pred == FCmpInst::FCMP_OLE);
1287    case FCmpInst::FCMP_OGT: // We know that C1 > C2
1288      return ConstantInt::get(Type::Int1Ty,
1289          pred == FCmpInst::FCMP_UNE || pred == FCmpInst::FCMP_ONE ||
1290          pred == FCmpInst::FCMP_UGT || pred == FCmpInst::FCMP_OGT ||
1291          pred == FCmpInst::FCMP_UGE || pred == FCmpInst::FCMP_OGE);
1292    case FCmpInst::FCMP_OLE: // We know that C1 <= C2
1293      // We can only partially decide this relation.
1294      if (pred == FCmpInst::FCMP_UGT || pred == FCmpInst::FCMP_OGT)
1295        return ConstantInt::getFalse();
1296      if (pred == FCmpInst::FCMP_ULT || pred == FCmpInst::FCMP_OLT)
1297        return ConstantInt::getTrue();
1298      break;
1299    case FCmpInst::FCMP_OGE: // We known that C1 >= C2
1300      // We can only partially decide this relation.
1301      if (pred == FCmpInst::FCMP_ULT || pred == FCmpInst::FCMP_OLT)
1302        return ConstantInt::getFalse();
1303      if (pred == FCmpInst::FCMP_UGT || pred == FCmpInst::FCMP_OGT)
1304        return ConstantInt::getTrue();
1305      break;
1306    case ICmpInst::ICMP_NE: // We know that C1 != C2
1307      // We can only partially decide this relation.
1308      if (pred == FCmpInst::FCMP_OEQ || pred == FCmpInst::FCMP_UEQ)
1309        return ConstantInt::getFalse();
1310      if (pred == FCmpInst::FCMP_ONE || pred == FCmpInst::FCMP_UNE)
1311        return ConstantInt::getTrue();
1312      break;
1313    }
1314  } else {
1315    // Evaluate the relation between the two constants, per the predicate.
1316    switch (evaluateICmpRelation(C1, C2, CmpInst::isSigned(pred))) {
1317    default: assert(0 && "Unknown relational!");
1318    case ICmpInst::BAD_ICMP_PREDICATE:
1319      break;  // Couldn't determine anything about these constants.
1320    case ICmpInst::ICMP_EQ:   // We know the constants are equal!
1321      // If we know the constants are equal, we can decide the result of this
1322      // computation precisely.
1323      return ConstantInt::get(Type::Int1Ty,
1324                              pred == ICmpInst::ICMP_EQ  ||
1325                              pred == ICmpInst::ICMP_ULE ||
1326                              pred == ICmpInst::ICMP_SLE ||
1327                              pred == ICmpInst::ICMP_UGE ||
1328                              pred == ICmpInst::ICMP_SGE);
1329    case ICmpInst::ICMP_ULT:
1330      // If we know that C1 < C2, we can decide the result of this computation
1331      // precisely.
1332      return ConstantInt::get(Type::Int1Ty,
1333                              pred == ICmpInst::ICMP_ULT ||
1334                              pred == ICmpInst::ICMP_NE  ||
1335                              pred == ICmpInst::ICMP_ULE);
1336    case ICmpInst::ICMP_SLT:
1337      // If we know that C1 < C2, we can decide the result of this computation
1338      // precisely.
1339      return ConstantInt::get(Type::Int1Ty,
1340                              pred == ICmpInst::ICMP_SLT ||
1341                              pred == ICmpInst::ICMP_NE  ||
1342                              pred == ICmpInst::ICMP_SLE);
1343    case ICmpInst::ICMP_UGT:
1344      // If we know that C1 > C2, we can decide the result of this computation
1345      // precisely.
1346      return ConstantInt::get(Type::Int1Ty,
1347                              pred == ICmpInst::ICMP_UGT ||
1348                              pred == ICmpInst::ICMP_NE  ||
1349                              pred == ICmpInst::ICMP_UGE);
1350    case ICmpInst::ICMP_SGT:
1351      // If we know that C1 > C2, we can decide the result of this computation
1352      // precisely.
1353      return ConstantInt::get(Type::Int1Ty,
1354                              pred == ICmpInst::ICMP_SGT ||
1355                              pred == ICmpInst::ICMP_NE  ||
1356                              pred == ICmpInst::ICMP_SGE);
1357    case ICmpInst::ICMP_ULE:
1358      // If we know that C1 <= C2, we can only partially decide this relation.
1359      if (pred == ICmpInst::ICMP_UGT) return ConstantInt::getFalse();
1360      if (pred == ICmpInst::ICMP_ULT) return ConstantInt::getTrue();
1361      break;
1362    case ICmpInst::ICMP_SLE:
1363      // If we know that C1 <= C2, we can only partially decide this relation.
1364      if (pred == ICmpInst::ICMP_SGT) return ConstantInt::getFalse();
1365      if (pred == ICmpInst::ICMP_SLT) return ConstantInt::getTrue();
1366      break;
1367
1368    case ICmpInst::ICMP_UGE:
1369      // If we know that C1 >= C2, we can only partially decide this relation.
1370      if (pred == ICmpInst::ICMP_ULT) return ConstantInt::getFalse();
1371      if (pred == ICmpInst::ICMP_UGT) return ConstantInt::getTrue();
1372      break;
1373    case ICmpInst::ICMP_SGE:
1374      // If we know that C1 >= C2, we can only partially decide this relation.
1375      if (pred == ICmpInst::ICMP_SLT) return ConstantInt::getFalse();
1376      if (pred == ICmpInst::ICMP_SGT) return ConstantInt::getTrue();
1377      break;
1378
1379    case ICmpInst::ICMP_NE:
1380      // If we know that C1 != C2, we can only partially decide this relation.
1381      if (pred == ICmpInst::ICMP_EQ) return ConstantInt::getFalse();
1382      if (pred == ICmpInst::ICMP_NE) return ConstantInt::getTrue();
1383      break;
1384    }
1385
1386    if (!isa<ConstantExpr>(C1) && isa<ConstantExpr>(C2)) {
1387      // If C2 is a constant expr and C1 isn't, flop them around and fold the
1388      // other way if possible.
1389      switch (pred) {
1390      case ICmpInst::ICMP_EQ:
1391      case ICmpInst::ICMP_NE:
1392        // No change of predicate required.
1393        return ConstantFoldCompareInstruction(pred, C2, C1);
1394
1395      case ICmpInst::ICMP_ULT:
1396      case ICmpInst::ICMP_SLT:
1397      case ICmpInst::ICMP_UGT:
1398      case ICmpInst::ICMP_SGT:
1399      case ICmpInst::ICMP_ULE:
1400      case ICmpInst::ICMP_SLE:
1401      case ICmpInst::ICMP_UGE:
1402      case ICmpInst::ICMP_SGE:
1403        // Change the predicate as necessary to swap the operands.
1404        pred = ICmpInst::getSwappedPredicate((ICmpInst::Predicate)pred);
1405        return ConstantFoldCompareInstruction(pred, C2, C1);
1406
1407      default:  // These predicates cannot be flopped around.
1408        break;
1409      }
1410    }
1411  }
1412  return 0;
1413}
1414
1415Constant *llvm::ConstantFoldGetElementPtr(const Constant *C,
1416                                          Constant* const *Idxs,
1417                                          unsigned NumIdx) {
1418  if (NumIdx == 0 ||
1419      (NumIdx == 1 && Idxs[0]->isNullValue()))
1420    return const_cast<Constant*>(C);
1421
1422  if (isa<UndefValue>(C)) {
1423    const PointerType *Ptr = cast<PointerType>(C->getType());
1424    const Type *Ty = GetElementPtrInst::getIndexedType(Ptr,
1425                                                       (Value **)Idxs,
1426                                                       (Value **)Idxs+NumIdx);
1427    assert(Ty != 0 && "Invalid indices for GEP!");
1428    return UndefValue::get(PointerType::get(Ty, Ptr->getAddressSpace()));
1429  }
1430
1431  Constant *Idx0 = Idxs[0];
1432  if (C->isNullValue()) {
1433    bool isNull = true;
1434    for (unsigned i = 0, e = NumIdx; i != e; ++i)
1435      if (!Idxs[i]->isNullValue()) {
1436        isNull = false;
1437        break;
1438      }
1439    if (isNull) {
1440      const PointerType *Ptr = cast<PointerType>(C->getType());
1441      const Type *Ty = GetElementPtrInst::getIndexedType(Ptr,
1442                                                         (Value**)Idxs,
1443                                                         (Value**)Idxs+NumIdx);
1444      assert(Ty != 0 && "Invalid indices for GEP!");
1445      return
1446        ConstantPointerNull::get(PointerType::get(Ty,Ptr->getAddressSpace()));
1447    }
1448  }
1449
1450  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(const_cast<Constant*>(C))) {
1451    // Combine Indices - If the source pointer to this getelementptr instruction
1452    // is a getelementptr instruction, combine the indices of the two
1453    // getelementptr instructions into a single instruction.
1454    //
1455    if (CE->getOpcode() == Instruction::GetElementPtr) {
1456      const Type *LastTy = 0;
1457      for (gep_type_iterator I = gep_type_begin(CE), E = gep_type_end(CE);
1458           I != E; ++I)
1459        LastTy = *I;
1460
1461      if ((LastTy && isa<ArrayType>(LastTy)) || Idx0->isNullValue()) {
1462        SmallVector<Value*, 16> NewIndices;
1463        NewIndices.reserve(NumIdx + CE->getNumOperands());
1464        for (unsigned i = 1, e = CE->getNumOperands()-1; i != e; ++i)
1465          NewIndices.push_back(CE->getOperand(i));
1466
1467        // Add the last index of the source with the first index of the new GEP.
1468        // Make sure to handle the case when they are actually different types.
1469        Constant *Combined = CE->getOperand(CE->getNumOperands()-1);
1470        // Otherwise it must be an array.
1471        if (!Idx0->isNullValue()) {
1472          const Type *IdxTy = Combined->getType();
1473          if (IdxTy != Idx0->getType()) {
1474            Constant *C1 = ConstantExpr::getSExtOrBitCast(Idx0, Type::Int64Ty);
1475            Constant *C2 = ConstantExpr::getSExtOrBitCast(Combined,
1476                                                          Type::Int64Ty);
1477            Combined = ConstantExpr::get(Instruction::Add, C1, C2);
1478          } else {
1479            Combined =
1480              ConstantExpr::get(Instruction::Add, Idx0, Combined);
1481          }
1482        }
1483
1484        NewIndices.push_back(Combined);
1485        NewIndices.insert(NewIndices.end(), Idxs+1, Idxs+NumIdx);
1486        return ConstantExpr::getGetElementPtr(CE->getOperand(0), &NewIndices[0],
1487                                              NewIndices.size());
1488      }
1489    }
1490
1491    // Implement folding of:
1492    //    int* getelementptr ([2 x int]* cast ([3 x int]* %X to [2 x int]*),
1493    //                        long 0, long 0)
1494    // To: int* getelementptr ([3 x int]* %X, long 0, long 0)
1495    //
1496    if (CE->isCast() && NumIdx > 1 && Idx0->isNullValue()) {
1497      if (const PointerType *SPT =
1498          dyn_cast<PointerType>(CE->getOperand(0)->getType()))
1499        if (const ArrayType *SAT = dyn_cast<ArrayType>(SPT->getElementType()))
1500          if (const ArrayType *CAT =
1501        dyn_cast<ArrayType>(cast<PointerType>(C->getType())->getElementType()))
1502            if (CAT->getElementType() == SAT->getElementType())
1503              return ConstantExpr::getGetElementPtr(
1504                      (Constant*)CE->getOperand(0), Idxs, NumIdx);
1505    }
1506
1507    // Fold: getelementptr (i8* inttoptr (i64 1 to i8*), i32 -1)
1508    // Into: inttoptr (i64 0 to i8*)
1509    // This happens with pointers to member functions in C++.
1510    if (CE->getOpcode() == Instruction::IntToPtr && NumIdx == 1 &&
1511        isa<ConstantInt>(CE->getOperand(0)) && isa<ConstantInt>(Idxs[0]) &&
1512        cast<PointerType>(CE->getType())->getElementType() == Type::Int8Ty) {
1513      Constant *Base = CE->getOperand(0);
1514      Constant *Offset = Idxs[0];
1515
1516      // Convert the smaller integer to the larger type.
1517      if (Offset->getType()->getPrimitiveSizeInBits() <
1518          Base->getType()->getPrimitiveSizeInBits())
1519        Offset = ConstantExpr::getSExt(Offset, Base->getType());
1520      else if (Base->getType()->getPrimitiveSizeInBits() <
1521               Offset->getType()->getPrimitiveSizeInBits())
1522        Base = ConstantExpr::getZExt(Base, Base->getType());
1523
1524      Base = ConstantExpr::getAdd(Base, Offset);
1525      return ConstantExpr::getIntToPtr(Base, CE->getType());
1526    }
1527  }
1528  return 0;
1529}
1530
1531