InstCombineCasts.cpp revision d26c9e183e56d09f48d7074be4cacce099338316
1//===- InstCombineCasts.cpp -----------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file implements the visit functions for cast operations.
11//
12//===----------------------------------------------------------------------===//
13
14#include "InstCombine.h"
15#include "llvm/Target/TargetData.h"
16#include "llvm/Support/PatternMatch.h"
17using namespace llvm;
18using namespace PatternMatch;
19
20/// DecomposeSimpleLinearExpr - Analyze 'Val', seeing if it is a simple linear
21/// expression.  If so, decompose it, returning some value X, such that Val is
22/// X*Scale+Offset.
23///
24static Value *DecomposeSimpleLinearExpr(Value *Val, unsigned &Scale,
25                                        int &Offset) {
26  assert(Val->getType()->isInteger(32) && "Unexpected allocation size type!");
27  if (ConstantInt *CI = dyn_cast<ConstantInt>(Val)) {
28    Offset = CI->getZExtValue();
29    Scale  = 0;
30    return ConstantInt::get(Type::getInt32Ty(Val->getContext()), 0);
31  }
32
33  if (BinaryOperator *I = dyn_cast<BinaryOperator>(Val)) {
34    if (ConstantInt *RHS = dyn_cast<ConstantInt>(I->getOperand(1))) {
35      if (I->getOpcode() == Instruction::Shl) {
36        // This is a value scaled by '1 << the shift amt'.
37        Scale = 1U << RHS->getZExtValue();
38        Offset = 0;
39        return I->getOperand(0);
40      }
41
42      if (I->getOpcode() == Instruction::Mul) {
43        // This value is scaled by 'RHS'.
44        Scale = RHS->getZExtValue();
45        Offset = 0;
46        return I->getOperand(0);
47      }
48
49      if (I->getOpcode() == Instruction::Add) {
50        // We have X+C.  Check to see if we really have (X*C2)+C1,
51        // where C1 is divisible by C2.
52        unsigned SubScale;
53        Value *SubVal =
54          DecomposeSimpleLinearExpr(I->getOperand(0), SubScale, Offset);
55        Offset += RHS->getZExtValue();
56        Scale = SubScale;
57        return SubVal;
58      }
59    }
60  }
61
62  // Otherwise, we can't look past this.
63  Scale = 1;
64  Offset = 0;
65  return Val;
66}
67
68/// PromoteCastOfAllocation - If we find a cast of an allocation instruction,
69/// try to eliminate the cast by moving the type information into the alloc.
70Instruction *InstCombiner::PromoteCastOfAllocation(BitCastInst &CI,
71                                                   AllocaInst &AI) {
72  // This requires TargetData to get the alloca alignment and size information.
73  if (!TD) return 0;
74
75  const PointerType *PTy = cast<PointerType>(CI.getType());
76
77  BuilderTy AllocaBuilder(*Builder);
78  AllocaBuilder.SetInsertPoint(AI.getParent(), &AI);
79
80  // Get the type really allocated and the type casted to.
81  const Type *AllocElTy = AI.getAllocatedType();
82  const Type *CastElTy = PTy->getElementType();
83  if (!AllocElTy->isSized() || !CastElTy->isSized()) return 0;
84
85  unsigned AllocElTyAlign = TD->getABITypeAlignment(AllocElTy);
86  unsigned CastElTyAlign = TD->getABITypeAlignment(CastElTy);
87  if (CastElTyAlign < AllocElTyAlign) return 0;
88
89  // If the allocation has multiple uses, only promote it if we are strictly
90  // increasing the alignment of the resultant allocation.  If we keep it the
91  // same, we open the door to infinite loops of various kinds.  (A reference
92  // from a dbg.declare doesn't count as a use for this purpose.)
93  if (!AI.hasOneUse() && !hasOneUsePlusDeclare(&AI) &&
94      CastElTyAlign == AllocElTyAlign) return 0;
95
96  uint64_t AllocElTySize = TD->getTypeAllocSize(AllocElTy);
97  uint64_t CastElTySize = TD->getTypeAllocSize(CastElTy);
98  if (CastElTySize == 0 || AllocElTySize == 0) return 0;
99
100  // See if we can satisfy the modulus by pulling a scale out of the array
101  // size argument.
102  unsigned ArraySizeScale;
103  int ArrayOffset;
104  Value *NumElements = // See if the array size is a decomposable linear expr.
105    DecomposeSimpleLinearExpr(AI.getOperand(0), ArraySizeScale, ArrayOffset);
106
107  // If we can now satisfy the modulus, by using a non-1 scale, we really can
108  // do the xform.
109  if ((AllocElTySize*ArraySizeScale) % CastElTySize != 0 ||
110      (AllocElTySize*ArrayOffset   ) % CastElTySize != 0) return 0;
111
112  unsigned Scale = (AllocElTySize*ArraySizeScale)/CastElTySize;
113  Value *Amt = 0;
114  if (Scale == 1) {
115    Amt = NumElements;
116  } else {
117    Amt = ConstantInt::get(Type::getInt32Ty(CI.getContext()), Scale);
118    // Insert before the alloca, not before the cast.
119    Amt = AllocaBuilder.CreateMul(Amt, NumElements, "tmp");
120  }
121
122  if (int Offset = (AllocElTySize*ArrayOffset)/CastElTySize) {
123    Value *Off = ConstantInt::get(Type::getInt32Ty(CI.getContext()),
124                                  Offset, true);
125    Amt = AllocaBuilder.CreateAdd(Amt, Off, "tmp");
126  }
127
128  AllocaInst *New = AllocaBuilder.CreateAlloca(CastElTy, Amt);
129  New->setAlignment(AI.getAlignment());
130  New->takeName(&AI);
131
132  // If the allocation has one real use plus a dbg.declare, just remove the
133  // declare.
134  if (DbgDeclareInst *DI = hasOneUsePlusDeclare(&AI)) {
135    EraseInstFromFunction(*(Instruction*)DI);
136  }
137  // If the allocation has multiple real uses, insert a cast and change all
138  // things that used it to use the new cast.  This will also hack on CI, but it
139  // will die soon.
140  else if (!AI.hasOneUse()) {
141    // New is the allocation instruction, pointer typed. AI is the original
142    // allocation instruction, also pointer typed. Thus, cast to use is BitCast.
143    Value *NewCast = AllocaBuilder.CreateBitCast(New, AI.getType(), "tmpcast");
144    AI.replaceAllUsesWith(NewCast);
145  }
146  return ReplaceInstUsesWith(CI, New);
147}
148
149
150
151/// EvaluateInDifferentType - Given an expression that
152/// CanEvaluateTruncated or CanEvaluateSExtd returns true for, actually
153/// insert the code to evaluate the expression.
154Value *InstCombiner::EvaluateInDifferentType(Value *V, const Type *Ty,
155                                             bool isSigned) {
156  if (Constant *C = dyn_cast<Constant>(V)) {
157    C = ConstantExpr::getIntegerCast(C, Ty, isSigned /*Sext or ZExt*/);
158    // If we got a constantexpr back, try to simplify it with TD info.
159    if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C))
160      C = ConstantFoldConstantExpression(CE, TD);
161    return C;
162  }
163
164  // Otherwise, it must be an instruction.
165  Instruction *I = cast<Instruction>(V);
166  Instruction *Res = 0;
167  unsigned Opc = I->getOpcode();
168  switch (Opc) {
169  case Instruction::Add:
170  case Instruction::Sub:
171  case Instruction::Mul:
172  case Instruction::And:
173  case Instruction::Or:
174  case Instruction::Xor:
175  case Instruction::AShr:
176  case Instruction::LShr:
177  case Instruction::Shl:
178  case Instruction::UDiv:
179  case Instruction::URem: {
180    Value *LHS = EvaluateInDifferentType(I->getOperand(0), Ty, isSigned);
181    Value *RHS = EvaluateInDifferentType(I->getOperand(1), Ty, isSigned);
182    Res = BinaryOperator::Create((Instruction::BinaryOps)Opc, LHS, RHS);
183    break;
184  }
185  case Instruction::Trunc:
186  case Instruction::ZExt:
187  case Instruction::SExt:
188    // If the source type of the cast is the type we're trying for then we can
189    // just return the source.  There's no need to insert it because it is not
190    // new.
191    if (I->getOperand(0)->getType() == Ty)
192      return I->getOperand(0);
193
194    // Otherwise, must be the same type of cast, so just reinsert a new one.
195    Res = CastInst::Create(cast<CastInst>(I)->getOpcode(), I->getOperand(0),Ty);
196    break;
197  case Instruction::Select: {
198    Value *True = EvaluateInDifferentType(I->getOperand(1), Ty, isSigned);
199    Value *False = EvaluateInDifferentType(I->getOperand(2), Ty, isSigned);
200    Res = SelectInst::Create(I->getOperand(0), True, False);
201    break;
202  }
203  case Instruction::PHI: {
204    PHINode *OPN = cast<PHINode>(I);
205    PHINode *NPN = PHINode::Create(Ty);
206    for (unsigned i = 0, e = OPN->getNumIncomingValues(); i != e; ++i) {
207      Value *V =EvaluateInDifferentType(OPN->getIncomingValue(i), Ty, isSigned);
208      NPN->addIncoming(V, OPN->getIncomingBlock(i));
209    }
210    Res = NPN;
211    break;
212  }
213  default:
214    // TODO: Can handle more cases here.
215    llvm_unreachable("Unreachable!");
216    break;
217  }
218
219  Res->takeName(I);
220  return InsertNewInstBefore(Res, *I);
221}
222
223
224/// This function is a wrapper around CastInst::isEliminableCastPair. It
225/// simply extracts arguments and returns what that function returns.
226static Instruction::CastOps
227isEliminableCastPair(
228  const CastInst *CI, ///< The first cast instruction
229  unsigned opcode,       ///< The opcode of the second cast instruction
230  const Type *DstTy,     ///< The target type for the second cast instruction
231  TargetData *TD         ///< The target data for pointer size
232) {
233
234  const Type *SrcTy = CI->getOperand(0)->getType();   // A from above
235  const Type *MidTy = CI->getType();                  // B from above
236
237  // Get the opcodes of the two Cast instructions
238  Instruction::CastOps firstOp = Instruction::CastOps(CI->getOpcode());
239  Instruction::CastOps secondOp = Instruction::CastOps(opcode);
240
241  unsigned Res = CastInst::isEliminableCastPair(firstOp, secondOp, SrcTy, MidTy,
242                                                DstTy,
243                                  TD ? TD->getIntPtrType(CI->getContext()) : 0);
244
245  // We don't want to form an inttoptr or ptrtoint that converts to an integer
246  // type that differs from the pointer size.
247  if ((Res == Instruction::IntToPtr &&
248          (!TD || SrcTy != TD->getIntPtrType(CI->getContext()))) ||
249      (Res == Instruction::PtrToInt &&
250          (!TD || DstTy != TD->getIntPtrType(CI->getContext()))))
251    Res = 0;
252
253  return Instruction::CastOps(Res);
254}
255
256/// ValueRequiresCast - Return true if the cast from "V to Ty" actually results
257/// in any code being generated.  It does not require codegen if V is simple
258/// enough or if the cast can be folded into other casts.
259bool InstCombiner::ValueRequiresCast(Instruction::CastOps opcode,const Value *V,
260                                     const Type *Ty) {
261  if (V->getType() == Ty || isa<Constant>(V)) return false;
262
263  // If this is another cast that can be eliminated, it isn't codegen either.
264  if (const CastInst *CI = dyn_cast<CastInst>(V))
265    if (isEliminableCastPair(CI, opcode, Ty, TD))
266      return false;
267  return true;
268}
269
270
271/// @brief Implement the transforms common to all CastInst visitors.
272Instruction *InstCombiner::commonCastTransforms(CastInst &CI) {
273  Value *Src = CI.getOperand(0);
274
275  // Many cases of "cast of a cast" are eliminable. If it's eliminable we just
276  // eliminate it now.
277  if (CastInst *CSrc = dyn_cast<CastInst>(Src)) {   // A->B->C cast
278    if (Instruction::CastOps opc =
279        isEliminableCastPair(CSrc, CI.getOpcode(), CI.getType(), TD)) {
280      // The first cast (CSrc) is eliminable so we need to fix up or replace
281      // the second cast (CI). CSrc will then have a good chance of being dead.
282      return CastInst::Create(opc, CSrc->getOperand(0), CI.getType());
283    }
284  }
285
286  // If we are casting a select then fold the cast into the select
287  if (SelectInst *SI = dyn_cast<SelectInst>(Src))
288    if (Instruction *NV = FoldOpIntoSelect(CI, SI))
289      return NV;
290
291  // If we are casting a PHI then fold the cast into the PHI
292  if (isa<PHINode>(Src)) {
293    // We don't do this if this would create a PHI node with an illegal type if
294    // it is currently legal.
295    if (!isa<IntegerType>(Src->getType()) ||
296        !isa<IntegerType>(CI.getType()) ||
297        ShouldChangeType(CI.getType(), Src->getType()))
298      if (Instruction *NV = FoldOpIntoPhi(CI))
299        return NV;
300  }
301
302  return 0;
303}
304
305/// CanEvaluateTruncated - Return true if we can evaluate the specified
306/// expression tree as type Ty instead of its larger type, and arrive with the
307/// same value.  This is used by code that tries to eliminate truncates.
308///
309/// Ty will always be a type smaller than V.  We should return true if trunc(V)
310/// can be computed by computing V in the smaller type.  If V is an instruction,
311/// then trunc(inst(x,y)) can be computed as inst(trunc(x),trunc(y)), which only
312/// makes sense if x and y can be efficiently truncated.
313///
314static bool CanEvaluateTruncated(Value *V, const Type *Ty) {
315  // We can always evaluate constants in another type.
316  if (isa<Constant>(V))
317    return true;
318
319  Instruction *I = dyn_cast<Instruction>(V);
320  if (!I) return false;
321
322  const Type *OrigTy = V->getType();
323
324  // If this is an extension from the dest type, we can eliminate it.
325  if ((isa<ZExtInst>(I) || isa<SExtInst>(I)) &&
326      I->getOperand(0)->getType() == Ty)
327    return true;
328
329  // We can't extend or shrink something that has multiple uses: doing so would
330  // require duplicating the instruction in general, which isn't profitable.
331  if (!I->hasOneUse()) return false;
332
333  unsigned Opc = I->getOpcode();
334  switch (Opc) {
335  case Instruction::Add:
336  case Instruction::Sub:
337  case Instruction::Mul:
338  case Instruction::And:
339  case Instruction::Or:
340  case Instruction::Xor:
341    // These operators can all arbitrarily be extended or truncated.
342    return CanEvaluateTruncated(I->getOperand(0), Ty) &&
343           CanEvaluateTruncated(I->getOperand(1), Ty);
344
345  case Instruction::UDiv:
346  case Instruction::URem: {
347    // UDiv and URem can be truncated if all the truncated bits are zero.
348    uint32_t OrigBitWidth = OrigTy->getScalarSizeInBits();
349    uint32_t BitWidth = Ty->getScalarSizeInBits();
350    if (BitWidth < OrigBitWidth) {
351      APInt Mask = APInt::getHighBitsSet(OrigBitWidth, OrigBitWidth-BitWidth);
352      if (MaskedValueIsZero(I->getOperand(0), Mask) &&
353          MaskedValueIsZero(I->getOperand(1), Mask)) {
354        return CanEvaluateTruncated(I->getOperand(0), Ty) &&
355               CanEvaluateTruncated(I->getOperand(1), Ty);
356      }
357    }
358    break;
359  }
360  case Instruction::Shl:
361    // If we are truncating the result of this SHL, and if it's a shift of a
362    // constant amount, we can always perform a SHL in a smaller type.
363    if (ConstantInt *CI = dyn_cast<ConstantInt>(I->getOperand(1))) {
364      uint32_t BitWidth = Ty->getScalarSizeInBits();
365      if (CI->getLimitedValue(BitWidth) < BitWidth)
366        return CanEvaluateTruncated(I->getOperand(0), Ty);
367    }
368    break;
369  case Instruction::LShr:
370    // If this is a truncate of a logical shr, we can truncate it to a smaller
371    // lshr iff we know that the bits we would otherwise be shifting in are
372    // already zeros.
373    if (ConstantInt *CI = dyn_cast<ConstantInt>(I->getOperand(1))) {
374      uint32_t OrigBitWidth = OrigTy->getScalarSizeInBits();
375      uint32_t BitWidth = Ty->getScalarSizeInBits();
376      if (MaskedValueIsZero(I->getOperand(0),
377            APInt::getHighBitsSet(OrigBitWidth, OrigBitWidth-BitWidth)) &&
378          CI->getLimitedValue(BitWidth) < BitWidth) {
379        return CanEvaluateTruncated(I->getOperand(0), Ty);
380      }
381    }
382    break;
383  case Instruction::Trunc:
384    // trunc(trunc(x)) -> trunc(x)
385    return true;
386  case Instruction::Select: {
387    SelectInst *SI = cast<SelectInst>(I);
388    return CanEvaluateTruncated(SI->getTrueValue(), Ty) &&
389           CanEvaluateTruncated(SI->getFalseValue(), Ty);
390  }
391  case Instruction::PHI: {
392    // We can change a phi if we can change all operands.  Note that we never
393    // get into trouble with cyclic PHIs here because we only consider
394    // instructions with a single use.
395    PHINode *PN = cast<PHINode>(I);
396    for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
397      if (!CanEvaluateTruncated(PN->getIncomingValue(i), Ty))
398        return false;
399    return true;
400  }
401  default:
402    // TODO: Can handle more cases here.
403    break;
404  }
405
406  return false;
407}
408
409Instruction *InstCombiner::visitTrunc(TruncInst &CI) {
410  if (Instruction *Result = commonCastTransforms(CI))
411    return Result;
412
413  // See if we can simplify any instructions used by the input whose sole
414  // purpose is to compute bits we don't care about.
415  if (SimplifyDemandedInstructionBits(CI))
416    return &CI;
417
418  Value *Src = CI.getOperand(0);
419  const Type *DestTy = CI.getType(), *SrcTy = Src->getType();
420
421  // Attempt to truncate the entire input expression tree to the destination
422  // type.   Only do this if the dest type is a simple type, don't convert the
423  // expression tree to something weird like i93 unless the source is also
424  // strange.
425  if ((isa<VectorType>(DestTy) || ShouldChangeType(SrcTy, DestTy)) &&
426      CanEvaluateTruncated(Src, DestTy)) {
427
428    // If this cast is a truncate, evaluting in a different type always
429    // eliminates the cast, so it is always a win.
430    DEBUG(dbgs() << "ICE: EvaluateInDifferentType converting expression type"
431          " to avoid cast: " << CI);
432    Value *Res = EvaluateInDifferentType(Src, DestTy, false);
433    assert(Res->getType() == DestTy);
434    return ReplaceInstUsesWith(CI, Res);
435  }
436
437  // Canonicalize trunc x to i1 -> (icmp ne (and x, 1), 0), likewise for vector.
438  if (DestTy->getScalarSizeInBits() == 1) {
439    Constant *One = ConstantInt::get(Src->getType(), 1);
440    Src = Builder->CreateAnd(Src, One, "tmp");
441    Value *Zero = Constant::getNullValue(Src->getType());
442    return new ICmpInst(ICmpInst::ICMP_NE, Src, Zero);
443  }
444
445  return 0;
446}
447
448/// transformZExtICmp - Transform (zext icmp) to bitwise / integer operations
449/// in order to eliminate the icmp.
450Instruction *InstCombiner::transformZExtICmp(ICmpInst *ICI, Instruction &CI,
451                                             bool DoXform) {
452  // If we are just checking for a icmp eq of a single bit and zext'ing it
453  // to an integer, then shift the bit to the appropriate place and then
454  // cast to integer to avoid the comparison.
455  if (ConstantInt *Op1C = dyn_cast<ConstantInt>(ICI->getOperand(1))) {
456    const APInt &Op1CV = Op1C->getValue();
457
458    // zext (x <s  0) to i32 --> x>>u31      true if signbit set.
459    // zext (x >s -1) to i32 --> (x>>u31)^1  true if signbit clear.
460    if ((ICI->getPredicate() == ICmpInst::ICMP_SLT && Op1CV == 0) ||
461        (ICI->getPredicate() == ICmpInst::ICMP_SGT &&Op1CV.isAllOnesValue())) {
462      if (!DoXform) return ICI;
463
464      Value *In = ICI->getOperand(0);
465      Value *Sh = ConstantInt::get(In->getType(),
466                                   In->getType()->getScalarSizeInBits()-1);
467      In = Builder->CreateLShr(In, Sh, In->getName()+".lobit");
468      if (In->getType() != CI.getType())
469        In = Builder->CreateIntCast(In, CI.getType(), false/*ZExt*/, "tmp");
470
471      if (ICI->getPredicate() == ICmpInst::ICMP_SGT) {
472        Constant *One = ConstantInt::get(In->getType(), 1);
473        In = Builder->CreateXor(In, One, In->getName()+".not");
474      }
475
476      return ReplaceInstUsesWith(CI, In);
477    }
478
479
480
481    // zext (X == 0) to i32 --> X^1      iff X has only the low bit set.
482    // zext (X == 0) to i32 --> (X>>1)^1 iff X has only the 2nd bit set.
483    // zext (X == 1) to i32 --> X        iff X has only the low bit set.
484    // zext (X == 2) to i32 --> X>>1     iff X has only the 2nd bit set.
485    // zext (X != 0) to i32 --> X        iff X has only the low bit set.
486    // zext (X != 0) to i32 --> X>>1     iff X has only the 2nd bit set.
487    // zext (X != 1) to i32 --> X^1      iff X has only the low bit set.
488    // zext (X != 2) to i32 --> (X>>1)^1 iff X has only the 2nd bit set.
489    if ((Op1CV == 0 || Op1CV.isPowerOf2()) &&
490        // This only works for EQ and NE
491        ICI->isEquality()) {
492      // If Op1C some other power of two, convert:
493      uint32_t BitWidth = Op1C->getType()->getBitWidth();
494      APInt KnownZero(BitWidth, 0), KnownOne(BitWidth, 0);
495      APInt TypeMask(APInt::getAllOnesValue(BitWidth));
496      ComputeMaskedBits(ICI->getOperand(0), TypeMask, KnownZero, KnownOne);
497
498      APInt KnownZeroMask(~KnownZero);
499      if (KnownZeroMask.isPowerOf2()) { // Exactly 1 possible 1?
500        if (!DoXform) return ICI;
501
502        bool isNE = ICI->getPredicate() == ICmpInst::ICMP_NE;
503        if (Op1CV != 0 && (Op1CV != KnownZeroMask)) {
504          // (X&4) == 2 --> false
505          // (X&4) != 2 --> true
506          Constant *Res = ConstantInt::get(Type::getInt1Ty(CI.getContext()),
507                                           isNE);
508          Res = ConstantExpr::getZExt(Res, CI.getType());
509          return ReplaceInstUsesWith(CI, Res);
510        }
511
512        uint32_t ShiftAmt = KnownZeroMask.logBase2();
513        Value *In = ICI->getOperand(0);
514        if (ShiftAmt) {
515          // Perform a logical shr by shiftamt.
516          // Insert the shift to put the result in the low bit.
517          In = Builder->CreateLShr(In, ConstantInt::get(In->getType(),ShiftAmt),
518                                   In->getName()+".lobit");
519        }
520
521        if ((Op1CV != 0) == isNE) { // Toggle the low bit.
522          Constant *One = ConstantInt::get(In->getType(), 1);
523          In = Builder->CreateXor(In, One, "tmp");
524        }
525
526        if (CI.getType() == In->getType())
527          return ReplaceInstUsesWith(CI, In);
528        else
529          return CastInst::CreateIntegerCast(In, CI.getType(), false/*ZExt*/);
530      }
531    }
532  }
533
534  // icmp ne A, B is equal to xor A, B when A and B only really have one bit.
535  // It is also profitable to transform icmp eq into not(xor(A, B)) because that
536  // may lead to additional simplifications.
537  if (ICI->isEquality() && CI.getType() == ICI->getOperand(0)->getType()) {
538    if (const IntegerType *ITy = dyn_cast<IntegerType>(CI.getType())) {
539      uint32_t BitWidth = ITy->getBitWidth();
540      Value *LHS = ICI->getOperand(0);
541      Value *RHS = ICI->getOperand(1);
542
543      APInt KnownZeroLHS(BitWidth, 0), KnownOneLHS(BitWidth, 0);
544      APInt KnownZeroRHS(BitWidth, 0), KnownOneRHS(BitWidth, 0);
545      APInt TypeMask(APInt::getAllOnesValue(BitWidth));
546      ComputeMaskedBits(LHS, TypeMask, KnownZeroLHS, KnownOneLHS);
547      ComputeMaskedBits(RHS, TypeMask, KnownZeroRHS, KnownOneRHS);
548
549      if (KnownZeroLHS == KnownZeroRHS && KnownOneLHS == KnownOneRHS) {
550        APInt KnownBits = KnownZeroLHS | KnownOneLHS;
551        APInt UnknownBit = ~KnownBits;
552        if (UnknownBit.countPopulation() == 1) {
553          if (!DoXform) return ICI;
554
555          Value *Result = Builder->CreateXor(LHS, RHS);
556
557          // Mask off any bits that are set and won't be shifted away.
558          if (KnownOneLHS.uge(UnknownBit))
559            Result = Builder->CreateAnd(Result,
560                                        ConstantInt::get(ITy, UnknownBit));
561
562          // Shift the bit we're testing down to the lsb.
563          Result = Builder->CreateLShr(
564               Result, ConstantInt::get(ITy, UnknownBit.countTrailingZeros()));
565
566          if (ICI->getPredicate() == ICmpInst::ICMP_EQ)
567            Result = Builder->CreateXor(Result, ConstantInt::get(ITy, 1));
568          Result->takeName(ICI);
569          return ReplaceInstUsesWith(CI, Result);
570        }
571      }
572    }
573  }
574
575  return 0;
576}
577
578/// GetLeadingZeros - Compute the number of known-zero leading bits.
579static unsigned GetLeadingZeros(Value *V, const TargetData *TD) {
580  unsigned Bits = V->getType()->getScalarSizeInBits();
581  APInt KnownZero(Bits, 0), KnownOne(Bits, 0);
582  ComputeMaskedBits(V, APInt::getAllOnesValue(Bits), KnownZero, KnownOne, TD);
583  return KnownZero.countLeadingOnes();
584}
585
586/// CanEvaluateZExtd - Determine if the specified value can be computed in the
587/// specified wider type and produce the same low bits.  If not, return -1.  If
588/// it is possible, return the number of high bits that are known to be zero in
589/// the promoted value.
590static int CanEvaluateZExtd(Value *V, const Type *Ty,unsigned &NumCastsRemoved,
591                            const TargetData *TD) {
592  const Type *OrigTy = V->getType();
593
594  if (isa<Constant>(V)) {
595    unsigned Extended = Ty->getScalarSizeInBits()-OrigTy->getScalarSizeInBits();
596
597    // Constants can always be zero ext'd, even if it requires a ConstantExpr.
598    if (ConstantInt *CI = dyn_cast<ConstantInt>(V))
599      return Extended + CI->getValue().countLeadingZeros();
600    return Extended;
601  }
602
603  Instruction *I = dyn_cast<Instruction>(V);
604  if (!I) return -1;
605
606  // If the input is a truncate from the destination type, we can trivially
607  // eliminate it, and this will remove a cast overall.
608  if (isa<TruncInst>(I) && I->getOperand(0)->getType() == Ty) {
609    // If the first operand is itself a cast, and is eliminable, do not count
610    // this as an eliminable cast.  We would prefer to eliminate those two
611    // casts first.
612    if (!isa<CastInst>(I->getOperand(0)) && I->hasOneUse())
613      ++NumCastsRemoved;
614
615    // Figure out the number of known-zero bits coming in.
616    return GetLeadingZeros(I->getOperand(0), TD);
617  }
618
619  // We can't extend or shrink something that has multiple uses: doing so would
620  // require duplicating the instruction in general, which isn't profitable.
621  if (!I->hasOneUse()) return -1;
622
623  int Tmp1, Tmp2;
624  unsigned Opc = I->getOpcode();
625  switch (Opc) {
626  case Instruction::And:
627    Tmp1 = CanEvaluateZExtd(I->getOperand(0), Ty, NumCastsRemoved, TD);
628    if (Tmp1 == -1) return -1;
629    Tmp2 = CanEvaluateZExtd(I->getOperand(1), Ty, NumCastsRemoved, TD);
630    if (Tmp2 == -1) return -1;
631    return std::max(Tmp1, Tmp2);
632  case Instruction::Or:
633  case Instruction::Xor:
634    Tmp1 = CanEvaluateZExtd(I->getOperand(0), Ty, NumCastsRemoved, TD);
635    if (Tmp1 == -1) return -1;
636    Tmp2 = CanEvaluateZExtd(I->getOperand(1), Ty, NumCastsRemoved, TD);
637    return std::min(Tmp1, Tmp2);
638
639  case Instruction::Add:
640  case Instruction::Sub:
641  case Instruction::Mul:
642    Tmp1 = CanEvaluateZExtd(I->getOperand(0), Ty, NumCastsRemoved, TD);
643    if (Tmp1 == -1) return -1;
644    Tmp2 = CanEvaluateZExtd(I->getOperand(1), Ty, NumCastsRemoved, TD);
645    if (Tmp2 == -1) return -1;
646    return 0; // TODO: Could be improved.
647
648  case Instruction::Shl:
649    Tmp1 = CanEvaluateZExtd(I->getOperand(0), Ty, NumCastsRemoved, TD);
650    if (Tmp1 == -1) return -1;
651
652    if (ConstantInt *CI = dyn_cast<ConstantInt>(I->getOperand(1)))
653      return Tmp1 - CI->getZExtValue();
654
655    // Variable shift, no known zext bits.
656    Tmp2 = CanEvaluateZExtd(I->getOperand(1), Ty, NumCastsRemoved, TD);
657    if (Tmp2 == -1) return -1;
658    return 0;
659
660  //case Instruction::LShr:
661  case Instruction::ZExt:
662    // zext(zext(x)) -> zext(x).  Since we're replacing it, it isn't eliminated.
663    Tmp1 = Ty->getScalarSizeInBits()-OrigTy->getScalarSizeInBits();
664    return GetLeadingZeros(I, TD)+Tmp1;
665
666  case Instruction::SExt:
667    // zext(sext(x)) -> sext(x) with no upper bits known.
668    return 0;
669  //case Instruction::Trunc: -> Could turn into AND.
670
671  case Instruction::Select:
672    Tmp1 = CanEvaluateZExtd(I->getOperand(1), Ty, NumCastsRemoved, TD);
673    if (Tmp1 == -1) return -1;
674    Tmp2 = CanEvaluateZExtd(I->getOperand(2), Ty, NumCastsRemoved, TD);
675    return std::min(Tmp1, Tmp2);
676
677  case Instruction::PHI: {
678    // We can change a phi if we can change all operands.  Note that we never
679    // get into trouble with cyclic PHIs here because we only consider
680    // instructions with a single use.
681    PHINode *PN = cast<PHINode>(I);
682    int Result = CanEvaluateZExtd(PN->getIncomingValue(0), Ty,
683                                  NumCastsRemoved, TD);
684    for (unsigned i = 1, e = PN->getNumIncomingValues(); i != e; ++i) {
685      if (Result == -1) return -1;
686      Tmp1 = CanEvaluateZExtd(PN->getIncomingValue(i), Ty, NumCastsRemoved, TD);
687      Result = std::min(Result, Tmp1);
688    }
689    return Result;
690  }
691  default:
692    // TODO: Can handle more cases here.
693    return -1;
694  }
695}
696
697Instruction *InstCombiner::visitZExt(ZExtInst &CI) {
698  // If one of the common conversion will work, do it.
699  if (Instruction *Result = commonCastTransforms(CI))
700    return Result;
701
702  // See if we can simplify any instructions used by the input whose sole
703  // purpose is to compute bits we don't care about.
704  if (SimplifyDemandedInstructionBits(CI))
705    return &CI;
706
707  Value *Src = CI.getOperand(0);
708  const Type *SrcTy = Src->getType(), *DestTy = CI.getType();
709
710  // Attempt to extend the entire input expression tree to the destination
711  // type.   Only do this if the dest type is a simple type, don't convert the
712  // expression tree to something weird like i93 unless the source is also
713  // strange.
714  if (isa<VectorType>(DestTy) || ShouldChangeType(SrcTy, DestTy)) {
715    unsigned NumCastsRemoved = 0;
716    int BitsZExt = CanEvaluateZExtd(Src, DestTy, NumCastsRemoved, TD);
717    if (BitsZExt == -1) return 0;
718
719    uint32_t SrcBitSize = SrcTy->getScalarSizeInBits();
720    uint32_t DestBitSize = DestTy->getScalarSizeInBits();
721
722    // If this is a zero-extension, we need to do an AND to maintain the clear
723    // top-part of the computation.  If we know the result will be zero
724    // extended enough already, we don't need the and.
725    if (NumCastsRemoved >= 1 ||
726        unsigned(BitsZExt) >= DestBitSize-SrcBitSize) {
727
728      // Okay, we can transform this!  Insert the new expression now.
729      DEBUG(dbgs() << "ICE: EvaluateInDifferentType converting expression type"
730            " to avoid zero extend: " << CI);
731      Value *Res = EvaluateInDifferentType(Src, DestTy, false);
732      assert(Res->getType() == DestTy);
733
734      // If the high bits are already filled with zeros, just replace this
735      // cast with the result.
736      if (unsigned(BitsZExt) >= DestBitSize-SrcBitSize ||
737          MaskedValueIsZero(Res, APInt::getHighBitsSet(DestBitSize,
738                                                       DestBitSize-SrcBitSize)))
739        return ReplaceInstUsesWith(CI, Res);
740
741      // We need to emit an AND to clear the high bits.
742      Constant *C = ConstantInt::get(CI.getContext(),
743                                 APInt::getLowBitsSet(DestBitSize, SrcBitSize));
744      return BinaryOperator::CreateAnd(Res, C);
745    }
746  }
747
748  // If this is a TRUNC followed by a ZEXT then we are dealing with integral
749  // types and if the sizes are just right we can convert this into a logical
750  // 'and' which will be much cheaper than the pair of casts.
751  if (TruncInst *CSrc = dyn_cast<TruncInst>(Src)) {   // A->B->C cast
752    // Get the sizes of the types involved.  We know that the intermediate type
753    // will be smaller than A or C, but don't know the relation between A and C.
754    Value *A = CSrc->getOperand(0);
755    unsigned SrcSize = A->getType()->getScalarSizeInBits();
756    unsigned MidSize = CSrc->getType()->getScalarSizeInBits();
757    unsigned DstSize = CI.getType()->getScalarSizeInBits();
758    // If we're actually extending zero bits, then if
759    // SrcSize <  DstSize: zext(a & mask)
760    // SrcSize == DstSize: a & mask
761    // SrcSize  > DstSize: trunc(a) & mask
762    if (SrcSize < DstSize) {
763      APInt AndValue(APInt::getLowBitsSet(SrcSize, MidSize));
764      Constant *AndConst = ConstantInt::get(A->getType(), AndValue);
765      Value *And = Builder->CreateAnd(A, AndConst, CSrc->getName()+".mask");
766      return new ZExtInst(And, CI.getType());
767    }
768
769    if (SrcSize == DstSize) {
770      APInt AndValue(APInt::getLowBitsSet(SrcSize, MidSize));
771      return BinaryOperator::CreateAnd(A, ConstantInt::get(A->getType(),
772                                                           AndValue));
773    }
774    if (SrcSize > DstSize) {
775      Value *Trunc = Builder->CreateTrunc(A, CI.getType(), "tmp");
776      APInt AndValue(APInt::getLowBitsSet(DstSize, MidSize));
777      return BinaryOperator::CreateAnd(Trunc,
778                                       ConstantInt::get(Trunc->getType(),
779                                                               AndValue));
780    }
781  }
782
783  if (ICmpInst *ICI = dyn_cast<ICmpInst>(Src))
784    return transformZExtICmp(ICI, CI);
785
786  BinaryOperator *SrcI = dyn_cast<BinaryOperator>(Src);
787  if (SrcI && SrcI->getOpcode() == Instruction::Or) {
788    // zext (or icmp, icmp) --> or (zext icmp), (zext icmp) if at least one
789    // of the (zext icmp) will be transformed.
790    ICmpInst *LHS = dyn_cast<ICmpInst>(SrcI->getOperand(0));
791    ICmpInst *RHS = dyn_cast<ICmpInst>(SrcI->getOperand(1));
792    if (LHS && RHS && LHS->hasOneUse() && RHS->hasOneUse() &&
793        (transformZExtICmp(LHS, CI, false) ||
794         transformZExtICmp(RHS, CI, false))) {
795      Value *LCast = Builder->CreateZExt(LHS, CI.getType(), LHS->getName());
796      Value *RCast = Builder->CreateZExt(RHS, CI.getType(), RHS->getName());
797      return BinaryOperator::Create(Instruction::Or, LCast, RCast);
798    }
799  }
800
801  // zext(trunc(t) & C) -> (t & zext(C)).
802  if (SrcI && SrcI->getOpcode() == Instruction::And && SrcI->hasOneUse())
803    if (ConstantInt *C = dyn_cast<ConstantInt>(SrcI->getOperand(1)))
804      if (TruncInst *TI = dyn_cast<TruncInst>(SrcI->getOperand(0))) {
805        Value *TI0 = TI->getOperand(0);
806        if (TI0->getType() == CI.getType())
807          return
808            BinaryOperator::CreateAnd(TI0,
809                                ConstantExpr::getZExt(C, CI.getType()));
810      }
811
812  // zext((trunc(t) & C) ^ C) -> ((t & zext(C)) ^ zext(C)).
813  if (SrcI && SrcI->getOpcode() == Instruction::Xor && SrcI->hasOneUse())
814    if (ConstantInt *C = dyn_cast<ConstantInt>(SrcI->getOperand(1)))
815      if (BinaryOperator *And = dyn_cast<BinaryOperator>(SrcI->getOperand(0)))
816        if (And->getOpcode() == Instruction::And && And->hasOneUse() &&
817            And->getOperand(1) == C)
818          if (TruncInst *TI = dyn_cast<TruncInst>(And->getOperand(0))) {
819            Value *TI0 = TI->getOperand(0);
820            if (TI0->getType() == CI.getType()) {
821              Constant *ZC = ConstantExpr::getZExt(C, CI.getType());
822              Value *NewAnd = Builder->CreateAnd(TI0, ZC, "tmp");
823              return BinaryOperator::CreateXor(NewAnd, ZC);
824            }
825          }
826
827  // zext (xor i1 X, true) to i32  --> xor (zext i1 X to i32), 1
828  Value *X;
829  if (SrcI && SrcI->hasOneUse() && SrcI->getType()->isInteger(1) &&
830      match(SrcI, m_Not(m_Value(X))) &&
831      (!X->hasOneUse() || !isa<CmpInst>(X))) {
832    Value *New = Builder->CreateZExt(X, CI.getType());
833    return BinaryOperator::CreateXor(New, ConstantInt::get(CI.getType(), 1));
834  }
835
836  return 0;
837}
838
839/// CanEvaluateSExtd - Return true if we can take the specified value
840/// and return it as type Ty without inserting any new casts and without
841/// changing the value of the common low bits.  This is used by code that tries
842/// to promote integer operations to a wider types will allow us to eliminate
843/// the extension.
844///
845/// This returns 0 if we can't do this or the number of sign bits that would be
846/// set if we can.  For example, CanEvaluateSExtd(i16 1, i64) would return 63,
847/// because the computation can be extended (to "i64 1") and the resulting
848/// computation has 63 equal sign bits.
849///
850/// This function works on both vectors and scalars.  For vectors, the result is
851/// the number of bits known sign extended in each element.
852///
853static unsigned CanEvaluateSExtd(Value *V, const Type *Ty,
854                                 unsigned &NumCastsRemoved, TargetData *TD) {
855  assert(V->getType()->getScalarSizeInBits() < Ty->getScalarSizeInBits() &&
856         "Can't sign extend type to a smaller type");
857  // If this is a constant, return the number of sign bits the extended version
858  // of it would have.
859  if (Constant *C = dyn_cast<Constant>(V))
860    return ComputeNumSignBits(ConstantExpr::getSExt(C, Ty), TD);
861
862  Instruction *I = dyn_cast<Instruction>(V);
863  if (!I) return 0;
864
865  // If this is a truncate from the destination type, we can trivially eliminate
866  // it, and this will remove a cast overall.
867  if (isa<TruncInst>(I) && I->getOperand(0)->getType() == Ty) {
868    // If the operand of the truncate is itself a cast, and is eliminable, do
869    // not count this as an eliminable cast.  We would prefer to eliminate those
870    // two casts first.
871    if (!isa<CastInst>(I->getOperand(0)) && I->hasOneUse())
872      ++NumCastsRemoved;
873    return ComputeNumSignBits(I->getOperand(0), TD);
874  }
875
876  // We can't extend or shrink something that has multiple uses: doing so would
877  // require duplicating the instruction in general, which isn't profitable.
878  if (!I->hasOneUse()) return 0;
879
880  const Type *OrigTy = V->getType();
881
882  unsigned Opc = I->getOpcode();
883  unsigned Tmp1, Tmp2;
884  switch (Opc) {
885  case Instruction::And:
886  case Instruction::Or:
887  case Instruction::Xor:
888    // These operators can all arbitrarily be extended or truncated.
889    Tmp1 = CanEvaluateSExtd(I->getOperand(0), Ty, NumCastsRemoved, TD);
890    if (Tmp1 == 0) return 0;
891    Tmp2 = CanEvaluateSExtd(I->getOperand(1), Ty, NumCastsRemoved, TD);
892    return std::min(Tmp1, Tmp2);
893  case Instruction::Add:
894  case Instruction::Sub:
895    // Add/Sub can have at most one carry/borrow bit.
896    Tmp1 = CanEvaluateSExtd(I->getOperand(0), Ty, NumCastsRemoved, TD);
897    if (Tmp1 == 0) return 0;
898    Tmp2 = CanEvaluateSExtd(I->getOperand(1), Ty, NumCastsRemoved, TD);
899    if (Tmp2 == 0) return 0;
900    return std::min(Tmp1, Tmp2)-1;
901  case Instruction::Mul:
902    // These operators can all arbitrarily be extended or truncated.
903    if (!CanEvaluateSExtd(I->getOperand(0), Ty, NumCastsRemoved, TD))
904      return 0;
905    if (!CanEvaluateSExtd(I->getOperand(1), Ty, NumCastsRemoved, TD))
906      return 0;
907    return 1; // IMPROVE?
908
909  //case Instruction::Shl:   TODO
910  //case Instruction::LShr:  TODO
911  //case Instruction::Trunc: TODO
912
913  case Instruction::SExt:
914  case Instruction::ZExt: {
915    // sext(sext(x)) -> sext(x)
916    // sext(zext(x)) -> zext(x)
917    // Note that replacing a cast does not reduce the number of casts in the
918    // input.
919    unsigned InSignBits = ComputeNumSignBits(I, TD);
920    unsigned ExtBits = Ty->getScalarSizeInBits()-OrigTy->getScalarSizeInBits();
921    // We'll end up extending it all the way out.
922    return InSignBits+ExtBits;
923  }
924  case Instruction::Select: {
925    SelectInst *SI = cast<SelectInst>(I);
926    Tmp1 = CanEvaluateSExtd(SI->getTrueValue(), Ty, NumCastsRemoved, TD);
927    if (Tmp1 == 0) return 0;
928    Tmp2 = CanEvaluateSExtd(SI->getFalseValue(), Ty, NumCastsRemoved,TD);
929    return std::min(Tmp1, Tmp2);
930  }
931  case Instruction::PHI: {
932    // We can change a phi if we can change all operands.  Note that we never
933    // get into trouble with cyclic PHIs here because we only consider
934    // instructions with a single use.
935    PHINode *PN = cast<PHINode>(I);
936    unsigned Result = ~0U;
937    for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
938      Result = std::min(Result,
939                        CanEvaluateSExtd(PN->getIncomingValue(i), Ty,
940                                         NumCastsRemoved, TD));
941      if (Result == 0) return 0;
942    }
943    return Result;
944  }
945  default:
946    // TODO: Can handle more cases here.
947    break;
948  }
949
950  return 0;
951}
952
953Instruction *InstCombiner::visitSExt(SExtInst &CI) {
954  if (Instruction *I = commonCastTransforms(CI))
955    return I;
956
957  // See if we can simplify any instructions used by the input whose sole
958  // purpose is to compute bits we don't care about.
959  if (SimplifyDemandedInstructionBits(CI))
960    return &CI;
961
962  Value *Src = CI.getOperand(0);
963  const Type *SrcTy = Src->getType(), *DestTy = CI.getType();
964
965  // Canonicalize sign-extend from i1 to a select.
966  if (Src->getType()->isInteger(1))
967    return SelectInst::Create(Src,
968                              Constant::getAllOnesValue(CI.getType()),
969                              Constant::getNullValue(CI.getType()));
970
971  // Attempt to extend the entire input expression tree to the destination
972  // type.   Only do this if the dest type is a simple type, don't convert the
973  // expression tree to something weird like i93 unless the source is also
974  // strange.
975  if (isa<VectorType>(DestTy) || ShouldChangeType(SrcTy, DestTy)) {
976    unsigned NumCastsRemoved = 0;
977    // Check to see if we can do this transformation, and if so, how many bits
978    // of the promoted expression will be known copies of the sign bit in the
979    // result.
980    unsigned NumBitsSExt = CanEvaluateSExtd(Src, DestTy, NumCastsRemoved, TD);
981    if (NumBitsSExt == 0)
982      return 0;
983
984    uint32_t SrcBitSize = SrcTy->getScalarSizeInBits();
985    uint32_t DestBitSize = DestTy->getScalarSizeInBits();
986
987    // Because this is a sign extension, we can always transform it by inserting
988    // two new shifts (to do the extension).  However, this is only profitable
989    // if we've eliminated two or more casts from the input.  If we know the
990    // result will be sign-extended enough to not require these shifts, we can
991    // always do the transformation.
992    if (NumCastsRemoved >= 2 ||
993        NumBitsSExt > DestBitSize-SrcBitSize) {
994      // Okay, we can transform this!  Insert the new expression now.
995      DEBUG(dbgs() << "ICE: EvaluateInDifferentType converting expression type"
996            " to avoid sign extend: " << CI);
997      Value *Res = EvaluateInDifferentType(Src, DestTy, true);
998      assert(Res->getType() == DestTy);
999
1000      // If the high bits are already filled with sign bit, just replace this
1001      // cast with the result.
1002      if (NumBitsSExt > DestBitSize - SrcBitSize ||
1003          ComputeNumSignBits(Res) > DestBitSize - SrcBitSize)
1004        return ReplaceInstUsesWith(CI, Res);
1005
1006      // We need to emit a cast to truncate, then a cast to sext.
1007      return new SExtInst(Builder->CreateTrunc(Res, Src->getType()), DestTy);
1008    }
1009  }
1010
1011  // If the input is a shl/ashr pair of a same constant, then this is a sign
1012  // extension from a smaller value.  If we could trust arbitrary bitwidth
1013  // integers, we could turn this into a truncate to the smaller bit and then
1014  // use a sext for the whole extension.  Since we don't, look deeper and check
1015  // for a truncate.  If the source and dest are the same type, eliminate the
1016  // trunc and extend and just do shifts.  For example, turn:
1017  //   %a = trunc i32 %i to i8
1018  //   %b = shl i8 %a, 6
1019  //   %c = ashr i8 %b, 6
1020  //   %d = sext i8 %c to i32
1021  // into:
1022  //   %a = shl i32 %i, 30
1023  //   %d = ashr i32 %a, 30
1024  Value *A = 0;
1025  // TODO: Eventually this could be subsumed by EvaluateInDifferentType.
1026  ConstantInt *BA = 0, *CA = 0;
1027  if (match(Src, m_AShr(m_Shl(m_Trunc(m_Value(A)), m_ConstantInt(BA)),
1028                        m_ConstantInt(CA))) &&
1029      BA == CA && A->getType() == CI.getType()) {
1030    unsigned MidSize = Src->getType()->getScalarSizeInBits();
1031    unsigned SrcDstSize = CI.getType()->getScalarSizeInBits();
1032    unsigned ShAmt = CA->getZExtValue()+SrcDstSize-MidSize;
1033    Constant *ShAmtV = ConstantInt::get(CI.getType(), ShAmt);
1034    A = Builder->CreateShl(A, ShAmtV, CI.getName());
1035    return BinaryOperator::CreateAShr(A, ShAmtV);
1036  }
1037
1038  return 0;
1039}
1040
1041
1042/// FitsInFPType - Return a Constant* for the specified FP constant if it fits
1043/// in the specified FP type without changing its value.
1044static Constant *FitsInFPType(ConstantFP *CFP, const fltSemantics &Sem) {
1045  bool losesInfo;
1046  APFloat F = CFP->getValueAPF();
1047  (void)F.convert(Sem, APFloat::rmNearestTiesToEven, &losesInfo);
1048  if (!losesInfo)
1049    return ConstantFP::get(CFP->getContext(), F);
1050  return 0;
1051}
1052
1053/// LookThroughFPExtensions - If this is an fp extension instruction, look
1054/// through it until we get the source value.
1055static Value *LookThroughFPExtensions(Value *V) {
1056  if (Instruction *I = dyn_cast<Instruction>(V))
1057    if (I->getOpcode() == Instruction::FPExt)
1058      return LookThroughFPExtensions(I->getOperand(0));
1059
1060  // If this value is a constant, return the constant in the smallest FP type
1061  // that can accurately represent it.  This allows us to turn
1062  // (float)((double)X+2.0) into x+2.0f.
1063  if (ConstantFP *CFP = dyn_cast<ConstantFP>(V)) {
1064    if (CFP->getType() == Type::getPPC_FP128Ty(V->getContext()))
1065      return V;  // No constant folding of this.
1066    // See if the value can be truncated to float and then reextended.
1067    if (Value *V = FitsInFPType(CFP, APFloat::IEEEsingle))
1068      return V;
1069    if (CFP->getType()->isDoubleTy())
1070      return V;  // Won't shrink.
1071    if (Value *V = FitsInFPType(CFP, APFloat::IEEEdouble))
1072      return V;
1073    // Don't try to shrink to various long double types.
1074  }
1075
1076  return V;
1077}
1078
1079Instruction *InstCombiner::visitFPTrunc(FPTruncInst &CI) {
1080  if (Instruction *I = commonCastTransforms(CI))
1081    return I;
1082
1083  // If we have fptrunc(fadd (fpextend x), (fpextend y)), where x and y are
1084  // smaller than the destination type, we can eliminate the truncate by doing
1085  // the add as the smaller type.  This applies to fadd/fsub/fmul/fdiv as well
1086  // as many builtins (sqrt, etc).
1087  BinaryOperator *OpI = dyn_cast<BinaryOperator>(CI.getOperand(0));
1088  if (OpI && OpI->hasOneUse()) {
1089    switch (OpI->getOpcode()) {
1090    default: break;
1091    case Instruction::FAdd:
1092    case Instruction::FSub:
1093    case Instruction::FMul:
1094    case Instruction::FDiv:
1095    case Instruction::FRem:
1096      const Type *SrcTy = OpI->getType();
1097      Value *LHSTrunc = LookThroughFPExtensions(OpI->getOperand(0));
1098      Value *RHSTrunc = LookThroughFPExtensions(OpI->getOperand(1));
1099      if (LHSTrunc->getType() != SrcTy &&
1100          RHSTrunc->getType() != SrcTy) {
1101        unsigned DstSize = CI.getType()->getScalarSizeInBits();
1102        // If the source types were both smaller than the destination type of
1103        // the cast, do this xform.
1104        if (LHSTrunc->getType()->getScalarSizeInBits() <= DstSize &&
1105            RHSTrunc->getType()->getScalarSizeInBits() <= DstSize) {
1106          LHSTrunc = Builder->CreateFPExt(LHSTrunc, CI.getType());
1107          RHSTrunc = Builder->CreateFPExt(RHSTrunc, CI.getType());
1108          return BinaryOperator::Create(OpI->getOpcode(), LHSTrunc, RHSTrunc);
1109        }
1110      }
1111      break;
1112    }
1113  }
1114  return 0;
1115}
1116
1117Instruction *InstCombiner::visitFPExt(CastInst &CI) {
1118  return commonCastTransforms(CI);
1119}
1120
1121Instruction *InstCombiner::visitFPToUI(FPToUIInst &FI) {
1122  Instruction *OpI = dyn_cast<Instruction>(FI.getOperand(0));
1123  if (OpI == 0)
1124    return commonCastTransforms(FI);
1125
1126  // fptoui(uitofp(X)) --> X
1127  // fptoui(sitofp(X)) --> X
1128  // This is safe if the intermediate type has enough bits in its mantissa to
1129  // accurately represent all values of X.  For example, do not do this with
1130  // i64->float->i64.  This is also safe for sitofp case, because any negative
1131  // 'X' value would cause an undefined result for the fptoui.
1132  if ((isa<UIToFPInst>(OpI) || isa<SIToFPInst>(OpI)) &&
1133      OpI->getOperand(0)->getType() == FI.getType() &&
1134      (int)FI.getType()->getScalarSizeInBits() < /*extra bit for sign */
1135                    OpI->getType()->getFPMantissaWidth())
1136    return ReplaceInstUsesWith(FI, OpI->getOperand(0));
1137
1138  return commonCastTransforms(FI);
1139}
1140
1141Instruction *InstCombiner::visitFPToSI(FPToSIInst &FI) {
1142  Instruction *OpI = dyn_cast<Instruction>(FI.getOperand(0));
1143  if (OpI == 0)
1144    return commonCastTransforms(FI);
1145
1146  // fptosi(sitofp(X)) --> X
1147  // fptosi(uitofp(X)) --> X
1148  // This is safe if the intermediate type has enough bits in its mantissa to
1149  // accurately represent all values of X.  For example, do not do this with
1150  // i64->float->i64.  This is also safe for sitofp case, because any negative
1151  // 'X' value would cause an undefined result for the fptoui.
1152  if ((isa<UIToFPInst>(OpI) || isa<SIToFPInst>(OpI)) &&
1153      OpI->getOperand(0)->getType() == FI.getType() &&
1154      (int)FI.getType()->getScalarSizeInBits() <=
1155                    OpI->getType()->getFPMantissaWidth())
1156    return ReplaceInstUsesWith(FI, OpI->getOperand(0));
1157
1158  return commonCastTransforms(FI);
1159}
1160
1161Instruction *InstCombiner::visitUIToFP(CastInst &CI) {
1162  return commonCastTransforms(CI);
1163}
1164
1165Instruction *InstCombiner::visitSIToFP(CastInst &CI) {
1166  return commonCastTransforms(CI);
1167}
1168
1169Instruction *InstCombiner::visitIntToPtr(IntToPtrInst &CI) {
1170  // If the source integer type is larger than the intptr_t type for
1171  // this target, do a trunc to the intptr_t type, then inttoptr of it.  This
1172  // allows the trunc to be exposed to other transforms.  Don't do this for
1173  // extending inttoptr's, because we don't know if the target sign or zero
1174  // extends to pointers.
1175  if (TD && CI.getOperand(0)->getType()->getScalarSizeInBits() >
1176      TD->getPointerSizeInBits()) {
1177    Value *P = Builder->CreateTrunc(CI.getOperand(0),
1178                                    TD->getIntPtrType(CI.getContext()), "tmp");
1179    return new IntToPtrInst(P, CI.getType());
1180  }
1181
1182  if (Instruction *I = commonCastTransforms(CI))
1183    return I;
1184
1185  return 0;
1186}
1187
1188/// @brief Implement the transforms for cast of pointer (bitcast/ptrtoint)
1189Instruction *InstCombiner::commonPointerCastTransforms(CastInst &CI) {
1190  Value *Src = CI.getOperand(0);
1191
1192  if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(Src)) {
1193    // If casting the result of a getelementptr instruction with no offset, turn
1194    // this into a cast of the original pointer!
1195    if (GEP->hasAllZeroIndices()) {
1196      // Changing the cast operand is usually not a good idea but it is safe
1197      // here because the pointer operand is being replaced with another
1198      // pointer operand so the opcode doesn't need to change.
1199      Worklist.Add(GEP);
1200      CI.setOperand(0, GEP->getOperand(0));
1201      return &CI;
1202    }
1203
1204    // If the GEP has a single use, and the base pointer is a bitcast, and the
1205    // GEP computes a constant offset, see if we can convert these three
1206    // instructions into fewer.  This typically happens with unions and other
1207    // non-type-safe code.
1208    if (TD && GEP->hasOneUse() && isa<BitCastInst>(GEP->getOperand(0)) &&
1209        GEP->hasAllConstantIndices()) {
1210      // We are guaranteed to get a constant from EmitGEPOffset.
1211      ConstantInt *OffsetV = cast<ConstantInt>(EmitGEPOffset(GEP));
1212      int64_t Offset = OffsetV->getSExtValue();
1213
1214      // Get the base pointer input of the bitcast, and the type it points to.
1215      Value *OrigBase = cast<BitCastInst>(GEP->getOperand(0))->getOperand(0);
1216      const Type *GEPIdxTy =
1217      cast<PointerType>(OrigBase->getType())->getElementType();
1218      SmallVector<Value*, 8> NewIndices;
1219      if (FindElementAtOffset(GEPIdxTy, Offset, NewIndices)) {
1220        // If we were able to index down into an element, create the GEP
1221        // and bitcast the result.  This eliminates one bitcast, potentially
1222        // two.
1223        Value *NGEP = cast<GEPOperator>(GEP)->isInBounds() ?
1224        Builder->CreateInBoundsGEP(OrigBase,
1225                                   NewIndices.begin(), NewIndices.end()) :
1226        Builder->CreateGEP(OrigBase, NewIndices.begin(), NewIndices.end());
1227        NGEP->takeName(GEP);
1228
1229        if (isa<BitCastInst>(CI))
1230          return new BitCastInst(NGEP, CI.getType());
1231        assert(isa<PtrToIntInst>(CI));
1232        return new PtrToIntInst(NGEP, CI.getType());
1233      }
1234    }
1235  }
1236
1237  return commonCastTransforms(CI);
1238}
1239
1240Instruction *InstCombiner::visitPtrToInt(PtrToIntInst &CI) {
1241  // If the destination integer type is smaller than the intptr_t type for
1242  // this target, do a ptrtoint to intptr_t then do a trunc.  This allows the
1243  // trunc to be exposed to other transforms.  Don't do this for extending
1244  // ptrtoint's, because we don't know if the target sign or zero extends its
1245  // pointers.
1246  if (TD &&
1247      CI.getType()->getScalarSizeInBits() < TD->getPointerSizeInBits()) {
1248    Value *P = Builder->CreatePtrToInt(CI.getOperand(0),
1249                                       TD->getIntPtrType(CI.getContext()),
1250                                       "tmp");
1251    return new TruncInst(P, CI.getType());
1252  }
1253
1254  return commonPointerCastTransforms(CI);
1255}
1256
1257Instruction *InstCombiner::visitBitCast(BitCastInst &CI) {
1258  // If the operands are integer typed then apply the integer transforms,
1259  // otherwise just apply the common ones.
1260  Value *Src = CI.getOperand(0);
1261  const Type *SrcTy = Src->getType();
1262  const Type *DestTy = CI.getType();
1263
1264  // Get rid of casts from one type to the same type. These are useless and can
1265  // be replaced by the operand.
1266  if (DestTy == Src->getType())
1267    return ReplaceInstUsesWith(CI, Src);
1268
1269  if (const PointerType *DstPTy = dyn_cast<PointerType>(DestTy)) {
1270    const PointerType *SrcPTy = cast<PointerType>(SrcTy);
1271    const Type *DstElTy = DstPTy->getElementType();
1272    const Type *SrcElTy = SrcPTy->getElementType();
1273
1274    // If the address spaces don't match, don't eliminate the bitcast, which is
1275    // required for changing types.
1276    if (SrcPTy->getAddressSpace() != DstPTy->getAddressSpace())
1277      return 0;
1278
1279    // If we are casting a alloca to a pointer to a type of the same
1280    // size, rewrite the allocation instruction to allocate the "right" type.
1281    // There is no need to modify malloc calls because it is their bitcast that
1282    // needs to be cleaned up.
1283    if (AllocaInst *AI = dyn_cast<AllocaInst>(Src))
1284      if (Instruction *V = PromoteCastOfAllocation(CI, *AI))
1285        return V;
1286
1287    // If the source and destination are pointers, and this cast is equivalent
1288    // to a getelementptr X, 0, 0, 0...  turn it into the appropriate gep.
1289    // This can enhance SROA and other transforms that want type-safe pointers.
1290    Constant *ZeroUInt =
1291      Constant::getNullValue(Type::getInt32Ty(CI.getContext()));
1292    unsigned NumZeros = 0;
1293    while (SrcElTy != DstElTy &&
1294           isa<CompositeType>(SrcElTy) && !isa<PointerType>(SrcElTy) &&
1295           SrcElTy->getNumContainedTypes() /* not "{}" */) {
1296      SrcElTy = cast<CompositeType>(SrcElTy)->getTypeAtIndex(ZeroUInt);
1297      ++NumZeros;
1298    }
1299
1300    // If we found a path from the src to dest, create the getelementptr now.
1301    if (SrcElTy == DstElTy) {
1302      SmallVector<Value*, 8> Idxs(NumZeros+1, ZeroUInt);
1303      return GetElementPtrInst::CreateInBounds(Src, Idxs.begin(), Idxs.end(),"",
1304                                               ((Instruction*)NULL));
1305    }
1306  }
1307
1308  if (const VectorType *DestVTy = dyn_cast<VectorType>(DestTy)) {
1309    if (DestVTy->getNumElements() == 1 && !isa<VectorType>(SrcTy)) {
1310      Value *Elem = Builder->CreateBitCast(Src, DestVTy->getElementType());
1311      return InsertElementInst::Create(UndefValue::get(DestTy), Elem,
1312                     Constant::getNullValue(Type::getInt32Ty(CI.getContext())));
1313      // FIXME: Canonicalize bitcast(insertelement) -> insertelement(bitcast)
1314    }
1315  }
1316
1317  if (const VectorType *SrcVTy = dyn_cast<VectorType>(SrcTy)) {
1318    if (SrcVTy->getNumElements() == 1 && !isa<VectorType>(DestTy)) {
1319      Value *Elem =
1320        Builder->CreateExtractElement(Src,
1321                   Constant::getNullValue(Type::getInt32Ty(CI.getContext())));
1322      return CastInst::Create(Instruction::BitCast, Elem, DestTy);
1323    }
1324  }
1325
1326  if (ShuffleVectorInst *SVI = dyn_cast<ShuffleVectorInst>(Src)) {
1327    // Okay, we have (bitcast (shuffle ..)).  Check to see if this is
1328    // a bitconvert to a vector with the same # elts.
1329    if (SVI->hasOneUse() && isa<VectorType>(DestTy) &&
1330        cast<VectorType>(DestTy)->getNumElements() ==
1331              SVI->getType()->getNumElements() &&
1332        SVI->getType()->getNumElements() ==
1333          cast<VectorType>(SVI->getOperand(0)->getType())->getNumElements()) {
1334      BitCastInst *Tmp;
1335      // If either of the operands is a cast from CI.getType(), then
1336      // evaluating the shuffle in the casted destination's type will allow
1337      // us to eliminate at least one cast.
1338      if (((Tmp = dyn_cast<BitCastInst>(SVI->getOperand(0))) &&
1339           Tmp->getOperand(0)->getType() == DestTy) ||
1340          ((Tmp = dyn_cast<BitCastInst>(SVI->getOperand(1))) &&
1341           Tmp->getOperand(0)->getType() == DestTy)) {
1342        Value *LHS = Builder->CreateBitCast(SVI->getOperand(0), DestTy);
1343        Value *RHS = Builder->CreateBitCast(SVI->getOperand(1), DestTy);
1344        // Return a new shuffle vector.  Use the same element ID's, as we
1345        // know the vector types match #elts.
1346        return new ShuffleVectorInst(LHS, RHS, SVI->getOperand(2));
1347      }
1348    }
1349  }
1350
1351  if (isa<PointerType>(SrcTy))
1352    return commonPointerCastTransforms(CI);
1353  return commonCastTransforms(CI);
1354}
1355