X % -1 == X % 1 == 0
[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 int 1, %X
16 //    %Z = add int 1, %Y
17 // into:
18 //    %Z = add int 2, %X
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. SetCC instructions are converted from <,>,<=,>= to ==,!= if possible
28 //    4. All SetCC 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 //    N. This list is incomplete
33 //
34 //===----------------------------------------------------------------------===//
35
36 #define DEBUG_TYPE "instcombine"
37 #include "llvm/Transforms/Scalar.h"
38 #include "llvm/Instructions.h"
39 #include "llvm/Intrinsics.h"
40 #include "llvm/Pass.h"
41 #include "llvm/Constants.h"
42 #include "llvm/DerivedTypes.h"
43 #include "llvm/GlobalVariable.h"
44 #include "llvm/Target/TargetData.h"
45 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
46 #include "llvm/Transforms/Utils/Local.h"
47 #include "llvm/Support/InstIterator.h"
48 #include "llvm/Support/InstVisitor.h"
49 #include "llvm/Support/CallSite.h"
50 #include "Support/Debug.h"
51 #include "Support/Statistic.h"
52 #include <algorithm>
53 using namespace llvm;
54
55 namespace {
56   Statistic<> NumCombined ("instcombine", "Number of insts combined");
57   Statistic<> NumConstProp("instcombine", "Number of constant folds");
58   Statistic<> NumDeadInst ("instcombine", "Number of dead inst eliminated");
59
60   class InstCombiner : public FunctionPass,
61                        public InstVisitor<InstCombiner, Instruction*> {
62     // Worklist of all of the instructions that need to be simplified.
63     std::vector<Instruction*> WorkList;
64     TargetData *TD;
65
66     /// AddUsersToWorkList - When an instruction is simplified, add all users of
67     /// the instruction to the work lists because they might get more simplified
68     /// now.
69     ///
70     void AddUsersToWorkList(Instruction &I) {
71       for (Value::use_iterator UI = I.use_begin(), UE = I.use_end();
72            UI != UE; ++UI)
73         WorkList.push_back(cast<Instruction>(*UI));
74     }
75
76     /// AddUsesToWorkList - When an instruction is simplified, add operands to
77     /// the work lists because they might get more simplified now.
78     ///
79     void AddUsesToWorkList(Instruction &I) {
80       for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
81         if (Instruction *Op = dyn_cast<Instruction>(I.getOperand(i)))
82           WorkList.push_back(Op);
83     }
84
85     // removeFromWorkList - remove all instances of I from the worklist.
86     void removeFromWorkList(Instruction *I);
87   public:
88     virtual bool runOnFunction(Function &F);
89
90     virtual void getAnalysisUsage(AnalysisUsage &AU) const {
91       AU.addRequired<TargetData>();
92       AU.setPreservesCFG();
93     }
94
95     // Visitation implementation - Implement instruction combining for different
96     // instruction types.  The semantics are as follows:
97     // Return Value:
98     //    null        - No change was made
99     //     I          - Change was made, I is still valid, I may be dead though
100     //   otherwise    - Change was made, replace I with returned instruction
101     //   
102     Instruction *visitAdd(BinaryOperator &I);
103     Instruction *visitSub(BinaryOperator &I);
104     Instruction *visitMul(BinaryOperator &I);
105     Instruction *visitDiv(BinaryOperator &I);
106     Instruction *visitRem(BinaryOperator &I);
107     Instruction *visitAnd(BinaryOperator &I);
108     Instruction *visitOr (BinaryOperator &I);
109     Instruction *visitXor(BinaryOperator &I);
110     Instruction *visitSetCondInst(BinaryOperator &I);
111     Instruction *visitShiftInst(ShiftInst &I);
112     Instruction *visitCastInst(CastInst &CI);
113     Instruction *visitSelectInst(SelectInst &CI);
114     Instruction *visitCallInst(CallInst &CI);
115     Instruction *visitInvokeInst(InvokeInst &II);
116     Instruction *visitPHINode(PHINode &PN);
117     Instruction *visitGetElementPtrInst(GetElementPtrInst &GEP);
118     Instruction *visitAllocationInst(AllocationInst &AI);
119     Instruction *visitFreeInst(FreeInst &FI);
120     Instruction *visitLoadInst(LoadInst &LI);
121     Instruction *visitBranchInst(BranchInst &BI);
122
123     // visitInstruction - Specify what to return for unhandled instructions...
124     Instruction *visitInstruction(Instruction &I) { return 0; }
125
126   private:
127     Instruction *visitCallSite(CallSite CS);
128     bool transformConstExprCastCall(CallSite CS);
129
130     // InsertNewInstBefore - insert an instruction New before instruction Old
131     // in the program.  Add the new instruction to the worklist.
132     //
133     Value *InsertNewInstBefore(Instruction *New, Instruction &Old) {
134       assert(New && New->getParent() == 0 &&
135              "New instruction already inserted into a basic block!");
136       BasicBlock *BB = Old.getParent();
137       BB->getInstList().insert(&Old, New);  // Insert inst
138       WorkList.push_back(New);              // Add to worklist
139       return New;
140     }
141
142   public:
143     // ReplaceInstUsesWith - This method is to be used when an instruction is
144     // found to be dead, replacable with another preexisting expression.  Here
145     // we add all uses of I to the worklist, replace all uses of I with the new
146     // value, then return I, so that the inst combiner will know that I was
147     // modified.
148     //
149     Instruction *ReplaceInstUsesWith(Instruction &I, Value *V) {
150       AddUsersToWorkList(I);         // Add all modified instrs to worklist
151       I.replaceAllUsesWith(V);
152       return &I;
153     }
154
155     // EraseInstFromFunction - When dealing with an instruction that has side
156     // effects or produces a void value, we can't rely on DCE to delete the
157     // instruction.  Instead, visit methods should return the value returned by
158     // this function.
159     Instruction *EraseInstFromFunction(Instruction &I) {
160       assert(I.use_empty() && "Cannot erase instruction that is used!");
161       AddUsesToWorkList(I);
162       removeFromWorkList(&I);
163       I.getParent()->getInstList().erase(&I);
164       return 0;  // Don't do anything with FI
165     }
166
167
168   private:
169     /// InsertOperandCastBefore - This inserts a cast of V to DestTy before the
170     /// InsertBefore instruction.  This is specialized a bit to avoid inserting
171     /// casts that are known to not do anything...
172     ///
173     Value *InsertOperandCastBefore(Value *V, const Type *DestTy,
174                                    Instruction *InsertBefore);
175
176     // SimplifyCommutative - This performs a few simplifications for commutative
177     // operators...
178     bool SimplifyCommutative(BinaryOperator &I);
179
180     Instruction *OptAndOp(Instruction *Op, ConstantIntegral *OpRHS,
181                           ConstantIntegral *AndRHS, BinaryOperator &TheAnd);
182   };
183
184   RegisterOpt<InstCombiner> X("instcombine", "Combine redundant instructions");
185 }
186
187 // getComplexity:  Assign a complexity or rank value to LLVM Values...
188 //   0 -> Constant, 1 -> Other, 2 -> Argument, 2 -> Unary, 3 -> OtherInst
189 static unsigned getComplexity(Value *V) {
190   if (isa<Instruction>(V)) {
191     if (BinaryOperator::isNeg(V) || BinaryOperator::isNot(V))
192       return 2;
193     return 3;
194   }
195   if (isa<Argument>(V)) return 2;
196   return isa<Constant>(V) ? 0 : 1;
197 }
198
199 // isOnlyUse - Return true if this instruction will be deleted if we stop using
200 // it.
201 static bool isOnlyUse(Value *V) {
202   return V->hasOneUse() || isa<Constant>(V);
203 }
204
205 // getSignedIntegralType - Given an unsigned integral type, return the signed
206 // version of it that has the same size.
207 static const Type *getSignedIntegralType(const Type *Ty) {
208   switch (Ty->getPrimitiveID()) {
209   default: assert(0 && "Invalid unsigned integer type!"); abort();
210   case Type::UByteTyID:  return Type::SByteTy;
211   case Type::UShortTyID: return Type::ShortTy;
212   case Type::UIntTyID:   return Type::IntTy;
213   case Type::ULongTyID:  return Type::LongTy;
214   }
215 }
216
217 // getUnsignedIntegralType - Given an signed integral type, return the unsigned
218 // version of it that has the same size.
219 static const Type *getUnsignedIntegralType(const Type *Ty) {
220   switch (Ty->getPrimitiveID()) {
221   default: assert(0 && "Invalid signed integer type!"); abort();
222   case Type::SByteTyID: return Type::UByteTy;
223   case Type::ShortTyID: return Type::UShortTy;
224   case Type::IntTyID:   return Type::UIntTy;
225   case Type::LongTyID:  return Type::ULongTy;
226   }
227 }
228
229 // getPromotedType - Return the specified type promoted as it would be to pass
230 // though a va_arg area...
231 static const Type *getPromotedType(const Type *Ty) {
232   switch (Ty->getPrimitiveID()) {
233   case Type::SByteTyID:
234   case Type::ShortTyID:  return Type::IntTy;
235   case Type::UByteTyID:
236   case Type::UShortTyID: return Type::UIntTy;
237   case Type::FloatTyID:  return Type::DoubleTy;
238   default:               return Ty;
239   }
240 }
241
242 // SimplifyCommutative - This performs a few simplifications for commutative
243 // operators:
244 //
245 //  1. Order operands such that they are listed from right (least complex) to
246 //     left (most complex).  This puts constants before unary operators before
247 //     binary operators.
248 //
249 //  2. Transform: (op (op V, C1), C2) ==> (op V, (op C1, C2))
250 //  3. Transform: (op (op V1, C1), (op V2, C2)) ==> (op (op V1, V2), (op C1,C2))
251 //
252 bool InstCombiner::SimplifyCommutative(BinaryOperator &I) {
253   bool Changed = false;
254   if (getComplexity(I.getOperand(0)) < getComplexity(I.getOperand(1)))
255     Changed = !I.swapOperands();
256   
257   if (!I.isAssociative()) return Changed;
258   Instruction::BinaryOps Opcode = I.getOpcode();
259   if (BinaryOperator *Op = dyn_cast<BinaryOperator>(I.getOperand(0)))
260     if (Op->getOpcode() == Opcode && isa<Constant>(Op->getOperand(1))) {
261       if (isa<Constant>(I.getOperand(1))) {
262         Constant *Folded = ConstantExpr::get(I.getOpcode(),
263                                              cast<Constant>(I.getOperand(1)),
264                                              cast<Constant>(Op->getOperand(1)));
265         I.setOperand(0, Op->getOperand(0));
266         I.setOperand(1, Folded);
267         return true;
268       } else if (BinaryOperator *Op1=dyn_cast<BinaryOperator>(I.getOperand(1)))
269         if (Op1->getOpcode() == Opcode && isa<Constant>(Op1->getOperand(1)) &&
270             isOnlyUse(Op) && isOnlyUse(Op1)) {
271           Constant *C1 = cast<Constant>(Op->getOperand(1));
272           Constant *C2 = cast<Constant>(Op1->getOperand(1));
273
274           // Fold (op (op V1, C1), (op V2, C2)) ==> (op (op V1, V2), (op C1,C2))
275           Constant *Folded = ConstantExpr::get(I.getOpcode(), C1, C2);
276           Instruction *New = BinaryOperator::create(Opcode, Op->getOperand(0),
277                                                     Op1->getOperand(0),
278                                                     Op1->getName(), &I);
279           WorkList.push_back(New);
280           I.setOperand(0, New);
281           I.setOperand(1, Folded);
282           return true;
283         }      
284     }
285   return Changed;
286 }
287
288 // dyn_castNegVal - Given a 'sub' instruction, return the RHS of the instruction
289 // if the LHS is a constant zero (which is the 'negate' form).
290 //
291 static inline Value *dyn_castNegVal(Value *V) {
292   if (BinaryOperator::isNeg(V))
293     return BinaryOperator::getNegArgument(cast<BinaryOperator>(V));
294
295   // Constants can be considered to be negated values if they can be folded...
296   if (Constant *C = dyn_cast<Constant>(V))
297     return ConstantExpr::get(Instruction::Sub,
298                              Constant::getNullValue(V->getType()), C);
299   return 0;
300 }
301
302 static Constant *NotConstant(Constant *C) {
303   return ConstantExpr::get(Instruction::Xor, C,
304                            ConstantIntegral::getAllOnesValue(C->getType()));
305 }
306
307 static inline Value *dyn_castNotVal(Value *V) {
308   if (BinaryOperator::isNot(V))
309     return BinaryOperator::getNotArgument(cast<BinaryOperator>(V));
310
311   // Constants can be considered to be not'ed values...
312   if (ConstantIntegral *C = dyn_cast<ConstantIntegral>(V))
313     return NotConstant(C);
314   return 0;
315 }
316
317 // dyn_castFoldableMul - If this value is a multiply that can be folded into
318 // other computations (because it has a constant operand), return the
319 // non-constant operand of the multiply.
320 //
321 static inline Value *dyn_castFoldableMul(Value *V) {
322   if (V->hasOneUse() && V->getType()->isInteger())
323     if (Instruction *I = dyn_cast<Instruction>(V))
324       if (I->getOpcode() == Instruction::Mul)
325         if (isa<Constant>(I->getOperand(1)))
326           return I->getOperand(0);
327   return 0;
328 }
329
330 // dyn_castMaskingAnd - If this value is an And instruction masking a value with
331 // a constant, return the constant being anded with.
332 //
333 template<class ValueType>
334 static inline Constant *dyn_castMaskingAnd(ValueType *V) {
335   if (Instruction *I = dyn_cast<Instruction>(V))
336     if (I->getOpcode() == Instruction::And)
337       return dyn_cast<Constant>(I->getOperand(1));
338
339   // If this is a constant, it acts just like we were masking with it.
340   return dyn_cast<Constant>(V);
341 }
342
343 // Log2 - Calculate the log base 2 for the specified value if it is exactly a
344 // power of 2.
345 static unsigned Log2(uint64_t Val) {
346   assert(Val > 1 && "Values 0 and 1 should be handled elsewhere!");
347   unsigned Count = 0;
348   while (Val != 1) {
349     if (Val & 1) return 0;    // Multiple bits set?
350     Val >>= 1;
351     ++Count;
352   }
353   return Count;
354 }
355
356
357 /// AssociativeOpt - Perform an optimization on an associative operator.  This
358 /// function is designed to check a chain of associative operators for a
359 /// potential to apply a certain optimization.  Since the optimization may be
360 /// applicable if the expression was reassociated, this checks the chain, then
361 /// reassociates the expression as necessary to expose the optimization
362 /// opportunity.  This makes use of a special Functor, which must define
363 /// 'shouldApply' and 'apply' methods.
364 ///
365 template<typename Functor>
366 Instruction *AssociativeOpt(BinaryOperator &Root, const Functor &F) {
367   unsigned Opcode = Root.getOpcode();
368   Value *LHS = Root.getOperand(0);
369
370   // Quick check, see if the immediate LHS matches...
371   if (F.shouldApply(LHS))
372     return F.apply(Root);
373
374   // Otherwise, if the LHS is not of the same opcode as the root, return.
375   Instruction *LHSI = dyn_cast<Instruction>(LHS);
376   while (LHSI && LHSI->getOpcode() == Opcode && LHSI->hasOneUse()) {
377     // Should we apply this transform to the RHS?
378     bool ShouldApply = F.shouldApply(LHSI->getOperand(1));
379
380     // If not to the RHS, check to see if we should apply to the LHS...
381     if (!ShouldApply && F.shouldApply(LHSI->getOperand(0))) {
382       cast<BinaryOperator>(LHSI)->swapOperands();   // Make the LHS the RHS
383       ShouldApply = true;
384     }
385
386     // If the functor wants to apply the optimization to the RHS of LHSI,
387     // reassociate the expression from ((? op A) op B) to (? op (A op B))
388     if (ShouldApply) {
389       BasicBlock *BB = Root.getParent();
390       // All of the instructions have a single use and have no side-effects,
391       // because of this, we can pull them all into the current basic block.
392       if (LHSI->getParent() != BB) {
393         // Move all of the instructions from root to LHSI into the current
394         // block.
395         Instruction *TmpLHSI = cast<Instruction>(Root.getOperand(0));
396         Instruction *LastUse = &Root;
397         while (TmpLHSI->getParent() == BB) {
398           LastUse = TmpLHSI;
399           TmpLHSI = cast<Instruction>(TmpLHSI->getOperand(0));
400         }
401         
402         // Loop over all of the instructions in other blocks, moving them into
403         // the current one.
404         Value *TmpLHS = TmpLHSI;
405         do {
406           TmpLHSI = cast<Instruction>(TmpLHS);
407           // Remove from current block...
408           TmpLHSI->getParent()->getInstList().remove(TmpLHSI);
409           // Insert before the last instruction...
410           BB->getInstList().insert(LastUse, TmpLHSI);
411           TmpLHS = TmpLHSI->getOperand(0);
412         } while (TmpLHSI != LHSI);
413       }
414       
415       // Now all of the instructions are in the current basic block, go ahead
416       // and perform the reassociation.
417       Instruction *TmpLHSI = cast<Instruction>(Root.getOperand(0));
418
419       // First move the selected RHS to the LHS of the root...
420       Root.setOperand(0, LHSI->getOperand(1));
421
422       // Make what used to be the LHS of the root be the user of the root...
423       Value *ExtraOperand = TmpLHSI->getOperand(1);
424       Root.replaceAllUsesWith(TmpLHSI);          // Users now use TmpLHSI
425       TmpLHSI->setOperand(1, &Root);             // TmpLHSI now uses the root
426       BB->getInstList().remove(&Root);           // Remove root from the BB
427       BB->getInstList().insert(TmpLHSI, &Root);  // Insert root before TmpLHSI
428
429       // Now propagate the ExtraOperand down the chain of instructions until we
430       // get to LHSI.
431       while (TmpLHSI != LHSI) {
432         Instruction *NextLHSI = cast<Instruction>(TmpLHSI->getOperand(0));
433         Value *NextOp = NextLHSI->getOperand(1);
434         NextLHSI->setOperand(1, ExtraOperand);
435         TmpLHSI = NextLHSI;
436         ExtraOperand = NextOp;
437       }
438       
439       // Now that the instructions are reassociated, have the functor perform
440       // the transformation...
441       return F.apply(Root);
442     }
443     
444     LHSI = dyn_cast<Instruction>(LHSI->getOperand(0));
445   }
446   return 0;
447 }
448
449
450 // AddRHS - Implements: X + X --> X << 1
451 struct AddRHS {
452   Value *RHS;
453   AddRHS(Value *rhs) : RHS(rhs) {}
454   bool shouldApply(Value *LHS) const { return LHS == RHS; }
455   Instruction *apply(BinaryOperator &Add) const {
456     return new ShiftInst(Instruction::Shl, Add.getOperand(0),
457                          ConstantInt::get(Type::UByteTy, 1));
458   }
459 };
460
461 // AddMaskingAnd - Implements (A & C1)+(B & C2) --> (A & C1)|(B & C2)
462 //                 iff C1&C2 == 0
463 struct AddMaskingAnd {
464   Constant *C2;
465   AddMaskingAnd(Constant *c) : C2(c) {}
466   bool shouldApply(Value *LHS) const {
467     if (Constant *C1 = dyn_castMaskingAnd(LHS))
468       return ConstantExpr::get(Instruction::And, C1, C2)->isNullValue();
469     return false;
470   }
471   Instruction *apply(BinaryOperator &Add) const {
472     return BinaryOperator::create(Instruction::Or, Add.getOperand(0),
473                                   Add.getOperand(1));
474   }
475 };
476
477
478
479 Instruction *InstCombiner::visitAdd(BinaryOperator &I) {
480   bool Changed = SimplifyCommutative(I);
481   Value *LHS = I.getOperand(0), *RHS = I.getOperand(1);
482
483   // X + 0 --> X
484   if (!I.getType()->isFloatingPoint() &&    // -0 + +0 = +0, so it's not a noop
485       RHS == Constant::getNullValue(I.getType()))
486     return ReplaceInstUsesWith(I, LHS);
487
488   // X + X --> X << 1
489   if (I.getType()->isInteger())
490     if (Instruction *Result = AssociativeOpt(I, AddRHS(RHS))) return Result;
491
492   // -A + B  -->  B - A
493   if (Value *V = dyn_castNegVal(LHS))
494     return BinaryOperator::create(Instruction::Sub, RHS, V);
495
496   // A + -B  -->  A - B
497   if (!isa<Constant>(RHS))
498     if (Value *V = dyn_castNegVal(RHS))
499       return BinaryOperator::create(Instruction::Sub, LHS, V);
500
501   // X*C + X --> X * (C+1)
502   if (dyn_castFoldableMul(LHS) == RHS) {
503     Constant *CP1 =
504       ConstantExpr::get(Instruction::Add, 
505                         cast<Constant>(cast<Instruction>(LHS)->getOperand(1)),
506                         ConstantInt::get(I.getType(), 1));
507     return BinaryOperator::create(Instruction::Mul, RHS, CP1);
508   }
509
510   // X + X*C --> X * (C+1)
511   if (dyn_castFoldableMul(RHS) == LHS) {
512     Constant *CP1 =
513       ConstantExpr::get(Instruction::Add,
514                         cast<Constant>(cast<Instruction>(RHS)->getOperand(1)),
515                         ConstantInt::get(I.getType(), 1));
516     return BinaryOperator::create(Instruction::Mul, LHS, CP1);
517   }
518
519   // (A & C1)+(B & C2) --> (A & C1)|(B & C2) iff C1&C2 == 0
520   if (Constant *C2 = dyn_castMaskingAnd(RHS))
521     if (Instruction *R = AssociativeOpt(I, AddMaskingAnd(C2))) return R;
522
523   if (ConstantInt *CRHS = dyn_cast<ConstantInt>(RHS)) {
524     if (Instruction *ILHS = dyn_cast<Instruction>(LHS)) {
525       switch (ILHS->getOpcode()) {
526       case Instruction::Xor:
527         // ~X + C --> (C-1) - X
528         if (ConstantInt *XorRHS = dyn_cast<ConstantInt>(ILHS->getOperand(1)))
529           if (XorRHS->isAllOnesValue())
530             return BinaryOperator::create(Instruction::Sub,
531                                           ConstantExpr::get(Instruction::Sub,
532                                     CRHS, ConstantInt::get(I.getType(), 1)),
533                                           ILHS->getOperand(0));
534         break;
535       default: break;
536       }
537     }
538   }
539
540   return Changed ? &I : 0;
541 }
542
543 // isSignBit - Return true if the value represented by the constant only has the
544 // highest order bit set.
545 static bool isSignBit(ConstantInt *CI) {
546   unsigned NumBits = CI->getType()->getPrimitiveSize()*8;
547   return (CI->getRawValue() & ~(-1LL << NumBits)) == (1ULL << (NumBits-1));
548 }
549
550 static unsigned getTypeSizeInBits(const Type *Ty) {
551   return Ty == Type::BoolTy ? 1 : Ty->getPrimitiveSize()*8;
552 }
553
554 /// RemoveNoopCast - Strip off nonconverting casts from the value.
555 ///
556 static Value *RemoveNoopCast(Value *V) {
557   if (CastInst *CI = dyn_cast<CastInst>(V)) {
558     const Type *CTy = CI->getType();
559     const Type *OpTy = CI->getOperand(0)->getType();
560     if (CTy->isInteger() && OpTy->isInteger()) {
561       if (CTy->getPrimitiveSize() == OpTy->getPrimitiveSize())
562         return RemoveNoopCast(CI->getOperand(0));
563     } else if (isa<PointerType>(CTy) && isa<PointerType>(OpTy))
564       return RemoveNoopCast(CI->getOperand(0));
565   }
566   return V;
567 }
568
569 Instruction *InstCombiner::visitSub(BinaryOperator &I) {
570   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
571
572   if (Op0 == Op1)         // sub X, X  -> 0
573     return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
574
575   // If this is a 'B = x-(-A)', change to B = x+A...
576   if (Value *V = dyn_castNegVal(Op1))
577     return BinaryOperator::create(Instruction::Add, Op0, V);
578
579   if (ConstantInt *C = dyn_cast<ConstantInt>(Op0)) {
580     // Replace (-1 - A) with (~A)...
581     if (C->isAllOnesValue())
582       return BinaryOperator::createNot(Op1);
583
584     // C - ~X == X + (1+C)
585     if (BinaryOperator::isNot(Op1))
586       return BinaryOperator::create(Instruction::Add,
587                BinaryOperator::getNotArgument(cast<BinaryOperator>(Op1)),
588                     ConstantExpr::get(Instruction::Add, C,
589                                       ConstantInt::get(I.getType(), 1)));
590     // -((uint)X >> 31) -> ((int)X >> 31)
591     // -((int)X >> 31) -> ((uint)X >> 31)
592     if (C->isNullValue()) {
593       Value *NoopCastedRHS = RemoveNoopCast(Op1);
594       if (ShiftInst *SI = dyn_cast<ShiftInst>(NoopCastedRHS))
595         if (SI->getOpcode() == Instruction::Shr)
596           if (ConstantUInt *CU = dyn_cast<ConstantUInt>(SI->getOperand(1))) {
597             const Type *NewTy;
598             if (SI->getType()->isSigned())
599               NewTy = getUnsignedIntegralType(SI->getType());
600             else
601               NewTy = getSignedIntegralType(SI->getType());
602             // Check to see if we are shifting out everything but the sign bit.
603             if (CU->getValue() == SI->getType()->getPrimitiveSize()*8-1) {
604               // Ok, the transformation is safe.  Insert a cast of the incoming
605               // value, then the new shift, then the new cast.
606               Instruction *FirstCast = new CastInst(SI->getOperand(0), NewTy,
607                                                  SI->getOperand(0)->getName());
608               Value *InV = InsertNewInstBefore(FirstCast, I);
609               Instruction *NewShift = new ShiftInst(Instruction::Shr, FirstCast,
610                                                     CU, SI->getName());
611               if (NewShift->getType() == I.getType())
612                 return NewShift;
613               else {
614                 InV = InsertNewInstBefore(NewShift, I);
615                 return new CastInst(NewShift, I.getType());
616               }
617             }
618           }
619     }
620   }
621
622   if (BinaryOperator *Op1I = dyn_cast<BinaryOperator>(Op1))
623     if (Op1I->hasOneUse()) {
624       // Replace (x - (y - z)) with (x + (z - y)) if the (y - z) subexpression
625       // is not used by anyone else...
626       //
627       if (Op1I->getOpcode() == Instruction::Sub &&
628           !Op1I->getType()->isFloatingPoint()) {
629         // Swap the two operands of the subexpr...
630         Value *IIOp0 = Op1I->getOperand(0), *IIOp1 = Op1I->getOperand(1);
631         Op1I->setOperand(0, IIOp1);
632         Op1I->setOperand(1, IIOp0);
633         
634         // Create the new top level add instruction...
635         return BinaryOperator::create(Instruction::Add, Op0, Op1);
636       }
637
638       // Replace (A - (A & B)) with (A & ~B) if this is the only use of (A&B)...
639       //
640       if (Op1I->getOpcode() == Instruction::And &&
641           (Op1I->getOperand(0) == Op0 || Op1I->getOperand(1) == Op0)) {
642         Value *OtherOp = Op1I->getOperand(Op1I->getOperand(0) == Op0);
643
644         Instruction *NewNot = BinaryOperator::createNot(OtherOp, "B.not", &I);
645         return BinaryOperator::create(Instruction::And, Op0, NewNot);
646       }
647
648       // X - X*C --> X * (1-C)
649       if (dyn_castFoldableMul(Op1I) == Op0) {
650         Constant *CP1 =
651           ConstantExpr::get(Instruction::Sub,
652                             ConstantInt::get(I.getType(), 1),
653                          cast<Constant>(cast<Instruction>(Op1)->getOperand(1)));
654         assert(CP1 && "Couldn't constant fold 1-C?");
655         return BinaryOperator::create(Instruction::Mul, Op0, CP1);
656       }
657     }
658
659   // X*C - X --> X * (C-1)
660   if (dyn_castFoldableMul(Op0) == Op1) {
661     Constant *CP1 =
662       ConstantExpr::get(Instruction::Sub,
663                         cast<Constant>(cast<Instruction>(Op0)->getOperand(1)),
664                         ConstantInt::get(I.getType(), 1));
665     assert(CP1 && "Couldn't constant fold C - 1?");
666     return BinaryOperator::create(Instruction::Mul, Op1, CP1);
667   }
668
669   return 0;
670 }
671
672 /// isSignBitCheck - Given an exploded setcc instruction, return true if it is
673 /// really just returns true if the most significant (sign) bit is set.
674 static bool isSignBitCheck(unsigned Opcode, Value *LHS, ConstantInt *RHS) {
675   if (RHS->getType()->isSigned()) {
676     // True if source is LHS < 0 or LHS <= -1
677     return Opcode == Instruction::SetLT && RHS->isNullValue() ||
678            Opcode == Instruction::SetLE && RHS->isAllOnesValue();
679   } else {
680     ConstantUInt *RHSC = cast<ConstantUInt>(RHS);
681     // True if source is LHS > 127 or LHS >= 128, where the constants depend on
682     // the size of the integer type.
683     if (Opcode == Instruction::SetGE)
684       return RHSC->getValue() == 1ULL<<(RHS->getType()->getPrimitiveSize()*8-1);
685     if (Opcode == Instruction::SetGT)
686       return RHSC->getValue() ==
687         (1ULL << (RHS->getType()->getPrimitiveSize()*8-1))-1;
688   }
689   return false;
690 }
691
692 Instruction *InstCombiner::visitMul(BinaryOperator &I) {
693   bool Changed = SimplifyCommutative(I);
694   Value *Op0 = I.getOperand(0);
695
696   // Simplify mul instructions with a constant RHS...
697   if (Constant *Op1 = dyn_cast<Constant>(I.getOperand(1))) {
698     if (ConstantInt *CI = dyn_cast<ConstantInt>(Op1)) {
699
700       // ((X << C1)*C2) == (X * (C2 << C1))
701       if (ShiftInst *SI = dyn_cast<ShiftInst>(Op0))
702         if (SI->getOpcode() == Instruction::Shl)
703           if (Constant *ShOp = dyn_cast<Constant>(SI->getOperand(1)))
704             return BinaryOperator::create(Instruction::Mul, SI->getOperand(0),
705                                  ConstantExpr::get(Instruction::Shl, CI, ShOp));
706       
707       if (CI->isNullValue())
708         return ReplaceInstUsesWith(I, Op1);  // X * 0  == 0
709       if (CI->equalsInt(1))                  // X * 1  == X
710         return ReplaceInstUsesWith(I, Op0);
711       if (CI->isAllOnesValue())              // X * -1 == 0 - X
712         return BinaryOperator::createNeg(Op0, I.getName());
713
714       int64_t Val = (int64_t)cast<ConstantInt>(CI)->getRawValue();
715       if (uint64_t C = Log2(Val))            // Replace X*(2^C) with X << C
716         return new ShiftInst(Instruction::Shl, Op0,
717                              ConstantUInt::get(Type::UByteTy, C));
718     } else {
719       ConstantFP *Op1F = cast<ConstantFP>(Op1);
720       if (Op1F->isNullValue())
721         return ReplaceInstUsesWith(I, Op1);
722
723       // "In IEEE floating point, x*1 is not equivalent to x for nans.  However,
724       // ANSI says we can drop signals, so we can do this anyway." (from GCC)
725       if (Op1F->getValue() == 1.0)
726         return ReplaceInstUsesWith(I, Op0);  // Eliminate 'mul double %X, 1.0'
727     }
728   }
729
730   if (Value *Op0v = dyn_castNegVal(Op0))     // -X * -Y = X*Y
731     if (Value *Op1v = dyn_castNegVal(I.getOperand(1)))
732       return BinaryOperator::create(Instruction::Mul, Op0v, Op1v);
733
734   // If one of the operands of the multiply is a cast from a boolean value, then
735   // we know the bool is either zero or one, so this is a 'masking' multiply.
736   // See if we can simplify things based on how the boolean was originally
737   // formed.
738   CastInst *BoolCast = 0;
739   if (CastInst *CI = dyn_cast<CastInst>(I.getOperand(0)))
740     if (CI->getOperand(0)->getType() == Type::BoolTy)
741       BoolCast = CI;
742   if (!BoolCast)
743     if (CastInst *CI = dyn_cast<CastInst>(I.getOperand(1)))
744       if (CI->getOperand(0)->getType() == Type::BoolTy)
745         BoolCast = CI;
746   if (BoolCast) {
747     if (SetCondInst *SCI = dyn_cast<SetCondInst>(BoolCast->getOperand(0))) {
748       Value *SCIOp0 = SCI->getOperand(0), *SCIOp1 = SCI->getOperand(1);
749       const Type *SCOpTy = SCIOp0->getType();
750
751       // If the setcc is true iff the sign bit of X is set, then convert this
752       // multiply into a shift/and combination.
753       if (isa<ConstantInt>(SCIOp1) &&
754           isSignBitCheck(SCI->getOpcode(), SCIOp0, cast<ConstantInt>(SCIOp1))) {
755         // Shift the X value right to turn it into "all signbits".
756         Constant *Amt = ConstantUInt::get(Type::UByteTy,
757                                           SCOpTy->getPrimitiveSize()*8-1);
758         if (SCIOp0->getType()->isUnsigned()) {
759           const Type *NewTy = getSignedIntegralType(SCIOp0->getType());
760           SCIOp0 = InsertNewInstBefore(new CastInst(SCIOp0, NewTy,
761                                                     SCIOp0->getName()), I);
762         }
763
764         Value *V =
765           InsertNewInstBefore(new ShiftInst(Instruction::Shr, SCIOp0, Amt,
766                                             BoolCast->getOperand(0)->getName()+
767                                             ".mask"), I);
768
769         // If the multiply type is not the same as the source type, sign extend
770         // or truncate to the multiply type.
771         if (I.getType() != V->getType())
772           V = InsertNewInstBefore(new CastInst(V, I.getType(), V->getName()),I);
773         
774         Value *OtherOp = Op0 == BoolCast ? I.getOperand(1) : Op0;
775         return BinaryOperator::create(Instruction::And, V, OtherOp);
776       }
777     }
778   }
779
780   return Changed ? &I : 0;
781 }
782
783 Instruction *InstCombiner::visitDiv(BinaryOperator &I) {
784   // div X, 1 == X
785   if (ConstantInt *RHS = dyn_cast<ConstantInt>(I.getOperand(1))) {
786     if (RHS->equalsInt(1))
787       return ReplaceInstUsesWith(I, I.getOperand(0));
788
789     // Check to see if this is an unsigned division with an exact power of 2,
790     // if so, convert to a right shift.
791     if (ConstantUInt *C = dyn_cast<ConstantUInt>(RHS))
792       if (uint64_t Val = C->getValue())    // Don't break X / 0
793         if (uint64_t C = Log2(Val))
794           return new ShiftInst(Instruction::Shr, I.getOperand(0),
795                                ConstantUInt::get(Type::UByteTy, C));
796   }
797
798   // 0 / X == 0, we don't need to preserve faults!
799   if (ConstantInt *LHS = dyn_cast<ConstantInt>(I.getOperand(0)))
800     if (LHS->equalsInt(0))
801       return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
802
803   return 0;
804 }
805
806
807 Instruction *InstCombiner::visitRem(BinaryOperator &I) {
808   if (ConstantInt *RHS = dyn_cast<ConstantInt>(I.getOperand(1))) {
809     if (RHS->equalsInt(1))  // X % 1 == 0
810       return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
811     if (RHS->isAllOnesValue())  // X % -1 == 0
812       return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
813
814     // Check to see if this is an unsigned remainder with an exact power of 2,
815     // if so, convert to a bitwise and.
816     if (ConstantUInt *C = dyn_cast<ConstantUInt>(RHS))
817       if (uint64_t Val = C->getValue())    // Don't break X % 0 (divide by zero)
818         if (Log2(Val))
819           return BinaryOperator::create(Instruction::And, I.getOperand(0),
820                                         ConstantUInt::get(I.getType(), Val-1));
821   }
822
823   // 0 % X == 0, we don't need to preserve faults!
824   if (ConstantInt *LHS = dyn_cast<ConstantInt>(I.getOperand(0)))
825     if (LHS->equalsInt(0))
826       return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
827
828   return 0;
829 }
830
831 // isMaxValueMinusOne - return true if this is Max-1
832 static bool isMaxValueMinusOne(const ConstantInt *C) {
833   if (const ConstantUInt *CU = dyn_cast<ConstantUInt>(C)) {
834     // Calculate -1 casted to the right type...
835     unsigned TypeBits = C->getType()->getPrimitiveSize()*8;
836     uint64_t Val = ~0ULL;                // All ones
837     Val >>= 64-TypeBits;                 // Shift out unwanted 1 bits...
838     return CU->getValue() == Val-1;
839   }
840
841   const ConstantSInt *CS = cast<ConstantSInt>(C);
842   
843   // Calculate 0111111111..11111
844   unsigned TypeBits = C->getType()->getPrimitiveSize()*8;
845   int64_t Val = INT64_MAX;             // All ones
846   Val >>= 64-TypeBits;                 // Shift out unwanted 1 bits...
847   return CS->getValue() == Val-1;
848 }
849
850 // isMinValuePlusOne - return true if this is Min+1
851 static bool isMinValuePlusOne(const ConstantInt *C) {
852   if (const ConstantUInt *CU = dyn_cast<ConstantUInt>(C))
853     return CU->getValue() == 1;
854
855   const ConstantSInt *CS = cast<ConstantSInt>(C);
856   
857   // Calculate 1111111111000000000000 
858   unsigned TypeBits = C->getType()->getPrimitiveSize()*8;
859   int64_t Val = -1;                    // All ones
860   Val <<= TypeBits-1;                  // Shift over to the right spot
861   return CS->getValue() == Val+1;
862 }
863
864 /// getSetCondCode - Encode a setcc opcode into a three bit mask.  These bits
865 /// are carefully arranged to allow folding of expressions such as:
866 ///
867 ///      (A < B) | (A > B) --> (A != B)
868 ///
869 /// Bit value '4' represents that the comparison is true if A > B, bit value '2'
870 /// represents that the comparison is true if A == B, and bit value '1' is true
871 /// if A < B.
872 ///
873 static unsigned getSetCondCode(const SetCondInst *SCI) {
874   switch (SCI->getOpcode()) {
875     // False -> 0
876   case Instruction::SetGT: return 1;
877   case Instruction::SetEQ: return 2;
878   case Instruction::SetGE: return 3;
879   case Instruction::SetLT: return 4;
880   case Instruction::SetNE: return 5;
881   case Instruction::SetLE: return 6;
882     // True -> 7
883   default:
884     assert(0 && "Invalid SetCC opcode!");
885     return 0;
886   }
887 }
888
889 /// getSetCCValue - This is the complement of getSetCondCode, which turns an
890 /// opcode and two operands into either a constant true or false, or a brand new
891 /// SetCC instruction.
892 static Value *getSetCCValue(unsigned Opcode, Value *LHS, Value *RHS) {
893   switch (Opcode) {
894   case 0: return ConstantBool::False;
895   case 1: return new SetCondInst(Instruction::SetGT, LHS, RHS);
896   case 2: return new SetCondInst(Instruction::SetEQ, LHS, RHS);
897   case 3: return new SetCondInst(Instruction::SetGE, LHS, RHS);
898   case 4: return new SetCondInst(Instruction::SetLT, LHS, RHS);
899   case 5: return new SetCondInst(Instruction::SetNE, LHS, RHS);
900   case 6: return new SetCondInst(Instruction::SetLE, LHS, RHS);
901   case 7: return ConstantBool::True;
902   default: assert(0 && "Illegal SetCCCode!"); return 0;
903   }
904 }
905
906 // FoldSetCCLogical - Implements (setcc1 A, B) & (setcc2 A, B) --> (setcc3 A, B)
907 struct FoldSetCCLogical {
908   InstCombiner &IC;
909   Value *LHS, *RHS;
910   FoldSetCCLogical(InstCombiner &ic, SetCondInst *SCI)
911     : IC(ic), LHS(SCI->getOperand(0)), RHS(SCI->getOperand(1)) {}
912   bool shouldApply(Value *V) const {
913     if (SetCondInst *SCI = dyn_cast<SetCondInst>(V))
914       return (SCI->getOperand(0) == LHS && SCI->getOperand(1) == RHS ||
915               SCI->getOperand(0) == RHS && SCI->getOperand(1) == LHS);
916     return false;
917   }
918   Instruction *apply(BinaryOperator &Log) const {
919     SetCondInst *SCI = cast<SetCondInst>(Log.getOperand(0));
920     if (SCI->getOperand(0) != LHS) {
921       assert(SCI->getOperand(1) == LHS);
922       SCI->swapOperands();  // Swap the LHS and RHS of the SetCC
923     }
924
925     unsigned LHSCode = getSetCondCode(SCI);
926     unsigned RHSCode = getSetCondCode(cast<SetCondInst>(Log.getOperand(1)));
927     unsigned Code;
928     switch (Log.getOpcode()) {
929     case Instruction::And: Code = LHSCode & RHSCode; break;
930     case Instruction::Or:  Code = LHSCode | RHSCode; break;
931     case Instruction::Xor: Code = LHSCode ^ RHSCode; break;
932     default: assert(0 && "Illegal logical opcode!"); return 0;
933     }
934
935     Value *RV = getSetCCValue(Code, LHS, RHS);
936     if (Instruction *I = dyn_cast<Instruction>(RV))
937       return I;
938     // Otherwise, it's a constant boolean value...
939     return IC.ReplaceInstUsesWith(Log, RV);
940   }
941 };
942
943
944 // OptAndOp - This handles expressions of the form ((val OP C1) & C2).  Where
945 // the Op parameter is 'OP', OpRHS is 'C1', and AndRHS is 'C2'.  Op is
946 // guaranteed to be either a shift instruction or a binary operator.
947 Instruction *InstCombiner::OptAndOp(Instruction *Op,
948                                     ConstantIntegral *OpRHS,
949                                     ConstantIntegral *AndRHS,
950                                     BinaryOperator &TheAnd) {
951   Value *X = Op->getOperand(0);
952   Constant *Together = 0;
953   if (!isa<ShiftInst>(Op))
954     Together = ConstantExpr::get(Instruction::And, AndRHS, OpRHS);
955
956   switch (Op->getOpcode()) {
957   case Instruction::Xor:
958     if (Together->isNullValue()) {
959       // (X ^ C1) & C2 --> (X & C2) iff (C1&C2) == 0
960       return BinaryOperator::create(Instruction::And, X, AndRHS);
961     } else if (Op->hasOneUse()) {
962       // (X ^ C1) & C2 --> (X & C2) ^ (C1&C2)
963       std::string OpName = Op->getName(); Op->setName("");
964       Instruction *And = BinaryOperator::create(Instruction::And,
965                                                 X, AndRHS, OpName);
966       InsertNewInstBefore(And, TheAnd);
967       return BinaryOperator::create(Instruction::Xor, And, Together);
968     }
969     break;
970   case Instruction::Or:
971     // (X | C1) & C2 --> X & C2 iff C1 & C1 == 0
972     if (Together->isNullValue())
973       return BinaryOperator::create(Instruction::And, X, AndRHS);
974     else {
975       if (Together == AndRHS) // (X | C) & C --> C
976         return ReplaceInstUsesWith(TheAnd, AndRHS);
977       
978       if (Op->hasOneUse() && Together != OpRHS) {
979         // (X | C1) & C2 --> (X | (C1&C2)) & C2
980         std::string Op0Name = Op->getName(); Op->setName("");
981         Instruction *Or = BinaryOperator::create(Instruction::Or, X,
982                                                  Together, Op0Name);
983         InsertNewInstBefore(Or, TheAnd);
984         return BinaryOperator::create(Instruction::And, Or, AndRHS);
985       }
986     }
987     break;
988   case Instruction::Add:
989     if (Op->hasOneUse()) {
990       // Adding a one to a single bit bit-field should be turned into an XOR
991       // of the bit.  First thing to check is to see if this AND is with a
992       // single bit constant.
993       unsigned long long AndRHSV = cast<ConstantInt>(AndRHS)->getRawValue();
994
995       // Clear bits that are not part of the constant.
996       AndRHSV &= (1ULL << AndRHS->getType()->getPrimitiveSize()*8)-1;
997
998       // If there is only one bit set...
999       if ((AndRHSV & (AndRHSV-1)) == 0) {
1000         // Ok, at this point, we know that we are masking the result of the
1001         // ADD down to exactly one bit.  If the constant we are adding has
1002         // no bits set below this bit, then we can eliminate the ADD.
1003         unsigned long long AddRHS = cast<ConstantInt>(OpRHS)->getRawValue();
1004             
1005         // Check to see if any bits below the one bit set in AndRHSV are set.
1006         if ((AddRHS & (AndRHSV-1)) == 0) {
1007           // If not, the only thing that can effect the output of the AND is
1008           // the bit specified by AndRHSV.  If that bit is set, the effect of
1009           // the XOR is to toggle the bit.  If it is clear, then the ADD has
1010           // no effect.
1011           if ((AddRHS & AndRHSV) == 0) { // Bit is not set, noop
1012             TheAnd.setOperand(0, X);
1013             return &TheAnd;
1014           } else {
1015             std::string Name = Op->getName(); Op->setName("");
1016             // Pull the XOR out of the AND.
1017             Instruction *NewAnd =
1018               BinaryOperator::create(Instruction::And, X, AndRHS, Name);
1019             InsertNewInstBefore(NewAnd, TheAnd);
1020             return BinaryOperator::create(Instruction::Xor, NewAnd, AndRHS);
1021           }
1022         }
1023       }
1024     }
1025     break;
1026
1027   case Instruction::Shl: {
1028     // We know that the AND will not produce any of the bits shifted in, so if
1029     // the anded constant includes them, clear them now!
1030     //
1031     Constant *AllOne = ConstantIntegral::getAllOnesValue(AndRHS->getType());
1032     Constant *CI = ConstantExpr::get(Instruction::And, AndRHS,
1033                             ConstantExpr::get(Instruction::Shl, AllOne, OpRHS));
1034     if (CI != AndRHS) {
1035       TheAnd.setOperand(1, CI);
1036       return &TheAnd;
1037     }
1038     break;
1039   } 
1040   case Instruction::Shr:
1041     // We know that the AND will not produce any of the bits shifted in, so if
1042     // the anded constant includes them, clear them now!  This only applies to
1043     // unsigned shifts, because a signed shr may bring in set bits!
1044     //
1045     if (AndRHS->getType()->isUnsigned()) {
1046       Constant *AllOne = ConstantIntegral::getAllOnesValue(AndRHS->getType());
1047       Constant *CI = ConstantExpr::get(Instruction::And, AndRHS,
1048                             ConstantExpr::get(Instruction::Shr, AllOne, OpRHS));
1049       if (CI != AndRHS) {
1050         TheAnd.setOperand(1, CI);
1051         return &TheAnd;
1052       }
1053     }
1054     break;
1055   }
1056   return 0;
1057 }
1058
1059
1060 Instruction *InstCombiner::visitAnd(BinaryOperator &I) {
1061   bool Changed = SimplifyCommutative(I);
1062   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
1063
1064   // and X, X = X   and X, 0 == 0
1065   if (Op0 == Op1 || Op1 == Constant::getNullValue(I.getType()))
1066     return ReplaceInstUsesWith(I, Op1);
1067
1068   // and X, -1 == X
1069   if (ConstantIntegral *RHS = dyn_cast<ConstantIntegral>(Op1)) {
1070     if (RHS->isAllOnesValue())
1071       return ReplaceInstUsesWith(I, Op0);
1072
1073     // Optimize a variety of ((val OP C1) & C2) combinations...
1074     if (isa<BinaryOperator>(Op0) || isa<ShiftInst>(Op0)) {
1075       Instruction *Op0I = cast<Instruction>(Op0);
1076       Value *X = Op0I->getOperand(0);
1077       if (ConstantInt *Op0CI = dyn_cast<ConstantInt>(Op0I->getOperand(1)))
1078         if (Instruction *Res = OptAndOp(Op0I, Op0CI, RHS, I))
1079           return Res;
1080     }
1081   }
1082
1083   Value *Op0NotVal = dyn_castNotVal(Op0);
1084   Value *Op1NotVal = dyn_castNotVal(Op1);
1085
1086   // (~A & ~B) == (~(A | B)) - Demorgan's Law
1087   if (Op0NotVal && Op1NotVal && isOnlyUse(Op0) && isOnlyUse(Op1)) {
1088     Instruction *Or = BinaryOperator::create(Instruction::Or, Op0NotVal,
1089                                              Op1NotVal,I.getName()+".demorgan");
1090     InsertNewInstBefore(Or, I);
1091     return BinaryOperator::createNot(Or);
1092   }
1093
1094   if (Op0NotVal == Op1 || Op1NotVal == Op0)  // A & ~A  == ~A & A == 0
1095     return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
1096
1097   // (setcc1 A, B) & (setcc2 A, B) --> (setcc3 A, B)
1098   if (SetCondInst *RHS = dyn_cast<SetCondInst>(I.getOperand(1)))
1099     if (Instruction *R = AssociativeOpt(I, FoldSetCCLogical(*this, RHS)))
1100       return R;
1101
1102   return Changed ? &I : 0;
1103 }
1104
1105
1106
1107 Instruction *InstCombiner::visitOr(BinaryOperator &I) {
1108   bool Changed = SimplifyCommutative(I);
1109   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
1110
1111   // or X, X = X   or X, 0 == X
1112   if (Op0 == Op1 || Op1 == Constant::getNullValue(I.getType()))
1113     return ReplaceInstUsesWith(I, Op0);
1114
1115   // or X, -1 == -1
1116   if (ConstantIntegral *RHS = dyn_cast<ConstantIntegral>(Op1)) {
1117     if (RHS->isAllOnesValue())
1118       return ReplaceInstUsesWith(I, Op1);
1119
1120     if (Instruction *Op0I = dyn_cast<Instruction>(Op0)) {
1121       // (X & C1) | C2 --> (X | C2) & (C1|C2)
1122       if (Op0I->getOpcode() == Instruction::And && isOnlyUse(Op0))
1123         if (ConstantInt *Op0CI = dyn_cast<ConstantInt>(Op0I->getOperand(1))) {
1124           std::string Op0Name = Op0I->getName(); Op0I->setName("");
1125           Instruction *Or = BinaryOperator::create(Instruction::Or,
1126                                                    Op0I->getOperand(0), RHS,
1127                                                    Op0Name);
1128           InsertNewInstBefore(Or, I);
1129           return BinaryOperator::create(Instruction::And, Or,
1130                              ConstantExpr::get(Instruction::Or, RHS, Op0CI));
1131         }
1132
1133       // (X ^ C1) | C2 --> (X | C2) ^ (C1&~C2)
1134       if (Op0I->getOpcode() == Instruction::Xor && isOnlyUse(Op0))
1135         if (ConstantInt *Op0CI = dyn_cast<ConstantInt>(Op0I->getOperand(1))) {
1136           std::string Op0Name = Op0I->getName(); Op0I->setName("");
1137           Instruction *Or = BinaryOperator::create(Instruction::Or,
1138                                                    Op0I->getOperand(0), RHS,
1139                                                    Op0Name);
1140           InsertNewInstBefore(Or, I);
1141           return BinaryOperator::create(Instruction::Xor, Or,
1142                             ConstantExpr::get(Instruction::And, Op0CI,
1143                                               NotConstant(RHS)));
1144         }
1145     }
1146   }
1147
1148   // (A & C1)|(A & C2) == A & (C1|C2)
1149   if (Instruction *LHS = dyn_cast<BinaryOperator>(Op0))
1150     if (Instruction *RHS = dyn_cast<BinaryOperator>(Op1))
1151       if (LHS->getOperand(0) == RHS->getOperand(0))
1152         if (Constant *C0 = dyn_castMaskingAnd(LHS))
1153           if (Constant *C1 = dyn_castMaskingAnd(RHS))
1154             return BinaryOperator::create(Instruction::And, LHS->getOperand(0),
1155                                     ConstantExpr::get(Instruction::Or, C0, C1));
1156
1157   Value *Op0NotVal = dyn_castNotVal(Op0);
1158   Value *Op1NotVal = dyn_castNotVal(Op1);
1159
1160   if (Op1 == Op0NotVal)   // ~A | A == -1
1161     return ReplaceInstUsesWith(I, 
1162                                ConstantIntegral::getAllOnesValue(I.getType()));
1163
1164   if (Op0 == Op1NotVal)   // A | ~A == -1
1165     return ReplaceInstUsesWith(I, 
1166                                ConstantIntegral::getAllOnesValue(I.getType()));
1167
1168   // (~A | ~B) == (~(A & B)) - Demorgan's Law
1169   if (Op0NotVal && Op1NotVal && isOnlyUse(Op0) && isOnlyUse(Op1)) {
1170     Instruction *And = BinaryOperator::create(Instruction::And, Op0NotVal,
1171                                               Op1NotVal,I.getName()+".demorgan",
1172                                               &I);
1173     WorkList.push_back(And);
1174     return BinaryOperator::createNot(And);
1175   }
1176
1177   // (setcc1 A, B) | (setcc2 A, B) --> (setcc3 A, B)
1178   if (SetCondInst *RHS = dyn_cast<SetCondInst>(I.getOperand(1)))
1179     if (Instruction *R = AssociativeOpt(I, FoldSetCCLogical(*this, RHS)))
1180       return R;
1181
1182   return Changed ? &I : 0;
1183 }
1184
1185 // XorSelf - Implements: X ^ X --> 0
1186 struct XorSelf {
1187   Value *RHS;
1188   XorSelf(Value *rhs) : RHS(rhs) {}
1189   bool shouldApply(Value *LHS) const { return LHS == RHS; }
1190   Instruction *apply(BinaryOperator &Xor) const {
1191     return &Xor;
1192   }
1193 };
1194
1195
1196 Instruction *InstCombiner::visitXor(BinaryOperator &I) {
1197   bool Changed = SimplifyCommutative(I);
1198   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
1199
1200   // xor X, X = 0, even if X is nested in a sequence of Xor's.
1201   if (Instruction *Result = AssociativeOpt(I, XorSelf(Op1))) {
1202     assert(Result == &I && "AssociativeOpt didn't work?");
1203     return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType()));
1204   }
1205
1206   if (ConstantIntegral *RHS = dyn_cast<ConstantIntegral>(Op1)) {
1207     // xor X, 0 == X
1208     if (RHS->isNullValue())
1209       return ReplaceInstUsesWith(I, Op0);
1210
1211     if (BinaryOperator *Op0I = dyn_cast<BinaryOperator>(Op0)) {
1212       // xor (setcc A, B), true = not (setcc A, B) = setncc A, B
1213       if (SetCondInst *SCI = dyn_cast<SetCondInst>(Op0I))
1214         if (RHS == ConstantBool::True && SCI->hasOneUse())
1215           return new SetCondInst(SCI->getInverseCondition(),
1216                                  SCI->getOperand(0), SCI->getOperand(1));
1217
1218       // ~(c-X) == X-c-1 == X+(-c-1)
1219       if (Op0I->getOpcode() == Instruction::Sub && RHS->isAllOnesValue())
1220         if (Constant *Op0I0C = dyn_cast<Constant>(Op0I->getOperand(0))) {
1221           Constant *NegOp0I0C = ConstantExpr::get(Instruction::Sub,
1222                              Constant::getNullValue(Op0I0C->getType()), Op0I0C);
1223           Constant *ConstantRHS = ConstantExpr::get(Instruction::Sub, NegOp0I0C,
1224                                               ConstantInt::get(I.getType(), 1));
1225           return BinaryOperator::create(Instruction::Add, Op0I->getOperand(1),
1226                                         ConstantRHS);
1227         }
1228           
1229       if (ConstantInt *Op0CI = dyn_cast<ConstantInt>(Op0I->getOperand(1)))
1230         switch (Op0I->getOpcode()) {
1231         case Instruction::Add:
1232           // ~(X-c) --> (-c-1)-X
1233           if (RHS->isAllOnesValue()) {
1234             Constant *NegOp0CI = ConstantExpr::get(Instruction::Sub,
1235                                Constant::getNullValue(Op0CI->getType()), Op0CI);
1236             return BinaryOperator::create(Instruction::Sub,
1237                            ConstantExpr::get(Instruction::Sub, NegOp0CI,
1238                                              ConstantInt::get(I.getType(), 1)),
1239                                           Op0I->getOperand(0));
1240           }
1241           break;
1242         case Instruction::And:
1243           // (X & C1) ^ C2 --> (X & C1) | C2 iff (C1&C2) == 0
1244           if (ConstantExpr::get(Instruction::And, RHS, Op0CI)->isNullValue())
1245             return BinaryOperator::create(Instruction::Or, Op0, RHS);
1246           break;
1247         case Instruction::Or:
1248           // (X | C1) ^ C2 --> (X | C1) & ~C2 iff (C1&C2) == C2
1249           if (ConstantExpr::get(Instruction::And, RHS, Op0CI) == RHS)
1250             return BinaryOperator::create(Instruction::And, Op0,
1251                                           NotConstant(RHS));
1252           break;
1253         default: break;
1254         }
1255     }
1256   }
1257
1258   if (Value *X = dyn_castNotVal(Op0))   // ~A ^ A == -1
1259     if (X == Op1)
1260       return ReplaceInstUsesWith(I,
1261                                 ConstantIntegral::getAllOnesValue(I.getType()));
1262
1263   if (Value *X = dyn_castNotVal(Op1))   // A ^ ~A == -1
1264     if (X == Op0)
1265       return ReplaceInstUsesWith(I,
1266                                 ConstantIntegral::getAllOnesValue(I.getType()));
1267
1268   if (Instruction *Op1I = dyn_cast<Instruction>(Op1))
1269     if (Op1I->getOpcode() == Instruction::Or) {
1270       if (Op1I->getOperand(0) == Op0) {              // B^(B|A) == (A|B)^B
1271         cast<BinaryOperator>(Op1I)->swapOperands();
1272         I.swapOperands();
1273         std::swap(Op0, Op1);
1274       } else if (Op1I->getOperand(1) == Op0) {       // B^(A|B) == (A|B)^B
1275         I.swapOperands();
1276         std::swap(Op0, Op1);
1277       }      
1278     } else if (Op1I->getOpcode() == Instruction::Xor) {
1279       if (Op0 == Op1I->getOperand(0))                        // A^(A^B) == B
1280         return ReplaceInstUsesWith(I, Op1I->getOperand(1));
1281       else if (Op0 == Op1I->getOperand(1))                   // A^(B^A) == B
1282         return ReplaceInstUsesWith(I, Op1I->getOperand(0));
1283     }
1284
1285   if (Instruction *Op0I = dyn_cast<Instruction>(Op0))
1286     if (Op0I->getOpcode() == Instruction::Or && Op0I->hasOneUse()) {
1287       if (Op0I->getOperand(0) == Op1)                // (B|A)^B == (A|B)^B
1288         cast<BinaryOperator>(Op0I)->swapOperands();
1289       if (Op0I->getOperand(1) == Op1) {              // (A|B)^B == A & ~B
1290         Value *NotB = BinaryOperator::createNot(Op1, Op1->getName()+".not", &I);
1291         WorkList.push_back(cast<Instruction>(NotB));
1292         return BinaryOperator::create(Instruction::And, Op0I->getOperand(0),
1293                                       NotB);
1294       }
1295     } else if (Op0I->getOpcode() == Instruction::Xor) {
1296       if (Op1 == Op0I->getOperand(0))                        // (A^B)^A == B
1297         return ReplaceInstUsesWith(I, Op0I->getOperand(1));
1298       else if (Op1 == Op0I->getOperand(1))                   // (B^A)^A == B
1299         return ReplaceInstUsesWith(I, Op0I->getOperand(0));
1300     }
1301
1302   // (A & C1)^(B & C2) -> (A & C1)|(B & C2) iff C1^C2 == 0
1303   if (Constant *C1 = dyn_castMaskingAnd(Op0))
1304     if (Constant *C2 = dyn_castMaskingAnd(Op1))
1305       if (ConstantExpr::get(Instruction::And, C1, C2)->isNullValue())
1306         return BinaryOperator::create(Instruction::Or, Op0, Op1);
1307
1308   // (setcc1 A, B) ^ (setcc2 A, B) --> (setcc3 A, B)
1309   if (SetCondInst *RHS = dyn_cast<SetCondInst>(I.getOperand(1)))
1310     if (Instruction *R = AssociativeOpt(I, FoldSetCCLogical(*this, RHS)))
1311       return R;
1312
1313   return Changed ? &I : 0;
1314 }
1315
1316 // AddOne, SubOne - Add or subtract a constant one from an integer constant...
1317 static Constant *AddOne(ConstantInt *C) {
1318   Constant *Result = ConstantExpr::get(Instruction::Add, C,
1319                                        ConstantInt::get(C->getType(), 1));
1320   assert(Result && "Constant folding integer addition failed!");
1321   return Result;
1322 }
1323 static Constant *SubOne(ConstantInt *C) {
1324   Constant *Result = ConstantExpr::get(Instruction::Sub, C,
1325                                        ConstantInt::get(C->getType(), 1));
1326   assert(Result && "Constant folding integer addition failed!");
1327   return Result;
1328 }
1329
1330 // isTrueWhenEqual - Return true if the specified setcondinst instruction is
1331 // true when both operands are equal...
1332 //
1333 static bool isTrueWhenEqual(Instruction &I) {
1334   return I.getOpcode() == Instruction::SetEQ ||
1335          I.getOpcode() == Instruction::SetGE ||
1336          I.getOpcode() == Instruction::SetLE;
1337 }
1338
1339 Instruction *InstCombiner::visitSetCondInst(BinaryOperator &I) {
1340   bool Changed = SimplifyCommutative(I);
1341   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
1342   const Type *Ty = Op0->getType();
1343
1344   // setcc X, X
1345   if (Op0 == Op1)
1346     return ReplaceInstUsesWith(I, ConstantBool::get(isTrueWhenEqual(I)));
1347
1348   // setcc <global/alloca*>, 0 - Global/Stack value addresses are never null!
1349   if (isa<ConstantPointerNull>(Op1) && 
1350       (isa<GlobalValue>(Op0) || isa<AllocaInst>(Op0)))
1351     return ReplaceInstUsesWith(I, ConstantBool::get(!isTrueWhenEqual(I)));
1352
1353
1354   // setcc's with boolean values can always be turned into bitwise operations
1355   if (Ty == Type::BoolTy) {
1356     // If this is <, >, or !=, we can change this into a simple xor instruction
1357     if (!isTrueWhenEqual(I))
1358       return BinaryOperator::create(Instruction::Xor, Op0, Op1);
1359
1360     // Otherwise we need to make a temporary intermediate instruction and insert
1361     // it into the instruction stream.  This is what we are after:
1362     //
1363     //  seteq bool %A, %B -> ~(A^B)
1364     //  setle bool %A, %B -> ~A | B
1365     //  setge bool %A, %B -> A | ~B
1366     //
1367     if (I.getOpcode() == Instruction::SetEQ) {  // seteq case
1368       Instruction *Xor = BinaryOperator::create(Instruction::Xor, Op0, Op1,
1369                                                 I.getName()+"tmp");
1370       InsertNewInstBefore(Xor, I);
1371       return BinaryOperator::createNot(Xor);
1372     }
1373
1374     // Handle the setXe cases...
1375     assert(I.getOpcode() == Instruction::SetGE ||
1376            I.getOpcode() == Instruction::SetLE);
1377
1378     if (I.getOpcode() == Instruction::SetGE)
1379       std::swap(Op0, Op1);                   // Change setge -> setle
1380
1381     // Now we just have the SetLE case.
1382     Instruction *Not = BinaryOperator::createNot(Op0, I.getName()+"tmp");
1383     InsertNewInstBefore(Not, I);
1384     return BinaryOperator::create(Instruction::Or, Not, Op1);
1385   }
1386
1387   // Check to see if we are doing one of many comparisons against constant
1388   // integers at the end of their ranges...
1389   //
1390   if (ConstantInt *CI = dyn_cast<ConstantInt>(Op1)) {
1391     // Simplify seteq and setne instructions...
1392     if (I.getOpcode() == Instruction::SetEQ ||
1393         I.getOpcode() == Instruction::SetNE) {
1394       bool isSetNE = I.getOpcode() == Instruction::SetNE;
1395
1396       // If the first operand is (and|or|xor) with a constant, and the second
1397       // operand is a constant, simplify a bit.
1398       if (BinaryOperator *BO = dyn_cast<BinaryOperator>(Op0)) {
1399         switch (BO->getOpcode()) {
1400         case Instruction::Add:
1401           if (CI->isNullValue()) {
1402             // Replace ((add A, B) != 0) with (A != -B) if A or B is
1403             // efficiently invertible, or if the add has just this one use.
1404             Value *BOp0 = BO->getOperand(0), *BOp1 = BO->getOperand(1);
1405             if (Value *NegVal = dyn_castNegVal(BOp1))
1406               return new SetCondInst(I.getOpcode(), BOp0, NegVal);
1407             else if (Value *NegVal = dyn_castNegVal(BOp0))
1408               return new SetCondInst(I.getOpcode(), NegVal, BOp1);
1409             else if (BO->hasOneUse()) {
1410               Instruction *Neg = BinaryOperator::createNeg(BOp1, BO->getName());
1411               BO->setName("");
1412               InsertNewInstBefore(Neg, I);
1413               return new SetCondInst(I.getOpcode(), BOp0, Neg);
1414             }
1415           }
1416           break;
1417         case Instruction::Xor:
1418           // For the xor case, we can xor two constants together, eliminating
1419           // the explicit xor.
1420           if (Constant *BOC = dyn_cast<Constant>(BO->getOperand(1)))
1421             return BinaryOperator::create(I.getOpcode(), BO->getOperand(0),
1422                                   ConstantExpr::get(Instruction::Xor, CI, BOC));
1423
1424           // FALLTHROUGH
1425         case Instruction::Sub:
1426           // Replace (([sub|xor] A, B) != 0) with (A != B)
1427           if (CI->isNullValue())
1428             return new SetCondInst(I.getOpcode(), BO->getOperand(0),
1429                                    BO->getOperand(1));
1430           break;
1431
1432         case Instruction::Or:
1433           // If bits are being or'd in that are not present in the constant we
1434           // are comparing against, then the comparison could never succeed!
1435           if (Constant *BOC = dyn_cast<Constant>(BO->getOperand(1))) {
1436             Constant *NotCI = NotConstant(CI);
1437             if (!ConstantExpr::get(Instruction::And, BOC, NotCI)->isNullValue())
1438               return ReplaceInstUsesWith(I, ConstantBool::get(isSetNE));
1439           }
1440           break;
1441
1442         case Instruction::And:
1443           if (ConstantInt *BOC = dyn_cast<ConstantInt>(BO->getOperand(1))) {
1444             // If bits are being compared against that are and'd out, then the
1445             // comparison can never succeed!
1446             if (!ConstantExpr::get(Instruction::And, CI,
1447                                    NotConstant(BOC))->isNullValue())
1448               return ReplaceInstUsesWith(I, ConstantBool::get(isSetNE));
1449
1450             // Replace (and X, (1 << size(X)-1) != 0) with x < 0, converting X
1451             // to be a signed value as appropriate.
1452             if (isSignBit(BOC)) {
1453               Value *X = BO->getOperand(0);
1454               // If 'X' is not signed, insert a cast now...
1455               if (!BOC->getType()->isSigned()) {
1456                 const Type *DestTy = getSignedIntegralType(BOC->getType());
1457                 CastInst *NewCI = new CastInst(X,DestTy,X->getName()+".signed");
1458                 InsertNewInstBefore(NewCI, I);
1459                 X = NewCI;
1460               }
1461               return new SetCondInst(isSetNE ? Instruction::SetLT :
1462                                          Instruction::SetGE, X,
1463                                      Constant::getNullValue(X->getType()));
1464             }
1465           }
1466         default: break;
1467         }
1468       }
1469     } else {  // Not a SetEQ/SetNE
1470       // If the LHS is a cast from an integral value of the same size, 
1471       if (CastInst *Cast = dyn_cast<CastInst>(Op0)) {
1472         Value *CastOp = Cast->getOperand(0);
1473         const Type *SrcTy = CastOp->getType();
1474         unsigned SrcTySize = SrcTy->getPrimitiveSize();
1475         if (SrcTy != Cast->getType() && SrcTy->isInteger() &&
1476             SrcTySize == Cast->getType()->getPrimitiveSize()) {
1477           assert((SrcTy->isSigned() ^ Cast->getType()->isSigned()) && 
1478                  "Source and destination signednesses should differ!");
1479           if (Cast->getType()->isSigned()) {
1480             // If this is a signed comparison, check for comparisons in the
1481             // vicinity of zero.
1482             if (I.getOpcode() == Instruction::SetLT && CI->isNullValue())
1483               // X < 0  => x > 127
1484               return BinaryOperator::create(Instruction::SetGT, CastOp,
1485                          ConstantUInt::get(SrcTy, (1ULL << (SrcTySize*8-1))-1));
1486             else if (I.getOpcode() == Instruction::SetGT &&
1487                      cast<ConstantSInt>(CI)->getValue() == -1)
1488               // X > -1  => x < 128
1489               return BinaryOperator::create(Instruction::SetLT, CastOp,
1490                          ConstantUInt::get(SrcTy, 1ULL << (SrcTySize*8-1)));
1491           } else {
1492             ConstantUInt *CUI = cast<ConstantUInt>(CI);
1493             if (I.getOpcode() == Instruction::SetLT &&
1494                 CUI->getValue() == 1ULL << (SrcTySize*8-1))
1495               // X < 128 => X > -1
1496               return BinaryOperator::create(Instruction::SetGT, CastOp,
1497                                             ConstantSInt::get(SrcTy, -1));
1498             else if (I.getOpcode() == Instruction::SetGT &&
1499                      CUI->getValue() == (1ULL << (SrcTySize*8-1))-1)
1500               // X > 127 => X < 0
1501               return BinaryOperator::create(Instruction::SetLT, CastOp,
1502                                             Constant::getNullValue(SrcTy));
1503           }
1504         }
1505       }
1506     }
1507
1508     // Check to see if we are comparing against the minimum or maximum value...
1509     if (CI->isMinValue()) {
1510       if (I.getOpcode() == Instruction::SetLT)       // A < MIN -> FALSE
1511         return ReplaceInstUsesWith(I, ConstantBool::False);
1512       if (I.getOpcode() == Instruction::SetGE)       // A >= MIN -> TRUE
1513         return ReplaceInstUsesWith(I, ConstantBool::True);
1514       if (I.getOpcode() == Instruction::SetLE)       // A <= MIN -> A == MIN
1515         return BinaryOperator::create(Instruction::SetEQ, Op0, Op1);
1516       if (I.getOpcode() == Instruction::SetGT)       // A > MIN -> A != MIN
1517         return BinaryOperator::create(Instruction::SetNE, Op0, Op1);
1518
1519     } else if (CI->isMaxValue()) {
1520       if (I.getOpcode() == Instruction::SetGT)       // A > MAX -> FALSE
1521         return ReplaceInstUsesWith(I, ConstantBool::False);
1522       if (I.getOpcode() == Instruction::SetLE)       // A <= MAX -> TRUE
1523         return ReplaceInstUsesWith(I, ConstantBool::True);
1524       if (I.getOpcode() == Instruction::SetGE)       // A >= MAX -> A == MAX
1525         return BinaryOperator::create(Instruction::SetEQ, Op0, Op1);
1526       if (I.getOpcode() == Instruction::SetLT)       // A < MAX -> A != MAX
1527         return BinaryOperator::create(Instruction::SetNE, Op0, Op1);
1528
1529       // Comparing against a value really close to min or max?
1530     } else if (isMinValuePlusOne(CI)) {
1531       if (I.getOpcode() == Instruction::SetLT)       // A < MIN+1 -> A == MIN
1532         return BinaryOperator::create(Instruction::SetEQ, Op0, SubOne(CI));
1533       if (I.getOpcode() == Instruction::SetGE)       // A >= MIN-1 -> A != MIN
1534         return BinaryOperator::create(Instruction::SetNE, Op0, SubOne(CI));
1535
1536     } else if (isMaxValueMinusOne(CI)) {
1537       if (I.getOpcode() == Instruction::SetGT)       // A > MAX-1 -> A == MAX
1538         return BinaryOperator::create(Instruction::SetEQ, Op0, AddOne(CI));
1539       if (I.getOpcode() == Instruction::SetLE)       // A <= MAX-1 -> A != MAX
1540         return BinaryOperator::create(Instruction::SetNE, Op0, AddOne(CI));
1541     }
1542
1543     // If we still have a setle or setge instruction, turn it into the
1544     // appropriate setlt or setgt instruction.  Since the border cases have
1545     // already been handled above, this requires little checking.
1546     //
1547     if (I.getOpcode() == Instruction::SetLE)
1548       return BinaryOperator::create(Instruction::SetLT, Op0, AddOne(CI));
1549     if (I.getOpcode() == Instruction::SetGE)
1550       return BinaryOperator::create(Instruction::SetGT, Op0, SubOne(CI));
1551   }
1552
1553   // Test to see if the operands of the setcc are casted versions of other
1554   // values.  If the cast can be stripped off both arguments, we do so now.
1555   if (CastInst *CI = dyn_cast<CastInst>(Op0)) {
1556     Value *CastOp0 = CI->getOperand(0);
1557     if (CastOp0->getType()->isLosslesslyConvertibleTo(CI->getType()) &&
1558         (isa<Constant>(Op1) || isa<CastInst>(Op1)) &&
1559         (I.getOpcode() == Instruction::SetEQ ||
1560          I.getOpcode() == Instruction::SetNE)) {
1561       // We keep moving the cast from the left operand over to the right
1562       // operand, where it can often be eliminated completely.
1563       Op0 = CastOp0;
1564       
1565       // If operand #1 is a cast instruction, see if we can eliminate it as
1566       // well.
1567       if (CastInst *CI2 = dyn_cast<CastInst>(Op1))
1568         if (CI2->getOperand(0)->getType()->isLosslesslyConvertibleTo(
1569                                                                Op0->getType()))
1570           Op1 = CI2->getOperand(0);
1571       
1572       // If Op1 is a constant, we can fold the cast into the constant.
1573       if (Op1->getType() != Op0->getType())
1574         if (Constant *Op1C = dyn_cast<Constant>(Op1)) {
1575           Op1 = ConstantExpr::getCast(Op1C, Op0->getType());
1576         } else {
1577           // Otherwise, cast the RHS right before the setcc
1578           Op1 = new CastInst(Op1, Op0->getType(), Op1->getName());
1579           InsertNewInstBefore(cast<Instruction>(Op1), I);
1580         }
1581       return BinaryOperator::create(I.getOpcode(), Op0, Op1);
1582     }
1583
1584     // Handle the special case of: setcc (cast bool to X), <cst>
1585     // This comes up when you have code like
1586     //   int X = A < B;
1587     //   if (X) ...
1588     // For generality, we handle any zero-extension of any operand comparison
1589     // with a constant.
1590     if (ConstantInt *ConstantRHS = dyn_cast<ConstantInt>(Op1)) {
1591       const Type *SrcTy = CastOp0->getType();
1592       const Type *DestTy = Op0->getType();
1593       if (SrcTy->getPrimitiveSize() < DestTy->getPrimitiveSize() &&
1594           (SrcTy->isUnsigned() || SrcTy == Type::BoolTy)) {
1595         // Ok, we have an expansion of operand 0 into a new type.  Get the
1596         // constant value, masink off bits which are not set in the RHS.  These
1597         // could be set if the destination value is signed.
1598         uint64_t ConstVal = ConstantRHS->getRawValue();
1599         ConstVal &= (1ULL << DestTy->getPrimitiveSize()*8)-1;
1600
1601         // If the constant we are comparing it with has high bits set, which
1602         // don't exist in the original value, the values could never be equal,
1603         // because the source would be zero extended.
1604         unsigned SrcBits =
1605           SrcTy == Type::BoolTy ? 1 : SrcTy->getPrimitiveSize()*8;
1606         bool HasSignBit = ConstVal & (1ULL << (DestTy->getPrimitiveSize()*8-1));
1607         if (ConstVal & ~((1ULL << SrcBits)-1)) {
1608           switch (I.getOpcode()) {
1609           default: assert(0 && "Unknown comparison type!");
1610           case Instruction::SetEQ:
1611             return ReplaceInstUsesWith(I, ConstantBool::False);
1612           case Instruction::SetNE:
1613             return ReplaceInstUsesWith(I, ConstantBool::True);
1614           case Instruction::SetLT:
1615           case Instruction::SetLE:
1616             if (DestTy->isSigned() && HasSignBit)
1617               return ReplaceInstUsesWith(I, ConstantBool::False);
1618             return ReplaceInstUsesWith(I, ConstantBool::True);
1619           case Instruction::SetGT:
1620           case Instruction::SetGE:
1621             if (DestTy->isSigned() && HasSignBit)
1622               return ReplaceInstUsesWith(I, ConstantBool::True);
1623             return ReplaceInstUsesWith(I, ConstantBool::False);
1624           }
1625         }
1626         
1627         // Otherwise, we can replace the setcc with a setcc of the smaller
1628         // operand value.
1629         Op1 = ConstantExpr::getCast(cast<Constant>(Op1), SrcTy);
1630         return BinaryOperator::create(I.getOpcode(), CastOp0, Op1);
1631       }
1632     }
1633   }
1634   return Changed ? &I : 0;
1635 }
1636
1637
1638
1639 Instruction *InstCombiner::visitShiftInst(ShiftInst &I) {
1640   assert(I.getOperand(1)->getType() == Type::UByteTy);
1641   Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
1642   bool isLeftShift = I.getOpcode() == Instruction::Shl;
1643
1644   // shl X, 0 == X and shr X, 0 == X
1645   // shl 0, X == 0 and shr 0, X == 0
1646   if (Op1 == Constant::getNullValue(Type::UByteTy) ||
1647       Op0 == Constant::getNullValue(Op0->getType()))
1648     return ReplaceInstUsesWith(I, Op0);
1649
1650   // shr int -1, X = -1   (for any arithmetic shift rights of ~0)
1651   if (!isLeftShift)
1652     if (ConstantSInt *CSI = dyn_cast<ConstantSInt>(Op0))
1653       if (CSI->isAllOnesValue())
1654         return ReplaceInstUsesWith(I, CSI);
1655
1656   if (ConstantUInt *CUI = dyn_cast<ConstantUInt>(Op1)) {
1657     // shl uint X, 32 = 0 and shr ubyte Y, 9 = 0, ... just don't eliminate shr
1658     // of a signed value.
1659     //
1660     unsigned TypeBits = Op0->getType()->getPrimitiveSize()*8;
1661     if (CUI->getValue() >= TypeBits) {
1662       if (!Op0->getType()->isSigned() || isLeftShift)
1663         return ReplaceInstUsesWith(I, Constant::getNullValue(Op0->getType()));
1664       else {
1665         I.setOperand(1, ConstantUInt::get(Type::UByteTy, TypeBits-1));
1666         return &I;
1667       }
1668     }
1669
1670     // ((X*C1) << C2) == (X * (C1 << C2))
1671     if (BinaryOperator *BO = dyn_cast<BinaryOperator>(Op0))
1672       if (BO->getOpcode() == Instruction::Mul && isLeftShift)
1673         if (Constant *BOOp = dyn_cast<Constant>(BO->getOperand(1)))
1674           return BinaryOperator::create(Instruction::Mul, BO->getOperand(0),
1675                                 ConstantExpr::get(Instruction::Shl, BOOp, CUI));
1676     
1677
1678     // If the operand is an bitwise operator with a constant RHS, and the
1679     // shift is the only use, we can pull it out of the shift.
1680     if (Op0->hasOneUse())
1681       if (BinaryOperator *Op0BO = dyn_cast<BinaryOperator>(Op0))
1682         if (ConstantInt *Op0C = dyn_cast<ConstantInt>(Op0BO->getOperand(1))) {
1683           bool isValid = true;     // Valid only for And, Or, Xor
1684           bool highBitSet = false; // Transform if high bit of constant set?
1685
1686           switch (Op0BO->getOpcode()) {
1687           default: isValid = false; break;   // Do not perform transform!
1688           case Instruction::Or:
1689           case Instruction::Xor:
1690             highBitSet = false;
1691             break;
1692           case Instruction::And:
1693             highBitSet = true;
1694             break;
1695           }
1696
1697           // If this is a signed shift right, and the high bit is modified
1698           // by the logical operation, do not perform the transformation.
1699           // The highBitSet boolean indicates the value of the high bit of
1700           // the constant which would cause it to be modified for this
1701           // operation.
1702           //
1703           if (isValid && !isLeftShift && !I.getType()->isUnsigned()) {
1704             uint64_t Val = Op0C->getRawValue();
1705             isValid = ((Val & (1 << (TypeBits-1))) != 0) == highBitSet;
1706           }
1707
1708           if (isValid) {
1709             Constant *NewRHS = ConstantExpr::get(I.getOpcode(), Op0C, CUI);
1710
1711             Instruction *NewShift =
1712               new ShiftInst(I.getOpcode(), Op0BO->getOperand(0), CUI,
1713                             Op0BO->getName());
1714             Op0BO->setName("");
1715             InsertNewInstBefore(NewShift, I);
1716
1717             return BinaryOperator::create(Op0BO->getOpcode(), NewShift,
1718                                           NewRHS);
1719           }
1720         }
1721
1722     // If this is a shift of a shift, see if we can fold the two together...
1723     if (ShiftInst *Op0SI = dyn_cast<ShiftInst>(Op0))
1724       if (ConstantUInt *ShiftAmt1C =
1725                                  dyn_cast<ConstantUInt>(Op0SI->getOperand(1))) {
1726         unsigned ShiftAmt1 = ShiftAmt1C->getValue();
1727         unsigned ShiftAmt2 = CUI->getValue();
1728         
1729         // Check for (A << c1) << c2   and   (A >> c1) >> c2
1730         if (I.getOpcode() == Op0SI->getOpcode()) {
1731           unsigned Amt = ShiftAmt1+ShiftAmt2;   // Fold into one big shift...
1732           if (Op0->getType()->getPrimitiveSize()*8 < Amt)
1733             Amt = Op0->getType()->getPrimitiveSize()*8;
1734           return new ShiftInst(I.getOpcode(), Op0SI->getOperand(0),
1735                                ConstantUInt::get(Type::UByteTy, Amt));
1736         }
1737         
1738         // Check for (A << c1) >> c2 or visaversa.  If we are dealing with
1739         // signed types, we can only support the (A >> c1) << c2 configuration,
1740         // because it can not turn an arbitrary bit of A into a sign bit.
1741         if (I.getType()->isUnsigned() || isLeftShift) {
1742           // Calculate bitmask for what gets shifted off the edge...
1743           Constant *C = ConstantIntegral::getAllOnesValue(I.getType());
1744           if (isLeftShift)
1745             C = ConstantExpr::get(Instruction::Shl, C, ShiftAmt1C);
1746           else
1747             C = ConstantExpr::get(Instruction::Shr, C, ShiftAmt1C);
1748           
1749           Instruction *Mask =
1750             BinaryOperator::create(Instruction::And, Op0SI->getOperand(0),
1751                                    C, Op0SI->getOperand(0)->getName()+".mask");
1752           InsertNewInstBefore(Mask, I);
1753           
1754           // Figure out what flavor of shift we should use...
1755           if (ShiftAmt1 == ShiftAmt2)
1756             return ReplaceInstUsesWith(I, Mask);  // (A << c) >> c  === A & c2
1757           else if (ShiftAmt1 < ShiftAmt2) {
1758             return new ShiftInst(I.getOpcode(), Mask,
1759                          ConstantUInt::get(Type::UByteTy, ShiftAmt2-ShiftAmt1));
1760           } else {
1761             return new ShiftInst(Op0SI->getOpcode(), Mask,
1762                          ConstantUInt::get(Type::UByteTy, ShiftAmt1-ShiftAmt2));
1763           }
1764         }
1765       }
1766   }
1767
1768   return 0;
1769 }
1770
1771
1772 // isEliminableCastOfCast - Return true if it is valid to eliminate the CI
1773 // instruction.
1774 //
1775 static inline bool isEliminableCastOfCast(const Type *SrcTy, const Type *MidTy,
1776                                           const Type *DstTy) {
1777
1778   // It is legal to eliminate the instruction if casting A->B->A if the sizes
1779   // are identical and the bits don't get reinterpreted (for example 
1780   // int->float->int would not be allowed)
1781   if (SrcTy == DstTy && SrcTy->isLosslesslyConvertibleTo(MidTy))
1782     return true;
1783
1784   // Allow free casting and conversion of sizes as long as the sign doesn't
1785   // change...
1786   if (SrcTy->isIntegral() && MidTy->isIntegral() && DstTy->isIntegral()) {
1787     unsigned SrcSize = SrcTy->getPrimitiveSize();
1788     unsigned MidSize = MidTy->getPrimitiveSize();
1789     unsigned DstSize = DstTy->getPrimitiveSize();
1790
1791     // Cases where we are monotonically decreasing the size of the type are
1792     // always ok, regardless of what sign changes are going on.
1793     //
1794     if (SrcSize >= MidSize && MidSize >= DstSize)
1795       return true;
1796
1797     // Cases where the source and destination type are the same, but the middle
1798     // type is bigger are noops.
1799     //
1800     if (SrcSize == DstSize && MidSize > SrcSize)
1801       return true;
1802
1803     // If we are monotonically growing, things are more complex.
1804     //
1805     if (SrcSize <= MidSize && MidSize <= DstSize) {
1806       // We have eight combinations of signedness to worry about. Here's the
1807       // table:
1808       static const int SignTable[8] = {
1809         // CODE, SrcSigned, MidSigned, DstSigned, Comment
1810         1,     //   U          U          U       Always ok
1811         1,     //   U          U          S       Always ok
1812         3,     //   U          S          U       Ok iff SrcSize != MidSize
1813         3,     //   U          S          S       Ok iff SrcSize != MidSize
1814         0,     //   S          U          U       Never ok
1815         2,     //   S          U          S       Ok iff MidSize == DstSize
1816         1,     //   S          S          U       Always ok
1817         1,     //   S          S          S       Always ok
1818       };
1819
1820       // Choose an action based on the current entry of the signtable that this
1821       // cast of cast refers to...
1822       unsigned Row = SrcTy->isSigned()*4+MidTy->isSigned()*2+DstTy->isSigned();
1823       switch (SignTable[Row]) {
1824       case 0: return false;              // Never ok
1825       case 1: return true;               // Always ok
1826       case 2: return MidSize == DstSize; // Ok iff MidSize == DstSize
1827       case 3:                            // Ok iff SrcSize != MidSize
1828         return SrcSize != MidSize || SrcTy == Type::BoolTy;
1829       default: assert(0 && "Bad entry in sign table!");
1830       }
1831     }
1832   }
1833
1834   // Otherwise, we cannot succeed.  Specifically we do not want to allow things
1835   // like:  short -> ushort -> uint, because this can create wrong results if
1836   // the input short is negative!
1837   //
1838   return false;
1839 }
1840
1841 static bool ValueRequiresCast(const Value *V, const Type *Ty) {
1842   if (V->getType() == Ty || isa<Constant>(V)) return false;
1843   if (const CastInst *CI = dyn_cast<CastInst>(V))
1844     if (isEliminableCastOfCast(CI->getOperand(0)->getType(), CI->getType(), Ty))
1845       return false;
1846   return true;
1847 }
1848
1849 /// InsertOperandCastBefore - This inserts a cast of V to DestTy before the
1850 /// InsertBefore instruction.  This is specialized a bit to avoid inserting
1851 /// casts that are known to not do anything...
1852 ///
1853 Value *InstCombiner::InsertOperandCastBefore(Value *V, const Type *DestTy,
1854                                              Instruction *InsertBefore) {
1855   if (V->getType() == DestTy) return V;
1856   if (Constant *C = dyn_cast<Constant>(V))
1857     return ConstantExpr::getCast(C, DestTy);
1858
1859   CastInst *CI = new CastInst(V, DestTy, V->getName());
1860   InsertNewInstBefore(CI, *InsertBefore);
1861   return CI;
1862 }
1863
1864 // CastInst simplification
1865 //
1866 Instruction *InstCombiner::visitCastInst(CastInst &CI) {
1867   Value *Src = CI.getOperand(0);
1868
1869   // If the user is casting a value to the same type, eliminate this cast
1870   // instruction...
1871   if (CI.getType() == Src->getType())
1872     return ReplaceInstUsesWith(CI, Src);
1873
1874   // If casting the result of another cast instruction, try to eliminate this
1875   // one!
1876   //
1877   if (CastInst *CSrc = dyn_cast<CastInst>(Src)) {
1878     if (isEliminableCastOfCast(CSrc->getOperand(0)->getType(),
1879                                CSrc->getType(), CI.getType())) {
1880       // This instruction now refers directly to the cast's src operand.  This
1881       // has a good chance of making CSrc dead.
1882       CI.setOperand(0, CSrc->getOperand(0));
1883       return &CI;
1884     }
1885
1886     // If this is an A->B->A cast, and we are dealing with integral types, try
1887     // to convert this into a logical 'and' instruction.
1888     //
1889     if (CSrc->getOperand(0)->getType() == CI.getType() &&
1890         CI.getType()->isInteger() && CSrc->getType()->isInteger() &&
1891         CI.getType()->isUnsigned() && CSrc->getType()->isUnsigned() &&
1892         CSrc->getType()->getPrimitiveSize() < CI.getType()->getPrimitiveSize()){
1893       assert(CSrc->getType() != Type::ULongTy &&
1894              "Cannot have type bigger than ulong!");
1895       uint64_t AndValue = (1ULL << CSrc->getType()->getPrimitiveSize()*8)-1;
1896       Constant *AndOp = ConstantUInt::get(CI.getType(), AndValue);
1897       return BinaryOperator::create(Instruction::And, CSrc->getOperand(0),
1898                                     AndOp);
1899     }
1900   }
1901
1902   // If casting the result of a getelementptr instruction with no offset, turn
1903   // this into a cast of the original pointer!
1904   //
1905   if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(Src)) {
1906     bool AllZeroOperands = true;
1907     for (unsigned i = 1, e = GEP->getNumOperands(); i != e; ++i)
1908       if (!isa<Constant>(GEP->getOperand(i)) ||
1909           !cast<Constant>(GEP->getOperand(i))->isNullValue()) {
1910         AllZeroOperands = false;
1911         break;
1912       }
1913     if (AllZeroOperands) {
1914       CI.setOperand(0, GEP->getOperand(0));
1915       return &CI;
1916     }
1917   }
1918
1919   // If we are casting a malloc or alloca to a pointer to a type of the same
1920   // size, rewrite the allocation instruction to allocate the "right" type.
1921   //
1922   if (AllocationInst *AI = dyn_cast<AllocationInst>(Src))
1923     if (AI->hasOneUse() && !AI->isArrayAllocation())
1924       if (const PointerType *PTy = dyn_cast<PointerType>(CI.getType())) {
1925         // Get the type really allocated and the type casted to...
1926         const Type *AllocElTy = AI->getAllocatedType();
1927         unsigned AllocElTySize = TD->getTypeSize(AllocElTy);
1928         const Type *CastElTy = PTy->getElementType();
1929         unsigned CastElTySize = TD->getTypeSize(CastElTy);
1930
1931         // If the allocation is for an even multiple of the cast type size
1932         if (CastElTySize && (AllocElTySize % CastElTySize == 0)) {
1933           Value *Amt = ConstantUInt::get(Type::UIntTy, 
1934                                          AllocElTySize/CastElTySize);
1935           std::string Name = AI->getName(); AI->setName("");
1936           AllocationInst *New;
1937           if (isa<MallocInst>(AI))
1938             New = new MallocInst(CastElTy, Amt, Name);
1939           else
1940             New = new AllocaInst(CastElTy, Amt, Name);
1941           InsertNewInstBefore(New, CI);
1942           return ReplaceInstUsesWith(CI, New);
1943         }
1944       }
1945
1946   // If the source value is an instruction with only this use, we can attempt to
1947   // propagate the cast into the instruction.  Also, only handle integral types
1948   // for now.
1949   if (Instruction *SrcI = dyn_cast<Instruction>(Src))
1950     if (SrcI->hasOneUse() && Src->getType()->isIntegral() &&
1951         CI.getType()->isInteger()) {  // Don't mess with casts to bool here
1952       const Type *DestTy = CI.getType();
1953       unsigned SrcBitSize = getTypeSizeInBits(Src->getType());
1954       unsigned DestBitSize = getTypeSizeInBits(DestTy);
1955
1956       Value *Op0 = SrcI->getNumOperands() > 0 ? SrcI->getOperand(0) : 0;
1957       Value *Op1 = SrcI->getNumOperands() > 1 ? SrcI->getOperand(1) : 0;
1958
1959       switch (SrcI->getOpcode()) {
1960       case Instruction::Add:
1961       case Instruction::Mul:
1962       case Instruction::And:
1963       case Instruction::Or:
1964       case Instruction::Xor:
1965         // If we are discarding information, or just changing the sign, rewrite.
1966         if (DestBitSize <= SrcBitSize && DestBitSize != 1) {
1967           // Don't insert two casts if they cannot be eliminated.  We allow two
1968           // casts to be inserted if the sizes are the same.  This could only be
1969           // converting signedness, which is a noop.
1970           if (DestBitSize == SrcBitSize || !ValueRequiresCast(Op1, DestTy) ||
1971               !ValueRequiresCast(Op0, DestTy)) {
1972             Value *Op0c = InsertOperandCastBefore(Op0, DestTy, SrcI);
1973             Value *Op1c = InsertOperandCastBefore(Op1, DestTy, SrcI);
1974             return BinaryOperator::create(cast<BinaryOperator>(SrcI)
1975                              ->getOpcode(), Op0c, Op1c);
1976           }
1977         }
1978         break;
1979       case Instruction::Shl:
1980         // Allow changing the sign of the source operand.  Do not allow changing
1981         // the size of the shift, UNLESS the shift amount is a constant.  We
1982         // mush not change variable sized shifts to a smaller size, because it
1983         // is undefined to shift more bits out than exist in the value.
1984         if (DestBitSize == SrcBitSize ||
1985             (DestBitSize < SrcBitSize && isa<Constant>(Op1))) {
1986           Value *Op0c = InsertOperandCastBefore(Op0, DestTy, SrcI);
1987           return new ShiftInst(Instruction::Shl, Op0c, Op1);
1988         }
1989         break;
1990       }
1991     }
1992   
1993   return 0;
1994 }
1995
1996 Instruction *InstCombiner::visitSelectInst(SelectInst &SI) {
1997   if (ConstantBool *C = dyn_cast<ConstantBool>(SI.getCondition()))
1998     if (C == ConstantBool::True)
1999       return ReplaceInstUsesWith(SI, SI.getTrueValue());
2000     else {
2001       assert(C == ConstantBool::False);
2002       return ReplaceInstUsesWith(SI, SI.getFalseValue());
2003     }
2004   // Other transformations are possible!
2005
2006   return 0;
2007 }
2008
2009
2010 // CallInst simplification
2011 //
2012 Instruction *InstCombiner::visitCallInst(CallInst &CI) {
2013   // Intrinsics cannot occur in an invoke, so handle them here instead of in
2014   // visitCallSite.
2015   if (Function *F = CI.getCalledFunction())
2016     switch (F->getIntrinsicID()) {
2017     case Intrinsic::memmove:
2018     case Intrinsic::memcpy:
2019     case Intrinsic::memset:
2020       // memmove/cpy/set of zero bytes is a noop.
2021       if (Constant *NumBytes = dyn_cast<Constant>(CI.getOperand(3))) {
2022         if (NumBytes->isNullValue())
2023           return EraseInstFromFunction(CI);
2024       }
2025       break;
2026     default:
2027       break;
2028     }
2029
2030   return visitCallSite(&CI);
2031 }
2032
2033 // InvokeInst simplification
2034 //
2035 Instruction *InstCombiner::visitInvokeInst(InvokeInst &II) {
2036   return visitCallSite(&II);
2037 }
2038
2039 // visitCallSite - Improvements for call and invoke instructions.
2040 //
2041 Instruction *InstCombiner::visitCallSite(CallSite CS) {
2042   bool Changed = false;
2043
2044   // If the callee is a constexpr cast of a function, attempt to move the cast
2045   // to the arguments of the call/invoke.
2046   if (transformConstExprCastCall(CS)) return 0;
2047
2048   Value *Callee = CS.getCalledValue();
2049   const PointerType *PTy = cast<PointerType>(Callee->getType());
2050   const FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
2051   if (FTy->isVarArg()) {
2052     // See if we can optimize any arguments passed through the varargs area of
2053     // the call.
2054     for (CallSite::arg_iterator I = CS.arg_begin()+FTy->getNumParams(),
2055            E = CS.arg_end(); I != E; ++I)
2056       if (CastInst *CI = dyn_cast<CastInst>(*I)) {
2057         // If this cast does not effect the value passed through the varargs
2058         // area, we can eliminate the use of the cast.
2059         Value *Op = CI->getOperand(0);
2060         if (CI->getType()->isLosslesslyConvertibleTo(Op->getType())) {
2061           *I = Op;
2062           Changed = true;
2063         }
2064       }
2065   }
2066   
2067   return Changed ? CS.getInstruction() : 0;
2068 }
2069
2070 // transformConstExprCastCall - If the callee is a constexpr cast of a function,
2071 // attempt to move the cast to the arguments of the call/invoke.
2072 //
2073 bool InstCombiner::transformConstExprCastCall(CallSite CS) {
2074   if (!isa<ConstantExpr>(CS.getCalledValue())) return false;
2075   ConstantExpr *CE = cast<ConstantExpr>(CS.getCalledValue());
2076   if (CE->getOpcode() != Instruction::Cast ||
2077       !isa<ConstantPointerRef>(CE->getOperand(0)))
2078     return false;
2079   ConstantPointerRef *CPR = cast<ConstantPointerRef>(CE->getOperand(0));
2080   if (!isa<Function>(CPR->getValue())) return false;
2081   Function *Callee = cast<Function>(CPR->getValue());
2082   Instruction *Caller = CS.getInstruction();
2083
2084   // Okay, this is a cast from a function to a different type.  Unless doing so
2085   // would cause a type conversion of one of our arguments, change this call to
2086   // be a direct call with arguments casted to the appropriate types.
2087   //
2088   const FunctionType *FT = Callee->getFunctionType();
2089   const Type *OldRetTy = Caller->getType();
2090
2091   // Check to see if we are changing the return type...
2092   if (OldRetTy != FT->getReturnType()) {
2093     if (Callee->isExternal() &&
2094         !OldRetTy->isLosslesslyConvertibleTo(FT->getReturnType()) &&
2095         !Caller->use_empty())
2096       return false;   // Cannot transform this return value...
2097
2098     // If the callsite is an invoke instruction, and the return value is used by
2099     // a PHI node in a successor, we cannot change the return type of the call
2100     // because there is no place to put the cast instruction (without breaking
2101     // the critical edge).  Bail out in this case.
2102     if (!Caller->use_empty())
2103       if (InvokeInst *II = dyn_cast<InvokeInst>(Caller))
2104         for (Value::use_iterator UI = II->use_begin(), E = II->use_end();
2105              UI != E; ++UI)
2106           if (PHINode *PN = dyn_cast<PHINode>(*UI))
2107             if (PN->getParent() == II->getNormalDest() ||
2108                 PN->getParent() == II->getUnwindDest())
2109               return false;
2110   }
2111
2112   unsigned NumActualArgs = unsigned(CS.arg_end()-CS.arg_begin());
2113   unsigned NumCommonArgs = std::min(FT->getNumParams(), NumActualArgs);
2114                                     
2115   CallSite::arg_iterator AI = CS.arg_begin();
2116   for (unsigned i = 0, e = NumCommonArgs; i != e; ++i, ++AI) {
2117     const Type *ParamTy = FT->getParamType(i);
2118     bool isConvertible = (*AI)->getType()->isLosslesslyConvertibleTo(ParamTy);
2119     if (Callee->isExternal() && !isConvertible) return false;    
2120   }
2121
2122   if (FT->getNumParams() < NumActualArgs && !FT->isVarArg() &&
2123       Callee->isExternal())
2124     return false;   // Do not delete arguments unless we have a function body...
2125
2126   // Okay, we decided that this is a safe thing to do: go ahead and start
2127   // inserting cast instructions as necessary...
2128   std::vector<Value*> Args;
2129   Args.reserve(NumActualArgs);
2130
2131   AI = CS.arg_begin();
2132   for (unsigned i = 0; i != NumCommonArgs; ++i, ++AI) {
2133     const Type *ParamTy = FT->getParamType(i);
2134     if ((*AI)->getType() == ParamTy) {
2135       Args.push_back(*AI);
2136     } else {
2137       Instruction *Cast = new CastInst(*AI, ParamTy, "tmp");
2138       InsertNewInstBefore(Cast, *Caller);
2139       Args.push_back(Cast);
2140     }
2141   }
2142
2143   // If the function takes more arguments than the call was taking, add them
2144   // now...
2145   for (unsigned i = NumCommonArgs; i != FT->getNumParams(); ++i)
2146     Args.push_back(Constant::getNullValue(FT->getParamType(i)));
2147
2148   // If we are removing arguments to the function, emit an obnoxious warning...
2149   if (FT->getNumParams() < NumActualArgs)
2150     if (!FT->isVarArg()) {
2151       std::cerr << "WARNING: While resolving call to function '"
2152                 << Callee->getName() << "' arguments were dropped!\n";
2153     } else {
2154       // Add all of the arguments in their promoted form to the arg list...
2155       for (unsigned i = FT->getNumParams(); i != NumActualArgs; ++i, ++AI) {
2156         const Type *PTy = getPromotedType((*AI)->getType());
2157         if (PTy != (*AI)->getType()) {
2158           // Must promote to pass through va_arg area!
2159           Instruction *Cast = new CastInst(*AI, PTy, "tmp");
2160           InsertNewInstBefore(Cast, *Caller);
2161           Args.push_back(Cast);
2162         } else {
2163           Args.push_back(*AI);
2164         }
2165       }
2166     }
2167
2168   if (FT->getReturnType() == Type::VoidTy)
2169     Caller->setName("");   // Void type should not have a name...
2170
2171   Instruction *NC;
2172   if (InvokeInst *II = dyn_cast<InvokeInst>(Caller)) {
2173     NC = new InvokeInst(Callee, II->getNormalDest(), II->getUnwindDest(),
2174                         Args, Caller->getName(), Caller);
2175   } else {
2176     NC = new CallInst(Callee, Args, Caller->getName(), Caller);
2177   }
2178
2179   // Insert a cast of the return type as necessary...
2180   Value *NV = NC;
2181   if (Caller->getType() != NV->getType() && !Caller->use_empty()) {
2182     if (NV->getType() != Type::VoidTy) {
2183       NV = NC = new CastInst(NC, Caller->getType(), "tmp");
2184
2185       // If this is an invoke instruction, we should insert it after the first
2186       // non-phi, instruction in the normal successor block.
2187       if (InvokeInst *II = dyn_cast<InvokeInst>(Caller)) {
2188         BasicBlock::iterator I = II->getNormalDest()->begin();
2189         while (isa<PHINode>(I)) ++I;
2190         InsertNewInstBefore(NC, *I);
2191       } else {
2192         // Otherwise, it's a call, just insert cast right after the call instr
2193         InsertNewInstBefore(NC, *Caller);
2194       }
2195       AddUsersToWorkList(*Caller);
2196     } else {
2197       NV = Constant::getNullValue(Caller->getType());
2198     }
2199   }
2200
2201   if (Caller->getType() != Type::VoidTy && !Caller->use_empty())
2202     Caller->replaceAllUsesWith(NV);
2203   Caller->getParent()->getInstList().erase(Caller);
2204   removeFromWorkList(Caller);
2205   return true;
2206 }
2207
2208
2209
2210 // PHINode simplification
2211 //
2212 Instruction *InstCombiner::visitPHINode(PHINode &PN) {
2213   if (Value *V = hasConstantValue(&PN))
2214     return ReplaceInstUsesWith(PN, V);
2215
2216   // If the only user of this instruction is a cast instruction, and all of the
2217   // incoming values are constants, change this PHI to merge together the casted
2218   // constants.
2219   if (PN.hasOneUse())
2220     if (CastInst *CI = dyn_cast<CastInst>(PN.use_back()))
2221       if (CI->getType() != PN.getType()) {  // noop casts will be folded
2222         bool AllConstant = true;
2223         for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i)
2224           if (!isa<Constant>(PN.getIncomingValue(i))) {
2225             AllConstant = false;
2226             break;
2227           }
2228         if (AllConstant) {
2229           // Make a new PHI with all casted values.
2230           PHINode *New = new PHINode(CI->getType(), PN.getName(), &PN);
2231           for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i) {
2232             Constant *OldArg = cast<Constant>(PN.getIncomingValue(i));
2233             New->addIncoming(ConstantExpr::getCast(OldArg, New->getType()),
2234                              PN.getIncomingBlock(i));
2235           }
2236
2237           // Update the cast instruction.
2238           CI->setOperand(0, New);
2239           WorkList.push_back(CI);    // revisit the cast instruction to fold.
2240           WorkList.push_back(New);   // Make sure to revisit the new Phi
2241           return &PN;                // PN is now dead!
2242         }
2243       }
2244   return 0;
2245 }
2246
2247
2248 Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
2249   // Is it 'getelementptr %P, long 0'  or 'getelementptr %P'
2250   // If so, eliminate the noop.
2251   if (GEP.getNumOperands() == 1)
2252     return ReplaceInstUsesWith(GEP, GEP.getOperand(0));
2253
2254   bool HasZeroPointerIndex = false;
2255   if (Constant *C = dyn_cast<Constant>(GEP.getOperand(1)))
2256     HasZeroPointerIndex = C->isNullValue();
2257
2258   if (GEP.getNumOperands() == 2 && HasZeroPointerIndex)
2259     return ReplaceInstUsesWith(GEP, GEP.getOperand(0));
2260
2261   // Combine Indices - If the source pointer to this getelementptr instruction
2262   // is a getelementptr instruction, combine the indices of the two
2263   // getelementptr instructions into a single instruction.
2264   //
2265   std::vector<Value*> SrcGEPOperands;
2266   if (GetElementPtrInst *Src = dyn_cast<GetElementPtrInst>(GEP.getOperand(0))) {
2267     SrcGEPOperands.assign(Src->op_begin(), Src->op_end());
2268   } else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(GEP.getOperand(0))) {
2269     if (CE->getOpcode() == Instruction::GetElementPtr)
2270       SrcGEPOperands.assign(CE->op_begin(), CE->op_end());
2271   }
2272
2273   if (!SrcGEPOperands.empty()) {
2274     std::vector<Value *> Indices;
2275   
2276     // Can we combine the two pointer arithmetics offsets?
2277     if (SrcGEPOperands.size() == 2 && isa<Constant>(SrcGEPOperands[1]) &&
2278         isa<Constant>(GEP.getOperand(1))) {
2279       // Replace: gep (gep %P, long C1), long C2, ...
2280       // With:    gep %P, long (C1+C2), ...
2281       Value *Sum = ConstantExpr::get(Instruction::Add,
2282                                      cast<Constant>(SrcGEPOperands[1]),
2283                                      cast<Constant>(GEP.getOperand(1)));
2284       assert(Sum && "Constant folding of longs failed!?");
2285       GEP.setOperand(0, SrcGEPOperands[0]);
2286       GEP.setOperand(1, Sum);
2287       if (Instruction *I = dyn_cast<Instruction>(GEP.getOperand(0)))
2288         AddUsersToWorkList(*I);   // Reduce use count of Src
2289       return &GEP;
2290     } else if (SrcGEPOperands.size() == 2) {
2291       // Replace: gep (gep %P, long B), long A, ...
2292       // With:    T = long A+B; gep %P, T, ...
2293       //
2294       // Note that if our source is a gep chain itself that we wait for that
2295       // chain to be resolved before we perform this transformation.  This
2296       // avoids us creating a TON of code in some cases.
2297       //
2298       if (isa<GetElementPtrInst>(SrcGEPOperands[0]) &&
2299           cast<Instruction>(SrcGEPOperands[0])->getNumOperands() == 2)
2300         return 0;   // Wait until our source is folded to completion.
2301
2302       Value *Sum = BinaryOperator::create(Instruction::Add, SrcGEPOperands[1],
2303                                           GEP.getOperand(1),
2304                                           GEP.getOperand(0)->getName()+".sum",
2305                                           &GEP);
2306       GEP.setOperand(0, SrcGEPOperands[0]);
2307       GEP.setOperand(1, Sum);
2308       WorkList.push_back(cast<Instruction>(Sum));
2309       return &GEP;
2310     } else if (*GEP.idx_begin() == Constant::getNullValue(Type::LongTy) &&
2311                SrcGEPOperands.size() != 1) { 
2312       // Otherwise we can do the fold if the first index of the GEP is a zero
2313       Indices.insert(Indices.end(), SrcGEPOperands.begin()+1,
2314                      SrcGEPOperands.end());
2315       Indices.insert(Indices.end(), GEP.idx_begin()+1, GEP.idx_end());
2316     } else if (SrcGEPOperands.back() == Constant::getNullValue(Type::LongTy)) {
2317       // FIXME: when we allow indices to be non-long values, support this for
2318       // other types!
2319
2320       // If the src gep ends with a constant array index, merge this get into
2321       // it, even if we have a non-zero array index.
2322       Indices.insert(Indices.end(), SrcGEPOperands.begin()+1,
2323                      SrcGEPOperands.end()-1);
2324       Indices.insert(Indices.end(), GEP.idx_begin(), GEP.idx_end());
2325     }
2326
2327     if (!Indices.empty())
2328       return new GetElementPtrInst(SrcGEPOperands[0], Indices, GEP.getName());
2329
2330   } else if (GlobalValue *GV = dyn_cast<GlobalValue>(GEP.getOperand(0))) {
2331     // GEP of global variable.  If all of the indices for this GEP are
2332     // constants, we can promote this to a constexpr instead of an instruction.
2333
2334     // Scan for nonconstants...
2335     std::vector<Constant*> Indices;
2336     User::op_iterator I = GEP.idx_begin(), E = GEP.idx_end();
2337     for (; I != E && isa<Constant>(*I); ++I)
2338       Indices.push_back(cast<Constant>(*I));
2339
2340     if (I == E) {  // If they are all constants...
2341       Constant *CE =
2342         ConstantExpr::getGetElementPtr(ConstantPointerRef::get(GV), Indices);
2343
2344       // Replace all uses of the GEP with the new constexpr...
2345       return ReplaceInstUsesWith(GEP, CE);
2346     }
2347   } else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(GEP.getOperand(0))) {
2348     if (CE->getOpcode() == Instruction::Cast) {
2349       if (HasZeroPointerIndex) {
2350         // transform: GEP (cast [10 x ubyte]* X to [0 x ubyte]*), long 0, ...
2351         // into     : GEP [10 x ubyte]* X, long 0, ...
2352         //
2353         // This occurs when the program declares an array extern like "int X[];"
2354         //
2355         Constant *X = CE->getOperand(0);
2356         const PointerType *CPTy = cast<PointerType>(CE->getType());
2357         if (const PointerType *XTy = dyn_cast<PointerType>(X->getType()))
2358           if (const ArrayType *XATy =
2359               dyn_cast<ArrayType>(XTy->getElementType()))
2360             if (const ArrayType *CATy =
2361                 dyn_cast<ArrayType>(CPTy->getElementType()))
2362               if (CATy->getElementType() == XATy->getElementType()) {
2363                 // At this point, we know that the cast source type is a pointer
2364                 // to an array of the same type as the destination pointer
2365                 // array.  Because the array type is never stepped over (there
2366                 // is a leading zero) we can fold the cast into this GEP.
2367                 GEP.setOperand(0, X);
2368                 return &GEP;
2369               }
2370       }
2371     }
2372   }
2373
2374   return 0;
2375 }
2376
2377 Instruction *InstCombiner::visitAllocationInst(AllocationInst &AI) {
2378   // Convert: malloc Ty, C - where C is a constant != 1 into: malloc [C x Ty], 1
2379   if (AI.isArrayAllocation())    // Check C != 1
2380     if (const ConstantUInt *C = dyn_cast<ConstantUInt>(AI.getArraySize())) {
2381       const Type *NewTy = ArrayType::get(AI.getAllocatedType(), C->getValue());
2382       AllocationInst *New = 0;
2383
2384       // Create and insert the replacement instruction...
2385       if (isa<MallocInst>(AI))
2386         New = new MallocInst(NewTy, 0, AI.getName());
2387       else {
2388         assert(isa<AllocaInst>(AI) && "Unknown type of allocation inst!");
2389         New = new AllocaInst(NewTy, 0, AI.getName());
2390       }
2391
2392       InsertNewInstBefore(New, AI);
2393       
2394       // Scan to the end of the allocation instructions, to skip over a block of
2395       // allocas if possible...
2396       //
2397       BasicBlock::iterator It = New;
2398       while (isa<AllocationInst>(*It)) ++It;
2399
2400       // Now that I is pointing to the first non-allocation-inst in the block,
2401       // insert our getelementptr instruction...
2402       //
2403       std::vector<Value*> Idx(2, Constant::getNullValue(Type::LongTy));
2404       Value *V = new GetElementPtrInst(New, Idx, New->getName()+".sub", It);
2405
2406       // Now make everything use the getelementptr instead of the original
2407       // allocation.
2408       return ReplaceInstUsesWith(AI, V);
2409     }
2410
2411   // If alloca'ing a zero byte object, replace the alloca with a null pointer.
2412   // Note that we only do this for alloca's, because malloc should allocate and
2413   // return a unique pointer, even for a zero byte allocation.
2414   if (isa<AllocaInst>(AI) && TD->getTypeSize(AI.getAllocatedType()) == 0)
2415     return ReplaceInstUsesWith(AI, Constant::getNullValue(AI.getType()));
2416
2417   return 0;
2418 }
2419
2420 Instruction *InstCombiner::visitFreeInst(FreeInst &FI) {
2421   Value *Op = FI.getOperand(0);
2422
2423   // Change free <ty>* (cast <ty2>* X to <ty>*) into free <ty2>* X
2424   if (CastInst *CI = dyn_cast<CastInst>(Op))
2425     if (isa<PointerType>(CI->getOperand(0)->getType())) {
2426       FI.setOperand(0, CI->getOperand(0));
2427       return &FI;
2428     }
2429
2430   // If we have 'free null' delete the instruction.  This can happen in stl code
2431   // when lots of inlining happens.
2432   if (isa<ConstantPointerNull>(Op))
2433     return EraseInstFromFunction(FI);
2434
2435   return 0;
2436 }
2437
2438
2439 /// GetGEPGlobalInitializer - Given a constant, and a getelementptr
2440 /// constantexpr, return the constant value being addressed by the constant
2441 /// expression, or null if something is funny.
2442 ///
2443 static Constant *GetGEPGlobalInitializer(Constant *C, ConstantExpr *CE) {
2444   if (CE->getOperand(1) != Constant::getNullValue(Type::LongTy))
2445     return 0;  // Do not allow stepping over the value!
2446
2447   // Loop over all of the operands, tracking down which value we are
2448   // addressing...
2449   for (unsigned i = 2, e = CE->getNumOperands(); i != e; ++i)
2450     if (ConstantUInt *CU = dyn_cast<ConstantUInt>(CE->getOperand(i))) {
2451       ConstantStruct *CS = dyn_cast<ConstantStruct>(C);
2452       if (CS == 0) return 0;
2453       if (CU->getValue() >= CS->getValues().size()) return 0;
2454       C = cast<Constant>(CS->getValues()[CU->getValue()]);
2455     } else if (ConstantSInt *CS = dyn_cast<ConstantSInt>(CE->getOperand(i))) {
2456       ConstantArray *CA = dyn_cast<ConstantArray>(C);
2457       if (CA == 0) return 0;
2458       if ((uint64_t)CS->getValue() >= CA->getValues().size()) return 0;
2459       C = cast<Constant>(CA->getValues()[CS->getValue()]);
2460     } else 
2461       return 0;
2462   return C;
2463 }
2464
2465 Instruction *InstCombiner::visitLoadInst(LoadInst &LI) {
2466   Value *Op = LI.getOperand(0);
2467   if (LI.isVolatile()) return 0;
2468
2469   if (ConstantPointerRef *CPR = dyn_cast<ConstantPointerRef>(Op))
2470     Op = CPR->getValue();
2471
2472   // Instcombine load (constant global) into the value loaded...
2473   if (GlobalVariable *GV = dyn_cast<GlobalVariable>(Op))
2474     if (GV->isConstant() && !GV->isExternal())
2475       return ReplaceInstUsesWith(LI, GV->getInitializer());
2476
2477   // Instcombine load (constantexpr_GEP global, 0, ...) into the value loaded...
2478   if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Op))
2479     if (CE->getOpcode() == Instruction::GetElementPtr)
2480       if (ConstantPointerRef *G=dyn_cast<ConstantPointerRef>(CE->getOperand(0)))
2481         if (GlobalVariable *GV = dyn_cast<GlobalVariable>(G->getValue()))
2482           if (GV->isConstant() && !GV->isExternal())
2483             if (Constant *V = GetGEPGlobalInitializer(GV->getInitializer(), CE))
2484               return ReplaceInstUsesWith(LI, V);
2485   return 0;
2486 }
2487
2488
2489 Instruction *InstCombiner::visitBranchInst(BranchInst &BI) {
2490   // Change br (not X), label True, label False to: br X, label False, True
2491   if (BI.isConditional() && !isa<Constant>(BI.getCondition())) {
2492     if (Value *V = dyn_castNotVal(BI.getCondition())) {
2493       BasicBlock *TrueDest = BI.getSuccessor(0);
2494       BasicBlock *FalseDest = BI.getSuccessor(1);
2495       // Swap Destinations and condition...
2496       BI.setCondition(V);
2497       BI.setSuccessor(0, FalseDest);
2498       BI.setSuccessor(1, TrueDest);
2499       return &BI;
2500     } else if (SetCondInst *I = dyn_cast<SetCondInst>(BI.getCondition())) {
2501       // Cannonicalize setne -> seteq
2502       if ((I->getOpcode() == Instruction::SetNE ||
2503            I->getOpcode() == Instruction::SetLE ||
2504            I->getOpcode() == Instruction::SetGE) && I->hasOneUse()) {
2505         std::string Name = I->getName(); I->setName("");
2506         Instruction::BinaryOps NewOpcode =
2507           SetCondInst::getInverseCondition(I->getOpcode());
2508         Value *NewSCC =  BinaryOperator::create(NewOpcode, I->getOperand(0),
2509                                                 I->getOperand(1), Name, I);
2510         BasicBlock *TrueDest = BI.getSuccessor(0);
2511         BasicBlock *FalseDest = BI.getSuccessor(1);
2512         // Swap Destinations and condition...
2513         BI.setCondition(NewSCC);
2514         BI.setSuccessor(0, FalseDest);
2515         BI.setSuccessor(1, TrueDest);
2516         removeFromWorkList(I);
2517         I->getParent()->getInstList().erase(I);
2518         WorkList.push_back(cast<Instruction>(NewSCC));
2519         return &BI;
2520       }
2521     }
2522   }
2523   return 0;
2524 }
2525
2526
2527 void InstCombiner::removeFromWorkList(Instruction *I) {
2528   WorkList.erase(std::remove(WorkList.begin(), WorkList.end(), I),
2529                  WorkList.end());
2530 }
2531
2532 bool InstCombiner::runOnFunction(Function &F) {
2533   bool Changed = false;
2534   TD = &getAnalysis<TargetData>();
2535
2536   WorkList.insert(WorkList.end(), inst_begin(F), inst_end(F));
2537
2538   while (!WorkList.empty()) {
2539     Instruction *I = WorkList.back();  // Get an instruction from the worklist
2540     WorkList.pop_back();
2541
2542     // Check to see if we can DCE or ConstantPropagate the instruction...
2543     // Check to see if we can DIE the instruction...
2544     if (isInstructionTriviallyDead(I)) {
2545       // Add operands to the worklist...
2546       if (I->getNumOperands() < 4)
2547         AddUsesToWorkList(*I);
2548       ++NumDeadInst;
2549
2550       I->getParent()->getInstList().erase(I);
2551       removeFromWorkList(I);
2552       continue;
2553     }
2554
2555     // Instruction isn't dead, see if we can constant propagate it...
2556     if (Constant *C = ConstantFoldInstruction(I)) {
2557       // Add operands to the worklist...
2558       AddUsesToWorkList(*I);
2559       ReplaceInstUsesWith(*I, C);
2560
2561       ++NumConstProp;
2562       I->getParent()->getInstList().erase(I);
2563       removeFromWorkList(I);
2564       continue;
2565     }
2566
2567     // Check to see if any of the operands of this instruction are a
2568     // ConstantPointerRef.  Since they sneak in all over the place and inhibit
2569     // optimization, we want to strip them out unconditionally!
2570     for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i)
2571       if (ConstantPointerRef *CPR =
2572           dyn_cast<ConstantPointerRef>(I->getOperand(i))) {
2573         I->setOperand(i, CPR->getValue());
2574         Changed = true;
2575       }
2576
2577     // Now that we have an instruction, try combining it to simplify it...
2578     if (Instruction *Result = visit(*I)) {
2579       ++NumCombined;
2580       // Should we replace the old instruction with a new one?
2581       if (Result != I) {
2582         DEBUG(std::cerr << "IC: Old = " << *I
2583                         << "    New = " << *Result);
2584
2585         // Instructions can end up on the worklist more than once.  Make sure
2586         // we do not process an instruction that has been deleted.
2587         removeFromWorkList(I);
2588
2589         // Move the name to the new instruction first...
2590         std::string OldName = I->getName(); I->setName("");
2591         Result->setName(OldName);
2592
2593         // Insert the new instruction into the basic block...
2594         BasicBlock *InstParent = I->getParent();
2595         InstParent->getInstList().insert(I, Result);
2596
2597         // Everything uses the new instruction now...
2598         I->replaceAllUsesWith(Result);
2599
2600         // Erase the old instruction.
2601         InstParent->getInstList().erase(I);
2602       } else {
2603         DEBUG(std::cerr << "IC: MOD = " << *I);
2604
2605         BasicBlock::iterator II = I;
2606
2607         // If the instruction was modified, it's possible that it is now dead.
2608         // if so, remove it.
2609         if (dceInstruction(II)) {
2610           // Instructions may end up in the worklist more than once.  Erase them
2611           // all.
2612           removeFromWorkList(I);
2613           Result = 0;
2614         }
2615       }
2616
2617       if (Result) {
2618         WorkList.push_back(Result);
2619         AddUsersToWorkList(*Result);
2620       }
2621       Changed = true;
2622     }
2623   }
2624
2625   return Changed;
2626 }
2627
2628 Pass *llvm::createInstructionCombiningPass() {
2629   return new InstCombiner();
2630 }
2631