InstCombineCasts.cpp revision 9e390ddf91dcf7baa540330e1b9a73a0a177a2a6
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/// CanEvaluateZExtd - Determine if the specified value can be computed in the
579/// specified wider type and produce the same low bits.  If not, return -1.  If
580/// it is possible, return the number of high bits that are known to be zero in
581/// the promoted value.
582static bool CanEvaluateZExtd(Value *V, const Type *Ty, const TargetData *TD) {
583  if (isa<Constant>(V))
584    return true;
585
586  Instruction *I = dyn_cast<Instruction>(V);
587  if (!I) return false;
588
589  // If the input is a truncate from the destination type, we can trivially
590  // eliminate it.
591  if (isa<TruncInst>(I) && I->getOperand(0)->getType() == Ty)
592    return true;
593
594  // We can't extend or shrink something that has multiple uses: doing so would
595  // require duplicating the instruction in general, which isn't profitable.
596  if (!I->hasOneUse()) return false;
597
598  unsigned Opc = I->getOpcode();
599  switch (Opc) {
600  case Instruction::And:
601  case Instruction::Or:
602  case Instruction::Xor:
603  case Instruction::Add:
604  case Instruction::Sub:
605  case Instruction::Mul:
606  case Instruction::Shl:
607    return CanEvaluateZExtd(I->getOperand(0), Ty, TD) &&
608           CanEvaluateZExtd(I->getOperand(1), Ty, TD);
609
610  //case Instruction::LShr:
611  case Instruction::ZExt: // zext(zext(x)) -> zext(x).
612  case Instruction::SExt: // zext(sext(x)) -> sext(x).
613    return true;
614
615  case Instruction::Select:
616    return CanEvaluateZExtd(I->getOperand(1), Ty, TD) &&
617           CanEvaluateZExtd(I->getOperand(2), Ty, TD);
618
619  case Instruction::PHI: {
620    // We can change a phi if we can change all operands.  Note that we never
621    // get into trouble with cyclic PHIs here because we only consider
622    // instructions with a single use.
623    PHINode *PN = cast<PHINode>(I);
624    if (!CanEvaluateZExtd(PN->getIncomingValue(0), Ty, TD)) return false;
625    for (unsigned i = 1, e = PN->getNumIncomingValues(); i != e; ++i)
626      if (!CanEvaluateZExtd(PN->getIncomingValue(0), Ty, TD)) return false;
627    return true;
628  }
629  default:
630    // TODO: Can handle more cases here.
631    return false;
632  }
633}
634
635Instruction *InstCombiner::visitZExt(ZExtInst &CI) {
636  // If this zero extend is only used by a truncate, let the truncate by
637  // eliminated before we try to optimize this zext.
638  if (CI.hasOneUse() && isa<TruncInst>(CI.use_back()))
639    return 0;
640
641  // If one of the common conversion will work, do it.
642  if (Instruction *Result = commonCastTransforms(CI))
643    return Result;
644
645  // See if we can simplify any instructions used by the input whose sole
646  // purpose is to compute bits we don't care about.
647  if (SimplifyDemandedInstructionBits(CI))
648    return &CI;
649
650  Value *Src = CI.getOperand(0);
651  const Type *SrcTy = Src->getType(), *DestTy = CI.getType();
652
653  // Attempt to extend the entire input expression tree to the destination
654  // type.   Only do this if the dest type is a simple type, don't convert the
655  // expression tree to something weird like i93 unless the source is also
656  // strange.
657  if ((isa<VectorType>(DestTy) || ShouldChangeType(SrcTy, DestTy)) &&
658      CanEvaluateZExtd(Src, DestTy, TD)) {
659    // Okay, we can transform this!  Insert the new expression now.
660    DEBUG(dbgs() << "ICE: EvaluateInDifferentType converting expression type"
661          " to avoid zero extend: " << CI);
662    Value *Res = EvaluateInDifferentType(Src, DestTy, false);
663    assert(Res->getType() == DestTy);
664
665    // If the high bits are already filled with zeros, just replace this
666    // cast with the result.
667    uint32_t SrcBitSize = SrcTy->getScalarSizeInBits();
668    uint32_t DestBitSize = DestTy->getScalarSizeInBits();
669    if (MaskedValueIsZero(Res, APInt::getHighBitsSet(DestBitSize,
670                                                     DestBitSize-SrcBitSize)))
671      return ReplaceInstUsesWith(CI, Res);
672
673    // We need to emit an AND to clear the high bits.
674    Constant *C = ConstantInt::get(CI.getContext(),
675                               APInt::getLowBitsSet(DestBitSize, SrcBitSize));
676    return BinaryOperator::CreateAnd(Res, C);
677  }
678
679  // If this is a TRUNC followed by a ZEXT then we are dealing with integral
680  // types and if the sizes are just right we can convert this into a logical
681  // 'and' which will be much cheaper than the pair of casts.
682  if (TruncInst *CSrc = dyn_cast<TruncInst>(Src)) {   // A->B->C cast
683    // Get the sizes of the types involved.  We know that the intermediate type
684    // will be smaller than A or C, but don't know the relation between A and C.
685    Value *A = CSrc->getOperand(0);
686    unsigned SrcSize = A->getType()->getScalarSizeInBits();
687    unsigned MidSize = CSrc->getType()->getScalarSizeInBits();
688    unsigned DstSize = CI.getType()->getScalarSizeInBits();
689    // If we're actually extending zero bits, then if
690    // SrcSize <  DstSize: zext(a & mask)
691    // SrcSize == DstSize: a & mask
692    // SrcSize  > DstSize: trunc(a) & mask
693    if (SrcSize < DstSize) {
694      APInt AndValue(APInt::getLowBitsSet(SrcSize, MidSize));
695      Constant *AndConst = ConstantInt::get(A->getType(), AndValue);
696      Value *And = Builder->CreateAnd(A, AndConst, CSrc->getName()+".mask");
697      return new ZExtInst(And, CI.getType());
698    }
699
700    if (SrcSize == DstSize) {
701      APInt AndValue(APInt::getLowBitsSet(SrcSize, MidSize));
702      return BinaryOperator::CreateAnd(A, ConstantInt::get(A->getType(),
703                                                           AndValue));
704    }
705    if (SrcSize > DstSize) {
706      Value *Trunc = Builder->CreateTrunc(A, CI.getType(), "tmp");
707      APInt AndValue(APInt::getLowBitsSet(DstSize, MidSize));
708      return BinaryOperator::CreateAnd(Trunc,
709                                       ConstantInt::get(Trunc->getType(),
710                                                               AndValue));
711    }
712  }
713
714  if (ICmpInst *ICI = dyn_cast<ICmpInst>(Src))
715    return transformZExtICmp(ICI, CI);
716
717  BinaryOperator *SrcI = dyn_cast<BinaryOperator>(Src);
718  if (SrcI && SrcI->getOpcode() == Instruction::Or) {
719    // zext (or icmp, icmp) --> or (zext icmp), (zext icmp) if at least one
720    // of the (zext icmp) will be transformed.
721    ICmpInst *LHS = dyn_cast<ICmpInst>(SrcI->getOperand(0));
722    ICmpInst *RHS = dyn_cast<ICmpInst>(SrcI->getOperand(1));
723    if (LHS && RHS && LHS->hasOneUse() && RHS->hasOneUse() &&
724        (transformZExtICmp(LHS, CI, false) ||
725         transformZExtICmp(RHS, CI, false))) {
726      Value *LCast = Builder->CreateZExt(LHS, CI.getType(), LHS->getName());
727      Value *RCast = Builder->CreateZExt(RHS, CI.getType(), RHS->getName());
728      return BinaryOperator::Create(Instruction::Or, LCast, RCast);
729    }
730  }
731
732  // zext(trunc(t) & C) -> (t & zext(C)).
733  if (SrcI && SrcI->getOpcode() == Instruction::And && SrcI->hasOneUse())
734    if (ConstantInt *C = dyn_cast<ConstantInt>(SrcI->getOperand(1)))
735      if (TruncInst *TI = dyn_cast<TruncInst>(SrcI->getOperand(0))) {
736        Value *TI0 = TI->getOperand(0);
737        if (TI0->getType() == CI.getType())
738          return
739            BinaryOperator::CreateAnd(TI0,
740                                ConstantExpr::getZExt(C, CI.getType()));
741      }
742
743  // zext((trunc(t) & C) ^ C) -> ((t & zext(C)) ^ zext(C)).
744  if (SrcI && SrcI->getOpcode() == Instruction::Xor && SrcI->hasOneUse())
745    if (ConstantInt *C = dyn_cast<ConstantInt>(SrcI->getOperand(1)))
746      if (BinaryOperator *And = dyn_cast<BinaryOperator>(SrcI->getOperand(0)))
747        if (And->getOpcode() == Instruction::And && And->hasOneUse() &&
748            And->getOperand(1) == C)
749          if (TruncInst *TI = dyn_cast<TruncInst>(And->getOperand(0))) {
750            Value *TI0 = TI->getOperand(0);
751            if (TI0->getType() == CI.getType()) {
752              Constant *ZC = ConstantExpr::getZExt(C, CI.getType());
753              Value *NewAnd = Builder->CreateAnd(TI0, ZC, "tmp");
754              return BinaryOperator::CreateXor(NewAnd, ZC);
755            }
756          }
757
758  // zext (xor i1 X, true) to i32  --> xor (zext i1 X to i32), 1
759  Value *X;
760  if (SrcI && SrcI->hasOneUse() && SrcI->getType()->isInteger(1) &&
761      match(SrcI, m_Not(m_Value(X))) &&
762      (!X->hasOneUse() || !isa<CmpInst>(X))) {
763    Value *New = Builder->CreateZExt(X, CI.getType());
764    return BinaryOperator::CreateXor(New, ConstantInt::get(CI.getType(), 1));
765  }
766
767  return 0;
768}
769
770/// CanEvaluateSExtd - Return true if we can take the specified value
771/// and return it as type Ty without inserting any new casts and without
772/// changing the value of the common low bits.  This is used by code that tries
773/// to promote integer operations to a wider types will allow us to eliminate
774/// the extension.
775///
776/// This returns 0 if we can't do this or the number of sign bits that would be
777/// set if we can.  For example, CanEvaluateSExtd(i16 1, i64) would return 63,
778/// because the computation can be extended (to "i64 1") and the resulting
779/// computation has 63 equal sign bits.
780///
781/// This function works on both vectors and scalars.  For vectors, the result is
782/// the number of bits known sign extended in each element.
783///
784static unsigned CanEvaluateSExtd(Value *V, const Type *Ty,
785                                 unsigned &NumCastsRemoved, TargetData *TD) {
786  assert(V->getType()->getScalarSizeInBits() < Ty->getScalarSizeInBits() &&
787         "Can't sign extend type to a smaller type");
788  // If this is a constant, return the number of sign bits the extended version
789  // of it would have.
790  if (Constant *C = dyn_cast<Constant>(V))
791    return ComputeNumSignBits(ConstantExpr::getSExt(C, Ty), TD);
792
793  Instruction *I = dyn_cast<Instruction>(V);
794  if (!I) return 0;
795
796  // If this is a truncate from the destination type, we can trivially eliminate
797  // it, and this will remove a cast overall.
798  if (isa<TruncInst>(I) && I->getOperand(0)->getType() == Ty) {
799    // If the operand of the truncate is itself a cast, and is eliminable, do
800    // not count this as an eliminable cast.  We would prefer to eliminate those
801    // two casts first.
802    if (!isa<CastInst>(I->getOperand(0)) && I->hasOneUse())
803      ++NumCastsRemoved;
804    return ComputeNumSignBits(I->getOperand(0), TD);
805  }
806
807  // We can't extend or shrink something that has multiple uses: doing so would
808  // require duplicating the instruction in general, which isn't profitable.
809  if (!I->hasOneUse()) return 0;
810
811  const Type *OrigTy = V->getType();
812
813  unsigned Opc = I->getOpcode();
814  unsigned Tmp1, Tmp2;
815  switch (Opc) {
816  case Instruction::And:
817  case Instruction::Or:
818  case Instruction::Xor:
819    // These operators can all arbitrarily be extended or truncated.
820    Tmp1 = CanEvaluateSExtd(I->getOperand(0), Ty, NumCastsRemoved, TD);
821    if (Tmp1 == 0) return 0;
822    Tmp2 = CanEvaluateSExtd(I->getOperand(1), Ty, NumCastsRemoved, TD);
823    return std::min(Tmp1, Tmp2);
824  case Instruction::Add:
825  case Instruction::Sub:
826    // Add/Sub can have at most one carry/borrow bit.
827    Tmp1 = CanEvaluateSExtd(I->getOperand(0), Ty, NumCastsRemoved, TD);
828    if (Tmp1 == 0) return 0;
829    Tmp2 = CanEvaluateSExtd(I->getOperand(1), Ty, NumCastsRemoved, TD);
830    if (Tmp2 == 0) return 0;
831    return std::min(Tmp1, Tmp2)-1;
832  case Instruction::Mul:
833    // These operators can all arbitrarily be extended or truncated.
834    if (!CanEvaluateSExtd(I->getOperand(0), Ty, NumCastsRemoved, TD))
835      return 0;
836    if (!CanEvaluateSExtd(I->getOperand(1), Ty, NumCastsRemoved, TD))
837      return 0;
838    return 1; // IMPROVE?
839
840  //case Instruction::Shl:   TODO
841  //case Instruction::LShr:  TODO
842  //case Instruction::Trunc: TODO
843
844  case Instruction::SExt:
845  case Instruction::ZExt: {
846    // sext(sext(x)) -> sext(x)
847    // sext(zext(x)) -> zext(x)
848    // Note that replacing a cast does not reduce the number of casts in the
849    // input.
850    unsigned InSignBits = ComputeNumSignBits(I, TD);
851    unsigned ExtBits = Ty->getScalarSizeInBits()-OrigTy->getScalarSizeInBits();
852    // We'll end up extending it all the way out.
853    return InSignBits+ExtBits;
854  }
855  case Instruction::Select: {
856    SelectInst *SI = cast<SelectInst>(I);
857    Tmp1 = CanEvaluateSExtd(SI->getTrueValue(), Ty, NumCastsRemoved, TD);
858    if (Tmp1 == 0) return 0;
859    Tmp2 = CanEvaluateSExtd(SI->getFalseValue(), Ty, NumCastsRemoved,TD);
860    return std::min(Tmp1, Tmp2);
861  }
862  case Instruction::PHI: {
863    // We can change a phi if we can change all operands.  Note that we never
864    // get into trouble with cyclic PHIs here because we only consider
865    // instructions with a single use.
866    PHINode *PN = cast<PHINode>(I);
867    unsigned Result = ~0U;
868    for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
869      Result = std::min(Result,
870                        CanEvaluateSExtd(PN->getIncomingValue(i), Ty,
871                                         NumCastsRemoved, TD));
872      if (Result == 0) return 0;
873    }
874    return Result;
875  }
876  default:
877    // TODO: Can handle more cases here.
878    break;
879  }
880
881  return 0;
882}
883
884Instruction *InstCombiner::visitSExt(SExtInst &CI) {
885  // If this sign extend is only used by a truncate, let the truncate by
886  // eliminated before we try to optimize this zext.
887  if (CI.hasOneUse() && isa<TruncInst>(CI.use_back()))
888    return 0;
889
890  if (Instruction *I = commonCastTransforms(CI))
891    return I;
892
893  // See if we can simplify any instructions used by the input whose sole
894  // purpose is to compute bits we don't care about.
895  if (SimplifyDemandedInstructionBits(CI))
896    return &CI;
897
898  Value *Src = CI.getOperand(0);
899  const Type *SrcTy = Src->getType(), *DestTy = CI.getType();
900
901  // Canonicalize sign-extend from i1 to a select.
902  if (Src->getType()->isInteger(1))
903    return SelectInst::Create(Src,
904                              Constant::getAllOnesValue(CI.getType()),
905                              Constant::getNullValue(CI.getType()));
906
907  // Attempt to extend the entire input expression tree to the destination
908  // type.   Only do this if the dest type is a simple type, don't convert the
909  // expression tree to something weird like i93 unless the source is also
910  // strange.
911  if (isa<VectorType>(DestTy) || ShouldChangeType(SrcTy, DestTy)) {
912    unsigned NumCastsRemoved = 0;
913    // Check to see if we can do this transformation, and if so, how many bits
914    // of the promoted expression will be known copies of the sign bit in the
915    // result.
916    unsigned NumBitsSExt = CanEvaluateSExtd(Src, DestTy, NumCastsRemoved, TD);
917    if (NumBitsSExt == 0)
918      return 0;
919
920    uint32_t SrcBitSize = SrcTy->getScalarSizeInBits();
921    uint32_t DestBitSize = DestTy->getScalarSizeInBits();
922
923    // Because this is a sign extension, we can always transform it by inserting
924    // two new shifts (to do the extension).  However, this is only profitable
925    // if we've eliminated two or more casts from the input.  If we know the
926    // result will be sign-extended enough to not require these shifts, we can
927    // always do the transformation.
928    if (NumCastsRemoved >= 2 ||
929        NumBitsSExt > DestBitSize-SrcBitSize) {
930      // Okay, we can transform this!  Insert the new expression now.
931      DEBUG(dbgs() << "ICE: EvaluateInDifferentType converting expression type"
932            " to avoid sign extend: " << CI);
933      Value *Res = EvaluateInDifferentType(Src, DestTy, true);
934      assert(Res->getType() == DestTy);
935
936      // If the high bits are already filled with sign bit, just replace this
937      // cast with the result.
938      if (NumBitsSExt > DestBitSize - SrcBitSize ||
939          ComputeNumSignBits(Res) > DestBitSize - SrcBitSize)
940        return ReplaceInstUsesWith(CI, Res);
941
942      // We need to emit a cast to truncate, then a cast to sext.
943      return new SExtInst(Builder->CreateTrunc(Res, Src->getType()), DestTy);
944    }
945  }
946
947  // If the input is a shl/ashr pair of a same constant, then this is a sign
948  // extension from a smaller value.  If we could trust arbitrary bitwidth
949  // integers, we could turn this into a truncate to the smaller bit and then
950  // use a sext for the whole extension.  Since we don't, look deeper and check
951  // for a truncate.  If the source and dest are the same type, eliminate the
952  // trunc and extend and just do shifts.  For example, turn:
953  //   %a = trunc i32 %i to i8
954  //   %b = shl i8 %a, 6
955  //   %c = ashr i8 %b, 6
956  //   %d = sext i8 %c to i32
957  // into:
958  //   %a = shl i32 %i, 30
959  //   %d = ashr i32 %a, 30
960  Value *A = 0;
961  // TODO: Eventually this could be subsumed by EvaluateInDifferentType.
962  ConstantInt *BA = 0, *CA = 0;
963  if (match(Src, m_AShr(m_Shl(m_Trunc(m_Value(A)), m_ConstantInt(BA)),
964                        m_ConstantInt(CA))) &&
965      BA == CA && A->getType() == CI.getType()) {
966    unsigned MidSize = Src->getType()->getScalarSizeInBits();
967    unsigned SrcDstSize = CI.getType()->getScalarSizeInBits();
968    unsigned ShAmt = CA->getZExtValue()+SrcDstSize-MidSize;
969    Constant *ShAmtV = ConstantInt::get(CI.getType(), ShAmt);
970    A = Builder->CreateShl(A, ShAmtV, CI.getName());
971    return BinaryOperator::CreateAShr(A, ShAmtV);
972  }
973
974  return 0;
975}
976
977
978/// FitsInFPType - Return a Constant* for the specified FP constant if it fits
979/// in the specified FP type without changing its value.
980static Constant *FitsInFPType(ConstantFP *CFP, const fltSemantics &Sem) {
981  bool losesInfo;
982  APFloat F = CFP->getValueAPF();
983  (void)F.convert(Sem, APFloat::rmNearestTiesToEven, &losesInfo);
984  if (!losesInfo)
985    return ConstantFP::get(CFP->getContext(), F);
986  return 0;
987}
988
989/// LookThroughFPExtensions - If this is an fp extension instruction, look
990/// through it until we get the source value.
991static Value *LookThroughFPExtensions(Value *V) {
992  if (Instruction *I = dyn_cast<Instruction>(V))
993    if (I->getOpcode() == Instruction::FPExt)
994      return LookThroughFPExtensions(I->getOperand(0));
995
996  // If this value is a constant, return the constant in the smallest FP type
997  // that can accurately represent it.  This allows us to turn
998  // (float)((double)X+2.0) into x+2.0f.
999  if (ConstantFP *CFP = dyn_cast<ConstantFP>(V)) {
1000    if (CFP->getType() == Type::getPPC_FP128Ty(V->getContext()))
1001      return V;  // No constant folding of this.
1002    // See if the value can be truncated to float and then reextended.
1003    if (Value *V = FitsInFPType(CFP, APFloat::IEEEsingle))
1004      return V;
1005    if (CFP->getType()->isDoubleTy())
1006      return V;  // Won't shrink.
1007    if (Value *V = FitsInFPType(CFP, APFloat::IEEEdouble))
1008      return V;
1009    // Don't try to shrink to various long double types.
1010  }
1011
1012  return V;
1013}
1014
1015Instruction *InstCombiner::visitFPTrunc(FPTruncInst &CI) {
1016  if (Instruction *I = commonCastTransforms(CI))
1017    return I;
1018
1019  // If we have fptrunc(fadd (fpextend x), (fpextend y)), where x and y are
1020  // smaller than the destination type, we can eliminate the truncate by doing
1021  // the add as the smaller type.  This applies to fadd/fsub/fmul/fdiv as well
1022  // as many builtins (sqrt, etc).
1023  BinaryOperator *OpI = dyn_cast<BinaryOperator>(CI.getOperand(0));
1024  if (OpI && OpI->hasOneUse()) {
1025    switch (OpI->getOpcode()) {
1026    default: break;
1027    case Instruction::FAdd:
1028    case Instruction::FSub:
1029    case Instruction::FMul:
1030    case Instruction::FDiv:
1031    case Instruction::FRem:
1032      const Type *SrcTy = OpI->getType();
1033      Value *LHSTrunc = LookThroughFPExtensions(OpI->getOperand(0));
1034      Value *RHSTrunc = LookThroughFPExtensions(OpI->getOperand(1));
1035      if (LHSTrunc->getType() != SrcTy &&
1036          RHSTrunc->getType() != SrcTy) {
1037        unsigned DstSize = CI.getType()->getScalarSizeInBits();
1038        // If the source types were both smaller than the destination type of
1039        // the cast, do this xform.
1040        if (LHSTrunc->getType()->getScalarSizeInBits() <= DstSize &&
1041            RHSTrunc->getType()->getScalarSizeInBits() <= DstSize) {
1042          LHSTrunc = Builder->CreateFPExt(LHSTrunc, CI.getType());
1043          RHSTrunc = Builder->CreateFPExt(RHSTrunc, CI.getType());
1044          return BinaryOperator::Create(OpI->getOpcode(), LHSTrunc, RHSTrunc);
1045        }
1046      }
1047      break;
1048    }
1049  }
1050  return 0;
1051}
1052
1053Instruction *InstCombiner::visitFPExt(CastInst &CI) {
1054  return commonCastTransforms(CI);
1055}
1056
1057Instruction *InstCombiner::visitFPToUI(FPToUIInst &FI) {
1058  Instruction *OpI = dyn_cast<Instruction>(FI.getOperand(0));
1059  if (OpI == 0)
1060    return commonCastTransforms(FI);
1061
1062  // fptoui(uitofp(X)) --> X
1063  // fptoui(sitofp(X)) --> X
1064  // This is safe if the intermediate type has enough bits in its mantissa to
1065  // accurately represent all values of X.  For example, do not do this with
1066  // i64->float->i64.  This is also safe for sitofp case, because any negative
1067  // 'X' value would cause an undefined result for the fptoui.
1068  if ((isa<UIToFPInst>(OpI) || isa<SIToFPInst>(OpI)) &&
1069      OpI->getOperand(0)->getType() == FI.getType() &&
1070      (int)FI.getType()->getScalarSizeInBits() < /*extra bit for sign */
1071                    OpI->getType()->getFPMantissaWidth())
1072    return ReplaceInstUsesWith(FI, OpI->getOperand(0));
1073
1074  return commonCastTransforms(FI);
1075}
1076
1077Instruction *InstCombiner::visitFPToSI(FPToSIInst &FI) {
1078  Instruction *OpI = dyn_cast<Instruction>(FI.getOperand(0));
1079  if (OpI == 0)
1080    return commonCastTransforms(FI);
1081
1082  // fptosi(sitofp(X)) --> X
1083  // fptosi(uitofp(X)) --> X
1084  // This is safe if the intermediate type has enough bits in its mantissa to
1085  // accurately represent all values of X.  For example, do not do this with
1086  // i64->float->i64.  This is also safe for sitofp case, because any negative
1087  // 'X' value would cause an undefined result for the fptoui.
1088  if ((isa<UIToFPInst>(OpI) || isa<SIToFPInst>(OpI)) &&
1089      OpI->getOperand(0)->getType() == FI.getType() &&
1090      (int)FI.getType()->getScalarSizeInBits() <=
1091                    OpI->getType()->getFPMantissaWidth())
1092    return ReplaceInstUsesWith(FI, OpI->getOperand(0));
1093
1094  return commonCastTransforms(FI);
1095}
1096
1097Instruction *InstCombiner::visitUIToFP(CastInst &CI) {
1098  return commonCastTransforms(CI);
1099}
1100
1101Instruction *InstCombiner::visitSIToFP(CastInst &CI) {
1102  return commonCastTransforms(CI);
1103}
1104
1105Instruction *InstCombiner::visitIntToPtr(IntToPtrInst &CI) {
1106  // If the source integer type is larger than the intptr_t type for
1107  // this target, do a trunc to the intptr_t type, then inttoptr of it.  This
1108  // allows the trunc to be exposed to other transforms.  Don't do this for
1109  // extending inttoptr's, because we don't know if the target sign or zero
1110  // extends to pointers.
1111  if (TD && CI.getOperand(0)->getType()->getScalarSizeInBits() >
1112      TD->getPointerSizeInBits()) {
1113    Value *P = Builder->CreateTrunc(CI.getOperand(0),
1114                                    TD->getIntPtrType(CI.getContext()), "tmp");
1115    return new IntToPtrInst(P, CI.getType());
1116  }
1117
1118  if (Instruction *I = commonCastTransforms(CI))
1119    return I;
1120
1121  return 0;
1122}
1123
1124/// @brief Implement the transforms for cast of pointer (bitcast/ptrtoint)
1125Instruction *InstCombiner::commonPointerCastTransforms(CastInst &CI) {
1126  Value *Src = CI.getOperand(0);
1127
1128  if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(Src)) {
1129    // If casting the result of a getelementptr instruction with no offset, turn
1130    // this into a cast of the original pointer!
1131    if (GEP->hasAllZeroIndices()) {
1132      // Changing the cast operand is usually not a good idea but it is safe
1133      // here because the pointer operand is being replaced with another
1134      // pointer operand so the opcode doesn't need to change.
1135      Worklist.Add(GEP);
1136      CI.setOperand(0, GEP->getOperand(0));
1137      return &CI;
1138    }
1139
1140    // If the GEP has a single use, and the base pointer is a bitcast, and the
1141    // GEP computes a constant offset, see if we can convert these three
1142    // instructions into fewer.  This typically happens with unions and other
1143    // non-type-safe code.
1144    if (TD && GEP->hasOneUse() && isa<BitCastInst>(GEP->getOperand(0)) &&
1145        GEP->hasAllConstantIndices()) {
1146      // We are guaranteed to get a constant from EmitGEPOffset.
1147      ConstantInt *OffsetV = cast<ConstantInt>(EmitGEPOffset(GEP));
1148      int64_t Offset = OffsetV->getSExtValue();
1149
1150      // Get the base pointer input of the bitcast, and the type it points to.
1151      Value *OrigBase = cast<BitCastInst>(GEP->getOperand(0))->getOperand(0);
1152      const Type *GEPIdxTy =
1153      cast<PointerType>(OrigBase->getType())->getElementType();
1154      SmallVector<Value*, 8> NewIndices;
1155      if (FindElementAtOffset(GEPIdxTy, Offset, NewIndices)) {
1156        // If we were able to index down into an element, create the GEP
1157        // and bitcast the result.  This eliminates one bitcast, potentially
1158        // two.
1159        Value *NGEP = cast<GEPOperator>(GEP)->isInBounds() ?
1160        Builder->CreateInBoundsGEP(OrigBase,
1161                                   NewIndices.begin(), NewIndices.end()) :
1162        Builder->CreateGEP(OrigBase, NewIndices.begin(), NewIndices.end());
1163        NGEP->takeName(GEP);
1164
1165        if (isa<BitCastInst>(CI))
1166          return new BitCastInst(NGEP, CI.getType());
1167        assert(isa<PtrToIntInst>(CI));
1168        return new PtrToIntInst(NGEP, CI.getType());
1169      }
1170    }
1171  }
1172
1173  return commonCastTransforms(CI);
1174}
1175
1176Instruction *InstCombiner::visitPtrToInt(PtrToIntInst &CI) {
1177  // If the destination integer type is smaller than the intptr_t type for
1178  // this target, do a ptrtoint to intptr_t then do a trunc.  This allows the
1179  // trunc to be exposed to other transforms.  Don't do this for extending
1180  // ptrtoint's, because we don't know if the target sign or zero extends its
1181  // pointers.
1182  if (TD &&
1183      CI.getType()->getScalarSizeInBits() < TD->getPointerSizeInBits()) {
1184    Value *P = Builder->CreatePtrToInt(CI.getOperand(0),
1185                                       TD->getIntPtrType(CI.getContext()),
1186                                       "tmp");
1187    return new TruncInst(P, CI.getType());
1188  }
1189
1190  return commonPointerCastTransforms(CI);
1191}
1192
1193Instruction *InstCombiner::visitBitCast(BitCastInst &CI) {
1194  // If the operands are integer typed then apply the integer transforms,
1195  // otherwise just apply the common ones.
1196  Value *Src = CI.getOperand(0);
1197  const Type *SrcTy = Src->getType();
1198  const Type *DestTy = CI.getType();
1199
1200  // Get rid of casts from one type to the same type. These are useless and can
1201  // be replaced by the operand.
1202  if (DestTy == Src->getType())
1203    return ReplaceInstUsesWith(CI, Src);
1204
1205  if (const PointerType *DstPTy = dyn_cast<PointerType>(DestTy)) {
1206    const PointerType *SrcPTy = cast<PointerType>(SrcTy);
1207    const Type *DstElTy = DstPTy->getElementType();
1208    const Type *SrcElTy = SrcPTy->getElementType();
1209
1210    // If the address spaces don't match, don't eliminate the bitcast, which is
1211    // required for changing types.
1212    if (SrcPTy->getAddressSpace() != DstPTy->getAddressSpace())
1213      return 0;
1214
1215    // If we are casting a alloca to a pointer to a type of the same
1216    // size, rewrite the allocation instruction to allocate the "right" type.
1217    // There is no need to modify malloc calls because it is their bitcast that
1218    // needs to be cleaned up.
1219    if (AllocaInst *AI = dyn_cast<AllocaInst>(Src))
1220      if (Instruction *V = PromoteCastOfAllocation(CI, *AI))
1221        return V;
1222
1223    // If the source and destination are pointers, and this cast is equivalent
1224    // to a getelementptr X, 0, 0, 0...  turn it into the appropriate gep.
1225    // This can enhance SROA and other transforms that want type-safe pointers.
1226    Constant *ZeroUInt =
1227      Constant::getNullValue(Type::getInt32Ty(CI.getContext()));
1228    unsigned NumZeros = 0;
1229    while (SrcElTy != DstElTy &&
1230           isa<CompositeType>(SrcElTy) && !isa<PointerType>(SrcElTy) &&
1231           SrcElTy->getNumContainedTypes() /* not "{}" */) {
1232      SrcElTy = cast<CompositeType>(SrcElTy)->getTypeAtIndex(ZeroUInt);
1233      ++NumZeros;
1234    }
1235
1236    // If we found a path from the src to dest, create the getelementptr now.
1237    if (SrcElTy == DstElTy) {
1238      SmallVector<Value*, 8> Idxs(NumZeros+1, ZeroUInt);
1239      return GetElementPtrInst::CreateInBounds(Src, Idxs.begin(), Idxs.end(),"",
1240                                               ((Instruction*)NULL));
1241    }
1242  }
1243
1244  if (const VectorType *DestVTy = dyn_cast<VectorType>(DestTy)) {
1245    if (DestVTy->getNumElements() == 1 && !isa<VectorType>(SrcTy)) {
1246      Value *Elem = Builder->CreateBitCast(Src, DestVTy->getElementType());
1247      return InsertElementInst::Create(UndefValue::get(DestTy), Elem,
1248                     Constant::getNullValue(Type::getInt32Ty(CI.getContext())));
1249      // FIXME: Canonicalize bitcast(insertelement) -> insertelement(bitcast)
1250    }
1251  }
1252
1253  if (const VectorType *SrcVTy = dyn_cast<VectorType>(SrcTy)) {
1254    if (SrcVTy->getNumElements() == 1 && !isa<VectorType>(DestTy)) {
1255      Value *Elem =
1256        Builder->CreateExtractElement(Src,
1257                   Constant::getNullValue(Type::getInt32Ty(CI.getContext())));
1258      return CastInst::Create(Instruction::BitCast, Elem, DestTy);
1259    }
1260  }
1261
1262  if (ShuffleVectorInst *SVI = dyn_cast<ShuffleVectorInst>(Src)) {
1263    // Okay, we have (bitcast (shuffle ..)).  Check to see if this is
1264    // a bitconvert to a vector with the same # elts.
1265    if (SVI->hasOneUse() && isa<VectorType>(DestTy) &&
1266        cast<VectorType>(DestTy)->getNumElements() ==
1267              SVI->getType()->getNumElements() &&
1268        SVI->getType()->getNumElements() ==
1269          cast<VectorType>(SVI->getOperand(0)->getType())->getNumElements()) {
1270      BitCastInst *Tmp;
1271      // If either of the operands is a cast from CI.getType(), then
1272      // evaluating the shuffle in the casted destination's type will allow
1273      // us to eliminate at least one cast.
1274      if (((Tmp = dyn_cast<BitCastInst>(SVI->getOperand(0))) &&
1275           Tmp->getOperand(0)->getType() == DestTy) ||
1276          ((Tmp = dyn_cast<BitCastInst>(SVI->getOperand(1))) &&
1277           Tmp->getOperand(0)->getType() == DestTy)) {
1278        Value *LHS = Builder->CreateBitCast(SVI->getOperand(0), DestTy);
1279        Value *RHS = Builder->CreateBitCast(SVI->getOperand(1), DestTy);
1280        // Return a new shuffle vector.  Use the same element ID's, as we
1281        // know the vector types match #elts.
1282        return new ShuffleVectorInst(LHS, RHS, SVI->getOperand(2));
1283      }
1284    }
1285  }
1286
1287  if (isa<PointerType>(SrcTy))
1288    return commonPointerCastTransforms(CI);
1289  return commonCastTransforms(CI);
1290}
1291