implement Transforms/InstCombine/malloc2.ll and PR1313
[oota-llvm.git] / lib / Transforms / Scalar / InstructionCombining.cpp
1 //===- InstructionCombining.cpp - Combine multiple instructions -----------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by the LLVM research group and is distributed under
6 // the University of Illinois Open Source License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // InstructionCombining - Combine instructions to form fewer, simple
11 // instructions.  This pass does not modify the CFG This pass is where algebraic
12 // simplification happens.
13 //
14 // This pass combines things like:
15 //    %Y = add i32 %X, 1
16 //    %Z = add i32 %Y, 1
17 // into:
18 //    %Z = add i32 %X, 2
19 //
20 // This is a simple worklist driven algorithm.
21 //
22 // This pass guarantees that the following canonicalizations are performed on
23 // the program:
24 //    1. If a binary operator has a constant operand, it is moved to the RHS
25 //    2. Bitwise operators with constant operands are always grouped so that
26 //       shifts are performed first, then or's, then and's, then xor's.
27 //    3. Compare instructions are converted from <,>,<=,>= to ==,!= if possible
28 //    4. All cmp instructions on boolean values are replaced with logical ops
29 //    5. add X, X is represented as (X*2) => (X << 1)
30 //    6. Multiplies with a power-of-two constant argument are transformed into
31 //       shifts.
32 //   ... etc.
33 //
34 //===----------------------------------------------------------------------===//
35
36 #define DEBUG_TYPE "instcombine"
37 #include "llvm/Transforms/Scalar.h"
38 #include "llvm/IntrinsicInst.h"
39 #include "llvm/Pass.h"
40 #include "llvm/DerivedTypes.h"
41 #include "llvm/GlobalVariable.h"
42 #include "llvm/Analysis/ConstantFolding.h"
43 #include "llvm/Target/TargetData.h"
44 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
45 #include "llvm/Transforms/Utils/Local.h"
46 #include "llvm/Support/CallSite.h"
47 #include "llvm/Support/Debug.h"
48 #include "llvm/Support/GetElementPtrTypeIterator.h"
49 #include "llvm/Support/InstVisitor.h"
50 #include "llvm/Support/MathExtras.h"
51 #include "llvm/Support/PatternMatch.h"
52 #include "llvm/Support/Compiler.h"
53 #include "llvm/ADT/DenseMap.h"
54 #include "llvm/ADT/SmallVector.h"
55 #include "llvm/ADT/SmallPtrSet.h"
56 #include "llvm/ADT/Statistic.h"
57 #include "llvm/ADT/STLExtras.h"
58 #include <algorithm>
59 #include <sstream>
60 using namespace llvm;
61 using namespace llvm::PatternMatch;
62
63 STATISTIC(NumCombined , "Number of insts combined");
64 STATISTIC(NumConstProp, "Number of constant folds");
65 STATISTIC(NumDeadInst , "Number of dead inst eliminated");
66 STATISTIC(NumDeadStore, "Number of dead stores eliminated");
67 STATISTIC(NumSunkInst , "Number of instructions sunk");
68
69 namespace {
70   class VISIBILITY_HIDDEN InstCombiner
71     : public FunctionPass,
72       public InstVisitor<InstCombiner, Instruction*> {
73     // Worklist of all of the instructions that need to be simplified.
74     std::vector<Instruction*> Worklist;
75     DenseMap<Instruction*, unsigned> WorklistMap;
76     TargetData *TD;
77     bool MustPreserveLCSSA;
78   public:
79     /// AddToWorkList - Add the specified instruction to the worklist if it
80     /// isn't already in it.
81     void AddToWorkList(Instruction *I) {
82       if (WorklistMap.insert(std::make_pair(I, Worklist.size())))
83         Worklist.push_back(I);
84     }
85     
86     // RemoveFromWorkList - remove I from the worklist if it exists.
87     void RemoveFromWorkList(Instruction *I) {
88       DenseMap<Instruction*, unsigned>::iterator It = WorklistMap.find(I);
89       if (It == WorklistMap.end()) return; // Not in worklist.
90       
91       // Don't bother moving everything down, just null out the slot.
92       Worklist[It->second] = 0;
93       
94       WorklistMap.erase(It);
95     }
96     
97     Instruction *RemoveOneFromWorkList() {
98       Instruction *I = Worklist.back();
99       Worklist.pop_back();
100       WorklistMap.erase(I);
101       return I;
102     }
103
104     
105     /// AddUsersToWorkList - When an instruction is simplified, add all users of
106     /// the instruction to the work lists because they might get more simplified
107     /// now.
108     ///
109     void AddUsersToWorkList(Value &I) {
110       for (Value::use_iterator UI = I.use_begin(), UE = I.use_end();
111            UI != UE; ++UI)
112         AddToWorkList(cast<Instruction>(*UI));
113     }
114
115     /// AddUsesToWorkList - When an instruction is simplified, add operands to
116     /// the work lists because they might get more simplified now.
117     ///
118     void AddUsesToWorkList(Instruction &I) {
119       for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
120         if (Instruction *Op = dyn_cast<Instruction>(I.getOperand(i)))
121           AddToWorkList(Op);
122     }
123     
124     /// AddSoonDeadInstToWorklist - The specified instruction is about to become
125     /// dead.  Add all of its operands to the worklist, turning them into
126     /// undef's to reduce the number of uses of those instructions.
127     ///
128     /// Return the specified operand before it is turned into an undef.
129     ///
130     Value *AddSoonDeadInstToWorklist(Instruction &I, unsigned op) {
131       Value *R = I.getOperand(op);
132       
133       for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
134         if (Instruction *Op = dyn_cast<Instruction>(I.getOperand(i))) {
135           AddToWorkList(Op);
136           // Set the operand to undef to drop the use.
137           I.setOperand(i, UndefValue::get(Op->getType()));
138         }
139       
140       return R;
141     }
142
143   public:
144     virtual bool runOnFunction(Function &F);
145     
146     bool DoOneIteration(Function &F, unsigned ItNum);
147
148     virtual void getAnalysisUsage(AnalysisUsage &AU) const {
149       AU.addRequired<TargetData>();
150       AU.addPreservedID(LCSSAID);
151       AU.setPreservesCFG();
152     }
153
154     TargetData &getTargetData() const { return *TD; }
155
156     // Visitation implementation - Implement instruction combining for different
157     // instruction types.  The semantics are as follows:
158     // Return Value:
159     //    null        - No change was made
160     //     I          - Change was made, I is still valid, I may be dead though
161     //   otherwise    - Change was made, replace I with returned instruction
162     //
163     Instruction *visitAdd(BinaryOperator &I);
164     Instruction *visitSub(BinaryOperator &I);
165     Instruction *visitMul(BinaryOperator &I);
166     Instruction *visitURem(BinaryOperator &I);
167     Instruction *visitSRem(BinaryOperator &I);
168     Instruction *visitFRem(BinaryOperator &I);
169     Instruction *commonRemTransforms(BinaryOperator &I);
170     Instruction *commonIRemTransforms(BinaryOperator &I);
171     Instruction *commonDivTransforms(BinaryOperator &I);
172     Instruction *commonIDivTransforms(BinaryOperator &I);
173     Instruction *visitUDiv(BinaryOperator &I);
174     Instruction *visitSDiv(BinaryOperator &I);
175     Instruction *visitFDiv(BinaryOperator &I);
176     Instruction *visitAnd(BinaryOperator &I);
177     Instruction *visitOr (BinaryOperator &I);
178     Instruction *visitXor(BinaryOperator &I);
179     Instruction *visitShl(BinaryOperator &I);
180     Instruction *visitAShr(BinaryOperator &I);
181     Instruction *visitLShr(BinaryOperator &I);
182     Instruction *commonShiftTransforms(BinaryOperator &I);
183     Instruction *visitFCmpInst(FCmpInst &I);
184     Instruction *visitICmpInst(ICmpInst &I);
185     Instruction *visitICmpInstWithCastAndCast(ICmpInst &ICI);
186     Instruction *visitICmpInstWithInstAndIntCst(ICmpInst &ICI,
187                                                 Instruction *LHS,
188                                                 ConstantInt *RHS);
189
190     Instruction *FoldGEPICmp(User *GEPLHS, Value *RHS,
191                              ICmpInst::Predicate Cond, Instruction &I);
192     Instruction *FoldShiftByConstant(Value *Op0, ConstantInt *Op1,
193                                      BinaryOperator &I);
194     Instruction *commonCastTransforms(CastInst &CI);
195     Instruction *commonIntCastTransforms(CastInst &CI);
196     Instruction *visitTrunc(CastInst &CI);
197     Instruction *visitZExt(CastInst &CI);
198     Instruction *visitSExt(CastInst &CI);
199     Instruction *visitFPTrunc(CastInst &CI);
200     Instruction *visitFPExt(CastInst &CI);
201     Instruction *visitFPToUI(CastInst &CI);
202     Instruction *visitFPToSI(CastInst &CI);
203     Instruction *visitUIToFP(CastInst &CI);
204     Instruction *visitSIToFP(CastInst &CI);
205     Instruction *visitPtrToInt(CastInst &CI);
206     Instruction *visitIntToPtr(CastInst &CI);
207     Instruction *visitBitCast(CastInst &CI);
208     Instruction *FoldSelectOpOp(SelectInst &SI, Instruction *TI,
209                                 Instruction *FI);
210     Instruction *visitSelectInst(SelectInst &CI);
211     Instruction *visitCallInst(CallInst &CI);
212     Instruction *visitInvokeInst(InvokeInst &II);
213     Instruction *visitPHINode(PHINode &PN);
214     Instruction *visitGetElementPtrInst(GetElementPtrInst &GEP);
215     Instruction *visitAllocationInst(AllocationInst &AI);
216     Instruction *visitFreeInst(FreeInst &FI);
217     Instruction *visitLoadInst(LoadInst &LI);
218     Instruction *visitStoreInst(StoreInst &SI);
219     Instruction *visitBranchInst(BranchInst &BI);
220     Instruction *visitSwitchInst(SwitchInst &SI);
221     Instruction *visitInsertElementInst(InsertElementInst &IE);
222     Instruction *visitExtractElementInst(ExtractElementInst &EI);
223     Instruction *visitShuffleVectorInst(ShuffleVectorInst &SVI);
224
225     // visitInstruction - Specify what to return for unhandled instructions...
226     Instruction *visitInstruction(Instruction &I) { return 0; }
227
228   private:
229     Instruction *visitCallSite(CallSite CS);
230     bool transformConstExprCastCall(CallSite CS);
231
232   public:
233     // InsertNewInstBefore - insert an instruction New before instruction Old
234     // in the program.  Add the new instruction to the worklist.
235     //
236     Instruction *InsertNewInstBefore(Instruction *New, Instruction &Old) {
237       assert(New && New->getParent() == 0 &&
238              "New instruction already inserted into a basic block!");
239       BasicBlock *BB = Old.getParent();
240       BB->getInstList().insert(&Old, New);  // Insert inst
241       AddToWorkList(New);
242       return New;
243     }
244
245     /// InsertCastBefore - Insert a cast of V to TY before the instruction POS.
246     /// This also adds the cast to the worklist.  Finally, this returns the
247     /// cast.
248     Value *InsertCastBefore(Instruction::CastOps opc, Value *V, const Type *Ty,
249                             Instruction &Pos) {
250       if (V->getType() == Ty) return V;
251
252       if (Constant *CV = dyn_cast<Constant>(V))
253         return ConstantExpr::getCast(opc, CV, Ty);
254       
255       Instruction *C = CastInst::create(opc, V, Ty, V->getName(), &Pos);
256       AddToWorkList(C);
257       return C;
258     }
259
260     // ReplaceInstUsesWith - This method is to be used when an instruction is
261     // found to be dead, replacable with another preexisting expression.  Here
262     // we add all uses of I to the worklist, replace all uses of I with the new
263     // value, then return I, so that the inst combiner will know that I was
264     // modified.
265     //
266     Instruction *ReplaceInstUsesWith(Instruction &I, Value *V) {
267       AddUsersToWorkList(I);         // Add all modified instrs to worklist
268       if (&I != V) {
269         I.replaceAllUsesWith(V);
270         return &I;
271       } else {
272         // If we are replacing the instruction with itself, this must be in a
273         // segment of unreachable code, so just clobber the instruction.
274         I.replaceAllUsesWith(UndefValue::get(I.getType()));
275         return &I;
276       }
277     }
278
279     // UpdateValueUsesWith - This method is to be used when an value is
280     // found to be replacable with another preexisting expression or was
281     // updated.  Here we add all uses of I to the worklist, replace all uses of
282     // I with the new value (unless the instruction was just updated), then
283     // return true, so that the inst combiner will know that I was modified.
284     //
285     bool UpdateValueUsesWith(Value *Old, Value *New) {
286       AddUsersToWorkList(*Old);         // Add all modified instrs to worklist
287       if (Old != New)
288         Old->replaceAllUsesWith(New);
289       if (Instruction *I = dyn_cast<Instruction>(Old))
290         AddToWorkList(I);
291       if (Instruction *I = dyn_cast<Instruction>(New))
292         AddToWorkList(I);
293       return true;
294     }
295     
296     // EraseInstFromFunction - When dealing with an instruction that has side
297     // effects or produces a void value, we can't rely on DCE to delete the
298     // instruction.  Instead, visit methods should return the value returned by
299     // this function.
300     Instruction *EraseInstFromFunction(Instruction &I) {
301       assert(I.use_empty() && "Cannot erase instruction that is used!");
302       AddUsesToWorkList(I);
303       RemoveFromWorkList(&I);
304       I.eraseFromParent();
305       return 0;  // Don't do anything with FI
306     }
307
308   private:
309     /// InsertOperandCastBefore - This inserts a cast of V to DestTy before the
310     /// InsertBefore instruction.  This is specialized a bit to avoid inserting
311     /// casts that are known to not do anything...
312     ///
313     Value *InsertOperandCastBefore(Instruction::CastOps opcode,
314                                    Value *V, const Type *DestTy,
315                                    Instruction *InsertBefore);
316
317     /// SimplifyCommutative - This performs a few simplifications for 
318     /// commutative operators.
319     bool SimplifyCommutative(BinaryOperator &I);
320
321     /// SimplifyCompare - This reorders the operands of a CmpInst to get them in
322     /// most-complex to least-complex order.
323     bool SimplifyCompare(CmpInst &I);
324
325     /// SimplifyDemandedBits - Attempts to replace V with a simpler value based
326     /// on the demanded bits.
327     bool SimplifyDemandedBits(Value *V, APInt DemandedMask, 
328                               APInt& KnownZero, APInt& KnownOne,
329                               unsigned Depth = 0);
330
331     Value *SimplifyDemandedVectorElts(Value *V, uint64_t DemandedElts,
332                                       uint64_t &UndefElts, unsigned Depth = 0);
333       
334     // FoldOpIntoPhi - Given a binary operator or cast instruction which has a
335     // PHI node as operand #0, see if we can fold the instruction into the PHI
336     // (which is only possible if all operands to the PHI are constants).
337     Instruction *FoldOpIntoPhi(Instruction &I);
338
339     // FoldPHIArgOpIntoPHI - If all operands to a PHI node are the same "unary"
340     // operator and they all are only used by the PHI, PHI together their
341     // inputs, and do the operation once, to the result of the PHI.
342     Instruction *FoldPHIArgOpIntoPHI(PHINode &PN);
343     Instruction *FoldPHIArgBinOpIntoPHI(PHINode &PN);
344     
345     
346     Instruction *OptAndOp(Instruction *Op, ConstantInt *OpRHS,
347                           ConstantInt *AndRHS, BinaryOperator &TheAnd);
348     
349     Value *FoldLogicalPlusAnd(Value *LHS, Value *RHS, ConstantInt *Mask,
350                               bool isSub, Instruction &I);
351     Instruction *InsertRangeTest(Value *V, Constant *Lo, Constant *Hi,
352                                  bool isSigned, bool Inside, Instruction &IB);
353     Instruction *PromoteCastOfAllocation(CastInst &CI, AllocationInst &AI);
354     Instruction *MatchBSwap(BinaryOperator &I);
355
356     Value *EvaluateInDifferentType(Value *V, const Type *Ty, bool isSigned);
357   };
358
359   RegisterPass<InstCombiner> X("instcombine", "Combine redundant instructions");
360 }
361
362 // getComplexity:  Assign a complexity or rank value to LLVM Values...
363 //   0 -> undef, 1 -> Const, 2 -> Other, 3 -> Arg, 3 -> Unary, 4 -> OtherInst
364 static unsigned getComplexity(Value *V) {
365   if (isa<Instruction>(V)) {
366     if (BinaryOperator::isNeg(V) || BinaryOperator::isNot(V))
367       return 3;
368     return 4;
369   }
370   if (isa<Argument>(V)) return 3;
371   return isa<Constant>(V) ? (isa<UndefValue>(V) ? 0 : 1) : 2;
372 }
373
374 // isOnlyUse - Return true if this instruction will be deleted if we stop using
375 // it.
376 static bool isOnlyUse(Value *V) {
377   return V->hasOneUse() || isa<Constant>(V);
378 }
379
380 // getPromotedType - Return the specified type promoted as it would be to pass
381 // though a va_arg area...
382 static const Type *getPromotedType(const Type *Ty) {
383   if (const IntegerType* ITy = dyn_cast<IntegerType>(Ty)) {
384     if (ITy->getBitWidth() < 32)
385       return Type::Int32Ty;
386   } else if (Ty == Type::FloatTy)
387     return Type::DoubleTy;
388   return Ty;
389 }
390
391 /// getBitCastOperand - If the specified operand is a CastInst or a constant 
392 /// expression bitcast,  return the operand value, otherwise return null.
393 static Value *getBitCastOperand(Value *V) {
394   if (BitCastInst *I = dyn_cast<BitCastInst>(V))
395     return I->getOperand(0);
396   else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(V))
397     if (CE->getOpcode() == Instruction::BitCast)
398       return CE->getOperand(0);
399   return 0;
400 }
401
402 /// This function is a wrapper around CastInst::isEliminableCastPair. It
403 /// simply extracts arguments and returns what that function returns.
404 static Instruction::CastOps 
405 isEliminableCastPair(
406   const CastInst *CI, ///< The first cast instruction
407   unsigned opcode,       ///< The opcode of the second cast instruction
408   const Type *DstTy,     ///< The target type for the second cast instruction
409   TargetData *TD         ///< The target data for pointer size
410 ) {
411   
412   const Type *SrcTy = CI->getOperand(0)->getType();   // A from above
413   const Type *MidTy = CI->getType();                  // B from above
414
415   // Get the opcodes of the two Cast instructions
416   Instruction::CastOps firstOp = Instruction::CastOps(CI->getOpcode());
417   Instruction::CastOps secondOp = Instruction::CastOps(opcode);
418
419   return Instruction::CastOps(
420       CastInst::isEliminableCastPair(firstOp, secondOp, SrcTy, MidTy,
421                                      DstTy, TD->getIntPtrType()));
422 }
423
424 /// ValueRequiresCast - Return true if the cast from "V to Ty" actually results
425 /// in any code being generated.  It does not require codegen if V is simple
426 /// enough or if the cast can be folded into other casts.
427 static bool ValueRequiresCast(Instruction::CastOps opcode, const Value *V, 
428                               const Type *Ty, TargetData *TD) {
429   if (V->getType() == Ty || isa<Constant>(V)) return false;
430   
431   // If this is another cast that can be eliminated, it isn't codegen either.
432   if (const CastInst *CI = dyn_cast<CastInst>(V))
433     if (isEliminableCastPair(CI, opcode, Ty, TD)) 
434       return false;
435   return true;
436 }
437
438 /// InsertOperandCastBefore - This inserts a cast of V to DestTy before the
439 /// InsertBefore instruction.  This is specialized a bit to avoid inserting
440 /// casts that are known to not do anything...
441 ///
442 Value *InstCombiner::InsertOperandCastBefore(Instruction::CastOps opcode,
443                                              Value *V, const Type *DestTy,
444                                              Instruction *InsertBefore) {
445   if (V->getType() == DestTy) return V;
446   if (Constant *C = dyn_cast<Constant>(V))
447     return ConstantExpr::getCast(opcode, C, DestTy);
448   
449   return InsertCastBefore(opcode, V, DestTy, *InsertBefore);
450 }
451
452 // SimplifyCommutative - This performs a few simplifications for commutative
453 // operators:
454 //
455 //  1. Order operands such that they are listed from right (least complex) to
456 //     left (most complex).  This puts constants before unary operators before
457 //     binary operators.
458 //
459 //  2. Transform: (op (op V, C1), C2) ==> (op V, (op C1, C2))
460 //  3. Transform: (op (op V1, C1), (op V2, C2)) ==> (op (op V1, V2), (op C1,C2))
461 //
462 bool InstCombiner::SimplifyCommutative(BinaryOperator &I) {
463   bool Changed = false;
464   if (getComplexity(I.getOperand(0)) < getComplexity(I.getOperand(1)))
465     Changed = !I.swapOperands();
466
467   if (!I.isAssociative()) return Changed;
468   Instruction::BinaryOps Opcode = I.getOpcode();
469   if (BinaryOperator *Op = dyn_cast<BinaryOperator>(I.getOperand(0)))
470     if (Op->getOpcode() == Opcode && isa<Constant>(Op->getOperand(1))) {
471       if (isa<Constant>(I.getOperand(1))) {
472         Constant *Folded = ConstantExpr::get(I.getOpcode(),
473                                              cast<Constant>(I.getOperand(1)),
474                                              cast<Constant>(Op->getOperand(1)));
475         I.setOperand(0, Op->getOperand(0));
476         I.setOperand(1, Folded);
477         return true;
478       } else if (BinaryOperator *Op1=dyn_cast<BinaryOperator>(I.getOperand(1)))
479         if (Op1->getOpcode() == Opcode && isa<Constant>(Op1->getOperand(1)) &&
480             isOnlyUse(Op) && isOnlyUse(Op1)) {
481           Constant *C1 = cast<Constant>(Op->getOperand(1));
482           Constant *C2 = cast<Constant>(Op1->getOperand(1));
483
484           // Fold (op (op V1, C1), (op V2, C2)) ==> (op (op V1, V2), (op C1,C2))
485           Constant *Folded = ConstantExpr::get(I.getOpcode(), C1, C2);
486           Instruction *New = BinaryOperator::create(Opcode, Op->getOperand(0),
487                                                     Op1->getOperand(0),
488                                                     Op1->getName(), &I);
489           AddToWorkList(New);
490           I.setOperand(0, New);
491           I.setOperand(1, Folded);
492           return true;
493         }
494     }
495   return Changed;
496 }
497
498 /// SimplifyCompare - For a CmpInst this function just orders the operands
499 /// so that theyare listed from right (least complex) to left (most complex).
500 /// This puts constants before unary operators before binary operators.
501 bool InstCombiner::SimplifyCompare(CmpInst &I) {
502   if (getComplexity(I.getOperand(0)) >= getComplexity(I.getOperand(1)))
503     return false;
504   I.swapOperands();
505   // Compare instructions are not associative so there's nothing else we can do.
506   return true;
507 }
508
509 // dyn_castNegVal - Given a 'sub' instruction, return the RHS of the instruction
510 // if the LHS is a constant zero (which is the 'negate' form).
511 //
512 static inline Value *dyn_castNegVal(Value *V) {
513   if (BinaryOperator::isNeg(V))
514     return BinaryOperator::getNegArgument(V);
515
516   // Constants can be considered to be negated values if they can be folded.
517   if (ConstantInt *C = dyn_cast<ConstantInt>(V))
518     return ConstantExpr::getNeg(C);
519   return 0;
520 }
521
522 static inline Value *dyn_castNotVal(Value *V) {
523   if (BinaryOperator::isNot(V))
524     return BinaryOperator::getNotArgument(V);
525
526   // Constants can be considered to be not'ed values...
527   if (ConstantInt *C = dyn_cast<ConstantInt>(V))
528     return ConstantInt::get(~C->getValue());
529   return 0;
530 }
531
532 // dyn_castFoldableMul - If this value is a multiply that can be folded into
533 // other computations (because it has a constant operand), return the
534 // non-constant operand of the multiply, and set CST to point to the multiplier.
535 // Otherwise, return null.
536 //
537 static inline Value *dyn_castFoldableMul(Value *V, ConstantInt *&CST) {
538   if (V->hasOneUse() && V->getType()->isInteger())
539     if (Instruction *I = dyn_cast<Instruction>(V)) {
540       if (I->getOpcode() == Instruction::Mul)
541         if ((CST = dyn_cast<ConstantInt>(I->getOperand(1))))
542           return I->getOperand(0);
543       if (I->getOpcode() == Instruction::Shl)
544         if ((CST = dyn_cast<ConstantInt>(I->getOperand(1)))) {
545           // The multiplier is really 1 << CST.
546           uint32_t BitWidth = cast<IntegerType>(V->getType())->getBitWidth();
547           uint32_t CSTVal = CST->getLimitedValue(BitWidth);
548           CST = ConstantInt::get(APInt(BitWidth, 1).shl(CSTVal));
549           return I->getOperand(0);
550         }
551     }
552   return 0;
553 }
554
555 /// dyn_castGetElementPtr - If this is a getelementptr instruction or constant
556 /// expression, return it.
557 static User *dyn_castGetElementPtr(Value *V) {
558   if (isa<GetElementPtrInst>(V)) return cast<User>(V);
559   if (ConstantExpr *CE = dyn_cast<ConstantExpr>(V))
560     if (CE->getOpcode() == Instruction::GetElementPtr)
561       return cast<User>(V);
562   return false;
563 }
564
565 /// AddOne - Add one to a ConstantInt
566 static ConstantInt *AddOne(ConstantInt *C) {
567   APInt Val(C->getValue());
568   return ConstantInt::get(++Val);
569 }
570 /// SubOne - Subtract one from a ConstantInt
571 static ConstantInt *SubOne(ConstantInt *C) {
572   APInt Val(C->getValue());
573   return ConstantInt::get(--Val);
574 }
575 /// Add - Add two ConstantInts together
576 static ConstantInt *Add(ConstantInt *C1, ConstantInt *C2) {
577   return ConstantInt::get(C1->getValue() + C2->getValue());
578 }
579 /// And - Bitwise AND two ConstantInts together
580 static ConstantInt *And(ConstantInt *C1, ConstantInt *C2) {
581   return ConstantInt::get(C1->getValue() & C2->getValue());
582 }
583 /// Subtract - Subtract one ConstantInt from another
584 static ConstantInt *Subtract(ConstantInt *C1, ConstantInt *C2) {
585   return ConstantInt::get(C1->getValue() - C2->getValue());
586 }
587 /// Multiply - Multiply two ConstantInts together
588 static ConstantInt *Multiply(ConstantInt *C1, ConstantInt *C2) {
589   return ConstantInt::get(C1->getValue() * C2->getValue());
590 }
591
592 /// ComputeMaskedBits - Determine which of the bits specified in Mask are
593 /// known to be either zero or one and return them in the KnownZero/KnownOne
594 /// bit sets.  This code only analyzes bits in Mask, in order to short-circuit
595 /// processing.
596 /// NOTE: we cannot consider 'undef' to be "IsZero" here.  The problem is that
597 /// we cannot optimize based on the assumption that it is zero without changing
598 /// it to be an explicit zero.  If we don't change it to zero, other code could
599 /// optimized based on the contradictory assumption that it is non-zero.
600 /// Because instcombine aggressively folds operations with undef args anyway,
601 /// this won't lose us code quality.
602 static void ComputeMaskedBits(Value *V, const APInt &Mask, APInt& KnownZero, 
603                               APInt& KnownOne, unsigned Depth = 0) {
604   assert(V && "No Value?");
605   assert(Depth <= 6 && "Limit Search Depth");
606   uint32_t BitWidth = Mask.getBitWidth();
607   assert(cast<IntegerType>(V->getType())->getBitWidth() == BitWidth &&
608          KnownZero.getBitWidth() == BitWidth && 
609          KnownOne.getBitWidth() == BitWidth &&
610          "V, Mask, KnownOne and KnownZero should have same BitWidth");
611   if (ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
612     // We know all of the bits for a constant!
613     KnownOne = CI->getValue() & Mask;
614     KnownZero = ~KnownOne & Mask;
615     return;
616   }
617
618   if (Depth == 6 || Mask == 0)
619     return;  // Limit search depth.
620
621   Instruction *I = dyn_cast<Instruction>(V);
622   if (!I) return;
623
624   KnownZero.clear(); KnownOne.clear();   // Don't know anything.
625   APInt KnownZero2(KnownZero), KnownOne2(KnownOne);
626   
627   switch (I->getOpcode()) {
628   case Instruction::And: {
629     // If either the LHS or the RHS are Zero, the result is zero.
630     ComputeMaskedBits(I->getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
631     APInt Mask2(Mask & ~KnownZero);
632     ComputeMaskedBits(I->getOperand(0), Mask2, KnownZero2, KnownOne2, Depth+1);
633     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
634     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
635     
636     // Output known-1 bits are only known if set in both the LHS & RHS.
637     KnownOne &= KnownOne2;
638     // Output known-0 are known to be clear if zero in either the LHS | RHS.
639     KnownZero |= KnownZero2;
640     return;
641   }
642   case Instruction::Or: {
643     ComputeMaskedBits(I->getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
644     APInt Mask2(Mask & ~KnownOne);
645     ComputeMaskedBits(I->getOperand(0), Mask2, KnownZero2, KnownOne2, Depth+1);
646     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
647     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
648     
649     // Output known-0 bits are only known if clear in both the LHS & RHS.
650     KnownZero &= KnownZero2;
651     // Output known-1 are known to be set if set in either the LHS | RHS.
652     KnownOne |= KnownOne2;
653     return;
654   }
655   case Instruction::Xor: {
656     ComputeMaskedBits(I->getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
657     ComputeMaskedBits(I->getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
658     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
659     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
660     
661     // Output known-0 bits are known if clear or set in both the LHS & RHS.
662     APInt KnownZeroOut = (KnownZero & KnownZero2) | (KnownOne & KnownOne2);
663     // Output known-1 are known to be set if set in only one of the LHS, RHS.
664     KnownOne = (KnownZero & KnownOne2) | (KnownOne & KnownZero2);
665     KnownZero = KnownZeroOut;
666     return;
667   }
668   case Instruction::Select:
669     ComputeMaskedBits(I->getOperand(2), Mask, KnownZero, KnownOne, Depth+1);
670     ComputeMaskedBits(I->getOperand(1), Mask, KnownZero2, KnownOne2, Depth+1);
671     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
672     assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 
673
674     // Only known if known in both the LHS and RHS.
675     KnownOne &= KnownOne2;
676     KnownZero &= KnownZero2;
677     return;
678   case Instruction::FPTrunc:
679   case Instruction::FPExt:
680   case Instruction::FPToUI:
681   case Instruction::FPToSI:
682   case Instruction::SIToFP:
683   case Instruction::PtrToInt:
684   case Instruction::UIToFP:
685   case Instruction::IntToPtr:
686     return; // Can't work with floating point or pointers
687   case Instruction::Trunc: {
688     // All these have integer operands
689     uint32_t SrcBitWidth = 
690       cast<IntegerType>(I->getOperand(0)->getType())->getBitWidth();
691     APInt MaskIn(Mask);
692     MaskIn.zext(SrcBitWidth);
693     KnownZero.zext(SrcBitWidth);
694     KnownOne.zext(SrcBitWidth);
695     ComputeMaskedBits(I->getOperand(0), MaskIn, KnownZero, KnownOne, Depth+1);
696     KnownZero.trunc(BitWidth);
697     KnownOne.trunc(BitWidth);
698     return;
699   }
700   case Instruction::BitCast: {
701     const Type *SrcTy = I->getOperand(0)->getType();
702     if (SrcTy->isInteger()) {
703       ComputeMaskedBits(I->getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
704       return;
705     }
706     break;
707   }
708   case Instruction::ZExt:  {
709     // Compute the bits in the result that are not present in the input.
710     const IntegerType *SrcTy = cast<IntegerType>(I->getOperand(0)->getType());
711     uint32_t SrcBitWidth = SrcTy->getBitWidth();
712       
713     APInt MaskIn(Mask);
714     MaskIn.trunc(SrcBitWidth);
715     KnownZero.trunc(SrcBitWidth);
716     KnownOne.trunc(SrcBitWidth);
717     ComputeMaskedBits(I->getOperand(0), MaskIn, KnownZero, KnownOne, Depth+1);
718     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
719     // The top bits are known to be zero.
720     KnownZero.zext(BitWidth);
721     KnownOne.zext(BitWidth);
722     KnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - SrcBitWidth);
723     return;
724   }
725   case Instruction::SExt: {
726     // Compute the bits in the result that are not present in the input.
727     const IntegerType *SrcTy = cast<IntegerType>(I->getOperand(0)->getType());
728     uint32_t SrcBitWidth = SrcTy->getBitWidth();
729       
730     APInt MaskIn(Mask); 
731     MaskIn.trunc(SrcBitWidth);
732     KnownZero.trunc(SrcBitWidth);
733     KnownOne.trunc(SrcBitWidth);
734     ComputeMaskedBits(I->getOperand(0), MaskIn, KnownZero, KnownOne, Depth+1);
735     assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
736     KnownZero.zext(BitWidth);
737     KnownOne.zext(BitWidth);
738
739     // If the sign bit of the input is known set or clear, then we know the
740     // top bits of the result.
741     if (KnownZero[SrcBitWidth-1])             // Input sign bit known zero
742       KnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - SrcBitWidth);
743     else if (KnownOne[SrcBitWidth-1])           // Input sign bit known set
744       KnownOne |= APInt::getHighBitsSet(BitWidth, BitWidth - SrcBitWidth);
745     return;
746   }
747   case Instruction::Shl:
748     // (shl X, C1) & C2 == 0   iff   (X & C2 >>u C1) == 0
749     if (ConstantInt *SA = dyn_cast<ConstantInt>(I->getOperand(1))) {
750       uint64_t ShiftAmt = SA->getLimitedValue(BitWidth);
751       APInt Mask2(Mask.lshr(ShiftAmt));
752       ComputeMaskedBits(I->getOperand(0), Mask2, KnownZero, KnownOne, Depth+1);
753       assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
754       KnownZero <<= ShiftAmt;
755       KnownOne  <<= ShiftAmt;
756       KnownZero |= APInt::getLowBitsSet(BitWidth, ShiftAmt); // low bits known 0
757       return;
758     }
759     break;
760   case Instruction::LShr:
761     // (ushr X, C1) & C2 == 0   iff  (-1 >> C1) & C2 == 0
762     if (ConstantInt *SA = dyn_cast<ConstantInt>(I->getOperand(1))) {
763       // Compute the new bits that are at the top now.
764       uint64_t ShiftAmt = SA->getLimitedValue(BitWidth);
765       
766       // Unsigned shift right.
767       APInt Mask2(Mask.shl(ShiftAmt));
768       ComputeMaskedBits(I->getOperand(0), Mask2, KnownZero,KnownOne,Depth+1);
769       assert((KnownZero & KnownOne) == 0&&"Bits known to be one AND zero?"); 
770       KnownZero = APIntOps::lshr(KnownZero, ShiftAmt);
771       KnownOne  = APIntOps::lshr(KnownOne, ShiftAmt);
772       // high bits known zero.
773       KnownZero |= APInt::getHighBitsSet(BitWidth, ShiftAmt);
774       return;
775     }
776     break;
777   case Instruction::AShr:
778     // (ashr X, C1) & C2 == 0   iff  (-1 >> C1) & C2 == 0
779     if (ConstantInt *SA = dyn_cast<ConstantInt>(I->getOperand(1))) {
780       // Compute the new bits that are at the top now.
781       uint64_t ShiftAmt = SA->getLimitedValue(BitWidth);
782       
783       // Signed shift right.
784       APInt Mask2(Mask.shl(ShiftAmt));
785       ComputeMaskedBits(I->getOperand(0), Mask2, KnownZero,KnownOne,Depth+1);
786       assert((KnownZero & KnownOne) == 0&&"Bits known to be one AND zero?"); 
787       KnownZero = APIntOps::lshr(KnownZero, ShiftAmt);
788       KnownOne  = APIntOps::lshr(KnownOne, ShiftAmt);
789         
790       APInt HighBits(APInt::getHighBitsSet(BitWidth, ShiftAmt));
791       if (KnownZero[BitWidth-ShiftAmt-1])    // New bits are known zero.
792         KnownZero |= HighBits;
793       else if (KnownOne[BitWidth-ShiftAmt-1])  // New bits are known one.
794         KnownOne |= HighBits;
795       return;
796     }
797     break;
798   }
799 }
800
801 /// MaskedValueIsZero - Return true if 'V & Mask' is known to be zero.  We use
802 /// this predicate to simplify operations downstream.  Mask is known to be zero
803 /// for bits that V cannot have.
804 static bool MaskedValueIsZero(Value *V, const APInt& Mask, unsigned Depth = 0) {
805   APInt KnownZero(Mask.getBitWidth(), 0), KnownOne(Mask.getBitWidth(), 0);
806   ComputeMaskedBits(V, Mask, KnownZero, KnownOne, Depth);
807   assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 
808   return (KnownZero & Mask) == Mask;
809 }
810
811 /// ShrinkDemandedConstant - Check to see if the specified operand of the 
812 /// specified instruction is a constant integer.  If so, check to see if there
813 /// are any bits set in the constant that are not demanded.  If so, shrink the
814 /// constant and return true.
815 static bool ShrinkDemandedConstant(Instruction *I, unsigned OpNo, 
816                                    APInt Demanded) {
817   assert(I && "No instruction?");
818   assert(OpNo < I->getNumOperands() && "Operand index too large");
819
820   // If the operand is not a constant integer, nothing to do.
821   ConstantInt *OpC = dyn_cast<ConstantInt>(I->getOperand(OpNo));
822   if (!OpC) return false;
823
824   // If there are no bits set that aren't demanded, nothing to do.
825   Demanded.zextOrTrunc(OpC->getValue().getBitWidth());
826   if ((~Demanded & OpC->getValue()) == 0)
827     return false;
828
829   // This instruction is producing bits that are not demanded. Shrink the RHS.
830   Demanded &= OpC->getValue();
831   I->setOperand(OpNo, ConstantInt::get(Demanded));
832   return true;
833 }
834
835 // ComputeSignedMinMaxValuesFromKnownBits - Given a signed integer type and a 
836 // set of known zero and one bits, compute the maximum and minimum values that
837 // could have the specified known zero and known one bits, returning them in
838 // min/max.
839 static void ComputeSignedMinMaxValuesFromKnownBits(const Type *Ty,
840                                                    const APInt& KnownZero,
841                                                    const APInt& KnownOne,
842                                                    APInt& Min, APInt& Max) {
843   uint32_t BitWidth = cast<IntegerType>(Ty)->getBitWidth();
844   assert(KnownZero.getBitWidth() == BitWidth && 
845          KnownOne.getBitWidth() == BitWidth &&
846          Min.getBitWidth() == BitWidth && Max.getBitWidth() == BitWidth &&
847          "Ty, KnownZero, KnownOne and Min, Max must have equal bitwidth.");
848   APInt UnknownBits = ~(KnownZero|KnownOne);
849
850   // The minimum value is when all unknown bits are zeros, EXCEPT for the sign
851   // bit if it is unknown.
852   Min = KnownOne;
853   Max = KnownOne|UnknownBits;
854   
855   if (UnknownBits[BitWidth-1]) { // Sign bit is unknown
856     Min.set(BitWidth-1);
857     Max.clear(BitWidth-1);
858   }
859 }
860
861 // ComputeUnsignedMinMaxValuesFromKnownBits - Given an unsigned integer type and
862 // a set of known zero and one bits, compute the maximum and minimum values that
863 // could have the specified known zero and known one bits, returning them in
864 // min/max.
865 static void ComputeUnsignedMinMaxValuesFromKnownBits(const Type *Ty,
866                                                      const APInt& KnownZero,
867                                                      const APInt& KnownOne,
868                                                      APInt& Min,
869                                                      APInt& Max) {
870   uint32_t BitWidth = cast<IntegerType>(Ty)->getBitWidth();
871   assert(KnownZero.getBitWidth() == BitWidth && 
872          KnownOne.getBitWidth() == BitWidth &&
873          Min.getBitWidth() == BitWidth && Max.getBitWidth() &&
874          "Ty, KnownZero, KnownOne and Min, Max must have equal bitwidth.");
875   APInt UnknownBits = ~(KnownZero|KnownOne);
876   
877   // The minimum value is when the unknown bits are all zeros.
878   Min = KnownOne;
879   // The maximum value is when the unknown bits are all ones.
880   Max = KnownOne|UnknownBits;
881 }
882
883 /// SimplifyDemandedBits - This function attempts to replace V with a simpler
884 /// value based on the demanded bits. When this function is called, it is known
885 /// that only the bits set in DemandedMask of the result of V are ever used
886 /// downstream. Consequently, depending on the mask and V, it may be possible
887 /// to replace V with a constant or one of its operands. In such cases, this
888 /// function does the replacement and returns true. In all other cases, it
889 /// returns false after analyzing the expression and setting KnownOne and known
890 /// to be one in the expression. KnownZero contains all the bits that are known
891 /// to be zero in the expression. These are provided to potentially allow the
892 /// caller (which might recursively be SimplifyDemandedBits itself) to simplify
893 /// the expression. KnownOne and KnownZero always follow the invariant that 
894 /// KnownOne & KnownZero == 0. That is, a bit can't be both 1 and 0. Note that
895 /// the bits in KnownOne and KnownZero may only be accurate for those bits set
896 /// in DemandedMask. Note also that the bitwidth of V, DemandedMask, KnownZero
897 /// and KnownOne must all be the same.
898 bool InstCombiner::SimplifyDemandedBits(Value *V, APInt DemandedMask,
899                                         APInt& KnownZero, APInt& KnownOne,
900                                         unsigned Depth) {
901   assert(V != 0 && "Null pointer of Value???");
902   assert(Depth <= 6 && "Limit Search Depth");
903   uint32_t BitWidth = DemandedMask.getBitWidth();
904   const IntegerType *VTy = cast<IntegerType>(V->getType());
905   assert(VTy->getBitWidth() == BitWidth && 
906          KnownZero.getBitWidth() == BitWidth && 
907          KnownOne.getBitWidth() == BitWidth &&
908          "Value *V, DemandedMask, KnownZero and KnownOne \
909           must have same BitWidth");
910   if (ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
911     // We know all of the bits for a constant!
912     KnownOne = CI->getValue() & DemandedMask;
913     KnownZero = ~KnownOne & DemandedMask;
914     return false;
915   }
916   
917   KnownZero.clear(); 
918   KnownOne.clear();
919   if (!V->hasOneUse()) {    // Other users may use these bits.
920     if (Depth != 0) {       // Not at the root.
921       // Just compute the KnownZero/KnownOne bits to simplify things downstream.
922       ComputeMaskedBits(V, DemandedMask, KnownZero, KnownOne, Depth);
923       return false;
924     }
925     // If this is the root being simplified, allow it to have multiple uses,
926     // just set the DemandedMask to all bits.
927     DemandedMask = APInt::getAllOnesValue(BitWidth);
928   } else if (DemandedMask == 0) {   // Not demanding any bits from V.
929     if (V != UndefValue::get(VTy))
930       return UpdateValueUsesWith(V, UndefValue::get(VTy));
931     return false;
932   } else if (Depth == 6) {        // Limit search depth.
933     return false;
934   }
935   
936   Instruction *I = dyn_cast<Instruction>(V);
937   if (!I) return false;        // Only analyze instructions.
938
939   APInt LHSKnownZero(BitWidth, 0), LHSKnownOne(BitWidth, 0);
940   APInt &RHSKnownZero = KnownZero, &RHSKnownOne = KnownOne;
941   switch (I->getOpcode()) {
942   default: break;
943   case Instruction::And:
944     // If either the LHS or the RHS are Zero, the result is zero.
945     if (SimplifyDemandedBits(I->getOperand(1), DemandedMask,
946                              RHSKnownZero, RHSKnownOne, Depth+1))
947       return true;
948     assert((RHSKnownZero & RHSKnownOne) == 0 && 
949            "Bits known to be one AND zero?"); 
950
951     // If something is known zero on the RHS, the bits aren't demanded on the
952     // LHS.
953     if (SimplifyDemandedBits(I->getOperand(0), DemandedMask & ~RHSKnownZero,
954                              LHSKnownZero, LHSKnownOne, Depth+1))
955       return true;
956     assert((LHSKnownZero & LHSKnownOne) == 0 && 
957            "Bits known to be one AND zero?"); 
958
959     // If all of the demanded bits are known 1 on one side, return the other.
960     // These bits cannot contribute to the result of the 'and'.
961     if ((DemandedMask & ~LHSKnownZero & RHSKnownOne) == 
962         (DemandedMask & ~LHSKnownZero))
963       return UpdateValueUsesWith(I, I->getOperand(0));
964     if ((DemandedMask & ~RHSKnownZero & LHSKnownOne) == 
965         (DemandedMask & ~RHSKnownZero))
966       return UpdateValueUsesWith(I, I->getOperand(1));
967     
968     // If all of the demanded bits in the inputs are known zeros, return zero.
969     if ((DemandedMask & (RHSKnownZero|LHSKnownZero)) == DemandedMask)
970       return UpdateValueUsesWith(I, Constant::getNullValue(VTy));
971       
972     // If the RHS is a constant, see if we can simplify it.
973     if (ShrinkDemandedConstant(I, 1, DemandedMask & ~LHSKnownZero))
974       return UpdateValueUsesWith(I, I);
975       
976     // Output known-1 bits are only known if set in both the LHS & RHS.
977     RHSKnownOne &= LHSKnownOne;
978     // Output known-0 are known to be clear if zero in either the LHS | RHS.
979     RHSKnownZero |= LHSKnownZero;
980     break;
981   case Instruction::Or:
982     // If either the LHS or the RHS are One, the result is One.
983     if (SimplifyDemandedBits(I->getOperand(1), DemandedMask, 
984                              RHSKnownZero, RHSKnownOne, Depth+1))
985       return true;
986     assert((RHSKnownZero & RHSKnownOne) == 0 && 
987            "Bits known to be one AND zero?"); 
988     // If something is known one on the RHS, the bits aren't demanded on the
989     // LHS.
990     if (SimplifyDemandedBits(I->getOperand(0), DemandedMask & ~RHSKnownOne, 
991                              LHSKnownZero, LHSKnownOne, Depth+1))
992       return true;
993     assert((LHSKnownZero & LHSKnownOne) == 0 && 
994            "Bits known to be one AND zero?"); 
995     
996     // If all of the demanded bits are known zero on one side, return the other.
997     // These bits cannot contribute to the result of the 'or'.
998     if ((DemandedMask & ~LHSKnownOne & RHSKnownZero) == 
999         (DemandedMask & ~LHSKnownOne))
1000       return UpdateValueUsesWith(I, I->getOperand(0));
1001     if ((DemandedMask & ~RHSKnownOne & LHSKnownZero) == 
1002         (DemandedMask & ~RHSKnownOne))
1003       return UpdateValueUsesWith(I, I->getOperand(1));
1004
1005     // If all of the potentially set bits on one side are known to be set on
1006     // the other side, just use the 'other' side.
1007     if ((DemandedMask & (~RHSKnownZero) & LHSKnownOne) == 
1008         (DemandedMask & (~RHSKnownZero)))
1009       return UpdateValueUsesWith(I, I->getOperand(0));
1010     if ((DemandedMask & (~LHSKnownZero) & RHSKnownOne) == 
1011         (DemandedMask & (~LHSKnownZero)))
1012       return UpdateValueUsesWith(I, I->getOperand(1));
1013         
1014     // If the RHS is a constant, see if we can simplify it.
1015     if (ShrinkDemandedConstant(I, 1, DemandedMask))
1016       return UpdateValueUsesWith(I, I);
1017           
1018     // Output known-0 bits are only known if clear in both the LHS & RHS.
1019     RHSKnownZero &= LHSKnownZero;
1020     // Output known-1 are known to be set if set in either the LHS | RHS.
1021     RHSKnownOne |= LHSKnownOne;
1022     break;
1023   case Instruction::Xor: {
1024     if (SimplifyDemandedBits(I->getOperand(1), DemandedMask,
1025                              RHSKnownZero, RHSKnownOne, Depth+1))
1026       return true;
1027     assert((RHSKnownZero & RHSKnownOne) == 0 && 
1028            "Bits known to be one AND zero?"); 
1029     if (SimplifyDemandedBits(I->getOperand(0), DemandedMask, 
1030                              LHSKnownZero, LHSKnownOne, Depth+1))
1031       return true;
1032     assert((LHSKnownZero & LHSKnownOne) == 0 && 
1033            "Bits known to be one AND zero?"); 
1034     
1035     // If all of the demanded bits are known zero on one side, return the other.
1036     // These bits cannot contribute to the result of the 'xor'.
1037     if ((DemandedMask & RHSKnownZero) == DemandedMask)
1038       return UpdateValueUsesWith(I, I->getOperand(0));
1039     if ((DemandedMask & LHSKnownZero) == DemandedMask)
1040       return UpdateValueUsesWith(I, I->getOperand(1));
1041     
1042     // Output known-0 bits are known if clear or set in both the LHS & RHS.
1043     APInt KnownZeroOut = (RHSKnownZero & LHSKnownZero) | 
1044                          (RHSKnownOne & LHSKnownOne);
1045     // Output known-1 are known to be set if set in only one of the LHS, RHS.
1046     APInt KnownOneOut = (RHSKnownZero & LHSKnownOne) | 
1047                         (RHSKnownOne & LHSKnownZero);
1048     
1049     // If all of the demanded bits are known to be zero on one side or the
1050     // other, turn this into an *inclusive* or.
1051     //    e.g. (A & C1)^(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0
1052     if ((DemandedMask & ~RHSKnownZero & ~LHSKnownZero) == 0) {
1053       Instruction *Or =
1054         BinaryOperator::createOr(I->getOperand(0), I->getOperand(1),
1055                                  I->getName());
1056       InsertNewInstBefore(Or, *I);
1057       return UpdateValueUsesWith(I, Or);
1058     }
1059     
1060     // If all of the demanded bits on one side are known, and all of the set
1061     // bits on that side are also known to be set on the other side, turn this
1062     // into an AND, as we know the bits will be cleared.
1063     //    e.g. (X | C1) ^ C2 --> (X | C1) & ~C2 iff (C1&C2) == C2
1064     if ((DemandedMask & (RHSKnownZero|RHSKnownOne)) == DemandedMask) { 
1065       // all known
1066       if ((RHSKnownOne & LHSKnownOne) == RHSKnownOne) {
1067         Constant *AndC = ConstantInt::get(~RHSKnownOne & DemandedMask);
1068         Instruction *And = 
1069           BinaryOperator::createAnd(I->getOperand(0), AndC, "tmp");
1070         InsertNewInstBefore(And, *I);
1071         return UpdateValueUsesWith(I, And);
1072       }
1073     }
1074     
1075     // If the RHS is a constant, see if we can simplify it.
1076     // FIXME: for XOR, we prefer to force bits to 1 if they will make a -1.
1077     if (ShrinkDemandedConstant(I, 1, DemandedMask))
1078       return UpdateValueUsesWith(I, I);
1079     
1080     RHSKnownZero = KnownZeroOut;
1081     RHSKnownOne  = KnownOneOut;
1082     break;
1083   }
1084   case Instruction::Select:
1085     if (SimplifyDemandedBits(I->getOperand(2), DemandedMask,
1086                              RHSKnownZero, RHSKnownOne, Depth+1))
1087       return true;
1088     if (SimplifyDemandedBits(I->getOperand(1), DemandedMask, 
1089                              LHSKnownZero, LHSKnownOne, Depth+1))
1090       return true;
1091     assert((RHSKnownZero & RHSKnownOne) == 0 && 
1092            "Bits known to be one AND zero?"); 
1093     assert((LHSKnownZero & LHSKnownOne) == 0 && 
1094            "Bits known to be one AND zero?"); 
1095     
1096     // If the operands are constants, see if we can simplify them.
1097     if (ShrinkDemandedConstant(I, 1, DemandedMask))
1098       return UpdateValueUsesWith(I, I);
1099     if (ShrinkDemandedConstant(I, 2, DemandedMask))
1100       return UpdateValueUsesWith(I, I);
1101     
1102     // Only known if known in both the LHS and RHS.
1103     RHSKnownOne &= LHSKnownOne;
1104     RHSKnownZero &= LHSKnownZero;
1105     break;
1106   case Instruction::Trunc: {
1107     uint32_t truncBf = 
1108       cast<IntegerType>(I->getOperand(0)->getType())->getBitWidth();
1109     DemandedMask.zext(truncBf);
1110     RHSKnownZero.zext(truncBf);
1111     RHSKnownOne.zext(truncBf);
1112     if (SimplifyDemandedBits(I->getOperand(0), DemandedMask, 
1113                              RHSKnownZero, RHSKnownOne, Depth+1))
1114       return true;
1115     DemandedMask.trunc(BitWidth);
1116     RHSKnownZero.trunc(BitWidth);
1117     RHSKnownOne.trunc(BitWidth);
1118     assert((RHSKnownZero & RHSKnownOne) == 0 && 
1119            "Bits known to be one AND zero?"); 
1120     break;
1121   }
1122   case Instruction::BitCast:
1123     if (!I->getOperand(0)->getType()->isInteger())
1124       return false;
1125       
1126     if (SimplifyDemandedBits(I->getOperand(0), DemandedMask,
1127                              RHSKnownZero, RHSKnownOne, Depth+1))
1128       return true;
1129     assert((RHSKnownZero & RHSKnownOne) == 0 && 
1130            "Bits known to be one AND zero?"); 
1131     break;
1132   case Instruction::ZExt: {
1133     // Compute the bits in the result that are not present in the input.
1134     const IntegerType *SrcTy = cast<IntegerType>(I->getOperand(0)->getType());
1135     uint32_t SrcBitWidth = SrcTy->getBitWidth();
1136     
1137     DemandedMask.trunc(SrcBitWidth);
1138     RHSKnownZero.trunc(SrcBitWidth);
1139     RHSKnownOne.trunc(SrcBitWidth);
1140     if (SimplifyDemandedBits(I->getOperand(0), DemandedMask,
1141                              RHSKnownZero, RHSKnownOne, Depth+1))
1142       return true;
1143     DemandedMask.zext(BitWidth);
1144     RHSKnownZero.zext(BitWidth);
1145     RHSKnownOne.zext(BitWidth);
1146     assert((RHSKnownZero & RHSKnownOne) == 0 && 
1147            "Bits known to be one AND zero?"); 
1148     // The top bits are known to be zero.
1149     RHSKnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - SrcBitWidth);
1150     break;
1151   }
1152   case Instruction::SExt: {
1153     // Compute the bits in the result that are not present in the input.
1154     const IntegerType *SrcTy = cast<IntegerType>(I->getOperand(0)->getType());
1155     uint32_t SrcBitWidth = SrcTy->getBitWidth();
1156     
1157     APInt InputDemandedBits = DemandedMask & 
1158                               APInt::getLowBitsSet(BitWidth, SrcBitWidth);
1159
1160     APInt NewBits(APInt::getHighBitsSet(BitWidth, BitWidth - SrcBitWidth));
1161     // If any of the sign extended bits are demanded, we know that the sign
1162     // bit is demanded.
1163     if ((NewBits & DemandedMask) != 0)
1164       InputDemandedBits.set(SrcBitWidth-1);
1165       
1166     InputDemandedBits.trunc(SrcBitWidth);
1167     RHSKnownZero.trunc(SrcBitWidth);
1168     RHSKnownOne.trunc(SrcBitWidth);
1169     if (SimplifyDemandedBits(I->getOperand(0), InputDemandedBits,
1170                              RHSKnownZero, RHSKnownOne, Depth+1))
1171       return true;
1172     InputDemandedBits.zext(BitWidth);
1173     RHSKnownZero.zext(BitWidth);
1174     RHSKnownOne.zext(BitWidth);
1175     assert((RHSKnownZero & RHSKnownOne) == 0 && 
1176            "Bits known to be one AND zero?"); 
1177       
1178     // If the sign bit of the input is known set or clear, then we know the
1179     // top bits of the result.
1180
1181     // If the input sign bit is known zero, or if the NewBits are not demanded
1182     // convert this into a zero extension.
1183     if (RHSKnownZero[SrcBitWidth-1] || (NewBits & ~DemandedMask) == NewBits)
1184     {
1185       // Convert to ZExt cast
1186       CastInst *NewCast = new ZExtInst(I->getOperand(0), VTy, I->getName(), I);
1187       return UpdateValueUsesWith(I, NewCast);
1188     } else if (RHSKnownOne[SrcBitWidth-1]) {    // Input sign bit known set
1189       RHSKnownOne |= NewBits;
1190     }
1191     break;
1192   }
1193   case Instruction::Add: {
1194     // Figure out what the input bits are.  If the top bits of the and result
1195     // are not demanded, then the add doesn't demand them from its input
1196     // either.
1197     uint32_t NLZ = DemandedMask.countLeadingZeros();
1198       
1199     // If there is a constant on the RHS, there are a variety of xformations
1200     // we can do.
1201     if (ConstantInt *RHS = dyn_cast<ConstantInt>(I->getOperand(1))) {
1202       // If null, this should be simplified elsewhere.  Some of the xforms here
1203       // won't work if the RHS is zero.
1204       if (RHS->isZero())
1205         break;
1206       
1207       // If the top bit of the output is demanded, demand everything from the
1208       // input.  Otherwise, we demand all the input bits except NLZ top bits.
1209       APInt InDemandedBits(APInt::getLowBitsSet(BitWidth, BitWidth - NLZ));
1210
1211       // Find information about known zero/one bits in the input.
1212       if (SimplifyDemandedBits(I->getOperand(0), InDemandedBits, 
1213                                LHSKnownZero, LHSKnownOne, Depth+1))
1214         return true;
1215
1216       // If the RHS of the add has bits set that can't affect the input, reduce
1217       // the constant.
1218       if (ShrinkDemandedConstant(I, 1, InDemandedBits))
1219         return UpdateValueUsesWith(I, I);
1220       
1221       // Avoid excess work.
1222       if (LHSKnownZero == 0 && LHSKnownOne == 0)
1223         break;
1224       
1225       // Turn it into OR if input bits are zero.
1226       if ((LHSKnownZero & RHS->getValue()) == RHS->getValue()) {
1227         Instruction *Or =
1228           BinaryOperator::createOr(I->getOperand(0), I->getOperand(1),
1229                                    I->getName());
1230         InsertNewInstBefore(Or, *I);
1231         return UpdateValueUsesWith(I, Or);
1232       }
1233       
1234       // We can say something about the output known-zero and known-one bits,
1235       // depending on potential carries from the input constant and the
1236       // unknowns.  For example if the LHS is known to have at most the 0x0F0F0
1237       // bits set and the RHS constant is 0x01001, then we know we have a known
1238       // one mask of 0x00001 and a known zero mask of 0xE0F0E.
1239       
1240       // To compute this, we first compute the potential carry bits.  These are
1241       // the bits which may be modified.  I'm not aware of a better way to do
1242       // this scan.
1243       const APInt& RHSVal = RHS->getValue();
1244       APInt CarryBits((~LHSKnownZero + RHSVal) ^ (~LHSKnownZero ^ RHSVal));
1245       
1246       // Now that we know which bits have carries, compute the known-1/0 sets.
1247       
1248       // Bits are known one if they are known zero in one operand and one in the
1249       // other, and there is no input carry.
1250       RHSKnownOne = ((LHSKnownZero & RHSVal) | 
1251                      (LHSKnownOne & ~RHSVal)) & ~CarryBits;
1252       
1253       // Bits are known zero if they are known zero in both operands and there
1254       // is no input carry.
1255       RHSKnownZero = LHSKnownZero & ~RHSVal & ~CarryBits;
1256     } else {
1257       // If the high-bits of this ADD are not demanded, then it does not demand
1258       // the high bits of its LHS or RHS.
1259       if (DemandedMask[BitWidth-1] == 0) {
1260         // Right fill the mask of bits for this ADD to demand the most
1261         // significant bit and all those below it.
1262         APInt DemandedFromOps(APInt::getLowBitsSet(BitWidth, BitWidth-NLZ));
1263         if (SimplifyDemandedBits(I->getOperand(0), DemandedFromOps,
1264                                  LHSKnownZero, LHSKnownOne, Depth+1))
1265           return true;
1266         if (SimplifyDemandedBits(I->getOperand(1), DemandedFromOps,
1267                                  LHSKnownZero, LHSKnownOne, Depth+1))
1268           return true;
1269       }
1270     }
1271     break;
1272   }
1273   case Instruction::Sub:
1274     // If the high-bits of this SUB are not demanded, then it does not demand
1275     // the high bits of its LHS or RHS.
1276     if (DemandedMask[BitWidth-1] == 0) {
1277       // Right fill the mask of bits for this SUB to demand the most
1278       // significant bit and all those below it.
1279       uint32_t NLZ = DemandedMask.countLeadingZeros();
1280       APInt DemandedFromOps(APInt::getLowBitsSet(BitWidth, BitWidth-NLZ));
1281       if (SimplifyDemandedBits(I->getOperand(0), DemandedFromOps,
1282                                LHSKnownZero, LHSKnownOne, Depth+1))
1283         return true;
1284       if (SimplifyDemandedBits(I->getOperand(1), DemandedFromOps,
1285                                LHSKnownZero, LHSKnownOne, Depth+1))
1286         return true;
1287     }
1288     break;
1289   case Instruction::Shl:
1290     if (ConstantInt *SA = dyn_cast<ConstantInt>(I->getOperand(1))) {
1291       uint64_t ShiftAmt = SA->getLimitedValue(BitWidth);
1292       APInt DemandedMaskIn(DemandedMask.lshr(ShiftAmt));
1293       if (SimplifyDemandedBits(I->getOperand(0), DemandedMaskIn, 
1294                                RHSKnownZero, RHSKnownOne, Depth+1))
1295         return true;
1296       assert((RHSKnownZero & RHSKnownOne) == 0 && 
1297              "Bits known to be one AND zero?"); 
1298       RHSKnownZero <<= ShiftAmt;
1299       RHSKnownOne  <<= ShiftAmt;
1300       // low bits known zero.
1301       if (ShiftAmt)
1302         RHSKnownZero |= APInt::getLowBitsSet(BitWidth, ShiftAmt);
1303     }
1304     break;
1305   case Instruction::LShr:
1306     // For a logical shift right
1307     if (ConstantInt *SA = dyn_cast<ConstantInt>(I->getOperand(1))) {
1308       uint64_t ShiftAmt = SA->getLimitedValue(BitWidth);
1309       
1310       // Unsigned shift right.
1311       APInt DemandedMaskIn(DemandedMask.shl(ShiftAmt));
1312       if (SimplifyDemandedBits(I->getOperand(0), DemandedMaskIn,
1313                                RHSKnownZero, RHSKnownOne, Depth+1))
1314         return true;
1315       assert((RHSKnownZero & RHSKnownOne) == 0 && 
1316              "Bits known to be one AND zero?"); 
1317       RHSKnownZero = APIntOps::lshr(RHSKnownZero, ShiftAmt);
1318       RHSKnownOne  = APIntOps::lshr(RHSKnownOne, ShiftAmt);
1319       if (ShiftAmt) {
1320         // Compute the new bits that are at the top now.
1321         APInt HighBits(APInt::getHighBitsSet(BitWidth, ShiftAmt));
1322         RHSKnownZero |= HighBits;  // high bits known zero.
1323       }
1324     }
1325     break;
1326   case Instruction::AShr:
1327     // If this is an arithmetic shift right and only the low-bit is set, we can
1328     // always convert this into a logical shr, even if the shift amount is
1329     // variable.  The low bit of the shift cannot be an input sign bit unless
1330     // the shift amount is >= the size of the datatype, which is undefined.
1331     if (DemandedMask == 1) {
1332       // Perform the logical shift right.
1333       Value *NewVal = BinaryOperator::createLShr(
1334                         I->getOperand(0), I->getOperand(1), I->getName());
1335       InsertNewInstBefore(cast<Instruction>(NewVal), *I);
1336       return UpdateValueUsesWith(I, NewVal);
1337     }    
1338     
1339     if (ConstantInt *SA = dyn_cast<ConstantInt>(I->getOperand(1))) {
1340       uint32_t ShiftAmt = SA->getLimitedValue(BitWidth);
1341       
1342       // Signed shift right.
1343       APInt DemandedMaskIn(DemandedMask.shl(ShiftAmt));
1344       if (SimplifyDemandedBits(I->getOperand(0),
1345                                DemandedMaskIn,
1346                                RHSKnownZero, RHSKnownOne, Depth+1))
1347         return true;
1348       assert((RHSKnownZero & RHSKnownOne) == 0 && 
1349              "Bits known to be one AND zero?"); 
1350       // Compute the new bits that are at the top now.
1351       APInt HighBits(APInt::getHighBitsSet(BitWidth, ShiftAmt));
1352       RHSKnownZero = APIntOps::lshr(RHSKnownZero, ShiftAmt);
1353       RHSKnownOne  = APIntOps::lshr(RHSKnownOne, ShiftAmt);
1354         
1355       // Handle the sign bits.
1356       APInt SignBit(APInt::getSignBit(BitWidth));
1357       // Adjust to where it is now in the mask.
1358       SignBit = APIntOps::lshr(SignBit, ShiftAmt);  
1359         
1360       // If the input sign bit is known to be zero, or if none of the top bits
1361       // are demanded, turn this into an unsigned shift right.
1362       if (RHSKnownZero[BitWidth-ShiftAmt-1] || 
1363           (HighBits & ~DemandedMask) == HighBits) {
1364         // Perform the logical shift right.
1365         Value *NewVal = BinaryOperator::createLShr(
1366                           I->getOperand(0), SA, I->getName());
1367         InsertNewInstBefore(cast<Instruction>(NewVal), *I);
1368         return UpdateValueUsesWith(I, NewVal);
1369       } else if ((RHSKnownOne & SignBit) != 0) { // New bits are known one.
1370         RHSKnownOne |= HighBits;
1371       }
1372     }
1373     break;
1374   }
1375   
1376   // If the client is only demanding bits that we know, return the known
1377   // constant.
1378   if ((DemandedMask & (RHSKnownZero|RHSKnownOne)) == DemandedMask)
1379     return UpdateValueUsesWith(I, ConstantInt::get(RHSKnownOne));
1380   return false;
1381 }
1382
1383
1384 /// SimplifyDemandedVectorElts - The specified value producecs a vector with
1385 /// 64 or fewer elements.  DemandedElts contains the set of elements that are
1386 /// actually used by the caller.  This method analyzes which elements of the
1387 /// operand are undef and returns that information in UndefElts.
1388 ///
1389 /// If the information about demanded elements can be used to simplify the
1390 /// operation, the operation is simplified, then the resultant value is
1391 /// returned.  This returns null if no change was made.
1392 Value *InstCombiner::SimplifyDemandedVectorElts(Value *V, uint64_t DemandedElts,
1393                                                 uint64_t &UndefElts,
1394                                                 unsigned Depth) {
1395   unsigned VWidth = cast<VectorType>(V->getType())->getNumElements();
1396   assert(VWidth <= 64 && "Vector too wide to analyze!");
1397   uint64_t EltMask = ~0ULL >> (64-VWidth);
1398   assert(DemandedElts != EltMask && (DemandedElts & ~EltMask) == 0 &&
1399          "Invalid DemandedElts!");
1400
1401   if (isa<UndefValue>(V)) {
1402     // If the entire vector is undefined, just return this info.
1403     UndefElts = EltMask;
1404     return 0;
1405   } else if (DemandedElts == 0) { // If nothing is demanded, provide undef.
1406     UndefElts = EltMask;
1407     return UndefValue::get(V->getType());
1408   }
1409   
1410   UndefElts = 0;
1411   if (ConstantVector *CP = dyn_cast<ConstantVector>(V)) {
1412     const Type *EltTy = cast<VectorType>(V->getType())->getElementType();
1413     Constant *Undef = UndefValue::get(EltTy);
1414
1415     std::vector<Constant*> Elts;
1416     for (unsigned i = 0; i != VWidth; ++i)
1417       if (!(DemandedElts & (1ULL << i))) {   // If not demanded, set to undef.
1418         Elts.push_back(Undef);
1419         UndefElts |= (1ULL << i);
1420       } else if (isa<UndefValue>(CP->getOperand(i))) {   // Already undef.
1421         Elts.push_back(Undef);
1422         UndefElts |= (1ULL << i);
1423       } else {                               // Otherwise, defined.
1424         Elts.push_back(CP->getOperand(i));
1425       }
1426         
1427     // If we changed the constant, return it.
1428     Constant *NewCP = ConstantVector::get(Elts);
1429     return NewCP != CP ? NewCP : 0;
1430   } else if (isa<ConstantAggregateZero>(V)) {
1431     // Simplify the CAZ to a ConstantVector where the non-demanded elements are
1432     // set to undef.
1433     const Type *EltTy = cast<VectorType>(V->getType())->getElementType();
1434     Constant *Zero = Constant::getNullValue(EltTy);
1435     Constant *Undef = UndefValue::get(EltTy);
1436     std::vector<Constant*> Elts;
1437     for (unsigned i = 0; i != VWidth; ++i)
1438       Elts.push_back((DemandedElts & (1ULL << i)) ? Zero : Undef);
1439     UndefElts = DemandedElts ^ EltMask;
1440     return ConstantVector::get(Elts);
1441   }
1442   
1443   if (!V->hasOneUse()) {    // Other users may use these bits.
1444     if (Depth != 0) {       // Not at the root.
1445       // TODO: Just compute the UndefElts information recursively.
1446       return false;
1447     }
1448     return false;
1449   } else if (Depth == 10) {        // Limit search depth.
1450     return false;
1451   }
1452   
1453   Instruction *I = dyn_cast<Instruction>(V);
1454   if (!I) return false;        // Only analyze instructions.
1455   
1456   bool MadeChange = false;
1457   uint64_t UndefElts2;
1458   Value *TmpV;
1459   switch (I->getOpcode()) {
1460   default: break;
1461     
1462   case Instruction::InsertElement: {
1463     // If this is a variable index, we don't know which element it overwrites.
1464     // demand exactly the same input as we produce.
1465     ConstantInt *Idx = dyn_cast<ConstantInt>(I->getOperand(2));
1466     if (Idx == 0) {
1467       // Note that we can't propagate undef elt info, because we don't know
1468       // which elt is getting updated.
1469       TmpV = SimplifyDemandedVectorElts(I->getOperand(0), DemandedElts,
1470                                         UndefElts2, Depth+1);
1471       if (TmpV) { I->setOperand(0, TmpV); MadeChange = true; }
1472       break;
1473     }
1474     
1475     // If this is inserting an element that isn't demanded, remove this
1476     // insertelement.
1477     unsigned IdxNo = Idx->getZExtValue();
1478     if (IdxNo >= VWidth || (DemandedElts & (1ULL << IdxNo)) == 0)
1479       return AddSoonDeadInstToWorklist(*I, 0);
1480     
1481     // Otherwise, the element inserted overwrites whatever was there, so the
1482     // input demanded set is simpler than the output set.
1483     TmpV = SimplifyDemandedVectorElts(I->getOperand(0),
1484                                       DemandedElts & ~(1ULL << IdxNo),
1485                                       UndefElts, Depth+1);
1486     if (TmpV) { I->setOperand(0, TmpV); MadeChange = true; }
1487
1488     // The inserted element is defined.
1489     UndefElts |= 1ULL << IdxNo;
1490     break;
1491   }
1492     
1493   case Instruction::And:
1494   case Instruction::Or:
1495   case Instruction::Xor:
1496   case Instruction::Add:
1497   case Instruction::Sub:
1498   case Instruction::Mul:
1499     // div/rem demand all inputs, because they don't want divide by zero.
1500     TmpV = SimplifyDemandedVectorElts(I->getOperand(0), DemandedElts,
1501                                       UndefElts, Depth+1);
1502     if (TmpV) { I->setOperand(0, TmpV); MadeChange = true; }
1503     TmpV = SimplifyDemandedVectorElts(I->getOperand(1), DemandedElts,
1504                                       UndefElts2, Depth+1);
1505     if (TmpV) { I->setOperand(1, TmpV); MadeChange = true; }
1506       
1507     // Output elements are undefined if both are undefined.  Consider things
1508     // like undef&0.  The result is known zero, not undef.
1509     UndefElts &= UndefElts2;
1510     break;
1511     
1512   case Instruction::Call: {
1513     IntrinsicInst *II = dyn_cast<IntrinsicInst>(I);
1514     if (!II) break;
1515     switch (II->getIntrinsicID()) {
1516     default: break;
1517       
1518     // Binary vector operations that work column-wise.  A dest element is a
1519     // function of the corresponding input elements from the two inputs.
1520     case Intrinsic::x86_sse_sub_ss:
1521     case Intrinsic::x86_sse_mul_ss:
1522     case Intrinsic::x86_sse_min_ss:
1523     case Intrinsic::x86_sse_max_ss:
1524     case Intrinsic::x86_sse2_sub_sd:
1525     case Intrinsic::x86_sse2_mul_sd:
1526     case Intrinsic::x86_sse2_min_sd:
1527     case Intrinsic::x86_sse2_max_sd:
1528       TmpV = SimplifyDemandedVectorElts(II->getOperand(1), DemandedElts,
1529                                         UndefElts, Depth+1);
1530       if (TmpV) { II->setOperand(1, TmpV); MadeChange = true; }
1531       TmpV = SimplifyDemandedVectorElts(II->getOperand(2), DemandedElts,
1532                                         UndefElts2, Depth+1);
1533       if (TmpV) { II->setOperand(2, TmpV); MadeChange = true; }
1534
1535       // If only the low elt is demanded and this is a scalarizable intrinsic,
1536       // scalarize it now.
1537       if (DemandedElts == 1) {
1538         switch (II->getIntrinsicID()) {
1539         default: break;
1540         case Intrinsic::x86_sse_sub_ss:
1541         case Intrinsic::x86_sse_mul_ss:
1542         case Intrinsic::x86_sse2_sub_sd:
1543         case Intrinsic::x86_sse2_mul_sd:
1544           // TODO: Lower MIN/MAX/ABS/etc
1545           Value *LHS = II->getOperand(1);
1546           Value *RHS = II->getOperand(2);
1547           // Extract the element as scalars.
1548           LHS = InsertNewInstBefore(new ExtractElementInst(LHS, 0U,"tmp"), *II);
1549           RHS = InsertNewInstBefore(new ExtractElementInst(RHS, 0U,"tmp"), *II);
1550           
1551           switch (II->getIntrinsicID()) {
1552           default: assert(0 && "Case stmts out of sync!");
1553           case Intrinsic::x86_sse_sub_ss:
1554           case Intrinsic::x86_sse2_sub_sd:
1555             TmpV = InsertNewInstBefore(BinaryOperator::createSub(LHS, RHS,
1556                                                         II->getName()), *II);
1557             break;
1558           case Intrinsic::x86_sse_mul_ss:
1559           case Intrinsic::x86_sse2_mul_sd:
1560             TmpV = InsertNewInstBefore(BinaryOperator::createMul(LHS, RHS,
1561                                                          II->getName()), *II);
1562             break;
1563           }
1564           
1565           Instruction *New =
1566             new InsertElementInst(UndefValue::get(II->getType()), TmpV, 0U,
1567                                   II->getName());
1568           InsertNewInstBefore(New, *II);
1569           AddSoonDeadInstToWorklist(*II, 0);
1570           return New;
1571         }            
1572       }
1573         
1574       // Output elements are undefined if both are undefined.  Consider things
1575       // like undef&0.  The result is known zero, not undef.
1576       UndefElts &= UndefElts2;
1577       break;
1578     }
1579     break;
1580   }
1581   }
1582   return MadeChange ? I : 0;
1583 }
1584
1585 /// @returns true if the specified compare instruction is
1586 /// true when both operands are equal...
1587 /// @brief Determine if the ICmpInst returns true if both operands are equal
1588 static bool isTrueWhenEqual(ICmpInst &ICI) {
1589   ICmpInst::Predicate pred = ICI.getPredicate();
1590   return pred == ICmpInst::ICMP_EQ  || pred == ICmpInst::ICMP_UGE ||
1591          pred == ICmpInst::ICMP_SGE || pred == ICmpInst::ICMP_ULE ||
1592          pred == ICmpInst::ICMP_SLE;
1593 }
1594
1595 /// AssociativeOpt - Perform an optimization on an associative operator.  This
1596 /// function is designed to check a chain of associative operators for a
1597 /// potential to apply a certain optimization.  Since the optimization may be
1598 /// applicable if the expression was reassociated, this checks the chain, then
1599 /// reassociates the expression as necessary to expose the optimization
1600 /// opportunity.  This makes use of a special Functor, which must define
1601 /// 'shouldApply' and 'apply' methods.
1602 ///
1603 template<typename Functor>
1604 Instruction *AssociativeOpt(BinaryOperator &Root, const Functor &F) {
1605   unsigned Opcode = Root.getOpcode();
1606   Value *LHS = Root.getOperand(0);
1607
1608   // Quick check, see if the immediate LHS matches...
1609   if (F.shouldApply(LHS))
1610     return F.apply(Root);
1611
1612   // Otherwise, if the LHS is not of the same opcode as the root, return.
1613   Instruction *LHSI = dyn_cast<Instruction>(LHS);
1614   while (LHSI && LHSI->getOpcode() == Opcode && LHSI->hasOneUse()) {
1615     // Should we apply this transform to the RHS?
1616     bool ShouldApply = F.shouldApply(LHSI->getOperand(1));
1617
1618     // If not to the RHS, check to see if we should apply to the LHS...
1619     if (!ShouldApply && F.shouldApply(LHSI->getOperand(0))) {
1620       cast<BinaryOperator>(LHSI)->swapOperands();   // Make the LHS the RHS
1621       ShouldApply = true;
1622     }
1623
1624     // If the functor wants to apply the optimization to the RHS of LHSI,
1625     // reassociate the expression from ((? op A) op B) to (? op (A op B))
1626     if (ShouldApply) {
1627       BasicBlock *BB = Root.getParent();
1628
1629       // Now all of the instructions are in the current basic block, go ahead
1630       // and perform the reassociation.
1631       Instruction *TmpLHSI = cast<Instruction>(Root.getOperand(0));
1632
1633       // First move the selected RHS to the LHS of the root...
1634       Root.setOperand(0, LHSI->getOperand(1));
1635
1636       // Make what used to be the LHS of the root be the user of the root...
1637       Value *ExtraOperand = TmpLHSI->getOperand(1);
1638       if (&Root == TmpLHSI) {
1639         Root.replaceAllUsesWith(Constant::getNullValue(TmpLHSI->getType()));
1640         return 0;
1641       }
1642       Root.replaceAllUsesWith(TmpLHSI);          // Users now use TmpLHSI
1643       TmpLHSI->setOperand(1, &Root);             // TmpLHSI now uses the root
1644       TmpLHSI->getParent()->getInstList().remove(TmpLHSI);
1645       BasicBlock::iterator ARI = &Root; ++ARI;
1646       BB->getInstList().insert(ARI, TmpLHSI);    // Move TmpLHSI to after Root
1647       ARI = Root;
1648
1649       // Now propagate the ExtraOperand down the chain of instructions until we
1650       // get to LHSI.
1651       while (TmpLHSI != LHSI) {
1652         Instruction *NextLHSI = cast<Instruction>(TmpLHSI->getOperand(0));
1653         // Move the instruction to immediately before the chain we are
1654         // constructing to avoid breaking dominance properties.
1655         NextLHSI->getParent()->getInstList().remove(NextLHSI);
1656         BB->getInstList().insert(ARI, NextLHSI);
1657         ARI = NextLHSI;
1658
1659         Value *NextOp = NextLHSI->getOperand(1);
1660         NextLHSI->setOperand(1, ExtraOperand);
1661         TmpLHSI = NextLHSI;
1662         ExtraOperand = NextOp;
1663       }
1664
1665       // Now that the instructions are reassociated, have the functor perform
1666       // the transformation...
1667       return F.apply(Root);
1668     }
1669
1670     LHSI = dyn_cast<Instruction>(LHSI->getOperand(0));
1671   }
1672   return 0;
1673 }
1674
1675
1676 // AddRHS - Implements: X + X --> X << 1
1677 struct AddRHS {
1678   Value *RHS;
1679   AddRHS(Value *rhs) : RHS(rhs) {}
1680   bool shouldApply(Value *LHS) const { return LHS == RHS; }
1681   Instruction *apply(BinaryOperator &Add) const {
1682     return BinaryOperator::createShl(Add.getOperand(0),
1683                                   ConstantInt::get(Add.getType(), 1));
1684   }
1685 };
1686
1687 // AddMaskingAnd - Implements (A & C1)+(B & C2) --> (A & C1)|(B & C2)
1688 //                 iff C1&C2 == 0
1689 struct AddMaskingAnd {
1690   Constant *C2;
1691   AddMaskingAnd(Constant *c) : C2(c) {}
1692   bool shouldApply(Value *LHS) const {
1693     ConstantInt *C1;
1694     return match(LHS, m_And(m_Value(), m_ConstantInt(C1))) &&
1695            ConstantExpr::getAnd(C1, C2)->isNullValue();
1696   }
1697   Instruction *apply(BinaryOperator &Add) const {
1698     return BinaryOperator::createOr(Add.getOperand(0), Add.getOperand(1));
1699   }
1700 };
1701
1702 static Value *FoldOperationIntoSelectOperand(Instruction &I, Value *SO,
1703                                              InstCombiner *IC) {
1704   if (CastInst *CI = dyn_cast<CastInst>(&I)) {
1705     if (Constant *SOC = dyn_cast<Constant>(SO))
1706       return ConstantExpr::getCast(CI->getOpcode(), SOC, I.getType());
1707
1708     return IC->InsertNewInstBefore(CastInst::create(
1709           CI->getOpcode(), SO, I.getType(), SO->getName() + ".cast"), I);
1710   }
1711
1712   // Figure out if the constant is the left or the right argument.
1713   bool ConstIsRHS = isa<Constant>(I.getOperand(1));
1714   Constant *ConstOperand = cast<Constant>(I.getOperand(ConstIsRHS));
1715
1716   if (Constant *SOC = dyn_cast<Constant>(SO)) {
1717     if (ConstIsRHS)
1718       return ConstantExpr::get(I.getOpcode(), SOC, ConstOperand);
1719     return ConstantExpr::get(I.getOpcode(), ConstOperand, SOC);
1720   }
1721
1722   Value *Op0 = SO, *Op1 = ConstOperand;
1723   if (!ConstIsRHS)
1724     std::swap(Op0, Op1);
1725   Instruction *New;
1726   if (BinaryOperator *BO = dyn_cast<BinaryOperator>(&I))
1727     New = BinaryOperator::create(BO->getOpcode(), Op0, Op1,SO->getName()+".op");
1728   else if (CmpInst *CI = dyn_cast<CmpInst>(&I))
1729     New = CmpInst::create(CI->getOpcode(), CI->getPredicate(), Op0, Op1, 
1730                           SO->getName()+".cmp");
1731   else {
1732     assert(0 && "Unknown binary instruction type!");
1733     abort();
1734   }
1735   return IC->InsertNewInstBefore(New, I);
1736 }
1737
1738 // FoldOpIntoSelect - Given an instruction with a select as one operand and a
1739 // constant as the other operand, try to fold the binary operator into the
1740 // select arguments.  This also works for Cast instructions, which obviously do
1741 // not have a second operand.
1742 static Instruction *FoldOpIntoSelect(Instruction &Op, SelectInst *SI,
1743                                      InstCombiner *IC) {
1744   // Don't modify shared select instructions
1745   if (!SI->hasOneUse()) return 0;
1746   Value *TV = SI->getOperand(1);
1747   Value *FV = SI->getOperand(2);
1748
1749   if (isa<Constant>(TV) || isa<Constant>(FV)) {
1750     // Bool selects with constant operands can be folded to logical ops.
1751     if (SI->getType() == Type::Int1Ty) return 0;
1752
1753     Value *SelectTrueVal = FoldOperationIntoSelectOperand(Op, TV, IC);
1754     Value *SelectFalseVal = FoldOperationIntoSelectOperand(Op, FV, IC);
1755
1756     return new SelectInst(SI->getCondition(), SelectTrueVal,
1757                           SelectFalseVal);
1758   }
1759   return 0;
1760 }
1761
1762
1763 /// FoldOpIntoPhi - Given a binary operator or cast instruction which has a PHI
1764 /// node as operand #0, see if we can fold the instruction into the PHI (which
1765 /// is only possible if all operands to the PHI are constants).
1766 Instruction *InstCombiner::FoldOpIntoPhi(Instruction &I) {
1767   PHINode *PN = cast<PHINode>(I.getOperand(0));
1768   unsigned NumPHIValues = PN->getNumIncomingValues();
1769   if (!PN->hasOneUse() || NumPHIValues == 0) return 0;
1770
1771   // Check to see if all of the operands of the PHI are constants.  If there is
1772   // one non-constant value, remember the BB it is.  If there is more than one
1773   // or if *it* is a PHI, bail out.
1774   BasicBlock *NonConstBB = 0;
1775   for (unsigned i = 0; i != NumPHIValues; ++i)
1776     if (!isa<Constant>(PN->getIncomingValue(i))) {
1777       if (NonConstBB) return 0;  // More than one non-const value.
1778       if (isa<PHINode>(PN->getIncomingValue(i))) return 0;  // Itself a phi.
1779       NonConstBB = PN->getIncomingBlock(i);
1780       
1781       // If the incoming non-constant value is in I's block, we have an infinite
1782       // loop.
1783       if (NonConstBB == I.getParent())
1784         return 0;
1785     }
1786   
1787   // If there is exactly one non-constant value, we can insert a copy of the
1788   // operation in that block.  However, if this is a critical edge, we would be
1789   // inserting the computation one some other paths (e.g. inside a loop).  Only
1790   // do this if the pred block is unconditionally branching into the phi block.
1791   if (NonConstBB) {
1792     BranchInst *BI = dyn_cast<BranchInst>(NonConstBB->getTerminator());
1793     if (!BI || !BI->isUnconditional()) return 0;
1794   }
1795
1796   // Okay, we can do the transformation: create the new PHI node.
1797   PHINode *NewPN = new PHINode(I.getType(), "");
1798   NewPN->reserveOperandSpace(PN->getNumOperands()/2);
1799   InsertNewInstBefore(NewPN, *PN);
1800   NewPN->takeName(PN);
1801
1802   // Next, add all of the operands to the PHI.
1803   if (I.getNumOperands() == 2) {
1804     Constant *C = cast<Constant>(I.getOperand(1));
1805     for (unsigned i = 0; i != NumPHIValues; ++i) {
1806       Value *InV;
1807       if (Constant *InC = dyn_cast<Constant>(PN->getIncomingValue(i))) {
1808         if (CmpInst *CI = dyn_cast<CmpInst>(&I))
1809           InV = ConstantExpr::getCompare(CI->getPredicate(), InC, C);
1810         else
1811           InV = ConstantExpr::get(I.getOpcode(), InC, C);
1812       } else {
1813         assert(PN->getIncomingBlock(i) == NonConstBB);
1814         if (BinaryOperator *BO = dyn_cast<BinaryOperator>(&I)) 
1815           InV = BinaryOperator::create(BO->getOpcode(),
1816                                        PN->getIncomingValue(i), C, "phitmp",
1817                                        NonConstBB->getTerminator());
1818         else if (CmpInst *CI = dyn_cast<CmpInst>(&I))
1819           InV = CmpInst::create(CI->getOpcode(), 
1820                                 CI->getPredicate(),
1821                                 PN->getIncomingValue(i), C, "phitmp",
1822                                 NonConstBB->getTerminator());
1823         else
1824           assert(0 && "Unknown binop!");
1825         
1826         AddToWorkList(cast<Instruction>(InV));
1827       }
1828       NewPN->addIncoming(InV, PN->getIncomingBlock(i));
1829     }
1830   } else { 
1831     CastInst *CI = cast<CastInst>(&I);
1832     const Type *RetTy = CI->getType();
1833     for (unsigned i = 0; i != NumPHIValues; ++i) {
1834       Value *InV;
1835       if (Constant *InC = dyn_cast<Constant>(PN->getIncomingValue(i))) {
1836         InV = ConstantExpr::getCast(CI->getOpcode(), InC, RetTy);
1837       } else {
1838         assert(PN->getIncomingBlock(i) == NonConstBB);
1839         InV = CastInst::create(CI->getOpcode(), PN->getIncomingValue(i), 
1840                                I.getType(), "phitmp", 
1841                                NonConstBB->getTerminator());
1842         AddToWorkList(cast<Instruction>(InV));
1843       }
1844       NewPN->addIncoming(InV, PN->getIncomingBlock(i));
1845     }
1846   }
1847   return ReplaceInstUsesWith(I, NewPN);
1848 }
1849
1850 Instruction *InstCombiner::visitAdd(BinaryOperator &I) {
1851   bool Changed = SimplifyCommutative(I);
1852   Value *LHS = I.getOperand(0), *RHS = I.getOperand(1);
1853
1854   if (Constant *RHSC = dyn_cast<Constant>(RHS)) {
1855     // X + undef -> undef
1856     if (isa<UndefValue>(RHS))
1857       return ReplaceInstUsesWith(I, RHS);
1858
1859     // X + 0 --> X
1860     if (!I.getType()->isFPOrFPVector()) { // NOTE: -0 + +0 = +0.
1861       if (RHSC->isNullValue())
1862         return ReplaceInstUsesWith(I, LHS);
1863     } else if (ConstantFP *CFP = dyn_cast<ConstantFP>(RHSC)) {
1864       if (CFP->isExactlyValue(-0.0))
1865         return ReplaceInstUsesWith(I, LHS);
1866     }
1867
1868     if (ConstantInt *CI = dyn_cast<ConstantInt>(RHSC)) {
1869       // X + (signbit) --> X ^ signbit
1870       const APInt& Val = CI->getValue();
1871       uint32_t BitWidth = Val.getBitWidth();
1872       if (Val == APInt::getSignBit(BitWidth))
1873         return BinaryOperator::createXor(LHS, RHS);
1874       
1875       // See if SimplifyDemandedBits can simplify this.  This handles stuff like
1876       // (X & 254)+1 -> (X&254)|1
1877       if (!isa<VectorType>(I.getType())) {
1878         APInt KnownZero(BitWidth, 0), KnownOne(BitWidth, 0);
1879         if (SimplifyDemandedBits(&I, APInt::getAllOnesValue(BitWidth),
1880                                  KnownZero, KnownOne))
1881           return &I;
1882       }
1883     }
1884
1885     if (isa<PHINode>(LHS))
1886       if (Instruction *NV = FoldOpIntoPhi(I))
1887         return NV;
1888     
1889     ConstantInt *XorRHS = 0;
1890     Value *XorLHS = 0;
1891     if (isa<ConstantInt>(RHSC) &&
1892         match(LHS, m_Xor(m_Value(XorLHS), m_ConstantInt(XorRHS)))) {
1893       uint32_t TySizeBits = I.getType()->getPrimitiveSizeInBits();
1894       const APInt& RHSVal = cast<ConstantInt>(RHSC)->getValue();
1895       
1896       uint32_t Size = TySizeBits / 2;
1897       APInt C0080Val(APInt(TySizeBits, 1ULL).shl(Size - 1));
1898       APInt CFF80Val(-C0080Val);
1899       do {
1900         if (TySizeBits > Size) {
1901           // If we have ADD(XOR(AND(X, 0xFF), 0x80), 0xF..F80), it's a sext.
1902           // If we have ADD(XOR(AND(X, 0xFF), 0xF..F80), 0x80), it's a sext.
1903           if ((RHSVal == CFF80Val && XorRHS->getValue() == C0080Val) ||
1904               (RHSVal == C0080Val && XorRHS->getValue() == CFF80Val)) {
1905             // This is a sign extend if the top bits are known zero.
1906             if (!MaskedValueIsZero(XorLHS, 
1907                    APInt::getHighBitsSet(TySizeBits, TySizeBits - Size)))
1908               Size = 0;  // Not a sign ext, but can't be any others either.
1909             break;
1910           }
1911         }
1912         Size >>= 1;
1913         C0080Val = APIntOps::lshr(C0080Val, Size);
1914         CFF80Val = APIntOps::ashr(CFF80Val, Size);
1915       } while (Size >= 1);
1916       
1917       // FIXME: This shouldn't be necessary. When the backends can handle types
1918       // with funny bit widths then this whole cascade of if statements should
1919       // be removed. It is just here to get the size of the "middle" type back
1920       // up to something that the back ends can handle.
1921       const Type *MiddleType = 0;
1922       switch (Size) {
1923         default: break;
1924         case 32: MiddleType = Type::Int32Ty; break;
1925         case 16: MiddleType = Type::Int16Ty; break;
1926         case  8: MiddleType = Type::Int8Ty; break;
1927       }
1928       if (MiddleType) {
1929         Instruction *NewTrunc = new TruncInst(XorLHS, MiddleType, "sext");
1930         InsertNewInstBefore(NewTrunc, I);
1931         return new SExtInst(NewTrunc, I.getType(), I.getName());
1932       }
1933     }
1934   }
1935
1936   // X + X --> X << 1
1937   if (I.getType()->isInteger() && I.getType() != Type::Int1Ty) {
1938     if (Instruction *Result = AssociativeOpt(I, AddRHS(RHS))) return Result;
1939
1940     if (Instruction *RHSI = dyn_cast<Instruction>(RHS)) {
1941       if (RHSI->getOpcode() == Instruction::Sub)
1942         if (LHS == RHSI->getOperand(1))                   // A + (B - A) --> B
1943           return ReplaceInstUsesWith(I, RHSI->getOperand(0));
1944     }
1945     if (Instruction *LHSI = dyn_cast<Instruction>(LHS)) {
1946       if (LHSI->getOpcode() == Instruction::Sub)
1947         if (RHS == LHSI->getOperand(1))                   // (B - A) + A --> B
1948           return ReplaceInstUsesWith(I, LHSI->getOperand(0));
1949     }
1950   }
1951
1952   // -A + B  -->  B - A
1953   if (Value *V = dyn_castNegVal(LHS))
1954     return BinaryOperator::createSub(RHS, V);
1955
1956   // A + -B  -->  A - B
1957   if (!isa<Constant>(RHS))
1958     if (Value *V = dyn_castNegVal(RHS))
1959       return BinaryOperator::createSub(LHS, V);
1960
1961
1962   ConstantInt *C2;
1963   if (Value *X = dyn_castFoldableMul(LHS, C2)) {
1964     if (X == RHS)   // X*C + X --> X * (C+1)
1965       return BinaryOperator::createMul(RHS, AddOne(C2));
1966
1967     // X*C1 + X*C2 --> X * (C1+C2)
1968     ConstantInt *C1;
1969     if (X == dyn_castFoldableMul(RHS, C1))
1970       return BinaryOperator::createMul(X, Add(C1, C2));
1971   }
1972
1973   // X + X*C --> X * (C+1)
1974   if (dyn_castFoldableMul(RHS, C2) == LHS)
1975     return BinaryOperator::createMul(LHS, AddOne(C2));
1976
1977   // X + ~X --> -1   since   ~X = -X-1
1978   if (dyn_castNotVal(LHS) == RHS ||
1979       dyn_castNotVal(RHS) == LHS)
1980     return ReplaceInstUsesWith(I, ConstantInt::getAllOnesValue(I.getType()));
1981   
1982
1983   // (A & C1)+(B & C2) --> (A & C1)|(B & C2) iff C1&C2 == 0
1984   if (match(RHS, m_And(m_Value(), m_ConstantInt(C2))))
1985     if (Instruction *R = AssociativeOpt(I, AddMaskingAnd(C2)))
1986       return R;
1987
1988   if (ConstantInt *CRHS = dyn_cast<ConstantInt>(RHS)) {
1989     Value *X = 0;
1990     if (match(LHS, m_Not(m_Value(X))))    // ~X + C --> (C-1) - X
1991       return BinaryOperator::createSub(SubOne(CRHS), X);
1992
1993     // (X & FF00) + xx00  -> (X+xx00) & FF00
1994     if (LHS->hasOneUse() && match(LHS, m_And(m_Value(X), m_ConstantInt(C2)))) {
1995       Constant *Anded = And(CRHS, C2);
1996       if (Anded == CRHS) {
1997         // See if all bits from the first bit set in the Add RHS up are included
1998         // in the mask.  First, get the rightmost bit.
1999         const APInt& AddRHSV = CRHS->getValue();
2000
2001         // Form a mask of all bits from the lowest bit added through the top.
2002         APInt AddRHSHighBits(~((AddRHSV & -AddRHSV)-1));
2003
2004         // See if the and mask includes all of these bits.
2005         APInt AddRHSHighBitsAnd(AddRHSHighBits & C2->getValue());
2006
2007         if (AddRHSHighBits == AddRHSHighBitsAnd) {
2008           // Okay, the xform is safe.  Insert the new add pronto.
2009           Value *NewAdd = InsertNewInstBefore(BinaryOperator::createAdd(X, CRHS,
2010                                                             LHS->getName()), I);
2011           return BinaryOperator::createAnd(NewAdd, C2);
2012         }
2013       }
2014     }
2015
2016     // Try to fold constant add into select arguments.
2017     if (SelectInst *SI = dyn_cast<SelectInst>(LHS))
2018       if (Instruction *R = FoldOpIntoSelect(I, SI, this))
2019         return R;
2020   }
2021
2022   // add (cast *A to intptrtype) B -> 
2023   //   cast (GEP (cast *A to sbyte*) B) -> 
2024   //     intptrtype
2025   {
2026     CastInst *CI = dyn_cast<CastInst>(LHS);
2027     Value *Other = RHS;
2028     if (!CI) {
2029       CI = dyn_cast<CastInst>(RHS);
2030       Other = LHS;
2031     }
2032     if (CI && CI->getType()->isSized() && 
2033         (CI->getType()->getPrimitiveSizeInBits() == 
2034          TD->getIntPtrType()->getPrimitiveSizeInBits()) 
2035         && isa<PointerType>(CI->getOperand(0)->getType())) {
2036       Value *I2 = InsertCastBefore(Instruction::BitCast, CI->getOperand(0),
2037                                    PointerType::get(Type::Int8Ty), I);
2038       I2 = InsertNewInstBefore(new GetElementPtrInst(I2, Other, "ctg2"), I);
2039       return new PtrToIntInst(I2, CI->getType());
2040     }
2041   }
2042
2043   return Changed ? &I : 0;
2044 }
2045
2046 // isSignBit - Return true if the value represented by the constant only has the
2047 // highest order bit set.
2048 static bool isSignBit(ConstantInt *CI) {
2049   uint32_t NumBits = CI->getType()->getPrimitiveSizeInBits();
2050   return CI->getValue() == APInt::getSignBit(NumBits);
2051 }
2052
2053 Instruction *InstCombiner::visitSub(BinaryOperator &I) {
2054   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
2055
2056   if (Op0 == Op1)         // sub X, X  -> 0
2057     return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
2058
2059   // If this is a 'B = x-(-A)', change to B = x+A...
2060   if (Value *V = dyn_castNegVal(Op1))
2061     return BinaryOperator::createAdd(Op0, V);
2062
2063   if (isa<UndefValue>(Op0))
2064     return ReplaceInstUsesWith(I, Op0);    // undef - X -> undef
2065   if (isa<UndefValue>(Op1))
2066     return ReplaceInstUsesWith(I, Op1);    // X - undef -> undef
2067
2068   if (ConstantInt *C = dyn_cast<ConstantInt>(Op0)) {
2069     // Replace (-1 - A) with (~A)...
2070     if (C->isAllOnesValue())
2071       return BinaryOperator::createNot(Op1);
2072
2073     // C - ~X == X + (1+C)
2074     Value *X = 0;
2075     if (match(Op1, m_Not(m_Value(X))))
2076       return BinaryOperator::createAdd(X, AddOne(C));
2077
2078     // -(X >>u 31) -> (X >>s 31)
2079     // -(X >>s 31) -> (X >>u 31)
2080     if (C->isZero()) {
2081       if (BinaryOperator *SI = dyn_cast<BinaryOperator>(Op1))
2082         if (SI->getOpcode() == Instruction::LShr) {
2083           if (ConstantInt *CU = dyn_cast<ConstantInt>(SI->getOperand(1))) {
2084             // Check to see if we are shifting out everything but the sign bit.
2085             if (CU->getLimitedValue(SI->getType()->getPrimitiveSizeInBits()) ==
2086                 SI->getType()->getPrimitiveSizeInBits()-1) {
2087               // Ok, the transformation is safe.  Insert AShr.
2088               return BinaryOperator::create(Instruction::AShr, 
2089                                           SI->getOperand(0), CU, SI->getName());
2090             }
2091           }
2092         }
2093         else if (SI->getOpcode() == Instruction::AShr) {
2094           if (ConstantInt *CU = dyn_cast<ConstantInt>(SI->getOperand(1))) {
2095             // Check to see if we are shifting out everything but the sign bit.
2096             if (CU->getLimitedValue(SI->getType()->getPrimitiveSizeInBits()) ==
2097                 SI->getType()->getPrimitiveSizeInBits()-1) {
2098               // Ok, the transformation is safe.  Insert LShr. 
2099               return BinaryOperator::createLShr(
2100                                           SI->getOperand(0), CU, SI->getName());
2101             }
2102           }
2103         } 
2104     }
2105
2106     // Try to fold constant sub into select arguments.
2107     if (SelectInst *SI = dyn_cast<SelectInst>(Op1))
2108       if (Instruction *R = FoldOpIntoSelect(I, SI, this))
2109         return R;
2110
2111     if (isa<PHINode>(Op0))
2112       if (Instruction *NV = FoldOpIntoPhi(I))
2113         return NV;
2114   }
2115
2116   if (BinaryOperator *Op1I = dyn_cast<BinaryOperator>(Op1)) {
2117     if (Op1I->getOpcode() == Instruction::Add &&
2118         !Op0->getType()->isFPOrFPVector()) {
2119       if (Op1I->getOperand(0) == Op0)              // X-(X+Y) == -Y
2120         return BinaryOperator::createNeg(Op1I->getOperand(1), I.getName());
2121       else if (Op1I->getOperand(1) == Op0)         // X-(Y+X) == -Y
2122         return BinaryOperator::createNeg(Op1I->getOperand(0), I.getName());
2123       else if (ConstantInt *CI1 = dyn_cast<ConstantInt>(I.getOperand(0))) {
2124         if (ConstantInt *CI2 = dyn_cast<ConstantInt>(Op1I->getOperand(1)))
2125           // C1-(X+C2) --> (C1-C2)-X
2126           return BinaryOperator::createSub(Subtract(CI1, CI2), 
2127                                            Op1I->getOperand(0));
2128       }
2129     }
2130
2131     if (Op1I->hasOneUse()) {
2132       // Replace (x - (y - z)) with (x + (z - y)) if the (y - z) subexpression
2133       // is not used by anyone else...
2134       //
2135       if (Op1I->getOpcode() == Instruction::Sub &&
2136           !Op1I->getType()->isFPOrFPVector()) {
2137         // Swap the two operands of the subexpr...
2138         Value *IIOp0 = Op1I->getOperand(0), *IIOp1 = Op1I->getOperand(1);
2139         Op1I->setOperand(0, IIOp1);
2140         Op1I->setOperand(1, IIOp0);
2141
2142         // Create the new top level add instruction...
2143         return BinaryOperator::createAdd(Op0, Op1);
2144       }
2145
2146       // Replace (A - (A & B)) with (A & ~B) if this is the only use of (A&B)...
2147       //
2148       if (Op1I->getOpcode() == Instruction::And &&
2149           (Op1I->getOperand(0) == Op0 || Op1I->getOperand(1) == Op0)) {
2150         Value *OtherOp = Op1I->getOperand(Op1I->getOperand(0) == Op0);
2151
2152         Value *NewNot =
2153           InsertNewInstBefore(BinaryOperator::createNot(OtherOp, "B.not"), I);
2154         return BinaryOperator::createAnd(Op0, NewNot);
2155       }
2156
2157       // 0 - (X sdiv C)  -> (X sdiv -C)
2158       if (Op1I->getOpcode() == Instruction::SDiv)
2159         if (ConstantInt *CSI = dyn_cast<ConstantInt>(Op0))
2160           if (CSI->isNullValue())
2161             if (Constant *DivRHS = dyn_cast<Constant>(Op1I->getOperand(1)))
2162               return BinaryOperator::createSDiv(Op1I->getOperand(0),
2163                                                ConstantExpr::getNeg(DivRHS));
2164
2165       // X - X*C --> X * (1-C)
2166       ConstantInt *C2 = 0;
2167       if (dyn_castFoldableMul(Op1I, C2) == Op0) {
2168         Constant *CP1 = Subtract(ConstantInt::get(I.getType(), 1), C2);
2169         return BinaryOperator::createMul(Op0, CP1);
2170       }
2171     }
2172   }
2173
2174   if (!Op0->getType()->isFPOrFPVector())
2175     if (BinaryOperator *Op0I = dyn_cast<BinaryOperator>(Op0))
2176       if (Op0I->getOpcode() == Instruction::Add) {
2177         if (Op0I->getOperand(0) == Op1)             // (Y+X)-Y == X
2178           return ReplaceInstUsesWith(I, Op0I->getOperand(1));
2179         else if (Op0I->getOperand(1) == Op1)        // (X+Y)-Y == X
2180           return ReplaceInstUsesWith(I, Op0I->getOperand(0));
2181       } else if (Op0I->getOpcode() == Instruction::Sub) {
2182         if (Op0I->getOperand(0) == Op1)             // (X-Y)-X == -Y
2183           return BinaryOperator::createNeg(Op0I->getOperand(1), I.getName());
2184       }
2185
2186   ConstantInt *C1;
2187   if (Value *X = dyn_castFoldableMul(Op0, C1)) {
2188     if (X == Op1)  // X*C - X --> X * (C-1)
2189       return BinaryOperator::createMul(Op1, SubOne(C1));
2190
2191     ConstantInt *C2;   // X*C1 - X*C2 -> X * (C1-C2)
2192     if (X == dyn_castFoldableMul(Op1, C2))
2193       return BinaryOperator::createMul(Op1, Subtract(C1, C2));
2194   }
2195   return 0;
2196 }
2197
2198 /// isSignBitCheck - Given an exploded icmp instruction, return true if it
2199 /// really just returns true if the most significant (sign) bit is set.
2200 static bool isSignBitCheck(ICmpInst::Predicate pred, ConstantInt *RHS) {
2201   switch (pred) {
2202     case ICmpInst::ICMP_SLT: 
2203       // True if LHS s< RHS and RHS == 0
2204       return RHS->isNullValue();
2205     case ICmpInst::ICMP_SLE: 
2206       // True if LHS s<= RHS and RHS == -1
2207       return RHS->isAllOnesValue();
2208     case ICmpInst::ICMP_UGE: 
2209       // True if LHS u>= RHS and RHS == high-bit-mask (2^7, 2^15, 2^31, etc)
2210       return RHS->getValue() == 
2211              APInt::getSignBit(RHS->getType()->getPrimitiveSizeInBits());
2212     case ICmpInst::ICMP_UGT:
2213       // True if LHS u> RHS and RHS == high-bit-mask - 1
2214       return RHS->getValue() ==
2215              APInt::getSignedMaxValue(RHS->getType()->getPrimitiveSizeInBits());
2216     default:
2217       return false;
2218   }
2219 }
2220
2221 Instruction *InstCombiner::visitMul(BinaryOperator &I) {
2222   bool Changed = SimplifyCommutative(I);
2223   Value *Op0 = I.getOperand(0);
2224
2225   if (isa<UndefValue>(I.getOperand(1)))              // undef * X -> 0
2226     return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
2227
2228   // Simplify mul instructions with a constant RHS...
2229   if (Constant *Op1 = dyn_cast<Constant>(I.getOperand(1))) {
2230     if (ConstantInt *CI = dyn_cast<ConstantInt>(Op1)) {
2231
2232       // ((X << C1)*C2) == (X * (C2 << C1))
2233       if (BinaryOperator *SI = dyn_cast<BinaryOperator>(Op0))
2234         if (SI->getOpcode() == Instruction::Shl)
2235           if (Constant *ShOp = dyn_cast<Constant>(SI->getOperand(1)))
2236             return BinaryOperator::createMul(SI->getOperand(0),
2237                                              ConstantExpr::getShl(CI, ShOp));
2238
2239       if (CI->isNullValue())
2240         return ReplaceInstUsesWith(I, Op1);  // X * 0  == 0
2241       if (CI->equalsInt(1))                  // X * 1  == X
2242         return ReplaceInstUsesWith(I, Op0);
2243       if (CI->isAllOnesValue())              // X * -1 == 0 - X
2244         return BinaryOperator::createNeg(Op0, I.getName());
2245
2246       const APInt& Val = cast<ConstantInt>(CI)->getValue();
2247       if (Val.isPowerOf2()) {          // Replace X*(2^C) with X << C
2248         return BinaryOperator::createShl(Op0,
2249                  ConstantInt::get(Op0->getType(), Val.logBase2()));
2250       }
2251     } else if (ConstantFP *Op1F = dyn_cast<ConstantFP>(Op1)) {
2252       if (Op1F->isNullValue())
2253         return ReplaceInstUsesWith(I, Op1);
2254
2255       // "In IEEE floating point, x*1 is not equivalent to x for nans.  However,
2256       // ANSI says we can drop signals, so we can do this anyway." (from GCC)
2257       if (Op1F->getValue() == 1.0)
2258         return ReplaceInstUsesWith(I, Op0);  // Eliminate 'mul double %X, 1.0'
2259     }
2260     
2261     if (BinaryOperator *Op0I = dyn_cast<BinaryOperator>(Op0))
2262       if (Op0I->getOpcode() == Instruction::Add && Op0I->hasOneUse() &&
2263           isa<ConstantInt>(Op0I->getOperand(1))) {
2264         // Canonicalize (X+C1)*C2 -> X*C2+C1*C2.
2265         Instruction *Add = BinaryOperator::createMul(Op0I->getOperand(0),
2266                                                      Op1, "tmp");
2267         InsertNewInstBefore(Add, I);
2268         Value *C1C2 = ConstantExpr::getMul(Op1, 
2269                                            cast<Constant>(Op0I->getOperand(1)));
2270         return BinaryOperator::createAdd(Add, C1C2);
2271         
2272       }
2273
2274     // Try to fold constant mul into select arguments.
2275     if (SelectInst *SI = dyn_cast<SelectInst>(Op0))
2276       if (Instruction *R = FoldOpIntoSelect(I, SI, this))
2277         return R;
2278
2279     if (isa<PHINode>(Op0))
2280       if (Instruction *NV = FoldOpIntoPhi(I))
2281         return NV;
2282   }
2283
2284   if (Value *Op0v = dyn_castNegVal(Op0))     // -X * -Y = X*Y
2285     if (Value *Op1v = dyn_castNegVal(I.getOperand(1)))
2286       return BinaryOperator::createMul(Op0v, Op1v);
2287
2288   // If one of the operands of the multiply is a cast from a boolean value, then
2289   // we know the bool is either zero or one, so this is a 'masking' multiply.
2290   // See if we can simplify things based on how the boolean was originally
2291   // formed.
2292   CastInst *BoolCast = 0;
2293   if (ZExtInst *CI = dyn_cast<ZExtInst>(I.getOperand(0)))
2294     if (CI->getOperand(0)->getType() == Type::Int1Ty)
2295       BoolCast = CI;
2296   if (!BoolCast)
2297     if (ZExtInst *CI = dyn_cast<ZExtInst>(I.getOperand(1)))
2298       if (CI->getOperand(0)->getType() == Type::Int1Ty)
2299         BoolCast = CI;
2300   if (BoolCast) {
2301     if (ICmpInst *SCI = dyn_cast<ICmpInst>(BoolCast->getOperand(0))) {
2302       Value *SCIOp0 = SCI->getOperand(0), *SCIOp1 = SCI->getOperand(1);
2303       const Type *SCOpTy = SCIOp0->getType();
2304
2305       // If the icmp is true iff the sign bit of X is set, then convert this
2306       // multiply into a shift/and combination.
2307       if (isa<ConstantInt>(SCIOp1) &&
2308           isSignBitCheck(SCI->getPredicate(), cast<ConstantInt>(SCIOp1))) {
2309         // Shift the X value right to turn it into "all signbits".
2310         Constant *Amt = ConstantInt::get(SCIOp0->getType(),
2311                                           SCOpTy->getPrimitiveSizeInBits()-1);
2312         Value *V =
2313           InsertNewInstBefore(
2314             BinaryOperator::create(Instruction::AShr, SCIOp0, Amt,
2315                                             BoolCast->getOperand(0)->getName()+
2316                                             ".mask"), I);
2317
2318         // If the multiply type is not the same as the source type, sign extend
2319         // or truncate to the multiply type.
2320         if (I.getType() != V->getType()) {
2321           uint32_t SrcBits = V->getType()->getPrimitiveSizeInBits();
2322           uint32_t DstBits = I.getType()->getPrimitiveSizeInBits();
2323           Instruction::CastOps opcode = 
2324             (SrcBits == DstBits ? Instruction::BitCast : 
2325              (SrcBits < DstBits ? Instruction::SExt : Instruction::Trunc));
2326           V = InsertCastBefore(opcode, V, I.getType(), I);
2327         }
2328
2329         Value *OtherOp = Op0 == BoolCast ? I.getOperand(1) : Op0;
2330         return BinaryOperator::createAnd(V, OtherOp);
2331       }
2332     }
2333   }
2334
2335   return Changed ? &I : 0;
2336 }
2337
2338 /// This function implements the transforms on div instructions that work
2339 /// regardless of the kind of div instruction it is (udiv, sdiv, or fdiv). It is
2340 /// used by the visitors to those instructions.
2341 /// @brief Transforms common to all three div instructions
2342 Instruction *InstCombiner::commonDivTransforms(BinaryOperator &I) {
2343   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
2344
2345   // undef / X -> 0
2346   if (isa<UndefValue>(Op0))
2347     return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
2348
2349   // X / undef -> undef
2350   if (isa<UndefValue>(Op1))
2351     return ReplaceInstUsesWith(I, Op1);
2352
2353   // Handle cases involving: div X, (select Cond, Y, Z)
2354   if (SelectInst *SI = dyn_cast<SelectInst>(Op1)) {
2355     // div X, (Cond ? 0 : Y) -> div X, Y.  If the div and the select are in the
2356     // same basic block, then we replace the select with Y, and the condition 
2357     // of the select with false (if the cond value is in the same BB).  If the
2358     // select has uses other than the div, this allows them to be simplified
2359     // also. Note that div X, Y is just as good as div X, 0 (undef)
2360     if (Constant *ST = dyn_cast<Constant>(SI->getOperand(1)))
2361       if (ST->isNullValue()) {
2362         Instruction *CondI = dyn_cast<Instruction>(SI->getOperand(0));
2363         if (CondI && CondI->getParent() == I.getParent())
2364           UpdateValueUsesWith(CondI, ConstantInt::getFalse());
2365         else if (I.getParent() != SI->getParent() || SI->hasOneUse())
2366           I.setOperand(1, SI->getOperand(2));
2367         else
2368           UpdateValueUsesWith(SI, SI->getOperand(2));
2369         return &I;
2370       }
2371
2372     // Likewise for: div X, (Cond ? Y : 0) -> div X, Y
2373     if (Constant *ST = dyn_cast<Constant>(SI->getOperand(2)))
2374       if (ST->isNullValue()) {
2375         Instruction *CondI = dyn_cast<Instruction>(SI->getOperand(0));
2376         if (CondI && CondI->getParent() == I.getParent())
2377           UpdateValueUsesWith(CondI, ConstantInt::getTrue());
2378         else if (I.getParent() != SI->getParent() || SI->hasOneUse())
2379           I.setOperand(1, SI->getOperand(1));
2380         else
2381           UpdateValueUsesWith(SI, SI->getOperand(1));
2382         return &I;
2383       }
2384   }
2385
2386   return 0;
2387 }
2388
2389 /// This function implements the transforms common to both integer division
2390 /// instructions (udiv and sdiv). It is called by the visitors to those integer
2391 /// division instructions.
2392 /// @brief Common integer divide transforms
2393 Instruction *InstCombiner::commonIDivTransforms(BinaryOperator &I) {
2394   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
2395
2396   if (Instruction *Common = commonDivTransforms(I))
2397     return Common;
2398
2399   if (ConstantInt *RHS = dyn_cast<ConstantInt>(Op1)) {
2400     // div X, 1 == X
2401     if (RHS->equalsInt(1))
2402       return ReplaceInstUsesWith(I, Op0);
2403
2404     // (X / C1) / C2  -> X / (C1*C2)
2405     if (Instruction *LHS = dyn_cast<Instruction>(Op0))
2406       if (Instruction::BinaryOps(LHS->getOpcode()) == I.getOpcode())
2407         if (ConstantInt *LHSRHS = dyn_cast<ConstantInt>(LHS->getOperand(1))) {
2408           return BinaryOperator::create(I.getOpcode(), LHS->getOperand(0),
2409                                         Multiply(RHS, LHSRHS));
2410         }
2411
2412     if (!RHS->isZero()) { // avoid X udiv 0
2413       if (SelectInst *SI = dyn_cast<SelectInst>(Op0))
2414         if (Instruction *R = FoldOpIntoSelect(I, SI, this))
2415           return R;
2416       if (isa<PHINode>(Op0))
2417         if (Instruction *NV = FoldOpIntoPhi(I))
2418           return NV;
2419     }
2420   }
2421
2422   // 0 / X == 0, we don't need to preserve faults!
2423   if (ConstantInt *LHS = dyn_cast<ConstantInt>(Op0))
2424     if (LHS->equalsInt(0))
2425       return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
2426
2427   return 0;
2428 }
2429
2430 Instruction *InstCombiner::visitUDiv(BinaryOperator &I) {
2431   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
2432
2433   // Handle the integer div common cases
2434   if (Instruction *Common = commonIDivTransforms(I))
2435     return Common;
2436
2437   // X udiv C^2 -> X >> C
2438   // Check to see if this is an unsigned division with an exact power of 2,
2439   // if so, convert to a right shift.
2440   if (ConstantInt *C = dyn_cast<ConstantInt>(Op1)) {
2441     if (C->getValue().isPowerOf2())  // 0 not included in isPowerOf2
2442       return BinaryOperator::createLShr(Op0, 
2443                ConstantInt::get(Op0->getType(), C->getValue().logBase2()));
2444   }
2445
2446   // X udiv (C1 << N), where C1 is "1<<C2"  -->  X >> (N+C2)
2447   if (BinaryOperator *RHSI = dyn_cast<BinaryOperator>(I.getOperand(1))) {
2448     if (RHSI->getOpcode() == Instruction::Shl &&
2449         isa<ConstantInt>(RHSI->getOperand(0))) {
2450       const APInt& C1 = cast<ConstantInt>(RHSI->getOperand(0))->getValue();
2451       if (C1.isPowerOf2()) {
2452         Value *N = RHSI->getOperand(1);
2453         const Type *NTy = N->getType();
2454         if (uint32_t C2 = C1.logBase2()) {
2455           Constant *C2V = ConstantInt::get(NTy, C2);
2456           N = InsertNewInstBefore(BinaryOperator::createAdd(N, C2V, "tmp"), I);
2457         }
2458         return BinaryOperator::createLShr(Op0, N);
2459       }
2460     }
2461   }
2462   
2463   // udiv X, (Select Cond, C1, C2) --> Select Cond, (shr X, C1), (shr X, C2)
2464   // where C1&C2 are powers of two.
2465   if (SelectInst *SI = dyn_cast<SelectInst>(Op1)) 
2466     if (ConstantInt *STO = dyn_cast<ConstantInt>(SI->getOperand(1)))
2467       if (ConstantInt *SFO = dyn_cast<ConstantInt>(SI->getOperand(2)))  {
2468         const APInt &TVA = STO->getValue(), &FVA = SFO->getValue();
2469         if (TVA.isPowerOf2() && FVA.isPowerOf2()) {
2470           // Compute the shift amounts
2471           uint32_t TSA = TVA.logBase2(), FSA = FVA.logBase2();
2472           // Construct the "on true" case of the select
2473           Constant *TC = ConstantInt::get(Op0->getType(), TSA);
2474           Instruction *TSI = BinaryOperator::createLShr(
2475                                                  Op0, TC, SI->getName()+".t");
2476           TSI = InsertNewInstBefore(TSI, I);
2477   
2478           // Construct the "on false" case of the select
2479           Constant *FC = ConstantInt::get(Op0->getType(), FSA); 
2480           Instruction *FSI = BinaryOperator::createLShr(
2481                                                  Op0, FC, SI->getName()+".f");
2482           FSI = InsertNewInstBefore(FSI, I);
2483
2484           // construct the select instruction and return it.
2485           return new SelectInst(SI->getOperand(0), TSI, FSI, SI->getName());
2486         }
2487       }
2488   return 0;
2489 }
2490
2491 Instruction *InstCombiner::visitSDiv(BinaryOperator &I) {
2492   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
2493
2494   // Handle the integer div common cases
2495   if (Instruction *Common = commonIDivTransforms(I))
2496     return Common;
2497
2498   if (ConstantInt *RHS = dyn_cast<ConstantInt>(Op1)) {
2499     // sdiv X, -1 == -X
2500     if (RHS->isAllOnesValue())
2501       return BinaryOperator::createNeg(Op0);
2502
2503     // -X/C -> X/-C
2504     if (Value *LHSNeg = dyn_castNegVal(Op0))
2505       return BinaryOperator::createSDiv(LHSNeg, ConstantExpr::getNeg(RHS));
2506   }
2507
2508   // If the sign bits of both operands are zero (i.e. we can prove they are
2509   // unsigned inputs), turn this into a udiv.
2510   if (I.getType()->isInteger()) {
2511     APInt Mask(APInt::getSignBit(I.getType()->getPrimitiveSizeInBits()));
2512     if (MaskedValueIsZero(Op1, Mask) && MaskedValueIsZero(Op0, Mask)) {
2513       return BinaryOperator::createUDiv(Op0, Op1, I.getName());
2514     }
2515   }      
2516   
2517   return 0;
2518 }
2519
2520 Instruction *InstCombiner::visitFDiv(BinaryOperator &I) {
2521   return commonDivTransforms(I);
2522 }
2523
2524 /// GetFactor - If we can prove that the specified value is at least a multiple
2525 /// of some factor, return that factor.
2526 static Constant *GetFactor(Value *V) {
2527   if (ConstantInt *CI = dyn_cast<ConstantInt>(V))
2528     return CI;
2529   
2530   // Unless we can be tricky, we know this is a multiple of 1.
2531   Constant *Result = ConstantInt::get(V->getType(), 1);
2532   
2533   Instruction *I = dyn_cast<Instruction>(V);
2534   if (!I) return Result;
2535   
2536   if (I->getOpcode() == Instruction::Mul) {
2537     // Handle multiplies by a constant, etc.
2538     return ConstantExpr::getMul(GetFactor(I->getOperand(0)),
2539                                 GetFactor(I->getOperand(1)));
2540   } else if (I->getOpcode() == Instruction::Shl) {
2541     // (X<<C) -> X * (1 << C)
2542     if (Constant *ShRHS = dyn_cast<Constant>(I->getOperand(1))) {
2543       ShRHS = ConstantExpr::getShl(Result, ShRHS);
2544       return ConstantExpr::getMul(GetFactor(I->getOperand(0)), ShRHS);
2545     }
2546   } else if (I->getOpcode() == Instruction::And) {
2547     if (ConstantInt *RHS = dyn_cast<ConstantInt>(I->getOperand(1))) {
2548       // X & 0xFFF0 is known to be a multiple of 16.
2549       uint32_t Zeros = RHS->getValue().countTrailingZeros();
2550       if (Zeros != V->getType()->getPrimitiveSizeInBits())
2551         return ConstantExpr::getShl(Result, 
2552                                     ConstantInt::get(Result->getType(), Zeros));
2553     }
2554   } else if (CastInst *CI = dyn_cast<CastInst>(I)) {
2555     // Only handle int->int casts.
2556     if (!CI->isIntegerCast())
2557       return Result;
2558     Value *Op = CI->getOperand(0);
2559     return ConstantExpr::getCast(CI->getOpcode(), GetFactor(Op), V->getType());
2560   }    
2561   return Result;
2562 }
2563
2564 /// This function implements the transforms on rem instructions that work
2565 /// regardless of the kind of rem instruction it is (urem, srem, or frem). It 
2566 /// is used by the visitors to those instructions.
2567 /// @brief Transforms common to all three rem instructions
2568 Instruction *InstCombiner::commonRemTransforms(BinaryOperator &I) {
2569   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
2570
2571   // 0 % X == 0, we don't need to preserve faults!
2572   if (Constant *LHS = dyn_cast<Constant>(Op0))
2573     if (LHS->isNullValue())
2574       return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
2575
2576   if (isa<UndefValue>(Op0))              // undef % X -> 0
2577     return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
2578   if (isa<UndefValue>(Op1))
2579     return ReplaceInstUsesWith(I, Op1);  // X % undef -> undef
2580
2581   // Handle cases involving: rem X, (select Cond, Y, Z)
2582   if (SelectInst *SI = dyn_cast<SelectInst>(Op1)) {
2583     // rem X, (Cond ? 0 : Y) -> rem X, Y.  If the rem and the select are in
2584     // the same basic block, then we replace the select with Y, and the
2585     // condition of the select with false (if the cond value is in the same
2586     // BB).  If the select has uses other than the div, this allows them to be
2587     // simplified also.
2588     if (Constant *ST = dyn_cast<Constant>(SI->getOperand(1)))
2589       if (ST->isNullValue()) {
2590         Instruction *CondI = dyn_cast<Instruction>(SI->getOperand(0));
2591         if (CondI && CondI->getParent() == I.getParent())
2592           UpdateValueUsesWith(CondI, ConstantInt::getFalse());
2593         else if (I.getParent() != SI->getParent() || SI->hasOneUse())
2594           I.setOperand(1, SI->getOperand(2));
2595         else
2596           UpdateValueUsesWith(SI, SI->getOperand(2));
2597         return &I;
2598       }
2599     // Likewise for: rem X, (Cond ? Y : 0) -> rem X, Y
2600     if (Constant *ST = dyn_cast<Constant>(SI->getOperand(2)))
2601       if (ST->isNullValue()) {
2602         Instruction *CondI = dyn_cast<Instruction>(SI->getOperand(0));
2603         if (CondI && CondI->getParent() == I.getParent())
2604           UpdateValueUsesWith(CondI, ConstantInt::getTrue());
2605         else if (I.getParent() != SI->getParent() || SI->hasOneUse())
2606           I.setOperand(1, SI->getOperand(1));
2607         else
2608           UpdateValueUsesWith(SI, SI->getOperand(1));
2609         return &I;
2610       }
2611   }
2612
2613   return 0;
2614 }
2615
2616 /// This function implements the transforms common to both integer remainder
2617 /// instructions (urem and srem). It is called by the visitors to those integer
2618 /// remainder instructions.
2619 /// @brief Common integer remainder transforms
2620 Instruction *InstCombiner::commonIRemTransforms(BinaryOperator &I) {
2621   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
2622
2623   if (Instruction *common = commonRemTransforms(I))
2624     return common;
2625
2626   if (ConstantInt *RHS = dyn_cast<ConstantInt>(Op1)) {
2627     // X % 0 == undef, we don't need to preserve faults!
2628     if (RHS->equalsInt(0))
2629       return ReplaceInstUsesWith(I, UndefValue::get(I.getType()));
2630     
2631     if (RHS->equalsInt(1))  // X % 1 == 0
2632       return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
2633
2634     if (Instruction *Op0I = dyn_cast<Instruction>(Op0)) {
2635       if (SelectInst *SI = dyn_cast<SelectInst>(Op0I)) {
2636         if (Instruction *R = FoldOpIntoSelect(I, SI, this))
2637           return R;
2638       } else if (isa<PHINode>(Op0I)) {
2639         if (Instruction *NV = FoldOpIntoPhi(I))
2640           return NV;
2641       }
2642       // (X * C1) % C2 --> 0  iff  C1 % C2 == 0
2643       if (ConstantExpr::getSRem(GetFactor(Op0I), RHS)->isNullValue())
2644         return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
2645     }
2646   }
2647
2648   return 0;
2649 }
2650
2651 Instruction *InstCombiner::visitURem(BinaryOperator &I) {
2652   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
2653
2654   if (Instruction *common = commonIRemTransforms(I))
2655     return common;
2656   
2657   if (ConstantInt *RHS = dyn_cast<ConstantInt>(Op1)) {
2658     // X urem C^2 -> X and C
2659     // Check to see if this is an unsigned remainder with an exact power of 2,
2660     // if so, convert to a bitwise and.
2661     if (ConstantInt *C = dyn_cast<ConstantInt>(RHS))
2662       if (C->getValue().isPowerOf2())
2663         return BinaryOperator::createAnd(Op0, SubOne(C));
2664   }
2665
2666   if (Instruction *RHSI = dyn_cast<Instruction>(I.getOperand(1))) {
2667     // Turn A % (C << N), where C is 2^k, into A & ((C << N)-1)  
2668     if (RHSI->getOpcode() == Instruction::Shl &&
2669         isa<ConstantInt>(RHSI->getOperand(0))) {
2670       if (cast<ConstantInt>(RHSI->getOperand(0))->getValue().isPowerOf2()) {
2671         Constant *N1 = ConstantInt::getAllOnesValue(I.getType());
2672         Value *Add = InsertNewInstBefore(BinaryOperator::createAdd(RHSI, N1,
2673                                                                    "tmp"), I);
2674         return BinaryOperator::createAnd(Op0, Add);
2675       }
2676     }
2677   }
2678
2679   // urem X, (select Cond, 2^C1, 2^C2) --> select Cond, (and X, C1), (and X, C2)
2680   // where C1&C2 are powers of two.
2681   if (SelectInst *SI = dyn_cast<SelectInst>(Op1)) {
2682     if (ConstantInt *STO = dyn_cast<ConstantInt>(SI->getOperand(1)))
2683       if (ConstantInt *SFO = dyn_cast<ConstantInt>(SI->getOperand(2))) {
2684         // STO == 0 and SFO == 0 handled above.
2685         if ((STO->getValue().isPowerOf2()) && 
2686             (SFO->getValue().isPowerOf2())) {
2687           Value *TrueAnd = InsertNewInstBefore(
2688             BinaryOperator::createAnd(Op0, SubOne(STO), SI->getName()+".t"), I);
2689           Value *FalseAnd = InsertNewInstBefore(
2690             BinaryOperator::createAnd(Op0, SubOne(SFO), SI->getName()+".f"), I);
2691           return new SelectInst(SI->getOperand(0), TrueAnd, FalseAnd);
2692         }
2693       }
2694   }
2695   
2696   return 0;
2697 }
2698
2699 Instruction *InstCombiner::visitSRem(BinaryOperator &I) {
2700   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
2701
2702   if (Instruction *common = commonIRemTransforms(I))
2703     return common;
2704   
2705   if (Value *RHSNeg = dyn_castNegVal(Op1))
2706     if (!isa<ConstantInt>(RHSNeg) || 
2707         cast<ConstantInt>(RHSNeg)->getValue().isStrictlyPositive()) {
2708       // X % -Y -> X % Y
2709       AddUsesToWorkList(I);
2710       I.setOperand(1, RHSNeg);
2711       return &I;
2712     }
2713  
2714   // If the top bits of both operands are zero (i.e. we can prove they are
2715   // unsigned inputs), turn this into a urem.
2716   APInt Mask(APInt::getSignBit(I.getType()->getPrimitiveSizeInBits()));
2717   if (MaskedValueIsZero(Op1, Mask) && MaskedValueIsZero(Op0, Mask)) {
2718     // X srem Y -> X urem Y, iff X and Y don't have sign bit set
2719     return BinaryOperator::createURem(Op0, Op1, I.getName());
2720   }
2721
2722   return 0;
2723 }
2724
2725 Instruction *InstCombiner::visitFRem(BinaryOperator &I) {
2726   return commonRemTransforms(I);
2727 }
2728
2729 // isMaxValueMinusOne - return true if this is Max-1
2730 static bool isMaxValueMinusOne(const ConstantInt *C, bool isSigned) {
2731   uint32_t TypeBits = C->getType()->getPrimitiveSizeInBits();
2732   if (isSigned) {
2733     // Calculate 0111111111..11111
2734     APInt Val(APInt::getSignedMaxValue(TypeBits));
2735     return C->getValue() == Val-1;
2736   }
2737   return C->getValue() == APInt::getAllOnesValue(TypeBits) - 1;
2738 }
2739
2740 // isMinValuePlusOne - return true if this is Min+1
2741 static bool isMinValuePlusOne(const ConstantInt *C, bool isSigned) {
2742   if (isSigned) {
2743     // Calculate 1111111111000000000000
2744     uint32_t TypeBits = C->getType()->getPrimitiveSizeInBits();
2745     APInt Val(APInt::getSignedMinValue(TypeBits));
2746     return C->getValue() == Val+1;
2747   }
2748   return C->getValue() == 1; // unsigned
2749 }
2750
2751 // isOneBitSet - Return true if there is exactly one bit set in the specified
2752 // constant.
2753 static bool isOneBitSet(const ConstantInt *CI) {
2754   return CI->getValue().isPowerOf2();
2755 }
2756
2757 // isHighOnes - Return true if the constant is of the form 1+0+.
2758 // This is the same as lowones(~X).
2759 static bool isHighOnes(const ConstantInt *CI) {
2760   return (~CI->getValue() + 1).isPowerOf2();
2761 }
2762
2763 /// getICmpCode - Encode a icmp predicate into a three bit mask.  These bits
2764 /// are carefully arranged to allow folding of expressions such as:
2765 ///
2766 ///      (A < B) | (A > B) --> (A != B)
2767 ///
2768 /// Note that this is only valid if the first and second predicates have the
2769 /// same sign. Is illegal to do: (A u< B) | (A s> B) 
2770 ///
2771 /// Three bits are used to represent the condition, as follows:
2772 ///   0  A > B
2773 ///   1  A == B
2774 ///   2  A < B
2775 ///
2776 /// <=>  Value  Definition
2777 /// 000     0   Always false
2778 /// 001     1   A >  B
2779 /// 010     2   A == B
2780 /// 011     3   A >= B
2781 /// 100     4   A <  B
2782 /// 101     5   A != B
2783 /// 110     6   A <= B
2784 /// 111     7   Always true
2785 ///  
2786 static unsigned getICmpCode(const ICmpInst *ICI) {
2787   switch (ICI->getPredicate()) {
2788     // False -> 0
2789   case ICmpInst::ICMP_UGT: return 1;  // 001
2790   case ICmpInst::ICMP_SGT: return 1;  // 001
2791   case ICmpInst::ICMP_EQ:  return 2;  // 010
2792   case ICmpInst::ICMP_UGE: return 3;  // 011
2793   case ICmpInst::ICMP_SGE: return 3;  // 011
2794   case ICmpInst::ICMP_ULT: return 4;  // 100
2795   case ICmpInst::ICMP_SLT: return 4;  // 100
2796   case ICmpInst::ICMP_NE:  return 5;  // 101
2797   case ICmpInst::ICMP_ULE: return 6;  // 110
2798   case ICmpInst::ICMP_SLE: return 6;  // 110
2799     // True -> 7
2800   default:
2801     assert(0 && "Invalid ICmp predicate!");
2802     return 0;
2803   }
2804 }
2805
2806 /// getICmpValue - This is the complement of getICmpCode, which turns an
2807 /// opcode and two operands into either a constant true or false, or a brand 
2808 /// new /// ICmp instruction. The sign is passed in to determine which kind
2809 /// of predicate to use in new icmp instructions.
2810 static Value *getICmpValue(bool sign, unsigned code, Value *LHS, Value *RHS) {
2811   switch (code) {
2812   default: assert(0 && "Illegal ICmp code!");
2813   case  0: return ConstantInt::getFalse();
2814   case  1: 
2815     if (sign)
2816       return new ICmpInst(ICmpInst::ICMP_SGT, LHS, RHS);
2817     else
2818       return new ICmpInst(ICmpInst::ICMP_UGT, LHS, RHS);
2819   case  2: return new ICmpInst(ICmpInst::ICMP_EQ,  LHS, RHS);
2820   case  3: 
2821     if (sign)
2822       return new ICmpInst(ICmpInst::ICMP_SGE, LHS, RHS);
2823     else
2824       return new ICmpInst(ICmpInst::ICMP_UGE, LHS, RHS);
2825   case  4: 
2826     if (sign)
2827       return new ICmpInst(ICmpInst::ICMP_SLT, LHS, RHS);
2828     else
2829       return new ICmpInst(ICmpInst::ICMP_ULT, LHS, RHS);
2830   case  5: return new ICmpInst(ICmpInst::ICMP_NE,  LHS, RHS);
2831   case  6: 
2832     if (sign)
2833       return new ICmpInst(ICmpInst::ICMP_SLE, LHS, RHS);
2834     else
2835       return new ICmpInst(ICmpInst::ICMP_ULE, LHS, RHS);
2836   case  7: return ConstantInt::getTrue();
2837   }
2838 }
2839
2840 static bool PredicatesFoldable(ICmpInst::Predicate p1, ICmpInst::Predicate p2) {
2841   return (ICmpInst::isSignedPredicate(p1) == ICmpInst::isSignedPredicate(p2)) ||
2842     (ICmpInst::isSignedPredicate(p1) && 
2843      (p2 == ICmpInst::ICMP_EQ || p2 == ICmpInst::ICMP_NE)) ||
2844     (ICmpInst::isSignedPredicate(p2) && 
2845      (p1 == ICmpInst::ICMP_EQ || p1 == ICmpInst::ICMP_NE));
2846 }
2847
2848 namespace { 
2849 // FoldICmpLogical - Implements (icmp1 A, B) & (icmp2 A, B) --> (icmp3 A, B)
2850 struct FoldICmpLogical {
2851   InstCombiner &IC;
2852   Value *LHS, *RHS;
2853   ICmpInst::Predicate pred;
2854   FoldICmpLogical(InstCombiner &ic, ICmpInst *ICI)
2855     : IC(ic), LHS(ICI->getOperand(0)), RHS(ICI->getOperand(1)),
2856       pred(ICI->getPredicate()) {}
2857   bool shouldApply(Value *V) const {
2858     if (ICmpInst *ICI = dyn_cast<ICmpInst>(V))
2859       if (PredicatesFoldable(pred, ICI->getPredicate()))
2860         return (ICI->getOperand(0) == LHS && ICI->getOperand(1) == RHS ||
2861                 ICI->getOperand(0) == RHS && ICI->getOperand(1) == LHS);
2862     return false;
2863   }
2864   Instruction *apply(Instruction &Log) const {
2865     ICmpInst *ICI = cast<ICmpInst>(Log.getOperand(0));
2866     if (ICI->getOperand(0) != LHS) {
2867       assert(ICI->getOperand(1) == LHS);
2868       ICI->swapOperands();  // Swap the LHS and RHS of the ICmp
2869     }
2870
2871     ICmpInst *RHSICI = cast<ICmpInst>(Log.getOperand(1));
2872     unsigned LHSCode = getICmpCode(ICI);
2873     unsigned RHSCode = getICmpCode(RHSICI);
2874     unsigned Code;
2875     switch (Log.getOpcode()) {
2876     case Instruction::And: Code = LHSCode & RHSCode; break;
2877     case Instruction::Or:  Code = LHSCode | RHSCode; break;
2878     case Instruction::Xor: Code = LHSCode ^ RHSCode; break;
2879     default: assert(0 && "Illegal logical opcode!"); return 0;
2880     }
2881
2882     bool isSigned = ICmpInst::isSignedPredicate(RHSICI->getPredicate()) || 
2883                     ICmpInst::isSignedPredicate(ICI->getPredicate());
2884       
2885     Value *RV = getICmpValue(isSigned, Code, LHS, RHS);
2886     if (Instruction *I = dyn_cast<Instruction>(RV))
2887       return I;
2888     // Otherwise, it's a constant boolean value...
2889     return IC.ReplaceInstUsesWith(Log, RV);
2890   }
2891 };
2892 } // end anonymous namespace
2893
2894 // OptAndOp - This handles expressions of the form ((val OP C1) & C2).  Where
2895 // the Op parameter is 'OP', OpRHS is 'C1', and AndRHS is 'C2'.  Op is
2896 // guaranteed to be a binary operator.
2897 Instruction *InstCombiner::OptAndOp(Instruction *Op,
2898                                     ConstantInt *OpRHS,
2899                                     ConstantInt *AndRHS,
2900                                     BinaryOperator &TheAnd) {
2901   Value *X = Op->getOperand(0);
2902   Constant *Together = 0;
2903   if (!Op->isShift())
2904     Together = And(AndRHS, OpRHS);
2905
2906   switch (Op->getOpcode()) {
2907   case Instruction::Xor:
2908     if (Op->hasOneUse()) {
2909       // (X ^ C1) & C2 --> (X & C2) ^ (C1&C2)
2910       Instruction *And = BinaryOperator::createAnd(X, AndRHS);
2911       InsertNewInstBefore(And, TheAnd);
2912       And->takeName(Op);
2913       return BinaryOperator::createXor(And, Together);
2914     }
2915     break;
2916   case Instruction::Or:
2917     if (Together == AndRHS) // (X | C) & C --> C
2918       return ReplaceInstUsesWith(TheAnd, AndRHS);
2919
2920     if (Op->hasOneUse() && Together != OpRHS) {
2921       // (X | C1) & C2 --> (X | (C1&C2)) & C2
2922       Instruction *Or = BinaryOperator::createOr(X, Together);
2923       InsertNewInstBefore(Or, TheAnd);
2924       Or->takeName(Op);
2925       return BinaryOperator::createAnd(Or, AndRHS);
2926     }
2927     break;
2928   case Instruction::Add:
2929     if (Op->hasOneUse()) {
2930       // Adding a one to a single bit bit-field should be turned into an XOR
2931       // of the bit.  First thing to check is to see if this AND is with a
2932       // single bit constant.
2933       const APInt& AndRHSV = cast<ConstantInt>(AndRHS)->getValue();
2934
2935       // If there is only one bit set...
2936       if (isOneBitSet(cast<ConstantInt>(AndRHS))) {
2937         // Ok, at this point, we know that we are masking the result of the
2938         // ADD down to exactly one bit.  If the constant we are adding has
2939         // no bits set below this bit, then we can eliminate the ADD.
2940         const APInt& AddRHS = cast<ConstantInt>(OpRHS)->getValue();
2941
2942         // Check to see if any bits below the one bit set in AndRHSV are set.
2943         if ((AddRHS & (AndRHSV-1)) == 0) {
2944           // If not, the only thing that can effect the output of the AND is
2945           // the bit specified by AndRHSV.  If that bit is set, the effect of
2946           // the XOR is to toggle the bit.  If it is clear, then the ADD has
2947           // no effect.
2948           if ((AddRHS & AndRHSV) == 0) { // Bit is not set, noop
2949             TheAnd.setOperand(0, X);
2950             return &TheAnd;
2951           } else {
2952             // Pull the XOR out of the AND.
2953             Instruction *NewAnd = BinaryOperator::createAnd(X, AndRHS);
2954             InsertNewInstBefore(NewAnd, TheAnd);
2955             NewAnd->takeName(Op);
2956             return BinaryOperator::createXor(NewAnd, AndRHS);
2957           }
2958         }
2959       }
2960     }
2961     break;
2962
2963   case Instruction::Shl: {
2964     // We know that the AND will not produce any of the bits shifted in, so if
2965     // the anded constant includes them, clear them now!
2966     //
2967     uint32_t BitWidth = AndRHS->getType()->getBitWidth();
2968     uint32_t OpRHSVal = OpRHS->getLimitedValue(BitWidth);
2969     APInt ShlMask(APInt::getHighBitsSet(BitWidth, BitWidth-OpRHSVal));
2970     ConstantInt *CI = ConstantInt::get(AndRHS->getValue() & ShlMask);
2971
2972     if (CI->getValue() == ShlMask) { 
2973     // Masking out bits that the shift already masks
2974       return ReplaceInstUsesWith(TheAnd, Op);   // No need for the and.
2975     } else if (CI != AndRHS) {                  // Reducing bits set in and.
2976       TheAnd.setOperand(1, CI);
2977       return &TheAnd;
2978     }
2979     break;
2980   }
2981   case Instruction::LShr:
2982   {
2983     // We know that the AND will not produce any of the bits shifted in, so if
2984     // the anded constant includes them, clear them now!  This only applies to
2985     // unsigned shifts, because a signed shr may bring in set bits!
2986     //
2987     uint32_t BitWidth = AndRHS->getType()->getBitWidth();
2988     uint32_t OpRHSVal = OpRHS->getLimitedValue(BitWidth);
2989     APInt ShrMask(APInt::getLowBitsSet(BitWidth, BitWidth - OpRHSVal));
2990     ConstantInt *CI = ConstantInt::get(AndRHS->getValue() & ShrMask);
2991
2992     if (CI->getValue() == ShrMask) {   
2993     // Masking out bits that the shift already masks.
2994       return ReplaceInstUsesWith(TheAnd, Op);
2995     } else if (CI != AndRHS) {
2996       TheAnd.setOperand(1, CI);  // Reduce bits set in and cst.
2997       return &TheAnd;
2998     }
2999     break;
3000   }
3001   case Instruction::AShr:
3002     // Signed shr.
3003     // See if this is shifting in some sign extension, then masking it out
3004     // with an and.
3005     if (Op->hasOneUse()) {
3006       uint32_t BitWidth = AndRHS->getType()->getBitWidth();
3007       uint32_t OpRHSVal = OpRHS->getLimitedValue(BitWidth);
3008       APInt ShrMask(APInt::getLowBitsSet(BitWidth, BitWidth - OpRHSVal));
3009       Constant *C = ConstantInt::get(AndRHS->getValue() & ShrMask);
3010       if (C == AndRHS) {          // Masking out bits shifted in.
3011         // (Val ashr C1) & C2 -> (Val lshr C1) & C2
3012         // Make the argument unsigned.
3013         Value *ShVal = Op->getOperand(0);
3014         ShVal = InsertNewInstBefore(
3015             BinaryOperator::createLShr(ShVal, OpRHS, 
3016                                    Op->getName()), TheAnd);
3017         return BinaryOperator::createAnd(ShVal, AndRHS, TheAnd.getName());
3018       }
3019     }
3020     break;
3021   }
3022   return 0;
3023 }
3024
3025
3026 /// InsertRangeTest - Emit a computation of: (V >= Lo && V < Hi) if Inside is
3027 /// true, otherwise (V < Lo || V >= Hi).  In pratice, we emit the more efficient
3028 /// (V-Lo) <u Hi-Lo.  This method expects that Lo <= Hi. isSigned indicates
3029 /// whether to treat the V, Lo and HI as signed or not. IB is the location to
3030 /// insert new instructions.
3031 Instruction *InstCombiner::InsertRangeTest(Value *V, Constant *Lo, Constant *Hi,
3032                                            bool isSigned, bool Inside, 
3033                                            Instruction &IB) {
3034   assert(cast<ConstantInt>(ConstantExpr::getICmp((isSigned ? 
3035             ICmpInst::ICMP_SLE:ICmpInst::ICMP_ULE), Lo, Hi))->getZExtValue() &&
3036          "Lo is not <= Hi in range emission code!");
3037     
3038   if (Inside) {
3039     if (Lo == Hi)  // Trivially false.
3040       return new ICmpInst(ICmpInst::ICMP_NE, V, V);
3041
3042     // V >= Min && V < Hi --> V < Hi
3043     if (cast<ConstantInt>(Lo)->isMinValue(isSigned)) {
3044       ICmpInst::Predicate pred = (isSigned ? 
3045         ICmpInst::ICMP_SLT : ICmpInst::ICMP_ULT);
3046       return new ICmpInst(pred, V, Hi);
3047     }
3048
3049     // Emit V-Lo <u Hi-Lo
3050     Constant *NegLo = ConstantExpr::getNeg(Lo);
3051     Instruction *Add = BinaryOperator::createAdd(V, NegLo, V->getName()+".off");
3052     InsertNewInstBefore(Add, IB);
3053     Constant *UpperBound = ConstantExpr::getAdd(NegLo, Hi);
3054     return new ICmpInst(ICmpInst::ICMP_ULT, Add, UpperBound);
3055   }
3056
3057   if (Lo == Hi)  // Trivially true.
3058     return new ICmpInst(ICmpInst::ICMP_EQ, V, V);
3059
3060   // V < Min || V >= Hi -> V > Hi-1
3061   Hi = SubOne(cast<ConstantInt>(Hi));
3062   if (cast<ConstantInt>(Lo)->isMinValue(isSigned)) {
3063     ICmpInst::Predicate pred = (isSigned ? 
3064         ICmpInst::ICMP_SGT : ICmpInst::ICMP_UGT);
3065     return new ICmpInst(pred, V, Hi);
3066   }
3067
3068   // Emit V-Lo >u Hi-1-Lo
3069   // Note that Hi has already had one subtracted from it, above.
3070   ConstantInt *NegLo = cast<ConstantInt>(ConstantExpr::getNeg(Lo));
3071   Instruction *Add = BinaryOperator::createAdd(V, NegLo, V->getName()+".off");
3072   InsertNewInstBefore(Add, IB);
3073   Constant *LowerBound = ConstantExpr::getAdd(NegLo, Hi);
3074   return new ICmpInst(ICmpInst::ICMP_UGT, Add, LowerBound);
3075 }
3076
3077 // isRunOfOnes - Returns true iff Val consists of one contiguous run of 1s with
3078 // any number of 0s on either side.  The 1s are allowed to wrap from LSB to
3079 // MSB, so 0x000FFF0, 0x0000FFFF, and 0xFF0000FF are all runs.  0x0F0F0000 is
3080 // not, since all 1s are not contiguous.
3081 static bool isRunOfOnes(ConstantInt *Val, uint32_t &MB, uint32_t &ME) {
3082   const APInt& V = Val->getValue();
3083   uint32_t BitWidth = Val->getType()->getBitWidth();
3084   if (!APIntOps::isShiftedMask(BitWidth, V)) return false;
3085
3086   // look for the first zero bit after the run of ones
3087   MB = BitWidth - ((V - 1) ^ V).countLeadingZeros();
3088   // look for the first non-zero bit
3089   ME = V.getActiveBits(); 
3090   return true;
3091 }
3092
3093 /// FoldLogicalPlusAnd - This is part of an expression (LHS +/- RHS) & Mask,
3094 /// where isSub determines whether the operator is a sub.  If we can fold one of
3095 /// the following xforms:
3096 /// 
3097 /// ((A & N) +/- B) & Mask -> (A +/- B) & Mask iff N&Mask == Mask
3098 /// ((A | N) +/- B) & Mask -> (A +/- B) & Mask iff N&Mask == 0
3099 /// ((A ^ N) +/- B) & Mask -> (A +/- B) & Mask iff N&Mask == 0
3100 ///
3101 /// return (A +/- B).
3102 ///
3103 Value *InstCombiner::FoldLogicalPlusAnd(Value *LHS, Value *RHS,
3104                                         ConstantInt *Mask, bool isSub,
3105                                         Instruction &I) {
3106   Instruction *LHSI = dyn_cast<Instruction>(LHS);
3107   if (!LHSI || LHSI->getNumOperands() != 2 ||
3108       !isa<ConstantInt>(LHSI->getOperand(1))) return 0;
3109
3110   ConstantInt *N = cast<ConstantInt>(LHSI->getOperand(1));
3111
3112   switch (LHSI->getOpcode()) {
3113   default: return 0;
3114   case Instruction::And:
3115     if (And(N, Mask) == Mask) {
3116       // If the AndRHS is a power of two minus one (0+1+), this is simple.
3117       if ((Mask->getValue().countLeadingZeros() + 
3118            Mask->getValue().countPopulation()) == 
3119           Mask->getValue().getBitWidth())
3120         break;
3121
3122       // Otherwise, if Mask is 0+1+0+, and if B is known to have the low 0+
3123       // part, we don't need any explicit masks to take them out of A.  If that
3124       // is all N is, ignore it.
3125       uint32_t MB = 0, ME = 0;
3126       if (isRunOfOnes(Mask, MB, ME)) {  // begin/end bit of run, inclusive
3127         uint32_t BitWidth = cast<IntegerType>(RHS->getType())->getBitWidth();
3128         APInt Mask(APInt::getLowBitsSet(BitWidth, MB-1));
3129         if (MaskedValueIsZero(RHS, Mask))
3130           break;
3131       }
3132     }
3133     return 0;
3134   case Instruction::Or:
3135   case Instruction::Xor:
3136     // If the AndRHS is a power of two minus one (0+1+), and N&Mask == 0
3137     if ((Mask->getValue().countLeadingZeros() + 
3138          Mask->getValue().countPopulation()) == Mask->getValue().getBitWidth()
3139         && And(N, Mask)->isZero())
3140       break;
3141     return 0;
3142   }
3143   
3144   Instruction *New;
3145   if (isSub)
3146     New = BinaryOperator::createSub(LHSI->getOperand(0), RHS, "fold");
3147   else
3148     New = BinaryOperator::createAdd(LHSI->getOperand(0), RHS, "fold");
3149   return InsertNewInstBefore(New, I);
3150 }
3151
3152 Instruction *InstCombiner::visitAnd(BinaryOperator &I) {
3153   bool Changed = SimplifyCommutative(I);
3154   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
3155
3156   if (isa<UndefValue>(Op1))                         // X & undef -> 0
3157     return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
3158
3159   // and X, X = X
3160   if (Op0 == Op1)
3161     return ReplaceInstUsesWith(I, Op1);
3162
3163   // See if we can simplify any instructions used by the instruction whose sole 
3164   // purpose is to compute bits we don't care about.
3165   if (!isa<VectorType>(I.getType())) {
3166     uint32_t BitWidth = cast<IntegerType>(I.getType())->getBitWidth();
3167     APInt KnownZero(BitWidth, 0), KnownOne(BitWidth, 0);
3168     if (SimplifyDemandedBits(&I, APInt::getAllOnesValue(BitWidth),
3169                              KnownZero, KnownOne))
3170       return &I;
3171   } else {
3172     if (ConstantVector *CP = dyn_cast<ConstantVector>(Op1)) {
3173       if (CP->isAllOnesValue())
3174         return ReplaceInstUsesWith(I, I.getOperand(0));
3175     }
3176   }
3177   
3178   if (ConstantInt *AndRHS = dyn_cast<ConstantInt>(Op1)) {
3179     const APInt& AndRHSMask = AndRHS->getValue();
3180     APInt NotAndRHS(~AndRHSMask);
3181
3182     // Optimize a variety of ((val OP C1) & C2) combinations...
3183     if (isa<BinaryOperator>(Op0)) {
3184       Instruction *Op0I = cast<Instruction>(Op0);
3185       Value *Op0LHS = Op0I->getOperand(0);
3186       Value *Op0RHS = Op0I->getOperand(1);
3187       switch (Op0I->getOpcode()) {
3188       case Instruction::Xor:
3189       case Instruction::Or:
3190         // If the mask is only needed on one incoming arm, push it up.
3191         if (Op0I->hasOneUse()) {
3192           if (MaskedValueIsZero(Op0LHS, NotAndRHS)) {
3193             // Not masking anything out for the LHS, move to RHS.
3194             Instruction *NewRHS = BinaryOperator::createAnd(Op0RHS, AndRHS,
3195                                                    Op0RHS->getName()+".masked");
3196             InsertNewInstBefore(NewRHS, I);
3197             return BinaryOperator::create(
3198                        cast<BinaryOperator>(Op0I)->getOpcode(), Op0LHS, NewRHS);
3199           }
3200           if (!isa<Constant>(Op0RHS) &&
3201               MaskedValueIsZero(Op0RHS, NotAndRHS)) {
3202             // Not masking anything out for the RHS, move to LHS.
3203             Instruction *NewLHS = BinaryOperator::createAnd(Op0LHS, AndRHS,
3204                                                    Op0LHS->getName()+".masked");
3205             InsertNewInstBefore(NewLHS, I);
3206             return BinaryOperator::create(
3207                        cast<BinaryOperator>(Op0I)->getOpcode(), NewLHS, Op0RHS);
3208           }
3209         }
3210
3211         break;
3212       case Instruction::Add:
3213         // ((A & N) + B) & AndRHS -> (A + B) & AndRHS iff N&AndRHS == AndRHS.
3214         // ((A | N) + B) & AndRHS -> (A + B) & AndRHS iff N&AndRHS == 0
3215         // ((A ^ N) + B) & AndRHS -> (A + B) & AndRHS iff N&AndRHS == 0
3216         if (Value *V = FoldLogicalPlusAnd(Op0LHS, Op0RHS, AndRHS, false, I))
3217           return BinaryOperator::createAnd(V, AndRHS);
3218         if (Value *V = FoldLogicalPlusAnd(Op0RHS, Op0LHS, AndRHS, false, I))
3219           return BinaryOperator::createAnd(V, AndRHS);  // Add commutes
3220         break;
3221
3222       case Instruction::Sub:
3223         // ((A & N) - B) & AndRHS -> (A - B) & AndRHS iff N&AndRHS == AndRHS.
3224         // ((A | N) - B) & AndRHS -> (A - B) & AndRHS iff N&AndRHS == 0
3225         // ((A ^ N) - B) & AndRHS -> (A - B) & AndRHS iff N&AndRHS == 0
3226         if (Value *V = FoldLogicalPlusAnd(Op0LHS, Op0RHS, AndRHS, true, I))
3227           return BinaryOperator::createAnd(V, AndRHS);
3228         break;
3229       }
3230
3231       if (ConstantInt *Op0CI = dyn_cast<ConstantInt>(Op0I->getOperand(1)))
3232         if (Instruction *Res = OptAndOp(Op0I, Op0CI, AndRHS, I))
3233           return Res;
3234     } else if (CastInst *CI = dyn_cast<CastInst>(Op0)) {
3235       // If this is an integer truncation or change from signed-to-unsigned, and
3236       // if the source is an and/or with immediate, transform it.  This
3237       // frequently occurs for bitfield accesses.
3238       if (Instruction *CastOp = dyn_cast<Instruction>(CI->getOperand(0))) {
3239         if ((isa<TruncInst>(CI) || isa<BitCastInst>(CI)) &&
3240             CastOp->getNumOperands() == 2)
3241           if (ConstantInt *AndCI = dyn_cast<ConstantInt>(CastOp->getOperand(1)))
3242             if (CastOp->getOpcode() == Instruction::And) {
3243               // Change: and (cast (and X, C1) to T), C2
3244               // into  : and (cast X to T), trunc_or_bitcast(C1)&C2
3245               // This will fold the two constants together, which may allow 
3246               // other simplifications.
3247               Instruction *NewCast = CastInst::createTruncOrBitCast(
3248                 CastOp->getOperand(0), I.getType(), 
3249                 CastOp->getName()+".shrunk");
3250               NewCast = InsertNewInstBefore(NewCast, I);
3251               // trunc_or_bitcast(C1)&C2
3252               Constant *C3 = ConstantExpr::getTruncOrBitCast(AndCI,I.getType());
3253               C3 = ConstantExpr::getAnd(C3, AndRHS);
3254               return BinaryOperator::createAnd(NewCast, C3);
3255             } else if (CastOp->getOpcode() == Instruction::Or) {
3256               // Change: and (cast (or X, C1) to T), C2
3257               // into  : trunc(C1)&C2 iff trunc(C1)&C2 == C2
3258               Constant *C3 = ConstantExpr::getTruncOrBitCast(AndCI,I.getType());
3259               if (ConstantExpr::getAnd(C3, AndRHS) == AndRHS)   // trunc(C1)&C2
3260                 return ReplaceInstUsesWith(I, AndRHS);
3261             }
3262       }
3263     }
3264
3265     // Try to fold constant and into select arguments.
3266     if (SelectInst *SI = dyn_cast<SelectInst>(Op0))
3267       if (Instruction *R = FoldOpIntoSelect(I, SI, this))
3268         return R;
3269     if (isa<PHINode>(Op0))
3270       if (Instruction *NV = FoldOpIntoPhi(I))
3271         return NV;
3272   }
3273
3274   Value *Op0NotVal = dyn_castNotVal(Op0);
3275   Value *Op1NotVal = dyn_castNotVal(Op1);
3276
3277   if (Op0NotVal == Op1 || Op1NotVal == Op0)  // A & ~A  == ~A & A == 0
3278     return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
3279
3280   // (~A & ~B) == (~(A | B)) - De Morgan's Law
3281   if (Op0NotVal && Op1NotVal && isOnlyUse(Op0) && isOnlyUse(Op1)) {
3282     Instruction *Or = BinaryOperator::createOr(Op0NotVal, Op1NotVal,
3283                                                I.getName()+".demorgan");
3284     InsertNewInstBefore(Or, I);
3285     return BinaryOperator::createNot(Or);
3286   }
3287   
3288   {
3289     Value *A = 0, *B = 0;
3290     if (match(Op0, m_Or(m_Value(A), m_Value(B))))
3291       if (A == Op1 || B == Op1)    // (A | ?) & A  --> A
3292         return ReplaceInstUsesWith(I, Op1);
3293     if (match(Op1, m_Or(m_Value(A), m_Value(B))))
3294       if (A == Op0 || B == Op0)    // A & (A | ?)  --> A
3295         return ReplaceInstUsesWith(I, Op0);
3296     
3297     if (Op0->hasOneUse() &&
3298         match(Op0, m_Xor(m_Value(A), m_Value(B)))) {
3299       if (A == Op1) {                                // (A^B)&A -> A&(A^B)
3300         I.swapOperands();     // Simplify below
3301         std::swap(Op0, Op1);
3302       } else if (B == Op1) {                         // (A^B)&B -> B&(B^A)
3303         cast<BinaryOperator>(Op0)->swapOperands();
3304         I.swapOperands();     // Simplify below
3305         std::swap(Op0, Op1);
3306       }
3307     }
3308     if (Op1->hasOneUse() &&
3309         match(Op1, m_Xor(m_Value(A), m_Value(B)))) {
3310       if (B == Op0) {                                // B&(A^B) -> B&(B^A)
3311         cast<BinaryOperator>(Op1)->swapOperands();
3312         std::swap(A, B);
3313       }
3314       if (A == Op0) {                                // A&(A^B) -> A & ~B
3315         Instruction *NotB = BinaryOperator::createNot(B, "tmp");
3316         InsertNewInstBefore(NotB, I);
3317         return BinaryOperator::createAnd(A, NotB);
3318       }
3319     }
3320   }
3321   
3322   if (ICmpInst *RHS = dyn_cast<ICmpInst>(Op1)) {
3323     // (icmp1 A, B) & (icmp2 A, B) --> (icmp3 A, B)
3324     if (Instruction *R = AssociativeOpt(I, FoldICmpLogical(*this, RHS)))
3325       return R;
3326
3327     Value *LHSVal, *RHSVal;
3328     ConstantInt *LHSCst, *RHSCst;
3329     ICmpInst::Predicate LHSCC, RHSCC;
3330     if (match(Op0, m_ICmp(LHSCC, m_Value(LHSVal), m_ConstantInt(LHSCst))))
3331       if (match(RHS, m_ICmp(RHSCC, m_Value(RHSVal), m_ConstantInt(RHSCst))))
3332         if (LHSVal == RHSVal &&    // Found (X icmp C1) & (X icmp C2)
3333             // ICMP_[GL]E X, CST is folded to ICMP_[GL]T elsewhere.
3334             LHSCC != ICmpInst::ICMP_UGE && LHSCC != ICmpInst::ICMP_ULE &&
3335             RHSCC != ICmpInst::ICMP_UGE && RHSCC != ICmpInst::ICMP_ULE &&
3336             LHSCC != ICmpInst::ICMP_SGE && LHSCC != ICmpInst::ICMP_SLE &&
3337             RHSCC != ICmpInst::ICMP_SGE && RHSCC != ICmpInst::ICMP_SLE) {
3338           // Ensure that the larger constant is on the RHS.
3339           ICmpInst::Predicate GT = ICmpInst::isSignedPredicate(LHSCC) ? 
3340             ICmpInst::ICMP_SGT : ICmpInst::ICMP_UGT;
3341           Constant *Cmp = ConstantExpr::getICmp(GT, LHSCst, RHSCst);
3342           ICmpInst *LHS = cast<ICmpInst>(Op0);
3343           if (cast<ConstantInt>(Cmp)->getZExtValue()) {
3344             std::swap(LHS, RHS);
3345             std::swap(LHSCst, RHSCst);
3346             std::swap(LHSCC, RHSCC);
3347           }
3348
3349           // At this point, we know we have have two icmp instructions
3350           // comparing a value against two constants and and'ing the result
3351           // together.  Because of the above check, we know that we only have
3352           // icmp eq, icmp ne, icmp [su]lt, and icmp [SU]gt here. We also know 
3353           // (from the FoldICmpLogical check above), that the two constants 
3354           // are not equal and that the larger constant is on the RHS
3355           assert(LHSCst != RHSCst && "Compares not folded above?");
3356
3357           switch (LHSCC) {
3358           default: assert(0 && "Unknown integer condition code!");
3359           case ICmpInst::ICMP_EQ:
3360             switch (RHSCC) {
3361             default: assert(0 && "Unknown integer condition code!");
3362             case ICmpInst::ICMP_EQ:         // (X == 13 & X == 15) -> false
3363             case ICmpInst::ICMP_UGT:        // (X == 13 & X >  15) -> false
3364             case ICmpInst::ICMP_SGT:        // (X == 13 & X >  15) -> false
3365               return ReplaceInstUsesWith(I, ConstantInt::getFalse());
3366             case ICmpInst::ICMP_NE:         // (X == 13 & X != 15) -> X == 13
3367             case ICmpInst::ICMP_ULT:        // (X == 13 & X <  15) -> X == 13
3368             case ICmpInst::ICMP_SLT:        // (X == 13 & X <  15) -> X == 13
3369               return ReplaceInstUsesWith(I, LHS);
3370             }
3371           case ICmpInst::ICMP_NE:
3372             switch (RHSCC) {
3373             default: assert(0 && "Unknown integer condition code!");
3374             case ICmpInst::ICMP_ULT:
3375               if (LHSCst == SubOne(RHSCst)) // (X != 13 & X u< 14) -> X < 13
3376                 return new ICmpInst(ICmpInst::ICMP_ULT, LHSVal, LHSCst);
3377               break;                        // (X != 13 & X u< 15) -> no change
3378             case ICmpInst::ICMP_SLT:
3379               if (LHSCst == SubOne(RHSCst)) // (X != 13 & X s< 14) -> X < 13
3380                 return new ICmpInst(ICmpInst::ICMP_SLT, LHSVal, LHSCst);
3381               break;                        // (X != 13 & X s< 15) -> no change
3382             case ICmpInst::ICMP_EQ:         // (X != 13 & X == 15) -> X == 15
3383             case ICmpInst::ICMP_UGT:        // (X != 13 & X u> 15) -> X u> 15
3384             case ICmpInst::ICMP_SGT:        // (X != 13 & X s> 15) -> X s> 15
3385               return ReplaceInstUsesWith(I, RHS);
3386             case ICmpInst::ICMP_NE:
3387               if (LHSCst == SubOne(RHSCst)){// (X != 13 & X != 14) -> X-13 >u 1
3388                 Constant *AddCST = ConstantExpr::getNeg(LHSCst);
3389                 Instruction *Add = BinaryOperator::createAdd(LHSVal, AddCST,
3390                                                       LHSVal->getName()+".off");
3391                 InsertNewInstBefore(Add, I);
3392                 return new ICmpInst(ICmpInst::ICMP_UGT, Add,
3393                                     ConstantInt::get(Add->getType(), 1));
3394               }
3395               break;                        // (X != 13 & X != 15) -> no change
3396             }
3397             break;
3398           case ICmpInst::ICMP_ULT:
3399             switch (RHSCC) {
3400             default: assert(0 && "Unknown integer condition code!");
3401             case ICmpInst::ICMP_EQ:         // (X u< 13 & X == 15) -> false
3402             case ICmpInst::ICMP_UGT:        // (X u< 13 & X u> 15) -> false
3403               return ReplaceInstUsesWith(I, ConstantInt::getFalse());
3404             case ICmpInst::ICMP_SGT:        // (X u< 13 & X s> 15) -> no change
3405               break;
3406             case ICmpInst::ICMP_NE:         // (X u< 13 & X != 15) -> X u< 13
3407             case ICmpInst::ICMP_ULT:        // (X u< 13 & X u< 15) -> X u< 13
3408               return ReplaceInstUsesWith(I, LHS);
3409             case ICmpInst::ICMP_SLT:        // (X u< 13 & X s< 15) -> no change
3410               break;
3411             }
3412             break;
3413           case ICmpInst::ICMP_SLT:
3414             switch (RHSCC) {
3415             default: assert(0 && "Unknown integer condition code!");
3416             case ICmpInst::ICMP_EQ:         // (X s< 13 & X == 15) -> false
3417             case ICmpInst::ICMP_SGT:        // (X s< 13 & X s> 15) -> false
3418               return ReplaceInstUsesWith(I, ConstantInt::getFalse());
3419             case ICmpInst::ICMP_UGT:        // (X s< 13 & X u> 15) -> no change
3420               break;
3421             case ICmpInst::ICMP_NE:         // (X s< 13 & X != 15) -> X < 13
3422             case ICmpInst::ICMP_SLT:        // (X s< 13 & X s< 15) -> X < 13
3423               return ReplaceInstUsesWith(I, LHS);
3424             case ICmpInst::ICMP_ULT:        // (X s< 13 & X u< 15) -> no change
3425               break;
3426             }
3427             break;
3428           case ICmpInst::ICMP_UGT:
3429             switch (RHSCC) {
3430             default: assert(0 && "Unknown integer condition code!");
3431             case ICmpInst::ICMP_EQ:         // (X u> 13 & X == 15) -> X > 13
3432               return ReplaceInstUsesWith(I, LHS);
3433             case ICmpInst::ICMP_UGT:        // (X u> 13 & X u> 15) -> X u> 15
3434               return ReplaceInstUsesWith(I, RHS);
3435             case ICmpInst::ICMP_SGT:        // (X u> 13 & X s> 15) -> no change
3436               break;
3437             case ICmpInst::ICMP_NE:
3438               if (RHSCst == AddOne(LHSCst)) // (X u> 13 & X != 14) -> X u> 14
3439                 return new ICmpInst(LHSCC, LHSVal, RHSCst);
3440               break;                        // (X u> 13 & X != 15) -> no change
3441             case ICmpInst::ICMP_ULT:        // (X u> 13 & X u< 15) ->(X-14) <u 1
3442               return InsertRangeTest(LHSVal, AddOne(LHSCst), RHSCst, false, 
3443                                      true, I);
3444             case ICmpInst::ICMP_SLT:        // (X u> 13 & X s< 15) -> no change
3445               break;
3446             }
3447             break;
3448           case ICmpInst::ICMP_SGT:
3449             switch (RHSCC) {
3450             default: assert(0 && "Unknown integer condition code!");
3451             case ICmpInst::ICMP_EQ:         // (X s> 13 & X == 15) -> X s> 13
3452               return ReplaceInstUsesWith(I, LHS);
3453             case ICmpInst::ICMP_SGT:        // (X s> 13 & X s> 15) -> X s> 15
3454               return ReplaceInstUsesWith(I, RHS);
3455             case ICmpInst::ICMP_UGT:        // (X s> 13 & X u> 15) -> no change
3456               break;
3457             case ICmpInst::ICMP_NE:
3458               if (RHSCst == AddOne(LHSCst)) // (X s> 13 & X != 14) -> X s> 14
3459                 return new ICmpInst(LHSCC, LHSVal, RHSCst);
3460               break;                        // (X s> 13 & X != 15) -> no change
3461             case ICmpInst::ICMP_SLT:        // (X s> 13 & X s< 15) ->(X-14) s< 1
3462               return InsertRangeTest(LHSVal, AddOne(LHSCst), RHSCst, true, 
3463                                      true, I);
3464             case ICmpInst::ICMP_ULT:        // (X s> 13 & X u< 15) -> no change
3465               break;
3466             }
3467             break;
3468           }
3469         }
3470   }
3471
3472   // fold (and (cast A), (cast B)) -> (cast (and A, B))
3473   if (CastInst *Op0C = dyn_cast<CastInst>(Op0))
3474     if (CastInst *Op1C = dyn_cast<CastInst>(Op1))
3475       if (Op0C->getOpcode() == Op1C->getOpcode()) { // same cast kind ?
3476         const Type *SrcTy = Op0C->getOperand(0)->getType();
3477         if (SrcTy == Op1C->getOperand(0)->getType() && SrcTy->isInteger() &&
3478             // Only do this if the casts both really cause code to be generated.
3479             ValueRequiresCast(Op0C->getOpcode(), Op0C->getOperand(0), 
3480                               I.getType(), TD) &&
3481             ValueRequiresCast(Op1C->getOpcode(), Op1C->getOperand(0), 
3482                               I.getType(), TD)) {
3483           Instruction *NewOp = BinaryOperator::createAnd(Op0C->getOperand(0),
3484                                                          Op1C->getOperand(0),
3485                                                          I.getName());
3486           InsertNewInstBefore(NewOp, I);
3487           return CastInst::create(Op0C->getOpcode(), NewOp, I.getType());
3488         }
3489       }
3490     
3491   // (X >> Z) & (Y >> Z)  -> (X&Y) >> Z  for all shifts.
3492   if (BinaryOperator *SI1 = dyn_cast<BinaryOperator>(Op1)) {
3493     if (BinaryOperator *SI0 = dyn_cast<BinaryOperator>(Op0))
3494       if (SI0->isShift() && SI0->getOpcode() == SI1->getOpcode() && 
3495           SI0->getOperand(1) == SI1->getOperand(1) &&
3496           (SI0->hasOneUse() || SI1->hasOneUse())) {
3497         Instruction *NewOp =
3498           InsertNewInstBefore(BinaryOperator::createAnd(SI0->getOperand(0),
3499                                                         SI1->getOperand(0),
3500                                                         SI0->getName()), I);
3501         return BinaryOperator::create(SI1->getOpcode(), NewOp, 
3502                                       SI1->getOperand(1));
3503       }
3504   }
3505
3506   return Changed ? &I : 0;
3507 }
3508
3509 /// CollectBSwapParts - Look to see if the specified value defines a single byte
3510 /// in the result.  If it does, and if the specified byte hasn't been filled in
3511 /// yet, fill it in and return false.
3512 static bool CollectBSwapParts(Value *V, SmallVector<Value*, 8> &ByteValues) {
3513   Instruction *I = dyn_cast<Instruction>(V);
3514   if (I == 0) return true;
3515
3516   // If this is an or instruction, it is an inner node of the bswap.
3517   if (I->getOpcode() == Instruction::Or)
3518     return CollectBSwapParts(I->getOperand(0), ByteValues) ||
3519            CollectBSwapParts(I->getOperand(1), ByteValues);
3520   
3521   uint32_t BitWidth = I->getType()->getPrimitiveSizeInBits();
3522   // If this is a shift by a constant int, and it is "24", then its operand
3523   // defines a byte.  We only handle unsigned types here.
3524   if (I->isShift() && isa<ConstantInt>(I->getOperand(1))) {
3525     // Not shifting the entire input by N-1 bytes?
3526     if (cast<ConstantInt>(I->getOperand(1))->getLimitedValue(BitWidth) !=
3527         8*(ByteValues.size()-1))
3528       return true;
3529     
3530     unsigned DestNo;
3531     if (I->getOpcode() == Instruction::Shl) {
3532       // X << 24 defines the top byte with the lowest of the input bytes.
3533       DestNo = ByteValues.size()-1;
3534     } else {
3535       // X >>u 24 defines the low byte with the highest of the input bytes.
3536       DestNo = 0;
3537     }
3538     
3539     // If the destination byte value is already defined, the values are or'd
3540     // together, which isn't a bswap (unless it's an or of the same bits).
3541     if (ByteValues[DestNo] && ByteValues[DestNo] != I->getOperand(0))
3542       return true;
3543     ByteValues[DestNo] = I->getOperand(0);
3544     return false;
3545   }
3546   
3547   // Otherwise, we can only handle and(shift X, imm), imm).  Bail out of if we
3548   // don't have this.
3549   Value *Shift = 0, *ShiftLHS = 0;
3550   ConstantInt *AndAmt = 0, *ShiftAmt = 0;
3551   if (!match(I, m_And(m_Value(Shift), m_ConstantInt(AndAmt))) ||
3552       !match(Shift, m_Shift(m_Value(ShiftLHS), m_ConstantInt(ShiftAmt))))
3553     return true;
3554   Instruction *SI = cast<Instruction>(Shift);
3555
3556   // Make sure that the shift amount is by a multiple of 8 and isn't too big.
3557   if (ShiftAmt->getLimitedValue(BitWidth) & 7 ||
3558       ShiftAmt->getLimitedValue(BitWidth) > 8*ByteValues.size())
3559     return true;
3560   
3561   // Turn 0xFF -> 0, 0xFF00 -> 1, 0xFF0000 -> 2, etc.
3562   unsigned DestByte;
3563   if (AndAmt->getValue().getActiveBits() > 64)
3564     return true;
3565   uint64_t AndAmtVal = AndAmt->getZExtValue();
3566   for (DestByte = 0; DestByte != ByteValues.size(); ++DestByte)
3567     if (AndAmtVal == uint64_t(0xFF) << 8*DestByte)
3568       break;
3569   // Unknown mask for bswap.
3570   if (DestByte == ByteValues.size()) return true;
3571   
3572   unsigned ShiftBytes = ShiftAmt->getZExtValue()/8;
3573   unsigned SrcByte;
3574   if (SI->getOpcode() == Instruction::Shl)
3575     SrcByte = DestByte - ShiftBytes;
3576   else
3577     SrcByte = DestByte + ShiftBytes;
3578   
3579   // If the SrcByte isn't a bswapped value from the DestByte, reject it.
3580   if (SrcByte != ByteValues.size()-DestByte-1)
3581     return true;
3582   
3583   // If the destination byte value is already defined, the values are or'd
3584   // together, which isn't a bswap (unless it's an or of the same bits).
3585   if (ByteValues[DestByte] && ByteValues[DestByte] != SI->getOperand(0))
3586     return true;
3587   ByteValues[DestByte] = SI->getOperand(0);
3588   return false;
3589 }
3590
3591 /// MatchBSwap - Given an OR instruction, check to see if this is a bswap idiom.
3592 /// If so, insert the new bswap intrinsic and return it.
3593 Instruction *InstCombiner::MatchBSwap(BinaryOperator &I) {
3594   const IntegerType *ITy = dyn_cast<IntegerType>(I.getType());
3595   if (!ITy || ITy->getBitWidth() % 16) 
3596     return 0;   // Can only bswap pairs of bytes.  Can't do vectors.
3597   
3598   /// ByteValues - For each byte of the result, we keep track of which value
3599   /// defines each byte.
3600   SmallVector<Value*, 8> ByteValues;
3601   ByteValues.resize(ITy->getBitWidth()/8);
3602     
3603   // Try to find all the pieces corresponding to the bswap.
3604   if (CollectBSwapParts(I.getOperand(0), ByteValues) ||
3605       CollectBSwapParts(I.getOperand(1), ByteValues))
3606     return 0;
3607   
3608   // Check to see if all of the bytes come from the same value.
3609   Value *V = ByteValues[0];
3610   if (V == 0) return 0;  // Didn't find a byte?  Must be zero.
3611   
3612   // Check to make sure that all of the bytes come from the same value.
3613   for (unsigned i = 1, e = ByteValues.size(); i != e; ++i)
3614     if (ByteValues[i] != V)
3615       return 0;
3616   const Type *Tys[] = { ITy, ITy };
3617   Module *M = I.getParent()->getParent()->getParent();
3618   Function *F = Intrinsic::getDeclaration(M, Intrinsic::bswap, Tys, 2);
3619   return new CallInst(F, V);
3620 }
3621
3622
3623 Instruction *InstCombiner::visitOr(BinaryOperator &I) {
3624   bool Changed = SimplifyCommutative(I);
3625   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
3626
3627   if (isa<UndefValue>(Op1))                       // X | undef -> -1
3628     return ReplaceInstUsesWith(I, ConstantInt::getAllOnesValue(I.getType()));
3629
3630   // or X, X = X
3631   if (Op0 == Op1)
3632     return ReplaceInstUsesWith(I, Op0);
3633
3634   // See if we can simplify any instructions used by the instruction whose sole 
3635   // purpose is to compute bits we don't care about.
3636   if (!isa<VectorType>(I.getType())) {
3637     uint32_t BitWidth = cast<IntegerType>(I.getType())->getBitWidth();
3638     APInt KnownZero(BitWidth, 0), KnownOne(BitWidth, 0);
3639     if (SimplifyDemandedBits(&I, APInt::getAllOnesValue(BitWidth),
3640                              KnownZero, KnownOne))
3641       return &I;
3642   }
3643   
3644   // or X, -1 == -1
3645   if (ConstantInt *RHS = dyn_cast<ConstantInt>(Op1)) {
3646     ConstantInt *C1 = 0; Value *X = 0;
3647     // (X & C1) | C2 --> (X | C2) & (C1|C2)
3648     if (match(Op0, m_And(m_Value(X), m_ConstantInt(C1))) && isOnlyUse(Op0)) {
3649       Instruction *Or = BinaryOperator::createOr(X, RHS);
3650       InsertNewInstBefore(Or, I);
3651       Or->takeName(Op0);
3652       return BinaryOperator::createAnd(Or, 
3653                ConstantInt::get(RHS->getValue() | C1->getValue()));
3654     }
3655
3656     // (X ^ C1) | C2 --> (X | C2) ^ (C1&~C2)
3657     if (match(Op0, m_Xor(m_Value(X), m_ConstantInt(C1))) && isOnlyUse(Op0)) {
3658       Instruction *Or = BinaryOperator::createOr(X, RHS);
3659       InsertNewInstBefore(Or, I);
3660       Or->takeName(Op0);
3661       return BinaryOperator::createXor(Or,
3662                  ConstantInt::get(C1->getValue() & ~RHS->getValue()));
3663     }
3664
3665     // Try to fold constant and into select arguments.
3666     if (SelectInst *SI = dyn_cast<SelectInst>(Op0))
3667       if (Instruction *R = FoldOpIntoSelect(I, SI, this))
3668         return R;
3669     if (isa<PHINode>(Op0))
3670       if (Instruction *NV = FoldOpIntoPhi(I))
3671         return NV;
3672   }
3673
3674   Value *A = 0, *B = 0;
3675   ConstantInt *C1 = 0, *C2 = 0;
3676
3677   if (match(Op0, m_And(m_Value(A), m_Value(B))))
3678     if (A == Op1 || B == Op1)    // (A & ?) | A  --> A
3679       return ReplaceInstUsesWith(I, Op1);
3680   if (match(Op1, m_And(m_Value(A), m_Value(B))))
3681     if (A == Op0 || B == Op0)    // A | (A & ?)  --> A
3682       return ReplaceInstUsesWith(I, Op0);
3683
3684   // (A | B) | C  and  A | (B | C)                  -> bswap if possible.
3685   // (A >> B) | (C << D)  and  (A << B) | (B >> C)  -> bswap if possible.
3686   if (match(Op0, m_Or(m_Value(), m_Value())) ||
3687       match(Op1, m_Or(m_Value(), m_Value())) ||
3688       (match(Op0, m_Shift(m_Value(), m_Value())) &&
3689        match(Op1, m_Shift(m_Value(), m_Value())))) {
3690     if (Instruction *BSwap = MatchBSwap(I))
3691       return BSwap;
3692   }
3693   
3694   // (X^C)|Y -> (X|Y)^C iff Y&C == 0
3695   if (Op0->hasOneUse() && match(Op0, m_Xor(m_Value(A), m_ConstantInt(C1))) &&
3696       MaskedValueIsZero(Op1, C1->getValue())) {
3697     Instruction *NOr = BinaryOperator::createOr(A, Op1);
3698     InsertNewInstBefore(NOr, I);
3699     NOr->takeName(Op0);
3700     return BinaryOperator::createXor(NOr, C1);
3701   }
3702
3703   // Y|(X^C) -> (X|Y)^C iff Y&C == 0
3704   if (Op1->hasOneUse() && match(Op1, m_Xor(m_Value(A), m_ConstantInt(C1))) &&
3705       MaskedValueIsZero(Op0, C1->getValue())) {
3706     Instruction *NOr = BinaryOperator::createOr(A, Op0);
3707     InsertNewInstBefore(NOr, I);
3708     NOr->takeName(Op0);
3709     return BinaryOperator::createXor(NOr, C1);
3710   }
3711
3712   // (A & C1)|(B & C2)
3713   if (match(Op0, m_And(m_Value(A), m_ConstantInt(C1))) &&
3714       match(Op1, m_And(m_Value(B), m_ConstantInt(C2)))) {
3715
3716     if (A == B)  // (A & C1)|(A & C2) == A & (C1|C2)
3717       return BinaryOperator::createAnd(A, 
3718                  ConstantInt::get(C1->getValue() | C2->getValue()));
3719
3720
3721     // If we have: ((V + N) & C1) | (V & C2)
3722     // .. and C2 = ~C1 and C2 is 0+1+ and (N & C2) == 0
3723     // replace with V+N.
3724     if (C1->getValue() == ~C2->getValue()) {
3725       Value *V1 = 0, *V2 = 0;
3726       if ((C2->getValue() & (C2->getValue()+1)) == 0 && // C2 == 0+1+
3727           match(A, m_Add(m_Value(V1), m_Value(V2)))) {
3728         // Add commutes, try both ways.
3729         if (V1 == B && MaskedValueIsZero(V2, C2->getValue()))
3730           return ReplaceInstUsesWith(I, A);
3731         if (V2 == B && MaskedValueIsZero(V1, C2->getValue()))
3732           return ReplaceInstUsesWith(I, A);
3733       }
3734       // Or commutes, try both ways.
3735       if ((C1->getValue() & (C1->getValue()+1)) == 0 &&
3736           match(B, m_Add(m_Value(V1), m_Value(V2)))) {
3737         // Add commutes, try both ways.
3738         if (V1 == A && MaskedValueIsZero(V2, C1->getValue()))
3739           return ReplaceInstUsesWith(I, B);
3740         if (V2 == A && MaskedValueIsZero(V1, C1->getValue()))
3741           return ReplaceInstUsesWith(I, B);
3742       }
3743     }
3744   }
3745   
3746   // (X >> Z) | (Y >> Z)  -> (X|Y) >> Z  for all shifts.
3747   if (BinaryOperator *SI1 = dyn_cast<BinaryOperator>(Op1)) {
3748     if (BinaryOperator *SI0 = dyn_cast<BinaryOperator>(Op0))
3749       if (SI0->isShift() && SI0->getOpcode() == SI1->getOpcode() && 
3750           SI0->getOperand(1) == SI1->getOperand(1) &&
3751           (SI0->hasOneUse() || SI1->hasOneUse())) {
3752         Instruction *NewOp =
3753         InsertNewInstBefore(BinaryOperator::createOr(SI0->getOperand(0),
3754                                                      SI1->getOperand(0),
3755                                                      SI0->getName()), I);
3756         return BinaryOperator::create(SI1->getOpcode(), NewOp, 
3757                                       SI1->getOperand(1));
3758       }
3759   }
3760
3761   if (match(Op0, m_Not(m_Value(A)))) {   // ~A | Op1
3762     if (A == Op1)   // ~A | A == -1
3763       return ReplaceInstUsesWith(I,
3764                                 ConstantInt::getAllOnesValue(I.getType()));
3765   } else {
3766     A = 0;
3767   }
3768   // Note, A is still live here!
3769   if (match(Op1, m_Not(m_Value(B)))) {   // Op0 | ~B
3770     if (Op0 == B)
3771       return ReplaceInstUsesWith(I,
3772                                 ConstantInt::getAllOnesValue(I.getType()));
3773
3774     // (~A | ~B) == (~(A & B)) - De Morgan's Law
3775     if (A && isOnlyUse(Op0) && isOnlyUse(Op1)) {
3776       Value *And = InsertNewInstBefore(BinaryOperator::createAnd(A, B,
3777                                               I.getName()+".demorgan"), I);
3778       return BinaryOperator::createNot(And);
3779     }
3780   }
3781
3782   // (icmp1 A, B) | (icmp2 A, B) --> (icmp3 A, B)
3783   if (ICmpInst *RHS = dyn_cast<ICmpInst>(I.getOperand(1))) {
3784     if (Instruction *R = AssociativeOpt(I, FoldICmpLogical(*this, RHS)))
3785       return R;
3786
3787     Value *LHSVal, *RHSVal;
3788     ConstantInt *LHSCst, *RHSCst;
3789     ICmpInst::Predicate LHSCC, RHSCC;
3790     if (match(Op0, m_ICmp(LHSCC, m_Value(LHSVal), m_ConstantInt(LHSCst))))
3791       if (match(RHS, m_ICmp(RHSCC, m_Value(RHSVal), m_ConstantInt(RHSCst))))
3792         if (LHSVal == RHSVal &&    // Found (X icmp C1) | (X icmp C2)
3793             // icmp [us][gl]e x, cst is folded to icmp [us][gl]t elsewhere.
3794             LHSCC != ICmpInst::ICMP_UGE && LHSCC != ICmpInst::ICMP_ULE &&
3795             RHSCC != ICmpInst::ICMP_UGE && RHSCC != ICmpInst::ICMP_ULE &&
3796             LHSCC != ICmpInst::ICMP_SGE && LHSCC != ICmpInst::ICMP_SLE &&
3797             RHSCC != ICmpInst::ICMP_SGE && RHSCC != ICmpInst::ICMP_SLE) {
3798           // Ensure that the larger constant is on the RHS.
3799           ICmpInst::Predicate GT = ICmpInst::isSignedPredicate(LHSCC) ? 
3800             ICmpInst::ICMP_SGT : ICmpInst::ICMP_UGT;
3801           Constant *Cmp = ConstantExpr::getICmp(GT, LHSCst, RHSCst);
3802           ICmpInst *LHS = cast<ICmpInst>(Op0);
3803           if (cast<ConstantInt>(Cmp)->getZExtValue()) {
3804             std::swap(LHS, RHS);
3805             std::swap(LHSCst, RHSCst);
3806             std::swap(LHSCC, RHSCC);
3807           }
3808
3809           // At this point, we know we have have two icmp instructions
3810           // comparing a value against two constants and or'ing the result
3811           // together.  Because of the above check, we know that we only have
3812           // ICMP_EQ, ICMP_NE, ICMP_LT, and ICMP_GT here. We also know (from the
3813           // FoldICmpLogical check above), that the two constants are not
3814           // equal.
3815           assert(LHSCst != RHSCst && "Compares not folded above?");
3816
3817           switch (LHSCC) {
3818           default: assert(0 && "Unknown integer condition code!");
3819           case ICmpInst::ICMP_EQ:
3820             switch (RHSCC) {
3821             default: assert(0 && "Unknown integer condition code!");
3822             case ICmpInst::ICMP_EQ:
3823               if (LHSCst == SubOne(RHSCst)) {// (X == 13 | X == 14) -> X-13 <u 2
3824                 Constant *AddCST = ConstantExpr::getNeg(LHSCst);
3825                 Instruction *Add = BinaryOperator::createAdd(LHSVal, AddCST,
3826                                                       LHSVal->getName()+".off");
3827                 InsertNewInstBefore(Add, I);
3828                 AddCST = Subtract(AddOne(RHSCst), LHSCst);
3829                 return new ICmpInst(ICmpInst::ICMP_ULT, Add, AddCST);
3830               }
3831               break;                         // (X == 13 | X == 15) -> no change
3832             case ICmpInst::ICMP_UGT:         // (X == 13 | X u> 14) -> no change
3833             case ICmpInst::ICMP_SGT:         // (X == 13 | X s> 14) -> no change
3834               break;
3835             case ICmpInst::ICMP_NE:          // (X == 13 | X != 15) -> X != 15
3836             case ICmpInst::ICMP_ULT:         // (X == 13 | X u< 15) -> X u< 15
3837             case ICmpInst::ICMP_SLT:         // (X == 13 | X s< 15) -> X s< 15
3838               return ReplaceInstUsesWith(I, RHS);
3839             }
3840             break;
3841           case ICmpInst::ICMP_NE:
3842             switch (RHSCC) {
3843             default: assert(0 && "Unknown integer condition code!");
3844             case ICmpInst::ICMP_EQ:          // (X != 13 | X == 15) -> X != 13
3845             case ICmpInst::ICMP_UGT:         // (X != 13 | X u> 15) -> X != 13
3846             case ICmpInst::ICMP_SGT:         // (X != 13 | X s> 15) -> X != 13
3847               return ReplaceInstUsesWith(I, LHS);
3848             case ICmpInst::ICMP_NE:          // (X != 13 | X != 15) -> true
3849             case ICmpInst::ICMP_ULT:         // (X != 13 | X u< 15) -> true
3850             case ICmpInst::ICMP_SLT:         // (X != 13 | X s< 15) -> true
3851               return ReplaceInstUsesWith(I, ConstantInt::getTrue());
3852             }
3853             break;
3854           case ICmpInst::ICMP_ULT:
3855             switch (RHSCC) {
3856             default: assert(0 && "Unknown integer condition code!");
3857             case ICmpInst::ICMP_EQ:         // (X u< 13 | X == 14) -> no change
3858               break;
3859             case ICmpInst::ICMP_UGT:        // (X u< 13 | X u> 15) ->(X-13) u> 2
3860               return InsertRangeTest(LHSVal, LHSCst, AddOne(RHSCst), false, 
3861                                      false, I);
3862             case ICmpInst::ICMP_SGT:        // (X u< 13 | X s> 15) -> no change
3863               break;
3864             case ICmpInst::ICMP_NE:         // (X u< 13 | X != 15) -> X != 15
3865             case ICmpInst::ICMP_ULT:        // (X u< 13 | X u< 15) -> X u< 15
3866               return ReplaceInstUsesWith(I, RHS);
3867             case ICmpInst::ICMP_SLT:        // (X u< 13 | X s< 15) -> no change
3868               break;
3869             }
3870             break;
3871           case ICmpInst::ICMP_SLT:
3872             switch (RHSCC) {
3873             default: assert(0 && "Unknown integer condition code!");
3874             case ICmpInst::ICMP_EQ:         // (X s< 13 | X == 14) -> no change
3875               break;
3876             case ICmpInst::ICMP_SGT:        // (X s< 13 | X s> 15) ->(X-13) s> 2
3877               return InsertRangeTest(LHSVal, LHSCst, AddOne(RHSCst), true, 
3878                                      false, I);
3879             case ICmpInst::ICMP_UGT:        // (X s< 13 | X u> 15) -> no change
3880               break;
3881             case ICmpInst::ICMP_NE:         // (X s< 13 | X != 15) -> X != 15
3882             case ICmpInst::ICMP_SLT:        // (X s< 13 | X s< 15) -> X s< 15
3883               return ReplaceInstUsesWith(I, RHS);
3884             case ICmpInst::ICMP_ULT:        // (X s< 13 | X u< 15) -> no change
3885               break;
3886             }
3887             break;
3888           case ICmpInst::ICMP_UGT:
3889             switch (RHSCC) {
3890             default: assert(0 && "Unknown integer condition code!");
3891             case ICmpInst::ICMP_EQ:         // (X u> 13 | X == 15) -> X u> 13
3892             case ICmpInst::ICMP_UGT:        // (X u> 13 | X u> 15) -> X u> 13
3893               return ReplaceInstUsesWith(I, LHS);
3894             case ICmpInst::ICMP_SGT:        // (X u> 13 | X s> 15) -> no change
3895               break;
3896             case ICmpInst::ICMP_NE:         // (X u> 13 | X != 15) -> true
3897             case ICmpInst::ICMP_ULT:        // (X u> 13 | X u< 15) -> true
3898               return ReplaceInstUsesWith(I, ConstantInt::getTrue());
3899             case ICmpInst::ICMP_SLT:        // (X u> 13 | X s< 15) -> no change
3900               break;
3901             }
3902             break;
3903           case ICmpInst::ICMP_SGT:
3904             switch (RHSCC) {
3905             default: assert(0 && "Unknown integer condition code!");
3906             case ICmpInst::ICMP_EQ:         // (X s> 13 | X == 15) -> X > 13
3907             case ICmpInst::ICMP_SGT:        // (X s> 13 | X s> 15) -> X > 13
3908               return ReplaceInstUsesWith(I, LHS);
3909             case ICmpInst::ICMP_UGT:        // (X s> 13 | X u> 15) -> no change
3910               break;
3911             case ICmpInst::ICMP_NE:         // (X s> 13 | X != 15) -> true
3912             case ICmpInst::ICMP_SLT:        // (X s> 13 | X s< 15) -> true
3913               return ReplaceInstUsesWith(I, ConstantInt::getTrue());
3914             case ICmpInst::ICMP_ULT:        // (X s> 13 | X u< 15) -> no change
3915               break;
3916             }
3917             break;
3918           }
3919         }
3920   }
3921     
3922   // fold (or (cast A), (cast B)) -> (cast (or A, B))
3923   if (CastInst *Op0C = dyn_cast<CastInst>(Op0))
3924     if (CastInst *Op1C = dyn_cast<CastInst>(Op1))
3925       if (Op0C->getOpcode() == Op1C->getOpcode()) {// same cast kind ?
3926         const Type *SrcTy = Op0C->getOperand(0)->getType();
3927         if (SrcTy == Op1C->getOperand(0)->getType() && SrcTy->isInteger() &&
3928             // Only do this if the casts both really cause code to be generated.
3929             ValueRequiresCast(Op0C->getOpcode(), Op0C->getOperand(0), 
3930                               I.getType(), TD) &&
3931             ValueRequiresCast(Op1C->getOpcode(), Op1C->getOperand(0), 
3932                               I.getType(), TD)) {
3933           Instruction *NewOp = BinaryOperator::createOr(Op0C->getOperand(0),
3934                                                         Op1C->getOperand(0),
3935                                                         I.getName());
3936           InsertNewInstBefore(NewOp, I);
3937           return CastInst::create(Op0C->getOpcode(), NewOp, I.getType());
3938         }
3939       }
3940       
3941
3942   return Changed ? &I : 0;
3943 }
3944
3945 // XorSelf - Implements: X ^ X --> 0
3946 struct XorSelf {
3947   Value *RHS;
3948   XorSelf(Value *rhs) : RHS(rhs) {}
3949   bool shouldApply(Value *LHS) const { return LHS == RHS; }
3950   Instruction *apply(BinaryOperator &Xor) const {
3951     return &Xor;
3952   }
3953 };
3954
3955
3956 Instruction *InstCombiner::visitXor(BinaryOperator &I) {
3957   bool Changed = SimplifyCommutative(I);
3958   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
3959
3960   if (isa<UndefValue>(Op1))
3961     return ReplaceInstUsesWith(I, Op1);  // X ^ undef -> undef
3962
3963   // xor X, X = 0, even if X is nested in a sequence of Xor's.
3964   if (Instruction *Result = AssociativeOpt(I, XorSelf(Op1))) {
3965     assert(Result == &I && "AssociativeOpt didn't work?");
3966     return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
3967   }
3968   
3969   // See if we can simplify any instructions used by the instruction whose sole 
3970   // purpose is to compute bits we don't care about.
3971   if (!isa<VectorType>(I.getType())) {
3972     uint32_t BitWidth = cast<IntegerType>(I.getType())->getBitWidth();
3973     APInt KnownZero(BitWidth, 0), KnownOne(BitWidth, 0);
3974     if (SimplifyDemandedBits(&I, APInt::getAllOnesValue(BitWidth),
3975                              KnownZero, KnownOne))
3976       return &I;
3977   }
3978
3979   if (ConstantInt *RHS = dyn_cast<ConstantInt>(Op1)) {
3980     // xor (icmp A, B), true = not (icmp A, B) = !icmp A, B
3981     if (ICmpInst *ICI = dyn_cast<ICmpInst>(Op0))
3982       if (RHS == ConstantInt::getTrue() && ICI->hasOneUse())
3983         return new ICmpInst(ICI->getInversePredicate(),
3984                             ICI->getOperand(0), ICI->getOperand(1));
3985
3986     if (BinaryOperator *Op0I = dyn_cast<BinaryOperator>(Op0)) {
3987       // ~(c-X) == X-c-1 == X+(-c-1)
3988       if (Op0I->getOpcode() == Instruction::Sub && RHS->isAllOnesValue())
3989         if (Constant *Op0I0C = dyn_cast<Constant>(Op0I->getOperand(0))) {
3990           Constant *NegOp0I0C = ConstantExpr::getNeg(Op0I0C);
3991           Constant *ConstantRHS = ConstantExpr::getSub(NegOp0I0C,
3992                                               ConstantInt::get(I.getType(), 1));
3993           return BinaryOperator::createAdd(Op0I->getOperand(1), ConstantRHS);
3994         }
3995
3996       // ~(~X & Y) --> (X | ~Y)
3997       if (Op0I->getOpcode() == Instruction::And && RHS->isAllOnesValue()) {
3998         if (dyn_castNotVal(Op0I->getOperand(1))) Op0I->swapOperands();
3999         if (Value *Op0NotVal = dyn_castNotVal(Op0I->getOperand(0))) {
4000           Instruction *NotY =
4001             BinaryOperator::createNot(Op0I->getOperand(1),
4002                                       Op0I->getOperand(1)->getName()+".not");
4003           InsertNewInstBefore(NotY, I);
4004           return BinaryOperator::createOr(Op0NotVal, NotY);
4005         }
4006       }
4007           
4008       if (ConstantInt *Op0CI = dyn_cast<ConstantInt>(Op0I->getOperand(1)))
4009         if (Op0I->getOpcode() == Instruction::Add) {
4010           // ~(X-c) --> (-c-1)-X
4011           if (RHS->isAllOnesValue()) {
4012             Constant *NegOp0CI = ConstantExpr::getNeg(Op0CI);
4013             return BinaryOperator::createSub(
4014                            ConstantExpr::getSub(NegOp0CI,
4015                                              ConstantInt::get(I.getType(), 1)),
4016                                           Op0I->getOperand(0));
4017           } else if (RHS->getValue().isSignBit()) {
4018             // (X + C) ^ signbit -> (X + C + signbit)
4019             Constant *C = ConstantInt::get(RHS->getValue() + Op0CI->getValue());
4020             return BinaryOperator::createAdd(Op0I->getOperand(0), C);
4021
4022           }
4023         } else if (Op0I->getOpcode() == Instruction::Or) {
4024           // (X|C1)^C2 -> X^(C1|C2) iff X&~C1 == 0
4025           if (MaskedValueIsZero(Op0I->getOperand(0), Op0CI->getValue())) {
4026             Constant *NewRHS = ConstantExpr::getOr(Op0CI, RHS);
4027             // Anything in both C1 and C2 is known to be zero, remove it from
4028             // NewRHS.
4029             Constant *CommonBits = And(Op0CI, RHS);
4030             NewRHS = ConstantExpr::getAnd(NewRHS, 
4031                                           ConstantExpr::getNot(CommonBits));
4032             AddToWorkList(Op0I);
4033             I.setOperand(0, Op0I->getOperand(0));
4034             I.setOperand(1, NewRHS);
4035             return &I;
4036           }
4037         }
4038     }
4039
4040     // Try to fold constant and into select arguments.
4041     if (SelectInst *SI = dyn_cast<SelectInst>(Op0))
4042       if (Instruction *R = FoldOpIntoSelect(I, SI, this))
4043         return R;
4044     if (isa<PHINode>(Op0))
4045       if (Instruction *NV = FoldOpIntoPhi(I))
4046         return NV;
4047   }
4048
4049   if (Value *X = dyn_castNotVal(Op0))   // ~A ^ A == -1
4050     if (X == Op1)
4051       return ReplaceInstUsesWith(I,
4052                                 ConstantInt::getAllOnesValue(I.getType()));
4053
4054   if (Value *X = dyn_castNotVal(Op1))   // A ^ ~A == -1
4055     if (X == Op0)
4056       return ReplaceInstUsesWith(I, ConstantInt::getAllOnesValue(I.getType()));
4057
4058   
4059   BinaryOperator *Op1I = dyn_cast<BinaryOperator>(Op1);
4060   if (Op1I) {
4061     Value *A, *B;
4062     if (match(Op1I, m_Or(m_Value(A), m_Value(B)))) {
4063       if (A == Op0) {              // B^(B|A) == (A|B)^B
4064         Op1I->swapOperands();
4065         I.swapOperands();
4066         std::swap(Op0, Op1);
4067       } else if (B == Op0) {       // B^(A|B) == (A|B)^B
4068         I.swapOperands();     // Simplified below.
4069         std::swap(Op0, Op1);
4070       }
4071     } else if (match(Op1I, m_Xor(m_Value(A), m_Value(B)))) {
4072       if (Op0 == A)                                          // A^(A^B) == B
4073         return ReplaceInstUsesWith(I, B);
4074       else if (Op0 == B)                                     // A^(B^A) == B
4075         return ReplaceInstUsesWith(I, A);
4076     } else if (match(Op1I, m_And(m_Value(A), m_Value(B))) && Op1I->hasOneUse()){
4077       if (A == Op0) {                                      // A^(A&B) -> A^(B&A)
4078         Op1I->swapOperands();
4079         std::swap(A, B);
4080       }
4081       if (B == Op0) {                                      // A^(B&A) -> (B&A)^A
4082         I.swapOperands();     // Simplified below.
4083         std::swap(Op0, Op1);
4084       }
4085     }
4086   }
4087   
4088   BinaryOperator *Op0I = dyn_cast<BinaryOperator>(Op0);
4089   if (Op0I) {
4090     Value *A, *B;
4091     if (match(Op0I, m_Or(m_Value(A), m_Value(B))) && Op0I->hasOneUse()) {
4092       if (A == Op1)                                  // (B|A)^B == (A|B)^B
4093         std::swap(A, B);
4094       if (B == Op1) {                                // (A|B)^B == A & ~B
4095         Instruction *NotB =
4096           InsertNewInstBefore(BinaryOperator::createNot(Op1, "tmp"), I);
4097         return BinaryOperator::createAnd(A, NotB);
4098       }
4099     } else if (match(Op0I, m_Xor(m_Value(A), m_Value(B)))) {
4100       if (Op1 == A)                                          // (A^B)^A == B
4101         return ReplaceInstUsesWith(I, B);
4102       else if (Op1 == B)                                     // (B^A)^A == B
4103         return ReplaceInstUsesWith(I, A);
4104     } else if (match(Op0I, m_And(m_Value(A), m_Value(B))) && Op0I->hasOneUse()){
4105       if (A == Op1)                                        // (A&B)^A -> (B&A)^A
4106         std::swap(A, B);
4107       if (B == Op1 &&                                      // (B&A)^A == ~B & A
4108           !isa<ConstantInt>(Op1)) {  // Canonical form is (B&C)^C
4109         Instruction *N =
4110           InsertNewInstBefore(BinaryOperator::createNot(A, "tmp"), I);
4111         return BinaryOperator::createAnd(N, Op1);
4112       }
4113     }
4114   }
4115   
4116   // (X >> Z) ^ (Y >> Z)  -> (X^Y) >> Z  for all shifts.
4117   if (Op0I && Op1I && Op0I->isShift() && 
4118       Op0I->getOpcode() == Op1I->getOpcode() && 
4119       Op0I->getOperand(1) == Op1I->getOperand(1) &&
4120       (Op1I->hasOneUse() || Op1I->hasOneUse())) {
4121     Instruction *NewOp =
4122       InsertNewInstBefore(BinaryOperator::createXor(Op0I->getOperand(0),
4123                                                     Op1I->getOperand(0),
4124                                                     Op0I->getName()), I);
4125     return BinaryOperator::create(Op1I->getOpcode(), NewOp, 
4126                                   Op1I->getOperand(1));
4127   }
4128     
4129   if (Op0I && Op1I) {
4130     Value *A, *B, *C, *D;
4131     // (A & B)^(A | B) -> A ^ B
4132     if (match(Op0I, m_And(m_Value(A), m_Value(B))) &&
4133         match(Op1I, m_Or(m_Value(C), m_Value(D)))) {
4134       if ((A == C && B == D) || (A == D && B == C)) 
4135         return BinaryOperator::createXor(A, B);
4136     }
4137     // (A | B)^(A & B) -> A ^ B
4138     if (match(Op0I, m_Or(m_Value(A), m_Value(B))) &&
4139         match(Op1I, m_And(m_Value(C), m_Value(D)))) {
4140       if ((A == C && B == D) || (A == D && B == C)) 
4141         return BinaryOperator::createXor(A, B);
4142     }
4143     
4144     // (A & B)^(C & D)
4145     if ((Op0I->hasOneUse() || Op1I->hasOneUse()) &&
4146         match(Op0I, m_And(m_Value(A), m_Value(B))) &&
4147         match(Op1I, m_And(m_Value(C), m_Value(D)))) {
4148       // (X & Y)^(X & Y) -> (Y^Z) & X
4149       Value *X = 0, *Y = 0, *Z = 0;
4150       if (A == C)
4151         X = A, Y = B, Z = D;
4152       else if (A == D)
4153         X = A, Y = B, Z = C;
4154       else if (B == C)
4155         X = B, Y = A, Z = D;
4156       else if (B == D)
4157         X = B, Y = A, Z = C;
4158       
4159       if (X) {
4160         Instruction *NewOp =
4161         InsertNewInstBefore(BinaryOperator::createXor(Y, Z, Op0->getName()), I);
4162         return BinaryOperator::createAnd(NewOp, X);
4163       }
4164     }
4165   }
4166     
4167   // (icmp1 A, B) ^ (icmp2 A, B) --> (icmp3 A, B)
4168   if (ICmpInst *RHS = dyn_cast<ICmpInst>(I.getOperand(1)))
4169     if (Instruction *R = AssociativeOpt(I, FoldICmpLogical(*this, RHS)))
4170       return R;
4171
4172   // fold (xor (cast A), (cast B)) -> (cast (xor A, B))
4173   if (CastInst *Op0C = dyn_cast<CastInst>(Op0)) 
4174     if (CastInst *Op1C = dyn_cast<CastInst>(Op1))
4175       if (Op0C->getOpcode() == Op1C->getOpcode()) { // same cast kind?
4176         const Type *SrcTy = Op0C->getOperand(0)->getType();
4177         if (SrcTy == Op1C->getOperand(0)->getType() && SrcTy->isInteger() &&
4178             // Only do this if the casts both really cause code to be generated.
4179             ValueRequiresCast(Op0C->getOpcode(), Op0C->getOperand(0), 
4180                               I.getType(), TD) &&
4181             ValueRequiresCast(Op1C->getOpcode(), Op1C->getOperand(0), 
4182                               I.getType(), TD)) {
4183           Instruction *NewOp = BinaryOperator::createXor(Op0C->getOperand(0),
4184                                                          Op1C->getOperand(0),
4185                                                          I.getName());
4186           InsertNewInstBefore(NewOp, I);
4187           return CastInst::create(Op0C->getOpcode(), NewOp, I.getType());
4188         }
4189       }
4190
4191   return Changed ? &I : 0;
4192 }
4193
4194 /// AddWithOverflow - Compute Result = In1+In2, returning true if the result
4195 /// overflowed for this type.
4196 static bool AddWithOverflow(ConstantInt *&Result, ConstantInt *In1,
4197                             ConstantInt *In2, bool IsSigned = false) {
4198   Result = cast<ConstantInt>(Add(In1, In2));
4199
4200   if (IsSigned)
4201     if (In2->getValue().isNegative())
4202       return Result->getValue().sgt(In1->getValue());
4203     else
4204       return Result->getValue().slt(In1->getValue());
4205   else
4206     return Result->getValue().ult(In1->getValue());
4207 }
4208
4209 /// EmitGEPOffset - Given a getelementptr instruction/constantexpr, emit the
4210 /// code necessary to compute the offset from the base pointer (without adding
4211 /// in the base pointer).  Return the result as a signed integer of intptr size.
4212 static Value *EmitGEPOffset(User *GEP, Instruction &I, InstCombiner &IC) {
4213   TargetData &TD = IC.getTargetData();
4214   gep_type_iterator GTI = gep_type_begin(GEP);
4215   const Type *IntPtrTy = TD.getIntPtrType();
4216   Value *Result = Constant::getNullValue(IntPtrTy);
4217
4218   // Build a mask for high order bits.
4219   uint64_t PtrSizeMask = ~0ULL >> (64-TD.getPointerSize()*8);
4220
4221   for (unsigned i = 1, e = GEP->getNumOperands(); i != e; ++i, ++GTI) {
4222     Value *Op = GEP->getOperand(i);
4223     uint64_t Size = TD.getTypeSize(GTI.getIndexedType()) & PtrSizeMask;
4224     Constant *Scale = ConstantInt::get(IntPtrTy, Size);
4225     if (Constant *OpC = dyn_cast<Constant>(Op)) {
4226       if (!OpC->isNullValue()) {
4227         OpC = ConstantExpr::getIntegerCast(OpC, IntPtrTy, true /*SExt*/);
4228         Scale = ConstantExpr::getMul(OpC, Scale);
4229         if (Constant *RC = dyn_cast<Constant>(Result))
4230           Result = ConstantExpr::getAdd(RC, Scale);
4231         else {
4232           // Emit an add instruction.
4233           Result = IC.InsertNewInstBefore(
4234              BinaryOperator::createAdd(Result, Scale,
4235                                        GEP->getName()+".offs"), I);
4236         }
4237       }
4238     } else {
4239       // Convert to correct type.
4240       Op = IC.InsertNewInstBefore(CastInst::createSExtOrBitCast(Op, IntPtrTy,
4241                                                Op->getName()+".c"), I);
4242       if (Size != 1)
4243         // We'll let instcombine(mul) convert this to a shl if possible.
4244         Op = IC.InsertNewInstBefore(BinaryOperator::createMul(Op, Scale,
4245                                                     GEP->getName()+".idx"), I);
4246
4247       // Emit an add instruction.
4248       Result = IC.InsertNewInstBefore(BinaryOperator::createAdd(Op, Result,
4249                                                     GEP->getName()+".offs"), I);
4250     }
4251   }
4252   return Result;
4253 }
4254
4255 /// FoldGEPICmp - Fold comparisons between a GEP instruction and something
4256 /// else.  At this point we know that the GEP is on the LHS of the comparison.
4257 Instruction *InstCombiner::FoldGEPICmp(User *GEPLHS, Value *RHS,
4258                                        ICmpInst::Predicate Cond,
4259                                        Instruction &I) {
4260   assert(dyn_castGetElementPtr(GEPLHS) && "LHS is not a getelementptr!");
4261
4262   if (CastInst *CI = dyn_cast<CastInst>(RHS))
4263     if (isa<PointerType>(CI->getOperand(0)->getType()))
4264       RHS = CI->getOperand(0);
4265
4266   Value *PtrBase = GEPLHS->getOperand(0);
4267   if (PtrBase == RHS) {
4268     // As an optimization, we don't actually have to compute the actual value of
4269     // OFFSET if this is a icmp_eq or icmp_ne comparison, just return whether 
4270     // each index is zero or not.
4271     if (Cond == ICmpInst::ICMP_EQ || Cond == ICmpInst::ICMP_NE) {
4272       Instruction *InVal = 0;
4273       gep_type_iterator GTI = gep_type_begin(GEPLHS);
4274       for (unsigned i = 1, e = GEPLHS->getNumOperands(); i != e; ++i, ++GTI) {
4275         bool EmitIt = true;
4276         if (Constant *C = dyn_cast<Constant>(GEPLHS->getOperand(i))) {
4277           if (isa<UndefValue>(C))  // undef index -> undef.
4278             return ReplaceInstUsesWith(I, UndefValue::get(I.getType()));
4279           if (C->isNullValue())
4280             EmitIt = false;
4281           else if (TD->getTypeSize(GTI.getIndexedType()) == 0) {
4282             EmitIt = false;  // This is indexing into a zero sized array?
4283           } else if (isa<ConstantInt>(C))
4284             return ReplaceInstUsesWith(I, // No comparison is needed here.
4285                                  ConstantInt::get(Type::Int1Ty, 
4286                                                   Cond == ICmpInst::ICMP_NE));
4287         }
4288
4289         if (EmitIt) {
4290           Instruction *Comp =
4291             new ICmpInst(Cond, GEPLHS->getOperand(i),
4292                     Constant::getNullValue(GEPLHS->getOperand(i)->getType()));
4293           if (InVal == 0)
4294             InVal = Comp;
4295           else {
4296             InVal = InsertNewInstBefore(InVal, I);
4297             InsertNewInstBefore(Comp, I);
4298             if (Cond == ICmpInst::ICMP_NE)   // True if any are unequal
4299               InVal = BinaryOperator::createOr(InVal, Comp);
4300             else                              // True if all are equal
4301               InVal = BinaryOperator::createAnd(InVal, Comp);
4302           }
4303         }
4304       }
4305
4306       if (InVal)
4307         return InVal;
4308       else
4309         // No comparison is needed here, all indexes = 0
4310         ReplaceInstUsesWith(I, ConstantInt::get(Type::Int1Ty, 
4311                                                 Cond == ICmpInst::ICMP_EQ));
4312     }
4313
4314     // Only lower this if the icmp is the only user of the GEP or if we expect
4315     // the result to fold to a constant!
4316     if (isa<ConstantExpr>(GEPLHS) || GEPLHS->hasOneUse()) {
4317       // ((gep Ptr, OFFSET) cmp Ptr)   ---> (OFFSET cmp 0).
4318       Value *Offset = EmitGEPOffset(GEPLHS, I, *this);
4319       return new ICmpInst(ICmpInst::getSignedPredicate(Cond), Offset,
4320                           Constant::getNullValue(Offset->getType()));
4321     }
4322   } else if (User *GEPRHS = dyn_castGetElementPtr(RHS)) {
4323     // If the base pointers are different, but the indices are the same, just
4324     // compare the base pointer.
4325     if (PtrBase != GEPRHS->getOperand(0)) {
4326       bool IndicesTheSame = GEPLHS->getNumOperands()==GEPRHS->getNumOperands();
4327       IndicesTheSame &= GEPLHS->getOperand(0)->getType() ==
4328                         GEPRHS->getOperand(0)->getType();
4329       if (IndicesTheSame)
4330         for (unsigned i = 1, e = GEPLHS->getNumOperands(); i != e; ++i)
4331           if (GEPLHS->getOperand(i) != GEPRHS->getOperand(i)) {
4332             IndicesTheSame = false;
4333             break;
4334           }
4335
4336       // If all indices are the same, just compare the base pointers.
4337       if (IndicesTheSame)
4338         return new ICmpInst(ICmpInst::getSignedPredicate(Cond), 
4339                             GEPLHS->getOperand(0), GEPRHS->getOperand(0));
4340
4341       // Otherwise, the base pointers are different and the indices are
4342       // different, bail out.
4343       return 0;
4344     }
4345
4346     // If one of the GEPs has all zero indices, recurse.
4347     bool AllZeros = true;
4348     for (unsigned i = 1, e = GEPLHS->getNumOperands(); i != e; ++i)
4349       if (!isa<Constant>(GEPLHS->getOperand(i)) ||
4350           !cast<Constant>(GEPLHS->getOperand(i))->isNullValue()) {
4351         AllZeros = false;
4352         break;
4353       }
4354     if (AllZeros)
4355       return FoldGEPICmp(GEPRHS, GEPLHS->getOperand(0),
4356                           ICmpInst::getSwappedPredicate(Cond), I);
4357
4358     // If the other GEP has all zero indices, recurse.
4359     AllZeros = true;
4360     for (unsigned i = 1, e = GEPRHS->getNumOperands(); i != e; ++i)
4361       if (!isa<Constant>(GEPRHS->getOperand(i)) ||
4362           !cast<Constant>(GEPRHS->getOperand(i))->isNullValue()) {
4363         AllZeros = false;
4364         break;
4365       }
4366     if (AllZeros)
4367       return FoldGEPICmp(GEPLHS, GEPRHS->getOperand(0), Cond, I);
4368
4369     if (GEPLHS->getNumOperands() == GEPRHS->getNumOperands()) {
4370       // If the GEPs only differ by one index, compare it.
4371       unsigned NumDifferences = 0;  // Keep track of # differences.
4372       unsigned DiffOperand = 0;     // The operand that differs.
4373       for (unsigned i = 1, e = GEPRHS->getNumOperands(); i != e; ++i)
4374         if (GEPLHS->getOperand(i) != GEPRHS->getOperand(i)) {
4375           if (GEPLHS->getOperand(i)->getType()->getPrimitiveSizeInBits() !=
4376                    GEPRHS->getOperand(i)->getType()->getPrimitiveSizeInBits()) {
4377             // Irreconcilable differences.
4378             NumDifferences = 2;
4379             break;
4380           } else {
4381             if (NumDifferences++) break;
4382             DiffOperand = i;
4383           }
4384         }
4385
4386       if (NumDifferences == 0)   // SAME GEP?
4387         return ReplaceInstUsesWith(I, // No comparison is needed here.
4388                                    ConstantInt::get(Type::Int1Ty, 
4389                                                     Cond == ICmpInst::ICMP_EQ));
4390       else if (NumDifferences == 1) {
4391         Value *LHSV = GEPLHS->getOperand(DiffOperand);
4392         Value *RHSV = GEPRHS->getOperand(DiffOperand);
4393         // Make sure we do a signed comparison here.
4394         return new ICmpInst(ICmpInst::getSignedPredicate(Cond), LHSV, RHSV);
4395       }
4396     }
4397
4398     // Only lower this if the icmp is the only user of the GEP or if we expect
4399     // the result to fold to a constant!
4400     if ((isa<ConstantExpr>(GEPLHS) || GEPLHS->hasOneUse()) &&
4401         (isa<ConstantExpr>(GEPRHS) || GEPRHS->hasOneUse())) {
4402       // ((gep Ptr, OFFSET1) cmp (gep Ptr, OFFSET2)  --->  (OFFSET1 cmp OFFSET2)
4403       Value *L = EmitGEPOffset(GEPLHS, I, *this);
4404       Value *R = EmitGEPOffset(GEPRHS, I, *this);
4405       return new ICmpInst(ICmpInst::getSignedPredicate(Cond), L, R);
4406     }
4407   }
4408   return 0;
4409 }
4410
4411 Instruction *InstCombiner::visitFCmpInst(FCmpInst &I) {
4412   bool Changed = SimplifyCompare(I);
4413   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
4414
4415   // Fold trivial predicates.
4416   if (I.getPredicate() == FCmpInst::FCMP_FALSE)
4417     return ReplaceInstUsesWith(I, Constant::getNullValue(Type::Int1Ty));
4418   if (I.getPredicate() == FCmpInst::FCMP_TRUE)
4419     return ReplaceInstUsesWith(I, ConstantInt::get(Type::Int1Ty, 1));
4420   
4421   // Simplify 'fcmp pred X, X'
4422   if (Op0 == Op1) {
4423     switch (I.getPredicate()) {
4424     default: assert(0 && "Unknown predicate!");
4425     case FCmpInst::FCMP_UEQ:    // True if unordered or equal
4426     case FCmpInst::FCMP_UGE:    // True if unordered, greater than, or equal
4427     case FCmpInst::FCMP_ULE:    // True if unordered, less than, or equal
4428       return ReplaceInstUsesWith(I, ConstantInt::get(Type::Int1Ty, 1));
4429     case FCmpInst::FCMP_OGT:    // True if ordered and greater than
4430     case FCmpInst::FCMP_OLT:    // True if ordered and less than
4431     case FCmpInst::FCMP_ONE:    // True if ordered and operands are unequal
4432       return ReplaceInstUsesWith(I, ConstantInt::get(Type::Int1Ty, 0));
4433       
4434     case FCmpInst::FCMP_UNO:    // True if unordered: isnan(X) | isnan(Y)
4435     case FCmpInst::FCMP_ULT:    // True if unordered or less than
4436     case FCmpInst::FCMP_UGT:    // True if unordered or greater than
4437     case FCmpInst::FCMP_UNE:    // True if unordered or not equal
4438       // Canonicalize these to be 'fcmp uno %X, 0.0'.
4439       I.setPredicate(FCmpInst::FCMP_UNO);
4440       I.setOperand(1, Constant::getNullValue(Op0->getType()));
4441       return &I;
4442       
4443     case FCmpInst::FCMP_ORD:    // True if ordered (no nans)
4444     case FCmpInst::FCMP_OEQ:    // True if ordered and equal
4445     case FCmpInst::FCMP_OGE:    // True if ordered and greater than or equal
4446     case FCmpInst::FCMP_OLE:    // True if ordered and less than or equal
4447       // Canonicalize these to be 'fcmp ord %X, 0.0'.
4448       I.setPredicate(FCmpInst::FCMP_ORD);
4449       I.setOperand(1, Constant::getNullValue(Op0->getType()));
4450       return &I;
4451     }
4452   }
4453     
4454   if (isa<UndefValue>(Op1))                  // fcmp pred X, undef -> undef
4455     return ReplaceInstUsesWith(I, UndefValue::get(Type::Int1Ty));
4456
4457   // Handle fcmp with constant RHS
4458   if (Constant *RHSC = dyn_cast<Constant>(Op1)) {
4459     if (Instruction *LHSI = dyn_cast<Instruction>(Op0))
4460       switch (LHSI->getOpcode()) {
4461       case Instruction::PHI:
4462         if (Instruction *NV = FoldOpIntoPhi(I))
4463           return NV;
4464         break;
4465       case Instruction::Select:
4466         // If either operand of the select is a constant, we can fold the
4467         // comparison into the select arms, which will cause one to be
4468         // constant folded and the select turned into a bitwise or.
4469         Value *Op1 = 0, *Op2 = 0;
4470         if (LHSI->hasOneUse()) {
4471           if (Constant *C = dyn_cast<Constant>(LHSI->getOperand(1))) {
4472             // Fold the known value into the constant operand.
4473             Op1 = ConstantExpr::getCompare(I.getPredicate(), C, RHSC);
4474             // Insert a new FCmp of the other select operand.
4475             Op2 = InsertNewInstBefore(new FCmpInst(I.getPredicate(),
4476                                                       LHSI->getOperand(2), RHSC,
4477                                                       I.getName()), I);
4478           } else if (Constant *C = dyn_cast<Constant>(LHSI->getOperand(2))) {
4479             // Fold the known value into the constant operand.
4480             Op2 = ConstantExpr::getCompare(I.getPredicate(), C, RHSC);
4481             // Insert a new FCmp of the other select operand.
4482             Op1 = InsertNewInstBefore(new FCmpInst(I.getPredicate(),
4483                                                       LHSI->getOperand(1), RHSC,
4484                                                       I.getName()), I);
4485           }
4486         }
4487
4488         if (Op1)
4489           return new SelectInst(LHSI->getOperand(0), Op1, Op2);
4490         break;
4491       }
4492   }
4493
4494   return Changed ? &I : 0;
4495 }
4496
4497 Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
4498   bool Changed = SimplifyCompare(I);
4499   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
4500   const Type *Ty = Op0->getType();
4501
4502   // icmp X, X
4503   if (Op0 == Op1)
4504     return ReplaceInstUsesWith(I, ConstantInt::get(Type::Int1Ty, 
4505                                                    isTrueWhenEqual(I)));
4506
4507   if (isa<UndefValue>(Op1))                  // X icmp undef -> undef
4508     return ReplaceInstUsesWith(I, UndefValue::get(Type::Int1Ty));
4509
4510   // icmp of GlobalValues can never equal each other as long as they aren't
4511   // external weak linkage type.
4512   if (GlobalValue *GV0 = dyn_cast<GlobalValue>(Op0))
4513     if (GlobalValue *GV1 = dyn_cast<GlobalValue>(Op1))
4514       if (!GV0->hasExternalWeakLinkage() || !GV1->hasExternalWeakLinkage())
4515         return ReplaceInstUsesWith(I, ConstantInt::get(Type::Int1Ty,
4516                                                        !isTrueWhenEqual(I)));
4517
4518   // icmp <global/alloca*/null>, <global/alloca*/null> - Global/Stack value
4519   // addresses never equal each other!  We already know that Op0 != Op1.
4520   if ((isa<GlobalValue>(Op0) || isa<AllocaInst>(Op0) ||
4521        isa<ConstantPointerNull>(Op0)) &&
4522       (isa<GlobalValue>(Op1) || isa<AllocaInst>(Op1) ||
4523        isa<ConstantPointerNull>(Op1)))
4524     return ReplaceInstUsesWith(I, ConstantInt::get(Type::Int1Ty, 
4525                                                    !isTrueWhenEqual(I)));
4526
4527   // icmp's with boolean values can always be turned into bitwise operations
4528   if (Ty == Type::Int1Ty) {
4529     switch (I.getPredicate()) {
4530     default: assert(0 && "Invalid icmp instruction!");
4531     case ICmpInst::ICMP_EQ: {               // icmp eq bool %A, %B -> ~(A^B)
4532       Instruction *Xor = BinaryOperator::createXor(Op0, Op1, I.getName()+"tmp");
4533       InsertNewInstBefore(Xor, I);
4534       return BinaryOperator::createNot(Xor);
4535     }
4536     case ICmpInst::ICMP_NE:                  // icmp eq bool %A, %B -> A^B
4537       return BinaryOperator::createXor(Op0, Op1);
4538
4539     case ICmpInst::ICMP_UGT:
4540     case ICmpInst::ICMP_SGT:
4541       std::swap(Op0, Op1);                   // Change icmp gt -> icmp lt
4542       // FALL THROUGH
4543     case ICmpInst::ICMP_ULT:
4544     case ICmpInst::ICMP_SLT: {               // icmp lt bool A, B -> ~X & Y
4545       Instruction *Not = BinaryOperator::createNot(Op0, I.getName()+"tmp");
4546       InsertNewInstBefore(Not, I);
4547       return BinaryOperator::createAnd(Not, Op1);
4548     }
4549     case ICmpInst::ICMP_UGE:
4550     case ICmpInst::ICMP_SGE:
4551       std::swap(Op0, Op1);                   // Change icmp ge -> icmp le
4552       // FALL THROUGH
4553     case ICmpInst::ICMP_ULE:
4554     case ICmpInst::ICMP_SLE: {               //  icmp le bool %A, %B -> ~A | B
4555       Instruction *Not = BinaryOperator::createNot(Op0, I.getName()+"tmp");
4556       InsertNewInstBefore(Not, I);
4557       return BinaryOperator::createOr(Not, Op1);
4558     }
4559     }
4560   }
4561
4562   // See if we are doing a comparison between a constant and an instruction that
4563   // can be folded into the comparison.
4564   if (ConstantInt *CI = dyn_cast<ConstantInt>(Op1)) {
4565     switch (I.getPredicate()) {
4566     default: break;
4567     case ICmpInst::ICMP_ULT:                        // A <u MIN -> FALSE
4568       if (CI->isMinValue(false))
4569         return ReplaceInstUsesWith(I, ConstantInt::getFalse());
4570       if (CI->isMaxValue(false))                    // A <u MAX -> A != MAX
4571         return new ICmpInst(ICmpInst::ICMP_NE, Op0,Op1);
4572       if (isMinValuePlusOne(CI,false))              // A <u MIN+1 -> A == MIN
4573         return new ICmpInst(ICmpInst::ICMP_EQ, Op0, SubOne(CI));
4574       break;
4575
4576     case ICmpInst::ICMP_SLT:
4577       if (CI->isMinValue(true))                    // A <s MIN -> FALSE
4578         return ReplaceInstUsesWith(I, ConstantInt::getFalse());
4579       if (CI->isMaxValue(true))                    // A <s MAX -> A != MAX
4580         return new ICmpInst(ICmpInst::ICMP_NE, Op0, Op1);
4581       if (isMinValuePlusOne(CI,true))              // A <s MIN+1 -> A == MIN
4582         return new ICmpInst(ICmpInst::ICMP_EQ, Op0, SubOne(CI));
4583       break;
4584
4585     case ICmpInst::ICMP_UGT:
4586       if (CI->isMaxValue(false))                  // A >u MAX -> FALSE
4587         return ReplaceInstUsesWith(I, ConstantInt::getFalse());
4588       if (CI->isMinValue(false))                  // A >u MIN -> A != MIN
4589         return new ICmpInst(ICmpInst::ICMP_NE, Op0, Op1);
4590       if (isMaxValueMinusOne(CI, false))          // A >u MAX-1 -> A == MAX
4591         return new ICmpInst(ICmpInst::ICMP_EQ, Op0, AddOne(CI));
4592       break;
4593
4594     case ICmpInst::ICMP_SGT:
4595       if (CI->isMaxValue(true))                   // A >s MAX -> FALSE
4596         return ReplaceInstUsesWith(I, ConstantInt::getFalse());
4597       if (CI->isMinValue(true))                   // A >s MIN -> A != MIN
4598         return new ICmpInst(ICmpInst::ICMP_NE, Op0, Op1);
4599       if (isMaxValueMinusOne(CI, true))           // A >s MAX-1 -> A == MAX
4600         return new ICmpInst(ICmpInst::ICMP_EQ, Op0, AddOne(CI));
4601       break;
4602
4603     case ICmpInst::ICMP_ULE:
4604       if (CI->isMaxValue(false))                 // A <=u MAX -> TRUE
4605         return ReplaceInstUsesWith(I, ConstantInt::getTrue());
4606       if (CI->isMinValue(false))                 // A <=u MIN -> A == MIN
4607         return new ICmpInst(ICmpInst::ICMP_EQ, Op0, Op1);
4608       if (isMaxValueMinusOne(CI,false))          // A <=u MAX-1 -> A != MAX
4609         return new ICmpInst(ICmpInst::ICMP_NE, Op0, AddOne(CI));
4610       break;
4611
4612     case ICmpInst::ICMP_SLE:
4613       if (CI->isMaxValue(true))                  // A <=s MAX -> TRUE
4614         return ReplaceInstUsesWith(I, ConstantInt::getTrue());
4615       if (CI->isMinValue(true))                  // A <=s MIN -> A == MIN
4616         return new ICmpInst(ICmpInst::ICMP_EQ, Op0, Op1);
4617       if (isMaxValueMinusOne(CI,true))           // A <=s MAX-1 -> A != MAX
4618         return new ICmpInst(ICmpInst::ICMP_NE, Op0, AddOne(CI));
4619       break;
4620
4621     case ICmpInst::ICMP_UGE:
4622       if (CI->isMinValue(false))                 // A >=u MIN -> TRUE
4623         return ReplaceInstUsesWith(I, ConstantInt::getTrue());
4624       if (CI->isMaxValue(false))                 // A >=u MAX -> A == MAX
4625         return new ICmpInst(ICmpInst::ICMP_EQ, Op0, Op1);
4626       if (isMinValuePlusOne(CI,false))           // A >=u MIN-1 -> A != MIN
4627         return new ICmpInst(ICmpInst::ICMP_NE, Op0, SubOne(CI));
4628       break;
4629
4630     case ICmpInst::ICMP_SGE:
4631       if (CI->isMinValue(true))                  // A >=s MIN -> TRUE
4632         return ReplaceInstUsesWith(I, ConstantInt::getTrue());
4633       if (CI->isMaxValue(true))                  // A >=s MAX -> A == MAX
4634         return new ICmpInst(ICmpInst::ICMP_EQ, Op0, Op1);
4635       if (isMinValuePlusOne(CI,true))            // A >=s MIN-1 -> A != MIN
4636         return new ICmpInst(ICmpInst::ICMP_NE, Op0, SubOne(CI));
4637       break;
4638     }
4639
4640     // If we still have a icmp le or icmp ge instruction, turn it into the
4641     // appropriate icmp lt or icmp gt instruction.  Since the border cases have
4642     // already been handled above, this requires little checking.
4643     //
4644     switch (I.getPredicate()) {
4645       default: break;
4646       case ICmpInst::ICMP_ULE: 
4647         return new ICmpInst(ICmpInst::ICMP_ULT, Op0, AddOne(CI));
4648       case ICmpInst::ICMP_SLE:
4649         return new ICmpInst(ICmpInst::ICMP_SLT, Op0, AddOne(CI));
4650       case ICmpInst::ICMP_UGE:
4651         return new ICmpInst( ICmpInst::ICMP_UGT, Op0, SubOne(CI));
4652       case ICmpInst::ICMP_SGE:
4653         return new ICmpInst(ICmpInst::ICMP_SGT, Op0, SubOne(CI));
4654     }
4655     
4656     // See if we can fold the comparison based on bits known to be zero or one
4657     // in the input.
4658     uint32_t BitWidth = cast<IntegerType>(Ty)->getBitWidth();
4659     APInt KnownZero(BitWidth, 0), KnownOne(BitWidth, 0);
4660     if (SimplifyDemandedBits(Op0, APInt::getAllOnesValue(BitWidth),
4661                              KnownZero, KnownOne, 0))
4662       return &I;
4663         
4664     // Given the known and unknown bits, compute a range that the LHS could be
4665     // in.
4666     if ((KnownOne | KnownZero) != 0) {
4667       // Compute the Min, Max and RHS values based on the known bits. For the
4668       // EQ and NE we use unsigned values.
4669       APInt Min(BitWidth, 0), Max(BitWidth, 0);
4670       const APInt& RHSVal = CI->getValue();
4671       if (ICmpInst::isSignedPredicate(I.getPredicate())) {
4672         ComputeSignedMinMaxValuesFromKnownBits(Ty, KnownZero, KnownOne, Min, 
4673                                                Max);
4674       } else {
4675         ComputeUnsignedMinMaxValuesFromKnownBits(Ty, KnownZero, KnownOne, Min, 
4676                                                  Max);
4677       }
4678       switch (I.getPredicate()) {  // LE/GE have been folded already.
4679       default: assert(0 && "Unknown icmp opcode!");
4680       case ICmpInst::ICMP_EQ:
4681         if (Max.ult(RHSVal) || Min.ugt(RHSVal))
4682           return ReplaceInstUsesWith(I, ConstantInt::getFalse());
4683         break;
4684       case ICmpInst::ICMP_NE:
4685         if (Max.ult(RHSVal) || Min.ugt(RHSVal))
4686           return ReplaceInstUsesWith(I, ConstantInt::getTrue());
4687         break;
4688       case ICmpInst::ICMP_ULT:
4689         if (Max.ult(RHSVal))
4690           return ReplaceInstUsesWith(I, ConstantInt::getTrue());
4691         if (Min.ugt(RHSVal))
4692           return ReplaceInstUsesWith(I, ConstantInt::getFalse());
4693         break;
4694       case ICmpInst::ICMP_UGT:
4695         if (Min.ugt(RHSVal))
4696           return ReplaceInstUsesWith(I, ConstantInt::getTrue());
4697         if (Max.ult(RHSVal))
4698           return ReplaceInstUsesWith(I, ConstantInt::getFalse());
4699         break;
4700       case ICmpInst::ICMP_SLT:
4701         if (Max.slt(RHSVal))
4702           return ReplaceInstUsesWith(I, ConstantInt::getTrue());
4703         if (Min.sgt(RHSVal))
4704           return ReplaceInstUsesWith(I, ConstantInt::getFalse());
4705         break;
4706       case ICmpInst::ICMP_SGT: 
4707         if (Min.sgt(RHSVal))
4708           return ReplaceInstUsesWith(I, ConstantInt::getTrue());
4709         if (Max.slt(RHSVal))
4710           return ReplaceInstUsesWith(I, ConstantInt::getFalse());
4711         break;
4712       }
4713     }
4714           
4715     // Since the RHS is a ConstantInt (CI), if the left hand side is an 
4716     // instruction, see if that instruction also has constants so that the 
4717     // instruction can be folded into the icmp 
4718     if (Instruction *LHSI = dyn_cast<Instruction>(Op0))
4719       if (Instruction *Res = visitICmpInstWithInstAndIntCst(I, LHSI, CI))
4720         return Res;
4721   }
4722
4723   // Handle icmp with constant (but not simple integer constant) RHS
4724   if (Constant *RHSC = dyn_cast<Constant>(Op1)) {
4725     if (Instruction *LHSI = dyn_cast<Instruction>(Op0))
4726       switch (LHSI->getOpcode()) {
4727       case Instruction::GetElementPtr:
4728         if (RHSC->isNullValue()) {
4729           // icmp pred GEP (P, int 0, int 0, int 0), null -> icmp pred P, null
4730           bool isAllZeros = true;
4731           for (unsigned i = 1, e = LHSI->getNumOperands(); i != e; ++i)
4732             if (!isa<Constant>(LHSI->getOperand(i)) ||
4733                 !cast<Constant>(LHSI->getOperand(i))->isNullValue()) {
4734               isAllZeros = false;
4735               break;
4736             }
4737           if (isAllZeros)
4738             return new ICmpInst(I.getPredicate(), LHSI->getOperand(0),
4739                     Constant::getNullValue(LHSI->getOperand(0)->getType()));
4740         }
4741         break;
4742
4743       case Instruction::PHI:
4744         if (Instruction *NV = FoldOpIntoPhi(I))
4745           return NV;
4746         break;
4747       case Instruction::Select: {
4748         // If either operand of the select is a constant, we can fold the
4749         // comparison into the select arms, which will cause one to be
4750         // constant folded and the select turned into a bitwise or.
4751         Value *Op1 = 0, *Op2 = 0;
4752         if (LHSI->hasOneUse()) {
4753           if (Constant *C = dyn_cast<Constant>(LHSI->getOperand(1))) {
4754             // Fold the known value into the constant operand.
4755             Op1 = ConstantExpr::getICmp(I.getPredicate(), C, RHSC);
4756             // Insert a new ICmp of the other select operand.
4757             Op2 = InsertNewInstBefore(new ICmpInst(I.getPredicate(),
4758                                                    LHSI->getOperand(2), RHSC,
4759                                                    I.getName()), I);
4760           } else if (Constant *C = dyn_cast<Constant>(LHSI->getOperand(2))) {
4761             // Fold the known value into the constant operand.
4762             Op2 = ConstantExpr::getICmp(I.getPredicate(), C, RHSC);
4763             // Insert a new ICmp of the other select operand.
4764             Op1 = InsertNewInstBefore(new ICmpInst(I.getPredicate(),
4765                                                    LHSI->getOperand(1), RHSC,
4766                                                    I.getName()), I);
4767           }
4768         }
4769
4770         if (Op1)
4771           return new SelectInst(LHSI->getOperand(0), Op1, Op2);
4772         break;
4773       }
4774       case Instruction::Malloc:
4775         // If we have (malloc != null), and if the malloc has a single use, we
4776         // can assume it is successful and remove the malloc.
4777         if (LHSI->hasOneUse() && isa<ConstantPointerNull>(RHSC)) {
4778           AddToWorkList(LHSI);
4779           return ReplaceInstUsesWith(I, ConstantInt::get(Type::Int1Ty,
4780                                                          !isTrueWhenEqual(I)));
4781         }
4782         break;
4783       }
4784   }
4785
4786   // If we can optimize a 'icmp GEP, P' or 'icmp P, GEP', do so now.
4787   if (User *GEP = dyn_castGetElementPtr(Op0))
4788     if (Instruction *NI = FoldGEPICmp(GEP, Op1, I.getPredicate(), I))
4789       return NI;
4790   if (User *GEP = dyn_castGetElementPtr(Op1))
4791     if (Instruction *NI = FoldGEPICmp(GEP, Op0,
4792                            ICmpInst::getSwappedPredicate(I.getPredicate()), I))
4793       return NI;
4794
4795   // Test to see if the operands of the icmp are casted versions of other
4796   // values.  If the ptr->ptr cast can be stripped off both arguments, we do so
4797   // now.
4798   if (BitCastInst *CI = dyn_cast<BitCastInst>(Op0)) {
4799     if (isa<PointerType>(Op0->getType()) && 
4800         (isa<Constant>(Op1) || isa<BitCastInst>(Op1))) { 
4801       // We keep moving the cast from the left operand over to the right
4802       // operand, where it can often be eliminated completely.
4803       Op0 = CI->getOperand(0);
4804
4805       // If operand #1 is a bitcast instruction, it must also be a ptr->ptr cast
4806       // so eliminate it as well.
4807       if (BitCastInst *CI2 = dyn_cast<BitCastInst>(Op1))
4808         Op1 = CI2->getOperand(0);
4809
4810       // If Op1 is a constant, we can fold the cast into the constant.
4811       if (Op0->getType() != Op1->getType())
4812         if (Constant *Op1C = dyn_cast<Constant>(Op1)) {
4813           Op1 = ConstantExpr::getBitCast(Op1C, Op0->getType());
4814         } else {
4815           // Otherwise, cast the RHS right before the icmp
4816           Op1 = InsertCastBefore(Instruction::BitCast, Op1, Op0->getType(), I);
4817         }
4818       return new ICmpInst(I.getPredicate(), Op0, Op1);
4819     }
4820   }
4821   
4822   if (isa<CastInst>(Op0)) {
4823     // Handle the special case of: icmp (cast bool to X), <cst>
4824     // This comes up when you have code like
4825     //   int X = A < B;
4826     //   if (X) ...
4827     // For generality, we handle any zero-extension of any operand comparison
4828     // with a constant or another cast from the same type.
4829     if (isa<ConstantInt>(Op1) || isa<CastInst>(Op1))
4830       if (Instruction *R = visitICmpInstWithCastAndCast(I))
4831         return R;
4832   }
4833   
4834   if (I.isEquality()) {
4835     Value *A, *B, *C, *D;
4836     if (match(Op0, m_Xor(m_Value(A), m_Value(B)))) {
4837       if (A == Op1 || B == Op1) {    // (A^B) == A  ->  B == 0
4838         Value *OtherVal = A == Op1 ? B : A;
4839         return new ICmpInst(I.getPredicate(), OtherVal,
4840                             Constant::getNullValue(A->getType()));
4841       }
4842
4843       if (match(Op1, m_Xor(m_Value(C), m_Value(D)))) {
4844         // A^c1 == C^c2 --> A == C^(c1^c2)
4845         if (ConstantInt *C1 = dyn_cast<ConstantInt>(B))
4846           if (ConstantInt *C2 = dyn_cast<ConstantInt>(D))
4847             if (Op1->hasOneUse()) {
4848               Constant *NC = ConstantInt::get(C1->getValue() ^ C2->getValue());
4849               Instruction *Xor = BinaryOperator::createXor(C, NC, "tmp");
4850               return new ICmpInst(I.getPredicate(), A,
4851                                   InsertNewInstBefore(Xor, I));
4852             }
4853         
4854         // A^B == A^D -> B == D
4855         if (A == C) return new ICmpInst(I.getPredicate(), B, D);
4856         if (A == D) return new ICmpInst(I.getPredicate(), B, C);
4857         if (B == C) return new ICmpInst(I.getPredicate(), A, D);
4858         if (B == D) return new ICmpInst(I.getPredicate(), A, C);
4859       }
4860     }
4861     
4862     if (match(Op1, m_Xor(m_Value(A), m_Value(B))) &&
4863         (A == Op0 || B == Op0)) {
4864       // A == (A^B)  ->  B == 0
4865       Value *OtherVal = A == Op0 ? B : A;
4866       return new ICmpInst(I.getPredicate(), OtherVal,
4867                           Constant::getNullValue(A->getType()));
4868     }
4869     if (match(Op0, m_Sub(m_Value(A), m_Value(B))) && A == Op1) {
4870       // (A-B) == A  ->  B == 0
4871       return new ICmpInst(I.getPredicate(), B,
4872                           Constant::getNullValue(B->getType()));
4873     }
4874     if (match(Op1, m_Sub(m_Value(A), m_Value(B))) && A == Op0) {
4875       // A == (A-B)  ->  B == 0
4876       return new ICmpInst(I.getPredicate(), B,
4877                           Constant::getNullValue(B->getType()));
4878     }
4879     
4880     // (X&Z) == (Y&Z) -> (X^Y) & Z == 0
4881     if (Op0->hasOneUse() && Op1->hasOneUse() &&
4882         match(Op0, m_And(m_Value(A), m_Value(B))) && 
4883         match(Op1, m_And(m_Value(C), m_Value(D)))) {
4884       Value *X = 0, *Y = 0, *Z = 0;
4885       
4886       if (A == C) {
4887         X = B; Y = D; Z = A;
4888       } else if (A == D) {
4889         X = B; Y = C; Z = A;
4890       } else if (B == C) {
4891         X = A; Y = D; Z = B;
4892       } else if (B == D) {
4893         X = A; Y = C; Z = B;
4894       }
4895       
4896       if (X) {   // Build (X^Y) & Z
4897         Op1 = InsertNewInstBefore(BinaryOperator::createXor(X, Y, "tmp"), I);
4898         Op1 = InsertNewInstBefore(BinaryOperator::createAnd(Op1, Z, "tmp"), I);
4899         I.setOperand(0, Op1);
4900         I.setOperand(1, Constant::getNullValue(Op1->getType()));
4901         return &I;
4902       }
4903     }
4904   }
4905   return Changed ? &I : 0;
4906 }
4907
4908 /// visitICmpInstWithInstAndIntCst - Handle "icmp (instr, intcst)".
4909 ///
4910 Instruction *InstCombiner::visitICmpInstWithInstAndIntCst(ICmpInst &ICI,
4911                                                           Instruction *LHSI,
4912                                                           ConstantInt *RHS) {
4913   const APInt &RHSV = RHS->getValue();
4914   
4915   switch (LHSI->getOpcode()) {
4916   case Instruction::Xor:         // (icmp pred (xor X, XorCST), CI)
4917     if (ConstantInt *XorCST = dyn_cast<ConstantInt>(LHSI->getOperand(1))) {
4918       // If this is a comparison that tests the signbit (X < 0) or (x > -1),
4919       // fold the xor.
4920       if (ICI.getPredicate() == ICmpInst::ICMP_SLT && RHSV == 0 ||
4921           ICI.getPredicate() == ICmpInst::ICMP_SGT && RHSV.isAllOnesValue()) {
4922         Value *CompareVal = LHSI->getOperand(0);
4923         
4924         // If the sign bit of the XorCST is not set, there is no change to
4925         // the operation, just stop using the Xor.
4926         if (!XorCST->getValue().isNegative()) {
4927           ICI.setOperand(0, CompareVal);
4928           AddToWorkList(LHSI);
4929           return &ICI;
4930         }
4931         
4932         // Was the old condition true if the operand is positive?
4933         bool isTrueIfPositive = ICI.getPredicate() == ICmpInst::ICMP_SGT;
4934         
4935         // If so, the new one isn't.
4936         isTrueIfPositive ^= true;
4937         
4938         if (isTrueIfPositive)
4939           return new ICmpInst(ICmpInst::ICMP_SGT, CompareVal, SubOne(RHS));
4940         else
4941           return new ICmpInst(ICmpInst::ICMP_SLT, CompareVal, AddOne(RHS));
4942       }
4943     }
4944     break;
4945   case Instruction::And:         // (icmp pred (and X, AndCST), RHS)
4946     if (LHSI->hasOneUse() && isa<ConstantInt>(LHSI->getOperand(1)) &&
4947         LHSI->getOperand(0)->hasOneUse()) {
4948       ConstantInt *AndCST = cast<ConstantInt>(LHSI->getOperand(1));
4949       
4950       // If the LHS is an AND of a truncating cast, we can widen the
4951       // and/compare to be the input width without changing the value
4952       // produced, eliminating a cast.
4953       if (TruncInst *Cast = dyn_cast<TruncInst>(LHSI->getOperand(0))) {
4954         // We can do this transformation if either the AND constant does not
4955         // have its sign bit set or if it is an equality comparison. 
4956         // Extending a relational comparison when we're checking the sign
4957         // bit would not work.
4958         if (Cast->hasOneUse() &&
4959             (ICI.isEquality() || AndCST->getValue().isPositive() && 
4960              RHSV.isPositive())) {
4961           uint32_t BitWidth = 
4962             cast<IntegerType>(Cast->getOperand(0)->getType())->getBitWidth();
4963           APInt NewCST = AndCST->getValue();
4964           NewCST.zext(BitWidth);
4965           APInt NewCI = RHSV;
4966           NewCI.zext(BitWidth);
4967           Instruction *NewAnd = 
4968             BinaryOperator::createAnd(Cast->getOperand(0),
4969                                       ConstantInt::get(NewCST),LHSI->getName());
4970           InsertNewInstBefore(NewAnd, ICI);
4971           return new ICmpInst(ICI.getPredicate(), NewAnd,
4972                               ConstantInt::get(NewCI));
4973         }
4974       }
4975       
4976       // If this is: (X >> C1) & C2 != C3 (where any shift and any compare
4977       // could exist), turn it into (X & (C2 << C1)) != (C3 << C1).  This
4978       // happens a LOT in code produced by the C front-end, for bitfield
4979       // access.
4980       BinaryOperator *Shift = dyn_cast<BinaryOperator>(LHSI->getOperand(0));
4981       if (Shift && !Shift->isShift())
4982         Shift = 0;
4983       
4984       ConstantInt *ShAmt;
4985       ShAmt = Shift ? dyn_cast<ConstantInt>(Shift->getOperand(1)) : 0;
4986       const Type *Ty = Shift ? Shift->getType() : 0;  // Type of the shift.
4987       const Type *AndTy = AndCST->getType();          // Type of the and.
4988       
4989       // We can fold this as long as we can't shift unknown bits
4990       // into the mask.  This can only happen with signed shift
4991       // rights, as they sign-extend.
4992       if (ShAmt) {
4993         bool CanFold = Shift->isLogicalShift();
4994         if (!CanFold) {
4995           // To test for the bad case of the signed shr, see if any
4996           // of the bits shifted in could be tested after the mask.
4997           uint32_t TyBits = Ty->getPrimitiveSizeInBits();
4998           int ShAmtVal = TyBits - ShAmt->getLimitedValue(TyBits);
4999           
5000           uint32_t BitWidth = AndTy->getPrimitiveSizeInBits();
5001           if ((APInt::getHighBitsSet(BitWidth, BitWidth-ShAmtVal) & 
5002                AndCST->getValue()) == 0)
5003             CanFold = true;
5004         }
5005         
5006         if (CanFold) {
5007           Constant *NewCst;
5008           if (Shift->getOpcode() == Instruction::Shl)
5009             NewCst = ConstantExpr::getLShr(RHS, ShAmt);
5010           else
5011             NewCst = ConstantExpr::getShl(RHS, ShAmt);
5012           
5013           // Check to see if we are shifting out any of the bits being
5014           // compared.
5015           if (ConstantExpr::get(Shift->getOpcode(), NewCst, ShAmt) != RHS) {
5016             // If we shifted bits out, the fold is not going to work out.
5017             // As a special case, check to see if this means that the
5018             // result is always true or false now.
5019             if (ICI.getPredicate() == ICmpInst::ICMP_EQ)
5020               return ReplaceInstUsesWith(ICI, ConstantInt::getFalse());
5021             if (ICI.getPredicate() == ICmpInst::ICMP_NE)
5022               return ReplaceInstUsesWith(ICI, ConstantInt::getTrue());
5023           } else {
5024             ICI.setOperand(1, NewCst);
5025             Constant *NewAndCST;
5026             if (Shift->getOpcode() == Instruction::Shl)
5027               NewAndCST = ConstantExpr::getLShr(AndCST, ShAmt);
5028             else
5029               NewAndCST = ConstantExpr::getShl(AndCST, ShAmt);
5030             LHSI->setOperand(1, NewAndCST);
5031             LHSI->setOperand(0, Shift->getOperand(0));
5032             AddToWorkList(Shift); // Shift is dead.
5033             AddUsesToWorkList(ICI);
5034             return &ICI;
5035           }
5036         }
5037       }
5038       
5039       // Turn ((X >> Y) & C) == 0  into  (X & (C << Y)) == 0.  The later is
5040       // preferable because it allows the C<<Y expression to be hoisted out
5041       // of a loop if Y is invariant and X is not.
5042       if (Shift && Shift->hasOneUse() && RHSV == 0 &&
5043           ICI.isEquality() && !Shift->isArithmeticShift() &&
5044           isa<Instruction>(Shift->getOperand(0))) {
5045         // Compute C << Y.
5046         Value *NS;
5047         if (Shift->getOpcode() == Instruction::LShr) {
5048           NS = BinaryOperator::createShl(AndCST, 
5049                                          Shift->getOperand(1), "tmp");
5050         } else {
5051           // Insert a logical shift.
5052           NS = BinaryOperator::createLShr(AndCST,
5053                                           Shift->getOperand(1), "tmp");
5054         }
5055         InsertNewInstBefore(cast<Instruction>(NS), ICI);
5056         
5057         // Compute X & (C << Y).
5058         Instruction *NewAnd = 
5059           BinaryOperator::createAnd(Shift->getOperand(0), NS, LHSI->getName());
5060         InsertNewInstBefore(NewAnd, ICI);
5061         
5062         ICI.setOperand(0, NewAnd);
5063         return &ICI;
5064       }
5065     }
5066     break;
5067     
5068   case Instruction::Shl:         // (icmp pred (shl X, ShAmt), CI)
5069     if (ConstantInt *ShAmt = dyn_cast<ConstantInt>(LHSI->getOperand(1))) {
5070       if (ICI.isEquality()) {
5071         uint32_t TypeBits = RHSV.getBitWidth();
5072         
5073         // Check that the shift amount is in range.  If not, don't perform
5074         // undefined shifts.  When the shift is visited it will be
5075         // simplified.
5076         if (ShAmt->uge(TypeBits))
5077           break;
5078         
5079         // If we are comparing against bits always shifted out, the
5080         // comparison cannot succeed.
5081         Constant *Comp =
5082           ConstantExpr::getShl(ConstantExpr::getLShr(RHS, ShAmt), ShAmt);
5083         if (Comp != RHS) {// Comparing against a bit that we know is zero.
5084           bool IsICMP_NE = ICI.getPredicate() == ICmpInst::ICMP_NE;
5085           Constant *Cst = ConstantInt::get(Type::Int1Ty, IsICMP_NE);
5086           return ReplaceInstUsesWith(ICI, Cst);
5087         }
5088         
5089         if (LHSI->hasOneUse()) {
5090           // Otherwise strength reduce the shift into an and.
5091           uint32_t ShAmtVal = (uint32_t)ShAmt->getLimitedValue(TypeBits);
5092           Constant *Mask =
5093             ConstantInt::get(APInt::getLowBitsSet(TypeBits, TypeBits-ShAmtVal));
5094           
5095           Instruction *AndI =
5096             BinaryOperator::createAnd(LHSI->getOperand(0),
5097                                       Mask, LHSI->getName()+".mask");
5098           Value *And = InsertNewInstBefore(AndI, ICI);
5099           return new ICmpInst(ICI.getPredicate(), And,
5100                               ConstantInt::get(RHSV.lshr(ShAmtVal)));
5101         }
5102       }
5103     }
5104     break;
5105     
5106   case Instruction::LShr:         // (icmp pred (shr X, ShAmt), CI)
5107   case Instruction::AShr:
5108     if (ConstantInt *ShAmt = dyn_cast<ConstantInt>(LHSI->getOperand(1))) {
5109       if (ICI.isEquality()) {
5110         // Check that the shift amount is in range.  If not, don't perform
5111         // undefined shifts.  When the shift is visited it will be
5112         // simplified.
5113         uint32_t TypeBits = RHSV.getBitWidth();
5114         if (ShAmt->uge(TypeBits))
5115           break;
5116         uint32_t ShAmtVal = (uint32_t)ShAmt->getLimitedValue(TypeBits);
5117         
5118         // If we are comparing against bits always shifted out, the
5119         // comparison cannot succeed.
5120         APInt Comp = RHSV << ShAmtVal;
5121         if (LHSI->getOpcode() == Instruction::LShr)
5122           Comp = Comp.lshr(ShAmtVal);
5123         else
5124           Comp = Comp.ashr(ShAmtVal);
5125         
5126         if (Comp != RHSV) { // Comparing against a bit that we know is zero.
5127           bool IsICMP_NE = ICI.getPredicate() == ICmpInst::ICMP_NE;
5128           Constant *Cst = ConstantInt::get(Type::Int1Ty, IsICMP_NE);
5129           return ReplaceInstUsesWith(ICI, Cst);
5130         }
5131         
5132         if (LHSI->hasOneUse() || RHSV == 0) {
5133           // Otherwise strength reduce the shift into an and.
5134           APInt Val(APInt::getHighBitsSet(TypeBits, TypeBits - ShAmtVal));
5135           Constant *Mask = ConstantInt::get(Val);
5136           
5137           Instruction *AndI =
5138             BinaryOperator::createAnd(LHSI->getOperand(0),
5139                                       Mask, LHSI->getName()+".mask");
5140           Value *And = InsertNewInstBefore(AndI, ICI);
5141           return new ICmpInst(ICI.getPredicate(), And,
5142                               ConstantExpr::getShl(RHS, ShAmt));
5143         }
5144       }
5145     }
5146     break;
5147     
5148   case Instruction::SDiv:
5149   case Instruction::UDiv:
5150     // Fold: icmp pred ([us]div X, C1), C2 -> range test
5151     // Fold this div into the comparison, producing a range check. 
5152     // Determine, based on the divide type, what the range is being 
5153     // checked.  If there is an overflow on the low or high side, remember 
5154     // it, otherwise compute the range [low, hi) bounding the new value.
5155     // See: InsertRangeTest above for the kinds of replacements possible.
5156     if (ConstantInt *DivRHS = dyn_cast<ConstantInt>(LHSI->getOperand(1))) {
5157       // FIXME: If the operand types don't match the type of the divide 
5158       // then don't attempt this transform. The code below doesn't have the
5159       // logic to deal with a signed divide and an unsigned compare (and
5160       // vice versa). This is because (x /s C1) <s C2  produces different 
5161       // results than (x /s C1) <u C2 or (x /u C1) <s C2 or even
5162       // (x /u C1) <u C2.  Simply casting the operands and result won't 
5163       // work. :(  The if statement below tests that condition and bails 
5164       // if it finds it. 
5165       bool DivIsSigned = LHSI->getOpcode() == Instruction::SDiv;
5166       if (!ICI.isEquality() && DivIsSigned != ICI.isSignedPredicate())
5167         break;
5168       if (DivRHS->isZero())
5169         break; // Don't hack on div by zero
5170       
5171       // Initialize the variables that will indicate the nature of the
5172       // range check.
5173       bool LoOverflow = false, HiOverflow = false;
5174       ConstantInt *LoBound = 0, *HiBound = 0;
5175       
5176       // Compute Prod = CI * DivRHS. We are essentially solving an equation
5177       // of form X/C1=C2. We solve for X by multiplying C1 (DivRHS) and 
5178       // C2 (CI). By solving for X we can turn this into a range check 
5179       // instead of computing a divide. 
5180       ConstantInt *Prod = Multiply(RHS, DivRHS);
5181       
5182       // Determine if the product overflows by seeing if the product is
5183       // not equal to the divide. Make sure we do the same kind of divide
5184       // as in the LHS instruction that we're folding. 
5185       bool ProdOV = (DivIsSigned ? ConstantExpr::getSDiv(Prod, DivRHS) :
5186                      ConstantExpr::getUDiv(Prod, DivRHS)) != RHS;
5187       
5188       // Get the ICmp opcode
5189       ICmpInst::Predicate predicate = ICI.getPredicate();
5190       
5191       if (!DivIsSigned) {  // udiv
5192         LoBound = Prod;
5193         LoOverflow = ProdOV;
5194         HiOverflow = ProdOV || 
5195           AddWithOverflow(HiBound, LoBound, DivRHS, false);
5196       } else if (DivRHS->getValue().isPositive()) { // Divisor is > 0.
5197         if (RHSV == 0) {       // (X / pos) op 0
5198                                // Can't overflow.
5199           LoBound = cast<ConstantInt>(ConstantExpr::getNeg(SubOne(DivRHS)));
5200           HiBound = DivRHS;
5201         } else if (RHSV.isPositive()) {   // (X / pos) op pos
5202           LoBound = Prod;
5203           LoOverflow = ProdOV;
5204           HiOverflow = ProdOV || 
5205             AddWithOverflow(HiBound, Prod, DivRHS, true);
5206         } else {                       // (X / pos) op neg
5207           Constant *DivRHSH = ConstantExpr::getNeg(SubOne(DivRHS));
5208           LoOverflow = AddWithOverflow(LoBound, Prod,
5209                                        cast<ConstantInt>(DivRHSH), true);
5210           HiBound = AddOne(Prod);
5211           HiOverflow = ProdOV;
5212         }
5213       } else {                         // Divisor is < 0.
5214         if (RHSV == 0) {       // (X / neg) op 0
5215           LoBound = AddOne(DivRHS);
5216           HiBound = cast<ConstantInt>(ConstantExpr::getNeg(DivRHS));
5217           if (HiBound == DivRHS)
5218             LoBound = 0;               // - INTMIN = INTMIN
5219         } else if (RHSV.isPositive()) {   // (X / neg) op pos
5220           HiOverflow = LoOverflow = ProdOV;
5221           if (!LoOverflow)
5222             LoOverflow = AddWithOverflow(LoBound, Prod, AddOne(DivRHS),
5223                                          true);
5224           HiBound = AddOne(Prod);
5225         } else {                       // (X / neg) op neg
5226           LoBound = Prod;
5227           LoOverflow = HiOverflow = ProdOV;
5228           HiBound = Subtract(Prod, DivRHS);
5229         }
5230         
5231         // Dividing by a negate swaps the condition.
5232         predicate = ICmpInst::getSwappedPredicate(predicate);
5233       }
5234       
5235       if (LoBound) {
5236         Value *X = LHSI->getOperand(0);
5237         switch (predicate) {
5238           default: assert(0 && "Unhandled icmp opcode!");
5239           case ICmpInst::ICMP_EQ:
5240             if (LoOverflow && HiOverflow)
5241               return ReplaceInstUsesWith(ICI, ConstantInt::getFalse());
5242             else if (HiOverflow)
5243               return new ICmpInst(DivIsSigned ?  ICmpInst::ICMP_SGE : 
5244                                   ICmpInst::ICMP_UGE, X, LoBound);
5245             else if (LoOverflow)
5246               return new ICmpInst(DivIsSigned ? ICmpInst::ICMP_SLT : 
5247                                   ICmpInst::ICMP_ULT, X, HiBound);
5248             else
5249               return InsertRangeTest(X, LoBound, HiBound, DivIsSigned, 
5250                                      true, ICI);
5251           case ICmpInst::ICMP_NE:
5252             if (LoOverflow && HiOverflow)
5253               return ReplaceInstUsesWith(ICI, ConstantInt::getTrue());
5254             else if (HiOverflow)
5255               return new ICmpInst(DivIsSigned ?  ICmpInst::ICMP_SLT : 
5256                                   ICmpInst::ICMP_ULT, X, LoBound);
5257             else if (LoOverflow)
5258               return new ICmpInst(DivIsSigned ? ICmpInst::ICMP_SGE : 
5259                                   ICmpInst::ICMP_UGE, X, HiBound);
5260             else
5261               return InsertRangeTest(X, LoBound, HiBound, DivIsSigned, 
5262                                      false, ICI);
5263           case ICmpInst::ICMP_ULT:
5264           case ICmpInst::ICMP_SLT:
5265             if (LoOverflow)
5266               return ReplaceInstUsesWith(ICI, ConstantInt::getFalse());
5267             return new ICmpInst(predicate, X, LoBound);
5268           case ICmpInst::ICMP_UGT:
5269           case ICmpInst::ICMP_SGT:
5270             if (HiOverflow)
5271               return ReplaceInstUsesWith(ICI, ConstantInt::getFalse());
5272             if (predicate == ICmpInst::ICMP_UGT)
5273               return new ICmpInst(ICmpInst::ICMP_UGE, X, HiBound);
5274             else
5275               return new ICmpInst(ICmpInst::ICMP_SGE, X, HiBound);
5276         }
5277       }
5278     }
5279     break;
5280   }
5281   
5282   // Simplify icmp_eq and icmp_ne instructions with integer constant RHS.
5283   if (ICI.isEquality()) {
5284     bool isICMP_NE = ICI.getPredicate() == ICmpInst::ICMP_NE;
5285     
5286     // If the first operand is (add|sub|and|or|xor|rem) with a constant, and 
5287     // the second operand is a constant, simplify a bit.
5288     if (BinaryOperator *BO = dyn_cast<BinaryOperator>(LHSI)) {
5289       switch (BO->getOpcode()) {
5290       case Instruction::SRem:
5291         // If we have a signed (X % (2^c)) == 0, turn it into an unsigned one.
5292         if (RHSV == 0 && isa<ConstantInt>(BO->getOperand(1)) &&BO->hasOneUse()){
5293           const APInt &V = cast<ConstantInt>(BO->getOperand(1))->getValue();
5294           if (V.sgt(APInt(V.getBitWidth(), 1)) && V.isPowerOf2()) {
5295             Instruction *NewRem =
5296               BinaryOperator::createURem(BO->getOperand(0), BO->getOperand(1),
5297                                          BO->getName());
5298             InsertNewInstBefore(NewRem, ICI);
5299             return new ICmpInst(ICI.getPredicate(), NewRem, 
5300                                 Constant::getNullValue(BO->getType()));
5301           }
5302         }
5303         break;
5304       case Instruction::Add:
5305         // Replace ((add A, B) != C) with (A != C-B) if B & C are constants.
5306         if (ConstantInt *BOp1C = dyn_cast<ConstantInt>(BO->getOperand(1))) {
5307           if (BO->hasOneUse())
5308             return new ICmpInst(ICI.getPredicate(), BO->getOperand(0),
5309                                 Subtract(RHS, BOp1C));
5310         } else if (RHSV == 0) {
5311           // Replace ((add A, B) != 0) with (A != -B) if A or B is
5312           // efficiently invertible, or if the add has just this one use.
5313           Value *BOp0 = BO->getOperand(0), *BOp1 = BO->getOperand(1);
5314           
5315           if (Value *NegVal = dyn_castNegVal(BOp1))
5316             return new ICmpInst(ICI.getPredicate(), BOp0, NegVal);
5317           else if (Value *NegVal = dyn_castNegVal(BOp0))
5318             return new ICmpInst(ICI.getPredicate(), NegVal, BOp1);
5319           else if (BO->hasOneUse()) {
5320             Instruction *Neg = BinaryOperator::createNeg(BOp1);
5321             InsertNewInstBefore(Neg, ICI);
5322             Neg->takeName(BO);
5323             return new ICmpInst(ICI.getPredicate(), BOp0, Neg);
5324           }
5325         }
5326         break;
5327       case Instruction::Xor:
5328         // For the xor case, we can xor two constants together, eliminating
5329         // the explicit xor.
5330         if (Constant *BOC = dyn_cast<Constant>(BO->getOperand(1)))
5331           return new ICmpInst(ICI.getPredicate(), BO->getOperand(0), 
5332                               ConstantExpr::getXor(RHS, BOC));
5333         
5334         // FALLTHROUGH
5335       case Instruction::Sub:
5336         // Replace (([sub|xor] A, B) != 0) with (A != B)
5337         if (RHSV == 0)
5338           return new ICmpInst(ICI.getPredicate(), BO->getOperand(0),
5339                               BO->getOperand(1));
5340         break;
5341         
5342       case Instruction::Or:
5343         // If bits are being or'd in that are not present in the constant we
5344         // are comparing against, then the comparison could never succeed!
5345         if (Constant *BOC = dyn_cast<Constant>(BO->getOperand(1))) {
5346           Constant *NotCI = ConstantExpr::getNot(RHS);
5347           if (!ConstantExpr::getAnd(BOC, NotCI)->isNullValue())
5348             return ReplaceInstUsesWith(ICI, ConstantInt::get(Type::Int1Ty, 
5349                                                              isICMP_NE));
5350         }
5351         break;
5352         
5353       case Instruction::And:
5354         if (ConstantInt *BOC = dyn_cast<ConstantInt>(BO->getOperand(1))) {
5355           // If bits are being compared against that are and'd out, then the
5356           // comparison can never succeed!
5357           if ((RHSV & ~BOC->getValue()) != 0)
5358             return ReplaceInstUsesWith(ICI, ConstantInt::get(Type::Int1Ty,
5359                                                              isICMP_NE));
5360           
5361           // If we have ((X & C) == C), turn it into ((X & C) != 0).
5362           if (RHS == BOC && RHSV.isPowerOf2())
5363             return new ICmpInst(isICMP_NE ? ICmpInst::ICMP_EQ :
5364                                 ICmpInst::ICMP_NE, LHSI,
5365                                 Constant::getNullValue(RHS->getType()));
5366           
5367           // Replace (and X, (1 << size(X)-1) != 0) with x s< 0
5368           if (isSignBit(BOC)) {
5369             Value *X = BO->getOperand(0);
5370             Constant *Zero = Constant::getNullValue(X->getType());
5371             ICmpInst::Predicate pred = isICMP_NE ? 
5372               ICmpInst::ICMP_SLT : ICmpInst::ICMP_SGE;
5373             return new ICmpInst(pred, X, Zero);
5374           }
5375           
5376           // ((X & ~7) == 0) --> X < 8
5377           if (RHSV == 0 && isHighOnes(BOC)) {
5378             Value *X = BO->getOperand(0);
5379             Constant *NegX = ConstantExpr::getNeg(BOC);
5380             ICmpInst::Predicate pred = isICMP_NE ? 
5381               ICmpInst::ICMP_UGE : ICmpInst::ICMP_ULT;
5382             return new ICmpInst(pred, X, NegX);
5383           }
5384         }
5385       default: break;
5386       }
5387     } else if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(LHSI)) {
5388       // Handle icmp {eq|ne} <intrinsic>, intcst.
5389       if (II->getIntrinsicID() == Intrinsic::bswap) {
5390         AddToWorkList(II);
5391         ICI.setOperand(0, II->getOperand(1));
5392         ICI.setOperand(1, ConstantInt::get(RHSV.byteSwap()));
5393         return &ICI;
5394       }
5395     }
5396   } else {  // Not a ICMP_EQ/ICMP_NE
5397             // If the LHS is a cast from an integral value of the same size, then 
5398             // since we know the RHS is a constant, try to simlify.
5399     if (CastInst *Cast = dyn_cast<CastInst>(LHSI)) {
5400       Value *CastOp = Cast->getOperand(0);
5401       const Type *SrcTy = CastOp->getType();
5402       uint32_t SrcTySize = SrcTy->getPrimitiveSizeInBits();
5403       if (SrcTy->isInteger() && 
5404           SrcTySize == Cast->getType()->getPrimitiveSizeInBits()) {
5405         // If this is an unsigned comparison, try to make the comparison use
5406         // smaller constant values.
5407         if (ICI.getPredicate() == ICmpInst::ICMP_ULT && RHSV.isSignBit()) {
5408           // X u< 128 => X s> -1
5409           return new ICmpInst(ICmpInst::ICMP_SGT, CastOp, 
5410                            ConstantInt::get(APInt::getAllOnesValue(SrcTySize)));
5411         } else if (ICI.getPredicate() == ICmpInst::ICMP_UGT &&
5412                    RHSV == APInt::getSignedMaxValue(SrcTySize)) {
5413           // X u> 127 => X s< 0
5414           return new ICmpInst(ICmpInst::ICMP_SLT, CastOp, 
5415                               Constant::getNullValue(SrcTy));
5416         }
5417       }
5418     }
5419   }
5420   return 0;
5421 }
5422
5423 /// visitICmpInstWithCastAndCast - Handle icmp (cast x to y), (cast/cst).
5424 /// We only handle extending casts so far.
5425 ///
5426 Instruction *InstCombiner::visitICmpInstWithCastAndCast(ICmpInst &ICI) {
5427   const CastInst *LHSCI = cast<CastInst>(ICI.getOperand(0));
5428   Value *LHSCIOp        = LHSCI->getOperand(0);
5429   const Type *SrcTy     = LHSCIOp->getType();
5430   const Type *DestTy    = LHSCI->getType();
5431   Value *RHSCIOp;
5432
5433   // We only handle extension cast instructions, so far. Enforce this.
5434   if (LHSCI->getOpcode() != Instruction::ZExt &&
5435       LHSCI->getOpcode() != Instruction::SExt)
5436     return 0;
5437
5438   bool isSignedExt = LHSCI->getOpcode() == Instruction::SExt;
5439   bool isSignedCmp = ICI.isSignedPredicate();
5440
5441   if (CastInst *CI = dyn_cast<CastInst>(ICI.getOperand(1))) {
5442     // Not an extension from the same type?
5443     RHSCIOp = CI->getOperand(0);
5444     if (RHSCIOp->getType() != LHSCIOp->getType()) 
5445       return 0;
5446     
5447     // If the signedness of the two compares doesn't agree (i.e. one is a sext
5448     // and the other is a zext), then we can't handle this.
5449     if (CI->getOpcode() != LHSCI->getOpcode())
5450       return 0;
5451
5452     // Likewise, if the signedness of the [sz]exts and the compare don't match, 
5453     // then we can't handle this.
5454     if (isSignedExt != isSignedCmp && !ICI.isEquality())
5455       return 0;
5456     
5457     // Okay, just insert a compare of the reduced operands now!
5458     return new ICmpInst(ICI.getPredicate(), LHSCIOp, RHSCIOp);
5459   }
5460
5461   // If we aren't dealing with a constant on the RHS, exit early
5462   ConstantInt *CI = dyn_cast<ConstantInt>(ICI.getOperand(1));
5463   if (!CI)
5464     return 0;
5465
5466   // Compute the constant that would happen if we truncated to SrcTy then
5467   // reextended to DestTy.
5468   Constant *Res1 = ConstantExpr::getTrunc(CI, SrcTy);
5469   Constant *Res2 = ConstantExpr::getCast(LHSCI->getOpcode(), Res1, DestTy);
5470
5471   // If the re-extended constant didn't change...
5472   if (Res2 == CI) {
5473     // Make sure that sign of the Cmp and the sign of the Cast are the same.
5474     // For example, we might have:
5475     //    %A = sext short %X to uint
5476     //    %B = icmp ugt uint %A, 1330
5477     // It is incorrect to transform this into 
5478     //    %B = icmp ugt short %X, 1330 
5479     // because %A may have negative value. 
5480     //
5481     // However, it is OK if SrcTy is bool (See cast-set.ll testcase)
5482     // OR operation is EQ/NE.
5483     if (isSignedExt == isSignedCmp || SrcTy == Type::Int1Ty || ICI.isEquality())
5484       return new ICmpInst(ICI.getPredicate(), LHSCIOp, Res1);
5485     else
5486       return 0;
5487   }
5488
5489   // The re-extended constant changed so the constant cannot be represented 
5490   // in the shorter type. Consequently, we cannot emit a simple comparison.
5491
5492   // First, handle some easy cases. We know the result cannot be equal at this
5493   // point so handle the ICI.isEquality() cases
5494   if (ICI.getPredicate() == ICmpInst::ICMP_EQ)
5495     return ReplaceInstUsesWith(ICI, ConstantInt::getFalse());
5496   if (ICI.getPredicate() == ICmpInst::ICMP_NE)
5497     return ReplaceInstUsesWith(ICI, ConstantInt::getTrue());
5498
5499   // Evaluate the comparison for LT (we invert for GT below). LE and GE cases
5500   // should have been folded away previously and not enter in here.
5501   Value *Result;
5502   if (isSignedCmp) {
5503     // We're performing a signed comparison.
5504     if (cast<ConstantInt>(CI)->getValue().isNegative())
5505       Result = ConstantInt::getFalse();          // X < (small) --> false
5506     else
5507       Result = ConstantInt::getTrue();           // X < (large) --> true
5508   } else {
5509     // We're performing an unsigned comparison.
5510     if (isSignedExt) {
5511       // We're performing an unsigned comp with a sign extended value.
5512       // This is true if the input is >= 0. [aka >s -1]
5513       Constant *NegOne = ConstantInt::getAllOnesValue(SrcTy);
5514       Result = InsertNewInstBefore(new ICmpInst(ICmpInst::ICMP_SGT, LHSCIOp,
5515                                    NegOne, ICI.getName()), ICI);
5516     } else {
5517       // Unsigned extend & unsigned compare -> always true.
5518       Result = ConstantInt::getTrue();
5519     }
5520   }
5521
5522   // Finally, return the value computed.
5523   if (ICI.getPredicate() == ICmpInst::ICMP_ULT ||
5524       ICI.getPredicate() == ICmpInst::ICMP_SLT) {
5525     return ReplaceInstUsesWith(ICI, Result);
5526   } else {
5527     assert((ICI.getPredicate()==ICmpInst::ICMP_UGT || 
5528             ICI.getPredicate()==ICmpInst::ICMP_SGT) &&
5529            "ICmp should be folded!");
5530     if (Constant *CI = dyn_cast<Constant>(Result))
5531       return ReplaceInstUsesWith(ICI, ConstantExpr::getNot(CI));
5532     else
5533       return BinaryOperator::createNot(Result);
5534   }
5535 }
5536
5537 Instruction *InstCombiner::visitShl(BinaryOperator &I) {
5538   return commonShiftTransforms(I);
5539 }
5540
5541 Instruction *InstCombiner::visitLShr(BinaryOperator &I) {
5542   return commonShiftTransforms(I);
5543 }
5544
5545 Instruction *InstCombiner::visitAShr(BinaryOperator &I) {
5546   return commonShiftTransforms(I);
5547 }
5548
5549 Instruction *InstCombiner::commonShiftTransforms(BinaryOperator &I) {
5550   assert(I.getOperand(1)->getType() == I.getOperand(0)->getType());
5551   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
5552
5553   // shl X, 0 == X and shr X, 0 == X
5554   // shl 0, X == 0 and shr 0, X == 0
5555   if (Op1 == Constant::getNullValue(Op1->getType()) ||
5556       Op0 == Constant::getNullValue(Op0->getType()))
5557     return ReplaceInstUsesWith(I, Op0);
5558   
5559   if (isa<UndefValue>(Op0)) {            
5560     if (I.getOpcode() == Instruction::AShr) // undef >>s X -> undef
5561       return ReplaceInstUsesWith(I, Op0);
5562     else                                    // undef << X -> 0, undef >>u X -> 0
5563       return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
5564   }
5565   if (isa<UndefValue>(Op1)) {
5566     if (I.getOpcode() == Instruction::AShr)  // X >>s undef -> X
5567       return ReplaceInstUsesWith(I, Op0);          
5568     else                                     // X << undef, X >>u undef -> 0
5569       return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
5570   }
5571
5572   // ashr int -1, X = -1   (for any arithmetic shift rights of ~0)
5573   if (I.getOpcode() == Instruction::AShr)
5574     if (ConstantInt *CSI = dyn_cast<ConstantInt>(Op0))
5575       if (CSI->isAllOnesValue())
5576         return ReplaceInstUsesWith(I, CSI);
5577
5578   // Try to fold constant and into select arguments.
5579   if (isa<Constant>(Op0))
5580     if (SelectInst *SI = dyn_cast<SelectInst>(Op1))
5581       if (Instruction *R = FoldOpIntoSelect(I, SI, this))
5582         return R;
5583
5584   // See if we can turn a signed shr into an unsigned shr.
5585   if (I.isArithmeticShift()) {
5586     if (MaskedValueIsZero(Op0, 
5587           APInt::getSignBit(I.getType()->getPrimitiveSizeInBits()))) {
5588       return BinaryOperator::createLShr(Op0, Op1, I.getName());
5589     }
5590   }
5591
5592   if (ConstantInt *CUI = dyn_cast<ConstantInt>(Op1))
5593     if (Instruction *Res = FoldShiftByConstant(Op0, CUI, I))
5594       return Res;
5595   return 0;
5596 }
5597
5598 Instruction *InstCombiner::FoldShiftByConstant(Value *Op0, ConstantInt *Op1,
5599                                                BinaryOperator &I) {
5600   bool isLeftShift    = I.getOpcode() == Instruction::Shl;
5601
5602   // See if we can simplify any instructions used by the instruction whose sole 
5603   // purpose is to compute bits we don't care about.
5604   uint32_t TypeBits = Op0->getType()->getPrimitiveSizeInBits();
5605   APInt KnownZero(TypeBits, 0), KnownOne(TypeBits, 0);
5606   if (SimplifyDemandedBits(&I, APInt::getAllOnesValue(TypeBits),
5607                            KnownZero, KnownOne))
5608     return &I;
5609   
5610   // shl uint X, 32 = 0 and shr ubyte Y, 9 = 0, ... just don't eliminate shr
5611   // of a signed value.
5612   //
5613   if (Op1->uge(TypeBits)) {
5614     if (I.getOpcode() != Instruction::AShr)
5615       return ReplaceInstUsesWith(I, Constant::getNullValue(Op0->getType()));
5616     else {
5617       I.setOperand(1, ConstantInt::get(I.getType(), TypeBits-1));
5618       return &I;
5619     }
5620   }
5621   
5622   // ((X*C1) << C2) == (X * (C1 << C2))
5623   if (BinaryOperator *BO = dyn_cast<BinaryOperator>(Op0))
5624     if (BO->getOpcode() == Instruction::Mul && isLeftShift)
5625       if (Constant *BOOp = dyn_cast<Constant>(BO->getOperand(1)))
5626         return BinaryOperator::createMul(BO->getOperand(0),
5627                                          ConstantExpr::getShl(BOOp, Op1));
5628   
5629   // Try to fold constant and into select arguments.
5630   if (SelectInst *SI = dyn_cast<SelectInst>(Op0))
5631     if (Instruction *R = FoldOpIntoSelect(I, SI, this))
5632       return R;
5633   if (isa<PHINode>(Op0))
5634     if (Instruction *NV = FoldOpIntoPhi(I))
5635       return NV;
5636   
5637   if (Op0->hasOneUse()) {
5638     if (BinaryOperator *Op0BO = dyn_cast<BinaryOperator>(Op0)) {
5639       // Turn ((X >> C) + Y) << C  ->  (X + (Y << C)) & (~0 << C)
5640       Value *V1, *V2;
5641       ConstantInt *CC;
5642       switch (Op0BO->getOpcode()) {
5643         default: break;
5644         case Instruction::Add:
5645         case Instruction::And:
5646         case Instruction::Or:
5647         case Instruction::Xor: {
5648           // These operators commute.
5649           // Turn (Y + (X >> C)) << C  ->  (X + (Y << C)) & (~0 << C)
5650           if (isLeftShift && Op0BO->getOperand(1)->hasOneUse() &&
5651               match(Op0BO->getOperand(1),
5652                     m_Shr(m_Value(V1), m_ConstantInt(CC))) && CC == Op1) {
5653             Instruction *YS = BinaryOperator::createShl(
5654                                             Op0BO->getOperand(0), Op1,
5655                                             Op0BO->getName());
5656             InsertNewInstBefore(YS, I); // (Y << C)
5657             Instruction *X = 
5658               BinaryOperator::create(Op0BO->getOpcode(), YS, V1,
5659                                      Op0BO->getOperand(1)->getName());
5660             InsertNewInstBefore(X, I);  // (X + (Y << C))
5661             uint32_t Op1Val = Op1->getLimitedValue(TypeBits);
5662             return BinaryOperator::createAnd(X, ConstantInt::get(
5663                        APInt::getHighBitsSet(TypeBits, TypeBits-Op1Val)));
5664           }
5665           
5666           // Turn (Y + ((X >> C) & CC)) << C  ->  ((X & (CC << C)) + (Y << C))
5667           Value *Op0BOOp1 = Op0BO->getOperand(1);
5668           if (isLeftShift && Op0BOOp1->hasOneUse() &&
5669               match(Op0BOOp1, 
5670                     m_And(m_Shr(m_Value(V1), m_Value(V2)),m_ConstantInt(CC))) &&
5671               cast<BinaryOperator>(Op0BOOp1)->getOperand(0)->hasOneUse() &&
5672               V2 == Op1) {
5673             Instruction *YS = BinaryOperator::createShl(
5674                                                      Op0BO->getOperand(0), Op1,
5675                                                      Op0BO->getName());
5676             InsertNewInstBefore(YS, I); // (Y << C)
5677             Instruction *XM =
5678               BinaryOperator::createAnd(V1, ConstantExpr::getShl(CC, Op1),
5679                                         V1->getName()+".mask");
5680             InsertNewInstBefore(XM, I); // X & (CC << C)
5681             
5682             return BinaryOperator::create(Op0BO->getOpcode(), YS, XM);
5683           }
5684         }
5685           
5686         // FALL THROUGH.
5687         case Instruction::Sub: {
5688           // Turn ((X >> C) + Y) << C  ->  (X + (Y << C)) & (~0 << C)
5689           if (isLeftShift && Op0BO->getOperand(0)->hasOneUse() &&
5690               match(Op0BO->getOperand(0),
5691                     m_Shr(m_Value(V1), m_ConstantInt(CC))) && CC == Op1) {
5692             Instruction *YS = BinaryOperator::createShl(
5693                                                      Op0BO->getOperand(1), Op1,
5694                                                      Op0BO->getName());
5695             InsertNewInstBefore(YS, I); // (Y << C)
5696             Instruction *X =
5697               BinaryOperator::create(Op0BO->getOpcode(), V1, YS,
5698                                      Op0BO->getOperand(0)->getName());
5699             InsertNewInstBefore(X, I);  // (X + (Y << C))
5700             uint32_t Op1Val = Op1->getLimitedValue(TypeBits);
5701             return BinaryOperator::createAnd(X, ConstantInt::get(
5702                        APInt::getHighBitsSet(TypeBits, TypeBits-Op1Val)));
5703           }
5704           
5705           // Turn (((X >> C)&CC) + Y) << C  ->  (X + (Y << C)) & (CC << C)
5706           if (isLeftShift && Op0BO->getOperand(0)->hasOneUse() &&
5707               match(Op0BO->getOperand(0),
5708                     m_And(m_Shr(m_Value(V1), m_Value(V2)),
5709                           m_ConstantInt(CC))) && V2 == Op1 &&
5710               cast<BinaryOperator>(Op0BO->getOperand(0))
5711                   ->getOperand(0)->hasOneUse()) {
5712             Instruction *YS = BinaryOperator::createShl(
5713                                                      Op0BO->getOperand(1), Op1,
5714                                                      Op0BO->getName());
5715             InsertNewInstBefore(YS, I); // (Y << C)
5716             Instruction *XM =
5717               BinaryOperator::createAnd(V1, ConstantExpr::getShl(CC, Op1),
5718                                         V1->getName()+".mask");
5719             InsertNewInstBefore(XM, I); // X & (CC << C)
5720             
5721             return BinaryOperator::create(Op0BO->getOpcode(), XM, YS);
5722           }
5723           
5724           break;
5725         }
5726       }
5727       
5728       
5729       // If the operand is an bitwise operator with a constant RHS, and the
5730       // shift is the only use, we can pull it out of the shift.
5731       if (ConstantInt *Op0C = dyn_cast<ConstantInt>(Op0BO->getOperand(1))) {
5732         bool isValid = true;     // Valid only for And, Or, Xor
5733         bool highBitSet = false; // Transform if high bit of constant set?
5734         
5735         switch (Op0BO->getOpcode()) {
5736           default: isValid = false; break;   // Do not perform transform!
5737           case Instruction::Add:
5738             isValid = isLeftShift;
5739             break;
5740           case Instruction::Or:
5741           case Instruction::Xor:
5742             highBitSet = false;
5743             break;
5744           case Instruction::And:
5745             highBitSet = true;
5746             break;
5747         }
5748         
5749         // If this is a signed shift right, and the high bit is modified
5750         // by the logical operation, do not perform the transformation.
5751         // The highBitSet boolean indicates the value of the high bit of
5752         // the constant which would cause it to be modified for this
5753         // operation.
5754         //
5755         if (isValid && !isLeftShift && I.getOpcode() == Instruction::AShr) {
5756           isValid = Op0C->getValue()[TypeBits-1] == highBitSet;
5757         }
5758         
5759         if (isValid) {
5760           Constant *NewRHS = ConstantExpr::get(I.getOpcode(), Op0C, Op1);
5761           
5762           Instruction *NewShift =
5763             BinaryOperator::create(I.getOpcode(), Op0BO->getOperand(0), Op1);
5764           InsertNewInstBefore(NewShift, I);
5765           NewShift->takeName(Op0BO);
5766           
5767           return BinaryOperator::create(Op0BO->getOpcode(), NewShift,
5768                                         NewRHS);
5769         }
5770       }
5771     }
5772   }
5773   
5774   // Find out if this is a shift of a shift by a constant.
5775   BinaryOperator *ShiftOp = dyn_cast<BinaryOperator>(Op0);
5776   if (ShiftOp && !ShiftOp->isShift())
5777     ShiftOp = 0;
5778   
5779   if (ShiftOp && isa<ConstantInt>(ShiftOp->getOperand(1))) {
5780     ConstantInt *ShiftAmt1C = cast<ConstantInt>(ShiftOp->getOperand(1));
5781     uint32_t ShiftAmt1 = ShiftAmt1C->getLimitedValue(TypeBits);
5782     uint32_t ShiftAmt2 = Op1->getLimitedValue(TypeBits);
5783     assert(ShiftAmt2 != 0 && "Should have been simplified earlier");
5784     if (ShiftAmt1 == 0) return 0;  // Will be simplified in the future.
5785     Value *X = ShiftOp->getOperand(0);
5786     
5787     uint32_t AmtSum = ShiftAmt1+ShiftAmt2;   // Fold into one big shift.
5788     if (AmtSum > TypeBits)
5789       AmtSum = TypeBits;
5790     
5791     const IntegerType *Ty = cast<IntegerType>(I.getType());
5792     
5793     // Check for (X << c1) << c2  and  (X >> c1) >> c2
5794     if (I.getOpcode() == ShiftOp->getOpcode()) {
5795       return BinaryOperator::create(I.getOpcode(), X,
5796                                     ConstantInt::get(Ty, AmtSum));
5797     } else if (ShiftOp->getOpcode() == Instruction::LShr &&
5798                I.getOpcode() == Instruction::AShr) {
5799       // ((X >>u C1) >>s C2) -> (X >>u (C1+C2))  since C1 != 0.
5800       return BinaryOperator::createLShr(X, ConstantInt::get(Ty, AmtSum));
5801     } else if (ShiftOp->getOpcode() == Instruction::AShr &&
5802                I.getOpcode() == Instruction::LShr) {
5803       // ((X >>s C1) >>u C2) -> ((X >>s (C1+C2)) & mask) since C1 != 0.
5804       Instruction *Shift =
5805         BinaryOperator::createAShr(X, ConstantInt::get(Ty, AmtSum));
5806       InsertNewInstBefore(Shift, I);
5807
5808       APInt Mask(APInt::getLowBitsSet(TypeBits, TypeBits - ShiftAmt2));
5809       return BinaryOperator::createAnd(Shift, ConstantInt::get(Mask));
5810     }
5811     
5812     // Okay, if we get here, one shift must be left, and the other shift must be
5813     // right.  See if the amounts are equal.
5814     if (ShiftAmt1 == ShiftAmt2) {
5815       // If we have ((X >>? C) << C), turn this into X & (-1 << C).
5816       if (I.getOpcode() == Instruction::Shl) {
5817         APInt Mask(APInt::getHighBitsSet(TypeBits, TypeBits - ShiftAmt1));
5818         return BinaryOperator::createAnd(X, ConstantInt::get(Mask));
5819       }
5820       // If we have ((X << C) >>u C), turn this into X & (-1 >>u C).
5821       if (I.getOpcode() == Instruction::LShr) {
5822         APInt Mask(APInt::getLowBitsSet(TypeBits, TypeBits - ShiftAmt1));
5823         return BinaryOperator::createAnd(X, ConstantInt::get(Mask));
5824       }
5825       // We can simplify ((X << C) >>s C) into a trunc + sext.
5826       // NOTE: we could do this for any C, but that would make 'unusual' integer
5827       // types.  For now, just stick to ones well-supported by the code
5828       // generators.
5829       const Type *SExtType = 0;
5830       switch (Ty->getBitWidth() - ShiftAmt1) {
5831       case 1  :
5832       case 8  :
5833       case 16 :
5834       case 32 :
5835       case 64 :
5836       case 128:
5837         SExtType = IntegerType::get(Ty->getBitWidth() - ShiftAmt1);
5838         break;
5839       default: break;
5840       }
5841       if (SExtType) {
5842         Instruction *NewTrunc = new TruncInst(X, SExtType, "sext");
5843         InsertNewInstBefore(NewTrunc, I);
5844         return new SExtInst(NewTrunc, Ty);
5845       }
5846       // Otherwise, we can't handle it yet.
5847     } else if (ShiftAmt1 < ShiftAmt2) {
5848       uint32_t ShiftDiff = ShiftAmt2-ShiftAmt1;
5849       
5850       // (X >>? C1) << C2 --> X << (C2-C1) & (-1 << C2)
5851       if (I.getOpcode() == Instruction::Shl) {
5852         assert(ShiftOp->getOpcode() == Instruction::LShr ||
5853                ShiftOp->getOpcode() == Instruction::AShr);
5854         Instruction *Shift =
5855           BinaryOperator::createShl(X, ConstantInt::get(Ty, ShiftDiff));
5856         InsertNewInstBefore(Shift, I);
5857         
5858         APInt Mask(APInt::getHighBitsSet(TypeBits, TypeBits - ShiftAmt2));
5859         return BinaryOperator::createAnd(Shift, ConstantInt::get(Mask));
5860       }
5861       
5862       // (X << C1) >>u C2  --> X >>u (C2-C1) & (-1 >> C2)
5863       if (I.getOpcode() == Instruction::LShr) {
5864         assert(ShiftOp->getOpcode() == Instruction::Shl);
5865         Instruction *Shift =
5866           BinaryOperator::createLShr(X, ConstantInt::get(Ty, ShiftDiff));
5867         InsertNewInstBefore(Shift, I);
5868         
5869         APInt Mask(APInt::getLowBitsSet(TypeBits, TypeBits - ShiftAmt2));
5870         return BinaryOperator::createAnd(Shift, ConstantInt::get(Mask));
5871       }
5872       
5873       // We can't handle (X << C1) >>s C2, it shifts arbitrary bits in.
5874     } else {
5875       assert(ShiftAmt2 < ShiftAmt1);
5876       uint32_t ShiftDiff = ShiftAmt1-ShiftAmt2;
5877
5878       // (X >>? C1) << C2 --> X >>? (C1-C2) & (-1 << C2)
5879       if (I.getOpcode() == Instruction::Shl) {
5880         assert(ShiftOp->getOpcode() == Instruction::LShr ||
5881                ShiftOp->getOpcode() == Instruction::AShr);
5882         Instruction *Shift =
5883           BinaryOperator::create(ShiftOp->getOpcode(), X,
5884                                  ConstantInt::get(Ty, ShiftDiff));
5885         InsertNewInstBefore(Shift, I);
5886         
5887         APInt Mask(APInt::getHighBitsSet(TypeBits, TypeBits - ShiftAmt2));
5888         return BinaryOperator::createAnd(Shift, ConstantInt::get(Mask));
5889       }
5890       
5891       // (X << C1) >>u C2  --> X << (C1-C2) & (-1 >> C2)
5892       if (I.getOpcode() == Instruction::LShr) {
5893         assert(ShiftOp->getOpcode() == Instruction::Shl);
5894         Instruction *Shift =
5895           BinaryOperator::createShl(X, ConstantInt::get(Ty, ShiftDiff));
5896         InsertNewInstBefore(Shift, I);
5897         
5898         APInt Mask(APInt::getLowBitsSet(TypeBits, TypeBits - ShiftAmt2));
5899         return BinaryOperator::createAnd(Shift, ConstantInt::get(Mask));
5900       }
5901       
5902       // We can't handle (X << C1) >>a C2, it shifts arbitrary bits in.
5903     }
5904   }
5905   return 0;
5906 }
5907
5908
5909 /// DecomposeSimpleLinearExpr - Analyze 'Val', seeing if it is a simple linear
5910 /// expression.  If so, decompose it, returning some value X, such that Val is
5911 /// X*Scale+Offset.
5912 ///
5913 static Value *DecomposeSimpleLinearExpr(Value *Val, unsigned &Scale,
5914                                         int &Offset) {
5915   assert(Val->getType() == Type::Int32Ty && "Unexpected allocation size type!");
5916   if (ConstantInt *CI = dyn_cast<ConstantInt>(Val)) {
5917     Offset = CI->getZExtValue();
5918     Scale  = 1;
5919     return ConstantInt::get(Type::Int32Ty, 0);
5920   } else if (Instruction *I = dyn_cast<Instruction>(Val)) {
5921     if (I->getNumOperands() == 2) {
5922       if (ConstantInt *CUI = dyn_cast<ConstantInt>(I->getOperand(1))) {
5923         if (I->getOpcode() == Instruction::Shl) {
5924           // This is a value scaled by '1 << the shift amt'.
5925           Scale = 1U << CUI->getZExtValue();
5926           Offset = 0;
5927           return I->getOperand(0);
5928         } else if (I->getOpcode() == Instruction::Mul) {
5929           // This value is scaled by 'CUI'.
5930           Scale = CUI->getZExtValue();
5931           Offset = 0;
5932           return I->getOperand(0);
5933         } else if (I->getOpcode() == Instruction::Add) {
5934           // We have X+C.  Check to see if we really have (X*C2)+C1, 
5935           // where C1 is divisible by C2.
5936           unsigned SubScale;
5937           Value *SubVal = 
5938             DecomposeSimpleLinearExpr(I->getOperand(0), SubScale, Offset);
5939           Offset += CUI->getZExtValue();
5940           if (SubScale > 1 && (Offset % SubScale == 0)) {
5941             Scale = SubScale;
5942             return SubVal;
5943           }
5944         }
5945       }
5946     }
5947   }
5948
5949   // Otherwise, we can't look past this.
5950   Scale = 1;
5951   Offset = 0;
5952   return Val;
5953 }
5954
5955
5956 /// PromoteCastOfAllocation - If we find a cast of an allocation instruction,
5957 /// try to eliminate the cast by moving the type information into the alloc.
5958 Instruction *InstCombiner::PromoteCastOfAllocation(CastInst &CI,
5959                                                    AllocationInst &AI) {
5960   const PointerType *PTy = dyn_cast<PointerType>(CI.getType());
5961   if (!PTy) return 0;   // Not casting the allocation to a pointer type.
5962   
5963   // Remove any uses of AI that are dead.
5964   assert(!CI.use_empty() && "Dead instructions should be removed earlier!");
5965   
5966   for (Value::use_iterator UI = AI.use_begin(), E = AI.use_end(); UI != E; ) {
5967     Instruction *User = cast<Instruction>(*UI++);
5968     if (isInstructionTriviallyDead(User)) {
5969       while (UI != E && *UI == User)
5970         ++UI; // If this instruction uses AI more than once, don't break UI.
5971       
5972       ++NumDeadInst;
5973       DOUT << "IC: DCE: " << *User;
5974       EraseInstFromFunction(*User);
5975     }
5976   }
5977   
5978   // Get the type really allocated and the type casted to.
5979   const Type *AllocElTy = AI.getAllocatedType();
5980   const Type *CastElTy = PTy->getElementType();
5981   if (!AllocElTy->isSized() || !CastElTy->isSized()) return 0;
5982
5983   unsigned AllocElTyAlign = TD->getABITypeAlignment(AllocElTy);
5984   unsigned CastElTyAlign = TD->getABITypeAlignment(CastElTy);
5985   if (CastElTyAlign < AllocElTyAlign) return 0;
5986
5987   // If the allocation has multiple uses, only promote it if we are strictly
5988   // increasing the alignment of the resultant allocation.  If we keep it the
5989   // same, we open the door to infinite loops of various kinds.
5990   if (!AI.hasOneUse() && CastElTyAlign == AllocElTyAlign) return 0;
5991
5992   uint64_t AllocElTySize = TD->getTypeSize(AllocElTy);
5993   uint64_t CastElTySize = TD->getTypeSize(CastElTy);
5994   if (CastElTySize == 0 || AllocElTySize == 0) return 0;
5995
5996   // See if we can satisfy the modulus by pulling a scale out of the array
5997   // size argument.
5998   unsigned ArraySizeScale;
5999   int ArrayOffset;
6000   Value *NumElements = // See if the array size is a decomposable linear expr.
6001     DecomposeSimpleLinearExpr(AI.getOperand(0), ArraySizeScale, ArrayOffset);
6002  
6003   // If we can now satisfy the modulus, by using a non-1 scale, we really can
6004   // do the xform.
6005   if ((AllocElTySize*ArraySizeScale) % CastElTySize != 0 ||
6006       (AllocElTySize*ArrayOffset   ) % CastElTySize != 0) return 0;
6007
6008   unsigned Scale = (AllocElTySize*ArraySizeScale)/CastElTySize;
6009   Value *Amt = 0;
6010   if (Scale == 1) {
6011     Amt = NumElements;
6012   } else {
6013     // If the allocation size is constant, form a constant mul expression
6014     Amt = ConstantInt::get(Type::Int32Ty, Scale);
6015     if (isa<ConstantInt>(NumElements))
6016       Amt = Multiply(cast<ConstantInt>(NumElements), cast<ConstantInt>(Amt));
6017     // otherwise multiply the amount and the number of elements
6018     else if (Scale != 1) {
6019       Instruction *Tmp = BinaryOperator::createMul(Amt, NumElements, "tmp");
6020       Amt = InsertNewInstBefore(Tmp, AI);
6021     }
6022   }
6023   
6024   if (int Offset = (AllocElTySize*ArrayOffset)/CastElTySize) {
6025     Value *Off = ConstantInt::get(Type::Int32Ty, Offset, true);
6026     Instruction *Tmp = BinaryOperator::createAdd(Amt, Off, "tmp");
6027     Amt = InsertNewInstBefore(Tmp, AI);
6028   }
6029   
6030   AllocationInst *New;
6031   if (isa<MallocInst>(AI))
6032     New = new MallocInst(CastElTy, Amt, AI.getAlignment());
6033   else
6034     New = new AllocaInst(CastElTy, Amt, AI.getAlignment());
6035   InsertNewInstBefore(New, AI);
6036   New->takeName(&AI);
6037   
6038   // If the allocation has multiple uses, insert a cast and change all things
6039   // that used it to use the new cast.  This will also hack on CI, but it will
6040   // die soon.
6041   if (!AI.hasOneUse()) {
6042     AddUsesToWorkList(AI);
6043     // New is the allocation instruction, pointer typed. AI is the original
6044     // allocation instruction, also pointer typed. Thus, cast to use is BitCast.
6045     CastInst *NewCast = new BitCastInst(New, AI.getType(), "tmpcast");
6046     InsertNewInstBefore(NewCast, AI);
6047     AI.replaceAllUsesWith(NewCast);
6048   }
6049   return ReplaceInstUsesWith(CI, New);
6050 }
6051
6052 /// CanEvaluateInDifferentType - Return true if we can take the specified value
6053 /// and return it as type Ty without inserting any new casts and without
6054 /// changing the computed value.  This is used by code that tries to decide
6055 /// whether promoting or shrinking integer operations to wider or smaller types
6056 /// will allow us to eliminate a truncate or extend.
6057 ///
6058 /// This is a truncation operation if Ty is smaller than V->getType(), or an
6059 /// extension operation if Ty is larger.
6060 static bool CanEvaluateInDifferentType(Value *V, const IntegerType *Ty,
6061                                        int &NumCastsRemoved) {
6062   // We can always evaluate constants in another type.
6063   if (isa<ConstantInt>(V))
6064     return true;
6065   
6066   Instruction *I = dyn_cast<Instruction>(V);
6067   if (!I) return false;
6068   
6069   const IntegerType *OrigTy = cast<IntegerType>(V->getType());
6070   
6071   switch (I->getOpcode()) {
6072   case Instruction::Add:
6073   case Instruction::Sub:
6074   case Instruction::And:
6075   case Instruction::Or:
6076   case Instruction::Xor:
6077     if (!I->hasOneUse()) return false;
6078     // These operators can all arbitrarily be extended or truncated.
6079     return CanEvaluateInDifferentType(I->getOperand(0), Ty, NumCastsRemoved) &&
6080            CanEvaluateInDifferentType(I->getOperand(1), Ty, NumCastsRemoved);
6081
6082   case Instruction::Shl:
6083     if (!I->hasOneUse()) return false;
6084     // If we are truncating the result of this SHL, and if it's a shift of a
6085     // constant amount, we can always perform a SHL in a smaller type.
6086     if (ConstantInt *CI = dyn_cast<ConstantInt>(I->getOperand(1))) {
6087       uint32_t BitWidth = Ty->getBitWidth();
6088       if (BitWidth < OrigTy->getBitWidth() && 
6089           CI->getLimitedValue(BitWidth) < BitWidth)
6090         return CanEvaluateInDifferentType(I->getOperand(0), Ty,NumCastsRemoved);
6091     }
6092     break;
6093   case Instruction::LShr:
6094     if (!I->hasOneUse()) return false;
6095     // If this is a truncate of a logical shr, we can truncate it to a smaller
6096     // lshr iff we know that the bits we would otherwise be shifting in are
6097     // already zeros.
6098     if (ConstantInt *CI = dyn_cast<ConstantInt>(I->getOperand(1))) {
6099       uint32_t OrigBitWidth = OrigTy->getBitWidth();
6100       uint32_t BitWidth = Ty->getBitWidth();
6101       if (BitWidth < OrigBitWidth &&
6102           MaskedValueIsZero(I->getOperand(0),
6103             APInt::getHighBitsSet(OrigBitWidth, OrigBitWidth-BitWidth)) &&
6104           CI->getLimitedValue(BitWidth) < BitWidth) {
6105         return CanEvaluateInDifferentType(I->getOperand(0), Ty, NumCastsRemoved);
6106       }
6107     }
6108     break;
6109   case Instruction::Trunc:
6110   case Instruction::ZExt:
6111   case Instruction::SExt:
6112     // If this is a cast from the destination type, we can trivially eliminate
6113     // it, and this will remove a cast overall.
6114     if (I->getOperand(0)->getType() == Ty) {
6115       // If the first operand is itself a cast, and is eliminable, do not count
6116       // this as an eliminable cast.  We would prefer to eliminate those two
6117       // casts first.
6118       if (isa<CastInst>(I->getOperand(0)))
6119         return true;
6120       
6121       ++NumCastsRemoved;
6122       return true;
6123     }
6124     break;
6125   default:
6126     // TODO: Can handle more cases here.
6127     break;
6128   }
6129   
6130   return false;
6131 }
6132
6133 /// EvaluateInDifferentType - Given an expression that 
6134 /// CanEvaluateInDifferentType returns true for, actually insert the code to
6135 /// evaluate the expression.
6136 Value *InstCombiner::EvaluateInDifferentType(Value *V, const Type *Ty, 
6137                                              bool isSigned) {
6138   if (Constant *C = dyn_cast<Constant>(V))
6139     return ConstantExpr::getIntegerCast(C, Ty, isSigned /*Sext or ZExt*/);
6140
6141   // Otherwise, it must be an instruction.
6142   Instruction *I = cast<Instruction>(V);
6143   Instruction *Res = 0;
6144   switch (I->getOpcode()) {
6145   case Instruction::Add:
6146   case Instruction::Sub:
6147   case Instruction::And:
6148   case Instruction::Or:
6149   case Instruction::Xor:
6150   case Instruction::AShr:
6151   case Instruction::LShr:
6152   case Instruction::Shl: {
6153     Value *LHS = EvaluateInDifferentType(I->getOperand(0), Ty, isSigned);
6154     Value *RHS = EvaluateInDifferentType(I->getOperand(1), Ty, isSigned);
6155     Res = BinaryOperator::create((Instruction::BinaryOps)I->getOpcode(),
6156                                  LHS, RHS, I->getName());
6157     break;
6158   }    
6159   case Instruction::Trunc:
6160   case Instruction::ZExt:
6161   case Instruction::SExt:
6162   case Instruction::BitCast:
6163     // If the source type of the cast is the type we're trying for then we can
6164     // just return the source. There's no need to insert it because its not new.
6165     if (I->getOperand(0)->getType() == Ty)
6166       return I->getOperand(0);
6167     
6168     // Some other kind of cast, which shouldn't happen, so just ..
6169     // FALL THROUGH
6170   default: 
6171     // TODO: Can handle more cases here.
6172     assert(0 && "Unreachable!");
6173     break;
6174   }
6175   
6176   return InsertNewInstBefore(Res, *I);
6177 }
6178
6179 /// @brief Implement the transforms common to all CastInst visitors.
6180 Instruction *InstCombiner::commonCastTransforms(CastInst &CI) {
6181   Value *Src = CI.getOperand(0);
6182
6183   // Casting undef to anything results in undef so might as just replace it and
6184   // get rid of the cast.
6185   if (isa<UndefValue>(Src))   // cast undef -> undef
6186     return ReplaceInstUsesWith(CI, UndefValue::get(CI.getType()));
6187
6188   // Many cases of "cast of a cast" are eliminable. If its eliminable we just
6189   // eliminate it now.
6190   if (CastInst *CSrc = dyn_cast<CastInst>(Src)) {   // A->B->C cast
6191     if (Instruction::CastOps opc = 
6192         isEliminableCastPair(CSrc, CI.getOpcode(), CI.getType(), TD)) {
6193       // The first cast (CSrc) is eliminable so we need to fix up or replace
6194       // the second cast (CI). CSrc will then have a good chance of being dead.
6195       return CastInst::create(opc, CSrc->getOperand(0), CI.getType());
6196     }
6197   }
6198
6199   // If casting the result of a getelementptr instruction with no offset, turn
6200   // this into a cast of the original pointer!
6201   //
6202   if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(Src)) {
6203     bool AllZeroOperands = true;
6204     for (unsigned i = 1, e = GEP->getNumOperands(); i != e; ++i)
6205       if (!isa<Constant>(GEP->getOperand(i)) ||
6206           !cast<Constant>(GEP->getOperand(i))->isNullValue()) {
6207         AllZeroOperands = false;
6208         break;
6209       }
6210     if (AllZeroOperands) {
6211       // Changing the cast operand is usually not a good idea but it is safe
6212       // here because the pointer operand is being replaced with another 
6213       // pointer operand so the opcode doesn't need to change.
6214       CI.setOperand(0, GEP->getOperand(0));
6215       return &CI;
6216     }
6217   }
6218     
6219   // If we are casting a malloc or alloca to a pointer to a type of the same
6220   // size, rewrite the allocation instruction to allocate the "right" type.
6221   if (AllocationInst *AI = dyn_cast<AllocationInst>(Src))
6222     if (Instruction *V = PromoteCastOfAllocation(CI, *AI))
6223       return V;
6224
6225   // If we are casting a select then fold the cast into the select
6226   if (SelectInst *SI = dyn_cast<SelectInst>(Src))
6227     if (Instruction *NV = FoldOpIntoSelect(CI, SI, this))
6228       return NV;
6229
6230   // If we are casting a PHI then fold the cast into the PHI
6231   if (isa<PHINode>(Src))
6232     if (Instruction *NV = FoldOpIntoPhi(CI))
6233       return NV;
6234   
6235   return 0;
6236 }
6237
6238 /// Only the TRUNC, ZEXT, SEXT, and BITCAST can both operand and result as
6239 /// integer types. This function implements the common transforms for all those
6240 /// cases.
6241 /// @brief Implement the transforms common to CastInst with integer operands
6242 Instruction *InstCombiner::commonIntCastTransforms(CastInst &CI) {
6243   if (Instruction *Result = commonCastTransforms(CI))
6244     return Result;
6245
6246   Value *Src = CI.getOperand(0);
6247   const Type *SrcTy = Src->getType();
6248   const Type *DestTy = CI.getType();
6249   uint32_t SrcBitSize = SrcTy->getPrimitiveSizeInBits();
6250   uint32_t DestBitSize = DestTy->getPrimitiveSizeInBits();
6251
6252   // See if we can simplify any instructions used by the LHS whose sole 
6253   // purpose is to compute bits we don't care about.
6254   APInt KnownZero(DestBitSize, 0), KnownOne(DestBitSize, 0);
6255   if (SimplifyDemandedBits(&CI, APInt::getAllOnesValue(DestBitSize),
6256                            KnownZero, KnownOne))
6257     return &CI;
6258
6259   // If the source isn't an instruction or has more than one use then we
6260   // can't do anything more. 
6261   Instruction *SrcI = dyn_cast<Instruction>(Src);
6262   if (!SrcI || !Src->hasOneUse())
6263     return 0;
6264
6265   // Attempt to propagate the cast into the instruction for int->int casts.
6266   int NumCastsRemoved = 0;
6267   if (!isa<BitCastInst>(CI) &&
6268       CanEvaluateInDifferentType(SrcI, cast<IntegerType>(DestTy),
6269                                  NumCastsRemoved)) {
6270     // If this cast is a truncate, evaluting in a different type always
6271     // eliminates the cast, so it is always a win.  If this is a noop-cast
6272     // this just removes a noop cast which isn't pointful, but simplifies
6273     // the code.  If this is a zero-extension, we need to do an AND to
6274     // maintain the clear top-part of the computation, so we require that
6275     // the input have eliminated at least one cast.  If this is a sign
6276     // extension, we insert two new casts (to do the extension) so we
6277     // require that two casts have been eliminated.
6278     bool DoXForm;
6279     switch (CI.getOpcode()) {
6280     default:
6281       // All the others use floating point so we shouldn't actually 
6282       // get here because of the check above.
6283       assert(0 && "Unknown cast type");
6284     case Instruction::Trunc:
6285       DoXForm = true;
6286       break;
6287     case Instruction::ZExt:
6288       DoXForm = NumCastsRemoved >= 1;
6289       break;
6290     case Instruction::SExt:
6291       DoXForm = NumCastsRemoved >= 2;
6292       break;
6293     case Instruction::BitCast:
6294       DoXForm = false;
6295       break;
6296     }
6297     
6298     if (DoXForm) {
6299       Value *Res = EvaluateInDifferentType(SrcI, DestTy, 
6300                                            CI.getOpcode() == Instruction::SExt);
6301       assert(Res->getType() == DestTy);
6302       switch (CI.getOpcode()) {
6303       default: assert(0 && "Unknown cast type!");
6304       case Instruction::Trunc:
6305       case Instruction::BitCast:
6306         // Just replace this cast with the result.
6307         return ReplaceInstUsesWith(CI, Res);
6308       case Instruction::ZExt: {
6309         // We need to emit an AND to clear the high bits.
6310         assert(SrcBitSize < DestBitSize && "Not a zext?");
6311         Constant *C = ConstantInt::get(APInt::getLowBitsSet(DestBitSize,
6312                                                             SrcBitSize));
6313         return BinaryOperator::createAnd(Res, C);
6314       }
6315       case Instruction::SExt:
6316         // We need to emit a cast to truncate, then a cast to sext.
6317         return CastInst::create(Instruction::SExt,
6318             InsertCastBefore(Instruction::Trunc, Res, Src->getType(), 
6319                              CI), DestTy);
6320       }
6321     }
6322   }
6323   
6324   Value *Op0 = SrcI->getNumOperands() > 0 ? SrcI->getOperand(0) : 0;
6325   Value *Op1 = SrcI->getNumOperands() > 1 ? SrcI->getOperand(1) : 0;
6326
6327   switch (SrcI->getOpcode()) {
6328   case Instruction::Add:
6329   case Instruction::Mul:
6330   case Instruction::And:
6331   case Instruction::Or:
6332   case Instruction::Xor:
6333     // If we are discarding information, rewrite.
6334     if (DestBitSize <= SrcBitSize && DestBitSize != 1) {
6335       // Don't insert two casts if they cannot be eliminated.  We allow 
6336       // two casts to be inserted if the sizes are the same.  This could 
6337       // only be converting signedness, which is a noop.
6338       if (DestBitSize == SrcBitSize || 
6339           !ValueRequiresCast(CI.getOpcode(), Op1, DestTy,TD) ||
6340           !ValueRequiresCast(CI.getOpcode(), Op0, DestTy, TD)) {
6341         Instruction::CastOps opcode = CI.getOpcode();
6342         Value *Op0c = InsertOperandCastBefore(opcode, Op0, DestTy, SrcI);
6343         Value *Op1c = InsertOperandCastBefore(opcode, Op1, DestTy, SrcI);
6344         return BinaryOperator::create(
6345             cast<BinaryOperator>(SrcI)->getOpcode(), Op0c, Op1c);
6346       }
6347     }
6348
6349     // cast (xor bool X, true) to int  --> xor (cast bool X to int), 1
6350     if (isa<ZExtInst>(CI) && SrcBitSize == 1 && 
6351         SrcI->getOpcode() == Instruction::Xor &&
6352         Op1 == ConstantInt::getTrue() &&
6353         (!Op0->hasOneUse() || !isa<CmpInst>(Op0))) {
6354       Value *New = InsertOperandCastBefore(Instruction::ZExt, Op0, DestTy, &CI);
6355       return BinaryOperator::createXor(New, ConstantInt::get(CI.getType(), 1));
6356     }
6357     break;
6358   case Instruction::SDiv:
6359   case Instruction::UDiv:
6360   case Instruction::SRem:
6361   case Instruction::URem:
6362     // If we are just changing the sign, rewrite.
6363     if (DestBitSize == SrcBitSize) {
6364       // Don't insert two casts if they cannot be eliminated.  We allow 
6365       // two casts to be inserted if the sizes are the same.  This could 
6366       // only be converting signedness, which is a noop.
6367       if (!ValueRequiresCast(CI.getOpcode(), Op1, DestTy, TD) || 
6368           !ValueRequiresCast(CI.getOpcode(), Op0, DestTy, TD)) {
6369         Value *Op0c = InsertOperandCastBefore(Instruction::BitCast, 
6370                                               Op0, DestTy, SrcI);
6371         Value *Op1c = InsertOperandCastBefore(Instruction::BitCast, 
6372                                               Op1, DestTy, SrcI);
6373         return BinaryOperator::create(
6374           cast<BinaryOperator>(SrcI)->getOpcode(), Op0c, Op1c);
6375       }
6376     }
6377     break;
6378
6379   case Instruction::Shl:
6380     // Allow changing the sign of the source operand.  Do not allow 
6381     // changing the size of the shift, UNLESS the shift amount is a 
6382     // constant.  We must not change variable sized shifts to a smaller 
6383     // size, because it is undefined to shift more bits out than exist 
6384     // in the value.
6385     if (DestBitSize == SrcBitSize ||
6386         (DestBitSize < SrcBitSize && isa<Constant>(Op1))) {
6387       Instruction::CastOps opcode = (DestBitSize == SrcBitSize ?
6388           Instruction::BitCast : Instruction::Trunc);
6389       Value *Op0c = InsertOperandCastBefore(opcode, Op0, DestTy, SrcI);
6390       Value *Op1c = InsertOperandCastBefore(opcode, Op1, DestTy, SrcI);
6391       return BinaryOperator::createShl(Op0c, Op1c);
6392     }
6393     break;
6394   case Instruction::AShr:
6395     // If this is a signed shr, and if all bits shifted in are about to be
6396     // truncated off, turn it into an unsigned shr to allow greater
6397     // simplifications.
6398     if (DestBitSize < SrcBitSize &&
6399         isa<ConstantInt>(Op1)) {
6400       uint32_t ShiftAmt = cast<ConstantInt>(Op1)->getLimitedValue(SrcBitSize);
6401       if (SrcBitSize > ShiftAmt && SrcBitSize-ShiftAmt >= DestBitSize) {
6402         // Insert the new logical shift right.
6403         return BinaryOperator::createLShr(Op0, Op1);
6404       }
6405     }
6406     break;
6407
6408   case Instruction::ICmp:
6409     // If we are just checking for a icmp eq of a single bit and casting it
6410     // to an integer, then shift the bit to the appropriate place and then
6411     // cast to integer to avoid the comparison.
6412     if (ConstantInt *Op1C = dyn_cast<ConstantInt>(Op1)) {
6413       const APInt& Op1CV = Op1C->getValue();
6414       // cast (X == 0) to int --> X^1      iff X has only the low bit set.
6415       // cast (X == 0) to int --> (X>>1)^1 iff X has only the 2nd bit set.
6416       // cast (X == 1) to int --> X        iff X has only the low bit set.
6417       // cast (X == 2) to int --> X>>1     iff X has only the 2nd bit set.
6418       // cast (X != 0) to int --> X        iff X has only the low bit set.
6419       // cast (X != 0) to int --> X>>1     iff X has only the 2nd bit set.
6420       // cast (X != 1) to int --> X^1      iff X has only the low bit set.
6421       // cast (X != 2) to int --> (X>>1)^1 iff X has only the 2nd bit set.
6422       if (Op1CV == 0 || Op1CV.isPowerOf2()) {
6423         // If Op1C some other power of two, convert:
6424         uint32_t BitWidth = Op1C->getType()->getBitWidth();
6425         APInt KnownZero(BitWidth, 0), KnownOne(BitWidth, 0);
6426         APInt TypeMask(APInt::getAllOnesValue(BitWidth));
6427         ComputeMaskedBits(Op0, TypeMask, KnownZero, KnownOne);
6428
6429         // This only works for EQ and NE
6430         ICmpInst::Predicate pred = cast<ICmpInst>(SrcI)->getPredicate();
6431         if (pred != ICmpInst::ICMP_NE && pred != ICmpInst::ICMP_EQ)
6432           break;
6433         
6434         APInt KnownZeroMask(KnownZero ^ TypeMask);
6435         if (KnownZeroMask.isPowerOf2()) { // Exactly 1 possible 1?
6436           bool isNE = pred == ICmpInst::ICMP_NE;
6437           if (Op1CV != 0 && (Op1CV != KnownZeroMask)) {
6438             // (X&4) == 2 --> false
6439             // (X&4) != 2 --> true
6440             Constant *Res = ConstantInt::get(Type::Int1Ty, isNE);
6441             Res = ConstantExpr::getZExt(Res, CI.getType());
6442             return ReplaceInstUsesWith(CI, Res);
6443           }
6444           
6445           uint32_t ShiftAmt = KnownZeroMask.logBase2();
6446           Value *In = Op0;
6447           if (ShiftAmt) {
6448             // Perform a logical shr by shiftamt.
6449             // Insert the shift to put the result in the low bit.
6450             In = InsertNewInstBefore(
6451               BinaryOperator::createLShr(In,
6452                                      ConstantInt::get(In->getType(), ShiftAmt),
6453                                      In->getName()+".lobit"), CI);
6454           }
6455           
6456           if ((Op1CV != 0) == isNE) { // Toggle the low bit.
6457             Constant *One = ConstantInt::get(In->getType(), 1);
6458             In = BinaryOperator::createXor(In, One, "tmp");
6459             InsertNewInstBefore(cast<Instruction>(In), CI);
6460           }
6461           
6462           if (CI.getType() == In->getType())
6463             return ReplaceInstUsesWith(CI, In);
6464           else
6465             return CastInst::createIntegerCast(In, CI.getType(), false/*ZExt*/);
6466         }
6467       }
6468     }
6469     break;
6470   }
6471   return 0;
6472 }
6473
6474 Instruction *InstCombiner::visitTrunc(CastInst &CI) {
6475   if (Instruction *Result = commonIntCastTransforms(CI))
6476     return Result;
6477   
6478   Value *Src = CI.getOperand(0);
6479   const Type *Ty = CI.getType();
6480   uint32_t DestBitWidth = Ty->getPrimitiveSizeInBits();
6481   uint32_t SrcBitWidth = cast<IntegerType>(Src->getType())->getBitWidth();
6482   
6483   if (Instruction *SrcI = dyn_cast<Instruction>(Src)) {
6484     switch (SrcI->getOpcode()) {
6485     default: break;
6486     case Instruction::LShr:
6487       // We can shrink lshr to something smaller if we know the bits shifted in
6488       // are already zeros.
6489       if (ConstantInt *ShAmtV = dyn_cast<ConstantInt>(SrcI->getOperand(1))) {
6490         uint32_t ShAmt = ShAmtV->getLimitedValue(SrcBitWidth);
6491         
6492         // Get a mask for the bits shifting in.
6493         APInt Mask(APInt::getLowBitsSet(SrcBitWidth, ShAmt).shl(DestBitWidth));
6494         Value* SrcIOp0 = SrcI->getOperand(0);
6495         if (SrcI->hasOneUse() && MaskedValueIsZero(SrcIOp0, Mask)) {
6496           if (ShAmt >= DestBitWidth)        // All zeros.
6497             return ReplaceInstUsesWith(CI, Constant::getNullValue(Ty));
6498
6499           // Okay, we can shrink this.  Truncate the input, then return a new
6500           // shift.
6501           Value *V1 = InsertCastBefore(Instruction::Trunc, SrcIOp0, Ty, CI);
6502           Value *V2 = InsertCastBefore(Instruction::Trunc, SrcI->getOperand(1),
6503                                        Ty, CI);
6504           return BinaryOperator::createLShr(V1, V2);
6505         }
6506       } else {     // This is a variable shr.
6507         
6508         // Turn 'trunc (lshr X, Y) to bool' into '(X & (1 << Y)) != 0'.  This is
6509         // more LLVM instructions, but allows '1 << Y' to be hoisted if
6510         // loop-invariant and CSE'd.
6511         if (CI.getType() == Type::Int1Ty && SrcI->hasOneUse()) {
6512           Value *One = ConstantInt::get(SrcI->getType(), 1);
6513
6514           Value *V = InsertNewInstBefore(
6515               BinaryOperator::createShl(One, SrcI->getOperand(1),
6516                                      "tmp"), CI);
6517           V = InsertNewInstBefore(BinaryOperator::createAnd(V,
6518                                                             SrcI->getOperand(0),
6519                                                             "tmp"), CI);
6520           Value *Zero = Constant::getNullValue(V->getType());
6521           return new ICmpInst(ICmpInst::ICMP_NE, V, Zero);
6522         }
6523       }
6524       break;
6525     }
6526   }
6527   
6528   return 0;
6529 }
6530
6531 Instruction *InstCombiner::visitZExt(CastInst &CI) {
6532   // If one of the common conversion will work ..
6533   if (Instruction *Result = commonIntCastTransforms(CI))
6534     return Result;
6535
6536   Value *Src = CI.getOperand(0);
6537
6538   // If this is a cast of a cast
6539   if (CastInst *CSrc = dyn_cast<CastInst>(Src)) {   // A->B->C cast
6540     // If this is a TRUNC followed by a ZEXT then we are dealing with integral
6541     // types and if the sizes are just right we can convert this into a logical
6542     // 'and' which will be much cheaper than the pair of casts.
6543     if (isa<TruncInst>(CSrc)) {
6544       // Get the sizes of the types involved
6545       Value *A = CSrc->getOperand(0);
6546       uint32_t SrcSize = A->getType()->getPrimitiveSizeInBits();
6547       uint32_t MidSize = CSrc->getType()->getPrimitiveSizeInBits();
6548       uint32_t DstSize = CI.getType()->getPrimitiveSizeInBits();
6549       // If we're actually extending zero bits and the trunc is a no-op
6550       if (MidSize < DstSize && SrcSize == DstSize) {
6551         // Replace both of the casts with an And of the type mask.
6552         APInt AndValue(APInt::getLowBitsSet(SrcSize, MidSize));
6553         Constant *AndConst = ConstantInt::get(AndValue);
6554         Instruction *And = 
6555           BinaryOperator::createAnd(CSrc->getOperand(0), AndConst);
6556         // Unfortunately, if the type changed, we need to cast it back.
6557         if (And->getType() != CI.getType()) {
6558           And->setName(CSrc->getName()+".mask");
6559           InsertNewInstBefore(And, CI);
6560           And = CastInst::createIntegerCast(And, CI.getType(), false/*ZExt*/);
6561         }
6562         return And;
6563       }
6564     }
6565   }
6566
6567   return 0;
6568 }
6569
6570 Instruction *InstCombiner::visitSExt(CastInst &CI) {
6571   return commonIntCastTransforms(CI);
6572 }
6573
6574 Instruction *InstCombiner::visitFPTrunc(CastInst &CI) {
6575   return commonCastTransforms(CI);
6576 }
6577
6578 Instruction *InstCombiner::visitFPExt(CastInst &CI) {
6579   return commonCastTransforms(CI);
6580 }
6581
6582 Instruction *InstCombiner::visitFPToUI(CastInst &CI) {
6583   return commonCastTransforms(CI);
6584 }
6585
6586 Instruction *InstCombiner::visitFPToSI(CastInst &CI) {
6587   return commonCastTransforms(CI);
6588 }
6589
6590 Instruction *InstCombiner::visitUIToFP(CastInst &CI) {
6591   return commonCastTransforms(CI);
6592 }
6593
6594 Instruction *InstCombiner::visitSIToFP(CastInst &CI) {
6595   return commonCastTransforms(CI);
6596 }
6597
6598 Instruction *InstCombiner::visitPtrToInt(CastInst &CI) {
6599   return commonCastTransforms(CI);
6600 }
6601
6602 Instruction *InstCombiner::visitIntToPtr(CastInst &CI) {
6603   return commonCastTransforms(CI);
6604 }
6605
6606 Instruction *InstCombiner::visitBitCast(CastInst &CI) {
6607
6608   // If the operands are integer typed then apply the integer transforms,
6609   // otherwise just apply the common ones.
6610   Value *Src = CI.getOperand(0);
6611   const Type *SrcTy = Src->getType();
6612   const Type *DestTy = CI.getType();
6613
6614   if (SrcTy->isInteger() && DestTy->isInteger()) {
6615     if (Instruction *Result = commonIntCastTransforms(CI))
6616       return Result;
6617   } else {
6618     if (Instruction *Result = commonCastTransforms(CI))
6619       return Result;
6620   }
6621
6622
6623   // Get rid of casts from one type to the same type. These are useless and can
6624   // be replaced by the operand.
6625   if (DestTy == Src->getType())
6626     return ReplaceInstUsesWith(CI, Src);
6627
6628   // If the source and destination are pointers, and this cast is equivalent to
6629   // a getelementptr X, 0, 0, 0...  turn it into the appropriate getelementptr.
6630   // This can enhance SROA and other transforms that want type-safe pointers.
6631   if (const PointerType *DstPTy = dyn_cast<PointerType>(DestTy)) {
6632     if (const PointerType *SrcPTy = dyn_cast<PointerType>(SrcTy)) {
6633       const Type *DstElTy = DstPTy->getElementType();
6634       const Type *SrcElTy = SrcPTy->getElementType();
6635       
6636       Constant *ZeroUInt = Constant::getNullValue(Type::Int32Ty);
6637       unsigned NumZeros = 0;
6638       while (SrcElTy != DstElTy && 
6639              isa<CompositeType>(SrcElTy) && !isa<PointerType>(SrcElTy) &&
6640              SrcElTy->getNumContainedTypes() /* not "{}" */) {
6641         SrcElTy = cast<CompositeType>(SrcElTy)->getTypeAtIndex(ZeroUInt);
6642         ++NumZeros;
6643       }
6644
6645       // If we found a path from the src to dest, create the getelementptr now.
6646       if (SrcElTy == DstElTy) {
6647         SmallVector<Value*, 8> Idxs(NumZeros+1, ZeroUInt);
6648         return new GetElementPtrInst(Src, &Idxs[0], Idxs.size());
6649       }
6650     }
6651   }
6652
6653   if (ShuffleVectorInst *SVI = dyn_cast<ShuffleVectorInst>(Src)) {
6654     if (SVI->hasOneUse()) {
6655       // Okay, we have (bitconvert (shuffle ..)).  Check to see if this is
6656       // a bitconvert to a vector with the same # elts.
6657       if (isa<VectorType>(DestTy) && 
6658           cast<VectorType>(DestTy)->getNumElements() == 
6659                 SVI->getType()->getNumElements()) {
6660         CastInst *Tmp;
6661         // If either of the operands is a cast from CI.getType(), then
6662         // evaluating the shuffle in the casted destination's type will allow
6663         // us to eliminate at least one cast.
6664         if (((Tmp = dyn_cast<CastInst>(SVI->getOperand(0))) && 
6665              Tmp->getOperand(0)->getType() == DestTy) ||
6666             ((Tmp = dyn_cast<CastInst>(SVI->getOperand(1))) && 
6667              Tmp->getOperand(0)->getType() == DestTy)) {
6668           Value *LHS = InsertOperandCastBefore(Instruction::BitCast,
6669                                                SVI->getOperand(0), DestTy, &CI);
6670           Value *RHS = InsertOperandCastBefore(Instruction::BitCast,
6671                                                SVI->getOperand(1), DestTy, &CI);
6672           // Return a new shuffle vector.  Use the same element ID's, as we
6673           // know the vector types match #elts.
6674           return new ShuffleVectorInst(LHS, RHS, SVI->getOperand(2));
6675         }
6676       }
6677     }
6678   }
6679   return 0;
6680 }
6681
6682 /// GetSelectFoldableOperands - We want to turn code that looks like this:
6683 ///   %C = or %A, %B
6684 ///   %D = select %cond, %C, %A
6685 /// into:
6686 ///   %C = select %cond, %B, 0
6687 ///   %D = or %A, %C
6688 ///
6689 /// Assuming that the specified instruction is an operand to the select, return
6690 /// a bitmask indicating which operands of this instruction are foldable if they
6691 /// equal the other incoming value of the select.
6692 ///
6693 static unsigned GetSelectFoldableOperands(Instruction *I) {
6694   switch (I->getOpcode()) {
6695   case Instruction::Add:
6696   case Instruction::Mul:
6697   case Instruction::And:
6698   case Instruction::Or:
6699   case Instruction::Xor:
6700     return 3;              // Can fold through either operand.
6701   case Instruction::Sub:   // Can only fold on the amount subtracted.
6702   case Instruction::Shl:   // Can only fold on the shift amount.
6703   case Instruction::LShr:
6704   case Instruction::AShr:
6705     return 1;
6706   default:
6707     return 0;              // Cannot fold
6708   }
6709 }
6710
6711 /// GetSelectFoldableConstant - For the same transformation as the previous
6712 /// function, return the identity constant that goes into the select.
6713 static Constant *GetSelectFoldableConstant(Instruction *I) {
6714   switch (I->getOpcode()) {
6715   default: assert(0 && "This cannot happen!"); abort();
6716   case Instruction::Add:
6717   case Instruction::Sub:
6718   case Instruction::Or:
6719   case Instruction::Xor:
6720   case Instruction::Shl:
6721   case Instruction::LShr:
6722   case Instruction::AShr:
6723     return Constant::getNullValue(I->getType());
6724   case Instruction::And:
6725     return ConstantInt::getAllOnesValue(I->getType());
6726   case Instruction::Mul:
6727     return ConstantInt::get(I->getType(), 1);
6728   }
6729 }
6730
6731 /// FoldSelectOpOp - Here we have (select c, TI, FI), and we know that TI and FI
6732 /// have the same opcode and only one use each.  Try to simplify this.
6733 Instruction *InstCombiner::FoldSelectOpOp(SelectInst &SI, Instruction *TI,
6734                                           Instruction *FI) {
6735   if (TI->getNumOperands() == 1) {
6736     // If this is a non-volatile load or a cast from the same type,
6737     // merge.
6738     if (TI->isCast()) {
6739       if (TI->getOperand(0)->getType() != FI->getOperand(0)->getType())
6740         return 0;
6741     } else {
6742       return 0;  // unknown unary op.
6743     }
6744
6745     // Fold this by inserting a select from the input values.
6746     SelectInst *NewSI = new SelectInst(SI.getCondition(), TI->getOperand(0),
6747                                        FI->getOperand(0), SI.getName()+".v");
6748     InsertNewInstBefore(NewSI, SI);
6749     return CastInst::create(Instruction::CastOps(TI->getOpcode()), NewSI, 
6750                             TI->getType());
6751   }
6752
6753   // Only handle binary operators here.
6754   if (!isa<BinaryOperator>(TI))
6755     return 0;
6756
6757   // Figure out if the operations have any operands in common.
6758   Value *MatchOp, *OtherOpT, *OtherOpF;
6759   bool MatchIsOpZero;
6760   if (TI->getOperand(0) == FI->getOperand(0)) {
6761     MatchOp  = TI->getOperand(0);
6762     OtherOpT = TI->getOperand(1);
6763     OtherOpF = FI->getOperand(1);
6764     MatchIsOpZero = true;
6765   } else if (TI->getOperand(1) == FI->getOperand(1)) {
6766     MatchOp  = TI->getOperand(1);
6767     OtherOpT = TI->getOperand(0);
6768     OtherOpF = FI->getOperand(0);
6769     MatchIsOpZero = false;
6770   } else if (!TI->isCommutative()) {
6771     return 0;
6772   } else if (TI->getOperand(0) == FI->getOperand(1)) {
6773     MatchOp  = TI->getOperand(0);
6774     OtherOpT = TI->getOperand(1);
6775     OtherOpF = FI->getOperand(0);
6776     MatchIsOpZero = true;
6777   } else if (TI->getOperand(1) == FI->getOperand(0)) {
6778     MatchOp  = TI->getOperand(1);
6779     OtherOpT = TI->getOperand(0);
6780     OtherOpF = FI->getOperand(1);
6781     MatchIsOpZero = true;
6782   } else {
6783     return 0;
6784   }
6785
6786   // If we reach here, they do have operations in common.
6787   SelectInst *NewSI = new SelectInst(SI.getCondition(), OtherOpT,
6788                                      OtherOpF, SI.getName()+".v");
6789   InsertNewInstBefore(NewSI, SI);
6790
6791   if (BinaryOperator *BO = dyn_cast<BinaryOperator>(TI)) {
6792     if (MatchIsOpZero)
6793       return BinaryOperator::create(BO->getOpcode(), MatchOp, NewSI);
6794     else
6795       return BinaryOperator::create(BO->getOpcode(), NewSI, MatchOp);
6796   }
6797   assert(0 && "Shouldn't get here");
6798   return 0;
6799 }
6800
6801 Instruction *InstCombiner::visitSelectInst(SelectInst &SI) {
6802   Value *CondVal = SI.getCondition();
6803   Value *TrueVal = SI.getTrueValue();
6804   Value *FalseVal = SI.getFalseValue();
6805
6806   // select true, X, Y  -> X
6807   // select false, X, Y -> Y
6808   if (ConstantInt *C = dyn_cast<ConstantInt>(CondVal))
6809     return ReplaceInstUsesWith(SI, C->getZExtValue() ? TrueVal : FalseVal);
6810
6811   // select C, X, X -> X
6812   if (TrueVal == FalseVal)
6813     return ReplaceInstUsesWith(SI, TrueVal);
6814
6815   if (isa<UndefValue>(TrueVal))   // select C, undef, X -> X
6816     return ReplaceInstUsesWith(SI, FalseVal);
6817   if (isa<UndefValue>(FalseVal))   // select C, X, undef -> X
6818     return ReplaceInstUsesWith(SI, TrueVal);
6819   if (isa<UndefValue>(CondVal)) {  // select undef, X, Y -> X or Y
6820     if (isa<Constant>(TrueVal))
6821       return ReplaceInstUsesWith(SI, TrueVal);
6822     else
6823       return ReplaceInstUsesWith(SI, FalseVal);
6824   }
6825
6826   if (SI.getType() == Type::Int1Ty) {
6827     if (ConstantInt *C = dyn_cast<ConstantInt>(TrueVal)) {
6828       if (C->getZExtValue()) {
6829         // Change: A = select B, true, C --> A = or B, C
6830         return BinaryOperator::createOr(CondVal, FalseVal);
6831       } else {
6832         // Change: A = select B, false, C --> A = and !B, C
6833         Value *NotCond =
6834           InsertNewInstBefore(BinaryOperator::createNot(CondVal,
6835                                              "not."+CondVal->getName()), SI);
6836         return BinaryOperator::createAnd(NotCond, FalseVal);
6837       }
6838     } else if (ConstantInt *C = dyn_cast<ConstantInt>(FalseVal)) {
6839       if (C->getZExtValue() == false) {
6840         // Change: A = select B, C, false --> A = and B, C
6841         return BinaryOperator::createAnd(CondVal, TrueVal);
6842       } else {
6843         // Change: A = select B, C, true --> A = or !B, C
6844         Value *NotCond =
6845           InsertNewInstBefore(BinaryOperator::createNot(CondVal,
6846                                              "not."+CondVal->getName()), SI);
6847         return BinaryOperator::createOr(NotCond, TrueVal);
6848       }
6849     }
6850   }
6851
6852   // Selecting between two integer constants?
6853   if (ConstantInt *TrueValC = dyn_cast<ConstantInt>(TrueVal))
6854     if (ConstantInt *FalseValC = dyn_cast<ConstantInt>(FalseVal)) {
6855       // select C, 1, 0 -> cast C to int
6856       if (FalseValC->isZero() && TrueValC->getValue() == 1) {
6857         return CastInst::create(Instruction::ZExt, CondVal, SI.getType());
6858       } else if (TrueValC->isZero() && FalseValC->getValue() == 1) {
6859         // select C, 0, 1 -> cast !C to int
6860         Value *NotCond =
6861           InsertNewInstBefore(BinaryOperator::createNot(CondVal,
6862                                                "not."+CondVal->getName()), SI);
6863         return CastInst::create(Instruction::ZExt, NotCond, SI.getType());
6864       }
6865
6866       if (ICmpInst *IC = dyn_cast<ICmpInst>(SI.getCondition())) {
6867
6868         // (x <s 0) ? -1 : 0 -> ashr x, 31
6869         // (x >u 2147483647) ? -1 : 0 -> ashr x, 31
6870         if (TrueValC->isAllOnesValue() && FalseValC->isZero())
6871           if (ConstantInt *CmpCst = dyn_cast<ConstantInt>(IC->getOperand(1))) {
6872             bool CanXForm = false;
6873             if (IC->isSignedPredicate())
6874               CanXForm = CmpCst->isZero() && 
6875                          IC->getPredicate() == ICmpInst::ICMP_SLT;
6876             else {
6877               uint32_t Bits = CmpCst->getType()->getPrimitiveSizeInBits();
6878               CanXForm = CmpCst->getValue() == APInt::getSignedMaxValue(Bits) &&
6879                          IC->getPredicate() == ICmpInst::ICMP_UGT;
6880             }
6881             
6882             if (CanXForm) {
6883               // The comparison constant and the result are not neccessarily the
6884               // same width. Make an all-ones value by inserting a AShr.
6885               Value *X = IC->getOperand(0);
6886               uint32_t Bits = X->getType()->getPrimitiveSizeInBits();
6887               Constant *ShAmt = ConstantInt::get(X->getType(), Bits-1);
6888               Instruction *SRA = BinaryOperator::create(Instruction::AShr, X,
6889                                                         ShAmt, "ones");
6890               InsertNewInstBefore(SRA, SI);
6891               
6892               // Finally, convert to the type of the select RHS.  We figure out
6893               // if this requires a SExt, Trunc or BitCast based on the sizes.
6894               Instruction::CastOps opc = Instruction::BitCast;
6895               uint32_t SRASize = SRA->getType()->getPrimitiveSizeInBits();
6896               uint32_t SISize  = SI.getType()->getPrimitiveSizeInBits();
6897               if (SRASize < SISize)
6898                 opc = Instruction::SExt;
6899               else if (SRASize > SISize)
6900                 opc = Instruction::Trunc;
6901               return CastInst::create(opc, SRA, SI.getType());
6902             }
6903           }
6904
6905
6906         // If one of the constants is zero (we know they can't both be) and we
6907         // have a fcmp instruction with zero, and we have an 'and' with the
6908         // non-constant value, eliminate this whole mess.  This corresponds to
6909         // cases like this: ((X & 27) ? 27 : 0)
6910         if (TrueValC->isZero() || FalseValC->isZero())
6911           if (IC->isEquality() && isa<ConstantInt>(IC->getOperand(1)) &&
6912               cast<Constant>(IC->getOperand(1))->isNullValue())
6913             if (Instruction *ICA = dyn_cast<Instruction>(IC->getOperand(0)))
6914               if (ICA->getOpcode() == Instruction::And &&
6915                   isa<ConstantInt>(ICA->getOperand(1)) &&
6916                   (ICA->getOperand(1) == TrueValC ||
6917                    ICA->getOperand(1) == FalseValC) &&
6918                   isOneBitSet(cast<ConstantInt>(ICA->getOperand(1)))) {
6919                 // Okay, now we know that everything is set up, we just don't
6920                 // know whether we have a icmp_ne or icmp_eq and whether the 
6921                 // true or false val is the zero.
6922                 bool ShouldNotVal = !TrueValC->isZero();
6923                 ShouldNotVal ^= IC->getPredicate() == ICmpInst::ICMP_NE;
6924                 Value *V = ICA;
6925                 if (ShouldNotVal)
6926                   V = InsertNewInstBefore(BinaryOperator::create(
6927                                   Instruction::Xor, V, ICA->getOperand(1)), SI);
6928                 return ReplaceInstUsesWith(SI, V);
6929               }
6930       }
6931     }
6932
6933   // See if we are selecting two values based on a comparison of the two values.
6934   if (FCmpInst *FCI = dyn_cast<FCmpInst>(CondVal)) {
6935     if (FCI->getOperand(0) == TrueVal && FCI->getOperand(1) == FalseVal) {
6936       // Transform (X == Y) ? X : Y  -> Y
6937       if (FCI->getPredicate() == FCmpInst::FCMP_OEQ)
6938         return ReplaceInstUsesWith(SI, FalseVal);
6939       // Transform (X != Y) ? X : Y  -> X
6940       if (FCI->getPredicate() == FCmpInst::FCMP_ONE)
6941         return ReplaceInstUsesWith(SI, TrueVal);
6942       // NOTE: if we wanted to, this is where to detect MIN/MAX/ABS/etc.
6943
6944     } else if (FCI->getOperand(0) == FalseVal && FCI->getOperand(1) == TrueVal){
6945       // Transform (X == Y) ? Y : X  -> X
6946       if (FCI->getPredicate() == FCmpInst::FCMP_OEQ)
6947         return ReplaceInstUsesWith(SI, FalseVal);
6948       // Transform (X != Y) ? Y : X  -> Y
6949       if (FCI->getPredicate() == FCmpInst::FCMP_ONE)
6950         return ReplaceInstUsesWith(SI, TrueVal);
6951       // NOTE: if we wanted to, this is where to detect MIN/MAX/ABS/etc.
6952     }
6953   }
6954
6955   // See if we are selecting two values based on a comparison of the two values.
6956   if (ICmpInst *ICI = dyn_cast<ICmpInst>(CondVal)) {
6957     if (ICI->getOperand(0) == TrueVal && ICI->getOperand(1) == FalseVal) {
6958       // Transform (X == Y) ? X : Y  -> Y
6959       if (ICI->getPredicate() == ICmpInst::ICMP_EQ)
6960         return ReplaceInstUsesWith(SI, FalseVal);
6961       // Transform (X != Y) ? X : Y  -> X
6962       if (ICI->getPredicate() == ICmpInst::ICMP_NE)
6963         return ReplaceInstUsesWith(SI, TrueVal);
6964       // NOTE: if we wanted to, this is where to detect MIN/MAX/ABS/etc.
6965
6966     } else if (ICI->getOperand(0) == FalseVal && ICI->getOperand(1) == TrueVal){
6967       // Transform (X == Y) ? Y : X  -> X
6968       if (ICI->getPredicate() == ICmpInst::ICMP_EQ)
6969         return ReplaceInstUsesWith(SI, FalseVal);
6970       // Transform (X != Y) ? Y : X  -> Y
6971       if (ICI->getPredicate() == ICmpInst::ICMP_NE)
6972         return ReplaceInstUsesWith(SI, TrueVal);
6973       // NOTE: if we wanted to, this is where to detect MIN/MAX/ABS/etc.
6974     }
6975   }
6976
6977   if (Instruction *TI = dyn_cast<Instruction>(TrueVal))
6978     if (Instruction *FI = dyn_cast<Instruction>(FalseVal))
6979       if (TI->hasOneUse() && FI->hasOneUse()) {
6980         Instruction *AddOp = 0, *SubOp = 0;
6981
6982         // Turn (select C, (op X, Y), (op X, Z)) -> (op X, (select C, Y, Z))
6983         if (TI->getOpcode() == FI->getOpcode())
6984           if (Instruction *IV = FoldSelectOpOp(SI, TI, FI))
6985             return IV;
6986
6987         // Turn select C, (X+Y), (X-Y) --> (X+(select C, Y, (-Y))).  This is
6988         // even legal for FP.
6989         if (TI->getOpcode() == Instruction::Sub &&
6990             FI->getOpcode() == Instruction::Add) {
6991           AddOp = FI; SubOp = TI;
6992         } else if (FI->getOpcode() == Instruction::Sub &&
6993                    TI->getOpcode() == Instruction::Add) {
6994           AddOp = TI; SubOp = FI;
6995         }
6996
6997         if (AddOp) {
6998           Value *OtherAddOp = 0;
6999           if (SubOp->getOperand(0) == AddOp->getOperand(0)) {
7000             OtherAddOp = AddOp->getOperand(1);
7001           } else if (SubOp->getOperand(0) == AddOp->getOperand(1)) {
7002             OtherAddOp = AddOp->getOperand(0);
7003           }
7004
7005           if (OtherAddOp) {
7006             // So at this point we know we have (Y -> OtherAddOp):
7007             //        select C, (add X, Y), (sub X, Z)
7008             Value *NegVal;  // Compute -Z
7009             if (Constant *C = dyn_cast<Constant>(SubOp->getOperand(1))) {
7010               NegVal = ConstantExpr::getNeg(C);
7011             } else {
7012               NegVal = InsertNewInstBefore(
7013                     BinaryOperator::createNeg(SubOp->getOperand(1), "tmp"), SI);
7014             }
7015
7016             Value *NewTrueOp = OtherAddOp;
7017             Value *NewFalseOp = NegVal;
7018             if (AddOp != TI)
7019               std::swap(NewTrueOp, NewFalseOp);
7020             Instruction *NewSel =
7021               new SelectInst(CondVal, NewTrueOp,NewFalseOp,SI.getName()+".p");
7022
7023             NewSel = InsertNewInstBefore(NewSel, SI);
7024             return BinaryOperator::createAdd(SubOp->getOperand(0), NewSel);
7025           }
7026         }
7027       }
7028
7029   // See if we can fold the select into one of our operands.
7030   if (SI.getType()->isInteger()) {
7031     // See the comment above GetSelectFoldableOperands for a description of the
7032     // transformation we are doing here.
7033     if (Instruction *TVI = dyn_cast<Instruction>(TrueVal))
7034       if (TVI->hasOneUse() && TVI->getNumOperands() == 2 &&
7035           !isa<Constant>(FalseVal))
7036         if (unsigned SFO = GetSelectFoldableOperands(TVI)) {
7037           unsigned OpToFold = 0;
7038           if ((SFO & 1) && FalseVal == TVI->getOperand(0)) {
7039             OpToFold = 1;
7040           } else  if ((SFO & 2) && FalseVal == TVI->getOperand(1)) {
7041             OpToFold = 2;
7042           }
7043
7044           if (OpToFold) {
7045             Constant *C = GetSelectFoldableConstant(TVI);
7046             Instruction *NewSel =
7047               new SelectInst(SI.getCondition(), TVI->getOperand(2-OpToFold), C);
7048             InsertNewInstBefore(NewSel, SI);
7049             NewSel->takeName(TVI);
7050             if (BinaryOperator *BO = dyn_cast<BinaryOperator>(TVI))
7051               return BinaryOperator::create(BO->getOpcode(), FalseVal, NewSel);
7052             else {
7053               assert(0 && "Unknown instruction!!");
7054             }
7055           }
7056         }
7057
7058     if (Instruction *FVI = dyn_cast<Instruction>(FalseVal))
7059       if (FVI->hasOneUse() && FVI->getNumOperands() == 2 &&
7060           !isa<Constant>(TrueVal))
7061         if (unsigned SFO = GetSelectFoldableOperands(FVI)) {
7062           unsigned OpToFold = 0;
7063           if ((SFO & 1) && TrueVal == FVI->getOperand(0)) {
7064             OpToFold = 1;
7065           } else  if ((SFO & 2) && TrueVal == FVI->getOperand(1)) {
7066             OpToFold = 2;
7067           }
7068
7069           if (OpToFold) {
7070             Constant *C = GetSelectFoldableConstant(FVI);
7071             Instruction *NewSel =
7072               new SelectInst(SI.getCondition(), C, FVI->getOperand(2-OpToFold));
7073             InsertNewInstBefore(NewSel, SI);
7074             NewSel->takeName(FVI);
7075             if (BinaryOperator *BO = dyn_cast<BinaryOperator>(FVI))
7076               return BinaryOperator::create(BO->getOpcode(), TrueVal, NewSel);
7077             else
7078               assert(0 && "Unknown instruction!!");
7079           }
7080         }
7081   }
7082
7083   if (BinaryOperator::isNot(CondVal)) {
7084     SI.setOperand(0, BinaryOperator::getNotArgument(CondVal));
7085     SI.setOperand(1, FalseVal);
7086     SI.setOperand(2, TrueVal);
7087     return &SI;
7088   }
7089
7090   return 0;
7091 }
7092
7093 /// GetKnownAlignment - If the specified pointer has an alignment that we can
7094 /// determine, return it, otherwise return 0.
7095 static unsigned GetKnownAlignment(Value *V, TargetData *TD) {
7096   if (GlobalVariable *GV = dyn_cast<GlobalVariable>(V)) {
7097     unsigned Align = GV->getAlignment();
7098     if (Align == 0 && TD) 
7099       Align = TD->getPrefTypeAlignment(GV->getType()->getElementType());
7100     return Align;
7101   } else if (AllocationInst *AI = dyn_cast<AllocationInst>(V)) {
7102     unsigned Align = AI->getAlignment();
7103     if (Align == 0 && TD) {
7104       if (isa<AllocaInst>(AI))
7105         Align = TD->getPrefTypeAlignment(AI->getType()->getElementType());
7106       else if (isa<MallocInst>(AI)) {
7107         // Malloc returns maximally aligned memory.
7108         Align = TD->getABITypeAlignment(AI->getType()->getElementType());
7109         Align =
7110           std::max(Align,
7111                    (unsigned)TD->getABITypeAlignment(Type::DoubleTy));
7112         Align =
7113           std::max(Align,
7114                    (unsigned)TD->getABITypeAlignment(Type::Int64Ty));
7115       }
7116     }
7117     return Align;
7118   } else if (isa<BitCastInst>(V) ||
7119              (isa<ConstantExpr>(V) && 
7120               cast<ConstantExpr>(V)->getOpcode() == Instruction::BitCast)) {
7121     User *CI = cast<User>(V);
7122     if (isa<PointerType>(CI->getOperand(0)->getType()))
7123       return GetKnownAlignment(CI->getOperand(0), TD);
7124     return 0;
7125   } else if (isa<GetElementPtrInst>(V) ||
7126              (isa<ConstantExpr>(V) && 
7127               cast<ConstantExpr>(V)->getOpcode()==Instruction::GetElementPtr)) {
7128     User *GEPI = cast<User>(V);
7129     unsigned BaseAlignment = GetKnownAlignment(GEPI->getOperand(0), TD);
7130     if (BaseAlignment == 0) return 0;
7131     
7132     // If all indexes are zero, it is just the alignment of the base pointer.
7133     bool AllZeroOperands = true;
7134     for (unsigned i = 1, e = GEPI->getNumOperands(); i != e; ++i)
7135       if (!isa<Constant>(GEPI->getOperand(i)) ||
7136           !cast<Constant>(GEPI->getOperand(i))->isNullValue()) {
7137         AllZeroOperands = false;
7138         break;
7139       }
7140     if (AllZeroOperands)
7141       return BaseAlignment;
7142     
7143     // Otherwise, if the base alignment is >= the alignment we expect for the
7144     // base pointer type, then we know that the resultant pointer is aligned at
7145     // least as much as its type requires.
7146     if (!TD) return 0;
7147
7148     const Type *BasePtrTy = GEPI->getOperand(0)->getType();
7149     const PointerType *PtrTy = cast<PointerType>(BasePtrTy);
7150     if (TD->getABITypeAlignment(PtrTy->getElementType())
7151         <= BaseAlignment) {
7152       const Type *GEPTy = GEPI->getType();
7153       const PointerType *GEPPtrTy = cast<PointerType>(GEPTy);
7154       return TD->getABITypeAlignment(GEPPtrTy->getElementType());
7155     }
7156     return 0;
7157   }
7158   return 0;
7159 }
7160
7161
7162 /// visitCallInst - CallInst simplification.  This mostly only handles folding 
7163 /// of intrinsic instructions.  For normal calls, it allows visitCallSite to do
7164 /// the heavy lifting.
7165 ///
7166 Instruction *InstCombiner::visitCallInst(CallInst &CI) {
7167   IntrinsicInst *II = dyn_cast<IntrinsicInst>(&CI);
7168   if (!II) return visitCallSite(&CI);
7169   
7170   // Intrinsics cannot occur in an invoke, so handle them here instead of in
7171   // visitCallSite.
7172   if (MemIntrinsic *MI = dyn_cast<MemIntrinsic>(II)) {
7173     bool Changed = false;
7174
7175     // memmove/cpy/set of zero bytes is a noop.
7176     if (Constant *NumBytes = dyn_cast<Constant>(MI->getLength())) {
7177       if (NumBytes->isNullValue()) return EraseInstFromFunction(CI);
7178
7179       if (ConstantInt *CI = dyn_cast<ConstantInt>(NumBytes))
7180         if (CI->getZExtValue() == 1) {
7181           // Replace the instruction with just byte operations.  We would
7182           // transform other cases to loads/stores, but we don't know if
7183           // alignment is sufficient.
7184         }
7185     }
7186
7187     // If we have a memmove and the source operation is a constant global,
7188     // then the source and dest pointers can't alias, so we can change this
7189     // into a call to memcpy.
7190     if (MemMoveInst *MMI = dyn_cast<MemMoveInst>(II)) {
7191       if (GlobalVariable *GVSrc = dyn_cast<GlobalVariable>(MMI->getSource()))
7192         if (GVSrc->isConstant()) {
7193           Module *M = CI.getParent()->getParent()->getParent();
7194           const char *Name;
7195           if (CI.getCalledFunction()->getFunctionType()->getParamType(2) == 
7196               Type::Int32Ty)
7197             Name = "llvm.memcpy.i32";
7198           else
7199             Name = "llvm.memcpy.i64";
7200           Constant *MemCpy = M->getOrInsertFunction(Name,
7201                                      CI.getCalledFunction()->getFunctionType());
7202           CI.setOperand(0, MemCpy);
7203           Changed = true;
7204         }
7205     }
7206
7207     // If we can determine a pointer alignment that is bigger than currently
7208     // set, update the alignment.
7209     if (isa<MemCpyInst>(MI) || isa<MemMoveInst>(MI)) {
7210       unsigned Alignment1 = GetKnownAlignment(MI->getOperand(1), TD);
7211       unsigned Alignment2 = GetKnownAlignment(MI->getOperand(2), TD);
7212       unsigned Align = std::min(Alignment1, Alignment2);
7213       if (MI->getAlignment()->getZExtValue() < Align) {
7214         MI->setAlignment(ConstantInt::get(Type::Int32Ty, Align));
7215         Changed = true;
7216       }
7217     } else if (isa<MemSetInst>(MI)) {
7218       unsigned Alignment = GetKnownAlignment(MI->getDest(), TD);
7219       if (MI->getAlignment()->getZExtValue() < Alignment) {
7220         MI->setAlignment(ConstantInt::get(Type::Int32Ty, Alignment));
7221         Changed = true;
7222       }
7223     }
7224           
7225     if (Changed) return II;
7226   } else {
7227     switch (II->getIntrinsicID()) {
7228     default: break;
7229     case Intrinsic::ppc_altivec_lvx:
7230     case Intrinsic::ppc_altivec_lvxl:
7231     case Intrinsic::x86_sse_loadu_ps:
7232     case Intrinsic::x86_sse2_loadu_pd:
7233     case Intrinsic::x86_sse2_loadu_dq:
7234       // Turn PPC lvx     -> load if the pointer is known aligned.
7235       // Turn X86 loadups -> load if the pointer is known aligned.
7236       if (GetKnownAlignment(II->getOperand(1), TD) >= 16) {
7237         Value *Ptr = InsertCastBefore(Instruction::BitCast, II->getOperand(1),
7238                                       PointerType::get(II->getType()), CI);
7239         return new LoadInst(Ptr);
7240       }
7241       break;
7242     case Intrinsic::ppc_altivec_stvx:
7243     case Intrinsic::ppc_altivec_stvxl:
7244       // Turn stvx -> store if the pointer is known aligned.
7245       if (GetKnownAlignment(II->getOperand(2), TD) >= 16) {
7246         const Type *OpPtrTy = PointerType::get(II->getOperand(1)->getType());
7247         Value *Ptr = InsertCastBefore(Instruction::BitCast, II->getOperand(2),
7248                                       OpPtrTy, CI);
7249         return new StoreInst(II->getOperand(1), Ptr);
7250       }
7251       break;
7252     case Intrinsic::x86_sse_storeu_ps:
7253     case Intrinsic::x86_sse2_storeu_pd:
7254     case Intrinsic::x86_sse2_storeu_dq:
7255     case Intrinsic::x86_sse2_storel_dq:
7256       // Turn X86 storeu -> store if the pointer is known aligned.
7257       if (GetKnownAlignment(II->getOperand(1), TD) >= 16) {
7258         const Type *OpPtrTy = PointerType::get(II->getOperand(2)->getType());
7259         Value *Ptr = InsertCastBefore(Instruction::BitCast, II->getOperand(1),
7260                                       OpPtrTy, CI);
7261         return new StoreInst(II->getOperand(2), Ptr);
7262       }
7263       break;
7264       
7265     case Intrinsic::x86_sse_cvttss2si: {
7266       // These intrinsics only demands the 0th element of its input vector.  If
7267       // we can simplify the input based on that, do so now.
7268       uint64_t UndefElts;
7269       if (Value *V = SimplifyDemandedVectorElts(II->getOperand(1), 1, 
7270                                                 UndefElts)) {
7271         II->setOperand(1, V);
7272         return II;
7273       }
7274       break;
7275     }
7276       
7277     case Intrinsic::ppc_altivec_vperm:
7278       // Turn vperm(V1,V2,mask) -> shuffle(V1,V2,mask) if mask is a constant.
7279       if (ConstantVector *Mask = dyn_cast<ConstantVector>(II->getOperand(3))) {
7280         assert(Mask->getNumOperands() == 16 && "Bad type for intrinsic!");
7281         
7282         // Check that all of the elements are integer constants or undefs.
7283         bool AllEltsOk = true;
7284         for (unsigned i = 0; i != 16; ++i) {
7285           if (!isa<ConstantInt>(Mask->getOperand(i)) && 
7286               !isa<UndefValue>(Mask->getOperand(i))) {
7287             AllEltsOk = false;
7288             break;
7289           }
7290         }
7291         
7292         if (AllEltsOk) {
7293           // Cast the input vectors to byte vectors.
7294           Value *Op0 = InsertCastBefore(Instruction::BitCast, 
7295                                         II->getOperand(1), Mask->getType(), CI);
7296           Value *Op1 = InsertCastBefore(Instruction::BitCast,
7297                                         II->getOperand(2), Mask->getType(), CI);
7298           Value *Result = UndefValue::get(Op0->getType());
7299           
7300           // Only extract each element once.
7301           Value *ExtractedElts[32];
7302           memset(ExtractedElts, 0, sizeof(ExtractedElts));
7303           
7304           for (unsigned i = 0; i != 16; ++i) {
7305             if (isa<UndefValue>(Mask->getOperand(i)))
7306               continue;
7307             unsigned Idx =cast<ConstantInt>(Mask->getOperand(i))->getZExtValue();
7308             Idx &= 31;  // Match the hardware behavior.
7309             
7310             if (ExtractedElts[Idx] == 0) {
7311               Instruction *Elt = 
7312                 new ExtractElementInst(Idx < 16 ? Op0 : Op1, Idx&15, "tmp");
7313               InsertNewInstBefore(Elt, CI);
7314               ExtractedElts[Idx] = Elt;
7315             }
7316           
7317             // Insert this value into the result vector.
7318             Result = new InsertElementInst(Result, ExtractedElts[Idx], i,"tmp");
7319             InsertNewInstBefore(cast<Instruction>(Result), CI);
7320           }
7321           return CastInst::create(Instruction::BitCast, Result, CI.getType());
7322         }
7323       }
7324       break;
7325
7326     case Intrinsic::stackrestore: {
7327       // If the save is right next to the restore, remove the restore.  This can
7328       // happen when variable allocas are DCE'd.
7329       if (IntrinsicInst *SS = dyn_cast<IntrinsicInst>(II->getOperand(1))) {
7330         if (SS->getIntrinsicID() == Intrinsic::stacksave) {
7331           BasicBlock::iterator BI = SS;
7332           if (&*++BI == II)
7333             return EraseInstFromFunction(CI);
7334         }
7335       }
7336       
7337       // If the stack restore is in a return/unwind block and if there are no
7338       // allocas or calls between the restore and the return, nuke the restore.
7339       TerminatorInst *TI = II->getParent()->getTerminator();
7340       if (isa<ReturnInst>(TI) || isa<UnwindInst>(TI)) {
7341         BasicBlock::iterator BI = II;
7342         bool CannotRemove = false;
7343         for (++BI; &*BI != TI; ++BI) {
7344           if (isa<AllocaInst>(BI) ||
7345               (isa<CallInst>(BI) && !isa<IntrinsicInst>(BI))) {
7346             CannotRemove = true;
7347             break;
7348           }
7349         }
7350         if (!CannotRemove)
7351           return EraseInstFromFunction(CI);
7352       }
7353       break;
7354     }
7355     }
7356   }
7357
7358   return visitCallSite(II);
7359 }
7360
7361 // InvokeInst simplification
7362 //
7363 Instruction *InstCombiner::visitInvokeInst(InvokeInst &II) {
7364   return visitCallSite(&II);
7365 }
7366
7367 // visitCallSite - Improvements for call and invoke instructions.
7368 //
7369 Instruction *InstCombiner::visitCallSite(CallSite CS) {
7370   bool Changed = false;
7371
7372   // If the callee is a constexpr cast of a function, attempt to move the cast
7373   // to the arguments of the call/invoke.
7374   if (transformConstExprCastCall(CS)) return 0;
7375
7376   Value *Callee = CS.getCalledValue();
7377
7378   if (Function *CalleeF = dyn_cast<Function>(Callee))
7379     if (CalleeF->getCallingConv() != CS.getCallingConv()) {
7380       Instruction *OldCall = CS.getInstruction();
7381       // If the call and callee calling conventions don't match, this call must
7382       // be unreachable, as the call is undefined.
7383       new StoreInst(ConstantInt::getTrue(),
7384                     UndefValue::get(PointerType::get(Type::Int1Ty)), OldCall);
7385       if (!OldCall->use_empty())
7386         OldCall->replaceAllUsesWith(UndefValue::get(OldCall->getType()));
7387       if (isa<CallInst>(OldCall))   // Not worth removing an invoke here.
7388         return EraseInstFromFunction(*OldCall);
7389       return 0;
7390     }
7391
7392   if (isa<ConstantPointerNull>(Callee) || isa<UndefValue>(Callee)) {
7393     // This instruction is not reachable, just remove it.  We insert a store to
7394     // undef so that we know that this code is not reachable, despite the fact
7395     // that we can't modify the CFG here.
7396     new StoreInst(ConstantInt::getTrue(),
7397                   UndefValue::get(PointerType::get(Type::Int1Ty)),
7398                   CS.getInstruction());
7399
7400     if (!CS.getInstruction()->use_empty())
7401       CS.getInstruction()->
7402         replaceAllUsesWith(UndefValue::get(CS.getInstruction()->getType()));
7403
7404     if (InvokeInst *II = dyn_cast<InvokeInst>(CS.getInstruction())) {
7405       // Don't break the CFG, insert a dummy cond branch.
7406       new BranchInst(II->getNormalDest(), II->getUnwindDest(),
7407                      ConstantInt::getTrue(), II);
7408     }
7409     return EraseInstFromFunction(*CS.getInstruction());
7410   }
7411
7412   const PointerType *PTy = cast<PointerType>(Callee->getType());
7413   const FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
7414   if (FTy->isVarArg()) {
7415     // See if we can optimize any arguments passed through the varargs area of
7416     // the call.
7417     for (CallSite::arg_iterator I = CS.arg_begin()+FTy->getNumParams(),
7418            E = CS.arg_end(); I != E; ++I)
7419       if (CastInst *CI = dyn_cast<CastInst>(*I)) {
7420         // If this cast does not effect the value passed through the varargs
7421         // area, we can eliminate the use of the cast.
7422         Value *Op = CI->getOperand(0);
7423         if (CI->isLosslessCast()) {
7424           *I = Op;
7425           Changed = true;
7426         }
7427       }
7428   }
7429
7430   return Changed ? CS.getInstruction() : 0;
7431 }
7432
7433 // transformConstExprCastCall - If the callee is a constexpr cast of a function,
7434 // attempt to move the cast to the arguments of the call/invoke.
7435 //
7436 bool InstCombiner::transformConstExprCastCall(CallSite CS) {
7437   if (!isa<ConstantExpr>(CS.getCalledValue())) return false;
7438   ConstantExpr *CE = cast<ConstantExpr>(CS.getCalledValue());
7439   if (CE->getOpcode() != Instruction::BitCast || 
7440       !isa<Function>(CE->getOperand(0)))
7441     return false;
7442   Function *Callee = cast<Function>(CE->getOperand(0));
7443   Instruction *Caller = CS.getInstruction();
7444
7445   // Okay, this is a cast from a function to a different type.  Unless doing so
7446   // would cause a type conversion of one of our arguments, change this call to
7447   // be a direct call with arguments casted to the appropriate types.
7448   //
7449   const FunctionType *FT = Callee->getFunctionType();
7450   const Type *OldRetTy = Caller->getType();
7451
7452   // Check to see if we are changing the return type...
7453   if (OldRetTy != FT->getReturnType()) {
7454     if (Callee->isDeclaration() && !Caller->use_empty() && 
7455         // Conversion is ok if changing from pointer to int of same size.
7456         !(isa<PointerType>(FT->getReturnType()) &&
7457           TD->getIntPtrType() == OldRetTy))
7458       return false;   // Cannot transform this return value.
7459
7460     // If the callsite is an invoke instruction, and the return value is used by
7461     // a PHI node in a successor, we cannot change the return type of the call
7462     // because there is no place to put the cast instruction (without breaking
7463     // the critical edge).  Bail out in this case.
7464     if (!Caller->use_empty())
7465       if (InvokeInst *II = dyn_cast<InvokeInst>(Caller))
7466         for (Value::use_iterator UI = II->use_begin(), E = II->use_end();
7467              UI != E; ++UI)
7468           if (PHINode *PN = dyn_cast<PHINode>(*UI))
7469             if (PN->getParent() == II->getNormalDest() ||
7470                 PN->getParent() == II->getUnwindDest())
7471               return false;
7472   }
7473
7474   unsigned NumActualArgs = unsigned(CS.arg_end()-CS.arg_begin());
7475   unsigned NumCommonArgs = std::min(FT->getNumParams(), NumActualArgs);
7476
7477   CallSite::arg_iterator AI = CS.arg_begin();
7478   for (unsigned i = 0, e = NumCommonArgs; i != e; ++i, ++AI) {
7479     const Type *ParamTy = FT->getParamType(i);
7480     const Type *ActTy = (*AI)->getType();
7481     ConstantInt *c = dyn_cast<ConstantInt>(*AI);
7482     //Some conversions are safe even if we do not have a body.
7483     //Either we can cast directly, or we can upconvert the argument
7484     bool isConvertible = ActTy == ParamTy ||
7485       (isa<PointerType>(ParamTy) && isa<PointerType>(ActTy)) ||
7486       (ParamTy->isInteger() && ActTy->isInteger() &&
7487        ParamTy->getPrimitiveSizeInBits() >= ActTy->getPrimitiveSizeInBits()) ||
7488       (c && ParamTy->getPrimitiveSizeInBits() >= ActTy->getPrimitiveSizeInBits()
7489        && c->getValue().isStrictlyPositive());
7490     if (Callee->isDeclaration() && !isConvertible) return false;
7491
7492     // Most other conversions can be done if we have a body, even if these
7493     // lose information, e.g. int->short.
7494     // Some conversions cannot be done at all, e.g. float to pointer.
7495     // Logic here parallels CastInst::getCastOpcode (the design there
7496     // requires legality checks like this be done before calling it).
7497     if (ParamTy->isInteger()) {
7498       if (const VectorType *VActTy = dyn_cast<VectorType>(ActTy)) {
7499         if (VActTy->getBitWidth() != ParamTy->getPrimitiveSizeInBits())
7500           return false;
7501       }
7502       if (!ActTy->isInteger() && !ActTy->isFloatingPoint() &&
7503           !isa<PointerType>(ActTy))
7504         return false;
7505     } else if (ParamTy->isFloatingPoint()) {
7506       if (const VectorType *VActTy = dyn_cast<VectorType>(ActTy)) {
7507         if (VActTy->getBitWidth() != ParamTy->getPrimitiveSizeInBits())
7508           return false;
7509       }
7510       if (!ActTy->isInteger() && !ActTy->isFloatingPoint())
7511         return false;
7512     } else if (const VectorType *VParamTy = dyn_cast<VectorType>(ParamTy)) {
7513       if (const VectorType *VActTy = dyn_cast<VectorType>(ActTy)) {
7514         if (VActTy->getBitWidth() != VParamTy->getBitWidth())
7515           return false;
7516       }
7517       if (VParamTy->getBitWidth() != ActTy->getPrimitiveSizeInBits())      
7518         return false;
7519     } else if (isa<PointerType>(ParamTy)) {
7520       if (!ActTy->isInteger() && !isa<PointerType>(ActTy))
7521         return false;
7522     } else {
7523       return false;
7524     }
7525   }
7526
7527   if (FT->getNumParams() < NumActualArgs && !FT->isVarArg() &&
7528       Callee->isDeclaration())
7529     return false;   // Do not delete arguments unless we have a function body...
7530
7531   // Okay, we decided that this is a safe thing to do: go ahead and start
7532   // inserting cast instructions as necessary...
7533   std::vector<Value*> Args;
7534   Args.reserve(NumActualArgs);
7535
7536   AI = CS.arg_begin();
7537   for (unsigned i = 0; i != NumCommonArgs; ++i, ++AI) {
7538     const Type *ParamTy = FT->getParamType(i);
7539     if ((*AI)->getType() == ParamTy) {
7540       Args.push_back(*AI);
7541     } else {
7542       Instruction::CastOps opcode = CastInst::getCastOpcode(*AI,
7543           false, ParamTy, false);
7544       CastInst *NewCast = CastInst::create(opcode, *AI, ParamTy, "tmp");
7545       Args.push_back(InsertNewInstBefore(NewCast, *Caller));
7546     }
7547   }
7548
7549   // If the function takes more arguments than the call was taking, add them
7550   // now...
7551   for (unsigned i = NumCommonArgs; i != FT->getNumParams(); ++i)
7552     Args.push_back(Constant::getNullValue(FT->getParamType(i)));
7553
7554   // If we are removing arguments to the function, emit an obnoxious warning...
7555   if (FT->getNumParams() < NumActualArgs)
7556     if (!FT->isVarArg()) {
7557       cerr << "WARNING: While resolving call to function '"
7558            << Callee->getName() << "' arguments were dropped!\n";
7559     } else {
7560       // Add all of the arguments in their promoted form to the arg list...
7561       for (unsigned i = FT->getNumParams(); i != NumActualArgs; ++i, ++AI) {
7562         const Type *PTy = getPromotedType((*AI)->getType());
7563         if (PTy != (*AI)->getType()) {
7564           // Must promote to pass through va_arg area!
7565           Instruction::CastOps opcode = CastInst::getCastOpcode(*AI, false, 
7566                                                                 PTy, false);
7567           Instruction *Cast = CastInst::create(opcode, *AI, PTy, "tmp");
7568           InsertNewInstBefore(Cast, *Caller);
7569           Args.push_back(Cast);
7570         } else {
7571           Args.push_back(*AI);
7572         }
7573       }
7574     }
7575
7576   if (FT->getReturnType() == Type::VoidTy)
7577     Caller->setName("");   // Void type should not have a name.
7578
7579   Instruction *NC;
7580   if (InvokeInst *II = dyn_cast<InvokeInst>(Caller)) {
7581     NC = new InvokeInst(Callee, II->getNormalDest(), II->getUnwindDest(),
7582                         &Args[0], Args.size(), Caller->getName(), Caller);
7583     cast<InvokeInst>(II)->setCallingConv(II->getCallingConv());
7584   } else {
7585     NC = new CallInst(Callee, &Args[0], Args.size(), Caller->getName(), Caller);
7586     if (cast<CallInst>(Caller)->isTailCall())
7587       cast<CallInst>(NC)->setTailCall();
7588    cast<CallInst>(NC)->setCallingConv(cast<CallInst>(Caller)->getCallingConv());
7589   }
7590
7591   // Insert a cast of the return type as necessary.
7592   Value *NV = NC;
7593   if (Caller->getType() != NV->getType() && !Caller->use_empty()) {
7594     if (NV->getType() != Type::VoidTy) {
7595       const Type *CallerTy = Caller->getType();
7596       Instruction::CastOps opcode = CastInst::getCastOpcode(NC, false, 
7597                                                             CallerTy, false);
7598       NV = NC = CastInst::create(opcode, NC, CallerTy, "tmp");
7599
7600       // If this is an invoke instruction, we should insert it after the first
7601       // non-phi, instruction in the normal successor block.
7602       if (InvokeInst *II = dyn_cast<InvokeInst>(Caller)) {
7603         BasicBlock::iterator I = II->getNormalDest()->begin();
7604         while (isa<PHINode>(I)) ++I;
7605         InsertNewInstBefore(NC, *I);
7606       } else {
7607         // Otherwise, it's a call, just insert cast right after the call instr
7608         InsertNewInstBefore(NC, *Caller);
7609       }
7610       AddUsersToWorkList(*Caller);
7611     } else {
7612       NV = UndefValue::get(Caller->getType());
7613     }
7614   }
7615
7616   if (Caller->getType() != Type::VoidTy && !Caller->use_empty())
7617     Caller->replaceAllUsesWith(NV);
7618   Caller->eraseFromParent();
7619   RemoveFromWorkList(Caller);
7620   return true;
7621 }
7622
7623 /// FoldPHIArgBinOpIntoPHI - If we have something like phi [add (a,b), add(c,d)]
7624 /// and if a/b/c/d and the add's all have a single use, turn this into two phi's
7625 /// and a single binop.
7626 Instruction *InstCombiner::FoldPHIArgBinOpIntoPHI(PHINode &PN) {
7627   Instruction *FirstInst = cast<Instruction>(PN.getIncomingValue(0));
7628   assert(isa<BinaryOperator>(FirstInst) || isa<GetElementPtrInst>(FirstInst) ||
7629          isa<CmpInst>(FirstInst));
7630   unsigned Opc = FirstInst->getOpcode();
7631   Value *LHSVal = FirstInst->getOperand(0);
7632   Value *RHSVal = FirstInst->getOperand(1);
7633     
7634   const Type *LHSType = LHSVal->getType();
7635   const Type *RHSType = RHSVal->getType();
7636   
7637   // Scan to see if all operands are the same opcode, all have one use, and all
7638   // kill their operands (i.e. the operands have one use).
7639   for (unsigned i = 0; i != PN.getNumIncomingValues(); ++i) {
7640     Instruction *I = dyn_cast<Instruction>(PN.getIncomingValue(i));
7641     if (!I || I->getOpcode() != Opc || !I->hasOneUse() ||
7642         // Verify type of the LHS matches so we don't fold cmp's of different
7643         // types or GEP's with different index types.
7644         I->getOperand(0)->getType() != LHSType ||
7645         I->getOperand(1)->getType() != RHSType)
7646       return 0;
7647
7648     // If they are CmpInst instructions, check their predicates
7649     if (Opc == Instruction::ICmp || Opc == Instruction::FCmp)
7650       if (cast<CmpInst>(I)->getPredicate() !=
7651           cast<CmpInst>(FirstInst)->getPredicate())
7652         return 0;
7653     
7654     // Keep track of which operand needs a phi node.
7655     if (I->getOperand(0) != LHSVal) LHSVal = 0;
7656     if (I->getOperand(1) != RHSVal) RHSVal = 0;
7657   }
7658   
7659   // Otherwise, this is safe to transform, determine if it is profitable.
7660
7661   // If this is a GEP, and if the index (not the pointer) needs a PHI, bail out.
7662   // Indexes are often folded into load/store instructions, so we don't want to
7663   // hide them behind a phi.
7664   if (isa<GetElementPtrInst>(FirstInst) && RHSVal == 0)
7665     return 0;
7666   
7667   Value *InLHS = FirstInst->getOperand(0);
7668   Value *InRHS = FirstInst->getOperand(1);
7669   PHINode *NewLHS = 0, *NewRHS = 0;
7670   if (LHSVal == 0) {
7671     NewLHS = new PHINode(LHSType, FirstInst->getOperand(0)->getName()+".pn");
7672     NewLHS->reserveOperandSpace(PN.getNumOperands()/2);
7673     NewLHS->addIncoming(InLHS, PN.getIncomingBlock(0));
7674     InsertNewInstBefore(NewLHS, PN);
7675     LHSVal = NewLHS;
7676   }
7677   
7678   if (RHSVal == 0) {
7679     NewRHS = new PHINode(RHSType, FirstInst->getOperand(1)->getName()+".pn");
7680     NewRHS->reserveOperandSpace(PN.getNumOperands()/2);
7681     NewRHS->addIncoming(InRHS, PN.getIncomingBlock(0));
7682     InsertNewInstBefore(NewRHS, PN);
7683     RHSVal = NewRHS;
7684   }
7685   
7686   // Add all operands to the new PHIs.
7687   for (unsigned i = 1, e = PN.getNumIncomingValues(); i != e; ++i) {
7688     if (NewLHS) {
7689       Value *NewInLHS =cast<Instruction>(PN.getIncomingValue(i))->getOperand(0);
7690       NewLHS->addIncoming(NewInLHS, PN.getIncomingBlock(i));
7691     }
7692     if (NewRHS) {
7693       Value *NewInRHS =cast<Instruction>(PN.getIncomingValue(i))->getOperand(1);
7694       NewRHS->addIncoming(NewInRHS, PN.getIncomingBlock(i));
7695     }
7696   }
7697     
7698   if (BinaryOperator *BinOp = dyn_cast<BinaryOperator>(FirstInst))
7699     return BinaryOperator::create(BinOp->getOpcode(), LHSVal, RHSVal);
7700   else if (CmpInst *CIOp = dyn_cast<CmpInst>(FirstInst))
7701     return CmpInst::create(CIOp->getOpcode(), CIOp->getPredicate(), LHSVal, 
7702                            RHSVal);
7703   else {
7704     assert(isa<GetElementPtrInst>(FirstInst));
7705     return new GetElementPtrInst(LHSVal, RHSVal);
7706   }
7707 }
7708
7709 /// isSafeToSinkLoad - Return true if we know that it is safe sink the load out
7710 /// of the block that defines it.  This means that it must be obvious the value
7711 /// of the load is not changed from the point of the load to the end of the
7712 /// block it is in.
7713 ///
7714 /// Finally, it is safe, but not profitable, to sink a load targetting a
7715 /// non-address-taken alloca.  Doing so will cause us to not promote the alloca
7716 /// to a register.
7717 static bool isSafeToSinkLoad(LoadInst *L) {
7718   BasicBlock::iterator BBI = L, E = L->getParent()->end();
7719   
7720   for (++BBI; BBI != E; ++BBI)
7721     if (BBI->mayWriteToMemory())
7722       return false;
7723   
7724   // Check for non-address taken alloca.  If not address-taken already, it isn't
7725   // profitable to do this xform.
7726   if (AllocaInst *AI = dyn_cast<AllocaInst>(L->getOperand(0))) {
7727     bool isAddressTaken = false;
7728     for (Value::use_iterator UI = AI->use_begin(), E = AI->use_end();
7729          UI != E; ++UI) {
7730       if (isa<LoadInst>(UI)) continue;
7731       if (StoreInst *SI = dyn_cast<StoreInst>(*UI)) {
7732         // If storing TO the alloca, then the address isn't taken.
7733         if (SI->getOperand(1) == AI) continue;
7734       }
7735       isAddressTaken = true;
7736       break;
7737     }
7738     
7739     if (!isAddressTaken)
7740       return false;
7741   }
7742   
7743   return true;
7744 }
7745
7746
7747 // FoldPHIArgOpIntoPHI - If all operands to a PHI node are the same "unary"
7748 // operator and they all are only used by the PHI, PHI together their
7749 // inputs, and do the operation once, to the result of the PHI.
7750 Instruction *InstCombiner::FoldPHIArgOpIntoPHI(PHINode &PN) {
7751   Instruction *FirstInst = cast<Instruction>(PN.getIncomingValue(0));
7752
7753   // Scan the instruction, looking for input operations that can be folded away.
7754   // If all input operands to the phi are the same instruction (e.g. a cast from
7755   // the same type or "+42") we can pull the operation through the PHI, reducing
7756   // code size and simplifying code.
7757   Constant *ConstantOp = 0;
7758   const Type *CastSrcTy = 0;
7759   bool isVolatile = false;
7760   if (isa<CastInst>(FirstInst)) {
7761     CastSrcTy = FirstInst->getOperand(0)->getType();
7762   } else if (isa<BinaryOperator>(FirstInst) || isa<CmpInst>(FirstInst)) {
7763     // Can fold binop, compare or shift here if the RHS is a constant, 
7764     // otherwise call FoldPHIArgBinOpIntoPHI.
7765     ConstantOp = dyn_cast<Constant>(FirstInst->getOperand(1));
7766     if (ConstantOp == 0)
7767       return FoldPHIArgBinOpIntoPHI(PN);
7768   } else if (LoadInst *LI = dyn_cast<LoadInst>(FirstInst)) {
7769     isVolatile = LI->isVolatile();
7770     // We can't sink the load if the loaded value could be modified between the
7771     // load and the PHI.
7772     if (LI->getParent() != PN.getIncomingBlock(0) ||
7773         !isSafeToSinkLoad(LI))
7774       return 0;
7775   } else if (isa<GetElementPtrInst>(FirstInst)) {
7776     if (FirstInst->getNumOperands() == 2)
7777       return FoldPHIArgBinOpIntoPHI(PN);
7778     // Can't handle general GEPs yet.
7779     return 0;
7780   } else {
7781     return 0;  // Cannot fold this operation.
7782   }
7783
7784   // Check to see if all arguments are the same operation.
7785   for (unsigned i = 1, e = PN.getNumIncomingValues(); i != e; ++i) {
7786     if (!isa<Instruction>(PN.getIncomingValue(i))) return 0;
7787     Instruction *I = cast<Instruction>(PN.getIncomingValue(i));
7788     if (!I->hasOneUse() || !I->isSameOperationAs(FirstInst))
7789       return 0;
7790     if (CastSrcTy) {
7791       if (I->getOperand(0)->getType() != CastSrcTy)
7792         return 0;  // Cast operation must match.
7793     } else if (LoadInst *LI = dyn_cast<LoadInst>(I)) {
7794       // We can't sink the load if the loaded value could be modified between 
7795       // the load and the PHI.
7796       if (LI->isVolatile() != isVolatile ||
7797           LI->getParent() != PN.getIncomingBlock(i) ||
7798           !isSafeToSinkLoad(LI))
7799         return 0;
7800     } else if (I->getOperand(1) != ConstantOp) {
7801       return 0;
7802     }
7803   }
7804
7805   // Okay, they are all the same operation.  Create a new PHI node of the
7806   // correct type, and PHI together all of the LHS's of the instructions.
7807   PHINode *NewPN = new PHINode(FirstInst->getOperand(0)->getType(),
7808                                PN.getName()+".in");
7809   NewPN->reserveOperandSpace(PN.getNumOperands()/2);
7810
7811   Value *InVal = FirstInst->getOperand(0);
7812   NewPN->addIncoming(InVal, PN.getIncomingBlock(0));
7813
7814   // Add all operands to the new PHI.
7815   for (unsigned i = 1, e = PN.getNumIncomingValues(); i != e; ++i) {
7816     Value *NewInVal = cast<Instruction>(PN.getIncomingValue(i))->getOperand(0);
7817     if (NewInVal != InVal)
7818       InVal = 0;
7819     NewPN->addIncoming(NewInVal, PN.getIncomingBlock(i));
7820   }
7821
7822   Value *PhiVal;
7823   if (InVal) {
7824     // The new PHI unions all of the same values together.  This is really
7825     // common, so we handle it intelligently here for compile-time speed.
7826     PhiVal = InVal;
7827     delete NewPN;
7828   } else {
7829     InsertNewInstBefore(NewPN, PN);
7830     PhiVal = NewPN;
7831   }
7832
7833   // Insert and return the new operation.
7834   if (CastInst* FirstCI = dyn_cast<CastInst>(FirstInst))
7835     return CastInst::create(FirstCI->getOpcode(), PhiVal, PN.getType());
7836   else if (isa<LoadInst>(FirstInst))
7837     return new LoadInst(PhiVal, "", isVolatile);
7838   else if (BinaryOperator *BinOp = dyn_cast<BinaryOperator>(FirstInst))
7839     return BinaryOperator::create(BinOp->getOpcode(), PhiVal, ConstantOp);
7840   else if (CmpInst *CIOp = dyn_cast<CmpInst>(FirstInst))
7841     return CmpInst::create(CIOp->getOpcode(), CIOp->getPredicate(), 
7842                            PhiVal, ConstantOp);
7843   else
7844     assert(0 && "Unknown operation");
7845   return 0;
7846 }
7847
7848 /// DeadPHICycle - Return true if this PHI node is only used by a PHI node cycle
7849 /// that is dead.
7850 static bool DeadPHICycle(PHINode *PN,
7851                          SmallPtrSet<PHINode*, 16> &PotentiallyDeadPHIs) {
7852   if (PN->use_empty()) return true;
7853   if (!PN->hasOneUse()) return false;
7854
7855   // Remember this node, and if we find the cycle, return.
7856   if (!PotentiallyDeadPHIs.insert(PN))
7857     return true;
7858
7859   if (PHINode *PU = dyn_cast<PHINode>(PN->use_back()))
7860     return DeadPHICycle(PU, PotentiallyDeadPHIs);
7861
7862   return false;
7863 }
7864
7865 // PHINode simplification
7866 //
7867 Instruction *InstCombiner::visitPHINode(PHINode &PN) {
7868   // If LCSSA is around, don't mess with Phi nodes
7869   if (MustPreserveLCSSA) return 0;
7870   
7871   if (Value *V = PN.hasConstantValue())
7872     return ReplaceInstUsesWith(PN, V);
7873
7874   // If all PHI operands are the same operation, pull them through the PHI,
7875   // reducing code size.
7876   if (isa<Instruction>(PN.getIncomingValue(0)) &&
7877       PN.getIncomingValue(0)->hasOneUse())
7878     if (Instruction *Result = FoldPHIArgOpIntoPHI(PN))
7879       return Result;
7880
7881   // If this is a trivial cycle in the PHI node graph, remove it.  Basically, if
7882   // this PHI only has a single use (a PHI), and if that PHI only has one use (a
7883   // PHI)... break the cycle.
7884   if (PN.hasOneUse()) {
7885     Instruction *PHIUser = cast<Instruction>(PN.use_back());
7886     if (PHINode *PU = dyn_cast<PHINode>(PHIUser)) {
7887       SmallPtrSet<PHINode*, 16> PotentiallyDeadPHIs;
7888       PotentiallyDeadPHIs.insert(&PN);
7889       if (DeadPHICycle(PU, PotentiallyDeadPHIs))
7890         return ReplaceInstUsesWith(PN, UndefValue::get(PN.getType()));
7891     }
7892    
7893     // If this phi has a single use, and if that use just computes a value for
7894     // the next iteration of a loop, delete the phi.  This occurs with unused
7895     // induction variables, e.g. "for (int j = 0; ; ++j);".  Detecting this
7896     // common case here is good because the only other things that catch this
7897     // are induction variable analysis (sometimes) and ADCE, which is only run
7898     // late.
7899     if (PHIUser->hasOneUse() &&
7900         (isa<BinaryOperator>(PHIUser) || isa<GetElementPtrInst>(PHIUser)) &&
7901         PHIUser->use_back() == &PN) {
7902       return ReplaceInstUsesWith(PN, UndefValue::get(PN.getType()));
7903     }
7904   }
7905
7906   return 0;
7907 }
7908
7909 static Value *InsertCastToIntPtrTy(Value *V, const Type *DTy,
7910                                    Instruction *InsertPoint,
7911                                    InstCombiner *IC) {
7912   unsigned PtrSize = DTy->getPrimitiveSizeInBits();
7913   unsigned VTySize = V->getType()->getPrimitiveSizeInBits();
7914   // We must cast correctly to the pointer type. Ensure that we
7915   // sign extend the integer value if it is smaller as this is
7916   // used for address computation.
7917   Instruction::CastOps opcode = 
7918      (VTySize < PtrSize ? Instruction::SExt :
7919       (VTySize == PtrSize ? Instruction::BitCast : Instruction::Trunc));
7920   return IC->InsertCastBefore(opcode, V, DTy, *InsertPoint);
7921 }
7922
7923
7924 Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
7925   Value *PtrOp = GEP.getOperand(0);
7926   // Is it 'getelementptr %P, long 0'  or 'getelementptr %P'
7927   // If so, eliminate the noop.
7928   if (GEP.getNumOperands() == 1)
7929     return ReplaceInstUsesWith(GEP, PtrOp);
7930
7931   if (isa<UndefValue>(GEP.getOperand(0)))
7932     return ReplaceInstUsesWith(GEP, UndefValue::get(GEP.getType()));
7933
7934   bool HasZeroPointerIndex = false;
7935   if (Constant *C = dyn_cast<Constant>(GEP.getOperand(1)))
7936     HasZeroPointerIndex = C->isNullValue();
7937
7938   if (GEP.getNumOperands() == 2 && HasZeroPointerIndex)
7939     return ReplaceInstUsesWith(GEP, PtrOp);
7940
7941   // Keep track of whether all indices are zero constants integers.
7942   bool AllZeroIndices = true;
7943   
7944   // Eliminate unneeded casts for indices.
7945   bool MadeChange = false;
7946   
7947   gep_type_iterator GTI = gep_type_begin(GEP);
7948   for (unsigned i = 1, e = GEP.getNumOperands(); i != e; ++i, ++GTI) {
7949     // Track whether this GEP has all zero indices, if so, it doesn't move the
7950     // input pointer, it just changes its type.
7951     if (AllZeroIndices) {
7952       if (ConstantInt *CI = dyn_cast<ConstantInt>(GEP.getOperand(i)))
7953         AllZeroIndices = CI->isNullValue();
7954       else
7955         AllZeroIndices = false;
7956     }
7957     if (isa<SequentialType>(*GTI)) {
7958       if (CastInst *CI = dyn_cast<CastInst>(GEP.getOperand(i))) {
7959         if (CI->getOpcode() == Instruction::ZExt ||
7960             CI->getOpcode() == Instruction::SExt) {
7961           const Type *SrcTy = CI->getOperand(0)->getType();
7962           // We can eliminate a cast from i32 to i64 iff the target 
7963           // is a 32-bit pointer target.
7964           if (SrcTy->getPrimitiveSizeInBits() >= TD->getPointerSizeInBits()) {
7965             MadeChange = true;
7966             GEP.setOperand(i, CI->getOperand(0));
7967           }
7968         }
7969       }
7970       // If we are using a wider index than needed for this platform, shrink it
7971       // to what we need.  If the incoming value needs a cast instruction,
7972       // insert it.  This explicit cast can make subsequent optimizations more
7973       // obvious.
7974       Value *Op = GEP.getOperand(i);
7975       if (TD->getTypeSize(Op->getType()) > TD->getPointerSize())
7976         if (Constant *C = dyn_cast<Constant>(Op)) {
7977           GEP.setOperand(i, ConstantExpr::getTrunc(C, TD->getIntPtrType()));
7978           MadeChange = true;
7979         } else {
7980           Op = InsertCastBefore(Instruction::Trunc, Op, TD->getIntPtrType(),
7981                                 GEP);
7982           GEP.setOperand(i, Op);
7983           MadeChange = true;
7984         }
7985     }
7986   }
7987   if (MadeChange) return &GEP;
7988
7989   // If this GEP instruction doesn't move the pointer, and if the input operand
7990   // is a bitcast of another pointer, just replace the GEP with a bitcast of the
7991   // real input to the dest type.
7992   if (AllZeroIndices && isa<BitCastInst>(GEP.getOperand(0)))
7993     return new BitCastInst(cast<BitCastInst>(GEP.getOperand(0))->getOperand(0),
7994                            GEP.getType());
7995     
7996   // Combine Indices - If the source pointer to this getelementptr instruction
7997   // is a getelementptr instruction, combine the indices of the two
7998   // getelementptr instructions into a single instruction.
7999   //
8000   SmallVector<Value*, 8> SrcGEPOperands;
8001   if (User *Src = dyn_castGetElementPtr(PtrOp))
8002     SrcGEPOperands.append(Src->op_begin(), Src->op_end());
8003
8004   if (!SrcGEPOperands.empty()) {
8005     // Note that if our source is a gep chain itself that we wait for that
8006     // chain to be resolved before we perform this transformation.  This
8007     // avoids us creating a TON of code in some cases.
8008     //
8009     if (isa<GetElementPtrInst>(SrcGEPOperands[0]) &&
8010         cast<Instruction>(SrcGEPOperands[0])->getNumOperands() == 2)
8011       return 0;   // Wait until our source is folded to completion.
8012
8013     SmallVector<Value*, 8> Indices;
8014
8015     // Find out whether the last index in the source GEP is a sequential idx.
8016     bool EndsWithSequential = false;
8017     for (gep_type_iterator I = gep_type_begin(*cast<User>(PtrOp)),
8018            E = gep_type_end(*cast<User>(PtrOp)); I != E; ++I)
8019       EndsWithSequential = !isa<StructType>(*I);
8020
8021     // Can we combine the two pointer arithmetics offsets?
8022     if (EndsWithSequential) {
8023       // Replace: gep (gep %P, long B), long A, ...
8024       // With:    T = long A+B; gep %P, T, ...
8025       //
8026       Value *Sum, *SO1 = SrcGEPOperands.back(), *GO1 = GEP.getOperand(1);
8027       if (SO1 == Constant::getNullValue(SO1->getType())) {
8028         Sum = GO1;
8029       } else if (GO1 == Constant::getNullValue(GO1->getType())) {
8030         Sum = SO1;
8031       } else {
8032         // If they aren't the same type, convert both to an integer of the
8033         // target's pointer size.
8034         if (SO1->getType() != GO1->getType()) {
8035           if (Constant *SO1C = dyn_cast<Constant>(SO1)) {
8036             SO1 = ConstantExpr::getIntegerCast(SO1C, GO1->getType(), true);
8037           } else if (Constant *GO1C = dyn_cast<Constant>(GO1)) {
8038             GO1 = ConstantExpr::getIntegerCast(GO1C, SO1->getType(), true);
8039           } else {
8040             unsigned PS = TD->getPointerSize();
8041             if (TD->getTypeSize(SO1->getType()) == PS) {
8042               // Convert GO1 to SO1's type.
8043               GO1 = InsertCastToIntPtrTy(GO1, SO1->getType(), &GEP, this);
8044
8045             } else if (TD->getTypeSize(GO1->getType()) == PS) {
8046               // Convert SO1 to GO1's type.
8047               SO1 = InsertCastToIntPtrTy(SO1, GO1->getType(), &GEP, this);
8048             } else {
8049               const Type *PT = TD->getIntPtrType();
8050               SO1 = InsertCastToIntPtrTy(SO1, PT, &GEP, this);
8051               GO1 = InsertCastToIntPtrTy(GO1, PT, &GEP, this);
8052             }
8053           }
8054         }
8055         if (isa<Constant>(SO1) && isa<Constant>(GO1))
8056           Sum = ConstantExpr::getAdd(cast<Constant>(SO1), cast<Constant>(GO1));
8057         else {
8058           Sum = BinaryOperator::createAdd(SO1, GO1, PtrOp->getName()+".sum");
8059           InsertNewInstBefore(cast<Instruction>(Sum), GEP);
8060         }
8061       }
8062
8063       // Recycle the GEP we already have if possible.
8064       if (SrcGEPOperands.size() == 2) {
8065         GEP.setOperand(0, SrcGEPOperands[0]);
8066         GEP.setOperand(1, Sum);
8067         return &GEP;
8068       } else {
8069         Indices.insert(Indices.end(), SrcGEPOperands.begin()+1,
8070                        SrcGEPOperands.end()-1);
8071         Indices.push_back(Sum);
8072         Indices.insert(Indices.end(), GEP.op_begin()+2, GEP.op_end());
8073       }
8074     } else if (isa<Constant>(*GEP.idx_begin()) &&
8075                cast<Constant>(*GEP.idx_begin())->isNullValue() &&
8076                SrcGEPOperands.size() != 1) {
8077       // Otherwise we can do the fold if the first index of the GEP is a zero
8078       Indices.insert(Indices.end(), SrcGEPOperands.begin()+1,
8079                      SrcGEPOperands.end());
8080       Indices.insert(Indices.end(), GEP.idx_begin()+1, GEP.idx_end());
8081     }
8082
8083     if (!Indices.empty())
8084       return new GetElementPtrInst(SrcGEPOperands[0], &Indices[0],
8085                                    Indices.size(), GEP.getName());
8086
8087   } else if (GlobalValue *GV = dyn_cast<GlobalValue>(PtrOp)) {
8088     // GEP of global variable.  If all of the indices for this GEP are
8089     // constants, we can promote this to a constexpr instead of an instruction.
8090
8091     // Scan for nonconstants...
8092     SmallVector<Constant*, 8> Indices;
8093     User::op_iterator I = GEP.idx_begin(), E = GEP.idx_end();
8094     for (; I != E && isa<Constant>(*I); ++I)
8095       Indices.push_back(cast<Constant>(*I));
8096
8097     if (I == E) {  // If they are all constants...
8098       Constant *CE = ConstantExpr::getGetElementPtr(GV,
8099                                                     &Indices[0],Indices.size());
8100
8101       // Replace all uses of the GEP with the new constexpr...
8102       return ReplaceInstUsesWith(GEP, CE);
8103     }
8104   } else if (Value *X = getBitCastOperand(PtrOp)) {  // Is the operand a cast?
8105     if (!isa<PointerType>(X->getType())) {
8106       // Not interesting.  Source pointer must be a cast from pointer.
8107     } else if (HasZeroPointerIndex) {
8108       // transform: GEP (cast [10 x ubyte]* X to [0 x ubyte]*), long 0, ...
8109       // into     : GEP [10 x ubyte]* X, long 0, ...
8110       //
8111       // This occurs when the program declares an array extern like "int X[];"
8112       //
8113       const PointerType *CPTy = cast<PointerType>(PtrOp->getType());
8114       const PointerType *XTy = cast<PointerType>(X->getType());
8115       if (const ArrayType *XATy =
8116           dyn_cast<ArrayType>(XTy->getElementType()))
8117         if (const ArrayType *CATy =
8118             dyn_cast<ArrayType>(CPTy->getElementType()))
8119           if (CATy->getElementType() == XATy->getElementType()) {
8120             // At this point, we know that the cast source type is a pointer
8121             // to an array of the same type as the destination pointer
8122             // array.  Because the array type is never stepped over (there
8123             // is a leading zero) we can fold the cast into this GEP.
8124             GEP.setOperand(0, X);
8125             return &GEP;
8126           }
8127     } else if (GEP.getNumOperands() == 2) {
8128       // Transform things like:
8129       // %t = getelementptr ubyte* cast ([2 x int]* %str to uint*), uint %V
8130       // into:  %t1 = getelementptr [2 x int*]* %str, int 0, uint %V; cast
8131       const Type *SrcElTy = cast<PointerType>(X->getType())->getElementType();
8132       const Type *ResElTy=cast<PointerType>(PtrOp->getType())->getElementType();
8133       if (isa<ArrayType>(SrcElTy) &&
8134           TD->getTypeSize(cast<ArrayType>(SrcElTy)->getElementType()) ==
8135           TD->getTypeSize(ResElTy)) {
8136         Value *V = InsertNewInstBefore(
8137                new GetElementPtrInst(X, Constant::getNullValue(Type::Int32Ty),
8138                                      GEP.getOperand(1), GEP.getName()), GEP);
8139         // V and GEP are both pointer types --> BitCast
8140         return new BitCastInst(V, GEP.getType());
8141       }
8142       
8143       // Transform things like:
8144       // getelementptr sbyte* cast ([100 x double]* X to sbyte*), int %tmp
8145       //   (where tmp = 8*tmp2) into:
8146       // getelementptr [100 x double]* %arr, int 0, int %tmp.2
8147       
8148       if (isa<ArrayType>(SrcElTy) &&
8149           (ResElTy == Type::Int8Ty || ResElTy == Type::Int8Ty)) {
8150         uint64_t ArrayEltSize =
8151             TD->getTypeSize(cast<ArrayType>(SrcElTy)->getElementType());
8152         
8153         // Check to see if "tmp" is a scale by a multiple of ArrayEltSize.  We
8154         // allow either a mul, shift, or constant here.
8155         Value *NewIdx = 0;
8156         ConstantInt *Scale = 0;
8157         if (ArrayEltSize == 1) {
8158           NewIdx = GEP.getOperand(1);
8159           Scale = ConstantInt::get(NewIdx->getType(), 1);
8160         } else if (ConstantInt *CI = dyn_cast<ConstantInt>(GEP.getOperand(1))) {
8161           NewIdx = ConstantInt::get(CI->getType(), 1);
8162           Scale = CI;
8163         } else if (Instruction *Inst =dyn_cast<Instruction>(GEP.getOperand(1))){
8164           if (Inst->getOpcode() == Instruction::Shl &&
8165               isa<ConstantInt>(Inst->getOperand(1))) {
8166             ConstantInt *ShAmt = cast<ConstantInt>(Inst->getOperand(1));
8167             uint32_t ShAmtVal = ShAmt->getLimitedValue(64);
8168             Scale = ConstantInt::get(Inst->getType(), 1ULL << ShAmtVal);
8169             NewIdx = Inst->getOperand(0);
8170           } else if (Inst->getOpcode() == Instruction::Mul &&
8171                      isa<ConstantInt>(Inst->getOperand(1))) {
8172             Scale = cast<ConstantInt>(Inst->getOperand(1));
8173             NewIdx = Inst->getOperand(0);
8174           }
8175         }
8176
8177         // If the index will be to exactly the right offset with the scale taken
8178         // out, perform the transformation.
8179         if (Scale && Scale->getZExtValue() % ArrayEltSize == 0) {
8180           if (isa<ConstantInt>(Scale))
8181             Scale = ConstantInt::get(Scale->getType(),
8182                                       Scale->getZExtValue() / ArrayEltSize);
8183           if (Scale->getZExtValue() != 1) {
8184             Constant *C = ConstantExpr::getIntegerCast(Scale, NewIdx->getType(),
8185                                                        true /*SExt*/);
8186             Instruction *Sc = BinaryOperator::createMul(NewIdx, C, "idxscale");
8187             NewIdx = InsertNewInstBefore(Sc, GEP);
8188           }
8189
8190           // Insert the new GEP instruction.
8191           Instruction *NewGEP =
8192             new GetElementPtrInst(X, Constant::getNullValue(Type::Int32Ty),
8193                                   NewIdx, GEP.getName());
8194           NewGEP = InsertNewInstBefore(NewGEP, GEP);
8195           // The NewGEP must be pointer typed, so must the old one -> BitCast
8196           return new BitCastInst(NewGEP, GEP.getType());
8197         }
8198       }
8199     }
8200   }
8201
8202   return 0;
8203 }
8204
8205 Instruction *InstCombiner::visitAllocationInst(AllocationInst &AI) {
8206   // Convert: malloc Ty, C - where C is a constant != 1 into: malloc [C x Ty], 1
8207   if (AI.isArrayAllocation())    // Check C != 1
8208     if (const ConstantInt *C = dyn_cast<ConstantInt>(AI.getArraySize())) {
8209       const Type *NewTy = 
8210         ArrayType::get(AI.getAllocatedType(), C->getZExtValue());
8211       AllocationInst *New = 0;
8212
8213       // Create and insert the replacement instruction...
8214       if (isa<MallocInst>(AI))
8215         New = new MallocInst(NewTy, 0, AI.getAlignment(), AI.getName());
8216       else {
8217         assert(isa<AllocaInst>(AI) && "Unknown type of allocation inst!");
8218         New = new AllocaInst(NewTy, 0, AI.getAlignment(), AI.getName());
8219       }
8220
8221       InsertNewInstBefore(New, AI);
8222
8223       // Scan to the end of the allocation instructions, to skip over a block of
8224       // allocas if possible...
8225       //
8226       BasicBlock::iterator It = New;
8227       while (isa<AllocationInst>(*It)) ++It;
8228
8229       // Now that I is pointing to the first non-allocation-inst in the block,
8230       // insert our getelementptr instruction...
8231       //
8232       Value *NullIdx = Constant::getNullValue(Type::Int32Ty);
8233       Value *V = new GetElementPtrInst(New, NullIdx, NullIdx,
8234                                        New->getName()+".sub", It);
8235
8236       // Now make everything use the getelementptr instead of the original
8237       // allocation.
8238       return ReplaceInstUsesWith(AI, V);
8239     } else if (isa<UndefValue>(AI.getArraySize())) {
8240       return ReplaceInstUsesWith(AI, Constant::getNullValue(AI.getType()));
8241     }
8242
8243   // If alloca'ing a zero byte object, replace the alloca with a null pointer.
8244   // Note that we only do this for alloca's, because malloc should allocate and
8245   // return a unique pointer, even for a zero byte allocation.
8246   if (isa<AllocaInst>(AI) && AI.getAllocatedType()->isSized() &&
8247       TD->getTypeSize(AI.getAllocatedType()) == 0)
8248     return ReplaceInstUsesWith(AI, Constant::getNullValue(AI.getType()));
8249
8250   return 0;
8251 }
8252
8253 Instruction *InstCombiner::visitFreeInst(FreeInst &FI) {
8254   Value *Op = FI.getOperand(0);
8255
8256   // Change free <ty>* (cast <ty2>* X to <ty>*) into free <ty2>* X
8257   if (CastInst *CI = dyn_cast<CastInst>(Op))
8258     if (isa<PointerType>(CI->getOperand(0)->getType())) {
8259       FI.setOperand(0, CI->getOperand(0));
8260       return &FI;
8261     }
8262
8263   // free undef -> unreachable.
8264   if (isa<UndefValue>(Op)) {
8265     // Insert a new store to null because we cannot modify the CFG here.
8266     new StoreInst(ConstantInt::getTrue(),
8267                   UndefValue::get(PointerType::get(Type::Int1Ty)), &FI);
8268     return EraseInstFromFunction(FI);
8269   }
8270
8271   // If we have 'free null' delete the instruction.  This can happen in stl code
8272   // when lots of inlining happens.
8273   if (isa<ConstantPointerNull>(Op))
8274     return EraseInstFromFunction(FI);
8275
8276   return 0;
8277 }
8278
8279
8280 /// InstCombineLoadCast - Fold 'load (cast P)' -> cast (load P)' when possible.
8281 static Instruction *InstCombineLoadCast(InstCombiner &IC, LoadInst &LI) {
8282   User *CI = cast<User>(LI.getOperand(0));
8283   Value *CastOp = CI->getOperand(0);
8284
8285   const Type *DestPTy = cast<PointerType>(CI->getType())->getElementType();
8286   if (const PointerType *SrcTy = dyn_cast<PointerType>(CastOp->getType())) {
8287     const Type *SrcPTy = SrcTy->getElementType();
8288
8289     if (DestPTy->isInteger() || isa<PointerType>(DestPTy) || 
8290          isa<VectorType>(DestPTy)) {
8291       // If the source is an array, the code below will not succeed.  Check to
8292       // see if a trivial 'gep P, 0, 0' will help matters.  Only do this for
8293       // constants.
8294       if (const ArrayType *ASrcTy = dyn_cast<ArrayType>(SrcPTy))
8295         if (Constant *CSrc = dyn_cast<Constant>(CastOp))
8296           if (ASrcTy->getNumElements() != 0) {
8297             Value *Idxs[2];
8298             Idxs[0] = Idxs[1] = Constant::getNullValue(Type::Int32Ty);
8299             CastOp = ConstantExpr::getGetElementPtr(CSrc, Idxs, 2);
8300             SrcTy = cast<PointerType>(CastOp->getType());
8301             SrcPTy = SrcTy->getElementType();
8302           }
8303
8304       if ((SrcPTy->isInteger() || isa<PointerType>(SrcPTy) || 
8305             isa<VectorType>(SrcPTy)) &&
8306           // Do not allow turning this into a load of an integer, which is then
8307           // casted to a pointer, this pessimizes pointer analysis a lot.
8308           (isa<PointerType>(SrcPTy) == isa<PointerType>(LI.getType())) &&
8309           IC.getTargetData().getTypeSizeInBits(SrcPTy) ==
8310                IC.getTargetData().getTypeSizeInBits(DestPTy)) {
8311
8312         // Okay, we are casting from one integer or pointer type to another of
8313         // the same size.  Instead of casting the pointer before the load, cast
8314         // the result of the loaded value.
8315         Value *NewLoad = IC.InsertNewInstBefore(new LoadInst(CastOp,
8316                                                              CI->getName(),
8317                                                          LI.isVolatile()),LI);
8318         // Now cast the result of the load.
8319         return new BitCastInst(NewLoad, LI.getType());
8320       }
8321     }
8322   }
8323   return 0;
8324 }
8325
8326 /// isSafeToLoadUnconditionally - Return true if we know that executing a load
8327 /// from this value cannot trap.  If it is not obviously safe to load from the
8328 /// specified pointer, we do a quick local scan of the basic block containing
8329 /// ScanFrom, to determine if the address is already accessed.
8330 static bool isSafeToLoadUnconditionally(Value *V, Instruction *ScanFrom) {
8331   // If it is an alloca or global variable, it is always safe to load from.
8332   if (isa<AllocaInst>(V) || isa<GlobalVariable>(V)) return true;
8333
8334   // Otherwise, be a little bit agressive by scanning the local block where we
8335   // want to check to see if the pointer is already being loaded or stored
8336   // from/to.  If so, the previous load or store would have already trapped,
8337   // so there is no harm doing an extra load (also, CSE will later eliminate
8338   // the load entirely).
8339   BasicBlock::iterator BBI = ScanFrom, E = ScanFrom->getParent()->begin();
8340
8341   while (BBI != E) {
8342     --BBI;
8343
8344     if (LoadInst *LI = dyn_cast<LoadInst>(BBI)) {
8345       if (LI->getOperand(0) == V) return true;
8346     } else if (StoreInst *SI = dyn_cast<StoreInst>(BBI))
8347       if (SI->getOperand(1) == V) return true;
8348
8349   }
8350   return false;
8351 }
8352
8353 Instruction *InstCombiner::visitLoadInst(LoadInst &LI) {
8354   Value *Op = LI.getOperand(0);
8355
8356   // load (cast X) --> cast (load X) iff safe
8357   if (isa<CastInst>(Op))
8358     if (Instruction *Res = InstCombineLoadCast(*this, LI))
8359       return Res;
8360
8361   // None of the following transforms are legal for volatile loads.
8362   if (LI.isVolatile()) return 0;
8363   
8364   if (&LI.getParent()->front() != &LI) {
8365     BasicBlock::iterator BBI = &LI; --BBI;
8366     // If the instruction immediately before this is a store to the same
8367     // address, do a simple form of store->load forwarding.
8368     if (StoreInst *SI = dyn_cast<StoreInst>(BBI))
8369       if (SI->getOperand(1) == LI.getOperand(0))
8370         return ReplaceInstUsesWith(LI, SI->getOperand(0));
8371     if (LoadInst *LIB = dyn_cast<LoadInst>(BBI))
8372       if (LIB->getOperand(0) == LI.getOperand(0))
8373         return ReplaceInstUsesWith(LI, LIB);
8374   }
8375
8376   if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(Op))
8377     if (isa<ConstantPointerNull>(GEPI->getOperand(0)) ||
8378         isa<UndefValue>(GEPI->getOperand(0))) {
8379       // Insert a new store to null instruction before the load to indicate
8380       // that this code is not reachable.  We do this instead of inserting
8381       // an unreachable instruction directly because we cannot modify the
8382       // CFG.
8383       new StoreInst(UndefValue::get(LI.getType()),
8384                     Constant::getNullValue(Op->getType()), &LI);
8385       return ReplaceInstUsesWith(LI, UndefValue::get(LI.getType()));
8386     }
8387
8388   if (Constant *C = dyn_cast<Constant>(Op)) {
8389     // load null/undef -> undef
8390     if ((C->isNullValue() || isa<UndefValue>(C))) {
8391       // Insert a new store to null instruction before the load to indicate that
8392       // this code is not reachable.  We do this instead of inserting an
8393       // unreachable instruction directly because we cannot modify the CFG.
8394       new StoreInst(UndefValue::get(LI.getType()),
8395                     Constant::getNullValue(Op->getType()), &LI);
8396       return ReplaceInstUsesWith(LI, UndefValue::get(LI.getType()));
8397     }
8398
8399     // Instcombine load (constant global) into the value loaded.
8400     if (GlobalVariable *GV = dyn_cast<GlobalVariable>(Op))
8401       if (GV->isConstant() && !GV->isDeclaration())
8402         return ReplaceInstUsesWith(LI, GV->getInitializer());
8403
8404     // Instcombine load (constantexpr_GEP global, 0, ...) into the value loaded.
8405     if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Op))
8406       if (CE->getOpcode() == Instruction::GetElementPtr) {
8407         if (GlobalVariable *GV = dyn_cast<GlobalVariable>(CE->getOperand(0)))
8408           if (GV->isConstant() && !GV->isDeclaration())
8409             if (Constant *V = 
8410                ConstantFoldLoadThroughGEPConstantExpr(GV->getInitializer(), CE))
8411               return ReplaceInstUsesWith(LI, V);
8412         if (CE->getOperand(0)->isNullValue()) {
8413           // Insert a new store to null instruction before the load to indicate
8414           // that this code is not reachable.  We do this instead of inserting
8415           // an unreachable instruction directly because we cannot modify the
8416           // CFG.
8417           new StoreInst(UndefValue::get(LI.getType()),
8418                         Constant::getNullValue(Op->getType()), &LI);
8419           return ReplaceInstUsesWith(LI, UndefValue::get(LI.getType()));
8420         }
8421
8422       } else if (CE->isCast()) {
8423         if (Instruction *Res = InstCombineLoadCast(*this, LI))
8424           return Res;
8425       }
8426   }
8427
8428   if (Op->hasOneUse()) {
8429     // Change select and PHI nodes to select values instead of addresses: this
8430     // helps alias analysis out a lot, allows many others simplifications, and
8431     // exposes redundancy in the code.
8432     //
8433     // Note that we cannot do the transformation unless we know that the
8434     // introduced loads cannot trap!  Something like this is valid as long as
8435     // the condition is always false: load (select bool %C, int* null, int* %G),
8436     // but it would not be valid if we transformed it to load from null
8437     // unconditionally.
8438     //
8439     if (SelectInst *SI = dyn_cast<SelectInst>(Op)) {
8440       // load (select (Cond, &V1, &V2))  --> select(Cond, load &V1, load &V2).
8441       if (isSafeToLoadUnconditionally(SI->getOperand(1), SI) &&
8442           isSafeToLoadUnconditionally(SI->getOperand(2), SI)) {
8443         Value *V1 = InsertNewInstBefore(new LoadInst(SI->getOperand(1),
8444                                      SI->getOperand(1)->getName()+".val"), LI);
8445         Value *V2 = InsertNewInstBefore(new LoadInst(SI->getOperand(2),
8446                                      SI->getOperand(2)->getName()+".val"), LI);
8447         return new SelectInst(SI->getCondition(), V1, V2);
8448       }
8449
8450       // load (select (cond, null, P)) -> load P
8451       if (Constant *C = dyn_cast<Constant>(SI->getOperand(1)))
8452         if (C->isNullValue()) {
8453           LI.setOperand(0, SI->getOperand(2));
8454           return &LI;
8455         }
8456
8457       // load (select (cond, P, null)) -> load P
8458       if (Constant *C = dyn_cast<Constant>(SI->getOperand(2)))
8459         if (C->isNullValue()) {
8460           LI.setOperand(0, SI->getOperand(1));
8461           return &LI;
8462         }
8463     }
8464   }
8465   return 0;
8466 }
8467
8468 /// InstCombineStoreToCast - Fold store V, (cast P) -> store (cast V), P
8469 /// when possible.
8470 static Instruction *InstCombineStoreToCast(InstCombiner &IC, StoreInst &SI) {
8471   User *CI = cast<User>(SI.getOperand(1));
8472   Value *CastOp = CI->getOperand(0);
8473
8474   const Type *DestPTy = cast<PointerType>(CI->getType())->getElementType();
8475   if (const PointerType *SrcTy = dyn_cast<PointerType>(CastOp->getType())) {
8476     const Type *SrcPTy = SrcTy->getElementType();
8477
8478     if (DestPTy->isInteger() || isa<PointerType>(DestPTy)) {
8479       // If the source is an array, the code below will not succeed.  Check to
8480       // see if a trivial 'gep P, 0, 0' will help matters.  Only do this for
8481       // constants.
8482       if (const ArrayType *ASrcTy = dyn_cast<ArrayType>(SrcPTy))
8483         if (Constant *CSrc = dyn_cast<Constant>(CastOp))
8484           if (ASrcTy->getNumElements() != 0) {
8485             Value* Idxs[2];
8486             Idxs[0] = Idxs[1] = Constant::getNullValue(Type::Int32Ty);
8487             CastOp = ConstantExpr::getGetElementPtr(CSrc, Idxs, 2);
8488             SrcTy = cast<PointerType>(CastOp->getType());
8489             SrcPTy = SrcTy->getElementType();
8490           }
8491
8492       if ((SrcPTy->isInteger() || isa<PointerType>(SrcPTy)) &&
8493           IC.getTargetData().getTypeSizeInBits(SrcPTy) ==
8494                IC.getTargetData().getTypeSizeInBits(DestPTy)) {
8495
8496         // Okay, we are casting from one integer or pointer type to another of
8497         // the same size.  Instead of casting the pointer before 
8498         // the store, cast the value to be stored.
8499         Value *NewCast;
8500         Value *SIOp0 = SI.getOperand(0);
8501         Instruction::CastOps opcode = Instruction::BitCast;
8502         const Type* CastSrcTy = SIOp0->getType();
8503         const Type* CastDstTy = SrcPTy;
8504         if (isa<PointerType>(CastDstTy)) {
8505           if (CastSrcTy->isInteger())
8506             opcode = Instruction::IntToPtr;
8507         } else if (isa<IntegerType>(CastDstTy)) {
8508           if (isa<PointerType>(SIOp0->getType()))
8509             opcode = Instruction::PtrToInt;
8510         }
8511         if (Constant *C = dyn_cast<Constant>(SIOp0))
8512           NewCast = ConstantExpr::getCast(opcode, C, CastDstTy);
8513         else
8514           NewCast = IC.InsertNewInstBefore(
8515             CastInst::create(opcode, SIOp0, CastDstTy, SIOp0->getName()+".c"), 
8516             SI);
8517         return new StoreInst(NewCast, CastOp);
8518       }
8519     }
8520   }
8521   return 0;
8522 }
8523
8524 Instruction *InstCombiner::visitStoreInst(StoreInst &SI) {
8525   Value *Val = SI.getOperand(0);
8526   Value *Ptr = SI.getOperand(1);
8527
8528   if (isa<UndefValue>(Ptr)) {     // store X, undef -> noop (even if volatile)
8529     EraseInstFromFunction(SI);
8530     ++NumCombined;
8531     return 0;
8532   }
8533   
8534   // If the RHS is an alloca with a single use, zapify the store, making the
8535   // alloca dead.
8536   if (Ptr->hasOneUse()) {
8537     if (isa<AllocaInst>(Ptr)) {
8538       EraseInstFromFunction(SI);
8539       ++NumCombined;
8540       return 0;
8541     }
8542     
8543     if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(Ptr))
8544       if (isa<AllocaInst>(GEP->getOperand(0)) &&
8545           GEP->getOperand(0)->hasOneUse()) {
8546         EraseInstFromFunction(SI);
8547         ++NumCombined;
8548         return 0;
8549       }
8550   }
8551
8552   // Do really simple DSE, to catch cases where there are several consequtive
8553   // stores to the same location, separated by a few arithmetic operations. This
8554   // situation often occurs with bitfield accesses.
8555   BasicBlock::iterator BBI = &SI;
8556   for (unsigned ScanInsts = 6; BBI != SI.getParent()->begin() && ScanInsts;
8557        --ScanInsts) {
8558     --BBI;
8559     
8560     if (StoreInst *PrevSI = dyn_cast<StoreInst>(BBI)) {
8561       // Prev store isn't volatile, and stores to the same location?
8562       if (!PrevSI->isVolatile() && PrevSI->getOperand(1) == SI.getOperand(1)) {
8563         ++NumDeadStore;
8564         ++BBI;
8565         EraseInstFromFunction(*PrevSI);
8566         continue;
8567       }
8568       break;
8569     }
8570     
8571     // If this is a load, we have to stop.  However, if the loaded value is from
8572     // the pointer we're loading and is producing the pointer we're storing,
8573     // then *this* store is dead (X = load P; store X -> P).
8574     if (LoadInst *LI = dyn_cast<LoadInst>(BBI)) {
8575       if (LI == Val && LI->getOperand(0) == Ptr) {
8576         EraseInstFromFunction(SI);
8577         ++NumCombined;
8578         return 0;
8579       }
8580       // Otherwise, this is a load from some other location.  Stores before it
8581       // may not be dead.
8582       break;
8583     }
8584     
8585     // Don't skip over loads or things that can modify memory.
8586     if (BBI->mayWriteToMemory())
8587       break;
8588   }
8589   
8590   
8591   if (SI.isVolatile()) return 0;  // Don't hack volatile stores.
8592
8593   // store X, null    -> turns into 'unreachable' in SimplifyCFG
8594   if (isa<ConstantPointerNull>(Ptr)) {
8595     if (!isa<UndefValue>(Val)) {
8596       SI.setOperand(0, UndefValue::get(Val->getType()));
8597       if (Instruction *U = dyn_cast<Instruction>(Val))
8598         AddToWorkList(U);  // Dropped a use.
8599       ++NumCombined;
8600     }
8601     return 0;  // Do not modify these!
8602   }
8603
8604   // store undef, Ptr -> noop
8605   if (isa<UndefValue>(Val)) {
8606     EraseInstFromFunction(SI);
8607     ++NumCombined;
8608     return 0;
8609   }
8610
8611   // If the pointer destination is a cast, see if we can fold the cast into the
8612   // source instead.
8613   if (isa<CastInst>(Ptr))
8614     if (Instruction *Res = InstCombineStoreToCast(*this, SI))
8615       return Res;
8616   if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Ptr))
8617     if (CE->isCast())
8618       if (Instruction *Res = InstCombineStoreToCast(*this, SI))
8619         return Res;
8620
8621   
8622   // If this store is the last instruction in the basic block, and if the block
8623   // ends with an unconditional branch, try to move it to the successor block.
8624   BBI = &SI; ++BBI;
8625   if (BranchInst *BI = dyn_cast<BranchInst>(BBI))
8626     if (BI->isUnconditional()) {
8627       // Check to see if the successor block has exactly two incoming edges.  If
8628       // so, see if the other predecessor contains a store to the same location.
8629       // if so, insert a PHI node (if needed) and move the stores down.
8630       BasicBlock *Dest = BI->getSuccessor(0);
8631
8632       pred_iterator PI = pred_begin(Dest);
8633       BasicBlock *Other = 0;
8634       if (*PI != BI->getParent())
8635         Other = *PI;
8636       ++PI;
8637       if (PI != pred_end(Dest)) {
8638         if (*PI != BI->getParent())
8639           if (Other)
8640             Other = 0;
8641           else
8642             Other = *PI;
8643         if (++PI != pred_end(Dest))
8644           Other = 0;
8645       }
8646       if (Other) {  // If only one other pred...
8647         BBI = Other->getTerminator();
8648         // Make sure this other block ends in an unconditional branch and that
8649         // there is an instruction before the branch.
8650         if (isa<BranchInst>(BBI) && cast<BranchInst>(BBI)->isUnconditional() &&
8651             BBI != Other->begin()) {
8652           --BBI;
8653           StoreInst *OtherStore = dyn_cast<StoreInst>(BBI);
8654           
8655           // If this instruction is a store to the same location.
8656           if (OtherStore && OtherStore->getOperand(1) == SI.getOperand(1)) {
8657             // Okay, we know we can perform this transformation.  Insert a PHI
8658             // node now if we need it.
8659             Value *MergedVal = OtherStore->getOperand(0);
8660             if (MergedVal != SI.getOperand(0)) {
8661               PHINode *PN = new PHINode(MergedVal->getType(), "storemerge");
8662               PN->reserveOperandSpace(2);
8663               PN->addIncoming(SI.getOperand(0), SI.getParent());
8664               PN->addIncoming(OtherStore->getOperand(0), Other);
8665               MergedVal = InsertNewInstBefore(PN, Dest->front());
8666             }
8667             
8668             // Advance to a place where it is safe to insert the new store and
8669             // insert it.
8670             BBI = Dest->begin();
8671             while (isa<PHINode>(BBI)) ++BBI;
8672             InsertNewInstBefore(new StoreInst(MergedVal, SI.getOperand(1),
8673                                               OtherStore->isVolatile()), *BBI);
8674
8675             // Nuke the old stores.
8676             EraseInstFromFunction(SI);
8677             EraseInstFromFunction(*OtherStore);
8678             ++NumCombined;
8679             return 0;
8680           }
8681         }
8682       }
8683     }
8684   
8685   return 0;
8686 }
8687
8688
8689 Instruction *InstCombiner::visitBranchInst(BranchInst &BI) {
8690   // Change br (not X), label True, label False to: br X, label False, True
8691   Value *X = 0;
8692   BasicBlock *TrueDest;
8693   BasicBlock *FalseDest;
8694   if (match(&BI, m_Br(m_Not(m_Value(X)), TrueDest, FalseDest)) &&
8695       !isa<Constant>(X)) {
8696     // Swap Destinations and condition...
8697     BI.setCondition(X);
8698     BI.setSuccessor(0, FalseDest);
8699     BI.setSuccessor(1, TrueDest);
8700     return &BI;
8701   }
8702
8703   // Cannonicalize fcmp_one -> fcmp_oeq
8704   FCmpInst::Predicate FPred; Value *Y;
8705   if (match(&BI, m_Br(m_FCmp(FPred, m_Value(X), m_Value(Y)), 
8706                              TrueDest, FalseDest)))
8707     if ((FPred == FCmpInst::FCMP_ONE || FPred == FCmpInst::FCMP_OLE ||
8708          FPred == FCmpInst::FCMP_OGE) && BI.getCondition()->hasOneUse()) {
8709       FCmpInst *I = cast<FCmpInst>(BI.getCondition());
8710       FCmpInst::Predicate NewPred = FCmpInst::getInversePredicate(FPred);
8711       Instruction *NewSCC = new FCmpInst(NewPred, X, Y, "", I);
8712       NewSCC->takeName(I);
8713       // Swap Destinations and condition...
8714       BI.setCondition(NewSCC);
8715       BI.setSuccessor(0, FalseDest);
8716       BI.setSuccessor(1, TrueDest);
8717       RemoveFromWorkList(I);
8718       I->eraseFromParent();
8719       AddToWorkList(NewSCC);
8720       return &BI;
8721     }
8722
8723   // Cannonicalize icmp_ne -> icmp_eq
8724   ICmpInst::Predicate IPred;
8725   if (match(&BI, m_Br(m_ICmp(IPred, m_Value(X), m_Value(Y)),
8726                       TrueDest, FalseDest)))
8727     if ((IPred == ICmpInst::ICMP_NE  || IPred == ICmpInst::ICMP_ULE ||
8728          IPred == ICmpInst::ICMP_SLE || IPred == ICmpInst::ICMP_UGE ||
8729          IPred == ICmpInst::ICMP_SGE) && BI.getCondition()->hasOneUse()) {
8730       ICmpInst *I = cast<ICmpInst>(BI.getCondition());
8731       ICmpInst::Predicate NewPred = ICmpInst::getInversePredicate(IPred);
8732       Instruction *NewSCC = new ICmpInst(NewPred, X, Y, "", I);
8733       NewSCC->takeName(I);
8734       // Swap Destinations and condition...
8735       BI.setCondition(NewSCC);
8736       BI.setSuccessor(0, FalseDest);
8737       BI.setSuccessor(1, TrueDest);
8738       RemoveFromWorkList(I);
8739       I->eraseFromParent();;
8740       AddToWorkList(NewSCC);
8741       return &BI;
8742     }
8743
8744   return 0;
8745 }
8746
8747 Instruction *InstCombiner::visitSwitchInst(SwitchInst &SI) {
8748   Value *Cond = SI.getCondition();
8749   if (Instruction *I = dyn_cast<Instruction>(Cond)) {
8750     if (I->getOpcode() == Instruction::Add)
8751       if (ConstantInt *AddRHS = dyn_cast<ConstantInt>(I->getOperand(1))) {
8752         // change 'switch (X+4) case 1:' into 'switch (X) case -3'
8753         for (unsigned i = 2, e = SI.getNumOperands(); i != e; i += 2)
8754           SI.setOperand(i,ConstantExpr::getSub(cast<Constant>(SI.getOperand(i)),
8755                                                 AddRHS));
8756         SI.setOperand(0, I->getOperand(0));
8757         AddToWorkList(I);
8758         return &SI;
8759       }
8760   }
8761   return 0;
8762 }
8763
8764 /// CheapToScalarize - Return true if the value is cheaper to scalarize than it
8765 /// is to leave as a vector operation.
8766 static bool CheapToScalarize(Value *V, bool isConstant) {
8767   if (isa<ConstantAggregateZero>(V)) 
8768     return true;
8769   if (ConstantVector *C = dyn_cast<ConstantVector>(V)) {
8770     if (isConstant) return true;
8771     // If all elts are the same, we can extract.
8772     Constant *Op0 = C->getOperand(0);
8773     for (unsigned i = 1; i < C->getNumOperands(); ++i)
8774       if (C->getOperand(i) != Op0)
8775         return false;
8776     return true;
8777   }
8778   Instruction *I = dyn_cast<Instruction>(V);
8779   if (!I) return false;
8780   
8781   // Insert element gets simplified to the inserted element or is deleted if
8782   // this is constant idx extract element and its a constant idx insertelt.
8783   if (I->getOpcode() == Instruction::InsertElement && isConstant &&
8784       isa<ConstantInt>(I->getOperand(2)))
8785     return true;
8786   if (I->getOpcode() == Instruction::Load && I->hasOneUse())
8787     return true;
8788   if (BinaryOperator *BO = dyn_cast<BinaryOperator>(I))
8789     if (BO->hasOneUse() &&
8790         (CheapToScalarize(BO->getOperand(0), isConstant) ||
8791          CheapToScalarize(BO->getOperand(1), isConstant)))
8792       return true;
8793   if (CmpInst *CI = dyn_cast<CmpInst>(I))
8794     if (CI->hasOneUse() &&
8795         (CheapToScalarize(CI->getOperand(0), isConstant) ||
8796          CheapToScalarize(CI->getOperand(1), isConstant)))
8797       return true;
8798   
8799   return false;
8800 }
8801
8802 /// Read and decode a shufflevector mask.
8803 ///
8804 /// It turns undef elements into values that are larger than the number of
8805 /// elements in the input.
8806 static std::vector<unsigned> getShuffleMask(const ShuffleVectorInst *SVI) {
8807   unsigned NElts = SVI->getType()->getNumElements();
8808   if (isa<ConstantAggregateZero>(SVI->getOperand(2)))
8809     return std::vector<unsigned>(NElts, 0);
8810   if (isa<UndefValue>(SVI->getOperand(2)))
8811     return std::vector<unsigned>(NElts, 2*NElts);
8812
8813   std::vector<unsigned> Result;
8814   const ConstantVector *CP = cast<ConstantVector>(SVI->getOperand(2));
8815   for (unsigned i = 0, e = CP->getNumOperands(); i != e; ++i)
8816     if (isa<UndefValue>(CP->getOperand(i)))
8817       Result.push_back(NElts*2);  // undef -> 8
8818     else
8819       Result.push_back(cast<ConstantInt>(CP->getOperand(i))->getZExtValue());
8820   return Result;
8821 }
8822
8823 /// FindScalarElement - Given a vector and an element number, see if the scalar
8824 /// value is already around as a register, for example if it were inserted then
8825 /// extracted from the vector.
8826 static Value *FindScalarElement(Value *V, unsigned EltNo) {
8827   assert(isa<VectorType>(V->getType()) && "Not looking at a vector?");
8828   const VectorType *PTy = cast<VectorType>(V->getType());
8829   unsigned Width = PTy->getNumElements();
8830   if (EltNo >= Width)  // Out of range access.
8831     return UndefValue::get(PTy->getElementType());
8832   
8833   if (isa<UndefValue>(V))
8834     return UndefValue::get(PTy->getElementType());
8835   else if (isa<ConstantAggregateZero>(V))
8836     return Constant::getNullValue(PTy->getElementType());
8837   else if (ConstantVector *CP = dyn_cast<ConstantVector>(V))
8838     return CP->getOperand(EltNo);
8839   else if (InsertElementInst *III = dyn_cast<InsertElementInst>(V)) {
8840     // If this is an insert to a variable element, we don't know what it is.
8841     if (!isa<ConstantInt>(III->getOperand(2))) 
8842       return 0;
8843     unsigned IIElt = cast<ConstantInt>(III->getOperand(2))->getZExtValue();
8844     
8845     // If this is an insert to the element we are looking for, return the
8846     // inserted value.
8847     if (EltNo == IIElt) 
8848       return III->getOperand(1);
8849     
8850     // Otherwise, the insertelement doesn't modify the value, recurse on its
8851     // vector input.
8852     return FindScalarElement(III->getOperand(0), EltNo);
8853   } else if (ShuffleVectorInst *SVI = dyn_cast<ShuffleVectorInst>(V)) {
8854     unsigned InEl = getShuffleMask(SVI)[EltNo];
8855     if (InEl < Width)
8856       return FindScalarElement(SVI->getOperand(0), InEl);
8857     else if (InEl < Width*2)
8858       return FindScalarElement(SVI->getOperand(1), InEl - Width);
8859     else
8860       return UndefValue::get(PTy->getElementType());
8861   }
8862   
8863   // Otherwise, we don't know.
8864   return 0;
8865 }
8866
8867 Instruction *InstCombiner::visitExtractElementInst(ExtractElementInst &EI) {
8868
8869   // If packed val is undef, replace extract with scalar undef.
8870   if (isa<UndefValue>(EI.getOperand(0)))
8871     return ReplaceInstUsesWith(EI, UndefValue::get(EI.getType()));
8872
8873   // If packed val is constant 0, replace extract with scalar 0.
8874   if (isa<ConstantAggregateZero>(EI.getOperand(0)))
8875     return ReplaceInstUsesWith(EI, Constant::getNullValue(EI.getType()));
8876   
8877   if (ConstantVector *C = dyn_cast<ConstantVector>(EI.getOperand(0))) {
8878     // If packed val is constant with uniform operands, replace EI
8879     // with that operand
8880     Constant *op0 = C->getOperand(0);
8881     for (unsigned i = 1; i < C->getNumOperands(); ++i)
8882       if (C->getOperand(i) != op0) {
8883         op0 = 0; 
8884         break;
8885       }
8886     if (op0)
8887       return ReplaceInstUsesWith(EI, op0);
8888   }
8889   
8890   // If extracting a specified index from the vector, see if we can recursively
8891   // find a previously computed scalar that was inserted into the vector.
8892   if (ConstantInt *IdxC = dyn_cast<ConstantInt>(EI.getOperand(1))) {
8893     // This instruction only demands the single element from the input vector.
8894     // If the input vector has a single use, simplify it based on this use
8895     // property.
8896     uint64_t IndexVal = IdxC->getZExtValue();
8897     if (EI.getOperand(0)->hasOneUse()) {
8898       uint64_t UndefElts;
8899       if (Value *V = SimplifyDemandedVectorElts(EI.getOperand(0),
8900                                                 1 << IndexVal,
8901                                                 UndefElts)) {
8902         EI.setOperand(0, V);
8903         return &EI;
8904       }
8905     }
8906     
8907     if (Value *Elt = FindScalarElement(EI.getOperand(0), IndexVal))
8908       return ReplaceInstUsesWith(EI, Elt);
8909   }
8910   
8911   if (Instruction *I = dyn_cast<Instruction>(EI.getOperand(0))) {
8912     if (I->hasOneUse()) {
8913       // Push extractelement into predecessor operation if legal and
8914       // profitable to do so
8915       if (BinaryOperator *BO = dyn_cast<BinaryOperator>(I)) {
8916         bool isConstantElt = isa<ConstantInt>(EI.getOperand(1));
8917         if (CheapToScalarize(BO, isConstantElt)) {
8918           ExtractElementInst *newEI0 = 
8919             new ExtractElementInst(BO->getOperand(0), EI.getOperand(1),
8920                                    EI.getName()+".lhs");
8921           ExtractElementInst *newEI1 =
8922             new ExtractElementInst(BO->getOperand(1), EI.getOperand(1),
8923                                    EI.getName()+".rhs");
8924           InsertNewInstBefore(newEI0, EI);
8925           InsertNewInstBefore(newEI1, EI);
8926           return BinaryOperator::create(BO->getOpcode(), newEI0, newEI1);
8927         }
8928       } else if (isa<LoadInst>(I)) {
8929         Value *Ptr = InsertCastBefore(Instruction::BitCast, I->getOperand(0),
8930                                       PointerType::get(EI.getType()), EI);
8931         GetElementPtrInst *GEP = 
8932           new GetElementPtrInst(Ptr, EI.getOperand(1), I->getName() + ".gep");
8933         InsertNewInstBefore(GEP, EI);
8934         return new LoadInst(GEP);
8935       }
8936     }
8937     if (InsertElementInst *IE = dyn_cast<InsertElementInst>(I)) {
8938       // Extracting the inserted element?
8939       if (IE->getOperand(2) == EI.getOperand(1))
8940         return ReplaceInstUsesWith(EI, IE->getOperand(1));
8941       // If the inserted and extracted elements are constants, they must not
8942       // be the same value, extract from the pre-inserted value instead.
8943       if (isa<Constant>(IE->getOperand(2)) &&
8944           isa<Constant>(EI.getOperand(1))) {
8945         AddUsesToWorkList(EI);
8946         EI.setOperand(0, IE->getOperand(0));
8947         return &EI;
8948       }
8949     } else if (ShuffleVectorInst *SVI = dyn_cast<ShuffleVectorInst>(I)) {
8950       // If this is extracting an element from a shufflevector, figure out where
8951       // it came from and extract from the appropriate input element instead.
8952       if (ConstantInt *Elt = dyn_cast<ConstantInt>(EI.getOperand(1))) {
8953         unsigned SrcIdx = getShuffleMask(SVI)[Elt->getZExtValue()];
8954         Value *Src;
8955         if (SrcIdx < SVI->getType()->getNumElements())
8956           Src = SVI->getOperand(0);
8957         else if (SrcIdx < SVI->getType()->getNumElements()*2) {
8958           SrcIdx -= SVI->getType()->getNumElements();
8959           Src = SVI->getOperand(1);
8960         } else {
8961           return ReplaceInstUsesWith(EI, UndefValue::get(EI.getType()));
8962         }
8963         return new ExtractElementInst(Src, SrcIdx);
8964       }
8965     }
8966   }
8967   return 0;
8968 }
8969
8970 /// CollectSingleShuffleElements - If V is a shuffle of values that ONLY returns
8971 /// elements from either LHS or RHS, return the shuffle mask and true. 
8972 /// Otherwise, return false.
8973 static bool CollectSingleShuffleElements(Value *V, Value *LHS, Value *RHS,
8974                                          std::vector<Constant*> &Mask) {
8975   assert(V->getType() == LHS->getType() && V->getType() == RHS->getType() &&
8976          "Invalid CollectSingleShuffleElements");
8977   unsigned NumElts = cast<VectorType>(V->getType())->getNumElements();
8978
8979   if (isa<UndefValue>(V)) {
8980     Mask.assign(NumElts, UndefValue::get(Type::Int32Ty));
8981     return true;
8982   } else if (V == LHS) {
8983     for (unsigned i = 0; i != NumElts; ++i)
8984       Mask.push_back(ConstantInt::get(Type::Int32Ty, i));
8985     return true;
8986   } else if (V == RHS) {
8987     for (unsigned i = 0; i != NumElts; ++i)
8988       Mask.push_back(ConstantInt::get(Type::Int32Ty, i+NumElts));
8989     return true;
8990   } else if (InsertElementInst *IEI = dyn_cast<InsertElementInst>(V)) {
8991     // If this is an insert of an extract from some other vector, include it.
8992     Value *VecOp    = IEI->getOperand(0);
8993     Value *ScalarOp = IEI->getOperand(1);
8994     Value *IdxOp    = IEI->getOperand(2);
8995     
8996     if (!isa<ConstantInt>(IdxOp))
8997       return false;
8998     unsigned InsertedIdx = cast<ConstantInt>(IdxOp)->getZExtValue();
8999     
9000     if (isa<UndefValue>(ScalarOp)) {  // inserting undef into vector.
9001       // Okay, we can handle this if the vector we are insertinting into is
9002       // transitively ok.
9003       if (CollectSingleShuffleElements(VecOp, LHS, RHS, Mask)) {
9004         // If so, update the mask to reflect the inserted undef.
9005         Mask[InsertedIdx] = UndefValue::get(Type::Int32Ty);
9006         return true;
9007       }      
9008     } else if (ExtractElementInst *EI = dyn_cast<ExtractElementInst>(ScalarOp)){
9009       if (isa<ConstantInt>(EI->getOperand(1)) &&
9010           EI->getOperand(0)->getType() == V->getType()) {
9011         unsigned ExtractedIdx =
9012           cast<ConstantInt>(EI->getOperand(1))->getZExtValue();
9013         
9014         // This must be extracting from either LHS or RHS.
9015         if (EI->getOperand(0) == LHS || EI->getOperand(0) == RHS) {
9016           // Okay, we can handle this if the vector we are insertinting into is
9017           // transitively ok.
9018           if (CollectSingleShuffleElements(VecOp, LHS, RHS, Mask)) {
9019             // If so, update the mask to reflect the inserted value.
9020             if (EI->getOperand(0) == LHS) {
9021               Mask[InsertedIdx & (NumElts-1)] = 
9022                  ConstantInt::get(Type::Int32Ty, ExtractedIdx);
9023             } else {
9024               assert(EI->getOperand(0) == RHS);
9025               Mask[InsertedIdx & (NumElts-1)] = 
9026                 ConstantInt::get(Type::Int32Ty, ExtractedIdx+NumElts);
9027               
9028             }
9029             return true;
9030           }
9031         }
9032       }
9033     }
9034   }
9035   // TODO: Handle shufflevector here!
9036   
9037   return false;
9038 }
9039
9040 /// CollectShuffleElements - We are building a shuffle of V, using RHS as the
9041 /// RHS of the shuffle instruction, if it is not null.  Return a shuffle mask
9042 /// that computes V and the LHS value of the shuffle.
9043 static Value *CollectShuffleElements(Value *V, std::vector<Constant*> &Mask,
9044                                      Value *&RHS) {
9045   assert(isa<VectorType>(V->getType()) && 
9046          (RHS == 0 || V->getType() == RHS->getType()) &&
9047          "Invalid shuffle!");
9048   unsigned NumElts = cast<VectorType>(V->getType())->getNumElements();
9049
9050   if (isa<UndefValue>(V)) {
9051     Mask.assign(NumElts, UndefValue::get(Type::Int32Ty));
9052     return V;
9053   } else if (isa<ConstantAggregateZero>(V)) {
9054     Mask.assign(NumElts, ConstantInt::get(Type::Int32Ty, 0));
9055     return V;
9056   } else if (InsertElementInst *IEI = dyn_cast<InsertElementInst>(V)) {
9057     // If this is an insert of an extract from some other vector, include it.
9058     Value *VecOp    = IEI->getOperand(0);
9059     Value *ScalarOp = IEI->getOperand(1);
9060     Value *IdxOp    = IEI->getOperand(2);
9061     
9062     if (ExtractElementInst *EI = dyn_cast<ExtractElementInst>(ScalarOp)) {
9063       if (isa<ConstantInt>(EI->getOperand(1)) && isa<ConstantInt>(IdxOp) &&
9064           EI->getOperand(0)->getType() == V->getType()) {
9065         unsigned ExtractedIdx =
9066           cast<ConstantInt>(EI->getOperand(1))->getZExtValue();
9067         unsigned InsertedIdx = cast<ConstantInt>(IdxOp)->getZExtValue();
9068         
9069         // Either the extracted from or inserted into vector must be RHSVec,
9070         // otherwise we'd end up with a shuffle of three inputs.
9071         if (EI->getOperand(0) == RHS || RHS == 0) {
9072           RHS = EI->getOperand(0);
9073           Value *V = CollectShuffleElements(VecOp, Mask, RHS);
9074           Mask[InsertedIdx & (NumElts-1)] = 
9075             ConstantInt::get(Type::Int32Ty, NumElts+ExtractedIdx);
9076           return V;
9077         }
9078         
9079         if (VecOp == RHS) {
9080           Value *V = CollectShuffleElements(EI->getOperand(0), Mask, RHS);
9081           // Everything but the extracted element is replaced with the RHS.
9082           for (unsigned i = 0; i != NumElts; ++i) {
9083             if (i != InsertedIdx)
9084               Mask[i] = ConstantInt::get(Type::Int32Ty, NumElts+i);
9085           }
9086           return V;
9087         }
9088         
9089         // If this insertelement is a chain that comes from exactly these two
9090         // vectors, return the vector and the effective shuffle.
9091         if (CollectSingleShuffleElements(IEI, EI->getOperand(0), RHS, Mask))
9092           return EI->getOperand(0);
9093         
9094       }
9095     }
9096   }
9097   // TODO: Handle shufflevector here!
9098   
9099   // Otherwise, can't do anything fancy.  Return an identity vector.
9100   for (unsigned i = 0; i != NumElts; ++i)
9101     Mask.push_back(ConstantInt::get(Type::Int32Ty, i));
9102   return V;
9103 }
9104
9105 Instruction *InstCombiner::visitInsertElementInst(InsertElementInst &IE) {
9106   Value *VecOp    = IE.getOperand(0);
9107   Value *ScalarOp = IE.getOperand(1);
9108   Value *IdxOp    = IE.getOperand(2);
9109   
9110   // If the inserted element was extracted from some other vector, and if the 
9111   // indexes are constant, try to turn this into a shufflevector operation.
9112   if (ExtractElementInst *EI = dyn_cast<ExtractElementInst>(ScalarOp)) {
9113     if (isa<ConstantInt>(EI->getOperand(1)) && isa<ConstantInt>(IdxOp) &&
9114         EI->getOperand(0)->getType() == IE.getType()) {
9115       unsigned NumVectorElts = IE.getType()->getNumElements();
9116       unsigned ExtractedIdx=cast<ConstantInt>(EI->getOperand(1))->getZExtValue();
9117       unsigned InsertedIdx = cast<ConstantInt>(IdxOp)->getZExtValue();
9118       
9119       if (ExtractedIdx >= NumVectorElts) // Out of range extract.
9120         return ReplaceInstUsesWith(IE, VecOp);
9121       
9122       if (InsertedIdx >= NumVectorElts)  // Out of range insert.
9123         return ReplaceInstUsesWith(IE, UndefValue::get(IE.getType()));
9124       
9125       // If we are extracting a value from a vector, then inserting it right
9126       // back into the same place, just use the input vector.
9127       if (EI->getOperand(0) == VecOp && ExtractedIdx == InsertedIdx)
9128         return ReplaceInstUsesWith(IE, VecOp);      
9129       
9130       // We could theoretically do this for ANY input.  However, doing so could
9131       // turn chains of insertelement instructions into a chain of shufflevector
9132       // instructions, and right now we do not merge shufflevectors.  As such,
9133       // only do this in a situation where it is clear that there is benefit.
9134       if (isa<UndefValue>(VecOp) || isa<ConstantAggregateZero>(VecOp)) {
9135         // Turn this into shuffle(EIOp0, VecOp, Mask).  The result has all of
9136         // the values of VecOp, except then one read from EIOp0.
9137         // Build a new shuffle mask.
9138         std::vector<Constant*> Mask;
9139         if (isa<UndefValue>(VecOp))
9140           Mask.assign(NumVectorElts, UndefValue::get(Type::Int32Ty));
9141         else {
9142           assert(isa<ConstantAggregateZero>(VecOp) && "Unknown thing");
9143           Mask.assign(NumVectorElts, ConstantInt::get(Type::Int32Ty,
9144                                                        NumVectorElts));
9145         } 
9146         Mask[InsertedIdx] = ConstantInt::get(Type::Int32Ty, ExtractedIdx);
9147         return new ShuffleVectorInst(EI->getOperand(0), VecOp,
9148                                      ConstantVector::get(Mask));
9149       }
9150       
9151       // If this insertelement isn't used by some other insertelement, turn it
9152       // (and any insertelements it points to), into one big shuffle.
9153       if (!IE.hasOneUse() || !isa<InsertElementInst>(IE.use_back())) {
9154         std::vector<Constant*> Mask;
9155         Value *RHS = 0;
9156         Value *LHS = CollectShuffleElements(&IE, Mask, RHS);
9157         if (RHS == 0) RHS = UndefValue::get(LHS->getType());
9158         // We now have a shuffle of LHS, RHS, Mask.
9159         return new ShuffleVectorInst(LHS, RHS, ConstantVector::get(Mask));
9160       }
9161     }
9162   }
9163
9164   return 0;
9165 }
9166
9167
9168 Instruction *InstCombiner::visitShuffleVectorInst(ShuffleVectorInst &SVI) {
9169   Value *LHS = SVI.getOperand(0);
9170   Value *RHS = SVI.getOperand(1);
9171   std::vector<unsigned> Mask = getShuffleMask(&SVI);
9172
9173   bool MadeChange = false;
9174   
9175   // Undefined shuffle mask -> undefined value.
9176   if (isa<UndefValue>(SVI.getOperand(2)))
9177     return ReplaceInstUsesWith(SVI, UndefValue::get(SVI.getType()));
9178   
9179   // If we have shuffle(x, undef, mask) and any elements of mask refer to
9180   // the undef, change them to undefs.
9181   if (isa<UndefValue>(SVI.getOperand(1))) {
9182     // Scan to see if there are any references to the RHS.  If so, replace them
9183     // with undef element refs and set MadeChange to true.
9184     for (unsigned i = 0, e = Mask.size(); i != e; ++i) {
9185       if (Mask[i] >= e && Mask[i] != 2*e) {
9186         Mask[i] = 2*e;
9187         MadeChange = true;
9188       }
9189     }
9190     
9191     if (MadeChange) {
9192       // Remap any references to RHS to use LHS.
9193       std::vector<Constant*> Elts;
9194       for (unsigned i = 0, e = Mask.size(); i != e; ++i) {
9195         if (Mask[i] == 2*e)
9196           Elts.push_back(UndefValue::get(Type::Int32Ty));
9197         else
9198           Elts.push_back(ConstantInt::get(Type::Int32Ty, Mask[i]));
9199       }
9200       SVI.setOperand(2, ConstantVector::get(Elts));
9201     }
9202   }
9203   
9204   // Canonicalize shuffle(x    ,x,mask) -> shuffle(x, undef,mask')
9205   // Canonicalize shuffle(undef,x,mask) -> shuffle(x, undef,mask').
9206   if (LHS == RHS || isa<UndefValue>(LHS)) {
9207     if (isa<UndefValue>(LHS) && LHS == RHS) {
9208       // shuffle(undef,undef,mask) -> undef.
9209       return ReplaceInstUsesWith(SVI, LHS);
9210     }
9211     
9212     // Remap any references to RHS to use LHS.
9213     std::vector<Constant*> Elts;
9214     for (unsigned i = 0, e = Mask.size(); i != e; ++i) {
9215       if (Mask[i] >= 2*e)
9216         Elts.push_back(UndefValue::get(Type::Int32Ty));
9217       else {
9218         if ((Mask[i] >= e && isa<UndefValue>(RHS)) ||
9219             (Mask[i] <  e && isa<UndefValue>(LHS)))
9220           Mask[i] = 2*e;     // Turn into undef.
9221         else
9222           Mask[i] &= (e-1);  // Force to LHS.
9223         Elts.push_back(ConstantInt::get(Type::Int32Ty, Mask[i]));
9224       }
9225     }
9226     SVI.setOperand(0, SVI.getOperand(1));
9227     SVI.setOperand(1, UndefValue::get(RHS->getType()));
9228     SVI.setOperand(2, ConstantVector::get(Elts));
9229     LHS = SVI.getOperand(0);
9230     RHS = SVI.getOperand(1);
9231     MadeChange = true;
9232   }
9233   
9234   // Analyze the shuffle, are the LHS or RHS and identity shuffles?
9235   bool isLHSID = true, isRHSID = true;
9236     
9237   for (unsigned i = 0, e = Mask.size(); i != e; ++i) {
9238     if (Mask[i] >= e*2) continue;  // Ignore undef values.
9239     // Is this an identity shuffle of the LHS value?
9240     isLHSID &= (Mask[i] == i);
9241       
9242     // Is this an identity shuffle of the RHS value?
9243     isRHSID &= (Mask[i]-e == i);
9244   }
9245
9246   // Eliminate identity shuffles.
9247   if (isLHSID) return ReplaceInstUsesWith(SVI, LHS);
9248   if (isRHSID) return ReplaceInstUsesWith(SVI, RHS);
9249   
9250   // If the LHS is a shufflevector itself, see if we can combine it with this
9251   // one without producing an unusual shuffle.  Here we are really conservative:
9252   // we are absolutely afraid of producing a shuffle mask not in the input
9253   // program, because the code gen may not be smart enough to turn a merged
9254   // shuffle into two specific shuffles: it may produce worse code.  As such,
9255   // we only merge two shuffles if the result is one of the two input shuffle
9256   // masks.  In this case, merging the shuffles just removes one instruction,
9257   // which we know is safe.  This is good for things like turning:
9258   // (splat(splat)) -> splat.
9259   if (ShuffleVectorInst *LHSSVI = dyn_cast<ShuffleVectorInst>(LHS)) {
9260     if (isa<UndefValue>(RHS)) {
9261       std::vector<unsigned> LHSMask = getShuffleMask(LHSSVI);
9262
9263       std::vector<unsigned> NewMask;
9264       for (unsigned i = 0, e = Mask.size(); i != e; ++i)
9265         if (Mask[i] >= 2*e)
9266           NewMask.push_back(2*e);
9267         else
9268           NewMask.push_back(LHSMask[Mask[i]]);
9269       
9270       // If the result mask is equal to the src shuffle or this shuffle mask, do
9271       // the replacement.
9272       if (NewMask == LHSMask || NewMask == Mask) {
9273         std::vector<Constant*> Elts;
9274         for (unsigned i = 0, e = NewMask.size(); i != e; ++i) {
9275           if (NewMask[i] >= e*2) {
9276             Elts.push_back(UndefValue::get(Type::Int32Ty));
9277           } else {
9278             Elts.push_back(ConstantInt::get(Type::Int32Ty, NewMask[i]));
9279           }
9280         }
9281         return new ShuffleVectorInst(LHSSVI->getOperand(0),
9282                                      LHSSVI->getOperand(1),
9283                                      ConstantVector::get(Elts));
9284       }
9285     }
9286   }
9287
9288   return MadeChange ? &SVI : 0;
9289 }
9290
9291
9292
9293
9294 /// TryToSinkInstruction - Try to move the specified instruction from its
9295 /// current block into the beginning of DestBlock, which can only happen if it's
9296 /// safe to move the instruction past all of the instructions between it and the
9297 /// end of its block.
9298 static bool TryToSinkInstruction(Instruction *I, BasicBlock *DestBlock) {
9299   assert(I->hasOneUse() && "Invariants didn't hold!");
9300
9301   // Cannot move control-flow-involving, volatile loads, vaarg, etc.
9302   if (isa<PHINode>(I) || I->mayWriteToMemory()) return false;
9303
9304   // Do not sink alloca instructions out of the entry block.
9305   if (isa<AllocaInst>(I) && I->getParent() ==
9306         &DestBlock->getParent()->getEntryBlock())
9307     return false;
9308
9309   // We can only sink load instructions if there is nothing between the load and
9310   // the end of block that could change the value.
9311   if (LoadInst *LI = dyn_cast<LoadInst>(I)) {
9312     for (BasicBlock::iterator Scan = LI, E = LI->getParent()->end();
9313          Scan != E; ++Scan)
9314       if (Scan->mayWriteToMemory())
9315         return false;
9316   }
9317
9318   BasicBlock::iterator InsertPos = DestBlock->begin();
9319   while (isa<PHINode>(InsertPos)) ++InsertPos;
9320
9321   I->moveBefore(InsertPos);
9322   ++NumSunkInst;
9323   return true;
9324 }
9325
9326
9327 /// AddReachableCodeToWorklist - Walk the function in depth-first order, adding
9328 /// all reachable code to the worklist.
9329 ///
9330 /// This has a couple of tricks to make the code faster and more powerful.  In
9331 /// particular, we constant fold and DCE instructions as we go, to avoid adding
9332 /// them to the worklist (this significantly speeds up instcombine on code where
9333 /// many instructions are dead or constant).  Additionally, if we find a branch
9334 /// whose condition is a known constant, we only visit the reachable successors.
9335 ///
9336 static void AddReachableCodeToWorklist(BasicBlock *BB, 
9337                                        SmallPtrSet<BasicBlock*, 64> &Visited,
9338                                        InstCombiner &IC,
9339                                        const TargetData *TD) {
9340   std::vector<BasicBlock*> Worklist;
9341   Worklist.push_back(BB);
9342
9343   while (!Worklist.empty()) {
9344     BB = Worklist.back();
9345     Worklist.pop_back();
9346     
9347     // We have now visited this block!  If we've already been here, ignore it.
9348     if (!Visited.insert(BB)) continue;
9349     
9350     for (BasicBlock::iterator BBI = BB->begin(), E = BB->end(); BBI != E; ) {
9351       Instruction *Inst = BBI++;
9352       
9353       // DCE instruction if trivially dead.
9354       if (isInstructionTriviallyDead(Inst)) {
9355         ++NumDeadInst;
9356         DOUT << "IC: DCE: " << *Inst;
9357         Inst->eraseFromParent();
9358         continue;
9359       }
9360       
9361       // ConstantProp instruction if trivially constant.
9362       if (Constant *C = ConstantFoldInstruction(Inst, TD)) {
9363         DOUT << "IC: ConstFold to: " << *C << " from: " << *Inst;
9364         Inst->replaceAllUsesWith(C);
9365         ++NumConstProp;
9366         Inst->eraseFromParent();
9367         continue;
9368       }
9369       
9370       IC.AddToWorkList(Inst);
9371     }
9372
9373     // Recursively visit successors.  If this is a branch or switch on a
9374     // constant, only visit the reachable successor.
9375     TerminatorInst *TI = BB->getTerminator();
9376     if (BranchInst *BI = dyn_cast<BranchInst>(TI)) {
9377       if (BI->isConditional() && isa<ConstantInt>(BI->getCondition())) {
9378         bool CondVal = cast<ConstantInt>(BI->getCondition())->getZExtValue();
9379         Worklist.push_back(BI->getSuccessor(!CondVal));
9380         continue;
9381       }
9382     } else if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
9383       if (ConstantInt *Cond = dyn_cast<ConstantInt>(SI->getCondition())) {
9384         // See if this is an explicit destination.
9385         for (unsigned i = 1, e = SI->getNumSuccessors(); i != e; ++i)
9386           if (SI->getCaseValue(i) == Cond) {
9387             Worklist.push_back(SI->getSuccessor(i));
9388             continue;
9389           }
9390         
9391         // Otherwise it is the default destination.
9392         Worklist.push_back(SI->getSuccessor(0));
9393         continue;
9394       }
9395     }
9396     
9397     for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i)
9398       Worklist.push_back(TI->getSuccessor(i));
9399   }
9400 }
9401
9402 bool InstCombiner::DoOneIteration(Function &F, unsigned Iteration) {
9403   bool Changed = false;
9404   TD = &getAnalysis<TargetData>();
9405   
9406   DEBUG(DOUT << "\n\nINSTCOMBINE ITERATION #" << Iteration << " on "
9407              << F.getNameStr() << "\n");
9408
9409   {
9410     // Do a depth-first traversal of the function, populate the worklist with
9411     // the reachable instructions.  Ignore blocks that are not reachable.  Keep
9412     // track of which blocks we visit.
9413     SmallPtrSet<BasicBlock*, 64> Visited;
9414     AddReachableCodeToWorklist(F.begin(), Visited, *this, TD);
9415
9416     // Do a quick scan over the function.  If we find any blocks that are
9417     // unreachable, remove any instructions inside of them.  This prevents
9418     // the instcombine code from having to deal with some bad special cases.
9419     for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
9420       if (!Visited.count(BB)) {
9421         Instruction *Term = BB->getTerminator();
9422         while (Term != BB->begin()) {   // Remove instrs bottom-up
9423           BasicBlock::iterator I = Term; --I;
9424
9425           DOUT << "IC: DCE: " << *I;
9426           ++NumDeadInst;
9427
9428           if (!I->use_empty())
9429             I->replaceAllUsesWith(UndefValue::get(I->getType()));
9430           I->eraseFromParent();
9431         }
9432       }
9433   }
9434
9435   while (!Worklist.empty()) {
9436     Instruction *I = RemoveOneFromWorkList();
9437     if (I == 0) continue;  // skip null values.
9438
9439     // Check to see if we can DCE the instruction.
9440     if (isInstructionTriviallyDead(I)) {
9441       // Add operands to the worklist.
9442       if (I->getNumOperands() < 4)
9443         AddUsesToWorkList(*I);
9444       ++NumDeadInst;
9445
9446       DOUT << "IC: DCE: " << *I;
9447
9448       I->eraseFromParent();
9449       RemoveFromWorkList(I);
9450       continue;
9451     }
9452
9453     // Instruction isn't dead, see if we can constant propagate it.
9454     if (Constant *C = ConstantFoldInstruction(I, TD)) {
9455       DOUT << "IC: ConstFold to: " << *C << " from: " << *I;
9456
9457       // Add operands to the worklist.
9458       AddUsesToWorkList(*I);
9459       ReplaceInstUsesWith(*I, C);
9460
9461       ++NumConstProp;
9462       I->eraseFromParent();
9463       RemoveFromWorkList(I);
9464       continue;
9465     }
9466
9467     // See if we can trivially sink this instruction to a successor basic block.
9468     if (I->hasOneUse()) {
9469       BasicBlock *BB = I->getParent();
9470       BasicBlock *UserParent = cast<Instruction>(I->use_back())->getParent();
9471       if (UserParent != BB) {
9472         bool UserIsSuccessor = false;
9473         // See if the user is one of our successors.
9474         for (succ_iterator SI = succ_begin(BB), E = succ_end(BB); SI != E; ++SI)
9475           if (*SI == UserParent) {
9476             UserIsSuccessor = true;
9477             break;
9478           }
9479
9480         // If the user is one of our immediate successors, and if that successor
9481         // only has us as a predecessors (we'd have to split the critical edge
9482         // otherwise), we can keep going.
9483         if (UserIsSuccessor && !isa<PHINode>(I->use_back()) &&
9484             next(pred_begin(UserParent)) == pred_end(UserParent))
9485           // Okay, the CFG is simple enough, try to sink this instruction.
9486           Changed |= TryToSinkInstruction(I, UserParent);
9487       }
9488     }
9489
9490     // Now that we have an instruction, try combining it to simplify it...
9491 #ifndef NDEBUG
9492     std::string OrigI;
9493 #endif
9494     DEBUG(std::ostringstream SS; I->print(SS); OrigI = SS.str(););
9495     if (Instruction *Result = visit(*I)) {
9496       ++NumCombined;
9497       // Should we replace the old instruction with a new one?
9498       if (Result != I) {
9499         DOUT << "IC: Old = " << *I
9500              << "    New = " << *Result;
9501
9502         // Everything uses the new instruction now.
9503         I->replaceAllUsesWith(Result);
9504
9505         // Push the new instruction and any users onto the worklist.
9506         AddToWorkList(Result);
9507         AddUsersToWorkList(*Result);
9508
9509         // Move the name to the new instruction first.
9510         Result->takeName(I);
9511
9512         // Insert the new instruction into the basic block...
9513         BasicBlock *InstParent = I->getParent();
9514         BasicBlock::iterator InsertPos = I;
9515
9516         if (!isa<PHINode>(Result))        // If combining a PHI, don't insert
9517           while (isa<PHINode>(InsertPos)) // middle of a block of PHIs.
9518             ++InsertPos;
9519
9520         InstParent->getInstList().insert(InsertPos, Result);
9521
9522         // Make sure that we reprocess all operands now that we reduced their
9523         // use counts.
9524         AddUsesToWorkList(*I);
9525
9526         // Instructions can end up on the worklist more than once.  Make sure
9527         // we do not process an instruction that has been deleted.
9528         RemoveFromWorkList(I);
9529
9530         // Erase the old instruction.
9531         InstParent->getInstList().erase(I);
9532       } else {
9533 #ifndef NDEBUG
9534         DOUT << "IC: Mod = " << OrigI
9535              << "    New = " << *I;
9536 #endif
9537
9538         // If the instruction was modified, it's possible that it is now dead.
9539         // if so, remove it.
9540         if (isInstructionTriviallyDead(I)) {
9541           // Make sure we process all operands now that we are reducing their
9542           // use counts.
9543           AddUsesToWorkList(*I);
9544
9545           // Instructions may end up in the worklist more than once.  Erase all
9546           // occurrences of this instruction.
9547           RemoveFromWorkList(I);
9548           I->eraseFromParent();
9549         } else {
9550           AddToWorkList(I);
9551           AddUsersToWorkList(*I);
9552         }
9553       }
9554       Changed = true;
9555     }
9556   }
9557
9558   assert(WorklistMap.empty() && "Worklist empty, but map not?");
9559   return Changed;
9560 }
9561
9562
9563 bool InstCombiner::runOnFunction(Function &F) {
9564   MustPreserveLCSSA = mustPreserveAnalysisID(LCSSAID);
9565   
9566   bool EverMadeChange = false;
9567
9568   // Iterate while there is work to do.
9569   unsigned Iteration = 0;
9570   while (DoOneIteration(F, Iteration++)) 
9571     EverMadeChange = true;
9572   return EverMadeChange;
9573 }
9574
9575 FunctionPass *llvm::createInstructionCombiningPass() {
9576   return new InstCombiner();
9577 }
9578