1 //===- InstructionSimplify.cpp - Fold instruction operands ----------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements routines for folding instructions into simpler forms
11 // that do not require creating new instructions.  This does constant folding
12 // ("add i32 1, 1" -> "2") but can also handle non-constant operands, either
13 // returning a constant ("and i32 %x, 0" -> "0") or an already existing value
14 // ("and i32 %x, %x" -> "%x").  All operands are assumed to have already been
15 // simplified: This is usually true and assuming it simplifies the logic (if
16 // they have not been simplified then results are correct but maybe suboptimal).
17 //
18 //===----------------------------------------------------------------------===//
19 
20 #define DEBUG_TYPE "instsimplify"
21 #include "llvm/Operator.h"
22 #include "llvm/ADT/Statistic.h"
23 #include "llvm/Analysis/InstructionSimplify.h"
24 #include "llvm/Analysis/ConstantFolding.h"
25 #include "llvm/Analysis/Dominators.h"
26 #include "llvm/Analysis/ValueTracking.h"
27 #include "llvm/Support/ConstantRange.h"
28 #include "llvm/Support/PatternMatch.h"
29 #include "llvm/Support/ValueHandle.h"
30 #include "llvm/Target/TargetData.h"
31 using namespace llvm;
32 using namespace llvm::PatternMatch;
33 
34 enum { RecursionLimit = 3 };
35 
36 STATISTIC(NumExpand,  "Number of expansions");
37 STATISTIC(NumFactor , "Number of factorizations");
38 STATISTIC(NumReassoc, "Number of reassociations");
39 
40 static Value *SimplifyAndInst(Value *, Value *, const TargetData *,
41                               const TargetLibraryInfo *, const DominatorTree *,
42                               unsigned);
43 static Value *SimplifyBinOp(unsigned, Value *, Value *, const TargetData *,
44                             const TargetLibraryInfo *, const DominatorTree *,
45                             unsigned);
46 static Value *SimplifyCmpInst(unsigned, Value *, Value *, const TargetData *,
47                               const TargetLibraryInfo *, const DominatorTree *,
48                               unsigned);
49 static Value *SimplifyOrInst(Value *, Value *, const TargetData *,
50                              const TargetLibraryInfo *, const DominatorTree *,
51                              unsigned);
52 static Value *SimplifyXorInst(Value *, Value *, const TargetData *,
53                               const TargetLibraryInfo *, const DominatorTree *,
54                               unsigned);
55 
56 /// getFalse - For a boolean type, or a vector of boolean type, return false, or
57 /// a vector with every element false, as appropriate for the type.
58 static Constant *getFalse(Type *Ty) {
59   assert(Ty->getScalarType()->isIntegerTy(1) &&
60          "Expected i1 type or a vector of i1!");
61   return Constant::getNullValue(Ty);
62 }
63 
64 /// getTrue - For a boolean type, or a vector of boolean type, return true, or
65 /// a vector with every element true, as appropriate for the type.
66 static Constant *getTrue(Type *Ty) {
67   assert(Ty->getScalarType()->isIntegerTy(1) &&
68          "Expected i1 type or a vector of i1!");
69   return Constant::getAllOnesValue(Ty);
70 }
71 
72 /// isSameCompare - Is V equivalent to the comparison "LHS Pred RHS"?
73 static bool isSameCompare(Value *V, CmpInst::Predicate Pred, Value *LHS,
74                           Value *RHS) {
75   CmpInst *Cmp = dyn_cast<CmpInst>(V);
76   if (!Cmp)
77     return false;
78   CmpInst::Predicate CPred = Cmp->getPredicate();
79   Value *CLHS = Cmp->getOperand(0), *CRHS = Cmp->getOperand(1);
80   if (CPred == Pred && CLHS == LHS && CRHS == RHS)
81     return true;
82   return CPred == CmpInst::getSwappedPredicate(Pred) && CLHS == RHS &&
83     CRHS == LHS;
84 }
85 
86 /// ValueDominatesPHI - Does the given value dominate the specified phi node?
87 static bool ValueDominatesPHI(Value *V, PHINode *P, const DominatorTree *DT) {
88   Instruction *I = dyn_cast<Instruction>(V);
89   if (!I)
90     // Arguments and constants dominate all instructions.
91     return true;
92 
93   // If we have a DominatorTree then do a precise test.
94   if (DT)
95     return DT->dominates(I, P);
96 
97   // Otherwise, if the instruction is in the entry block, and is not an invoke,
98   // then it obviously dominates all phi nodes.
99   if (I->getParent() == &I->getParent()->getParent()->getEntryBlock() &&
100       !isa<InvokeInst>(I))
101     return true;
102 
103   return false;
104 }
105 
106 /// ExpandBinOp - Simplify "A op (B op' C)" by distributing op over op', turning
107 /// it into "(A op B) op' (A op C)".  Here "op" is given by Opcode and "op'" is
108 /// given by OpcodeToExpand, while "A" corresponds to LHS and "B op' C" to RHS.
109 /// Also performs the transform "(A op' B) op C" -> "(A op C) op' (B op C)".
110 /// Returns the simplified value, or null if no simplification was performed.
111 static Value *ExpandBinOp(unsigned Opcode, Value *LHS, Value *RHS,
112                           unsigned OpcToExpand, const TargetData *TD,
113                           const TargetLibraryInfo *TLI, const DominatorTree *DT,
114                           unsigned MaxRecurse) {
115   Instruction::BinaryOps OpcodeToExpand = (Instruction::BinaryOps)OpcToExpand;
116   // Recursion is always used, so bail out at once if we already hit the limit.
117   if (!MaxRecurse--)
118     return 0;
119 
120   // Check whether the expression has the form "(A op' B) op C".
121   if (BinaryOperator *Op0 = dyn_cast<BinaryOperator>(LHS))
122     if (Op0->getOpcode() == OpcodeToExpand) {
123       // It does!  Try turning it into "(A op C) op' (B op C)".
124       Value *A = Op0->getOperand(0), *B = Op0->getOperand(1), *C = RHS;
125       // Do "A op C" and "B op C" both simplify?
126       if (Value *L = SimplifyBinOp(Opcode, A, C, TD, TLI, DT, MaxRecurse))
127         if (Value *R = SimplifyBinOp(Opcode, B, C, TD, TLI, DT, MaxRecurse)) {
128           // They do! Return "L op' R" if it simplifies or is already available.
129           // If "L op' R" equals "A op' B" then "L op' R" is just the LHS.
130           if ((L == A && R == B) || (Instruction::isCommutative(OpcodeToExpand)
131                                      && L == B && R == A)) {
132             ++NumExpand;
133             return LHS;
134           }
135           // Otherwise return "L op' R" if it simplifies.
136           if (Value *V = SimplifyBinOp(OpcodeToExpand, L, R, TD, TLI, DT,
137                                        MaxRecurse)) {
138             ++NumExpand;
139             return V;
140           }
141         }
142     }
143 
144   // Check whether the expression has the form "A op (B op' C)".
145   if (BinaryOperator *Op1 = dyn_cast<BinaryOperator>(RHS))
146     if (Op1->getOpcode() == OpcodeToExpand) {
147       // It does!  Try turning it into "(A op B) op' (A op C)".
148       Value *A = LHS, *B = Op1->getOperand(0), *C = Op1->getOperand(1);
149       // Do "A op B" and "A op C" both simplify?
150       if (Value *L = SimplifyBinOp(Opcode, A, B, TD, TLI, DT, MaxRecurse))
151         if (Value *R = SimplifyBinOp(Opcode, A, C, TD, TLI, DT, MaxRecurse)) {
152           // They do! Return "L op' R" if it simplifies or is already available.
153           // If "L op' R" equals "B op' C" then "L op' R" is just the RHS.
154           if ((L == B && R == C) || (Instruction::isCommutative(OpcodeToExpand)
155                                      && L == C && R == B)) {
156             ++NumExpand;
157             return RHS;
158           }
159           // Otherwise return "L op' R" if it simplifies.
160           if (Value *V = SimplifyBinOp(OpcodeToExpand, L, R, TD, TLI, DT,
161                                        MaxRecurse)) {
162             ++NumExpand;
163             return V;
164           }
165         }
166     }
167 
168   return 0;
169 }
170 
171 /// FactorizeBinOp - Simplify "LHS Opcode RHS" by factorizing out a common term
172 /// using the operation OpCodeToExtract.  For example, when Opcode is Add and
173 /// OpCodeToExtract is Mul then this tries to turn "(A*B)+(A*C)" into "A*(B+C)".
174 /// Returns the simplified value, or null if no simplification was performed.
175 static Value *FactorizeBinOp(unsigned Opcode, Value *LHS, Value *RHS,
176                              unsigned OpcToExtract, const TargetData *TD,
177                              const TargetLibraryInfo *TLI,
178                              const DominatorTree *DT,
179                              unsigned MaxRecurse) {
180   Instruction::BinaryOps OpcodeToExtract = (Instruction::BinaryOps)OpcToExtract;
181   // Recursion is always used, so bail out at once if we already hit the limit.
182   if (!MaxRecurse--)
183     return 0;
184 
185   BinaryOperator *Op0 = dyn_cast<BinaryOperator>(LHS);
186   BinaryOperator *Op1 = dyn_cast<BinaryOperator>(RHS);
187 
188   if (!Op0 || Op0->getOpcode() != OpcodeToExtract ||
189       !Op1 || Op1->getOpcode() != OpcodeToExtract)
190     return 0;
191 
192   // The expression has the form "(A op' B) op (C op' D)".
193   Value *A = Op0->getOperand(0), *B = Op0->getOperand(1);
194   Value *C = Op1->getOperand(0), *D = Op1->getOperand(1);
195 
196   // Use left distributivity, i.e. "X op' (Y op Z) = (X op' Y) op (X op' Z)".
197   // Does the instruction have the form "(A op' B) op (A op' D)" or, in the
198   // commutative case, "(A op' B) op (C op' A)"?
199   if (A == C || (Instruction::isCommutative(OpcodeToExtract) && A == D)) {
200     Value *DD = A == C ? D : C;
201     // Form "A op' (B op DD)" if it simplifies completely.
202     // Does "B op DD" simplify?
203     if (Value *V = SimplifyBinOp(Opcode, B, DD, TD, TLI, DT, MaxRecurse)) {
204       // It does!  Return "A op' V" if it simplifies or is already available.
205       // If V equals B then "A op' V" is just the LHS.  If V equals DD then
206       // "A op' V" is just the RHS.
207       if (V == B || V == DD) {
208         ++NumFactor;
209         return V == B ? LHS : RHS;
210       }
211       // Otherwise return "A op' V" if it simplifies.
212       if (Value *W = SimplifyBinOp(OpcodeToExtract, A, V, TD, TLI, DT,
213                                    MaxRecurse)) {
214         ++NumFactor;
215         return W;
216       }
217     }
218   }
219 
220   // Use right distributivity, i.e. "(X op Y) op' Z = (X op' Z) op (Y op' Z)".
221   // Does the instruction have the form "(A op' B) op (C op' B)" or, in the
222   // commutative case, "(A op' B) op (B op' D)"?
223   if (B == D || (Instruction::isCommutative(OpcodeToExtract) && B == C)) {
224     Value *CC = B == D ? C : D;
225     // Form "(A op CC) op' B" if it simplifies completely..
226     // Does "A op CC" simplify?
227     if (Value *V = SimplifyBinOp(Opcode, A, CC, TD, TLI, DT, MaxRecurse)) {
228       // It does!  Return "V op' B" if it simplifies or is already available.
229       // If V equals A then "V op' B" is just the LHS.  If V equals CC then
230       // "V op' B" is just the RHS.
231       if (V == A || V == CC) {
232         ++NumFactor;
233         return V == A ? LHS : RHS;
234       }
235       // Otherwise return "V op' B" if it simplifies.
236       if (Value *W = SimplifyBinOp(OpcodeToExtract, V, B, TD, TLI, DT,
237                                    MaxRecurse)) {
238         ++NumFactor;
239         return W;
240       }
241     }
242   }
243 
244   return 0;
245 }
246 
247 /// SimplifyAssociativeBinOp - Generic simplifications for associative binary
248 /// operations.  Returns the simpler value, or null if none was found.
249 static Value *SimplifyAssociativeBinOp(unsigned Opc, Value *LHS, Value *RHS,
250                                        const TargetData *TD,
251                                        const TargetLibraryInfo *TLI,
252                                        const DominatorTree *DT,
253                                        unsigned MaxRecurse) {
254   Instruction::BinaryOps Opcode = (Instruction::BinaryOps)Opc;
255   assert(Instruction::isAssociative(Opcode) && "Not an associative operation!");
256 
257   // Recursion is always used, so bail out at once if we already hit the limit.
258   if (!MaxRecurse--)
259     return 0;
260 
261   BinaryOperator *Op0 = dyn_cast<BinaryOperator>(LHS);
262   BinaryOperator *Op1 = dyn_cast<BinaryOperator>(RHS);
263 
264   // Transform: "(A op B) op C" ==> "A op (B op C)" if it simplifies completely.
265   if (Op0 && Op0->getOpcode() == Opcode) {
266     Value *A = Op0->getOperand(0);
267     Value *B = Op0->getOperand(1);
268     Value *C = RHS;
269 
270     // Does "B op C" simplify?
271     if (Value *V = SimplifyBinOp(Opcode, B, C, TD, TLI, DT, MaxRecurse)) {
272       // It does!  Return "A op V" if it simplifies or is already available.
273       // If V equals B then "A op V" is just the LHS.
274       if (V == B) return LHS;
275       // Otherwise return "A op V" if it simplifies.
276       if (Value *W = SimplifyBinOp(Opcode, A, V, TD, TLI, DT, MaxRecurse)) {
277         ++NumReassoc;
278         return W;
279       }
280     }
281   }
282 
283   // Transform: "A op (B op C)" ==> "(A op B) op C" if it simplifies completely.
284   if (Op1 && Op1->getOpcode() == Opcode) {
285     Value *A = LHS;
286     Value *B = Op1->getOperand(0);
287     Value *C = Op1->getOperand(1);
288 
289     // Does "A op B" simplify?
290     if (Value *V = SimplifyBinOp(Opcode, A, B, TD, TLI, DT, MaxRecurse)) {
291       // It does!  Return "V op C" if it simplifies or is already available.
292       // If V equals B then "V op C" is just the RHS.
293       if (V == B) return RHS;
294       // Otherwise return "V op C" if it simplifies.
295       if (Value *W = SimplifyBinOp(Opcode, V, C, TD, TLI, DT, MaxRecurse)) {
296         ++NumReassoc;
297         return W;
298       }
299     }
300   }
301 
302   // The remaining transforms require commutativity as well as associativity.
303   if (!Instruction::isCommutative(Opcode))
304     return 0;
305 
306   // Transform: "(A op B) op C" ==> "(C op A) op B" if it simplifies completely.
307   if (Op0 && Op0->getOpcode() == Opcode) {
308     Value *A = Op0->getOperand(0);
309     Value *B = Op0->getOperand(1);
310     Value *C = RHS;
311 
312     // Does "C op A" simplify?
313     if (Value *V = SimplifyBinOp(Opcode, C, A, TD, TLI, DT, MaxRecurse)) {
314       // It does!  Return "V op B" if it simplifies or is already available.
315       // If V equals A then "V op B" is just the LHS.
316       if (V == A) return LHS;
317       // Otherwise return "V op B" if it simplifies.
318       if (Value *W = SimplifyBinOp(Opcode, V, B, TD, TLI, DT, MaxRecurse)) {
319         ++NumReassoc;
320         return W;
321       }
322     }
323   }
324 
325   // Transform: "A op (B op C)" ==> "B op (C op A)" if it simplifies completely.
326   if (Op1 && Op1->getOpcode() == Opcode) {
327     Value *A = LHS;
328     Value *B = Op1->getOperand(0);
329     Value *C = Op1->getOperand(1);
330 
331     // Does "C op A" simplify?
332     if (Value *V = SimplifyBinOp(Opcode, C, A, TD, TLI, DT, MaxRecurse)) {
333       // It does!  Return "B op V" if it simplifies or is already available.
334       // If V equals C then "B op V" is just the RHS.
335       if (V == C) return RHS;
336       // Otherwise return "B op V" if it simplifies.
337       if (Value *W = SimplifyBinOp(Opcode, B, V, TD, TLI, DT, MaxRecurse)) {
338         ++NumReassoc;
339         return W;
340       }
341     }
342   }
343 
344   return 0;
345 }
346 
347 /// ThreadBinOpOverSelect - In the case of a binary operation with a select
348 /// instruction as an operand, try to simplify the binop by seeing whether
349 /// evaluating it on both branches of the select results in the same value.
350 /// Returns the common value if so, otherwise returns null.
351 static Value *ThreadBinOpOverSelect(unsigned Opcode, Value *LHS, Value *RHS,
352                                     const TargetData *TD,
353                                     const TargetLibraryInfo *TLI,
354                                     const DominatorTree *DT,
355                                     unsigned MaxRecurse) {
356   // Recursion is always used, so bail out at once if we already hit the limit.
357   if (!MaxRecurse--)
358     return 0;
359 
360   SelectInst *SI;
361   if (isa<SelectInst>(LHS)) {
362     SI = cast<SelectInst>(LHS);
363   } else {
364     assert(isa<SelectInst>(RHS) && "No select instruction operand!");
365     SI = cast<SelectInst>(RHS);
366   }
367 
368   // Evaluate the BinOp on the true and false branches of the select.
369   Value *TV;
370   Value *FV;
371   if (SI == LHS) {
372     TV = SimplifyBinOp(Opcode, SI->getTrueValue(), RHS, TD, TLI, DT, MaxRecurse);
373     FV = SimplifyBinOp(Opcode, SI->getFalseValue(), RHS, TD, TLI, DT, MaxRecurse);
374   } else {
375     TV = SimplifyBinOp(Opcode, LHS, SI->getTrueValue(), TD, TLI, DT, MaxRecurse);
376     FV = SimplifyBinOp(Opcode, LHS, SI->getFalseValue(), TD, TLI, DT, MaxRecurse);
377   }
378 
379   // If they simplified to the same value, then return the common value.
380   // If they both failed to simplify then return null.
381   if (TV == FV)
382     return TV;
383 
384   // If one branch simplified to undef, return the other one.
385   if (TV && isa<UndefValue>(TV))
386     return FV;
387   if (FV && isa<UndefValue>(FV))
388     return TV;
389 
390   // If applying the operation did not change the true and false select values,
391   // then the result of the binop is the select itself.
392   if (TV == SI->getTrueValue() && FV == SI->getFalseValue())
393     return SI;
394 
395   // If one branch simplified and the other did not, and the simplified
396   // value is equal to the unsimplified one, return the simplified value.
397   // For example, select (cond, X, X & Z) & Z -> X & Z.
398   if ((FV && !TV) || (TV && !FV)) {
399     // Check that the simplified value has the form "X op Y" where "op" is the
400     // same as the original operation.
401     Instruction *Simplified = dyn_cast<Instruction>(FV ? FV : TV);
402     if (Simplified && Simplified->getOpcode() == Opcode) {
403       // The value that didn't simplify is "UnsimplifiedLHS op UnsimplifiedRHS".
404       // We already know that "op" is the same as for the simplified value.  See
405       // if the operands match too.  If so, return the simplified value.
406       Value *UnsimplifiedBranch = FV ? SI->getTrueValue() : SI->getFalseValue();
407       Value *UnsimplifiedLHS = SI == LHS ? UnsimplifiedBranch : LHS;
408       Value *UnsimplifiedRHS = SI == LHS ? RHS : UnsimplifiedBranch;
409       if (Simplified->getOperand(0) == UnsimplifiedLHS &&
410           Simplified->getOperand(1) == UnsimplifiedRHS)
411         return Simplified;
412       if (Simplified->isCommutative() &&
413           Simplified->getOperand(1) == UnsimplifiedLHS &&
414           Simplified->getOperand(0) == UnsimplifiedRHS)
415         return Simplified;
416     }
417   }
418 
419   return 0;
420 }
421 
422 /// ThreadCmpOverSelect - In the case of a comparison with a select instruction,
423 /// try to simplify the comparison by seeing whether both branches of the select
424 /// result in the same value.  Returns the common value if so, otherwise returns
425 /// null.
426 static Value *ThreadCmpOverSelect(CmpInst::Predicate Pred, Value *LHS,
427                                   Value *RHS, const TargetData *TD,
428                                   const TargetLibraryInfo *TLI,
429                                   const DominatorTree *DT,
430                                   unsigned MaxRecurse) {
431   // Recursion is always used, so bail out at once if we already hit the limit.
432   if (!MaxRecurse--)
433     return 0;
434 
435   // Make sure the select is on the LHS.
436   if (!isa<SelectInst>(LHS)) {
437     std::swap(LHS, RHS);
438     Pred = CmpInst::getSwappedPredicate(Pred);
439   }
440   assert(isa<SelectInst>(LHS) && "Not comparing with a select instruction!");
441   SelectInst *SI = cast<SelectInst>(LHS);
442   Value *Cond = SI->getCondition();
443   Value *TV = SI->getTrueValue();
444   Value *FV = SI->getFalseValue();
445 
446   // Now that we have "cmp select(Cond, TV, FV), RHS", analyse it.
447   // Does "cmp TV, RHS" simplify?
448   Value *TCmp = SimplifyCmpInst(Pred, TV, RHS, TD, TLI, DT, MaxRecurse);
449   if (TCmp == Cond) {
450     // It not only simplified, it simplified to the select condition.  Replace
451     // it with 'true'.
452     TCmp = getTrue(Cond->getType());
453   } else if (!TCmp) {
454     // It didn't simplify.  However if "cmp TV, RHS" is equal to the select
455     // condition then we can replace it with 'true'.  Otherwise give up.
456     if (!isSameCompare(Cond, Pred, TV, RHS))
457       return 0;
458     TCmp = getTrue(Cond->getType());
459   }
460 
461   // Does "cmp FV, RHS" simplify?
462   Value *FCmp = SimplifyCmpInst(Pred, FV, RHS, TD, TLI, DT, MaxRecurse);
463   if (FCmp == Cond) {
464     // It not only simplified, it simplified to the select condition.  Replace
465     // it with 'false'.
466     FCmp = getFalse(Cond->getType());
467   } else if (!FCmp) {
468     // It didn't simplify.  However if "cmp FV, RHS" is equal to the select
469     // condition then we can replace it with 'false'.  Otherwise give up.
470     if (!isSameCompare(Cond, Pred, FV, RHS))
471       return 0;
472     FCmp = getFalse(Cond->getType());
473   }
474 
475   // If both sides simplified to the same value, then use it as the result of
476   // the original comparison.
477   if (TCmp == FCmp)
478     return TCmp;
479 
480   // The remaining cases only make sense if the select condition has the same
481   // type as the result of the comparison, so bail out if this is not so.
482   if (Cond->getType()->isVectorTy() != RHS->getType()->isVectorTy())
483     return 0;
484   // If the false value simplified to false, then the result of the compare
485   // is equal to "Cond && TCmp".  This also catches the case when the false
486   // value simplified to false and the true value to true, returning "Cond".
487   if (match(FCmp, m_Zero()))
488     if (Value *V = SimplifyAndInst(Cond, TCmp, TD, TLI, DT, MaxRecurse))
489       return V;
490   // If the true value simplified to true, then the result of the compare
491   // is equal to "Cond || FCmp".
492   if (match(TCmp, m_One()))
493     if (Value *V = SimplifyOrInst(Cond, FCmp, TD, TLI, DT, MaxRecurse))
494       return V;
495   // Finally, if the false value simplified to true and the true value to
496   // false, then the result of the compare is equal to "!Cond".
497   if (match(FCmp, m_One()) && match(TCmp, m_Zero()))
498     if (Value *V =
499         SimplifyXorInst(Cond, Constant::getAllOnesValue(Cond->getType()),
500                         TD, TLI, DT, MaxRecurse))
501       return V;
502 
503   return 0;
504 }
505 
506 /// ThreadBinOpOverPHI - In the case of a binary operation with an operand that
507 /// is a PHI instruction, try to simplify the binop by seeing whether evaluating
508 /// it on the incoming phi values yields the same result for every value.  If so
509 /// returns the common value, otherwise returns null.
510 static Value *ThreadBinOpOverPHI(unsigned Opcode, Value *LHS, Value *RHS,
511                                  const TargetData *TD,
512                                  const TargetLibraryInfo *TLI,
513                                  const DominatorTree *DT,
514                                  unsigned MaxRecurse) {
515   // Recursion is always used, so bail out at once if we already hit the limit.
516   if (!MaxRecurse--)
517     return 0;
518 
519   PHINode *PI;
520   if (isa<PHINode>(LHS)) {
521     PI = cast<PHINode>(LHS);
522     // Bail out if RHS and the phi may be mutually interdependent due to a loop.
523     if (!ValueDominatesPHI(RHS, PI, DT))
524       return 0;
525   } else {
526     assert(isa<PHINode>(RHS) && "No PHI instruction operand!");
527     PI = cast<PHINode>(RHS);
528     // Bail out if LHS and the phi may be mutually interdependent due to a loop.
529     if (!ValueDominatesPHI(LHS, PI, DT))
530       return 0;
531   }
532 
533   // Evaluate the BinOp on the incoming phi values.
534   Value *CommonValue = 0;
535   for (unsigned i = 0, e = PI->getNumIncomingValues(); i != e; ++i) {
536     Value *Incoming = PI->getIncomingValue(i);
537     // If the incoming value is the phi node itself, it can safely be skipped.
538     if (Incoming == PI) continue;
539     Value *V = PI == LHS ?
540       SimplifyBinOp(Opcode, Incoming, RHS, TD, TLI, DT, MaxRecurse) :
541       SimplifyBinOp(Opcode, LHS, Incoming, TD, TLI, DT, MaxRecurse);
542     // If the operation failed to simplify, or simplified to a different value
543     // to previously, then give up.
544     if (!V || (CommonValue && V != CommonValue))
545       return 0;
546     CommonValue = V;
547   }
548 
549   return CommonValue;
550 }
551 
552 /// ThreadCmpOverPHI - In the case of a comparison with a PHI instruction, try
553 /// try to simplify the comparison by seeing whether comparing with all of the
554 /// incoming phi values yields the same result every time.  If so returns the
555 /// common result, otherwise returns null.
556 static Value *ThreadCmpOverPHI(CmpInst::Predicate Pred, Value *LHS, Value *RHS,
557                                const TargetData *TD,
558                                const TargetLibraryInfo *TLI,
559                                const DominatorTree *DT,
560                                unsigned MaxRecurse) {
561   // Recursion is always used, so bail out at once if we already hit the limit.
562   if (!MaxRecurse--)
563     return 0;
564 
565   // Make sure the phi is on the LHS.
566   if (!isa<PHINode>(LHS)) {
567     std::swap(LHS, RHS);
568     Pred = CmpInst::getSwappedPredicate(Pred);
569   }
570   assert(isa<PHINode>(LHS) && "Not comparing with a phi instruction!");
571   PHINode *PI = cast<PHINode>(LHS);
572 
573   // Bail out if RHS and the phi may be mutually interdependent due to a loop.
574   if (!ValueDominatesPHI(RHS, PI, DT))
575     return 0;
576 
577   // Evaluate the BinOp on the incoming phi values.
578   Value *CommonValue = 0;
579   for (unsigned i = 0, e = PI->getNumIncomingValues(); i != e; ++i) {
580     Value *Incoming = PI->getIncomingValue(i);
581     // If the incoming value is the phi node itself, it can safely be skipped.
582     if (Incoming == PI) continue;
583     Value *V = SimplifyCmpInst(Pred, Incoming, RHS, TD, TLI, DT, MaxRecurse);
584     // If the operation failed to simplify, or simplified to a different value
585     // to previously, then give up.
586     if (!V || (CommonValue && V != CommonValue))
587       return 0;
588     CommonValue = V;
589   }
590 
591   return CommonValue;
592 }
593 
594 /// SimplifyAddInst - Given operands for an Add, see if we can
595 /// fold the result.  If not, this returns null.
596 static Value *SimplifyAddInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
597                               const TargetData *TD,
598                               const TargetLibraryInfo *TLI,
599                               const DominatorTree *DT,
600                               unsigned MaxRecurse) {
601   if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
602     if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
603       Constant *Ops[] = { CLHS, CRHS };
604       return ConstantFoldInstOperands(Instruction::Add, CLHS->getType(),
605                                       Ops, TD, TLI);
606     }
607 
608     // Canonicalize the constant to the RHS.
609     std::swap(Op0, Op1);
610   }
611 
612   // X + undef -> undef
613   if (match(Op1, m_Undef()))
614     return Op1;
615 
616   // X + 0 -> X
617   if (match(Op1, m_Zero()))
618     return Op0;
619 
620   // X + (Y - X) -> Y
621   // (Y - X) + X -> Y
622   // Eg: X + -X -> 0
623   Value *Y = 0;
624   if (match(Op1, m_Sub(m_Value(Y), m_Specific(Op0))) ||
625       match(Op0, m_Sub(m_Value(Y), m_Specific(Op1))))
626     return Y;
627 
628   // X + ~X -> -1   since   ~X = -X-1
629   if (match(Op0, m_Not(m_Specific(Op1))) ||
630       match(Op1, m_Not(m_Specific(Op0))))
631     return Constant::getAllOnesValue(Op0->getType());
632 
633   /// i1 add -> xor.
634   if (MaxRecurse && Op0->getType()->isIntegerTy(1))
635     if (Value *V = SimplifyXorInst(Op0, Op1, TD, TLI, DT, MaxRecurse-1))
636       return V;
637 
638   // Try some generic simplifications for associative operations.
639   if (Value *V = SimplifyAssociativeBinOp(Instruction::Add, Op0, Op1, TD, TLI, DT,
640                                           MaxRecurse))
641     return V;
642 
643   // Mul distributes over Add.  Try some generic simplifications based on this.
644   if (Value *V = FactorizeBinOp(Instruction::Add, Op0, Op1, Instruction::Mul,
645                                 TD, TLI, DT, MaxRecurse))
646     return V;
647 
648   // Threading Add over selects and phi nodes is pointless, so don't bother.
649   // Threading over the select in "A + select(cond, B, C)" means evaluating
650   // "A+B" and "A+C" and seeing if they are equal; but they are equal if and
651   // only if B and C are equal.  If B and C are equal then (since we assume
652   // that operands have already been simplified) "select(cond, B, C)" should
653   // have been simplified to the common value of B and C already.  Analysing
654   // "A+B" and "A+C" thus gains nothing, but costs compile time.  Similarly
655   // for threading over phi nodes.
656 
657   return 0;
658 }
659 
660 Value *llvm::SimplifyAddInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
661                              const TargetData *TD, const TargetLibraryInfo *TLI,
662                              const DominatorTree *DT) {
663   return ::SimplifyAddInst(Op0, Op1, isNSW, isNUW, TD, TLI, DT, RecursionLimit);
664 }
665 
666 /// SimplifySubInst - Given operands for a Sub, see if we can
667 /// fold the result.  If not, this returns null.
668 static Value *SimplifySubInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
669                               const TargetData *TD,
670                               const TargetLibraryInfo *TLI,
671                               const DominatorTree *DT,
672                               unsigned MaxRecurse) {
673   if (Constant *CLHS = dyn_cast<Constant>(Op0))
674     if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
675       Constant *Ops[] = { CLHS, CRHS };
676       return ConstantFoldInstOperands(Instruction::Sub, CLHS->getType(),
677                                       Ops, TD, TLI);
678     }
679 
680   // X - undef -> undef
681   // undef - X -> undef
682   if (match(Op0, m_Undef()) || match(Op1, m_Undef()))
683     return UndefValue::get(Op0->getType());
684 
685   // X - 0 -> X
686   if (match(Op1, m_Zero()))
687     return Op0;
688 
689   // X - X -> 0
690   if (Op0 == Op1)
691     return Constant::getNullValue(Op0->getType());
692 
693   // (X*2) - X -> X
694   // (X<<1) - X -> X
695   Value *X = 0;
696   if (match(Op0, m_Mul(m_Specific(Op1), m_ConstantInt<2>())) ||
697       match(Op0, m_Shl(m_Specific(Op1), m_One())))
698     return Op1;
699 
700   // (X + Y) - Z -> X + (Y - Z) or Y + (X - Z) if everything simplifies.
701   // For example, (X + Y) - Y -> X; (Y + X) - Y -> X
702   Value *Y = 0, *Z = Op1;
703   if (MaxRecurse && match(Op0, m_Add(m_Value(X), m_Value(Y)))) { // (X + Y) - Z
704     // See if "V === Y - Z" simplifies.
705     if (Value *V = SimplifyBinOp(Instruction::Sub, Y, Z, TD, TLI, DT, MaxRecurse-1))
706       // It does!  Now see if "X + V" simplifies.
707       if (Value *W = SimplifyBinOp(Instruction::Add, X, V, TD, TLI, DT,
708                                    MaxRecurse-1)) {
709         // It does, we successfully reassociated!
710         ++NumReassoc;
711         return W;
712       }
713     // See if "V === X - Z" simplifies.
714     if (Value *V = SimplifyBinOp(Instruction::Sub, X, Z, TD, TLI, DT, MaxRecurse-1))
715       // It does!  Now see if "Y + V" simplifies.
716       if (Value *W = SimplifyBinOp(Instruction::Add, Y, V, TD, TLI, DT,
717                                    MaxRecurse-1)) {
718         // It does, we successfully reassociated!
719         ++NumReassoc;
720         return W;
721       }
722   }
723 
724   // X - (Y + Z) -> (X - Y) - Z or (X - Z) - Y if everything simplifies.
725   // For example, X - (X + 1) -> -1
726   X = Op0;
727   if (MaxRecurse && match(Op1, m_Add(m_Value(Y), m_Value(Z)))) { // X - (Y + Z)
728     // See if "V === X - Y" simplifies.
729     if (Value *V = SimplifyBinOp(Instruction::Sub, X, Y, TD, TLI, DT, MaxRecurse-1))
730       // It does!  Now see if "V - Z" simplifies.
731       if (Value *W = SimplifyBinOp(Instruction::Sub, V, Z, TD, TLI, DT,
732                                    MaxRecurse-1)) {
733         // It does, we successfully reassociated!
734         ++NumReassoc;
735         return W;
736       }
737     // See if "V === X - Z" simplifies.
738     if (Value *V = SimplifyBinOp(Instruction::Sub, X, Z, TD, TLI, DT, MaxRecurse-1))
739       // It does!  Now see if "V - Y" simplifies.
740       if (Value *W = SimplifyBinOp(Instruction::Sub, V, Y, TD, TLI, DT,
741                                    MaxRecurse-1)) {
742         // It does, we successfully reassociated!
743         ++NumReassoc;
744         return W;
745       }
746   }
747 
748   // Z - (X - Y) -> (Z - X) + Y if everything simplifies.
749   // For example, X - (X - Y) -> Y.
750   Z = Op0;
751   if (MaxRecurse && match(Op1, m_Sub(m_Value(X), m_Value(Y)))) // Z - (X - Y)
752     // See if "V === Z - X" simplifies.
753     if (Value *V = SimplifyBinOp(Instruction::Sub, Z, X, TD, TLI, DT, MaxRecurse-1))
754       // It does!  Now see if "V + Y" simplifies.
755       if (Value *W = SimplifyBinOp(Instruction::Add, V, Y, TD, TLI, DT,
756                                    MaxRecurse-1)) {
757         // It does, we successfully reassociated!
758         ++NumReassoc;
759         return W;
760       }
761 
762   // Mul distributes over Sub.  Try some generic simplifications based on this.
763   if (Value *V = FactorizeBinOp(Instruction::Sub, Op0, Op1, Instruction::Mul,
764                                 TD, TLI, DT, MaxRecurse))
765     return V;
766 
767   // i1 sub -> xor.
768   if (MaxRecurse && Op0->getType()->isIntegerTy(1))
769     if (Value *V = SimplifyXorInst(Op0, Op1, TD, TLI, DT, MaxRecurse-1))
770       return V;
771 
772   // Threading Sub over selects and phi nodes is pointless, so don't bother.
773   // Threading over the select in "A - select(cond, B, C)" means evaluating
774   // "A-B" and "A-C" and seeing if they are equal; but they are equal if and
775   // only if B and C are equal.  If B and C are equal then (since we assume
776   // that operands have already been simplified) "select(cond, B, C)" should
777   // have been simplified to the common value of B and C already.  Analysing
778   // "A-B" and "A-C" thus gains nothing, but costs compile time.  Similarly
779   // for threading over phi nodes.
780 
781   return 0;
782 }
783 
784 Value *llvm::SimplifySubInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
785                              const TargetData *TD,
786                              const TargetLibraryInfo *TLI,
787                              const DominatorTree *DT) {
788   return ::SimplifySubInst(Op0, Op1, isNSW, isNUW, TD, TLI, DT, RecursionLimit);
789 }
790 
791 /// SimplifyMulInst - Given operands for a Mul, see if we can
792 /// fold the result.  If not, this returns null.
793 static Value *SimplifyMulInst(Value *Op0, Value *Op1, const TargetData *TD,
794                               const TargetLibraryInfo *TLI,
795                               const DominatorTree *DT, unsigned MaxRecurse) {
796   if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
797     if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
798       Constant *Ops[] = { CLHS, CRHS };
799       return ConstantFoldInstOperands(Instruction::Mul, CLHS->getType(),
800                                       Ops, TD, TLI);
801     }
802 
803     // Canonicalize the constant to the RHS.
804     std::swap(Op0, Op1);
805   }
806 
807   // X * undef -> 0
808   if (match(Op1, m_Undef()))
809     return Constant::getNullValue(Op0->getType());
810 
811   // X * 0 -> 0
812   if (match(Op1, m_Zero()))
813     return Op1;
814 
815   // X * 1 -> X
816   if (match(Op1, m_One()))
817     return Op0;
818 
819   // (X / Y) * Y -> X if the division is exact.
820   Value *X = 0;
821   if (match(Op0, m_Exact(m_IDiv(m_Value(X), m_Specific(Op1)))) || // (X / Y) * Y
822       match(Op1, m_Exact(m_IDiv(m_Value(X), m_Specific(Op0)))))   // Y * (X / Y)
823     return X;
824 
825   // i1 mul -> and.
826   if (MaxRecurse && Op0->getType()->isIntegerTy(1))
827     if (Value *V = SimplifyAndInst(Op0, Op1, TD, TLI, DT, MaxRecurse-1))
828       return V;
829 
830   // Try some generic simplifications for associative operations.
831   if (Value *V = SimplifyAssociativeBinOp(Instruction::Mul, Op0, Op1, TD, TLI, DT,
832                                           MaxRecurse))
833     return V;
834 
835   // Mul distributes over Add.  Try some generic simplifications based on this.
836   if (Value *V = ExpandBinOp(Instruction::Mul, Op0, Op1, Instruction::Add,
837                              TD, TLI, DT, MaxRecurse))
838     return V;
839 
840   // If the operation is with the result of a select instruction, check whether
841   // operating on either branch of the select always yields the same value.
842   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
843     if (Value *V = ThreadBinOpOverSelect(Instruction::Mul, Op0, Op1, TD, TLI, DT,
844                                          MaxRecurse))
845       return V;
846 
847   // If the operation is with the result of a phi instruction, check whether
848   // operating on all incoming values of the phi always yields the same value.
849   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
850     if (Value *V = ThreadBinOpOverPHI(Instruction::Mul, Op0, Op1, TD, TLI, DT,
851                                       MaxRecurse))
852       return V;
853 
854   return 0;
855 }
856 
857 Value *llvm::SimplifyMulInst(Value *Op0, Value *Op1, const TargetData *TD,
858                              const TargetLibraryInfo *TLI,
859                              const DominatorTree *DT) {
860   return ::SimplifyMulInst(Op0, Op1, TD, TLI, DT, RecursionLimit);
861 }
862 
863 /// SimplifyDiv - Given operands for an SDiv or UDiv, see if we can
864 /// fold the result.  If not, this returns null.
865 static Value *SimplifyDiv(Instruction::BinaryOps Opcode, Value *Op0, Value *Op1,
866                           const TargetData *TD, const TargetLibraryInfo *TLI,
867                           const DominatorTree *DT, unsigned MaxRecurse) {
868   if (Constant *C0 = dyn_cast<Constant>(Op0)) {
869     if (Constant *C1 = dyn_cast<Constant>(Op1)) {
870       Constant *Ops[] = { C0, C1 };
871       return ConstantFoldInstOperands(Opcode, C0->getType(), Ops, TD, TLI);
872     }
873   }
874 
875   bool isSigned = Opcode == Instruction::SDiv;
876 
877   // X / undef -> undef
878   if (match(Op1, m_Undef()))
879     return Op1;
880 
881   // undef / X -> 0
882   if (match(Op0, m_Undef()))
883     return Constant::getNullValue(Op0->getType());
884 
885   // 0 / X -> 0, we don't need to preserve faults!
886   if (match(Op0, m_Zero()))
887     return Op0;
888 
889   // X / 1 -> X
890   if (match(Op1, m_One()))
891     return Op0;
892 
893   if (Op0->getType()->isIntegerTy(1))
894     // It can't be division by zero, hence it must be division by one.
895     return Op0;
896 
897   // X / X -> 1
898   if (Op0 == Op1)
899     return ConstantInt::get(Op0->getType(), 1);
900 
901   // (X * Y) / Y -> X if the multiplication does not overflow.
902   Value *X = 0, *Y = 0;
903   if (match(Op0, m_Mul(m_Value(X), m_Value(Y))) && (X == Op1 || Y == Op1)) {
904     if (Y != Op1) std::swap(X, Y); // Ensure expression is (X * Y) / Y, Y = Op1
905     OverflowingBinaryOperator *Mul = cast<OverflowingBinaryOperator>(Op0);
906     // If the Mul knows it does not overflow, then we are good to go.
907     if ((isSigned && Mul->hasNoSignedWrap()) ||
908         (!isSigned && Mul->hasNoUnsignedWrap()))
909       return X;
910     // If X has the form X = A / Y then X * Y cannot overflow.
911     if (BinaryOperator *Div = dyn_cast<BinaryOperator>(X))
912       if (Div->getOpcode() == Opcode && Div->getOperand(1) == Y)
913         return X;
914   }
915 
916   // (X rem Y) / Y -> 0
917   if ((isSigned && match(Op0, m_SRem(m_Value(), m_Specific(Op1)))) ||
918       (!isSigned && match(Op0, m_URem(m_Value(), m_Specific(Op1)))))
919     return Constant::getNullValue(Op0->getType());
920 
921   // If the operation is with the result of a select instruction, check whether
922   // operating on either branch of the select always yields the same value.
923   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
924     if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, TD, TLI, DT,
925                                          MaxRecurse))
926       return V;
927 
928   // If the operation is with the result of a phi instruction, check whether
929   // operating on all incoming values of the phi always yields the same value.
930   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
931     if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, TD, TLI, DT,
932                                       MaxRecurse))
933       return V;
934 
935   return 0;
936 }
937 
938 /// SimplifySDivInst - Given operands for an SDiv, see if we can
939 /// fold the result.  If not, this returns null.
940 static Value *SimplifySDivInst(Value *Op0, Value *Op1, const TargetData *TD,
941                                const TargetLibraryInfo *TLI,
942                                const DominatorTree *DT, unsigned MaxRecurse) {
943   if (Value *V = SimplifyDiv(Instruction::SDiv, Op0, Op1, TD, TLI, DT,
944                              MaxRecurse))
945     return V;
946 
947   return 0;
948 }
949 
950 Value *llvm::SimplifySDivInst(Value *Op0, Value *Op1, const TargetData *TD,
951                               const TargetLibraryInfo *TLI,
952                               const DominatorTree *DT) {
953   return ::SimplifySDivInst(Op0, Op1, TD, TLI, DT, RecursionLimit);
954 }
955 
956 /// SimplifyUDivInst - Given operands for a UDiv, see if we can
957 /// fold the result.  If not, this returns null.
958 static Value *SimplifyUDivInst(Value *Op0, Value *Op1, const TargetData *TD,
959                                const TargetLibraryInfo *TLI,
960                                const DominatorTree *DT, unsigned MaxRecurse) {
961   if (Value *V = SimplifyDiv(Instruction::UDiv, Op0, Op1, TD, TLI, DT,
962                              MaxRecurse))
963     return V;
964 
965   return 0;
966 }
967 
968 Value *llvm::SimplifyUDivInst(Value *Op0, Value *Op1, const TargetData *TD,
969                               const TargetLibraryInfo *TLI,
970                               const DominatorTree *DT) {
971   return ::SimplifyUDivInst(Op0, Op1, TD, TLI, DT, RecursionLimit);
972 }
973 
974 static Value *SimplifyFDivInst(Value *Op0, Value *Op1, const TargetData *,
975                                const TargetLibraryInfo *,
976                                const DominatorTree *, unsigned) {
977   // undef / X -> undef    (the undef could be a snan).
978   if (match(Op0, m_Undef()))
979     return Op0;
980 
981   // X / undef -> undef
982   if (match(Op1, m_Undef()))
983     return Op1;
984 
985   return 0;
986 }
987 
988 Value *llvm::SimplifyFDivInst(Value *Op0, Value *Op1, const TargetData *TD,
989                               const TargetLibraryInfo *TLI,
990                               const DominatorTree *DT) {
991   return ::SimplifyFDivInst(Op0, Op1, TD, TLI, DT, RecursionLimit);
992 }
993 
994 /// SimplifyRem - Given operands for an SRem or URem, see if we can
995 /// fold the result.  If not, this returns null.
996 static Value *SimplifyRem(Instruction::BinaryOps Opcode, Value *Op0, Value *Op1,
997                           const TargetData *TD, const TargetLibraryInfo *TLI,
998                           const DominatorTree *DT, unsigned MaxRecurse) {
999   if (Constant *C0 = dyn_cast<Constant>(Op0)) {
1000     if (Constant *C1 = dyn_cast<Constant>(Op1)) {
1001       Constant *Ops[] = { C0, C1 };
1002       return ConstantFoldInstOperands(Opcode, C0->getType(), Ops, TD, TLI);
1003     }
1004   }
1005 
1006   // X % undef -> undef
1007   if (match(Op1, m_Undef()))
1008     return Op1;
1009 
1010   // undef % X -> 0
1011   if (match(Op0, m_Undef()))
1012     return Constant::getNullValue(Op0->getType());
1013 
1014   // 0 % X -> 0, we don't need to preserve faults!
1015   if (match(Op0, m_Zero()))
1016     return Op0;
1017 
1018   // X % 0 -> undef, we don't need to preserve faults!
1019   if (match(Op1, m_Zero()))
1020     return UndefValue::get(Op0->getType());
1021 
1022   // X % 1 -> 0
1023   if (match(Op1, m_One()))
1024     return Constant::getNullValue(Op0->getType());
1025 
1026   if (Op0->getType()->isIntegerTy(1))
1027     // It can't be remainder by zero, hence it must be remainder by one.
1028     return Constant::getNullValue(Op0->getType());
1029 
1030   // X % X -> 0
1031   if (Op0 == Op1)
1032     return Constant::getNullValue(Op0->getType());
1033 
1034   // If the operation is with the result of a select instruction, check whether
1035   // operating on either branch of the select always yields the same value.
1036   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1037     if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, TD, TLI, DT, MaxRecurse))
1038       return V;
1039 
1040   // If the operation is with the result of a phi instruction, check whether
1041   // operating on all incoming values of the phi always yields the same value.
1042   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1043     if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, TD, TLI, DT, MaxRecurse))
1044       return V;
1045 
1046   return 0;
1047 }
1048 
1049 /// SimplifySRemInst - Given operands for an SRem, see if we can
1050 /// fold the result.  If not, this returns null.
1051 static Value *SimplifySRemInst(Value *Op0, Value *Op1, const TargetData *TD,
1052                                const TargetLibraryInfo *TLI,
1053                                const DominatorTree *DT,
1054                                unsigned MaxRecurse) {
1055   if (Value *V = SimplifyRem(Instruction::SRem, Op0, Op1, TD, TLI, DT, MaxRecurse))
1056     return V;
1057 
1058   return 0;
1059 }
1060 
1061 Value *llvm::SimplifySRemInst(Value *Op0, Value *Op1, const TargetData *TD,
1062                               const TargetLibraryInfo *TLI,
1063                               const DominatorTree *DT) {
1064   return ::SimplifySRemInst(Op0, Op1, TD, TLI, DT, RecursionLimit);
1065 }
1066 
1067 /// SimplifyURemInst - Given operands for a URem, see if we can
1068 /// fold the result.  If not, this returns null.
1069 static Value *SimplifyURemInst(Value *Op0, Value *Op1, const TargetData *TD,
1070                                const TargetLibraryInfo *TLI,
1071                                const DominatorTree *DT,
1072                                unsigned MaxRecurse) {
1073   if (Value *V = SimplifyRem(Instruction::URem, Op0, Op1, TD, TLI, DT, MaxRecurse))
1074     return V;
1075 
1076   return 0;
1077 }
1078 
1079 Value *llvm::SimplifyURemInst(Value *Op0, Value *Op1, const TargetData *TD,
1080                               const TargetLibraryInfo *TLI,
1081                               const DominatorTree *DT) {
1082   return ::SimplifyURemInst(Op0, Op1, TD, TLI, DT, RecursionLimit);
1083 }
1084 
1085 static Value *SimplifyFRemInst(Value *Op0, Value *Op1, const TargetData *,
1086                                const TargetLibraryInfo *,
1087                                const DominatorTree *,
1088                                unsigned) {
1089   // undef % X -> undef    (the undef could be a snan).
1090   if (match(Op0, m_Undef()))
1091     return Op0;
1092 
1093   // X % undef -> undef
1094   if (match(Op1, m_Undef()))
1095     return Op1;
1096 
1097   return 0;
1098 }
1099 
1100 Value *llvm::SimplifyFRemInst(Value *Op0, Value *Op1, const TargetData *TD,
1101                               const TargetLibraryInfo *TLI,
1102                               const DominatorTree *DT) {
1103   return ::SimplifyFRemInst(Op0, Op1, TD, TLI, DT, RecursionLimit);
1104 }
1105 
1106 /// SimplifyShift - Given operands for an Shl, LShr or AShr, see if we can
1107 /// fold the result.  If not, this returns null.
1108 static Value *SimplifyShift(unsigned Opcode, Value *Op0, Value *Op1,
1109                             const TargetData *TD, const TargetLibraryInfo *TLI,
1110                             const DominatorTree *DT, unsigned MaxRecurse) {
1111   if (Constant *C0 = dyn_cast<Constant>(Op0)) {
1112     if (Constant *C1 = dyn_cast<Constant>(Op1)) {
1113       Constant *Ops[] = { C0, C1 };
1114       return ConstantFoldInstOperands(Opcode, C0->getType(), Ops, TD, TLI);
1115     }
1116   }
1117 
1118   // 0 shift by X -> 0
1119   if (match(Op0, m_Zero()))
1120     return Op0;
1121 
1122   // X shift by 0 -> X
1123   if (match(Op1, m_Zero()))
1124     return Op0;
1125 
1126   // X shift by undef -> undef because it may shift by the bitwidth.
1127   if (match(Op1, m_Undef()))
1128     return Op1;
1129 
1130   // Shifting by the bitwidth or more is undefined.
1131   if (ConstantInt *CI = dyn_cast<ConstantInt>(Op1))
1132     if (CI->getValue().getLimitedValue() >=
1133         Op0->getType()->getScalarSizeInBits())
1134       return UndefValue::get(Op0->getType());
1135 
1136   // If the operation is with the result of a select instruction, check whether
1137   // operating on either branch of the select always yields the same value.
1138   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1139     if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, TD, TLI, DT, MaxRecurse))
1140       return V;
1141 
1142   // If the operation is with the result of a phi instruction, check whether
1143   // operating on all incoming values of the phi always yields the same value.
1144   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1145     if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, TD, TLI, DT, MaxRecurse))
1146       return V;
1147 
1148   return 0;
1149 }
1150 
1151 /// SimplifyShlInst - Given operands for an Shl, see if we can
1152 /// fold the result.  If not, this returns null.
1153 static Value *SimplifyShlInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
1154                               const TargetData *TD,
1155                               const TargetLibraryInfo *TLI,
1156                               const DominatorTree *DT, unsigned MaxRecurse) {
1157   if (Value *V = SimplifyShift(Instruction::Shl, Op0, Op1, TD, TLI, DT, MaxRecurse))
1158     return V;
1159 
1160   // undef << X -> 0
1161   if (match(Op0, m_Undef()))
1162     return Constant::getNullValue(Op0->getType());
1163 
1164   // (X >> A) << A -> X
1165   Value *X;
1166   if (match(Op0, m_Exact(m_Shr(m_Value(X), m_Specific(Op1)))))
1167     return X;
1168   return 0;
1169 }
1170 
1171 Value *llvm::SimplifyShlInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
1172                              const TargetData *TD, const TargetLibraryInfo *TLI,
1173                              const DominatorTree *DT) {
1174   return ::SimplifyShlInst(Op0, Op1, isNSW, isNUW, TD, TLI, DT, RecursionLimit);
1175 }
1176 
1177 /// SimplifyLShrInst - Given operands for an LShr, see if we can
1178 /// fold the result.  If not, this returns null.
1179 static Value *SimplifyLShrInst(Value *Op0, Value *Op1, bool isExact,
1180                                const TargetData *TD,
1181                                const TargetLibraryInfo *TLI,
1182                                const DominatorTree *DT,
1183                                unsigned MaxRecurse) {
1184   if (Value *V = SimplifyShift(Instruction::LShr, Op0, Op1, TD, TLI, DT, MaxRecurse))
1185     return V;
1186 
1187   // undef >>l X -> 0
1188   if (match(Op0, m_Undef()))
1189     return Constant::getNullValue(Op0->getType());
1190 
1191   // (X << A) >> A -> X
1192   Value *X;
1193   if (match(Op0, m_Shl(m_Value(X), m_Specific(Op1))) &&
1194       cast<OverflowingBinaryOperator>(Op0)->hasNoUnsignedWrap())
1195     return X;
1196 
1197   return 0;
1198 }
1199 
1200 Value *llvm::SimplifyLShrInst(Value *Op0, Value *Op1, bool isExact,
1201                               const TargetData *TD,
1202                               const TargetLibraryInfo *TLI,
1203                               const DominatorTree *DT) {
1204   return ::SimplifyLShrInst(Op0, Op1, isExact, TD, TLI, DT, RecursionLimit);
1205 }
1206 
1207 /// SimplifyAShrInst - Given operands for an AShr, see if we can
1208 /// fold the result.  If not, this returns null.
1209 static Value *SimplifyAShrInst(Value *Op0, Value *Op1, bool isExact,
1210                                const TargetData *TD,
1211                                const TargetLibraryInfo *TLI,
1212                                const DominatorTree *DT,
1213                                unsigned MaxRecurse) {
1214   if (Value *V = SimplifyShift(Instruction::AShr, Op0, Op1, TD, TLI, DT, MaxRecurse))
1215     return V;
1216 
1217   // all ones >>a X -> all ones
1218   if (match(Op0, m_AllOnes()))
1219     return Op0;
1220 
1221   // undef >>a X -> all ones
1222   if (match(Op0, m_Undef()))
1223     return Constant::getAllOnesValue(Op0->getType());
1224 
1225   // (X << A) >> A -> X
1226   Value *X;
1227   if (match(Op0, m_Shl(m_Value(X), m_Specific(Op1))) &&
1228       cast<OverflowingBinaryOperator>(Op0)->hasNoSignedWrap())
1229     return X;
1230 
1231   return 0;
1232 }
1233 
1234 Value *llvm::SimplifyAShrInst(Value *Op0, Value *Op1, bool isExact,
1235                               const TargetData *TD,
1236                               const TargetLibraryInfo *TLI,
1237                               const DominatorTree *DT) {
1238   return ::SimplifyAShrInst(Op0, Op1, isExact, TD, TLI, DT, RecursionLimit);
1239 }
1240 
1241 /// SimplifyAndInst - Given operands for an And, see if we can
1242 /// fold the result.  If not, this returns null.
1243 static Value *SimplifyAndInst(Value *Op0, Value *Op1, const TargetData *TD,
1244                               const TargetLibraryInfo *TLI,
1245                               const DominatorTree *DT,
1246                               unsigned MaxRecurse) {
1247   if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
1248     if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
1249       Constant *Ops[] = { CLHS, CRHS };
1250       return ConstantFoldInstOperands(Instruction::And, CLHS->getType(),
1251                                       Ops, TD, TLI);
1252     }
1253 
1254     // Canonicalize the constant to the RHS.
1255     std::swap(Op0, Op1);
1256   }
1257 
1258   // X & undef -> 0
1259   if (match(Op1, m_Undef()))
1260     return Constant::getNullValue(Op0->getType());
1261 
1262   // X & X = X
1263   if (Op0 == Op1)
1264     return Op0;
1265 
1266   // X & 0 = 0
1267   if (match(Op1, m_Zero()))
1268     return Op1;
1269 
1270   // X & -1 = X
1271   if (match(Op1, m_AllOnes()))
1272     return Op0;
1273 
1274   // A & ~A  =  ~A & A  =  0
1275   if (match(Op0, m_Not(m_Specific(Op1))) ||
1276       match(Op1, m_Not(m_Specific(Op0))))
1277     return Constant::getNullValue(Op0->getType());
1278 
1279   // (A | ?) & A = A
1280   Value *A = 0, *B = 0;
1281   if (match(Op0, m_Or(m_Value(A), m_Value(B))) &&
1282       (A == Op1 || B == Op1))
1283     return Op1;
1284 
1285   // A & (A | ?) = A
1286   if (match(Op1, m_Or(m_Value(A), m_Value(B))) &&
1287       (A == Op0 || B == Op0))
1288     return Op0;
1289 
1290   // A & (-A) = A if A is a power of two or zero.
1291   if (match(Op0, m_Neg(m_Specific(Op1))) ||
1292       match(Op1, m_Neg(m_Specific(Op0)))) {
1293     if (isPowerOfTwo(Op0, TD, /*OrZero*/true))
1294       return Op0;
1295     if (isPowerOfTwo(Op1, TD, /*OrZero*/true))
1296       return Op1;
1297   }
1298 
1299   // Try some generic simplifications for associative operations.
1300   if (Value *V = SimplifyAssociativeBinOp(Instruction::And, Op0, Op1, TD, TLI,
1301                                           DT, MaxRecurse))
1302     return V;
1303 
1304   // And distributes over Or.  Try some generic simplifications based on this.
1305   if (Value *V = ExpandBinOp(Instruction::And, Op0, Op1, Instruction::Or,
1306                              TD, TLI, DT, MaxRecurse))
1307     return V;
1308 
1309   // And distributes over Xor.  Try some generic simplifications based on this.
1310   if (Value *V = ExpandBinOp(Instruction::And, Op0, Op1, Instruction::Xor,
1311                              TD, TLI, DT, MaxRecurse))
1312     return V;
1313 
1314   // Or distributes over And.  Try some generic simplifications based on this.
1315   if (Value *V = FactorizeBinOp(Instruction::And, Op0, Op1, Instruction::Or,
1316                                 TD, TLI, DT, MaxRecurse))
1317     return V;
1318 
1319   // If the operation is with the result of a select instruction, check whether
1320   // operating on either branch of the select always yields the same value.
1321   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1322     if (Value *V = ThreadBinOpOverSelect(Instruction::And, Op0, Op1, TD, TLI,
1323                                          DT, MaxRecurse))
1324       return V;
1325 
1326   // If the operation is with the result of a phi instruction, check whether
1327   // operating on all incoming values of the phi always yields the same value.
1328   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1329     if (Value *V = ThreadBinOpOverPHI(Instruction::And, Op0, Op1, TD, TLI, DT,
1330                                       MaxRecurse))
1331       return V;
1332 
1333   return 0;
1334 }
1335 
1336 Value *llvm::SimplifyAndInst(Value *Op0, Value *Op1, const TargetData *TD,
1337                              const TargetLibraryInfo *TLI,
1338                              const DominatorTree *DT) {
1339   return ::SimplifyAndInst(Op0, Op1, TD, TLI, DT, RecursionLimit);
1340 }
1341 
1342 /// SimplifyOrInst - Given operands for an Or, see if we can
1343 /// fold the result.  If not, this returns null.
1344 static Value *SimplifyOrInst(Value *Op0, Value *Op1, const TargetData *TD,
1345                              const TargetLibraryInfo *TLI,
1346                              const DominatorTree *DT, unsigned MaxRecurse) {
1347   if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
1348     if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
1349       Constant *Ops[] = { CLHS, CRHS };
1350       return ConstantFoldInstOperands(Instruction::Or, CLHS->getType(),
1351                                       Ops, TD, TLI);
1352     }
1353 
1354     // Canonicalize the constant to the RHS.
1355     std::swap(Op0, Op1);
1356   }
1357 
1358   // X | undef -> -1
1359   if (match(Op1, m_Undef()))
1360     return Constant::getAllOnesValue(Op0->getType());
1361 
1362   // X | X = X
1363   if (Op0 == Op1)
1364     return Op0;
1365 
1366   // X | 0 = X
1367   if (match(Op1, m_Zero()))
1368     return Op0;
1369 
1370   // X | -1 = -1
1371   if (match(Op1, m_AllOnes()))
1372     return Op1;
1373 
1374   // A | ~A  =  ~A | A  =  -1
1375   if (match(Op0, m_Not(m_Specific(Op1))) ||
1376       match(Op1, m_Not(m_Specific(Op0))))
1377     return Constant::getAllOnesValue(Op0->getType());
1378 
1379   // (A & ?) | A = A
1380   Value *A = 0, *B = 0;
1381   if (match(Op0, m_And(m_Value(A), m_Value(B))) &&
1382       (A == Op1 || B == Op1))
1383     return Op1;
1384 
1385   // A | (A & ?) = A
1386   if (match(Op1, m_And(m_Value(A), m_Value(B))) &&
1387       (A == Op0 || B == Op0))
1388     return Op0;
1389 
1390   // ~(A & ?) | A = -1
1391   if (match(Op0, m_Not(m_And(m_Value(A), m_Value(B)))) &&
1392       (A == Op1 || B == Op1))
1393     return Constant::getAllOnesValue(Op1->getType());
1394 
1395   // A | ~(A & ?) = -1
1396   if (match(Op1, m_Not(m_And(m_Value(A), m_Value(B)))) &&
1397       (A == Op0 || B == Op0))
1398     return Constant::getAllOnesValue(Op0->getType());
1399 
1400   // Try some generic simplifications for associative operations.
1401   if (Value *V = SimplifyAssociativeBinOp(Instruction::Or, Op0, Op1, TD, TLI,
1402                                           DT, MaxRecurse))
1403     return V;
1404 
1405   // Or distributes over And.  Try some generic simplifications based on this.
1406   if (Value *V = ExpandBinOp(Instruction::Or, Op0, Op1, Instruction::And, TD,
1407                              TLI, DT, MaxRecurse))
1408     return V;
1409 
1410   // And distributes over Or.  Try some generic simplifications based on this.
1411   if (Value *V = FactorizeBinOp(Instruction::Or, Op0, Op1, Instruction::And,
1412                                 TD, TLI, DT, MaxRecurse))
1413     return V;
1414 
1415   // If the operation is with the result of a select instruction, check whether
1416   // operating on either branch of the select always yields the same value.
1417   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1418     if (Value *V = ThreadBinOpOverSelect(Instruction::Or, Op0, Op1, TD, TLI, DT,
1419                                          MaxRecurse))
1420       return V;
1421 
1422   // If the operation is with the result of a phi instruction, check whether
1423   // operating on all incoming values of the phi always yields the same value.
1424   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1425     if (Value *V = ThreadBinOpOverPHI(Instruction::Or, Op0, Op1, TD, TLI, DT,
1426                                       MaxRecurse))
1427       return V;
1428 
1429   return 0;
1430 }
1431 
1432 Value *llvm::SimplifyOrInst(Value *Op0, Value *Op1, const TargetData *TD,
1433                             const TargetLibraryInfo *TLI,
1434                             const DominatorTree *DT) {
1435   return ::SimplifyOrInst(Op0, Op1, TD, TLI, DT, RecursionLimit);
1436 }
1437 
1438 /// SimplifyXorInst - Given operands for a Xor, see if we can
1439 /// fold the result.  If not, this returns null.
1440 static Value *SimplifyXorInst(Value *Op0, Value *Op1, const TargetData *TD,
1441                               const TargetLibraryInfo *TLI,
1442                               const DominatorTree *DT, unsigned MaxRecurse) {
1443   if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
1444     if (Constant *CRHS = dyn_cast<Constant>(Op1)) {
1445       Constant *Ops[] = { CLHS, CRHS };
1446       return ConstantFoldInstOperands(Instruction::Xor, CLHS->getType(),
1447                                       Ops, TD, TLI);
1448     }
1449 
1450     // Canonicalize the constant to the RHS.
1451     std::swap(Op0, Op1);
1452   }
1453 
1454   // A ^ undef -> undef
1455   if (match(Op1, m_Undef()))
1456     return Op1;
1457 
1458   // A ^ 0 = A
1459   if (match(Op1, m_Zero()))
1460     return Op0;
1461 
1462   // A ^ A = 0
1463   if (Op0 == Op1)
1464     return Constant::getNullValue(Op0->getType());
1465 
1466   // A ^ ~A  =  ~A ^ A  =  -1
1467   if (match(Op0, m_Not(m_Specific(Op1))) ||
1468       match(Op1, m_Not(m_Specific(Op0))))
1469     return Constant::getAllOnesValue(Op0->getType());
1470 
1471   // Try some generic simplifications for associative operations.
1472   if (Value *V = SimplifyAssociativeBinOp(Instruction::Xor, Op0, Op1, TD, TLI,
1473                                           DT, MaxRecurse))
1474     return V;
1475 
1476   // And distributes over Xor.  Try some generic simplifications based on this.
1477   if (Value *V = FactorizeBinOp(Instruction::Xor, Op0, Op1, Instruction::And,
1478                                 TD, TLI, DT, MaxRecurse))
1479     return V;
1480 
1481   // Threading Xor over selects and phi nodes is pointless, so don't bother.
1482   // Threading over the select in "A ^ select(cond, B, C)" means evaluating
1483   // "A^B" and "A^C" and seeing if they are equal; but they are equal if and
1484   // only if B and C are equal.  If B and C are equal then (since we assume
1485   // that operands have already been simplified) "select(cond, B, C)" should
1486   // have been simplified to the common value of B and C already.  Analysing
1487   // "A^B" and "A^C" thus gains nothing, but costs compile time.  Similarly
1488   // for threading over phi nodes.
1489 
1490   return 0;
1491 }
1492 
1493 Value *llvm::SimplifyXorInst(Value *Op0, Value *Op1, const TargetData *TD,
1494                              const TargetLibraryInfo *TLI,
1495                              const DominatorTree *DT) {
1496   return ::SimplifyXorInst(Op0, Op1, TD, TLI, DT, RecursionLimit);
1497 }
1498 
1499 static Type *GetCompareTy(Value *Op) {
1500   return CmpInst::makeCmpResultType(Op->getType());
1501 }
1502 
1503 /// ExtractEquivalentCondition - Rummage around inside V looking for something
1504 /// equivalent to the comparison "LHS Pred RHS".  Return such a value if found,
1505 /// otherwise return null.  Helper function for analyzing max/min idioms.
1506 static Value *ExtractEquivalentCondition(Value *V, CmpInst::Predicate Pred,
1507                                          Value *LHS, Value *RHS) {
1508   SelectInst *SI = dyn_cast<SelectInst>(V);
1509   if (!SI)
1510     return 0;
1511   CmpInst *Cmp = dyn_cast<CmpInst>(SI->getCondition());
1512   if (!Cmp)
1513     return 0;
1514   Value *CmpLHS = Cmp->getOperand(0), *CmpRHS = Cmp->getOperand(1);
1515   if (Pred == Cmp->getPredicate() && LHS == CmpLHS && RHS == CmpRHS)
1516     return Cmp;
1517   if (Pred == CmpInst::getSwappedPredicate(Cmp->getPredicate()) &&
1518       LHS == CmpRHS && RHS == CmpLHS)
1519     return Cmp;
1520   return 0;
1521 }
1522 
1523 /// stripPointerAdjustments - This is like Value::stripPointerCasts, but also
1524 /// removes inbounds gep operations, regardless of their indices.
1525 static Value *stripPointerAdjustments(Value *V) {
1526   if (GEPOperator *GEP = dyn_cast<GEPOperator>(V))
1527     if (GEP->isInBounds())
1528       return stripPointerAdjustments(GEP->getOperand(0)->stripPointerCasts());
1529   return V;
1530 }
1531 
1532 /// SimplifyICmpInst - Given operands for an ICmpInst, see if we can
1533 /// fold the result.  If not, this returns null.
1534 static Value *SimplifyICmpInst(unsigned Predicate, Value *LHS, Value *RHS,
1535                                const TargetData *TD,
1536                                const TargetLibraryInfo *TLI,
1537                                const DominatorTree *DT,
1538                                unsigned MaxRecurse) {
1539   CmpInst::Predicate Pred = (CmpInst::Predicate)Predicate;
1540   assert(CmpInst::isIntPredicate(Pred) && "Not an integer compare!");
1541 
1542   if (Constant *CLHS = dyn_cast<Constant>(LHS)) {
1543     if (Constant *CRHS = dyn_cast<Constant>(RHS))
1544       return ConstantFoldCompareInstOperands(Pred, CLHS, CRHS, TD, TLI);
1545 
1546     // If we have a constant, make sure it is on the RHS.
1547     std::swap(LHS, RHS);
1548     Pred = CmpInst::getSwappedPredicate(Pred);
1549   }
1550 
1551   Type *ITy = GetCompareTy(LHS); // The return type.
1552   Type *OpTy = LHS->getType();   // The operand type.
1553 
1554   // icmp X, X -> true/false
1555   // X icmp undef -> true/false.  For example, icmp ugt %X, undef -> false
1556   // because X could be 0.
1557   if (LHS == RHS || isa<UndefValue>(RHS))
1558     return ConstantInt::get(ITy, CmpInst::isTrueWhenEqual(Pred));
1559 
1560   // Special case logic when the operands have i1 type.
1561   if (OpTy->getScalarType()->isIntegerTy(1)) {
1562     switch (Pred) {
1563     default: break;
1564     case ICmpInst::ICMP_EQ:
1565       // X == 1 -> X
1566       if (match(RHS, m_One()))
1567         return LHS;
1568       break;
1569     case ICmpInst::ICMP_NE:
1570       // X != 0 -> X
1571       if (match(RHS, m_Zero()))
1572         return LHS;
1573       break;
1574     case ICmpInst::ICMP_UGT:
1575       // X >u 0 -> X
1576       if (match(RHS, m_Zero()))
1577         return LHS;
1578       break;
1579     case ICmpInst::ICMP_UGE:
1580       // X >=u 1 -> X
1581       if (match(RHS, m_One()))
1582         return LHS;
1583       break;
1584     case ICmpInst::ICMP_SLT:
1585       // X <s 0 -> X
1586       if (match(RHS, m_Zero()))
1587         return LHS;
1588       break;
1589     case ICmpInst::ICMP_SLE:
1590       // X <=s -1 -> X
1591       if (match(RHS, m_One()))
1592         return LHS;
1593       break;
1594     }
1595   }
1596 
1597   // icmp <alloca*>, <global/alloca*/null> - Different stack variables have
1598   // different addresses, and what's more the address of a stack variable is
1599   // never null or equal to the address of a global.  Note that generalizing
1600   // to the case where LHS is a global variable address or null is pointless,
1601   // since if both LHS and RHS are constants then we already constant folded
1602   // the compare, and if only one of them is then we moved it to RHS already.
1603   Value *LHSPtr = LHS->stripPointerCasts();
1604   Value *RHSPtr = RHS->stripPointerCasts();
1605   if (LHSPtr == RHSPtr)
1606     return ConstantInt::get(ITy, CmpInst::isTrueWhenEqual(Pred));
1607 
1608   // Be more aggressive about stripping pointer adjustments when checking a
1609   // comparison of an alloca address to another object.  We can rip off all
1610   // inbounds GEP operations, even if they are variable.
1611   LHSPtr = stripPointerAdjustments(LHSPtr);
1612   if (isa<AllocaInst>(LHSPtr)) {
1613     RHSPtr = stripPointerAdjustments(RHSPtr);
1614     if (LHSPtr != RHSPtr &&
1615         (isa<GlobalValue>(RHSPtr) || isa<AllocaInst>(RHSPtr)  ||
1616          isa<ConstantPointerNull>(RHSPtr)))
1617       return ConstantInt::get(ITy, CmpInst::isFalseWhenEqual(Pred));
1618   }
1619 
1620   // If we are comparing with zero then try hard since this is a common case.
1621   if (match(RHS, m_Zero())) {
1622     bool LHSKnownNonNegative, LHSKnownNegative;
1623     switch (Pred) {
1624     default: llvm_unreachable("Unknown ICmp predicate!");
1625     case ICmpInst::ICMP_ULT:
1626       return getFalse(ITy);
1627     case ICmpInst::ICMP_UGE:
1628       return getTrue(ITy);
1629     case ICmpInst::ICMP_EQ:
1630     case ICmpInst::ICMP_ULE:
1631       if (isKnownNonZero(LHS, TD))
1632         return getFalse(ITy);
1633       break;
1634     case ICmpInst::ICMP_NE:
1635     case ICmpInst::ICMP_UGT:
1636       if (isKnownNonZero(LHS, TD))
1637         return getTrue(ITy);
1638       break;
1639     case ICmpInst::ICMP_SLT:
1640       ComputeSignBit(LHS, LHSKnownNonNegative, LHSKnownNegative, TD);
1641       if (LHSKnownNegative)
1642         return getTrue(ITy);
1643       if (LHSKnownNonNegative)
1644         return getFalse(ITy);
1645       break;
1646     case ICmpInst::ICMP_SLE:
1647       ComputeSignBit(LHS, LHSKnownNonNegative, LHSKnownNegative, TD);
1648       if (LHSKnownNegative)
1649         return getTrue(ITy);
1650       if (LHSKnownNonNegative && isKnownNonZero(LHS, TD))
1651         return getFalse(ITy);
1652       break;
1653     case ICmpInst::ICMP_SGE:
1654       ComputeSignBit(LHS, LHSKnownNonNegative, LHSKnownNegative, TD);
1655       if (LHSKnownNegative)
1656         return getFalse(ITy);
1657       if (LHSKnownNonNegative)
1658         return getTrue(ITy);
1659       break;
1660     case ICmpInst::ICMP_SGT:
1661       ComputeSignBit(LHS, LHSKnownNonNegative, LHSKnownNegative, TD);
1662       if (LHSKnownNegative)
1663         return getFalse(ITy);
1664       if (LHSKnownNonNegative && isKnownNonZero(LHS, TD))
1665         return getTrue(ITy);
1666       break;
1667     }
1668   }
1669 
1670   // See if we are doing a comparison with a constant integer.
1671   if (ConstantInt *CI = dyn_cast<ConstantInt>(RHS)) {
1672     // Rule out tautological comparisons (eg., ult 0 or uge 0).
1673     ConstantRange RHS_CR = ICmpInst::makeConstantRange(Pred, CI->getValue());
1674     if (RHS_CR.isEmptySet())
1675       return ConstantInt::getFalse(CI->getContext());
1676     if (RHS_CR.isFullSet())
1677       return ConstantInt::getTrue(CI->getContext());
1678 
1679     // Many binary operators with constant RHS have easy to compute constant
1680     // range.  Use them to check whether the comparison is a tautology.
1681     uint32_t Width = CI->getBitWidth();
1682     APInt Lower = APInt(Width, 0);
1683     APInt Upper = APInt(Width, 0);
1684     ConstantInt *CI2;
1685     if (match(LHS, m_URem(m_Value(), m_ConstantInt(CI2)))) {
1686       // 'urem x, CI2' produces [0, CI2).
1687       Upper = CI2->getValue();
1688     } else if (match(LHS, m_SRem(m_Value(), m_ConstantInt(CI2)))) {
1689       // 'srem x, CI2' produces (-|CI2|, |CI2|).
1690       Upper = CI2->getValue().abs();
1691       Lower = (-Upper) + 1;
1692     } else if (match(LHS, m_UDiv(m_ConstantInt(CI2), m_Value()))) {
1693       // 'udiv CI2, x' produces [0, CI2].
1694       Upper = CI2->getValue() + 1;
1695     } else if (match(LHS, m_UDiv(m_Value(), m_ConstantInt(CI2)))) {
1696       // 'udiv x, CI2' produces [0, UINT_MAX / CI2].
1697       APInt NegOne = APInt::getAllOnesValue(Width);
1698       if (!CI2->isZero())
1699         Upper = NegOne.udiv(CI2->getValue()) + 1;
1700     } else if (match(LHS, m_SDiv(m_Value(), m_ConstantInt(CI2)))) {
1701       // 'sdiv x, CI2' produces [INT_MIN / CI2, INT_MAX / CI2].
1702       APInt IntMin = APInt::getSignedMinValue(Width);
1703       APInt IntMax = APInt::getSignedMaxValue(Width);
1704       APInt Val = CI2->getValue().abs();
1705       if (!Val.isMinValue()) {
1706         Lower = IntMin.sdiv(Val);
1707         Upper = IntMax.sdiv(Val) + 1;
1708       }
1709     } else if (match(LHS, m_LShr(m_Value(), m_ConstantInt(CI2)))) {
1710       // 'lshr x, CI2' produces [0, UINT_MAX >> CI2].
1711       APInt NegOne = APInt::getAllOnesValue(Width);
1712       if (CI2->getValue().ult(Width))
1713         Upper = NegOne.lshr(CI2->getValue()) + 1;
1714     } else if (match(LHS, m_AShr(m_Value(), m_ConstantInt(CI2)))) {
1715       // 'ashr x, CI2' produces [INT_MIN >> CI2, INT_MAX >> CI2].
1716       APInt IntMin = APInt::getSignedMinValue(Width);
1717       APInt IntMax = APInt::getSignedMaxValue(Width);
1718       if (CI2->getValue().ult(Width)) {
1719         Lower = IntMin.ashr(CI2->getValue());
1720         Upper = IntMax.ashr(CI2->getValue()) + 1;
1721       }
1722     } else if (match(LHS, m_Or(m_Value(), m_ConstantInt(CI2)))) {
1723       // 'or x, CI2' produces [CI2, UINT_MAX].
1724       Lower = CI2->getValue();
1725     } else if (match(LHS, m_And(m_Value(), m_ConstantInt(CI2)))) {
1726       // 'and x, CI2' produces [0, CI2].
1727       Upper = CI2->getValue() + 1;
1728     }
1729     if (Lower != Upper) {
1730       ConstantRange LHS_CR = ConstantRange(Lower, Upper);
1731       if (RHS_CR.contains(LHS_CR))
1732         return ConstantInt::getTrue(RHS->getContext());
1733       if (RHS_CR.inverse().contains(LHS_CR))
1734         return ConstantInt::getFalse(RHS->getContext());
1735     }
1736   }
1737 
1738   // Compare of cast, for example (zext X) != 0 -> X != 0
1739   if (isa<CastInst>(LHS) && (isa<Constant>(RHS) || isa<CastInst>(RHS))) {
1740     Instruction *LI = cast<CastInst>(LHS);
1741     Value *SrcOp = LI->getOperand(0);
1742     Type *SrcTy = SrcOp->getType();
1743     Type *DstTy = LI->getType();
1744 
1745     // Turn icmp (ptrtoint x), (ptrtoint/constant) into a compare of the input
1746     // if the integer type is the same size as the pointer type.
1747     if (MaxRecurse && TD && isa<PtrToIntInst>(LI) &&
1748         TD->getPointerSizeInBits() == DstTy->getPrimitiveSizeInBits()) {
1749       if (Constant *RHSC = dyn_cast<Constant>(RHS)) {
1750         // Transfer the cast to the constant.
1751         if (Value *V = SimplifyICmpInst(Pred, SrcOp,
1752                                         ConstantExpr::getIntToPtr(RHSC, SrcTy),
1753                                         TD, TLI, DT, MaxRecurse-1))
1754           return V;
1755       } else if (PtrToIntInst *RI = dyn_cast<PtrToIntInst>(RHS)) {
1756         if (RI->getOperand(0)->getType() == SrcTy)
1757           // Compare without the cast.
1758           if (Value *V = SimplifyICmpInst(Pred, SrcOp, RI->getOperand(0),
1759                                           TD, TLI, DT, MaxRecurse-1))
1760             return V;
1761       }
1762     }
1763 
1764     if (isa<ZExtInst>(LHS)) {
1765       // Turn icmp (zext X), (zext Y) into a compare of X and Y if they have the
1766       // same type.
1767       if (ZExtInst *RI = dyn_cast<ZExtInst>(RHS)) {
1768         if (MaxRecurse && SrcTy == RI->getOperand(0)->getType())
1769           // Compare X and Y.  Note that signed predicates become unsigned.
1770           if (Value *V = SimplifyICmpInst(ICmpInst::getUnsignedPredicate(Pred),
1771                                           SrcOp, RI->getOperand(0), TD, TLI, DT,
1772                                           MaxRecurse-1))
1773             return V;
1774       }
1775       // Turn icmp (zext X), Cst into a compare of X and Cst if Cst is extended
1776       // too.  If not, then try to deduce the result of the comparison.
1777       else if (ConstantInt *CI = dyn_cast<ConstantInt>(RHS)) {
1778         // Compute the constant that would happen if we truncated to SrcTy then
1779         // reextended to DstTy.
1780         Constant *Trunc = ConstantExpr::getTrunc(CI, SrcTy);
1781         Constant *RExt = ConstantExpr::getCast(CastInst::ZExt, Trunc, DstTy);
1782 
1783         // If the re-extended constant didn't change then this is effectively
1784         // also a case of comparing two zero-extended values.
1785         if (RExt == CI && MaxRecurse)
1786           if (Value *V = SimplifyICmpInst(ICmpInst::getUnsignedPredicate(Pred),
1787                                         SrcOp, Trunc, TD, TLI, DT, MaxRecurse-1))
1788             return V;
1789 
1790         // Otherwise the upper bits of LHS are zero while RHS has a non-zero bit
1791         // there.  Use this to work out the result of the comparison.
1792         if (RExt != CI) {
1793           switch (Pred) {
1794           default: llvm_unreachable("Unknown ICmp predicate!");
1795           // LHS <u RHS.
1796           case ICmpInst::ICMP_EQ:
1797           case ICmpInst::ICMP_UGT:
1798           case ICmpInst::ICMP_UGE:
1799             return ConstantInt::getFalse(CI->getContext());
1800 
1801           case ICmpInst::ICMP_NE:
1802           case ICmpInst::ICMP_ULT:
1803           case ICmpInst::ICMP_ULE:
1804             return ConstantInt::getTrue(CI->getContext());
1805 
1806           // LHS is non-negative.  If RHS is negative then LHS >s LHS.  If RHS
1807           // is non-negative then LHS <s RHS.
1808           case ICmpInst::ICMP_SGT:
1809           case ICmpInst::ICMP_SGE:
1810             return CI->getValue().isNegative() ?
1811               ConstantInt::getTrue(CI->getContext()) :
1812               ConstantInt::getFalse(CI->getContext());
1813 
1814           case ICmpInst::ICMP_SLT:
1815           case ICmpInst::ICMP_SLE:
1816             return CI->getValue().isNegative() ?
1817               ConstantInt::getFalse(CI->getContext()) :
1818               ConstantInt::getTrue(CI->getContext());
1819           }
1820         }
1821       }
1822     }
1823 
1824     if (isa<SExtInst>(LHS)) {
1825       // Turn icmp (sext X), (sext Y) into a compare of X and Y if they have the
1826       // same type.
1827       if (SExtInst *RI = dyn_cast<SExtInst>(RHS)) {
1828         if (MaxRecurse && SrcTy == RI->getOperand(0)->getType())
1829           // Compare X and Y.  Note that the predicate does not change.
1830           if (Value *V = SimplifyICmpInst(Pred, SrcOp, RI->getOperand(0),
1831                                           TD, TLI, DT, MaxRecurse-1))
1832             return V;
1833       }
1834       // Turn icmp (sext X), Cst into a compare of X and Cst if Cst is extended
1835       // too.  If not, then try to deduce the result of the comparison.
1836       else if (ConstantInt *CI = dyn_cast<ConstantInt>(RHS)) {
1837         // Compute the constant that would happen if we truncated to SrcTy then
1838         // reextended to DstTy.
1839         Constant *Trunc = ConstantExpr::getTrunc(CI, SrcTy);
1840         Constant *RExt = ConstantExpr::getCast(CastInst::SExt, Trunc, DstTy);
1841 
1842         // If the re-extended constant didn't change then this is effectively
1843         // also a case of comparing two sign-extended values.
1844         if (RExt == CI && MaxRecurse)
1845           if (Value *V = SimplifyICmpInst(Pred, SrcOp, Trunc, TD, TLI, DT,
1846                                           MaxRecurse-1))
1847             return V;
1848 
1849         // Otherwise the upper bits of LHS are all equal, while RHS has varying
1850         // bits there.  Use this to work out the result of the comparison.
1851         if (RExt != CI) {
1852           switch (Pred) {
1853           default: llvm_unreachable("Unknown ICmp predicate!");
1854           case ICmpInst::ICMP_EQ:
1855             return ConstantInt::getFalse(CI->getContext());
1856           case ICmpInst::ICMP_NE:
1857             return ConstantInt::getTrue(CI->getContext());
1858 
1859           // If RHS is non-negative then LHS <s RHS.  If RHS is negative then
1860           // LHS >s RHS.
1861           case ICmpInst::ICMP_SGT:
1862           case ICmpInst::ICMP_SGE:
1863             return CI->getValue().isNegative() ?
1864               ConstantInt::getTrue(CI->getContext()) :
1865               ConstantInt::getFalse(CI->getContext());
1866           case ICmpInst::ICMP_SLT:
1867           case ICmpInst::ICMP_SLE:
1868             return CI->getValue().isNegative() ?
1869               ConstantInt::getFalse(CI->getContext()) :
1870               ConstantInt::getTrue(CI->getContext());
1871 
1872           // If LHS is non-negative then LHS <u RHS.  If LHS is negative then
1873           // LHS >u RHS.
1874           case ICmpInst::ICMP_UGT:
1875           case ICmpInst::ICMP_UGE:
1876             // Comparison is true iff the LHS <s 0.
1877             if (MaxRecurse)
1878               if (Value *V = SimplifyICmpInst(ICmpInst::ICMP_SLT, SrcOp,
1879                                               Constant::getNullValue(SrcTy),
1880                                               TD, TLI, DT, MaxRecurse-1))
1881                 return V;
1882             break;
1883           case ICmpInst::ICMP_ULT:
1884           case ICmpInst::ICMP_ULE:
1885             // Comparison is true iff the LHS >=s 0.
1886             if (MaxRecurse)
1887               if (Value *V = SimplifyICmpInst(ICmpInst::ICMP_SGE, SrcOp,
1888                                               Constant::getNullValue(SrcTy),
1889                                               TD, TLI, DT, MaxRecurse-1))
1890                 return V;
1891             break;
1892           }
1893         }
1894       }
1895     }
1896   }
1897 
1898   // Special logic for binary operators.
1899   BinaryOperator *LBO = dyn_cast<BinaryOperator>(LHS);
1900   BinaryOperator *RBO = dyn_cast<BinaryOperator>(RHS);
1901   if (MaxRecurse && (LBO || RBO)) {
1902     // Analyze the case when either LHS or RHS is an add instruction.
1903     Value *A = 0, *B = 0, *C = 0, *D = 0;
1904     // LHS = A + B (or A and B are null); RHS = C + D (or C and D are null).
1905     bool NoLHSWrapProblem = false, NoRHSWrapProblem = false;
1906     if (LBO && LBO->getOpcode() == Instruction::Add) {
1907       A = LBO->getOperand(0); B = LBO->getOperand(1);
1908       NoLHSWrapProblem = ICmpInst::isEquality(Pred) ||
1909         (CmpInst::isUnsigned(Pred) && LBO->hasNoUnsignedWrap()) ||
1910         (CmpInst::isSigned(Pred) && LBO->hasNoSignedWrap());
1911     }
1912     if (RBO && RBO->getOpcode() == Instruction::Add) {
1913       C = RBO->getOperand(0); D = RBO->getOperand(1);
1914       NoRHSWrapProblem = ICmpInst::isEquality(Pred) ||
1915         (CmpInst::isUnsigned(Pred) && RBO->hasNoUnsignedWrap()) ||
1916         (CmpInst::isSigned(Pred) && RBO->hasNoSignedWrap());
1917     }
1918 
1919     // icmp (X+Y), X -> icmp Y, 0 for equalities or if there is no overflow.
1920     if ((A == RHS || B == RHS) && NoLHSWrapProblem)
1921       if (Value *V = SimplifyICmpInst(Pred, A == RHS ? B : A,
1922                                       Constant::getNullValue(RHS->getType()),
1923                                       TD, TLI, DT, MaxRecurse-1))
1924         return V;
1925 
1926     // icmp X, (X+Y) -> icmp 0, Y for equalities or if there is no overflow.
1927     if ((C == LHS || D == LHS) && NoRHSWrapProblem)
1928       if (Value *V = SimplifyICmpInst(Pred,
1929                                       Constant::getNullValue(LHS->getType()),
1930                                       C == LHS ? D : C, TD, TLI, DT, MaxRecurse-1))
1931         return V;
1932 
1933     // icmp (X+Y), (X+Z) -> icmp Y,Z for equalities or if there is no overflow.
1934     if (A && C && (A == C || A == D || B == C || B == D) &&
1935         NoLHSWrapProblem && NoRHSWrapProblem) {
1936       // Determine Y and Z in the form icmp (X+Y), (X+Z).
1937       Value *Y = (A == C || A == D) ? B : A;
1938       Value *Z = (C == A || C == B) ? D : C;
1939       if (Value *V = SimplifyICmpInst(Pred, Y, Z, TD, TLI, DT, MaxRecurse-1))
1940         return V;
1941     }
1942   }
1943 
1944   if (LBO && match(LBO, m_URem(m_Value(), m_Specific(RHS)))) {
1945     bool KnownNonNegative, KnownNegative;
1946     switch (Pred) {
1947     default:
1948       break;
1949     case ICmpInst::ICMP_SGT:
1950     case ICmpInst::ICMP_SGE:
1951       ComputeSignBit(LHS, KnownNonNegative, KnownNegative, TD);
1952       if (!KnownNonNegative)
1953         break;
1954       // fall-through
1955     case ICmpInst::ICMP_EQ:
1956     case ICmpInst::ICMP_UGT:
1957     case ICmpInst::ICMP_UGE:
1958       return getFalse(ITy);
1959     case ICmpInst::ICMP_SLT:
1960     case ICmpInst::ICMP_SLE:
1961       ComputeSignBit(LHS, KnownNonNegative, KnownNegative, TD);
1962       if (!KnownNonNegative)
1963         break;
1964       // fall-through
1965     case ICmpInst::ICMP_NE:
1966     case ICmpInst::ICMP_ULT:
1967     case ICmpInst::ICMP_ULE:
1968       return getTrue(ITy);
1969     }
1970   }
1971   if (RBO && match(RBO, m_URem(m_Value(), m_Specific(LHS)))) {
1972     bool KnownNonNegative, KnownNegative;
1973     switch (Pred) {
1974     default:
1975       break;
1976     case ICmpInst::ICMP_SGT:
1977     case ICmpInst::ICMP_SGE:
1978       ComputeSignBit(RHS, KnownNonNegative, KnownNegative, TD);
1979       if (!KnownNonNegative)
1980         break;
1981       // fall-through
1982     case ICmpInst::ICMP_NE:
1983     case ICmpInst::ICMP_UGT:
1984     case ICmpInst::ICMP_UGE:
1985       return getTrue(ITy);
1986     case ICmpInst::ICMP_SLT:
1987     case ICmpInst::ICMP_SLE:
1988       ComputeSignBit(RHS, KnownNonNegative, KnownNegative, TD);
1989       if (!KnownNonNegative)
1990         break;
1991       // fall-through
1992     case ICmpInst::ICMP_EQ:
1993     case ICmpInst::ICMP_ULT:
1994     case ICmpInst::ICMP_ULE:
1995       return getFalse(ITy);
1996     }
1997   }
1998 
1999   // x udiv y <=u x.
2000   if (LBO && match(LBO, m_UDiv(m_Specific(RHS), m_Value()))) {
2001     // icmp pred (X /u Y), X
2002     if (Pred == ICmpInst::ICMP_UGT)
2003       return getFalse(ITy);
2004     if (Pred == ICmpInst::ICMP_ULE)
2005       return getTrue(ITy);
2006   }
2007 
2008   if (MaxRecurse && LBO && RBO && LBO->getOpcode() == RBO->getOpcode() &&
2009       LBO->getOperand(1) == RBO->getOperand(1)) {
2010     switch (LBO->getOpcode()) {
2011     default: break;
2012     case Instruction::UDiv:
2013     case Instruction::LShr:
2014       if (ICmpInst::isSigned(Pred))
2015         break;
2016       // fall-through
2017     case Instruction::SDiv:
2018     case Instruction::AShr:
2019       if (!LBO->isExact() || !RBO->isExact())
2020         break;
2021       if (Value *V = SimplifyICmpInst(Pred, LBO->getOperand(0),
2022                                       RBO->getOperand(0), TD, TLI, DT, MaxRecurse-1))
2023         return V;
2024       break;
2025     case Instruction::Shl: {
2026       bool NUW = LBO->hasNoUnsignedWrap() && RBO->hasNoUnsignedWrap();
2027       bool NSW = LBO->hasNoSignedWrap() && RBO->hasNoSignedWrap();
2028       if (!NUW && !NSW)
2029         break;
2030       if (!NSW && ICmpInst::isSigned(Pred))
2031         break;
2032       if (Value *V = SimplifyICmpInst(Pred, LBO->getOperand(0),
2033                                       RBO->getOperand(0), TD, TLI, DT, MaxRecurse-1))
2034         return V;
2035       break;
2036     }
2037     }
2038   }
2039 
2040   // Simplify comparisons involving max/min.
2041   Value *A, *B;
2042   CmpInst::Predicate P = CmpInst::BAD_ICMP_PREDICATE;
2043   CmpInst::Predicate EqP; // Chosen so that "A == max/min(A,B)" iff "A EqP B".
2044 
2045   // Signed variants on "max(a,b)>=a -> true".
2046   if (match(LHS, m_SMax(m_Value(A), m_Value(B))) && (A == RHS || B == RHS)) {
2047     if (A != RHS) std::swap(A, B); // smax(A, B) pred A.
2048     EqP = CmpInst::ICMP_SGE; // "A == smax(A, B)" iff "A sge B".
2049     // We analyze this as smax(A, B) pred A.
2050     P = Pred;
2051   } else if (match(RHS, m_SMax(m_Value(A), m_Value(B))) &&
2052              (A == LHS || B == LHS)) {
2053     if (A != LHS) std::swap(A, B); // A pred smax(A, B).
2054     EqP = CmpInst::ICMP_SGE; // "A == smax(A, B)" iff "A sge B".
2055     // We analyze this as smax(A, B) swapped-pred A.
2056     P = CmpInst::getSwappedPredicate(Pred);
2057   } else if (match(LHS, m_SMin(m_Value(A), m_Value(B))) &&
2058              (A == RHS || B == RHS)) {
2059     if (A != RHS) std::swap(A, B); // smin(A, B) pred A.
2060     EqP = CmpInst::ICMP_SLE; // "A == smin(A, B)" iff "A sle B".
2061     // We analyze this as smax(-A, -B) swapped-pred -A.
2062     // Note that we do not need to actually form -A or -B thanks to EqP.
2063     P = CmpInst::getSwappedPredicate(Pred);
2064   } else if (match(RHS, m_SMin(m_Value(A), m_Value(B))) &&
2065              (A == LHS || B == LHS)) {
2066     if (A != LHS) std::swap(A, B); // A pred smin(A, B).
2067     EqP = CmpInst::ICMP_SLE; // "A == smin(A, B)" iff "A sle B".
2068     // We analyze this as smax(-A, -B) pred -A.
2069     // Note that we do not need to actually form -A or -B thanks to EqP.
2070     P = Pred;
2071   }
2072   if (P != CmpInst::BAD_ICMP_PREDICATE) {
2073     // Cases correspond to "max(A, B) p A".
2074     switch (P) {
2075     default:
2076       break;
2077     case CmpInst::ICMP_EQ:
2078     case CmpInst::ICMP_SLE:
2079       // Equivalent to "A EqP B".  This may be the same as the condition tested
2080       // in the max/min; if so, we can just return that.
2081       if (Value *V = ExtractEquivalentCondition(LHS, EqP, A, B))
2082         return V;
2083       if (Value *V = ExtractEquivalentCondition(RHS, EqP, A, B))
2084         return V;
2085       // Otherwise, see if "A EqP B" simplifies.
2086       if (MaxRecurse)
2087         if (Value *V = SimplifyICmpInst(EqP, A, B, TD, TLI, DT, MaxRecurse-1))
2088           return V;
2089       break;
2090     case CmpInst::ICMP_NE:
2091     case CmpInst::ICMP_SGT: {
2092       CmpInst::Predicate InvEqP = CmpInst::getInversePredicate(EqP);
2093       // Equivalent to "A InvEqP B".  This may be the same as the condition
2094       // tested in the max/min; if so, we can just return that.
2095       if (Value *V = ExtractEquivalentCondition(LHS, InvEqP, A, B))
2096         return V;
2097       if (Value *V = ExtractEquivalentCondition(RHS, InvEqP, A, B))
2098         return V;
2099       // Otherwise, see if "A InvEqP B" simplifies.
2100       if (MaxRecurse)
2101         if (Value *V = SimplifyICmpInst(InvEqP, A, B, TD, TLI, DT, MaxRecurse-1))
2102           return V;
2103       break;
2104     }
2105     case CmpInst::ICMP_SGE:
2106       // Always true.
2107       return getTrue(ITy);
2108     case CmpInst::ICMP_SLT:
2109       // Always false.
2110       return getFalse(ITy);
2111     }
2112   }
2113 
2114   // Unsigned variants on "max(a,b)>=a -> true".
2115   P = CmpInst::BAD_ICMP_PREDICATE;
2116   if (match(LHS, m_UMax(m_Value(A), m_Value(B))) && (A == RHS || B == RHS)) {
2117     if (A != RHS) std::swap(A, B); // umax(A, B) pred A.
2118     EqP = CmpInst::ICMP_UGE; // "A == umax(A, B)" iff "A uge B".
2119     // We analyze this as umax(A, B) pred A.
2120     P = Pred;
2121   } else if (match(RHS, m_UMax(m_Value(A), m_Value(B))) &&
2122              (A == LHS || B == LHS)) {
2123     if (A != LHS) std::swap(A, B); // A pred umax(A, B).
2124     EqP = CmpInst::ICMP_UGE; // "A == umax(A, B)" iff "A uge B".
2125     // We analyze this as umax(A, B) swapped-pred A.
2126     P = CmpInst::getSwappedPredicate(Pred);
2127   } else if (match(LHS, m_UMin(m_Value(A), m_Value(B))) &&
2128              (A == RHS || B == RHS)) {
2129     if (A != RHS) std::swap(A, B); // umin(A, B) pred A.
2130     EqP = CmpInst::ICMP_ULE; // "A == umin(A, B)" iff "A ule B".
2131     // We analyze this as umax(-A, -B) swapped-pred -A.
2132     // Note that we do not need to actually form -A or -B thanks to EqP.
2133     P = CmpInst::getSwappedPredicate(Pred);
2134   } else if (match(RHS, m_UMin(m_Value(A), m_Value(B))) &&
2135              (A == LHS || B == LHS)) {
2136     if (A != LHS) std::swap(A, B); // A pred umin(A, B).
2137     EqP = CmpInst::ICMP_ULE; // "A == umin(A, B)" iff "A ule B".
2138     // We analyze this as umax(-A, -B) pred -A.
2139     // Note that we do not need to actually form -A or -B thanks to EqP.
2140     P = Pred;
2141   }
2142   if (P != CmpInst::BAD_ICMP_PREDICATE) {
2143     // Cases correspond to "max(A, B) p A".
2144     switch (P) {
2145     default:
2146       break;
2147     case CmpInst::ICMP_EQ:
2148     case CmpInst::ICMP_ULE:
2149       // Equivalent to "A EqP B".  This may be the same as the condition tested
2150       // in the max/min; if so, we can just return that.
2151       if (Value *V = ExtractEquivalentCondition(LHS, EqP, A, B))
2152         return V;
2153       if (Value *V = ExtractEquivalentCondition(RHS, EqP, A, B))
2154         return V;
2155       // Otherwise, see if "A EqP B" simplifies.
2156       if (MaxRecurse)
2157         if (Value *V = SimplifyICmpInst(EqP, A, B, TD, TLI, DT, MaxRecurse-1))
2158           return V;
2159       break;
2160     case CmpInst::ICMP_NE:
2161     case CmpInst::ICMP_UGT: {
2162       CmpInst::Predicate InvEqP = CmpInst::getInversePredicate(EqP);
2163       // Equivalent to "A InvEqP B".  This may be the same as the condition
2164       // tested in the max/min; if so, we can just return that.
2165       if (Value *V = ExtractEquivalentCondition(LHS, InvEqP, A, B))
2166         return V;
2167       if (Value *V = ExtractEquivalentCondition(RHS, InvEqP, A, B))
2168         return V;
2169       // Otherwise, see if "A InvEqP B" simplifies.
2170       if (MaxRecurse)
2171         if (Value *V = SimplifyICmpInst(InvEqP, A, B, TD, TLI, DT, MaxRecurse-1))
2172           return V;
2173       break;
2174     }
2175     case CmpInst::ICMP_UGE:
2176       // Always true.
2177       return getTrue(ITy);
2178     case CmpInst::ICMP_ULT:
2179       // Always false.
2180       return getFalse(ITy);
2181     }
2182   }
2183 
2184   // Variants on "max(x,y) >= min(x,z)".
2185   Value *C, *D;
2186   if (match(LHS, m_SMax(m_Value(A), m_Value(B))) &&
2187       match(RHS, m_SMin(m_Value(C), m_Value(D))) &&
2188       (A == C || A == D || B == C || B == D)) {
2189     // max(x, ?) pred min(x, ?).
2190     if (Pred == CmpInst::ICMP_SGE)
2191       // Always true.
2192       return getTrue(ITy);
2193     if (Pred == CmpInst::ICMP_SLT)
2194       // Always false.
2195       return getFalse(ITy);
2196   } else if (match(LHS, m_SMin(m_Value(A), m_Value(B))) &&
2197              match(RHS, m_SMax(m_Value(C), m_Value(D))) &&
2198              (A == C || A == D || B == C || B == D)) {
2199     // min(x, ?) pred max(x, ?).
2200     if (Pred == CmpInst::ICMP_SLE)
2201       // Always true.
2202       return getTrue(ITy);
2203     if (Pred == CmpInst::ICMP_SGT)
2204       // Always false.
2205       return getFalse(ITy);
2206   } else if (match(LHS, m_UMax(m_Value(A), m_Value(B))) &&
2207              match(RHS, m_UMin(m_Value(C), m_Value(D))) &&
2208              (A == C || A == D || B == C || B == D)) {
2209     // max(x, ?) pred min(x, ?).
2210     if (Pred == CmpInst::ICMP_UGE)
2211       // Always true.
2212       return getTrue(ITy);
2213     if (Pred == CmpInst::ICMP_ULT)
2214       // Always false.
2215       return getFalse(ITy);
2216   } else if (match(LHS, m_UMin(m_Value(A), m_Value(B))) &&
2217              match(RHS, m_UMax(m_Value(C), m_Value(D))) &&
2218              (A == C || A == D || B == C || B == D)) {
2219     // min(x, ?) pred max(x, ?).
2220     if (Pred == CmpInst::ICMP_ULE)
2221       // Always true.
2222       return getTrue(ITy);
2223     if (Pred == CmpInst::ICMP_UGT)
2224       // Always false.
2225       return getFalse(ITy);
2226   }
2227 
2228   // If the comparison is with the result of a select instruction, check whether
2229   // comparing with either branch of the select always yields the same value.
2230   if (isa<SelectInst>(LHS) || isa<SelectInst>(RHS))
2231     if (Value *V = ThreadCmpOverSelect(Pred, LHS, RHS, TD, TLI, DT, MaxRecurse))
2232       return V;
2233 
2234   // If the comparison is with the result of a phi instruction, check whether
2235   // doing the compare with each incoming phi value yields a common result.
2236   if (isa<PHINode>(LHS) || isa<PHINode>(RHS))
2237     if (Value *V = ThreadCmpOverPHI(Pred, LHS, RHS, TD, TLI, DT, MaxRecurse))
2238       return V;
2239 
2240   return 0;
2241 }
2242 
2243 Value *llvm::SimplifyICmpInst(unsigned Predicate, Value *LHS, Value *RHS,
2244                               const TargetData *TD,
2245                               const TargetLibraryInfo *TLI,
2246                               const DominatorTree *DT) {
2247   return ::SimplifyICmpInst(Predicate, LHS, RHS, TD, TLI, DT, RecursionLimit);
2248 }
2249 
2250 /// SimplifyFCmpInst - Given operands for an FCmpInst, see if we can
2251 /// fold the result.  If not, this returns null.
2252 static Value *SimplifyFCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
2253                                const TargetData *TD,
2254                                const TargetLibraryInfo *TLI,
2255                                const DominatorTree *DT,
2256                                unsigned MaxRecurse) {
2257   CmpInst::Predicate Pred = (CmpInst::Predicate)Predicate;
2258   assert(CmpInst::isFPPredicate(Pred) && "Not an FP compare!");
2259 
2260   if (Constant *CLHS = dyn_cast<Constant>(LHS)) {
2261     if (Constant *CRHS = dyn_cast<Constant>(RHS))
2262       return ConstantFoldCompareInstOperands(Pred, CLHS, CRHS, TD, TLI);
2263 
2264     // If we have a constant, make sure it is on the RHS.
2265     std::swap(LHS, RHS);
2266     Pred = CmpInst::getSwappedPredicate(Pred);
2267   }
2268 
2269   // Fold trivial predicates.
2270   if (Pred == FCmpInst::FCMP_FALSE)
2271     return ConstantInt::get(GetCompareTy(LHS), 0);
2272   if (Pred == FCmpInst::FCMP_TRUE)
2273     return ConstantInt::get(GetCompareTy(LHS), 1);
2274 
2275   if (isa<UndefValue>(RHS))                  // fcmp pred X, undef -> undef
2276     return UndefValue::get(GetCompareTy(LHS));
2277 
2278   // fcmp x,x -> true/false.  Not all compares are foldable.
2279   if (LHS == RHS) {
2280     if (CmpInst::isTrueWhenEqual(Pred))
2281       return ConstantInt::get(GetCompareTy(LHS), 1);
2282     if (CmpInst::isFalseWhenEqual(Pred))
2283       return ConstantInt::get(GetCompareTy(LHS), 0);
2284   }
2285 
2286   // Handle fcmp with constant RHS
2287   if (Constant *RHSC = dyn_cast<Constant>(RHS)) {
2288     // If the constant is a nan, see if we can fold the comparison based on it.
2289     if (ConstantFP *CFP = dyn_cast<ConstantFP>(RHSC)) {
2290       if (CFP->getValueAPF().isNaN()) {
2291         if (FCmpInst::isOrdered(Pred))   // True "if ordered and foo"
2292           return ConstantInt::getFalse(CFP->getContext());
2293         assert(FCmpInst::isUnordered(Pred) &&
2294                "Comparison must be either ordered or unordered!");
2295         // True if unordered.
2296         return ConstantInt::getTrue(CFP->getContext());
2297       }
2298       // Check whether the constant is an infinity.
2299       if (CFP->getValueAPF().isInfinity()) {
2300         if (CFP->getValueAPF().isNegative()) {
2301           switch (Pred) {
2302           case FCmpInst::FCMP_OLT:
2303             // No value is ordered and less than negative infinity.
2304             return ConstantInt::getFalse(CFP->getContext());
2305           case FCmpInst::FCMP_UGE:
2306             // All values are unordered with or at least negative infinity.
2307             return ConstantInt::getTrue(CFP->getContext());
2308           default:
2309             break;
2310           }
2311         } else {
2312           switch (Pred) {
2313           case FCmpInst::FCMP_OGT:
2314             // No value is ordered and greater than infinity.
2315             return ConstantInt::getFalse(CFP->getContext());
2316           case FCmpInst::FCMP_ULE:
2317             // All values are unordered with and at most infinity.
2318             return ConstantInt::getTrue(CFP->getContext());
2319           default:
2320             break;
2321           }
2322         }
2323       }
2324     }
2325   }
2326 
2327   // If the comparison is with the result of a select instruction, check whether
2328   // comparing with either branch of the select always yields the same value.
2329   if (isa<SelectInst>(LHS) || isa<SelectInst>(RHS))
2330     if (Value *V = ThreadCmpOverSelect(Pred, LHS, RHS, TD, TLI, DT, MaxRecurse))
2331       return V;
2332 
2333   // If the comparison is with the result of a phi instruction, check whether
2334   // doing the compare with each incoming phi value yields a common result.
2335   if (isa<PHINode>(LHS) || isa<PHINode>(RHS))
2336     if (Value *V = ThreadCmpOverPHI(Pred, LHS, RHS, TD, TLI, DT, MaxRecurse))
2337       return V;
2338 
2339   return 0;
2340 }
2341 
2342 Value *llvm::SimplifyFCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
2343                               const TargetData *TD,
2344                               const TargetLibraryInfo *TLI,
2345                               const DominatorTree *DT) {
2346   return ::SimplifyFCmpInst(Predicate, LHS, RHS, TD, TLI, DT, RecursionLimit);
2347 }
2348 
2349 /// SimplifySelectInst - Given operands for a SelectInst, see if we can fold
2350 /// the result.  If not, this returns null.
2351 Value *llvm::SimplifySelectInst(Value *CondVal, Value *TrueVal, Value *FalseVal,
2352                                 const TargetData *TD, const DominatorTree *) {
2353   // select true, X, Y  -> X
2354   // select false, X, Y -> Y
2355   if (ConstantInt *CB = dyn_cast<ConstantInt>(CondVal))
2356     return CB->getZExtValue() ? TrueVal : FalseVal;
2357 
2358   // select C, X, X -> X
2359   if (TrueVal == FalseVal)
2360     return TrueVal;
2361 
2362   if (isa<UndefValue>(CondVal)) {  // select undef, X, Y -> X or Y
2363     if (isa<Constant>(TrueVal))
2364       return TrueVal;
2365     return FalseVal;
2366   }
2367   if (isa<UndefValue>(TrueVal))   // select C, undef, X -> X
2368     return FalseVal;
2369   if (isa<UndefValue>(FalseVal))   // select C, X, undef -> X
2370     return TrueVal;
2371 
2372   return 0;
2373 }
2374 
2375 /// SimplifyGEPInst - Given operands for an GetElementPtrInst, see if we can
2376 /// fold the result.  If not, this returns null.
2377 Value *llvm::SimplifyGEPInst(ArrayRef<Value *> Ops, const TargetData *TD,
2378                              const DominatorTree *) {
2379   // The type of the GEP pointer operand.
2380   PointerType *PtrTy = dyn_cast<PointerType>(Ops[0]->getType());
2381   // The GEP pointer operand is not a pointer, it's a vector of pointers.
2382   if (!PtrTy)
2383     return 0;
2384 
2385   // getelementptr P -> P.
2386   if (Ops.size() == 1)
2387     return Ops[0];
2388 
2389   if (isa<UndefValue>(Ops[0])) {
2390     // Compute the (pointer) type returned by the GEP instruction.
2391     Type *LastType = GetElementPtrInst::getIndexedType(PtrTy, Ops.slice(1));
2392     Type *GEPTy = PointerType::get(LastType, PtrTy->getAddressSpace());
2393     return UndefValue::get(GEPTy);
2394   }
2395 
2396   if (Ops.size() == 2) {
2397     // getelementptr P, 0 -> P.
2398     if (ConstantInt *C = dyn_cast<ConstantInt>(Ops[1]))
2399       if (C->isZero())
2400         return Ops[0];
2401     // getelementptr P, N -> P if P points to a type of zero size.
2402     if (TD) {
2403       Type *Ty = PtrTy->getElementType();
2404       if (Ty->isSized() && TD->getTypeAllocSize(Ty) == 0)
2405         return Ops[0];
2406     }
2407   }
2408 
2409   // Check to see if this is constant foldable.
2410   for (unsigned i = 0, e = Ops.size(); i != e; ++i)
2411     if (!isa<Constant>(Ops[i]))
2412       return 0;
2413 
2414   return ConstantExpr::getGetElementPtr(cast<Constant>(Ops[0]), Ops.slice(1));
2415 }
2416 
2417 /// SimplifyInsertValueInst - Given operands for an InsertValueInst, see if we
2418 /// can fold the result.  If not, this returns null.
2419 Value *llvm::SimplifyInsertValueInst(Value *Agg, Value *Val,
2420                                      ArrayRef<unsigned> Idxs,
2421                                      const TargetData *,
2422                                      const DominatorTree *) {
2423   if (Constant *CAgg = dyn_cast<Constant>(Agg))
2424     if (Constant *CVal = dyn_cast<Constant>(Val))
2425       return ConstantFoldInsertValueInstruction(CAgg, CVal, Idxs);
2426 
2427   // insertvalue x, undef, n -> x
2428   if (match(Val, m_Undef()))
2429     return Agg;
2430 
2431   // insertvalue x, (extractvalue y, n), n
2432   if (ExtractValueInst *EV = dyn_cast<ExtractValueInst>(Val))
2433     if (EV->getAggregateOperand()->getType() == Agg->getType() &&
2434         EV->getIndices() == Idxs) {
2435       // insertvalue undef, (extractvalue y, n), n -> y
2436       if (match(Agg, m_Undef()))
2437         return EV->getAggregateOperand();
2438 
2439       // insertvalue y, (extractvalue y, n), n -> y
2440       if (Agg == EV->getAggregateOperand())
2441         return Agg;
2442     }
2443 
2444   return 0;
2445 }
2446 
2447 /// SimplifyPHINode - See if we can fold the given phi.  If not, returns null.
2448 static Value *SimplifyPHINode(PHINode *PN, const DominatorTree *DT) {
2449   // If all of the PHI's incoming values are the same then replace the PHI node
2450   // with the common value.
2451   Value *CommonValue = 0;
2452   bool HasUndefInput = false;
2453   for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
2454     Value *Incoming = PN->getIncomingValue(i);
2455     // If the incoming value is the phi node itself, it can safely be skipped.
2456     if (Incoming == PN) continue;
2457     if (isa<UndefValue>(Incoming)) {
2458       // Remember that we saw an undef value, but otherwise ignore them.
2459       HasUndefInput = true;
2460       continue;
2461     }
2462     if (CommonValue && Incoming != CommonValue)
2463       return 0;  // Not the same, bail out.
2464     CommonValue = Incoming;
2465   }
2466 
2467   // If CommonValue is null then all of the incoming values were either undef or
2468   // equal to the phi node itself.
2469   if (!CommonValue)
2470     return UndefValue::get(PN->getType());
2471 
2472   // If we have a PHI node like phi(X, undef, X), where X is defined by some
2473   // instruction, we cannot return X as the result of the PHI node unless it
2474   // dominates the PHI block.
2475   if (HasUndefInput)
2476     return ValueDominatesPHI(CommonValue, PN, DT) ? CommonValue : 0;
2477 
2478   return CommonValue;
2479 }
2480 
2481 //=== Helper functions for higher up the class hierarchy.
2482 
2483 /// SimplifyBinOp - Given operands for a BinaryOperator, see if we can
2484 /// fold the result.  If not, this returns null.
2485 static Value *SimplifyBinOp(unsigned Opcode, Value *LHS, Value *RHS,
2486                             const TargetData *TD,
2487                             const TargetLibraryInfo *TLI,
2488                             const DominatorTree *DT,
2489                             unsigned MaxRecurse) {
2490   switch (Opcode) {
2491   case Instruction::Add:
2492     return SimplifyAddInst(LHS, RHS, /*isNSW*/false, /*isNUW*/false,
2493                            TD, TLI, DT, MaxRecurse);
2494   case Instruction::Sub:
2495     return SimplifySubInst(LHS, RHS, /*isNSW*/false, /*isNUW*/false,
2496                            TD, TLI, DT, MaxRecurse);
2497   case Instruction::Mul:  return SimplifyMulInst (LHS, RHS, TD, TLI, DT,
2498                                                   MaxRecurse);
2499   case Instruction::SDiv: return SimplifySDivInst(LHS, RHS, TD, TLI, DT,
2500                                                   MaxRecurse);
2501   case Instruction::UDiv: return SimplifyUDivInst(LHS, RHS, TD, TLI, DT,
2502                                                   MaxRecurse);
2503   case Instruction::FDiv: return SimplifyFDivInst(LHS, RHS, TD, TLI, DT,
2504                                                   MaxRecurse);
2505   case Instruction::SRem: return SimplifySRemInst(LHS, RHS, TD, TLI, DT,
2506                                                   MaxRecurse);
2507   case Instruction::URem: return SimplifyURemInst(LHS, RHS, TD, TLI, DT,
2508                                                   MaxRecurse);
2509   case Instruction::FRem: return SimplifyFRemInst(LHS, RHS, TD, TLI, DT,
2510                                                   MaxRecurse);
2511   case Instruction::Shl:
2512     return SimplifyShlInst(LHS, RHS, /*isNSW*/false, /*isNUW*/false,
2513                            TD, TLI, DT, MaxRecurse);
2514   case Instruction::LShr:
2515     return SimplifyLShrInst(LHS, RHS, /*isExact*/false, TD, TLI, DT,
2516                             MaxRecurse);
2517   case Instruction::AShr:
2518     return SimplifyAShrInst(LHS, RHS, /*isExact*/false, TD, TLI, DT,
2519                             MaxRecurse);
2520   case Instruction::And: return SimplifyAndInst(LHS, RHS, TD, TLI, DT,
2521                                                 MaxRecurse);
2522   case Instruction::Or:  return SimplifyOrInst (LHS, RHS, TD, TLI, DT,
2523                                                 MaxRecurse);
2524   case Instruction::Xor: return SimplifyXorInst(LHS, RHS, TD, TLI, DT,
2525                                                 MaxRecurse);
2526   default:
2527     if (Constant *CLHS = dyn_cast<Constant>(LHS))
2528       if (Constant *CRHS = dyn_cast<Constant>(RHS)) {
2529         Constant *COps[] = {CLHS, CRHS};
2530         return ConstantFoldInstOperands(Opcode, LHS->getType(), COps, TD, TLI);
2531       }
2532 
2533     // If the operation is associative, try some generic simplifications.
2534     if (Instruction::isAssociative(Opcode))
2535       if (Value *V = SimplifyAssociativeBinOp(Opcode, LHS, RHS, TD, TLI, DT,
2536                                               MaxRecurse))
2537         return V;
2538 
2539     // If the operation is with the result of a select instruction, check whether
2540     // operating on either branch of the select always yields the same value.
2541     if (isa<SelectInst>(LHS) || isa<SelectInst>(RHS))
2542       if (Value *V = ThreadBinOpOverSelect(Opcode, LHS, RHS, TD, TLI, DT,
2543                                            MaxRecurse))
2544         return V;
2545 
2546     // If the operation is with the result of a phi instruction, check whether
2547     // operating on all incoming values of the phi always yields the same value.
2548     if (isa<PHINode>(LHS) || isa<PHINode>(RHS))
2549       if (Value *V = ThreadBinOpOverPHI(Opcode, LHS, RHS, TD, TLI, DT,
2550                                         MaxRecurse))
2551         return V;
2552 
2553     return 0;
2554   }
2555 }
2556 
2557 Value *llvm::SimplifyBinOp(unsigned Opcode, Value *LHS, Value *RHS,
2558                            const TargetData *TD, const TargetLibraryInfo *TLI,
2559                            const DominatorTree *DT) {
2560   return ::SimplifyBinOp(Opcode, LHS, RHS, TD, TLI, DT, RecursionLimit);
2561 }
2562 
2563 /// SimplifyCmpInst - Given operands for a CmpInst, see if we can
2564 /// fold the result.
2565 static Value *SimplifyCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
2566                               const TargetData *TD,
2567                               const TargetLibraryInfo *TLI,
2568                               const DominatorTree *DT,
2569                               unsigned MaxRecurse) {
2570   if (CmpInst::isIntPredicate((CmpInst::Predicate)Predicate))
2571     return SimplifyICmpInst(Predicate, LHS, RHS, TD, TLI, DT, MaxRecurse);
2572   return SimplifyFCmpInst(Predicate, LHS, RHS, TD, TLI, DT, MaxRecurse);
2573 }
2574 
2575 Value *llvm::SimplifyCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
2576                              const TargetData *TD, const TargetLibraryInfo *TLI,
2577                              const DominatorTree *DT) {
2578   return ::SimplifyCmpInst(Predicate, LHS, RHS, TD, TLI, DT, RecursionLimit);
2579 }
2580 
2581 static Value *SimplifyCallInst(CallInst *CI) {
2582   // call undef -> undef
2583   if (isa<UndefValue>(CI->getCalledValue()))
2584     return UndefValue::get(CI->getType());
2585 
2586   return 0;
2587 }
2588 
2589 /// SimplifyInstruction - See if we can compute a simplified version of this
2590 /// instruction.  If not, this returns null.
2591 Value *llvm::SimplifyInstruction(Instruction *I, const TargetData *TD,
2592                                  const TargetLibraryInfo *TLI,
2593                                  const DominatorTree *DT) {
2594   Value *Result;
2595 
2596   switch (I->getOpcode()) {
2597   default:
2598     Result = ConstantFoldInstruction(I, TD, TLI);
2599     break;
2600   case Instruction::Add:
2601     Result = SimplifyAddInst(I->getOperand(0), I->getOperand(1),
2602                              cast<BinaryOperator>(I)->hasNoSignedWrap(),
2603                              cast<BinaryOperator>(I)->hasNoUnsignedWrap(),
2604                              TD, TLI, DT);
2605     break;
2606   case Instruction::Sub:
2607     Result = SimplifySubInst(I->getOperand(0), I->getOperand(1),
2608                              cast<BinaryOperator>(I)->hasNoSignedWrap(),
2609                              cast<BinaryOperator>(I)->hasNoUnsignedWrap(),
2610                              TD, TLI, DT);
2611     break;
2612   case Instruction::Mul:
2613     Result = SimplifyMulInst(I->getOperand(0), I->getOperand(1), TD, TLI, DT);
2614     break;
2615   case Instruction::SDiv:
2616     Result = SimplifySDivInst(I->getOperand(0), I->getOperand(1), TD, TLI, DT);
2617     break;
2618   case Instruction::UDiv:
2619     Result = SimplifyUDivInst(I->getOperand(0), I->getOperand(1), TD, TLI, DT);
2620     break;
2621   case Instruction::FDiv:
2622     Result = SimplifyFDivInst(I->getOperand(0), I->getOperand(1), TD, TLI, DT);
2623     break;
2624   case Instruction::SRem:
2625     Result = SimplifySRemInst(I->getOperand(0), I->getOperand(1), TD, TLI, DT);
2626     break;
2627   case Instruction::URem:
2628     Result = SimplifyURemInst(I->getOperand(0), I->getOperand(1), TD, TLI, DT);
2629     break;
2630   case Instruction::FRem:
2631     Result = SimplifyFRemInst(I->getOperand(0), I->getOperand(1), TD, TLI, DT);
2632     break;
2633   case Instruction::Shl:
2634     Result = SimplifyShlInst(I->getOperand(0), I->getOperand(1),
2635                              cast<BinaryOperator>(I)->hasNoSignedWrap(),
2636                              cast<BinaryOperator>(I)->hasNoUnsignedWrap(),
2637                              TD, TLI, DT);
2638     break;
2639   case Instruction::LShr:
2640     Result = SimplifyLShrInst(I->getOperand(0), I->getOperand(1),
2641                               cast<BinaryOperator>(I)->isExact(),
2642                               TD, TLI, DT);
2643     break;
2644   case Instruction::AShr:
2645     Result = SimplifyAShrInst(I->getOperand(0), I->getOperand(1),
2646                               cast<BinaryOperator>(I)->isExact(),
2647                               TD, TLI, DT);
2648     break;
2649   case Instruction::And:
2650     Result = SimplifyAndInst(I->getOperand(0), I->getOperand(1), TD, TLI, DT);
2651     break;
2652   case Instruction::Or:
2653     Result = SimplifyOrInst(I->getOperand(0), I->getOperand(1), TD, TLI, DT);
2654     break;
2655   case Instruction::Xor:
2656     Result = SimplifyXorInst(I->getOperand(0), I->getOperand(1), TD, TLI, DT);
2657     break;
2658   case Instruction::ICmp:
2659     Result = SimplifyICmpInst(cast<ICmpInst>(I)->getPredicate(),
2660                               I->getOperand(0), I->getOperand(1), TD, TLI, DT);
2661     break;
2662   case Instruction::FCmp:
2663     Result = SimplifyFCmpInst(cast<FCmpInst>(I)->getPredicate(),
2664                               I->getOperand(0), I->getOperand(1), TD, TLI, DT);
2665     break;
2666   case Instruction::Select:
2667     Result = SimplifySelectInst(I->getOperand(0), I->getOperand(1),
2668                                 I->getOperand(2), TD, DT);
2669     break;
2670   case Instruction::GetElementPtr: {
2671     SmallVector<Value*, 8> Ops(I->op_begin(), I->op_end());
2672     Result = SimplifyGEPInst(Ops, TD, DT);
2673     break;
2674   }
2675   case Instruction::InsertValue: {
2676     InsertValueInst *IV = cast<InsertValueInst>(I);
2677     Result = SimplifyInsertValueInst(IV->getAggregateOperand(),
2678                                      IV->getInsertedValueOperand(),
2679                                      IV->getIndices(), TD, DT);
2680     break;
2681   }
2682   case Instruction::PHI:
2683     Result = SimplifyPHINode(cast<PHINode>(I), DT);
2684     break;
2685   case Instruction::Call:
2686     Result = SimplifyCallInst(cast<CallInst>(I));
2687     break;
2688   }
2689 
2690   /// If called on unreachable code, the above logic may report that the
2691   /// instruction simplified to itself.  Make life easier for users by
2692   /// detecting that case here, returning a safe value instead.
2693   return Result == I ? UndefValue::get(I->getType()) : Result;
2694 }
2695 
2696 /// ReplaceAndSimplifyAllUses - Perform From->replaceAllUsesWith(To) and then
2697 /// delete the From instruction.  In addition to a basic RAUW, this does a
2698 /// recursive simplification of the newly formed instructions.  This catches
2699 /// things where one simplification exposes other opportunities.  This only
2700 /// simplifies and deletes scalar operations, it does not change the CFG.
2701 ///
2702 void llvm::ReplaceAndSimplifyAllUses(Instruction *From, Value *To,
2703                                      const TargetData *TD,
2704                                      const TargetLibraryInfo *TLI,
2705                                      const DominatorTree *DT) {
2706   assert(From != To && "ReplaceAndSimplifyAllUses(X,X) is not valid!");
2707 
2708   // FromHandle/ToHandle - This keeps a WeakVH on the from/to values so that
2709   // we can know if it gets deleted out from under us or replaced in a
2710   // recursive simplification.
2711   WeakVH FromHandle(From);
2712   WeakVH ToHandle(To);
2713 
2714   while (!From->use_empty()) {
2715     // Update the instruction to use the new value.
2716     Use &TheUse = From->use_begin().getUse();
2717     Instruction *User = cast<Instruction>(TheUse.getUser());
2718     TheUse = To;
2719 
2720     // Check to see if the instruction can be folded due to the operand
2721     // replacement.  For example changing (or X, Y) into (or X, -1) can replace
2722     // the 'or' with -1.
2723     Value *SimplifiedVal;
2724     {
2725       // Sanity check to make sure 'User' doesn't dangle across
2726       // SimplifyInstruction.
2727       AssertingVH<> UserHandle(User);
2728 
2729       SimplifiedVal = SimplifyInstruction(User, TD, TLI, DT);
2730       if (SimplifiedVal == 0) continue;
2731     }
2732 
2733     // Recursively simplify this user to the new value.
2734     ReplaceAndSimplifyAllUses(User, SimplifiedVal, TD, TLI, DT);
2735     From = dyn_cast_or_null<Instruction>((Value*)FromHandle);
2736     To = ToHandle;
2737 
2738     assert(ToHandle && "To value deleted by recursive simplification?");
2739 
2740     // If the recursive simplification ended up revisiting and deleting
2741     // 'From' then we're done.
2742     if (From == 0)
2743       return;
2744   }
2745 
2746   // If 'From' has value handles referring to it, do a real RAUW to update them.
2747   From->replaceAllUsesWith(To);
2748 
2749   From->eraseFromParent();
2750 }
2751