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 #include "llvm/Analysis/InstructionSimplify.h"
21 #include "llvm/ADT/SetVector.h"
22 #include "llvm/ADT/Statistic.h"
23 #include "llvm/Analysis/AliasAnalysis.h"
24 #include "llvm/Analysis/ConstantFolding.h"
25 #include "llvm/Analysis/MemoryBuiltins.h"
26 #include "llvm/Analysis/ValueTracking.h"
27 #include "llvm/Analysis/VectorUtils.h"
28 #include "llvm/IR/ConstantRange.h"
29 #include "llvm/IR/DataLayout.h"
30 #include "llvm/IR/Dominators.h"
31 #include "llvm/IR/GetElementPtrTypeIterator.h"
32 #include "llvm/IR/GlobalAlias.h"
33 #include "llvm/IR/Operator.h"
34 #include "llvm/IR/PatternMatch.h"
35 #include "llvm/IR/ValueHandle.h"
36 #include <algorithm>
37 using namespace llvm;
38 using namespace llvm::PatternMatch;
39 
40 #define DEBUG_TYPE "instsimplify"
41 
42 enum { RecursionLimit = 3 };
43 
44 STATISTIC(NumExpand,  "Number of expansions");
45 STATISTIC(NumReassoc, "Number of reassociations");
46 
47 namespace {
48 struct Query {
49   const DataLayout &DL;
50   const TargetLibraryInfo *TLI;
51   const DominatorTree *DT;
52   AssumptionCache *AC;
53   const Instruction *CxtI;
54 
55   Query(const DataLayout &DL, const TargetLibraryInfo *tli,
56         const DominatorTree *dt, AssumptionCache *ac = nullptr,
57         const Instruction *cxti = nullptr)
58       : DL(DL), TLI(tli), DT(dt), AC(ac), CxtI(cxti) {}
59 };
60 } // end anonymous namespace
61 
62 static Value *SimplifyAndInst(Value *, Value *, const Query &, unsigned);
63 static Value *SimplifyBinOp(unsigned, Value *, Value *, const Query &,
64                             unsigned);
65 static Value *SimplifyFPBinOp(unsigned, Value *, Value *, const FastMathFlags &,
66                               const Query &, unsigned);
67 static Value *SimplifyCmpInst(unsigned, Value *, Value *, const Query &,
68                               unsigned);
69 static Value *SimplifyOrInst(Value *, Value *, const Query &, unsigned);
70 static Value *SimplifyXorInst(Value *, Value *, const Query &, unsigned);
71 static Value *SimplifyTruncInst(Value *, Type *, const Query &, unsigned);
72 
73 /// For a boolean type, or a vector of boolean type, return false, or
74 /// a vector with every element false, as appropriate for the type.
75 static Constant *getFalse(Type *Ty) {
76   assert(Ty->getScalarType()->isIntegerTy(1) &&
77          "Expected i1 type or a vector of i1!");
78   return Constant::getNullValue(Ty);
79 }
80 
81 /// For a boolean type, or a vector of boolean type, return true, or
82 /// a vector with every element true, as appropriate for the type.
83 static Constant *getTrue(Type *Ty) {
84   assert(Ty->getScalarType()->isIntegerTy(1) &&
85          "Expected i1 type or a vector of i1!");
86   return Constant::getAllOnesValue(Ty);
87 }
88 
89 /// isSameCompare - Is V equivalent to the comparison "LHS Pred RHS"?
90 static bool isSameCompare(Value *V, CmpInst::Predicate Pred, Value *LHS,
91                           Value *RHS) {
92   CmpInst *Cmp = dyn_cast<CmpInst>(V);
93   if (!Cmp)
94     return false;
95   CmpInst::Predicate CPred = Cmp->getPredicate();
96   Value *CLHS = Cmp->getOperand(0), *CRHS = Cmp->getOperand(1);
97   if (CPred == Pred && CLHS == LHS && CRHS == RHS)
98     return true;
99   return CPred == CmpInst::getSwappedPredicate(Pred) && CLHS == RHS &&
100     CRHS == LHS;
101 }
102 
103 /// Does the given value dominate the specified phi node?
104 static bool ValueDominatesPHI(Value *V, PHINode *P, const DominatorTree *DT) {
105   Instruction *I = dyn_cast<Instruction>(V);
106   if (!I)
107     // Arguments and constants dominate all instructions.
108     return true;
109 
110   // If we are processing instructions (and/or basic blocks) that have not been
111   // fully added to a function, the parent nodes may still be null. Simply
112   // return the conservative answer in these cases.
113   if (!I->getParent() || !P->getParent() || !I->getParent()->getParent())
114     return false;
115 
116   // If we have a DominatorTree then do a precise test.
117   if (DT) {
118     if (!DT->isReachableFromEntry(P->getParent()))
119       return true;
120     if (!DT->isReachableFromEntry(I->getParent()))
121       return false;
122     return DT->dominates(I, P);
123   }
124 
125   // Otherwise, if the instruction is in the entry block and is not an invoke,
126   // then it obviously dominates all phi nodes.
127   if (I->getParent() == &I->getParent()->getParent()->getEntryBlock() &&
128       !isa<InvokeInst>(I))
129     return true;
130 
131   return false;
132 }
133 
134 /// Simplify "A op (B op' C)" by distributing op over op', turning it into
135 /// "(A op B) op' (A op C)".  Here "op" is given by Opcode and "op'" is
136 /// given by OpcodeToExpand, while "A" corresponds to LHS and "B op' C" to RHS.
137 /// Also performs the transform "(A op' B) op C" -> "(A op C) op' (B op C)".
138 /// Returns the simplified value, or null if no simplification was performed.
139 static Value *ExpandBinOp(unsigned Opcode, Value *LHS, Value *RHS,
140                           unsigned OpcToExpand, const Query &Q,
141                           unsigned MaxRecurse) {
142   Instruction::BinaryOps OpcodeToExpand = (Instruction::BinaryOps)OpcToExpand;
143   // Recursion is always used, so bail out at once if we already hit the limit.
144   if (!MaxRecurse--)
145     return nullptr;
146 
147   // Check whether the expression has the form "(A op' B) op C".
148   if (BinaryOperator *Op0 = dyn_cast<BinaryOperator>(LHS))
149     if (Op0->getOpcode() == OpcodeToExpand) {
150       // It does!  Try turning it into "(A op C) op' (B op C)".
151       Value *A = Op0->getOperand(0), *B = Op0->getOperand(1), *C = RHS;
152       // Do "A op C" and "B op C" both simplify?
153       if (Value *L = SimplifyBinOp(Opcode, A, C, Q, MaxRecurse))
154         if (Value *R = SimplifyBinOp(Opcode, B, C, Q, MaxRecurse)) {
155           // They do! Return "L op' R" if it simplifies or is already available.
156           // If "L op' R" equals "A op' B" then "L op' R" is just the LHS.
157           if ((L == A && R == B) || (Instruction::isCommutative(OpcodeToExpand)
158                                      && L == B && R == A)) {
159             ++NumExpand;
160             return LHS;
161           }
162           // Otherwise return "L op' R" if it simplifies.
163           if (Value *V = SimplifyBinOp(OpcodeToExpand, L, R, Q, MaxRecurse)) {
164             ++NumExpand;
165             return V;
166           }
167         }
168     }
169 
170   // Check whether the expression has the form "A op (B op' C)".
171   if (BinaryOperator *Op1 = dyn_cast<BinaryOperator>(RHS))
172     if (Op1->getOpcode() == OpcodeToExpand) {
173       // It does!  Try turning it into "(A op B) op' (A op C)".
174       Value *A = LHS, *B = Op1->getOperand(0), *C = Op1->getOperand(1);
175       // Do "A op B" and "A op C" both simplify?
176       if (Value *L = SimplifyBinOp(Opcode, A, B, Q, MaxRecurse))
177         if (Value *R = SimplifyBinOp(Opcode, A, C, Q, MaxRecurse)) {
178           // They do! Return "L op' R" if it simplifies or is already available.
179           // If "L op' R" equals "B op' C" then "L op' R" is just the RHS.
180           if ((L == B && R == C) || (Instruction::isCommutative(OpcodeToExpand)
181                                      && L == C && R == B)) {
182             ++NumExpand;
183             return RHS;
184           }
185           // Otherwise return "L op' R" if it simplifies.
186           if (Value *V = SimplifyBinOp(OpcodeToExpand, L, R, Q, MaxRecurse)) {
187             ++NumExpand;
188             return V;
189           }
190         }
191     }
192 
193   return nullptr;
194 }
195 
196 /// Generic simplifications for associative binary operations.
197 /// Returns the simpler value, or null if none was found.
198 static Value *SimplifyAssociativeBinOp(unsigned Opc, Value *LHS, Value *RHS,
199                                        const Query &Q, unsigned MaxRecurse) {
200   Instruction::BinaryOps Opcode = (Instruction::BinaryOps)Opc;
201   assert(Instruction::isAssociative(Opcode) && "Not an associative operation!");
202 
203   // Recursion is always used, so bail out at once if we already hit the limit.
204   if (!MaxRecurse--)
205     return nullptr;
206 
207   BinaryOperator *Op0 = dyn_cast<BinaryOperator>(LHS);
208   BinaryOperator *Op1 = dyn_cast<BinaryOperator>(RHS);
209 
210   // Transform: "(A op B) op C" ==> "A op (B op C)" if it simplifies completely.
211   if (Op0 && Op0->getOpcode() == Opcode) {
212     Value *A = Op0->getOperand(0);
213     Value *B = Op0->getOperand(1);
214     Value *C = RHS;
215 
216     // Does "B op C" simplify?
217     if (Value *V = SimplifyBinOp(Opcode, B, C, Q, MaxRecurse)) {
218       // It does!  Return "A op V" if it simplifies or is already available.
219       // If V equals B then "A op V" is just the LHS.
220       if (V == B) return LHS;
221       // Otherwise return "A op V" if it simplifies.
222       if (Value *W = SimplifyBinOp(Opcode, A, V, Q, MaxRecurse)) {
223         ++NumReassoc;
224         return W;
225       }
226     }
227   }
228 
229   // Transform: "A op (B op C)" ==> "(A op B) op C" if it simplifies completely.
230   if (Op1 && Op1->getOpcode() == Opcode) {
231     Value *A = LHS;
232     Value *B = Op1->getOperand(0);
233     Value *C = Op1->getOperand(1);
234 
235     // Does "A op B" simplify?
236     if (Value *V = SimplifyBinOp(Opcode, A, B, Q, MaxRecurse)) {
237       // It does!  Return "V op C" if it simplifies or is already available.
238       // If V equals B then "V op C" is just the RHS.
239       if (V == B) return RHS;
240       // Otherwise return "V op C" if it simplifies.
241       if (Value *W = SimplifyBinOp(Opcode, V, C, Q, MaxRecurse)) {
242         ++NumReassoc;
243         return W;
244       }
245     }
246   }
247 
248   // The remaining transforms require commutativity as well as associativity.
249   if (!Instruction::isCommutative(Opcode))
250     return nullptr;
251 
252   // Transform: "(A op B) op C" ==> "(C op A) op B" if it simplifies completely.
253   if (Op0 && Op0->getOpcode() == Opcode) {
254     Value *A = Op0->getOperand(0);
255     Value *B = Op0->getOperand(1);
256     Value *C = RHS;
257 
258     // Does "C op A" simplify?
259     if (Value *V = SimplifyBinOp(Opcode, C, A, Q, MaxRecurse)) {
260       // It does!  Return "V op B" if it simplifies or is already available.
261       // If V equals A then "V op B" is just the LHS.
262       if (V == A) return LHS;
263       // Otherwise return "V op B" if it simplifies.
264       if (Value *W = SimplifyBinOp(Opcode, V, B, Q, MaxRecurse)) {
265         ++NumReassoc;
266         return W;
267       }
268     }
269   }
270 
271   // Transform: "A op (B op C)" ==> "B op (C op A)" if it simplifies completely.
272   if (Op1 && Op1->getOpcode() == Opcode) {
273     Value *A = LHS;
274     Value *B = Op1->getOperand(0);
275     Value *C = Op1->getOperand(1);
276 
277     // Does "C op A" simplify?
278     if (Value *V = SimplifyBinOp(Opcode, C, A, Q, MaxRecurse)) {
279       // It does!  Return "B op V" if it simplifies or is already available.
280       // If V equals C then "B op V" is just the RHS.
281       if (V == C) return RHS;
282       // Otherwise return "B op V" if it simplifies.
283       if (Value *W = SimplifyBinOp(Opcode, B, V, Q, MaxRecurse)) {
284         ++NumReassoc;
285         return W;
286       }
287     }
288   }
289 
290   return nullptr;
291 }
292 
293 /// In the case of a binary operation with a select instruction as an operand,
294 /// try to simplify the binop by seeing whether evaluating it on both branches
295 /// of the select results in the same value. Returns the common value if so,
296 /// otherwise returns null.
297 static Value *ThreadBinOpOverSelect(unsigned Opcode, Value *LHS, Value *RHS,
298                                     const Query &Q, unsigned MaxRecurse) {
299   // Recursion is always used, so bail out at once if we already hit the limit.
300   if (!MaxRecurse--)
301     return nullptr;
302 
303   SelectInst *SI;
304   if (isa<SelectInst>(LHS)) {
305     SI = cast<SelectInst>(LHS);
306   } else {
307     assert(isa<SelectInst>(RHS) && "No select instruction operand!");
308     SI = cast<SelectInst>(RHS);
309   }
310 
311   // Evaluate the BinOp on the true and false branches of the select.
312   Value *TV;
313   Value *FV;
314   if (SI == LHS) {
315     TV = SimplifyBinOp(Opcode, SI->getTrueValue(), RHS, Q, MaxRecurse);
316     FV = SimplifyBinOp(Opcode, SI->getFalseValue(), RHS, Q, MaxRecurse);
317   } else {
318     TV = SimplifyBinOp(Opcode, LHS, SI->getTrueValue(), Q, MaxRecurse);
319     FV = SimplifyBinOp(Opcode, LHS, SI->getFalseValue(), Q, MaxRecurse);
320   }
321 
322   // If they simplified to the same value, then return the common value.
323   // If they both failed to simplify then return null.
324   if (TV == FV)
325     return TV;
326 
327   // If one branch simplified to undef, return the other one.
328   if (TV && isa<UndefValue>(TV))
329     return FV;
330   if (FV && isa<UndefValue>(FV))
331     return TV;
332 
333   // If applying the operation did not change the true and false select values,
334   // then the result of the binop is the select itself.
335   if (TV == SI->getTrueValue() && FV == SI->getFalseValue())
336     return SI;
337 
338   // If one branch simplified and the other did not, and the simplified
339   // value is equal to the unsimplified one, return the simplified value.
340   // For example, select (cond, X, X & Z) & Z -> X & Z.
341   if ((FV && !TV) || (TV && !FV)) {
342     // Check that the simplified value has the form "X op Y" where "op" is the
343     // same as the original operation.
344     Instruction *Simplified = dyn_cast<Instruction>(FV ? FV : TV);
345     if (Simplified && Simplified->getOpcode() == Opcode) {
346       // The value that didn't simplify is "UnsimplifiedLHS op UnsimplifiedRHS".
347       // We already know that "op" is the same as for the simplified value.  See
348       // if the operands match too.  If so, return the simplified value.
349       Value *UnsimplifiedBranch = FV ? SI->getTrueValue() : SI->getFalseValue();
350       Value *UnsimplifiedLHS = SI == LHS ? UnsimplifiedBranch : LHS;
351       Value *UnsimplifiedRHS = SI == LHS ? RHS : UnsimplifiedBranch;
352       if (Simplified->getOperand(0) == UnsimplifiedLHS &&
353           Simplified->getOperand(1) == UnsimplifiedRHS)
354         return Simplified;
355       if (Simplified->isCommutative() &&
356           Simplified->getOperand(1) == UnsimplifiedLHS &&
357           Simplified->getOperand(0) == UnsimplifiedRHS)
358         return Simplified;
359     }
360   }
361 
362   return nullptr;
363 }
364 
365 /// In the case of a comparison with a select instruction, try to simplify the
366 /// comparison by seeing whether both branches of the select result in the same
367 /// value. Returns the common value if so, otherwise returns null.
368 static Value *ThreadCmpOverSelect(CmpInst::Predicate Pred, Value *LHS,
369                                   Value *RHS, const Query &Q,
370                                   unsigned MaxRecurse) {
371   // Recursion is always used, so bail out at once if we already hit the limit.
372   if (!MaxRecurse--)
373     return nullptr;
374 
375   // Make sure the select is on the LHS.
376   if (!isa<SelectInst>(LHS)) {
377     std::swap(LHS, RHS);
378     Pred = CmpInst::getSwappedPredicate(Pred);
379   }
380   assert(isa<SelectInst>(LHS) && "Not comparing with a select instruction!");
381   SelectInst *SI = cast<SelectInst>(LHS);
382   Value *Cond = SI->getCondition();
383   Value *TV = SI->getTrueValue();
384   Value *FV = SI->getFalseValue();
385 
386   // Now that we have "cmp select(Cond, TV, FV), RHS", analyse it.
387   // Does "cmp TV, RHS" simplify?
388   Value *TCmp = SimplifyCmpInst(Pred, TV, RHS, Q, MaxRecurse);
389   if (TCmp == Cond) {
390     // It not only simplified, it simplified to the select condition.  Replace
391     // it with 'true'.
392     TCmp = getTrue(Cond->getType());
393   } else if (!TCmp) {
394     // It didn't simplify.  However if "cmp TV, RHS" is equal to the select
395     // condition then we can replace it with 'true'.  Otherwise give up.
396     if (!isSameCompare(Cond, Pred, TV, RHS))
397       return nullptr;
398     TCmp = getTrue(Cond->getType());
399   }
400 
401   // Does "cmp FV, RHS" simplify?
402   Value *FCmp = SimplifyCmpInst(Pred, FV, RHS, Q, MaxRecurse);
403   if (FCmp == Cond) {
404     // It not only simplified, it simplified to the select condition.  Replace
405     // it with 'false'.
406     FCmp = getFalse(Cond->getType());
407   } else if (!FCmp) {
408     // It didn't simplify.  However if "cmp FV, RHS" is equal to the select
409     // condition then we can replace it with 'false'.  Otherwise give up.
410     if (!isSameCompare(Cond, Pred, FV, RHS))
411       return nullptr;
412     FCmp = getFalse(Cond->getType());
413   }
414 
415   // If both sides simplified to the same value, then use it as the result of
416   // the original comparison.
417   if (TCmp == FCmp)
418     return TCmp;
419 
420   // The remaining cases only make sense if the select condition has the same
421   // type as the result of the comparison, so bail out if this is not so.
422   if (Cond->getType()->isVectorTy() != RHS->getType()->isVectorTy())
423     return nullptr;
424   // If the false value simplified to false, then the result of the compare
425   // is equal to "Cond && TCmp".  This also catches the case when the false
426   // value simplified to false and the true value to true, returning "Cond".
427   if (match(FCmp, m_Zero()))
428     if (Value *V = SimplifyAndInst(Cond, TCmp, Q, MaxRecurse))
429       return V;
430   // If the true value simplified to true, then the result of the compare
431   // is equal to "Cond || FCmp".
432   if (match(TCmp, m_One()))
433     if (Value *V = SimplifyOrInst(Cond, FCmp, Q, MaxRecurse))
434       return V;
435   // Finally, if the false value simplified to true and the true value to
436   // false, then the result of the compare is equal to "!Cond".
437   if (match(FCmp, m_One()) && match(TCmp, m_Zero()))
438     if (Value *V =
439         SimplifyXorInst(Cond, Constant::getAllOnesValue(Cond->getType()),
440                         Q, MaxRecurse))
441       return V;
442 
443   return nullptr;
444 }
445 
446 /// In the case of a binary operation with an operand that is a PHI instruction,
447 /// try to simplify the binop by seeing whether evaluating it on the incoming
448 /// phi values yields the same result for every value. If so returns the common
449 /// value, otherwise returns null.
450 static Value *ThreadBinOpOverPHI(unsigned Opcode, Value *LHS, Value *RHS,
451                                  const Query &Q, unsigned MaxRecurse) {
452   // Recursion is always used, so bail out at once if we already hit the limit.
453   if (!MaxRecurse--)
454     return nullptr;
455 
456   PHINode *PI;
457   if (isa<PHINode>(LHS)) {
458     PI = cast<PHINode>(LHS);
459     // Bail out if RHS and the phi may be mutually interdependent due to a loop.
460     if (!ValueDominatesPHI(RHS, PI, Q.DT))
461       return nullptr;
462   } else {
463     assert(isa<PHINode>(RHS) && "No PHI instruction operand!");
464     PI = cast<PHINode>(RHS);
465     // Bail out if LHS and the phi may be mutually interdependent due to a loop.
466     if (!ValueDominatesPHI(LHS, PI, Q.DT))
467       return nullptr;
468   }
469 
470   // Evaluate the BinOp on the incoming phi values.
471   Value *CommonValue = nullptr;
472   for (Value *Incoming : PI->incoming_values()) {
473     // If the incoming value is the phi node itself, it can safely be skipped.
474     if (Incoming == PI) continue;
475     Value *V = PI == LHS ?
476       SimplifyBinOp(Opcode, Incoming, RHS, Q, MaxRecurse) :
477       SimplifyBinOp(Opcode, LHS, Incoming, Q, MaxRecurse);
478     // If the operation failed to simplify, or simplified to a different value
479     // to previously, then give up.
480     if (!V || (CommonValue && V != CommonValue))
481       return nullptr;
482     CommonValue = V;
483   }
484 
485   return CommonValue;
486 }
487 
488 /// In the case of a comparison with a PHI instruction, try to simplify the
489 /// comparison by seeing whether comparing with all of the incoming phi values
490 /// yields the same result every time. If so returns the common result,
491 /// otherwise returns null.
492 static Value *ThreadCmpOverPHI(CmpInst::Predicate Pred, Value *LHS, Value *RHS,
493                                const Query &Q, unsigned MaxRecurse) {
494   // Recursion is always used, so bail out at once if we already hit the limit.
495   if (!MaxRecurse--)
496     return nullptr;
497 
498   // Make sure the phi is on the LHS.
499   if (!isa<PHINode>(LHS)) {
500     std::swap(LHS, RHS);
501     Pred = CmpInst::getSwappedPredicate(Pred);
502   }
503   assert(isa<PHINode>(LHS) && "Not comparing with a phi instruction!");
504   PHINode *PI = cast<PHINode>(LHS);
505 
506   // Bail out if RHS and the phi may be mutually interdependent due to a loop.
507   if (!ValueDominatesPHI(RHS, PI, Q.DT))
508     return nullptr;
509 
510   // Evaluate the BinOp on the incoming phi values.
511   Value *CommonValue = nullptr;
512   for (Value *Incoming : PI->incoming_values()) {
513     // If the incoming value is the phi node itself, it can safely be skipped.
514     if (Incoming == PI) continue;
515     Value *V = SimplifyCmpInst(Pred, Incoming, RHS, Q, MaxRecurse);
516     // If the operation failed to simplify, or simplified to a different value
517     // to previously, then give up.
518     if (!V || (CommonValue && V != CommonValue))
519       return nullptr;
520     CommonValue = V;
521   }
522 
523   return CommonValue;
524 }
525 
526 /// Given operands for an Add, see if we can fold the result.
527 /// If not, this returns null.
528 static Value *SimplifyAddInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
529                               const Query &Q, unsigned MaxRecurse) {
530   if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
531     if (Constant *CRHS = dyn_cast<Constant>(Op1))
532       return ConstantFoldBinaryOpOperands(Instruction::Add, CLHS, CRHS, Q.DL);
533 
534     // Canonicalize the constant to the RHS.
535     std::swap(Op0, Op1);
536   }
537 
538   // X + undef -> undef
539   if (match(Op1, m_Undef()))
540     return Op1;
541 
542   // X + 0 -> X
543   if (match(Op1, m_Zero()))
544     return Op0;
545 
546   // X + (Y - X) -> Y
547   // (Y - X) + X -> Y
548   // Eg: X + -X -> 0
549   Value *Y = nullptr;
550   if (match(Op1, m_Sub(m_Value(Y), m_Specific(Op0))) ||
551       match(Op0, m_Sub(m_Value(Y), m_Specific(Op1))))
552     return Y;
553 
554   // X + ~X -> -1   since   ~X = -X-1
555   if (match(Op0, m_Not(m_Specific(Op1))) ||
556       match(Op1, m_Not(m_Specific(Op0))))
557     return Constant::getAllOnesValue(Op0->getType());
558 
559   /// i1 add -> xor.
560   if (MaxRecurse && Op0->getType()->isIntegerTy(1))
561     if (Value *V = SimplifyXorInst(Op0, Op1, Q, MaxRecurse-1))
562       return V;
563 
564   // Try some generic simplifications for associative operations.
565   if (Value *V = SimplifyAssociativeBinOp(Instruction::Add, Op0, Op1, Q,
566                                           MaxRecurse))
567     return V;
568 
569   // Threading Add over selects and phi nodes is pointless, so don't bother.
570   // Threading over the select in "A + select(cond, B, C)" means evaluating
571   // "A+B" and "A+C" and seeing if they are equal; but they are equal if and
572   // only if B and C are equal.  If B and C are equal then (since we assume
573   // that operands have already been simplified) "select(cond, B, C)" should
574   // have been simplified to the common value of B and C already.  Analysing
575   // "A+B" and "A+C" thus gains nothing, but costs compile time.  Similarly
576   // for threading over phi nodes.
577 
578   return nullptr;
579 }
580 
581 Value *llvm::SimplifyAddInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
582                              const DataLayout &DL, const TargetLibraryInfo *TLI,
583                              const DominatorTree *DT, AssumptionCache *AC,
584                              const Instruction *CxtI) {
585   return ::SimplifyAddInst(Op0, Op1, isNSW, isNUW, Query(DL, TLI, DT, AC, CxtI),
586                            RecursionLimit);
587 }
588 
589 /// \brief Compute the base pointer and cumulative constant offsets for V.
590 ///
591 /// This strips all constant offsets off of V, leaving it the base pointer, and
592 /// accumulates the total constant offset applied in the returned constant. It
593 /// returns 0 if V is not a pointer, and returns the constant '0' if there are
594 /// no constant offsets applied.
595 ///
596 /// This is very similar to GetPointerBaseWithConstantOffset except it doesn't
597 /// follow non-inbounds geps. This allows it to remain usable for icmp ult/etc.
598 /// folding.
599 static Constant *stripAndComputeConstantOffsets(const DataLayout &DL, Value *&V,
600                                                 bool AllowNonInbounds = false) {
601   assert(V->getType()->getScalarType()->isPointerTy());
602 
603   Type *IntPtrTy = DL.getIntPtrType(V->getType())->getScalarType();
604   APInt Offset = APInt::getNullValue(IntPtrTy->getIntegerBitWidth());
605 
606   // Even though we don't look through PHI nodes, we could be called on an
607   // instruction in an unreachable block, which may be on a cycle.
608   SmallPtrSet<Value *, 4> Visited;
609   Visited.insert(V);
610   do {
611     if (GEPOperator *GEP = dyn_cast<GEPOperator>(V)) {
612       if ((!AllowNonInbounds && !GEP->isInBounds()) ||
613           !GEP->accumulateConstantOffset(DL, Offset))
614         break;
615       V = GEP->getPointerOperand();
616     } else if (Operator::getOpcode(V) == Instruction::BitCast) {
617       V = cast<Operator>(V)->getOperand(0);
618     } else if (GlobalAlias *GA = dyn_cast<GlobalAlias>(V)) {
619       if (GA->mayBeOverridden())
620         break;
621       V = GA->getAliasee();
622     } else {
623       break;
624     }
625     assert(V->getType()->getScalarType()->isPointerTy() &&
626            "Unexpected operand type!");
627   } while (Visited.insert(V).second);
628 
629   Constant *OffsetIntPtr = ConstantInt::get(IntPtrTy, Offset);
630   if (V->getType()->isVectorTy())
631     return ConstantVector::getSplat(V->getType()->getVectorNumElements(),
632                                     OffsetIntPtr);
633   return OffsetIntPtr;
634 }
635 
636 /// \brief Compute the constant difference between two pointer values.
637 /// If the difference is not a constant, returns zero.
638 static Constant *computePointerDifference(const DataLayout &DL, Value *LHS,
639                                           Value *RHS) {
640   Constant *LHSOffset = stripAndComputeConstantOffsets(DL, LHS);
641   Constant *RHSOffset = stripAndComputeConstantOffsets(DL, RHS);
642 
643   // If LHS and RHS are not related via constant offsets to the same base
644   // value, there is nothing we can do here.
645   if (LHS != RHS)
646     return nullptr;
647 
648   // Otherwise, the difference of LHS - RHS can be computed as:
649   //    LHS - RHS
650   //  = (LHSOffset + Base) - (RHSOffset + Base)
651   //  = LHSOffset - RHSOffset
652   return ConstantExpr::getSub(LHSOffset, RHSOffset);
653 }
654 
655 /// Given operands for a Sub, see if we can fold the result.
656 /// If not, this returns null.
657 static Value *SimplifySubInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
658                               const Query &Q, unsigned MaxRecurse) {
659   if (Constant *CLHS = dyn_cast<Constant>(Op0))
660     if (Constant *CRHS = dyn_cast<Constant>(Op1))
661       return ConstantFoldBinaryOpOperands(Instruction::Sub, CLHS, CRHS, Q.DL);
662 
663   // X - undef -> undef
664   // undef - X -> undef
665   if (match(Op0, m_Undef()) || match(Op1, m_Undef()))
666     return UndefValue::get(Op0->getType());
667 
668   // X - 0 -> X
669   if (match(Op1, m_Zero()))
670     return Op0;
671 
672   // X - X -> 0
673   if (Op0 == Op1)
674     return Constant::getNullValue(Op0->getType());
675 
676   // 0 - X -> 0 if the sub is NUW.
677   if (isNUW && match(Op0, m_Zero()))
678     return Op0;
679 
680   // (X + Y) - Z -> X + (Y - Z) or Y + (X - Z) if everything simplifies.
681   // For example, (X + Y) - Y -> X; (Y + X) - Y -> X
682   Value *X = nullptr, *Y = nullptr, *Z = Op1;
683   if (MaxRecurse && match(Op0, m_Add(m_Value(X), m_Value(Y)))) { // (X + Y) - Z
684     // See if "V === Y - Z" simplifies.
685     if (Value *V = SimplifyBinOp(Instruction::Sub, Y, Z, Q, MaxRecurse-1))
686       // It does!  Now see if "X + V" simplifies.
687       if (Value *W = SimplifyBinOp(Instruction::Add, X, V, Q, MaxRecurse-1)) {
688         // It does, we successfully reassociated!
689         ++NumReassoc;
690         return W;
691       }
692     // See if "V === X - Z" simplifies.
693     if (Value *V = SimplifyBinOp(Instruction::Sub, X, Z, Q, MaxRecurse-1))
694       // It does!  Now see if "Y + V" simplifies.
695       if (Value *W = SimplifyBinOp(Instruction::Add, Y, V, Q, MaxRecurse-1)) {
696         // It does, we successfully reassociated!
697         ++NumReassoc;
698         return W;
699       }
700   }
701 
702   // X - (Y + Z) -> (X - Y) - Z or (X - Z) - Y if everything simplifies.
703   // For example, X - (X + 1) -> -1
704   X = Op0;
705   if (MaxRecurse && match(Op1, m_Add(m_Value(Y), m_Value(Z)))) { // X - (Y + Z)
706     // See if "V === X - Y" simplifies.
707     if (Value *V = SimplifyBinOp(Instruction::Sub, X, Y, Q, MaxRecurse-1))
708       // It does!  Now see if "V - Z" simplifies.
709       if (Value *W = SimplifyBinOp(Instruction::Sub, V, Z, Q, MaxRecurse-1)) {
710         // It does, we successfully reassociated!
711         ++NumReassoc;
712         return W;
713       }
714     // See if "V === X - Z" simplifies.
715     if (Value *V = SimplifyBinOp(Instruction::Sub, X, Z, Q, MaxRecurse-1))
716       // It does!  Now see if "V - Y" simplifies.
717       if (Value *W = SimplifyBinOp(Instruction::Sub, V, Y, Q, MaxRecurse-1)) {
718         // It does, we successfully reassociated!
719         ++NumReassoc;
720         return W;
721       }
722   }
723 
724   // Z - (X - Y) -> (Z - X) + Y if everything simplifies.
725   // For example, X - (X - Y) -> Y.
726   Z = Op0;
727   if (MaxRecurse && match(Op1, m_Sub(m_Value(X), m_Value(Y)))) // Z - (X - Y)
728     // See if "V === Z - X" simplifies.
729     if (Value *V = SimplifyBinOp(Instruction::Sub, Z, X, Q, MaxRecurse-1))
730       // It does!  Now see if "V + Y" simplifies.
731       if (Value *W = SimplifyBinOp(Instruction::Add, V, Y, Q, MaxRecurse-1)) {
732         // It does, we successfully reassociated!
733         ++NumReassoc;
734         return W;
735       }
736 
737   // trunc(X) - trunc(Y) -> trunc(X - Y) if everything simplifies.
738   if (MaxRecurse && match(Op0, m_Trunc(m_Value(X))) &&
739       match(Op1, m_Trunc(m_Value(Y))))
740     if (X->getType() == Y->getType())
741       // See if "V === X - Y" simplifies.
742       if (Value *V = SimplifyBinOp(Instruction::Sub, X, Y, Q, MaxRecurse-1))
743         // It does!  Now see if "trunc V" simplifies.
744         if (Value *W = SimplifyTruncInst(V, Op0->getType(), Q, MaxRecurse-1))
745           // It does, return the simplified "trunc V".
746           return W;
747 
748   // Variations on GEP(base, I, ...) - GEP(base, i, ...) -> GEP(null, I-i, ...).
749   if (match(Op0, m_PtrToInt(m_Value(X))) &&
750       match(Op1, m_PtrToInt(m_Value(Y))))
751     if (Constant *Result = computePointerDifference(Q.DL, X, Y))
752       return ConstantExpr::getIntegerCast(Result, Op0->getType(), true);
753 
754   // i1 sub -> xor.
755   if (MaxRecurse && Op0->getType()->isIntegerTy(1))
756     if (Value *V = SimplifyXorInst(Op0, Op1, Q, MaxRecurse-1))
757       return V;
758 
759   // Threading Sub over selects and phi nodes is pointless, so don't bother.
760   // Threading over the select in "A - select(cond, B, C)" means evaluating
761   // "A-B" and "A-C" and seeing if they are equal; but they are equal if and
762   // only if B and C are equal.  If B and C are equal then (since we assume
763   // that operands have already been simplified) "select(cond, B, C)" should
764   // have been simplified to the common value of B and C already.  Analysing
765   // "A-B" and "A-C" thus gains nothing, but costs compile time.  Similarly
766   // for threading over phi nodes.
767 
768   return nullptr;
769 }
770 
771 Value *llvm::SimplifySubInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
772                              const DataLayout &DL, const TargetLibraryInfo *TLI,
773                              const DominatorTree *DT, AssumptionCache *AC,
774                              const Instruction *CxtI) {
775   return ::SimplifySubInst(Op0, Op1, isNSW, isNUW, Query(DL, TLI, DT, AC, CxtI),
776                            RecursionLimit);
777 }
778 
779 /// Given operands for an FAdd, see if we can fold the result.  If not, this
780 /// returns null.
781 static Value *SimplifyFAddInst(Value *Op0, Value *Op1, FastMathFlags FMF,
782                               const Query &Q, unsigned MaxRecurse) {
783   if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
784     if (Constant *CRHS = dyn_cast<Constant>(Op1))
785       return ConstantFoldBinaryOpOperands(Instruction::FAdd, CLHS, CRHS, Q.DL);
786 
787     // Canonicalize the constant to the RHS.
788     std::swap(Op0, Op1);
789   }
790 
791   // fadd X, -0 ==> X
792   if (match(Op1, m_NegZero()))
793     return Op0;
794 
795   // fadd X, 0 ==> X, when we know X is not -0
796   if (match(Op1, m_Zero()) &&
797       (FMF.noSignedZeros() || CannotBeNegativeZero(Op0)))
798     return Op0;
799 
800   // fadd [nnan ninf] X, (fsub [nnan ninf] 0, X) ==> 0
801   //   where nnan and ninf have to occur at least once somewhere in this
802   //   expression
803   Value *SubOp = nullptr;
804   if (match(Op1, m_FSub(m_AnyZero(), m_Specific(Op0))))
805     SubOp = Op1;
806   else if (match(Op0, m_FSub(m_AnyZero(), m_Specific(Op1))))
807     SubOp = Op0;
808   if (SubOp) {
809     Instruction *FSub = cast<Instruction>(SubOp);
810     if ((FMF.noNaNs() || FSub->hasNoNaNs()) &&
811         (FMF.noInfs() || FSub->hasNoInfs()))
812       return Constant::getNullValue(Op0->getType());
813   }
814 
815   return nullptr;
816 }
817 
818 /// Given operands for an FSub, see if we can fold the result.  If not, this
819 /// returns null.
820 static Value *SimplifyFSubInst(Value *Op0, Value *Op1, FastMathFlags FMF,
821                               const Query &Q, unsigned MaxRecurse) {
822   if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
823     if (Constant *CRHS = dyn_cast<Constant>(Op1))
824       return ConstantFoldBinaryOpOperands(Instruction::FSub, CLHS, CRHS, Q.DL);
825   }
826 
827   // fsub X, 0 ==> X
828   if (match(Op1, m_Zero()))
829     return Op0;
830 
831   // fsub X, -0 ==> X, when we know X is not -0
832   if (match(Op1, m_NegZero()) &&
833       (FMF.noSignedZeros() || CannotBeNegativeZero(Op0)))
834     return Op0;
835 
836   // fsub 0, (fsub -0.0, X) ==> X
837   Value *X;
838   if (match(Op0, m_AnyZero())) {
839     if (match(Op1, m_FSub(m_NegZero(), m_Value(X))))
840       return X;
841     if (FMF.noSignedZeros() && match(Op1, m_FSub(m_AnyZero(), m_Value(X))))
842       return X;
843   }
844 
845   // fsub nnan x, x ==> 0.0
846   if (FMF.noNaNs() && Op0 == Op1)
847     return Constant::getNullValue(Op0->getType());
848 
849   return nullptr;
850 }
851 
852 /// Given the operands for an FMul, see if we can fold the result
853 static Value *SimplifyFMulInst(Value *Op0, Value *Op1,
854                                FastMathFlags FMF,
855                                const Query &Q,
856                                unsigned MaxRecurse) {
857  if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
858     if (Constant *CRHS = dyn_cast<Constant>(Op1))
859       return ConstantFoldBinaryOpOperands(Instruction::FMul, CLHS, CRHS, Q.DL);
860 
861     // Canonicalize the constant to the RHS.
862     std::swap(Op0, Op1);
863  }
864 
865  // fmul X, 1.0 ==> X
866  if (match(Op1, m_FPOne()))
867    return Op0;
868 
869  // fmul nnan nsz X, 0 ==> 0
870  if (FMF.noNaNs() && FMF.noSignedZeros() && match(Op1, m_AnyZero()))
871    return Op1;
872 
873  return nullptr;
874 }
875 
876 /// Given operands for a Mul, see if we can fold the result.
877 /// If not, this returns null.
878 static Value *SimplifyMulInst(Value *Op0, Value *Op1, const Query &Q,
879                               unsigned MaxRecurse) {
880   if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
881     if (Constant *CRHS = dyn_cast<Constant>(Op1))
882       return ConstantFoldBinaryOpOperands(Instruction::Mul, CLHS, CRHS, Q.DL);
883 
884     // Canonicalize the constant to the RHS.
885     std::swap(Op0, Op1);
886   }
887 
888   // X * undef -> 0
889   if (match(Op1, m_Undef()))
890     return Constant::getNullValue(Op0->getType());
891 
892   // X * 0 -> 0
893   if (match(Op1, m_Zero()))
894     return Op1;
895 
896   // X * 1 -> X
897   if (match(Op1, m_One()))
898     return Op0;
899 
900   // (X / Y) * Y -> X if the division is exact.
901   Value *X = nullptr;
902   if (match(Op0, m_Exact(m_IDiv(m_Value(X), m_Specific(Op1)))) || // (X / Y) * Y
903       match(Op1, m_Exact(m_IDiv(m_Value(X), m_Specific(Op0)))))   // Y * (X / Y)
904     return X;
905 
906   // i1 mul -> and.
907   if (MaxRecurse && Op0->getType()->isIntegerTy(1))
908     if (Value *V = SimplifyAndInst(Op0, Op1, Q, MaxRecurse-1))
909       return V;
910 
911   // Try some generic simplifications for associative operations.
912   if (Value *V = SimplifyAssociativeBinOp(Instruction::Mul, Op0, Op1, Q,
913                                           MaxRecurse))
914     return V;
915 
916   // Mul distributes over Add.  Try some generic simplifications based on this.
917   if (Value *V = ExpandBinOp(Instruction::Mul, Op0, Op1, Instruction::Add,
918                              Q, MaxRecurse))
919     return V;
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(Instruction::Mul, Op0, Op1, Q,
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(Instruction::Mul, Op0, Op1, Q,
932                                       MaxRecurse))
933       return V;
934 
935   return nullptr;
936 }
937 
938 Value *llvm::SimplifyFAddInst(Value *Op0, Value *Op1, FastMathFlags FMF,
939                               const DataLayout &DL,
940                               const TargetLibraryInfo *TLI,
941                               const DominatorTree *DT, AssumptionCache *AC,
942                               const Instruction *CxtI) {
943   return ::SimplifyFAddInst(Op0, Op1, FMF, Query(DL, TLI, DT, AC, CxtI),
944                             RecursionLimit);
945 }
946 
947 Value *llvm::SimplifyFSubInst(Value *Op0, Value *Op1, FastMathFlags FMF,
948                               const DataLayout &DL,
949                               const TargetLibraryInfo *TLI,
950                               const DominatorTree *DT, AssumptionCache *AC,
951                               const Instruction *CxtI) {
952   return ::SimplifyFSubInst(Op0, Op1, FMF, Query(DL, TLI, DT, AC, CxtI),
953                             RecursionLimit);
954 }
955 
956 Value *llvm::SimplifyFMulInst(Value *Op0, Value *Op1, FastMathFlags FMF,
957                               const DataLayout &DL,
958                               const TargetLibraryInfo *TLI,
959                               const DominatorTree *DT, AssumptionCache *AC,
960                               const Instruction *CxtI) {
961   return ::SimplifyFMulInst(Op0, Op1, FMF, Query(DL, TLI, DT, AC, CxtI),
962                             RecursionLimit);
963 }
964 
965 Value *llvm::SimplifyMulInst(Value *Op0, Value *Op1, const DataLayout &DL,
966                              const TargetLibraryInfo *TLI,
967                              const DominatorTree *DT, AssumptionCache *AC,
968                              const Instruction *CxtI) {
969   return ::SimplifyMulInst(Op0, Op1, Query(DL, TLI, DT, AC, CxtI),
970                            RecursionLimit);
971 }
972 
973 /// Given operands for an SDiv or UDiv, see if we can fold the result.
974 /// If not, this returns null.
975 static Value *SimplifyDiv(Instruction::BinaryOps Opcode, Value *Op0, Value *Op1,
976                           const Query &Q, unsigned MaxRecurse) {
977   if (Constant *C0 = dyn_cast<Constant>(Op0))
978     if (Constant *C1 = dyn_cast<Constant>(Op1))
979       return ConstantFoldBinaryOpOperands(Opcode, C0, C1, Q.DL);
980 
981   bool isSigned = Opcode == Instruction::SDiv;
982 
983   // X / undef -> undef
984   if (match(Op1, m_Undef()))
985     return Op1;
986 
987   // X / 0 -> undef, we don't need to preserve faults!
988   if (match(Op1, m_Zero()))
989     return UndefValue::get(Op1->getType());
990 
991   // undef / X -> 0
992   if (match(Op0, m_Undef()))
993     return Constant::getNullValue(Op0->getType());
994 
995   // 0 / X -> 0, we don't need to preserve faults!
996   if (match(Op0, m_Zero()))
997     return Op0;
998 
999   // X / 1 -> X
1000   if (match(Op1, m_One()))
1001     return Op0;
1002 
1003   if (Op0->getType()->isIntegerTy(1))
1004     // It can't be division by zero, hence it must be division by one.
1005     return Op0;
1006 
1007   // X / X -> 1
1008   if (Op0 == Op1)
1009     return ConstantInt::get(Op0->getType(), 1);
1010 
1011   // (X * Y) / Y -> X if the multiplication does not overflow.
1012   Value *X = nullptr, *Y = nullptr;
1013   if (match(Op0, m_Mul(m_Value(X), m_Value(Y))) && (X == Op1 || Y == Op1)) {
1014     if (Y != Op1) std::swap(X, Y); // Ensure expression is (X * Y) / Y, Y = Op1
1015     OverflowingBinaryOperator *Mul = cast<OverflowingBinaryOperator>(Op0);
1016     // If the Mul knows it does not overflow, then we are good to go.
1017     if ((isSigned && Mul->hasNoSignedWrap()) ||
1018         (!isSigned && Mul->hasNoUnsignedWrap()))
1019       return X;
1020     // If X has the form X = A / Y then X * Y cannot overflow.
1021     if (BinaryOperator *Div = dyn_cast<BinaryOperator>(X))
1022       if (Div->getOpcode() == Opcode && Div->getOperand(1) == Y)
1023         return X;
1024   }
1025 
1026   // (X rem Y) / Y -> 0
1027   if ((isSigned && match(Op0, m_SRem(m_Value(), m_Specific(Op1)))) ||
1028       (!isSigned && match(Op0, m_URem(m_Value(), m_Specific(Op1)))))
1029     return Constant::getNullValue(Op0->getType());
1030 
1031   // (X /u C1) /u C2 -> 0 if C1 * C2 overflow
1032   ConstantInt *C1, *C2;
1033   if (!isSigned && match(Op0, m_UDiv(m_Value(X), m_ConstantInt(C1))) &&
1034       match(Op1, m_ConstantInt(C2))) {
1035     bool Overflow;
1036     C1->getValue().umul_ov(C2->getValue(), Overflow);
1037     if (Overflow)
1038       return Constant::getNullValue(Op0->getType());
1039   }
1040 
1041   // If the operation is with the result of a select instruction, check whether
1042   // operating on either branch of the select always yields the same value.
1043   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1044     if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse))
1045       return V;
1046 
1047   // If the operation is with the result of a phi instruction, check whether
1048   // operating on all incoming values of the phi always yields the same value.
1049   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1050     if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse))
1051       return V;
1052 
1053   return nullptr;
1054 }
1055 
1056 /// Given operands for an SDiv, see if we can fold the result.
1057 /// If not, this returns null.
1058 static Value *SimplifySDivInst(Value *Op0, Value *Op1, const Query &Q,
1059                                unsigned MaxRecurse) {
1060   if (Value *V = SimplifyDiv(Instruction::SDiv, Op0, Op1, Q, MaxRecurse))
1061     return V;
1062 
1063   return nullptr;
1064 }
1065 
1066 Value *llvm::SimplifySDivInst(Value *Op0, Value *Op1, const DataLayout &DL,
1067                               const TargetLibraryInfo *TLI,
1068                               const DominatorTree *DT, AssumptionCache *AC,
1069                               const Instruction *CxtI) {
1070   return ::SimplifySDivInst(Op0, Op1, Query(DL, TLI, DT, AC, CxtI),
1071                             RecursionLimit);
1072 }
1073 
1074 /// Given operands for a UDiv, see if we can fold the result.
1075 /// If not, this returns null.
1076 static Value *SimplifyUDivInst(Value *Op0, Value *Op1, const Query &Q,
1077                                unsigned MaxRecurse) {
1078   if (Value *V = SimplifyDiv(Instruction::UDiv, Op0, Op1, Q, MaxRecurse))
1079     return V;
1080 
1081   return nullptr;
1082 }
1083 
1084 Value *llvm::SimplifyUDivInst(Value *Op0, Value *Op1, const DataLayout &DL,
1085                               const TargetLibraryInfo *TLI,
1086                               const DominatorTree *DT, AssumptionCache *AC,
1087                               const Instruction *CxtI) {
1088   return ::SimplifyUDivInst(Op0, Op1, Query(DL, TLI, DT, AC, CxtI),
1089                             RecursionLimit);
1090 }
1091 
1092 static Value *SimplifyFDivInst(Value *Op0, Value *Op1, FastMathFlags FMF,
1093                                const Query &Q, unsigned) {
1094   // undef / X -> undef    (the undef could be a snan).
1095   if (match(Op0, m_Undef()))
1096     return Op0;
1097 
1098   // X / undef -> undef
1099   if (match(Op1, m_Undef()))
1100     return Op1;
1101 
1102   // 0 / X -> 0
1103   // Requires that NaNs are off (X could be zero) and signed zeroes are
1104   // ignored (X could be positive or negative, so the output sign is unknown).
1105   if (FMF.noNaNs() && FMF.noSignedZeros() && match(Op0, m_AnyZero()))
1106     return Op0;
1107 
1108   if (FMF.noNaNs()) {
1109     // X / X -> 1.0 is legal when NaNs are ignored.
1110     if (Op0 == Op1)
1111       return ConstantFP::get(Op0->getType(), 1.0);
1112 
1113     // -X /  X -> -1.0 and
1114     //  X / -X -> -1.0 are legal when NaNs are ignored.
1115     // We can ignore signed zeros because +-0.0/+-0.0 is NaN and ignored.
1116     if ((BinaryOperator::isFNeg(Op0, /*IgnoreZeroSign=*/true) &&
1117          BinaryOperator::getFNegArgument(Op0) == Op1) ||
1118         (BinaryOperator::isFNeg(Op1, /*IgnoreZeroSign=*/true) &&
1119          BinaryOperator::getFNegArgument(Op1) == Op0))
1120       return ConstantFP::get(Op0->getType(), -1.0);
1121   }
1122 
1123   return nullptr;
1124 }
1125 
1126 Value *llvm::SimplifyFDivInst(Value *Op0, Value *Op1, FastMathFlags FMF,
1127                               const DataLayout &DL,
1128                               const TargetLibraryInfo *TLI,
1129                               const DominatorTree *DT, AssumptionCache *AC,
1130                               const Instruction *CxtI) {
1131   return ::SimplifyFDivInst(Op0, Op1, FMF, Query(DL, TLI, DT, AC, CxtI),
1132                             RecursionLimit);
1133 }
1134 
1135 /// Given operands for an SRem or URem, see if we can fold the result.
1136 /// If not, this returns null.
1137 static Value *SimplifyRem(Instruction::BinaryOps Opcode, Value *Op0, Value *Op1,
1138                           const Query &Q, unsigned MaxRecurse) {
1139   if (Constant *C0 = dyn_cast<Constant>(Op0))
1140     if (Constant *C1 = dyn_cast<Constant>(Op1))
1141       return ConstantFoldBinaryOpOperands(Opcode, C0, C1, Q.DL);
1142 
1143   // X % undef -> undef
1144   if (match(Op1, m_Undef()))
1145     return Op1;
1146 
1147   // undef % X -> 0
1148   if (match(Op0, m_Undef()))
1149     return Constant::getNullValue(Op0->getType());
1150 
1151   // 0 % X -> 0, we don't need to preserve faults!
1152   if (match(Op0, m_Zero()))
1153     return Op0;
1154 
1155   // X % 0 -> undef, we don't need to preserve faults!
1156   if (match(Op1, m_Zero()))
1157     return UndefValue::get(Op0->getType());
1158 
1159   // X % 1 -> 0
1160   if (match(Op1, m_One()))
1161     return Constant::getNullValue(Op0->getType());
1162 
1163   if (Op0->getType()->isIntegerTy(1))
1164     // It can't be remainder by zero, hence it must be remainder by one.
1165     return Constant::getNullValue(Op0->getType());
1166 
1167   // X % X -> 0
1168   if (Op0 == Op1)
1169     return Constant::getNullValue(Op0->getType());
1170 
1171   // (X % Y) % Y -> X % Y
1172   if ((Opcode == Instruction::SRem &&
1173        match(Op0, m_SRem(m_Value(), m_Specific(Op1)))) ||
1174       (Opcode == Instruction::URem &&
1175        match(Op0, m_URem(m_Value(), m_Specific(Op1)))))
1176     return Op0;
1177 
1178   // If the operation is with the result of a select instruction, check whether
1179   // operating on either branch of the select always yields the same value.
1180   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1181     if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse))
1182       return V;
1183 
1184   // If the operation is with the result of a phi instruction, check whether
1185   // operating on all incoming values of the phi always yields the same value.
1186   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1187     if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse))
1188       return V;
1189 
1190   return nullptr;
1191 }
1192 
1193 /// Given operands for an SRem, see if we can fold the result.
1194 /// If not, this returns null.
1195 static Value *SimplifySRemInst(Value *Op0, Value *Op1, const Query &Q,
1196                                unsigned MaxRecurse) {
1197   if (Value *V = SimplifyRem(Instruction::SRem, Op0, Op1, Q, MaxRecurse))
1198     return V;
1199 
1200   return nullptr;
1201 }
1202 
1203 Value *llvm::SimplifySRemInst(Value *Op0, Value *Op1, const DataLayout &DL,
1204                               const TargetLibraryInfo *TLI,
1205                               const DominatorTree *DT, AssumptionCache *AC,
1206                               const Instruction *CxtI) {
1207   return ::SimplifySRemInst(Op0, Op1, Query(DL, TLI, DT, AC, CxtI),
1208                             RecursionLimit);
1209 }
1210 
1211 /// Given operands for a URem, see if we can fold the result.
1212 /// If not, this returns null.
1213 static Value *SimplifyURemInst(Value *Op0, Value *Op1, const Query &Q,
1214                                unsigned MaxRecurse) {
1215   if (Value *V = SimplifyRem(Instruction::URem, Op0, Op1, Q, MaxRecurse))
1216     return V;
1217 
1218   return nullptr;
1219 }
1220 
1221 Value *llvm::SimplifyURemInst(Value *Op0, Value *Op1, const DataLayout &DL,
1222                               const TargetLibraryInfo *TLI,
1223                               const DominatorTree *DT, AssumptionCache *AC,
1224                               const Instruction *CxtI) {
1225   return ::SimplifyURemInst(Op0, Op1, Query(DL, TLI, DT, AC, CxtI),
1226                             RecursionLimit);
1227 }
1228 
1229 static Value *SimplifyFRemInst(Value *Op0, Value *Op1, FastMathFlags FMF,
1230                                const Query &, unsigned) {
1231   // undef % X -> undef    (the undef could be a snan).
1232   if (match(Op0, m_Undef()))
1233     return Op0;
1234 
1235   // X % undef -> undef
1236   if (match(Op1, m_Undef()))
1237     return Op1;
1238 
1239   // 0 % X -> 0
1240   // Requires that NaNs are off (X could be zero) and signed zeroes are
1241   // ignored (X could be positive or negative, so the output sign is unknown).
1242   if (FMF.noNaNs() && FMF.noSignedZeros() && match(Op0, m_AnyZero()))
1243     return Op0;
1244 
1245   return nullptr;
1246 }
1247 
1248 Value *llvm::SimplifyFRemInst(Value *Op0, Value *Op1, FastMathFlags FMF,
1249                               const DataLayout &DL,
1250                               const TargetLibraryInfo *TLI,
1251                               const DominatorTree *DT, AssumptionCache *AC,
1252                               const Instruction *CxtI) {
1253   return ::SimplifyFRemInst(Op0, Op1, FMF, Query(DL, TLI, DT, AC, CxtI),
1254                             RecursionLimit);
1255 }
1256 
1257 /// Returns true if a shift by \c Amount always yields undef.
1258 static bool isUndefShift(Value *Amount) {
1259   Constant *C = dyn_cast<Constant>(Amount);
1260   if (!C)
1261     return false;
1262 
1263   // X shift by undef -> undef because it may shift by the bitwidth.
1264   if (isa<UndefValue>(C))
1265     return true;
1266 
1267   // Shifting by the bitwidth or more is undefined.
1268   if (ConstantInt *CI = dyn_cast<ConstantInt>(C))
1269     if (CI->getValue().getLimitedValue() >=
1270         CI->getType()->getScalarSizeInBits())
1271       return true;
1272 
1273   // If all lanes of a vector shift are undefined the whole shift is.
1274   if (isa<ConstantVector>(C) || isa<ConstantDataVector>(C)) {
1275     for (unsigned I = 0, E = C->getType()->getVectorNumElements(); I != E; ++I)
1276       if (!isUndefShift(C->getAggregateElement(I)))
1277         return false;
1278     return true;
1279   }
1280 
1281   return false;
1282 }
1283 
1284 /// Given operands for an Shl, LShr or AShr, see if we can fold the result.
1285 /// If not, this returns null.
1286 static Value *SimplifyShift(unsigned Opcode, Value *Op0, Value *Op1,
1287                             const Query &Q, unsigned MaxRecurse) {
1288   if (Constant *C0 = dyn_cast<Constant>(Op0))
1289     if (Constant *C1 = dyn_cast<Constant>(Op1))
1290       return ConstantFoldBinaryOpOperands(Opcode, C0, C1, Q.DL);
1291 
1292   // 0 shift by X -> 0
1293   if (match(Op0, m_Zero()))
1294     return Op0;
1295 
1296   // X shift by 0 -> X
1297   if (match(Op1, m_Zero()))
1298     return Op0;
1299 
1300   // Fold undefined shifts.
1301   if (isUndefShift(Op1))
1302     return UndefValue::get(Op0->getType());
1303 
1304   // If the operation is with the result of a select instruction, check whether
1305   // operating on either branch of the select always yields the same value.
1306   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1307     if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse))
1308       return V;
1309 
1310   // If the operation is with the result of a phi instruction, check whether
1311   // operating on all incoming values of the phi always yields the same value.
1312   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1313     if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse))
1314       return V;
1315 
1316   return nullptr;
1317 }
1318 
1319 /// \brief Given operands for an Shl, LShr or AShr, see if we can
1320 /// fold the result.  If not, this returns null.
1321 static Value *SimplifyRightShift(unsigned Opcode, Value *Op0, Value *Op1,
1322                                  bool isExact, const Query &Q,
1323                                  unsigned MaxRecurse) {
1324   if (Value *V = SimplifyShift(Opcode, Op0, Op1, Q, MaxRecurse))
1325     return V;
1326 
1327   // X >> X -> 0
1328   if (Op0 == Op1)
1329     return Constant::getNullValue(Op0->getType());
1330 
1331   // undef >> X -> 0
1332   // undef >> X -> undef (if it's exact)
1333   if (match(Op0, m_Undef()))
1334     return isExact ? Op0 : Constant::getNullValue(Op0->getType());
1335 
1336   // The low bit cannot be shifted out of an exact shift if it is set.
1337   if (isExact) {
1338     unsigned BitWidth = Op0->getType()->getScalarSizeInBits();
1339     APInt Op0KnownZero(BitWidth, 0);
1340     APInt Op0KnownOne(BitWidth, 0);
1341     computeKnownBits(Op0, Op0KnownZero, Op0KnownOne, Q.DL, /*Depth=*/0, Q.AC,
1342                      Q.CxtI, Q.DT);
1343     if (Op0KnownOne[0])
1344       return Op0;
1345   }
1346 
1347   return nullptr;
1348 }
1349 
1350 /// Given operands for an Shl, see if we can fold the result.
1351 /// If not, this returns null.
1352 static Value *SimplifyShlInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
1353                               const Query &Q, unsigned MaxRecurse) {
1354   if (Value *V = SimplifyShift(Instruction::Shl, Op0, Op1, Q, MaxRecurse))
1355     return V;
1356 
1357   // undef << X -> 0
1358   // undef << X -> undef if (if it's NSW/NUW)
1359   if (match(Op0, m_Undef()))
1360     return isNSW || isNUW ? Op0 : Constant::getNullValue(Op0->getType());
1361 
1362   // (X >> A) << A -> X
1363   Value *X;
1364   if (match(Op0, m_Exact(m_Shr(m_Value(X), m_Specific(Op1)))))
1365     return X;
1366   return nullptr;
1367 }
1368 
1369 Value *llvm::SimplifyShlInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
1370                              const DataLayout &DL, const TargetLibraryInfo *TLI,
1371                              const DominatorTree *DT, AssumptionCache *AC,
1372                              const Instruction *CxtI) {
1373   return ::SimplifyShlInst(Op0, Op1, isNSW, isNUW, Query(DL, TLI, DT, AC, CxtI),
1374                            RecursionLimit);
1375 }
1376 
1377 /// Given operands for an LShr, see if we can fold the result.
1378 /// If not, this returns null.
1379 static Value *SimplifyLShrInst(Value *Op0, Value *Op1, bool isExact,
1380                                const Query &Q, unsigned MaxRecurse) {
1381   if (Value *V = SimplifyRightShift(Instruction::LShr, Op0, Op1, isExact, Q,
1382                                     MaxRecurse))
1383       return V;
1384 
1385   // (X << A) >> A -> X
1386   Value *X;
1387   if (match(Op0, m_NUWShl(m_Value(X), m_Specific(Op1))))
1388     return X;
1389 
1390   return nullptr;
1391 }
1392 
1393 Value *llvm::SimplifyLShrInst(Value *Op0, Value *Op1, bool isExact,
1394                               const DataLayout &DL,
1395                               const TargetLibraryInfo *TLI,
1396                               const DominatorTree *DT, AssumptionCache *AC,
1397                               const Instruction *CxtI) {
1398   return ::SimplifyLShrInst(Op0, Op1, isExact, Query(DL, TLI, DT, AC, CxtI),
1399                             RecursionLimit);
1400 }
1401 
1402 /// Given operands for an AShr, see if we can fold the result.
1403 /// If not, this returns null.
1404 static Value *SimplifyAShrInst(Value *Op0, Value *Op1, bool isExact,
1405                                const Query &Q, unsigned MaxRecurse) {
1406   if (Value *V = SimplifyRightShift(Instruction::AShr, Op0, Op1, isExact, Q,
1407                                     MaxRecurse))
1408     return V;
1409 
1410   // all ones >>a X -> all ones
1411   if (match(Op0, m_AllOnes()))
1412     return Op0;
1413 
1414   // (X << A) >> A -> X
1415   Value *X;
1416   if (match(Op0, m_NSWShl(m_Value(X), m_Specific(Op1))))
1417     return X;
1418 
1419   // Arithmetic shifting an all-sign-bit value is a no-op.
1420   unsigned NumSignBits = ComputeNumSignBits(Op0, Q.DL, 0, Q.AC, Q.CxtI, Q.DT);
1421   if (NumSignBits == Op0->getType()->getScalarSizeInBits())
1422     return Op0;
1423 
1424   return nullptr;
1425 }
1426 
1427 Value *llvm::SimplifyAShrInst(Value *Op0, Value *Op1, bool isExact,
1428                               const DataLayout &DL,
1429                               const TargetLibraryInfo *TLI,
1430                               const DominatorTree *DT, AssumptionCache *AC,
1431                               const Instruction *CxtI) {
1432   return ::SimplifyAShrInst(Op0, Op1, isExact, Query(DL, TLI, DT, AC, CxtI),
1433                             RecursionLimit);
1434 }
1435 
1436 static Value *simplifyUnsignedRangeCheck(ICmpInst *ZeroICmp,
1437                                          ICmpInst *UnsignedICmp, bool IsAnd) {
1438   Value *X, *Y;
1439 
1440   ICmpInst::Predicate EqPred;
1441   if (!match(ZeroICmp, m_ICmp(EqPred, m_Value(Y), m_Zero())) ||
1442       !ICmpInst::isEquality(EqPred))
1443     return nullptr;
1444 
1445   ICmpInst::Predicate UnsignedPred;
1446   if (match(UnsignedICmp, m_ICmp(UnsignedPred, m_Value(X), m_Specific(Y))) &&
1447       ICmpInst::isUnsigned(UnsignedPred))
1448     ;
1449   else if (match(UnsignedICmp,
1450                  m_ICmp(UnsignedPred, m_Value(Y), m_Specific(X))) &&
1451            ICmpInst::isUnsigned(UnsignedPred))
1452     UnsignedPred = ICmpInst::getSwappedPredicate(UnsignedPred);
1453   else
1454     return nullptr;
1455 
1456   // X < Y && Y != 0  -->  X < Y
1457   // X < Y || Y != 0  -->  Y != 0
1458   if (UnsignedPred == ICmpInst::ICMP_ULT && EqPred == ICmpInst::ICMP_NE)
1459     return IsAnd ? UnsignedICmp : ZeroICmp;
1460 
1461   // X >= Y || Y != 0  -->  true
1462   // X >= Y || Y == 0  -->  X >= Y
1463   if (UnsignedPred == ICmpInst::ICMP_UGE && !IsAnd) {
1464     if (EqPred == ICmpInst::ICMP_NE)
1465       return getTrue(UnsignedICmp->getType());
1466     return UnsignedICmp;
1467   }
1468 
1469   // X < Y && Y == 0  -->  false
1470   if (UnsignedPred == ICmpInst::ICMP_ULT && EqPred == ICmpInst::ICMP_EQ &&
1471       IsAnd)
1472     return getFalse(UnsignedICmp->getType());
1473 
1474   return nullptr;
1475 }
1476 
1477 /// Simplify (and (icmp ...) (icmp ...)) to true when we can tell that the range
1478 /// of possible values cannot be satisfied.
1479 static Value *SimplifyAndOfICmps(ICmpInst *Op0, ICmpInst *Op1) {
1480   ICmpInst::Predicate Pred0, Pred1;
1481   ConstantInt *CI1, *CI2;
1482   Value *V;
1483 
1484   if (Value *X = simplifyUnsignedRangeCheck(Op0, Op1, /*IsAnd=*/true))
1485     return X;
1486 
1487   if (!match(Op0, m_ICmp(Pred0, m_Add(m_Value(V), m_ConstantInt(CI1)),
1488                          m_ConstantInt(CI2))))
1489    return nullptr;
1490 
1491   if (!match(Op1, m_ICmp(Pred1, m_Specific(V), m_Specific(CI1))))
1492     return nullptr;
1493 
1494   Type *ITy = Op0->getType();
1495 
1496   auto *AddInst = cast<BinaryOperator>(Op0->getOperand(0));
1497   bool isNSW = AddInst->hasNoSignedWrap();
1498   bool isNUW = AddInst->hasNoUnsignedWrap();
1499 
1500   const APInt &CI1V = CI1->getValue();
1501   const APInt &CI2V = CI2->getValue();
1502   const APInt Delta = CI2V - CI1V;
1503   if (CI1V.isStrictlyPositive()) {
1504     if (Delta == 2) {
1505       if (Pred0 == ICmpInst::ICMP_ULT && Pred1 == ICmpInst::ICMP_SGT)
1506         return getFalse(ITy);
1507       if (Pred0 == ICmpInst::ICMP_SLT && Pred1 == ICmpInst::ICMP_SGT && isNSW)
1508         return getFalse(ITy);
1509     }
1510     if (Delta == 1) {
1511       if (Pred0 == ICmpInst::ICMP_ULE && Pred1 == ICmpInst::ICMP_SGT)
1512         return getFalse(ITy);
1513       if (Pred0 == ICmpInst::ICMP_SLE && Pred1 == ICmpInst::ICMP_SGT && isNSW)
1514         return getFalse(ITy);
1515     }
1516   }
1517   if (CI1V.getBoolValue() && isNUW) {
1518     if (Delta == 2)
1519       if (Pred0 == ICmpInst::ICMP_ULT && Pred1 == ICmpInst::ICMP_UGT)
1520         return getFalse(ITy);
1521     if (Delta == 1)
1522       if (Pred0 == ICmpInst::ICMP_ULE && Pred1 == ICmpInst::ICMP_UGT)
1523         return getFalse(ITy);
1524   }
1525 
1526   return nullptr;
1527 }
1528 
1529 /// Given operands for an And, see if we can fold the result.
1530 /// If not, this returns null.
1531 static Value *SimplifyAndInst(Value *Op0, Value *Op1, const Query &Q,
1532                               unsigned MaxRecurse) {
1533   if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
1534     if (Constant *CRHS = dyn_cast<Constant>(Op1))
1535       return ConstantFoldBinaryOpOperands(Instruction::And, CLHS, CRHS, Q.DL);
1536 
1537     // Canonicalize the constant to the RHS.
1538     std::swap(Op0, Op1);
1539   }
1540 
1541   // X & undef -> 0
1542   if (match(Op1, m_Undef()))
1543     return Constant::getNullValue(Op0->getType());
1544 
1545   // X & X = X
1546   if (Op0 == Op1)
1547     return Op0;
1548 
1549   // X & 0 = 0
1550   if (match(Op1, m_Zero()))
1551     return Op1;
1552 
1553   // X & -1 = X
1554   if (match(Op1, m_AllOnes()))
1555     return Op0;
1556 
1557   // A & ~A  =  ~A & A  =  0
1558   if (match(Op0, m_Not(m_Specific(Op1))) ||
1559       match(Op1, m_Not(m_Specific(Op0))))
1560     return Constant::getNullValue(Op0->getType());
1561 
1562   // (A | ?) & A = A
1563   Value *A = nullptr, *B = nullptr;
1564   if (match(Op0, m_Or(m_Value(A), m_Value(B))) &&
1565       (A == Op1 || B == Op1))
1566     return Op1;
1567 
1568   // A & (A | ?) = A
1569   if (match(Op1, m_Or(m_Value(A), m_Value(B))) &&
1570       (A == Op0 || B == Op0))
1571     return Op0;
1572 
1573   // A & (-A) = A if A is a power of two or zero.
1574   if (match(Op0, m_Neg(m_Specific(Op1))) ||
1575       match(Op1, m_Neg(m_Specific(Op0)))) {
1576     if (isKnownToBeAPowerOfTwo(Op0, Q.DL, /*OrZero*/ true, 0, Q.AC, Q.CxtI,
1577                                Q.DT))
1578       return Op0;
1579     if (isKnownToBeAPowerOfTwo(Op1, Q.DL, /*OrZero*/ true, 0, Q.AC, Q.CxtI,
1580                                Q.DT))
1581       return Op1;
1582   }
1583 
1584   if (auto *ICILHS = dyn_cast<ICmpInst>(Op0)) {
1585     if (auto *ICIRHS = dyn_cast<ICmpInst>(Op1)) {
1586       if (Value *V = SimplifyAndOfICmps(ICILHS, ICIRHS))
1587         return V;
1588       if (Value *V = SimplifyAndOfICmps(ICIRHS, ICILHS))
1589         return V;
1590     }
1591   }
1592 
1593   // Try some generic simplifications for associative operations.
1594   if (Value *V = SimplifyAssociativeBinOp(Instruction::And, Op0, Op1, Q,
1595                                           MaxRecurse))
1596     return V;
1597 
1598   // And distributes over Or.  Try some generic simplifications based on this.
1599   if (Value *V = ExpandBinOp(Instruction::And, Op0, Op1, Instruction::Or,
1600                              Q, MaxRecurse))
1601     return V;
1602 
1603   // And distributes over Xor.  Try some generic simplifications based on this.
1604   if (Value *V = ExpandBinOp(Instruction::And, Op0, Op1, Instruction::Xor,
1605                              Q, MaxRecurse))
1606     return V;
1607 
1608   // If the operation is with the result of a select instruction, check whether
1609   // operating on either branch of the select always yields the same value.
1610   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1611     if (Value *V = ThreadBinOpOverSelect(Instruction::And, Op0, Op1, Q,
1612                                          MaxRecurse))
1613       return V;
1614 
1615   // If the operation is with the result of a phi instruction, check whether
1616   // operating on all incoming values of the phi always yields the same value.
1617   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1618     if (Value *V = ThreadBinOpOverPHI(Instruction::And, Op0, Op1, Q,
1619                                       MaxRecurse))
1620       return V;
1621 
1622   return nullptr;
1623 }
1624 
1625 Value *llvm::SimplifyAndInst(Value *Op0, Value *Op1, const DataLayout &DL,
1626                              const TargetLibraryInfo *TLI,
1627                              const DominatorTree *DT, AssumptionCache *AC,
1628                              const Instruction *CxtI) {
1629   return ::SimplifyAndInst(Op0, Op1, Query(DL, TLI, DT, AC, CxtI),
1630                            RecursionLimit);
1631 }
1632 
1633 /// Simplify (or (icmp ...) (icmp ...)) to true when we can tell that the union
1634 /// contains all possible values.
1635 static Value *SimplifyOrOfICmps(ICmpInst *Op0, ICmpInst *Op1) {
1636   ICmpInst::Predicate Pred0, Pred1;
1637   ConstantInt *CI1, *CI2;
1638   Value *V;
1639 
1640   if (Value *X = simplifyUnsignedRangeCheck(Op0, Op1, /*IsAnd=*/false))
1641     return X;
1642 
1643   if (!match(Op0, m_ICmp(Pred0, m_Add(m_Value(V), m_ConstantInt(CI1)),
1644                          m_ConstantInt(CI2))))
1645    return nullptr;
1646 
1647   if (!match(Op1, m_ICmp(Pred1, m_Specific(V), m_Specific(CI1))))
1648     return nullptr;
1649 
1650   Type *ITy = Op0->getType();
1651 
1652   auto *AddInst = cast<BinaryOperator>(Op0->getOperand(0));
1653   bool isNSW = AddInst->hasNoSignedWrap();
1654   bool isNUW = AddInst->hasNoUnsignedWrap();
1655 
1656   const APInt &CI1V = CI1->getValue();
1657   const APInt &CI2V = CI2->getValue();
1658   const APInt Delta = CI2V - CI1V;
1659   if (CI1V.isStrictlyPositive()) {
1660     if (Delta == 2) {
1661       if (Pred0 == ICmpInst::ICMP_UGE && Pred1 == ICmpInst::ICMP_SLE)
1662         return getTrue(ITy);
1663       if (Pred0 == ICmpInst::ICMP_SGE && Pred1 == ICmpInst::ICMP_SLE && isNSW)
1664         return getTrue(ITy);
1665     }
1666     if (Delta == 1) {
1667       if (Pred0 == ICmpInst::ICMP_UGT && Pred1 == ICmpInst::ICMP_SLE)
1668         return getTrue(ITy);
1669       if (Pred0 == ICmpInst::ICMP_SGT && Pred1 == ICmpInst::ICMP_SLE && isNSW)
1670         return getTrue(ITy);
1671     }
1672   }
1673   if (CI1V.getBoolValue() && isNUW) {
1674     if (Delta == 2)
1675       if (Pred0 == ICmpInst::ICMP_UGE && Pred1 == ICmpInst::ICMP_ULE)
1676         return getTrue(ITy);
1677     if (Delta == 1)
1678       if (Pred0 == ICmpInst::ICMP_UGT && Pred1 == ICmpInst::ICMP_ULE)
1679         return getTrue(ITy);
1680   }
1681 
1682   return nullptr;
1683 }
1684 
1685 /// Given operands for an Or, see if we can fold the result.
1686 /// If not, this returns null.
1687 static Value *SimplifyOrInst(Value *Op0, Value *Op1, const Query &Q,
1688                              unsigned MaxRecurse) {
1689   if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
1690     if (Constant *CRHS = dyn_cast<Constant>(Op1))
1691       return ConstantFoldBinaryOpOperands(Instruction::Or, CLHS, CRHS, Q.DL);
1692 
1693     // Canonicalize the constant to the RHS.
1694     std::swap(Op0, Op1);
1695   }
1696 
1697   // X | undef -> -1
1698   if (match(Op1, m_Undef()))
1699     return Constant::getAllOnesValue(Op0->getType());
1700 
1701   // X | X = X
1702   if (Op0 == Op1)
1703     return Op0;
1704 
1705   // X | 0 = X
1706   if (match(Op1, m_Zero()))
1707     return Op0;
1708 
1709   // X | -1 = -1
1710   if (match(Op1, m_AllOnes()))
1711     return Op1;
1712 
1713   // A | ~A  =  ~A | A  =  -1
1714   if (match(Op0, m_Not(m_Specific(Op1))) ||
1715       match(Op1, m_Not(m_Specific(Op0))))
1716     return Constant::getAllOnesValue(Op0->getType());
1717 
1718   // (A & ?) | A = A
1719   Value *A = nullptr, *B = nullptr;
1720   if (match(Op0, m_And(m_Value(A), m_Value(B))) &&
1721       (A == Op1 || B == Op1))
1722     return Op1;
1723 
1724   // A | (A & ?) = A
1725   if (match(Op1, m_And(m_Value(A), m_Value(B))) &&
1726       (A == Op0 || B == Op0))
1727     return Op0;
1728 
1729   // ~(A & ?) | A = -1
1730   if (match(Op0, m_Not(m_And(m_Value(A), m_Value(B)))) &&
1731       (A == Op1 || B == Op1))
1732     return Constant::getAllOnesValue(Op1->getType());
1733 
1734   // A | ~(A & ?) = -1
1735   if (match(Op1, m_Not(m_And(m_Value(A), m_Value(B)))) &&
1736       (A == Op0 || B == Op0))
1737     return Constant::getAllOnesValue(Op0->getType());
1738 
1739   if (auto *ICILHS = dyn_cast<ICmpInst>(Op0)) {
1740     if (auto *ICIRHS = dyn_cast<ICmpInst>(Op1)) {
1741       if (Value *V = SimplifyOrOfICmps(ICILHS, ICIRHS))
1742         return V;
1743       if (Value *V = SimplifyOrOfICmps(ICIRHS, ICILHS))
1744         return V;
1745     }
1746   }
1747 
1748   // Try some generic simplifications for associative operations.
1749   if (Value *V = SimplifyAssociativeBinOp(Instruction::Or, Op0, Op1, Q,
1750                                           MaxRecurse))
1751     return V;
1752 
1753   // Or distributes over And.  Try some generic simplifications based on this.
1754   if (Value *V = ExpandBinOp(Instruction::Or, Op0, Op1, Instruction::And, Q,
1755                              MaxRecurse))
1756     return V;
1757 
1758   // If the operation is with the result of a select instruction, check whether
1759   // operating on either branch of the select always yields the same value.
1760   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1761     if (Value *V = ThreadBinOpOverSelect(Instruction::Or, Op0, Op1, Q,
1762                                          MaxRecurse))
1763       return V;
1764 
1765   // (A & C)|(B & D)
1766   Value *C = nullptr, *D = nullptr;
1767   if (match(Op0, m_And(m_Value(A), m_Value(C))) &&
1768       match(Op1, m_And(m_Value(B), m_Value(D)))) {
1769     ConstantInt *C1 = dyn_cast<ConstantInt>(C);
1770     ConstantInt *C2 = dyn_cast<ConstantInt>(D);
1771     if (C1 && C2 && (C1->getValue() == ~C2->getValue())) {
1772       // (A & C1)|(B & C2)
1773       // If we have: ((V + N) & C1) | (V & C2)
1774       // .. and C2 = ~C1 and C2 is 0+1+ and (N & C2) == 0
1775       // replace with V+N.
1776       Value *V1, *V2;
1777       if ((C2->getValue() & (C2->getValue() + 1)) == 0 && // C2 == 0+1+
1778           match(A, m_Add(m_Value(V1), m_Value(V2)))) {
1779         // Add commutes, try both ways.
1780         if (V1 == B &&
1781             MaskedValueIsZero(V2, C2->getValue(), Q.DL, 0, Q.AC, Q.CxtI, Q.DT))
1782           return A;
1783         if (V2 == B &&
1784             MaskedValueIsZero(V1, C2->getValue(), Q.DL, 0, Q.AC, Q.CxtI, Q.DT))
1785           return A;
1786       }
1787       // Or commutes, try both ways.
1788       if ((C1->getValue() & (C1->getValue() + 1)) == 0 &&
1789           match(B, m_Add(m_Value(V1), m_Value(V2)))) {
1790         // Add commutes, try both ways.
1791         if (V1 == A &&
1792             MaskedValueIsZero(V2, C1->getValue(), Q.DL, 0, Q.AC, Q.CxtI, Q.DT))
1793           return B;
1794         if (V2 == A &&
1795             MaskedValueIsZero(V1, C1->getValue(), Q.DL, 0, Q.AC, Q.CxtI, Q.DT))
1796           return B;
1797       }
1798     }
1799   }
1800 
1801   // If the operation is with the result of a phi instruction, check whether
1802   // operating on all incoming values of the phi always yields the same value.
1803   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1804     if (Value *V = ThreadBinOpOverPHI(Instruction::Or, Op0, Op1, Q, MaxRecurse))
1805       return V;
1806 
1807   return nullptr;
1808 }
1809 
1810 Value *llvm::SimplifyOrInst(Value *Op0, Value *Op1, const DataLayout &DL,
1811                             const TargetLibraryInfo *TLI,
1812                             const DominatorTree *DT, AssumptionCache *AC,
1813                             const Instruction *CxtI) {
1814   return ::SimplifyOrInst(Op0, Op1, Query(DL, TLI, DT, AC, CxtI),
1815                           RecursionLimit);
1816 }
1817 
1818 /// Given operands for a Xor, see if we can fold the result.
1819 /// If not, this returns null.
1820 static Value *SimplifyXorInst(Value *Op0, Value *Op1, const Query &Q,
1821                               unsigned MaxRecurse) {
1822   if (Constant *CLHS = dyn_cast<Constant>(Op0)) {
1823     if (Constant *CRHS = dyn_cast<Constant>(Op1))
1824       return ConstantFoldBinaryOpOperands(Instruction::Xor, CLHS, CRHS, Q.DL);
1825 
1826     // Canonicalize the constant to the RHS.
1827     std::swap(Op0, Op1);
1828   }
1829 
1830   // A ^ undef -> undef
1831   if (match(Op1, m_Undef()))
1832     return Op1;
1833 
1834   // A ^ 0 = A
1835   if (match(Op1, m_Zero()))
1836     return Op0;
1837 
1838   // A ^ A = 0
1839   if (Op0 == Op1)
1840     return Constant::getNullValue(Op0->getType());
1841 
1842   // A ^ ~A  =  ~A ^ A  =  -1
1843   if (match(Op0, m_Not(m_Specific(Op1))) ||
1844       match(Op1, m_Not(m_Specific(Op0))))
1845     return Constant::getAllOnesValue(Op0->getType());
1846 
1847   // Try some generic simplifications for associative operations.
1848   if (Value *V = SimplifyAssociativeBinOp(Instruction::Xor, Op0, Op1, Q,
1849                                           MaxRecurse))
1850     return V;
1851 
1852   // Threading Xor over selects and phi nodes is pointless, so don't bother.
1853   // Threading over the select in "A ^ select(cond, B, C)" means evaluating
1854   // "A^B" and "A^C" and seeing if they are equal; but they are equal if and
1855   // only if B and C are equal.  If B and C are equal then (since we assume
1856   // that operands have already been simplified) "select(cond, B, C)" should
1857   // have been simplified to the common value of B and C already.  Analysing
1858   // "A^B" and "A^C" thus gains nothing, but costs compile time.  Similarly
1859   // for threading over phi nodes.
1860 
1861   return nullptr;
1862 }
1863 
1864 Value *llvm::SimplifyXorInst(Value *Op0, Value *Op1, const DataLayout &DL,
1865                              const TargetLibraryInfo *TLI,
1866                              const DominatorTree *DT, AssumptionCache *AC,
1867                              const Instruction *CxtI) {
1868   return ::SimplifyXorInst(Op0, Op1, Query(DL, TLI, DT, AC, CxtI),
1869                            RecursionLimit);
1870 }
1871 
1872 static Type *GetCompareTy(Value *Op) {
1873   return CmpInst::makeCmpResultType(Op->getType());
1874 }
1875 
1876 /// Rummage around inside V looking for something equivalent to the comparison
1877 /// "LHS Pred RHS". Return such a value if found, otherwise return null.
1878 /// Helper function for analyzing max/min idioms.
1879 static Value *ExtractEquivalentCondition(Value *V, CmpInst::Predicate Pred,
1880                                          Value *LHS, Value *RHS) {
1881   SelectInst *SI = dyn_cast<SelectInst>(V);
1882   if (!SI)
1883     return nullptr;
1884   CmpInst *Cmp = dyn_cast<CmpInst>(SI->getCondition());
1885   if (!Cmp)
1886     return nullptr;
1887   Value *CmpLHS = Cmp->getOperand(0), *CmpRHS = Cmp->getOperand(1);
1888   if (Pred == Cmp->getPredicate() && LHS == CmpLHS && RHS == CmpRHS)
1889     return Cmp;
1890   if (Pred == CmpInst::getSwappedPredicate(Cmp->getPredicate()) &&
1891       LHS == CmpRHS && RHS == CmpLHS)
1892     return Cmp;
1893   return nullptr;
1894 }
1895 
1896 // A significant optimization not implemented here is assuming that alloca
1897 // addresses are not equal to incoming argument values. They don't *alias*,
1898 // as we say, but that doesn't mean they aren't equal, so we take a
1899 // conservative approach.
1900 //
1901 // This is inspired in part by C++11 5.10p1:
1902 //   "Two pointers of the same type compare equal if and only if they are both
1903 //    null, both point to the same function, or both represent the same
1904 //    address."
1905 //
1906 // This is pretty permissive.
1907 //
1908 // It's also partly due to C11 6.5.9p6:
1909 //   "Two pointers compare equal if and only if both are null pointers, both are
1910 //    pointers to the same object (including a pointer to an object and a
1911 //    subobject at its beginning) or function, both are pointers to one past the
1912 //    last element of the same array object, or one is a pointer to one past the
1913 //    end of one array object and the other is a pointer to the start of a
1914 //    different array object that happens to immediately follow the first array
1915 //    object in the address space.)
1916 //
1917 // C11's version is more restrictive, however there's no reason why an argument
1918 // couldn't be a one-past-the-end value for a stack object in the caller and be
1919 // equal to the beginning of a stack object in the callee.
1920 //
1921 // If the C and C++ standards are ever made sufficiently restrictive in this
1922 // area, it may be possible to update LLVM's semantics accordingly and reinstate
1923 // this optimization.
1924 static Constant *computePointerICmp(const DataLayout &DL,
1925                                     const TargetLibraryInfo *TLI,
1926                                     CmpInst::Predicate Pred, Value *LHS,
1927                                     Value *RHS) {
1928   // First, skip past any trivial no-ops.
1929   LHS = LHS->stripPointerCasts();
1930   RHS = RHS->stripPointerCasts();
1931 
1932   // A non-null pointer is not equal to a null pointer.
1933   if (llvm::isKnownNonNull(LHS, TLI) && isa<ConstantPointerNull>(RHS) &&
1934       (Pred == CmpInst::ICMP_EQ || Pred == CmpInst::ICMP_NE))
1935     return ConstantInt::get(GetCompareTy(LHS),
1936                             !CmpInst::isTrueWhenEqual(Pred));
1937 
1938   // We can only fold certain predicates on pointer comparisons.
1939   switch (Pred) {
1940   default:
1941     return nullptr;
1942 
1943     // Equality comaprisons are easy to fold.
1944   case CmpInst::ICMP_EQ:
1945   case CmpInst::ICMP_NE:
1946     break;
1947 
1948     // We can only handle unsigned relational comparisons because 'inbounds' on
1949     // a GEP only protects against unsigned wrapping.
1950   case CmpInst::ICMP_UGT:
1951   case CmpInst::ICMP_UGE:
1952   case CmpInst::ICMP_ULT:
1953   case CmpInst::ICMP_ULE:
1954     // However, we have to switch them to their signed variants to handle
1955     // negative indices from the base pointer.
1956     Pred = ICmpInst::getSignedPredicate(Pred);
1957     break;
1958   }
1959 
1960   // Strip off any constant offsets so that we can reason about them.
1961   // It's tempting to use getUnderlyingObject or even just stripInBoundsOffsets
1962   // here and compare base addresses like AliasAnalysis does, however there are
1963   // numerous hazards. AliasAnalysis and its utilities rely on special rules
1964   // governing loads and stores which don't apply to icmps. Also, AliasAnalysis
1965   // doesn't need to guarantee pointer inequality when it says NoAlias.
1966   Constant *LHSOffset = stripAndComputeConstantOffsets(DL, LHS);
1967   Constant *RHSOffset = stripAndComputeConstantOffsets(DL, RHS);
1968 
1969   // If LHS and RHS are related via constant offsets to the same base
1970   // value, we can replace it with an icmp which just compares the offsets.
1971   if (LHS == RHS)
1972     return ConstantExpr::getICmp(Pred, LHSOffset, RHSOffset);
1973 
1974   // Various optimizations for (in)equality comparisons.
1975   if (Pred == CmpInst::ICMP_EQ || Pred == CmpInst::ICMP_NE) {
1976     // Different non-empty allocations that exist at the same time have
1977     // different addresses (if the program can tell). Global variables always
1978     // exist, so they always exist during the lifetime of each other and all
1979     // allocas. Two different allocas usually have different addresses...
1980     //
1981     // However, if there's an @llvm.stackrestore dynamically in between two
1982     // allocas, they may have the same address. It's tempting to reduce the
1983     // scope of the problem by only looking at *static* allocas here. That would
1984     // cover the majority of allocas while significantly reducing the likelihood
1985     // of having an @llvm.stackrestore pop up in the middle. However, it's not
1986     // actually impossible for an @llvm.stackrestore to pop up in the middle of
1987     // an entry block. Also, if we have a block that's not attached to a
1988     // function, we can't tell if it's "static" under the current definition.
1989     // Theoretically, this problem could be fixed by creating a new kind of
1990     // instruction kind specifically for static allocas. Such a new instruction
1991     // could be required to be at the top of the entry block, thus preventing it
1992     // from being subject to a @llvm.stackrestore. Instcombine could even
1993     // convert regular allocas into these special allocas. It'd be nifty.
1994     // However, until then, this problem remains open.
1995     //
1996     // So, we'll assume that two non-empty allocas have different addresses
1997     // for now.
1998     //
1999     // With all that, if the offsets are within the bounds of their allocations
2000     // (and not one-past-the-end! so we can't use inbounds!), and their
2001     // allocations aren't the same, the pointers are not equal.
2002     //
2003     // Note that it's not necessary to check for LHS being a global variable
2004     // address, due to canonicalization and constant folding.
2005     if (isa<AllocaInst>(LHS) &&
2006         (isa<AllocaInst>(RHS) || isa<GlobalVariable>(RHS))) {
2007       ConstantInt *LHSOffsetCI = dyn_cast<ConstantInt>(LHSOffset);
2008       ConstantInt *RHSOffsetCI = dyn_cast<ConstantInt>(RHSOffset);
2009       uint64_t LHSSize, RHSSize;
2010       if (LHSOffsetCI && RHSOffsetCI &&
2011           getObjectSize(LHS, LHSSize, DL, TLI) &&
2012           getObjectSize(RHS, RHSSize, DL, TLI)) {
2013         const APInt &LHSOffsetValue = LHSOffsetCI->getValue();
2014         const APInt &RHSOffsetValue = RHSOffsetCI->getValue();
2015         if (!LHSOffsetValue.isNegative() &&
2016             !RHSOffsetValue.isNegative() &&
2017             LHSOffsetValue.ult(LHSSize) &&
2018             RHSOffsetValue.ult(RHSSize)) {
2019           return ConstantInt::get(GetCompareTy(LHS),
2020                                   !CmpInst::isTrueWhenEqual(Pred));
2021         }
2022       }
2023 
2024       // Repeat the above check but this time without depending on DataLayout
2025       // or being able to compute a precise size.
2026       if (!cast<PointerType>(LHS->getType())->isEmptyTy() &&
2027           !cast<PointerType>(RHS->getType())->isEmptyTy() &&
2028           LHSOffset->isNullValue() &&
2029           RHSOffset->isNullValue())
2030         return ConstantInt::get(GetCompareTy(LHS),
2031                                 !CmpInst::isTrueWhenEqual(Pred));
2032     }
2033 
2034     // Even if an non-inbounds GEP occurs along the path we can still optimize
2035     // equality comparisons concerning the result. We avoid walking the whole
2036     // chain again by starting where the last calls to
2037     // stripAndComputeConstantOffsets left off and accumulate the offsets.
2038     Constant *LHSNoBound = stripAndComputeConstantOffsets(DL, LHS, true);
2039     Constant *RHSNoBound = stripAndComputeConstantOffsets(DL, RHS, true);
2040     if (LHS == RHS)
2041       return ConstantExpr::getICmp(Pred,
2042                                    ConstantExpr::getAdd(LHSOffset, LHSNoBound),
2043                                    ConstantExpr::getAdd(RHSOffset, RHSNoBound));
2044 
2045     // If one side of the equality comparison must come from a noalias call
2046     // (meaning a system memory allocation function), and the other side must
2047     // come from a pointer that cannot overlap with dynamically-allocated
2048     // memory within the lifetime of the current function (allocas, byval
2049     // arguments, globals), then determine the comparison result here.
2050     SmallVector<Value *, 8> LHSUObjs, RHSUObjs;
2051     GetUnderlyingObjects(LHS, LHSUObjs, DL);
2052     GetUnderlyingObjects(RHS, RHSUObjs, DL);
2053 
2054     // Is the set of underlying objects all noalias calls?
2055     auto IsNAC = [](SmallVectorImpl<Value *> &Objects) {
2056       return std::all_of(Objects.begin(), Objects.end(), isNoAliasCall);
2057     };
2058 
2059     // Is the set of underlying objects all things which must be disjoint from
2060     // noalias calls. For allocas, we consider only static ones (dynamic
2061     // allocas might be transformed into calls to malloc not simultaneously
2062     // live with the compared-to allocation). For globals, we exclude symbols
2063     // that might be resolve lazily to symbols in another dynamically-loaded
2064     // library (and, thus, could be malloc'ed by the implementation).
2065     auto IsAllocDisjoint = [](SmallVectorImpl<Value *> &Objects) {
2066       return std::all_of(Objects.begin(), Objects.end(), [](Value *V) {
2067         if (const AllocaInst *AI = dyn_cast<AllocaInst>(V))
2068           return AI->getParent() && AI->getFunction() && AI->isStaticAlloca();
2069         if (const GlobalValue *GV = dyn_cast<GlobalValue>(V))
2070           return (GV->hasLocalLinkage() || GV->hasHiddenVisibility() ||
2071                   GV->hasProtectedVisibility() || GV->hasUnnamedAddr()) &&
2072                  !GV->isThreadLocal();
2073         if (const Argument *A = dyn_cast<Argument>(V))
2074           return A->hasByValAttr();
2075         return false;
2076       });
2077     };
2078 
2079     if ((IsNAC(LHSUObjs) && IsAllocDisjoint(RHSUObjs)) ||
2080         (IsNAC(RHSUObjs) && IsAllocDisjoint(LHSUObjs)))
2081         return ConstantInt::get(GetCompareTy(LHS),
2082                                 !CmpInst::isTrueWhenEqual(Pred));
2083   }
2084 
2085   // Otherwise, fail.
2086   return nullptr;
2087 }
2088 
2089 /// Given operands for an ICmpInst, see if we can fold the result.
2090 /// If not, this returns null.
2091 static Value *SimplifyICmpInst(unsigned Predicate, Value *LHS, Value *RHS,
2092                                const Query &Q, unsigned MaxRecurse) {
2093   CmpInst::Predicate Pred = (CmpInst::Predicate)Predicate;
2094   assert(CmpInst::isIntPredicate(Pred) && "Not an integer compare!");
2095 
2096   if (Constant *CLHS = dyn_cast<Constant>(LHS)) {
2097     if (Constant *CRHS = dyn_cast<Constant>(RHS))
2098       return ConstantFoldCompareInstOperands(Pred, CLHS, CRHS, Q.DL, Q.TLI);
2099 
2100     // If we have a constant, make sure it is on the RHS.
2101     std::swap(LHS, RHS);
2102     Pred = CmpInst::getSwappedPredicate(Pred);
2103   }
2104 
2105   Type *ITy = GetCompareTy(LHS); // The return type.
2106   Type *OpTy = LHS->getType();   // The operand type.
2107 
2108   // icmp X, X -> true/false
2109   // X icmp undef -> true/false.  For example, icmp ugt %X, undef -> false
2110   // because X could be 0.
2111   if (LHS == RHS || isa<UndefValue>(RHS))
2112     return ConstantInt::get(ITy, CmpInst::isTrueWhenEqual(Pred));
2113 
2114   // Special case logic when the operands have i1 type.
2115   if (OpTy->getScalarType()->isIntegerTy(1)) {
2116     switch (Pred) {
2117     default: break;
2118     case ICmpInst::ICMP_EQ:
2119       // X == 1 -> X
2120       if (match(RHS, m_One()))
2121         return LHS;
2122       break;
2123     case ICmpInst::ICMP_NE:
2124       // X != 0 -> X
2125       if (match(RHS, m_Zero()))
2126         return LHS;
2127       break;
2128     case ICmpInst::ICMP_UGT:
2129       // X >u 0 -> X
2130       if (match(RHS, m_Zero()))
2131         return LHS;
2132       break;
2133     case ICmpInst::ICMP_UGE:
2134       // X >=u 1 -> X
2135       if (match(RHS, m_One()))
2136         return LHS;
2137       if (isImpliedCondition(RHS, LHS, Q.DL))
2138         return getTrue(ITy);
2139       break;
2140     case ICmpInst::ICMP_SGE:
2141       /// For signed comparison, the values for an i1 are 0 and -1
2142       /// respectively. This maps into a truth table of:
2143       /// LHS | RHS | LHS >=s RHS   | LHS implies RHS
2144       ///  0  |  0  |  1 (0 >= 0)   |  1
2145       ///  0  |  1  |  1 (0 >= -1)  |  1
2146       ///  1  |  0  |  0 (-1 >= 0)  |  0
2147       ///  1  |  1  |  1 (-1 >= -1) |  1
2148       if (isImpliedCondition(LHS, RHS, Q.DL))
2149         return getTrue(ITy);
2150       break;
2151     case ICmpInst::ICMP_SLT:
2152       // X <s 0 -> X
2153       if (match(RHS, m_Zero()))
2154         return LHS;
2155       break;
2156     case ICmpInst::ICMP_SLE:
2157       // X <=s -1 -> X
2158       if (match(RHS, m_One()))
2159         return LHS;
2160       break;
2161     case ICmpInst::ICMP_ULE:
2162       if (isImpliedCondition(LHS, RHS, Q.DL))
2163         return getTrue(ITy);
2164       break;
2165     }
2166   }
2167 
2168   // If we are comparing with zero then try hard since this is a common case.
2169   if (match(RHS, m_Zero())) {
2170     bool LHSKnownNonNegative, LHSKnownNegative;
2171     switch (Pred) {
2172     default: llvm_unreachable("Unknown ICmp predicate!");
2173     case ICmpInst::ICMP_ULT:
2174       return getFalse(ITy);
2175     case ICmpInst::ICMP_UGE:
2176       return getTrue(ITy);
2177     case ICmpInst::ICMP_EQ:
2178     case ICmpInst::ICMP_ULE:
2179       if (isKnownNonZero(LHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT))
2180         return getFalse(ITy);
2181       break;
2182     case ICmpInst::ICMP_NE:
2183     case ICmpInst::ICMP_UGT:
2184       if (isKnownNonZero(LHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT))
2185         return getTrue(ITy);
2186       break;
2187     case ICmpInst::ICMP_SLT:
2188       ComputeSignBit(LHS, LHSKnownNonNegative, LHSKnownNegative, Q.DL, 0, Q.AC,
2189                      Q.CxtI, Q.DT);
2190       if (LHSKnownNegative)
2191         return getTrue(ITy);
2192       if (LHSKnownNonNegative)
2193         return getFalse(ITy);
2194       break;
2195     case ICmpInst::ICMP_SLE:
2196       ComputeSignBit(LHS, LHSKnownNonNegative, LHSKnownNegative, Q.DL, 0, Q.AC,
2197                      Q.CxtI, Q.DT);
2198       if (LHSKnownNegative)
2199         return getTrue(ITy);
2200       if (LHSKnownNonNegative &&
2201           isKnownNonZero(LHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT))
2202         return getFalse(ITy);
2203       break;
2204     case ICmpInst::ICMP_SGE:
2205       ComputeSignBit(LHS, LHSKnownNonNegative, LHSKnownNegative, Q.DL, 0, Q.AC,
2206                      Q.CxtI, Q.DT);
2207       if (LHSKnownNegative)
2208         return getFalse(ITy);
2209       if (LHSKnownNonNegative)
2210         return getTrue(ITy);
2211       break;
2212     case ICmpInst::ICMP_SGT:
2213       ComputeSignBit(LHS, LHSKnownNonNegative, LHSKnownNegative, Q.DL, 0, Q.AC,
2214                      Q.CxtI, Q.DT);
2215       if (LHSKnownNegative)
2216         return getFalse(ITy);
2217       if (LHSKnownNonNegative &&
2218           isKnownNonZero(LHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT))
2219         return getTrue(ITy);
2220       break;
2221     }
2222   }
2223 
2224   // See if we are doing a comparison with a constant integer.
2225   if (ConstantInt *CI = dyn_cast<ConstantInt>(RHS)) {
2226     // Rule out tautological comparisons (eg., ult 0 or uge 0).
2227     ConstantRange RHS_CR = ICmpInst::makeConstantRange(Pred, CI->getValue());
2228     if (RHS_CR.isEmptySet())
2229       return ConstantInt::getFalse(CI->getContext());
2230     if (RHS_CR.isFullSet())
2231       return ConstantInt::getTrue(CI->getContext());
2232 
2233     // Many binary operators with constant RHS have easy to compute constant
2234     // range.  Use them to check whether the comparison is a tautology.
2235     unsigned Width = CI->getBitWidth();
2236     APInt Lower = APInt(Width, 0);
2237     APInt Upper = APInt(Width, 0);
2238     ConstantInt *CI2;
2239     if (match(LHS, m_URem(m_Value(), m_ConstantInt(CI2)))) {
2240       // 'urem x, CI2' produces [0, CI2).
2241       Upper = CI2->getValue();
2242     } else if (match(LHS, m_SRem(m_Value(), m_ConstantInt(CI2)))) {
2243       // 'srem x, CI2' produces (-|CI2|, |CI2|).
2244       Upper = CI2->getValue().abs();
2245       Lower = (-Upper) + 1;
2246     } else if (match(LHS, m_UDiv(m_ConstantInt(CI2), m_Value()))) {
2247       // 'udiv CI2, x' produces [0, CI2].
2248       Upper = CI2->getValue() + 1;
2249     } else if (match(LHS, m_UDiv(m_Value(), m_ConstantInt(CI2)))) {
2250       // 'udiv x, CI2' produces [0, UINT_MAX / CI2].
2251       APInt NegOne = APInt::getAllOnesValue(Width);
2252       if (!CI2->isZero())
2253         Upper = NegOne.udiv(CI2->getValue()) + 1;
2254     } else if (match(LHS, m_SDiv(m_ConstantInt(CI2), m_Value()))) {
2255       if (CI2->isMinSignedValue()) {
2256         // 'sdiv INT_MIN, x' produces [INT_MIN, INT_MIN / -2].
2257         Lower = CI2->getValue();
2258         Upper = Lower.lshr(1) + 1;
2259       } else {
2260         // 'sdiv CI2, x' produces [-|CI2|, |CI2|].
2261         Upper = CI2->getValue().abs() + 1;
2262         Lower = (-Upper) + 1;
2263       }
2264     } else if (match(LHS, m_SDiv(m_Value(), m_ConstantInt(CI2)))) {
2265       APInt IntMin = APInt::getSignedMinValue(Width);
2266       APInt IntMax = APInt::getSignedMaxValue(Width);
2267       APInt Val = CI2->getValue();
2268       if (Val.isAllOnesValue()) {
2269         // 'sdiv x, -1' produces [INT_MIN + 1, INT_MAX]
2270         //    where CI2 != -1 and CI2 != 0 and CI2 != 1
2271         Lower = IntMin + 1;
2272         Upper = IntMax + 1;
2273       } else if (Val.countLeadingZeros() < Width - 1) {
2274         // 'sdiv x, CI2' produces [INT_MIN / CI2, INT_MAX / CI2]
2275         //    where CI2 != -1 and CI2 != 0 and CI2 != 1
2276         Lower = IntMin.sdiv(Val);
2277         Upper = IntMax.sdiv(Val);
2278         if (Lower.sgt(Upper))
2279           std::swap(Lower, Upper);
2280         Upper = Upper + 1;
2281         assert(Upper != Lower && "Upper part of range has wrapped!");
2282       }
2283     } else if (match(LHS, m_NUWShl(m_ConstantInt(CI2), m_Value()))) {
2284       // 'shl nuw CI2, x' produces [CI2, CI2 << CLZ(CI2)]
2285       Lower = CI2->getValue();
2286       Upper = Lower.shl(Lower.countLeadingZeros()) + 1;
2287     } else if (match(LHS, m_NSWShl(m_ConstantInt(CI2), m_Value()))) {
2288       if (CI2->isNegative()) {
2289         // 'shl nsw CI2, x' produces [CI2 << CLO(CI2)-1, CI2]
2290         unsigned ShiftAmount = CI2->getValue().countLeadingOnes() - 1;
2291         Lower = CI2->getValue().shl(ShiftAmount);
2292         Upper = CI2->getValue() + 1;
2293       } else {
2294         // 'shl nsw CI2, x' produces [CI2, CI2 << CLZ(CI2)-1]
2295         unsigned ShiftAmount = CI2->getValue().countLeadingZeros() - 1;
2296         Lower = CI2->getValue();
2297         Upper = CI2->getValue().shl(ShiftAmount) + 1;
2298       }
2299     } else if (match(LHS, m_LShr(m_Value(), m_ConstantInt(CI2)))) {
2300       // 'lshr x, CI2' produces [0, UINT_MAX >> CI2].
2301       APInt NegOne = APInt::getAllOnesValue(Width);
2302       if (CI2->getValue().ult(Width))
2303         Upper = NegOne.lshr(CI2->getValue()) + 1;
2304     } else if (match(LHS, m_LShr(m_ConstantInt(CI2), m_Value()))) {
2305       // 'lshr CI2, x' produces [CI2 >> (Width-1), CI2].
2306       unsigned ShiftAmount = Width - 1;
2307       if (!CI2->isZero() && cast<BinaryOperator>(LHS)->isExact())
2308         ShiftAmount = CI2->getValue().countTrailingZeros();
2309       Lower = CI2->getValue().lshr(ShiftAmount);
2310       Upper = CI2->getValue() + 1;
2311     } else if (match(LHS, m_AShr(m_Value(), m_ConstantInt(CI2)))) {
2312       // 'ashr x, CI2' produces [INT_MIN >> CI2, INT_MAX >> CI2].
2313       APInt IntMin = APInt::getSignedMinValue(Width);
2314       APInt IntMax = APInt::getSignedMaxValue(Width);
2315       if (CI2->getValue().ult(Width)) {
2316         Lower = IntMin.ashr(CI2->getValue());
2317         Upper = IntMax.ashr(CI2->getValue()) + 1;
2318       }
2319     } else if (match(LHS, m_AShr(m_ConstantInt(CI2), m_Value()))) {
2320       unsigned ShiftAmount = Width - 1;
2321       if (!CI2->isZero() && cast<BinaryOperator>(LHS)->isExact())
2322         ShiftAmount = CI2->getValue().countTrailingZeros();
2323       if (CI2->isNegative()) {
2324         // 'ashr CI2, x' produces [CI2, CI2 >> (Width-1)]
2325         Lower = CI2->getValue();
2326         Upper = CI2->getValue().ashr(ShiftAmount) + 1;
2327       } else {
2328         // 'ashr CI2, x' produces [CI2 >> (Width-1), CI2]
2329         Lower = CI2->getValue().ashr(ShiftAmount);
2330         Upper = CI2->getValue() + 1;
2331       }
2332     } else if (match(LHS, m_Or(m_Value(), m_ConstantInt(CI2)))) {
2333       // 'or x, CI2' produces [CI2, UINT_MAX].
2334       Lower = CI2->getValue();
2335     } else if (match(LHS, m_And(m_Value(), m_ConstantInt(CI2)))) {
2336       // 'and x, CI2' produces [0, CI2].
2337       Upper = CI2->getValue() + 1;
2338     } else if (match(LHS, m_NUWAdd(m_Value(), m_ConstantInt(CI2)))) {
2339       // 'add nuw x, CI2' produces [CI2, UINT_MAX].
2340       Lower = CI2->getValue();
2341     }
2342 
2343     ConstantRange LHS_CR = Lower != Upper ? ConstantRange(Lower, Upper)
2344                                           : ConstantRange(Width, true);
2345 
2346     if (auto *I = dyn_cast<Instruction>(LHS))
2347       if (auto *Ranges = I->getMetadata(LLVMContext::MD_range))
2348         LHS_CR = LHS_CR.intersectWith(getConstantRangeFromMetadata(*Ranges));
2349 
2350     if (!LHS_CR.isFullSet()) {
2351       if (RHS_CR.contains(LHS_CR))
2352         return ConstantInt::getTrue(RHS->getContext());
2353       if (RHS_CR.inverse().contains(LHS_CR))
2354         return ConstantInt::getFalse(RHS->getContext());
2355     }
2356   }
2357 
2358   // If both operands have range metadata, use the metadata
2359   // to simplify the comparison.
2360   if (isa<Instruction>(RHS) && isa<Instruction>(LHS)) {
2361     auto RHS_Instr = dyn_cast<Instruction>(RHS);
2362     auto LHS_Instr = dyn_cast<Instruction>(LHS);
2363 
2364     if (RHS_Instr->getMetadata(LLVMContext::MD_range) &&
2365         LHS_Instr->getMetadata(LLVMContext::MD_range)) {
2366       auto RHS_CR = getConstantRangeFromMetadata(
2367           *RHS_Instr->getMetadata(LLVMContext::MD_range));
2368       auto LHS_CR = getConstantRangeFromMetadata(
2369           *LHS_Instr->getMetadata(LLVMContext::MD_range));
2370 
2371       auto Satisfied_CR = ConstantRange::makeSatisfyingICmpRegion(Pred, RHS_CR);
2372       if (Satisfied_CR.contains(LHS_CR))
2373         return ConstantInt::getTrue(RHS->getContext());
2374 
2375       auto InversedSatisfied_CR = ConstantRange::makeSatisfyingICmpRegion(
2376                 CmpInst::getInversePredicate(Pred), RHS_CR);
2377       if (InversedSatisfied_CR.contains(LHS_CR))
2378         return ConstantInt::getFalse(RHS->getContext());
2379     }
2380   }
2381 
2382   // Compare of cast, for example (zext X) != 0 -> X != 0
2383   if (isa<CastInst>(LHS) && (isa<Constant>(RHS) || isa<CastInst>(RHS))) {
2384     Instruction *LI = cast<CastInst>(LHS);
2385     Value *SrcOp = LI->getOperand(0);
2386     Type *SrcTy = SrcOp->getType();
2387     Type *DstTy = LI->getType();
2388 
2389     // Turn icmp (ptrtoint x), (ptrtoint/constant) into a compare of the input
2390     // if the integer type is the same size as the pointer type.
2391     if (MaxRecurse && isa<PtrToIntInst>(LI) &&
2392         Q.DL.getTypeSizeInBits(SrcTy) == DstTy->getPrimitiveSizeInBits()) {
2393       if (Constant *RHSC = dyn_cast<Constant>(RHS)) {
2394         // Transfer the cast to the constant.
2395         if (Value *V = SimplifyICmpInst(Pred, SrcOp,
2396                                         ConstantExpr::getIntToPtr(RHSC, SrcTy),
2397                                         Q, MaxRecurse-1))
2398           return V;
2399       } else if (PtrToIntInst *RI = dyn_cast<PtrToIntInst>(RHS)) {
2400         if (RI->getOperand(0)->getType() == SrcTy)
2401           // Compare without the cast.
2402           if (Value *V = SimplifyICmpInst(Pred, SrcOp, RI->getOperand(0),
2403                                           Q, MaxRecurse-1))
2404             return V;
2405       }
2406     }
2407 
2408     if (isa<ZExtInst>(LHS)) {
2409       // Turn icmp (zext X), (zext Y) into a compare of X and Y if they have the
2410       // same type.
2411       if (ZExtInst *RI = dyn_cast<ZExtInst>(RHS)) {
2412         if (MaxRecurse && SrcTy == RI->getOperand(0)->getType())
2413           // Compare X and Y.  Note that signed predicates become unsigned.
2414           if (Value *V = SimplifyICmpInst(ICmpInst::getUnsignedPredicate(Pred),
2415                                           SrcOp, RI->getOperand(0), Q,
2416                                           MaxRecurse-1))
2417             return V;
2418       }
2419       // Turn icmp (zext X), Cst into a compare of X and Cst if Cst is extended
2420       // too.  If not, then try to deduce the result of the comparison.
2421       else if (ConstantInt *CI = dyn_cast<ConstantInt>(RHS)) {
2422         // Compute the constant that would happen if we truncated to SrcTy then
2423         // reextended to DstTy.
2424         Constant *Trunc = ConstantExpr::getTrunc(CI, SrcTy);
2425         Constant *RExt = ConstantExpr::getCast(CastInst::ZExt, Trunc, DstTy);
2426 
2427         // If the re-extended constant didn't change then this is effectively
2428         // also a case of comparing two zero-extended values.
2429         if (RExt == CI && MaxRecurse)
2430           if (Value *V = SimplifyICmpInst(ICmpInst::getUnsignedPredicate(Pred),
2431                                         SrcOp, Trunc, Q, MaxRecurse-1))
2432             return V;
2433 
2434         // Otherwise the upper bits of LHS are zero while RHS has a non-zero bit
2435         // there.  Use this to work out the result of the comparison.
2436         if (RExt != CI) {
2437           switch (Pred) {
2438           default: llvm_unreachable("Unknown ICmp predicate!");
2439           // LHS <u RHS.
2440           case ICmpInst::ICMP_EQ:
2441           case ICmpInst::ICMP_UGT:
2442           case ICmpInst::ICMP_UGE:
2443             return ConstantInt::getFalse(CI->getContext());
2444 
2445           case ICmpInst::ICMP_NE:
2446           case ICmpInst::ICMP_ULT:
2447           case ICmpInst::ICMP_ULE:
2448             return ConstantInt::getTrue(CI->getContext());
2449 
2450           // LHS is non-negative.  If RHS is negative then LHS >s LHS.  If RHS
2451           // is non-negative then LHS <s RHS.
2452           case ICmpInst::ICMP_SGT:
2453           case ICmpInst::ICMP_SGE:
2454             return CI->getValue().isNegative() ?
2455               ConstantInt::getTrue(CI->getContext()) :
2456               ConstantInt::getFalse(CI->getContext());
2457 
2458           case ICmpInst::ICMP_SLT:
2459           case ICmpInst::ICMP_SLE:
2460             return CI->getValue().isNegative() ?
2461               ConstantInt::getFalse(CI->getContext()) :
2462               ConstantInt::getTrue(CI->getContext());
2463           }
2464         }
2465       }
2466     }
2467 
2468     if (isa<SExtInst>(LHS)) {
2469       // Turn icmp (sext X), (sext Y) into a compare of X and Y if they have the
2470       // same type.
2471       if (SExtInst *RI = dyn_cast<SExtInst>(RHS)) {
2472         if (MaxRecurse && SrcTy == RI->getOperand(0)->getType())
2473           // Compare X and Y.  Note that the predicate does not change.
2474           if (Value *V = SimplifyICmpInst(Pred, SrcOp, RI->getOperand(0),
2475                                           Q, MaxRecurse-1))
2476             return V;
2477       }
2478       // Turn icmp (sext X), Cst into a compare of X and Cst if Cst is extended
2479       // too.  If not, then try to deduce the result of the comparison.
2480       else if (ConstantInt *CI = dyn_cast<ConstantInt>(RHS)) {
2481         // Compute the constant that would happen if we truncated to SrcTy then
2482         // reextended to DstTy.
2483         Constant *Trunc = ConstantExpr::getTrunc(CI, SrcTy);
2484         Constant *RExt = ConstantExpr::getCast(CastInst::SExt, Trunc, DstTy);
2485 
2486         // If the re-extended constant didn't change then this is effectively
2487         // also a case of comparing two sign-extended values.
2488         if (RExt == CI && MaxRecurse)
2489           if (Value *V = SimplifyICmpInst(Pred, SrcOp, Trunc, Q, MaxRecurse-1))
2490             return V;
2491 
2492         // Otherwise the upper bits of LHS are all equal, while RHS has varying
2493         // bits there.  Use this to work out the result of the comparison.
2494         if (RExt != CI) {
2495           switch (Pred) {
2496           default: llvm_unreachable("Unknown ICmp predicate!");
2497           case ICmpInst::ICMP_EQ:
2498             return ConstantInt::getFalse(CI->getContext());
2499           case ICmpInst::ICMP_NE:
2500             return ConstantInt::getTrue(CI->getContext());
2501 
2502           // If RHS is non-negative then LHS <s RHS.  If RHS is negative then
2503           // LHS >s RHS.
2504           case ICmpInst::ICMP_SGT:
2505           case ICmpInst::ICMP_SGE:
2506             return CI->getValue().isNegative() ?
2507               ConstantInt::getTrue(CI->getContext()) :
2508               ConstantInt::getFalse(CI->getContext());
2509           case ICmpInst::ICMP_SLT:
2510           case ICmpInst::ICMP_SLE:
2511             return CI->getValue().isNegative() ?
2512               ConstantInt::getFalse(CI->getContext()) :
2513               ConstantInt::getTrue(CI->getContext());
2514 
2515           // If LHS is non-negative then LHS <u RHS.  If LHS is negative then
2516           // LHS >u RHS.
2517           case ICmpInst::ICMP_UGT:
2518           case ICmpInst::ICMP_UGE:
2519             // Comparison is true iff the LHS <s 0.
2520             if (MaxRecurse)
2521               if (Value *V = SimplifyICmpInst(ICmpInst::ICMP_SLT, SrcOp,
2522                                               Constant::getNullValue(SrcTy),
2523                                               Q, MaxRecurse-1))
2524                 return V;
2525             break;
2526           case ICmpInst::ICMP_ULT:
2527           case ICmpInst::ICMP_ULE:
2528             // Comparison is true iff the LHS >=s 0.
2529             if (MaxRecurse)
2530               if (Value *V = SimplifyICmpInst(ICmpInst::ICMP_SGE, SrcOp,
2531                                               Constant::getNullValue(SrcTy),
2532                                               Q, MaxRecurse-1))
2533                 return V;
2534             break;
2535           }
2536         }
2537       }
2538     }
2539   }
2540 
2541   // icmp eq|ne X, Y -> false|true if X != Y
2542   if ((Pred == ICmpInst::ICMP_EQ || Pred == ICmpInst::ICMP_NE) &&
2543       isKnownNonEqual(LHS, RHS, Q.DL, Q.AC, Q.CxtI, Q.DT)) {
2544     LLVMContext &Ctx = LHS->getType()->getContext();
2545     return Pred == ICmpInst::ICMP_NE ?
2546       ConstantInt::getTrue(Ctx) : ConstantInt::getFalse(Ctx);
2547   }
2548 
2549   // Special logic for binary operators.
2550   BinaryOperator *LBO = dyn_cast<BinaryOperator>(LHS);
2551   BinaryOperator *RBO = dyn_cast<BinaryOperator>(RHS);
2552   if (MaxRecurse && (LBO || RBO)) {
2553     // Analyze the case when either LHS or RHS is an add instruction.
2554     Value *A = nullptr, *B = nullptr, *C = nullptr, *D = nullptr;
2555     // LHS = A + B (or A and B are null); RHS = C + D (or C and D are null).
2556     bool NoLHSWrapProblem = false, NoRHSWrapProblem = false;
2557     if (LBO && LBO->getOpcode() == Instruction::Add) {
2558       A = LBO->getOperand(0); B = LBO->getOperand(1);
2559       NoLHSWrapProblem = ICmpInst::isEquality(Pred) ||
2560         (CmpInst::isUnsigned(Pred) && LBO->hasNoUnsignedWrap()) ||
2561         (CmpInst::isSigned(Pred) && LBO->hasNoSignedWrap());
2562     }
2563     if (RBO && RBO->getOpcode() == Instruction::Add) {
2564       C = RBO->getOperand(0); D = RBO->getOperand(1);
2565       NoRHSWrapProblem = ICmpInst::isEquality(Pred) ||
2566         (CmpInst::isUnsigned(Pred) && RBO->hasNoUnsignedWrap()) ||
2567         (CmpInst::isSigned(Pred) && RBO->hasNoSignedWrap());
2568     }
2569 
2570     // icmp (X+Y), X -> icmp Y, 0 for equalities or if there is no overflow.
2571     if ((A == RHS || B == RHS) && NoLHSWrapProblem)
2572       if (Value *V = SimplifyICmpInst(Pred, A == RHS ? B : A,
2573                                       Constant::getNullValue(RHS->getType()),
2574                                       Q, MaxRecurse-1))
2575         return V;
2576 
2577     // icmp X, (X+Y) -> icmp 0, Y for equalities or if there is no overflow.
2578     if ((C == LHS || D == LHS) && NoRHSWrapProblem)
2579       if (Value *V = SimplifyICmpInst(Pred,
2580                                       Constant::getNullValue(LHS->getType()),
2581                                       C == LHS ? D : C, Q, MaxRecurse-1))
2582         return V;
2583 
2584     // icmp (X+Y), (X+Z) -> icmp Y,Z for equalities or if there is no overflow.
2585     if (A && C && (A == C || A == D || B == C || B == D) &&
2586         NoLHSWrapProblem && NoRHSWrapProblem) {
2587       // Determine Y and Z in the form icmp (X+Y), (X+Z).
2588       Value *Y, *Z;
2589       if (A == C) {
2590         // C + B == C + D  ->  B == D
2591         Y = B;
2592         Z = D;
2593       } else if (A == D) {
2594         // D + B == C + D  ->  B == C
2595         Y = B;
2596         Z = C;
2597       } else if (B == C) {
2598         // A + C == C + D  ->  A == D
2599         Y = A;
2600         Z = D;
2601       } else {
2602         assert(B == D);
2603         // A + D == C + D  ->  A == C
2604         Y = A;
2605         Z = C;
2606       }
2607       if (Value *V = SimplifyICmpInst(Pred, Y, Z, Q, MaxRecurse-1))
2608         return V;
2609     }
2610   }
2611 
2612   // icmp pred (or X, Y), X
2613   if (LBO && match(LBO, m_CombineOr(m_Or(m_Value(), m_Specific(RHS)),
2614                                     m_Or(m_Specific(RHS), m_Value())))) {
2615     if (Pred == ICmpInst::ICMP_ULT)
2616       return getFalse(ITy);
2617     if (Pred == ICmpInst::ICMP_UGE)
2618       return getTrue(ITy);
2619   }
2620   // icmp pred X, (or X, Y)
2621   if (RBO && match(RBO, m_CombineOr(m_Or(m_Value(), m_Specific(LHS)),
2622                                     m_Or(m_Specific(LHS), m_Value())))) {
2623     if (Pred == ICmpInst::ICMP_ULE)
2624       return getTrue(ITy);
2625     if (Pred == ICmpInst::ICMP_UGT)
2626       return getFalse(ITy);
2627   }
2628 
2629   // icmp pred (and X, Y), X
2630   if (LBO && match(LBO, m_CombineOr(m_And(m_Value(), m_Specific(RHS)),
2631                                     m_And(m_Specific(RHS), m_Value())))) {
2632     if (Pred == ICmpInst::ICMP_UGT)
2633       return getFalse(ITy);
2634     if (Pred == ICmpInst::ICMP_ULE)
2635       return getTrue(ITy);
2636   }
2637   // icmp pred X, (and X, Y)
2638   if (RBO && match(RBO, m_CombineOr(m_And(m_Value(), m_Specific(LHS)),
2639                                     m_And(m_Specific(LHS), m_Value())))) {
2640     if (Pred == ICmpInst::ICMP_UGE)
2641       return getTrue(ITy);
2642     if (Pred == ICmpInst::ICMP_ULT)
2643       return getFalse(ITy);
2644   }
2645 
2646   // 0 - (zext X) pred C
2647   if (!CmpInst::isUnsigned(Pred) && match(LHS, m_Neg(m_ZExt(m_Value())))) {
2648     if (ConstantInt *RHSC = dyn_cast<ConstantInt>(RHS)) {
2649       if (RHSC->getValue().isStrictlyPositive()) {
2650         if (Pred == ICmpInst::ICMP_SLT)
2651           return ConstantInt::getTrue(RHSC->getContext());
2652         if (Pred == ICmpInst::ICMP_SGE)
2653           return ConstantInt::getFalse(RHSC->getContext());
2654         if (Pred == ICmpInst::ICMP_EQ)
2655           return ConstantInt::getFalse(RHSC->getContext());
2656         if (Pred == ICmpInst::ICMP_NE)
2657           return ConstantInt::getTrue(RHSC->getContext());
2658       }
2659       if (RHSC->getValue().isNonNegative()) {
2660         if (Pred == ICmpInst::ICMP_SLE)
2661           return ConstantInt::getTrue(RHSC->getContext());
2662         if (Pred == ICmpInst::ICMP_SGT)
2663           return ConstantInt::getFalse(RHSC->getContext());
2664       }
2665     }
2666   }
2667 
2668   // icmp pred (urem X, Y), Y
2669   if (LBO && match(LBO, m_URem(m_Value(), m_Specific(RHS)))) {
2670     bool KnownNonNegative, KnownNegative;
2671     switch (Pred) {
2672     default:
2673       break;
2674     case ICmpInst::ICMP_SGT:
2675     case ICmpInst::ICMP_SGE:
2676       ComputeSignBit(RHS, KnownNonNegative, KnownNegative, Q.DL, 0, Q.AC,
2677                      Q.CxtI, Q.DT);
2678       if (!KnownNonNegative)
2679         break;
2680       // fall-through
2681     case ICmpInst::ICMP_EQ:
2682     case ICmpInst::ICMP_UGT:
2683     case ICmpInst::ICMP_UGE:
2684       return getFalse(ITy);
2685     case ICmpInst::ICMP_SLT:
2686     case ICmpInst::ICMP_SLE:
2687       ComputeSignBit(RHS, KnownNonNegative, KnownNegative, Q.DL, 0, Q.AC,
2688                      Q.CxtI, Q.DT);
2689       if (!KnownNonNegative)
2690         break;
2691       // fall-through
2692     case ICmpInst::ICMP_NE:
2693     case ICmpInst::ICMP_ULT:
2694     case ICmpInst::ICMP_ULE:
2695       return getTrue(ITy);
2696     }
2697   }
2698 
2699   // icmp pred X, (urem Y, X)
2700   if (RBO && match(RBO, m_URem(m_Value(), m_Specific(LHS)))) {
2701     bool KnownNonNegative, KnownNegative;
2702     switch (Pred) {
2703     default:
2704       break;
2705     case ICmpInst::ICMP_SGT:
2706     case ICmpInst::ICMP_SGE:
2707       ComputeSignBit(LHS, KnownNonNegative, KnownNegative, Q.DL, 0, Q.AC,
2708                      Q.CxtI, Q.DT);
2709       if (!KnownNonNegative)
2710         break;
2711       // fall-through
2712     case ICmpInst::ICMP_NE:
2713     case ICmpInst::ICMP_UGT:
2714     case ICmpInst::ICMP_UGE:
2715       return getTrue(ITy);
2716     case ICmpInst::ICMP_SLT:
2717     case ICmpInst::ICMP_SLE:
2718       ComputeSignBit(LHS, KnownNonNegative, KnownNegative, Q.DL, 0, Q.AC,
2719                      Q.CxtI, Q.DT);
2720       if (!KnownNonNegative)
2721         break;
2722       // fall-through
2723     case ICmpInst::ICMP_EQ:
2724     case ICmpInst::ICMP_ULT:
2725     case ICmpInst::ICMP_ULE:
2726       return getFalse(ITy);
2727     }
2728   }
2729 
2730   // x >> y <=u x
2731   // x udiv y <=u x.
2732   if (LBO && (match(LBO, m_LShr(m_Specific(RHS), m_Value())) ||
2733               match(LBO, m_UDiv(m_Specific(RHS), m_Value())))) {
2734     // icmp pred (X op Y), X
2735     if (Pred == ICmpInst::ICMP_UGT)
2736       return getFalse(ITy);
2737     if (Pred == ICmpInst::ICMP_ULE)
2738       return getTrue(ITy);
2739   }
2740 
2741   // handle:
2742   //   CI2 << X == CI
2743   //   CI2 << X != CI
2744   //
2745   //   where CI2 is a power of 2 and CI isn't
2746   if (auto *CI = dyn_cast<ConstantInt>(RHS)) {
2747     const APInt *CI2Val, *CIVal = &CI->getValue();
2748     if (LBO && match(LBO, m_Shl(m_APInt(CI2Val), m_Value())) &&
2749         CI2Val->isPowerOf2()) {
2750       if (!CIVal->isPowerOf2()) {
2751         // CI2 << X can equal zero in some circumstances,
2752         // this simplification is unsafe if CI is zero.
2753         //
2754         // We know it is safe if:
2755         // - The shift is nsw, we can't shift out the one bit.
2756         // - The shift is nuw, we can't shift out the one bit.
2757         // - CI2 is one
2758         // - CI isn't zero
2759         if (LBO->hasNoSignedWrap() || LBO->hasNoUnsignedWrap() ||
2760             *CI2Val == 1 || !CI->isZero()) {
2761           if (Pred == ICmpInst::ICMP_EQ)
2762             return ConstantInt::getFalse(RHS->getContext());
2763           if (Pred == ICmpInst::ICMP_NE)
2764             return ConstantInt::getTrue(RHS->getContext());
2765         }
2766       }
2767       if (CIVal->isSignBit() && *CI2Val == 1) {
2768         if (Pred == ICmpInst::ICMP_UGT)
2769           return ConstantInt::getFalse(RHS->getContext());
2770         if (Pred == ICmpInst::ICMP_ULE)
2771           return ConstantInt::getTrue(RHS->getContext());
2772       }
2773     }
2774   }
2775 
2776   if (MaxRecurse && LBO && RBO && LBO->getOpcode() == RBO->getOpcode() &&
2777       LBO->getOperand(1) == RBO->getOperand(1)) {
2778     switch (LBO->getOpcode()) {
2779     default: break;
2780     case Instruction::UDiv:
2781     case Instruction::LShr:
2782       if (ICmpInst::isSigned(Pred))
2783         break;
2784       // fall-through
2785     case Instruction::SDiv:
2786     case Instruction::AShr:
2787       if (!LBO->isExact() || !RBO->isExact())
2788         break;
2789       if (Value *V = SimplifyICmpInst(Pred, LBO->getOperand(0),
2790                                       RBO->getOperand(0), Q, MaxRecurse-1))
2791         return V;
2792       break;
2793     case Instruction::Shl: {
2794       bool NUW = LBO->hasNoUnsignedWrap() && RBO->hasNoUnsignedWrap();
2795       bool NSW = LBO->hasNoSignedWrap() && RBO->hasNoSignedWrap();
2796       if (!NUW && !NSW)
2797         break;
2798       if (!NSW && ICmpInst::isSigned(Pred))
2799         break;
2800       if (Value *V = SimplifyICmpInst(Pred, LBO->getOperand(0),
2801                                       RBO->getOperand(0), Q, MaxRecurse-1))
2802         return V;
2803       break;
2804     }
2805     }
2806   }
2807 
2808   // Simplify comparisons involving max/min.
2809   Value *A, *B;
2810   CmpInst::Predicate P = CmpInst::BAD_ICMP_PREDICATE;
2811   CmpInst::Predicate EqP; // Chosen so that "A == max/min(A,B)" iff "A EqP B".
2812 
2813   // Signed variants on "max(a,b)>=a -> true".
2814   if (match(LHS, m_SMax(m_Value(A), m_Value(B))) && (A == RHS || B == RHS)) {
2815     if (A != RHS) std::swap(A, B); // smax(A, B) pred A.
2816     EqP = CmpInst::ICMP_SGE; // "A == smax(A, B)" iff "A sge B".
2817     // We analyze this as smax(A, B) pred A.
2818     P = Pred;
2819   } else if (match(RHS, m_SMax(m_Value(A), m_Value(B))) &&
2820              (A == LHS || B == LHS)) {
2821     if (A != LHS) std::swap(A, B); // A pred smax(A, B).
2822     EqP = CmpInst::ICMP_SGE; // "A == smax(A, B)" iff "A sge B".
2823     // We analyze this as smax(A, B) swapped-pred A.
2824     P = CmpInst::getSwappedPredicate(Pred);
2825   } else if (match(LHS, m_SMin(m_Value(A), m_Value(B))) &&
2826              (A == RHS || B == RHS)) {
2827     if (A != RHS) std::swap(A, B); // smin(A, B) pred A.
2828     EqP = CmpInst::ICMP_SLE; // "A == smin(A, B)" iff "A sle B".
2829     // We analyze this as smax(-A, -B) swapped-pred -A.
2830     // Note that we do not need to actually form -A or -B thanks to EqP.
2831     P = CmpInst::getSwappedPredicate(Pred);
2832   } else if (match(RHS, m_SMin(m_Value(A), m_Value(B))) &&
2833              (A == LHS || B == LHS)) {
2834     if (A != LHS) std::swap(A, B); // A pred smin(A, B).
2835     EqP = CmpInst::ICMP_SLE; // "A == smin(A, B)" iff "A sle B".
2836     // We analyze this as smax(-A, -B) pred -A.
2837     // Note that we do not need to actually form -A or -B thanks to EqP.
2838     P = Pred;
2839   }
2840   if (P != CmpInst::BAD_ICMP_PREDICATE) {
2841     // Cases correspond to "max(A, B) p A".
2842     switch (P) {
2843     default:
2844       break;
2845     case CmpInst::ICMP_EQ:
2846     case CmpInst::ICMP_SLE:
2847       // Equivalent to "A EqP B".  This may be the same as the condition tested
2848       // in the max/min; if so, we can just return that.
2849       if (Value *V = ExtractEquivalentCondition(LHS, EqP, A, B))
2850         return V;
2851       if (Value *V = ExtractEquivalentCondition(RHS, EqP, A, B))
2852         return V;
2853       // Otherwise, see if "A EqP B" simplifies.
2854       if (MaxRecurse)
2855         if (Value *V = SimplifyICmpInst(EqP, A, B, Q, MaxRecurse-1))
2856           return V;
2857       break;
2858     case CmpInst::ICMP_NE:
2859     case CmpInst::ICMP_SGT: {
2860       CmpInst::Predicate InvEqP = CmpInst::getInversePredicate(EqP);
2861       // Equivalent to "A InvEqP B".  This may be the same as the condition
2862       // tested in the max/min; if so, we can just return that.
2863       if (Value *V = ExtractEquivalentCondition(LHS, InvEqP, A, B))
2864         return V;
2865       if (Value *V = ExtractEquivalentCondition(RHS, InvEqP, A, B))
2866         return V;
2867       // Otherwise, see if "A InvEqP B" simplifies.
2868       if (MaxRecurse)
2869         if (Value *V = SimplifyICmpInst(InvEqP, A, B, Q, MaxRecurse-1))
2870           return V;
2871       break;
2872     }
2873     case CmpInst::ICMP_SGE:
2874       // Always true.
2875       return getTrue(ITy);
2876     case CmpInst::ICMP_SLT:
2877       // Always false.
2878       return getFalse(ITy);
2879     }
2880   }
2881 
2882   // Unsigned variants on "max(a,b)>=a -> true".
2883   P = CmpInst::BAD_ICMP_PREDICATE;
2884   if (match(LHS, m_UMax(m_Value(A), m_Value(B))) && (A == RHS || B == RHS)) {
2885     if (A != RHS) std::swap(A, B); // umax(A, B) pred A.
2886     EqP = CmpInst::ICMP_UGE; // "A == umax(A, B)" iff "A uge B".
2887     // We analyze this as umax(A, B) pred A.
2888     P = Pred;
2889   } else if (match(RHS, m_UMax(m_Value(A), m_Value(B))) &&
2890              (A == LHS || B == LHS)) {
2891     if (A != LHS) std::swap(A, B); // A pred umax(A, B).
2892     EqP = CmpInst::ICMP_UGE; // "A == umax(A, B)" iff "A uge B".
2893     // We analyze this as umax(A, B) swapped-pred A.
2894     P = CmpInst::getSwappedPredicate(Pred);
2895   } else if (match(LHS, m_UMin(m_Value(A), m_Value(B))) &&
2896              (A == RHS || B == RHS)) {
2897     if (A != RHS) std::swap(A, B); // umin(A, B) pred A.
2898     EqP = CmpInst::ICMP_ULE; // "A == umin(A, B)" iff "A ule B".
2899     // We analyze this as umax(-A, -B) swapped-pred -A.
2900     // Note that we do not need to actually form -A or -B thanks to EqP.
2901     P = CmpInst::getSwappedPredicate(Pred);
2902   } else if (match(RHS, m_UMin(m_Value(A), m_Value(B))) &&
2903              (A == LHS || B == LHS)) {
2904     if (A != LHS) std::swap(A, B); // A pred umin(A, B).
2905     EqP = CmpInst::ICMP_ULE; // "A == umin(A, B)" iff "A ule B".
2906     // We analyze this as umax(-A, -B) pred -A.
2907     // Note that we do not need to actually form -A or -B thanks to EqP.
2908     P = Pred;
2909   }
2910   if (P != CmpInst::BAD_ICMP_PREDICATE) {
2911     // Cases correspond to "max(A, B) p A".
2912     switch (P) {
2913     default:
2914       break;
2915     case CmpInst::ICMP_EQ:
2916     case CmpInst::ICMP_ULE:
2917       // Equivalent to "A EqP B".  This may be the same as the condition tested
2918       // in the max/min; if so, we can just return that.
2919       if (Value *V = ExtractEquivalentCondition(LHS, EqP, A, B))
2920         return V;
2921       if (Value *V = ExtractEquivalentCondition(RHS, EqP, A, B))
2922         return V;
2923       // Otherwise, see if "A EqP B" simplifies.
2924       if (MaxRecurse)
2925         if (Value *V = SimplifyICmpInst(EqP, A, B, Q, MaxRecurse-1))
2926           return V;
2927       break;
2928     case CmpInst::ICMP_NE:
2929     case CmpInst::ICMP_UGT: {
2930       CmpInst::Predicate InvEqP = CmpInst::getInversePredicate(EqP);
2931       // Equivalent to "A InvEqP B".  This may be the same as the condition
2932       // tested in the max/min; if so, we can just return that.
2933       if (Value *V = ExtractEquivalentCondition(LHS, InvEqP, A, B))
2934         return V;
2935       if (Value *V = ExtractEquivalentCondition(RHS, InvEqP, A, B))
2936         return V;
2937       // Otherwise, see if "A InvEqP B" simplifies.
2938       if (MaxRecurse)
2939         if (Value *V = SimplifyICmpInst(InvEqP, A, B, Q, MaxRecurse-1))
2940           return V;
2941       break;
2942     }
2943     case CmpInst::ICMP_UGE:
2944       // Always true.
2945       return getTrue(ITy);
2946     case CmpInst::ICMP_ULT:
2947       // Always false.
2948       return getFalse(ITy);
2949     }
2950   }
2951 
2952   // Variants on "max(x,y) >= min(x,z)".
2953   Value *C, *D;
2954   if (match(LHS, m_SMax(m_Value(A), m_Value(B))) &&
2955       match(RHS, m_SMin(m_Value(C), m_Value(D))) &&
2956       (A == C || A == D || B == C || B == D)) {
2957     // max(x, ?) pred min(x, ?).
2958     if (Pred == CmpInst::ICMP_SGE)
2959       // Always true.
2960       return getTrue(ITy);
2961     if (Pred == CmpInst::ICMP_SLT)
2962       // Always false.
2963       return getFalse(ITy);
2964   } else if (match(LHS, m_SMin(m_Value(A), m_Value(B))) &&
2965              match(RHS, m_SMax(m_Value(C), m_Value(D))) &&
2966              (A == C || A == D || B == C || B == D)) {
2967     // min(x, ?) pred max(x, ?).
2968     if (Pred == CmpInst::ICMP_SLE)
2969       // Always true.
2970       return getTrue(ITy);
2971     if (Pred == CmpInst::ICMP_SGT)
2972       // Always false.
2973       return getFalse(ITy);
2974   } else if (match(LHS, m_UMax(m_Value(A), m_Value(B))) &&
2975              match(RHS, m_UMin(m_Value(C), m_Value(D))) &&
2976              (A == C || A == D || B == C || B == D)) {
2977     // max(x, ?) pred min(x, ?).
2978     if (Pred == CmpInst::ICMP_UGE)
2979       // Always true.
2980       return getTrue(ITy);
2981     if (Pred == CmpInst::ICMP_ULT)
2982       // Always false.
2983       return getFalse(ITy);
2984   } else if (match(LHS, m_UMin(m_Value(A), m_Value(B))) &&
2985              match(RHS, m_UMax(m_Value(C), m_Value(D))) &&
2986              (A == C || A == D || B == C || B == D)) {
2987     // min(x, ?) pred max(x, ?).
2988     if (Pred == CmpInst::ICMP_ULE)
2989       // Always true.
2990       return getTrue(ITy);
2991     if (Pred == CmpInst::ICMP_UGT)
2992       // Always false.
2993       return getFalse(ITy);
2994   }
2995 
2996   // Simplify comparisons of related pointers using a powerful, recursive
2997   // GEP-walk when we have target data available..
2998   if (LHS->getType()->isPointerTy())
2999     if (Constant *C = computePointerICmp(Q.DL, Q.TLI, Pred, LHS, RHS))
3000       return C;
3001 
3002   if (GetElementPtrInst *GLHS = dyn_cast<GetElementPtrInst>(LHS)) {
3003     if (GEPOperator *GRHS = dyn_cast<GEPOperator>(RHS)) {
3004       if (GLHS->getPointerOperand() == GRHS->getPointerOperand() &&
3005           GLHS->hasAllConstantIndices() && GRHS->hasAllConstantIndices() &&
3006           (ICmpInst::isEquality(Pred) ||
3007            (GLHS->isInBounds() && GRHS->isInBounds() &&
3008             Pred == ICmpInst::getSignedPredicate(Pred)))) {
3009         // The bases are equal and the indices are constant.  Build a constant
3010         // expression GEP with the same indices and a null base pointer to see
3011         // what constant folding can make out of it.
3012         Constant *Null = Constant::getNullValue(GLHS->getPointerOperandType());
3013         SmallVector<Value *, 4> IndicesLHS(GLHS->idx_begin(), GLHS->idx_end());
3014         Constant *NewLHS = ConstantExpr::getGetElementPtr(
3015             GLHS->getSourceElementType(), Null, IndicesLHS);
3016 
3017         SmallVector<Value *, 4> IndicesRHS(GRHS->idx_begin(), GRHS->idx_end());
3018         Constant *NewRHS = ConstantExpr::getGetElementPtr(
3019             GLHS->getSourceElementType(), Null, IndicesRHS);
3020         return ConstantExpr::getICmp(Pred, NewLHS, NewRHS);
3021       }
3022     }
3023   }
3024 
3025   // If a bit is known to be zero for A and known to be one for B,
3026   // then A and B cannot be equal.
3027   if (ICmpInst::isEquality(Pred)) {
3028     if (ConstantInt *CI = dyn_cast<ConstantInt>(RHS)) {
3029       uint32_t BitWidth = CI->getBitWidth();
3030       APInt LHSKnownZero(BitWidth, 0);
3031       APInt LHSKnownOne(BitWidth, 0);
3032       computeKnownBits(LHS, LHSKnownZero, LHSKnownOne, Q.DL, /*Depth=*/0, Q.AC,
3033                        Q.CxtI, Q.DT);
3034       const APInt &RHSVal = CI->getValue();
3035       if (((LHSKnownZero & RHSVal) != 0) || ((LHSKnownOne & ~RHSVal) != 0))
3036         return Pred == ICmpInst::ICMP_EQ
3037                    ? ConstantInt::getFalse(CI->getContext())
3038                    : ConstantInt::getTrue(CI->getContext());
3039     }
3040   }
3041 
3042   // If the comparison is with the result of a select instruction, check whether
3043   // comparing with either branch of the select always yields the same value.
3044   if (isa<SelectInst>(LHS) || isa<SelectInst>(RHS))
3045     if (Value *V = ThreadCmpOverSelect(Pred, LHS, RHS, Q, MaxRecurse))
3046       return V;
3047 
3048   // If the comparison is with the result of a phi instruction, check whether
3049   // doing the compare with each incoming phi value yields a common result.
3050   if (isa<PHINode>(LHS) || isa<PHINode>(RHS))
3051     if (Value *V = ThreadCmpOverPHI(Pred, LHS, RHS, Q, MaxRecurse))
3052       return V;
3053 
3054   return nullptr;
3055 }
3056 
3057 Value *llvm::SimplifyICmpInst(unsigned Predicate, Value *LHS, Value *RHS,
3058                               const DataLayout &DL,
3059                               const TargetLibraryInfo *TLI,
3060                               const DominatorTree *DT, AssumptionCache *AC,
3061                               const Instruction *CxtI) {
3062   return ::SimplifyICmpInst(Predicate, LHS, RHS, Query(DL, TLI, DT, AC, CxtI),
3063                             RecursionLimit);
3064 }
3065 
3066 /// Given operands for an FCmpInst, see if we can fold the result.
3067 /// If not, this returns null.
3068 static Value *SimplifyFCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
3069                                FastMathFlags FMF, const Query &Q,
3070                                unsigned MaxRecurse) {
3071   CmpInst::Predicate Pred = (CmpInst::Predicate)Predicate;
3072   assert(CmpInst::isFPPredicate(Pred) && "Not an FP compare!");
3073 
3074   if (Constant *CLHS = dyn_cast<Constant>(LHS)) {
3075     if (Constant *CRHS = dyn_cast<Constant>(RHS))
3076       return ConstantFoldCompareInstOperands(Pred, CLHS, CRHS, Q.DL, Q.TLI);
3077 
3078     // If we have a constant, make sure it is on the RHS.
3079     std::swap(LHS, RHS);
3080     Pred = CmpInst::getSwappedPredicate(Pred);
3081   }
3082 
3083   // Fold trivial predicates.
3084   if (Pred == FCmpInst::FCMP_FALSE)
3085     return ConstantInt::get(GetCompareTy(LHS), 0);
3086   if (Pred == FCmpInst::FCMP_TRUE)
3087     return ConstantInt::get(GetCompareTy(LHS), 1);
3088 
3089   // UNO/ORD predicates can be trivially folded if NaNs are ignored.
3090   if (FMF.noNaNs()) {
3091     if (Pred == FCmpInst::FCMP_UNO)
3092       return ConstantInt::get(GetCompareTy(LHS), 0);
3093     if (Pred == FCmpInst::FCMP_ORD)
3094       return ConstantInt::get(GetCompareTy(LHS), 1);
3095   }
3096 
3097   // fcmp pred x, undef  and  fcmp pred undef, x
3098   // fold to true if unordered, false if ordered
3099   if (isa<UndefValue>(LHS) || isa<UndefValue>(RHS)) {
3100     // Choosing NaN for the undef will always make unordered comparison succeed
3101     // and ordered comparison fail.
3102     return ConstantInt::get(GetCompareTy(LHS), CmpInst::isUnordered(Pred));
3103   }
3104 
3105   // fcmp x,x -> true/false.  Not all compares are foldable.
3106   if (LHS == RHS) {
3107     if (CmpInst::isTrueWhenEqual(Pred))
3108       return ConstantInt::get(GetCompareTy(LHS), 1);
3109     if (CmpInst::isFalseWhenEqual(Pred))
3110       return ConstantInt::get(GetCompareTy(LHS), 0);
3111   }
3112 
3113   // Handle fcmp with constant RHS
3114   if (ConstantFP *CFP = dyn_cast<ConstantFP>(RHS)) {
3115     // If the constant is a nan, see if we can fold the comparison based on it.
3116     if (CFP->getValueAPF().isNaN()) {
3117       if (FCmpInst::isOrdered(Pred)) // True "if ordered and foo"
3118         return ConstantInt::getFalse(CFP->getContext());
3119       assert(FCmpInst::isUnordered(Pred) &&
3120              "Comparison must be either ordered or unordered!");
3121       // True if unordered.
3122       return ConstantInt::getTrue(CFP->getContext());
3123     }
3124     // Check whether the constant is an infinity.
3125     if (CFP->getValueAPF().isInfinity()) {
3126       if (CFP->getValueAPF().isNegative()) {
3127         switch (Pred) {
3128         case FCmpInst::FCMP_OLT:
3129           // No value is ordered and less than negative infinity.
3130           return ConstantInt::getFalse(CFP->getContext());
3131         case FCmpInst::FCMP_UGE:
3132           // All values are unordered with or at least negative infinity.
3133           return ConstantInt::getTrue(CFP->getContext());
3134         default:
3135           break;
3136         }
3137       } else {
3138         switch (Pred) {
3139         case FCmpInst::FCMP_OGT:
3140           // No value is ordered and greater than infinity.
3141           return ConstantInt::getFalse(CFP->getContext());
3142         case FCmpInst::FCMP_ULE:
3143           // All values are unordered with and at most infinity.
3144           return ConstantInt::getTrue(CFP->getContext());
3145         default:
3146           break;
3147         }
3148       }
3149     }
3150     if (CFP->getValueAPF().isZero()) {
3151       switch (Pred) {
3152       case FCmpInst::FCMP_UGE:
3153         if (CannotBeOrderedLessThanZero(LHS))
3154           return ConstantInt::getTrue(CFP->getContext());
3155         break;
3156       case FCmpInst::FCMP_OLT:
3157         // X < 0
3158         if (CannotBeOrderedLessThanZero(LHS))
3159           return ConstantInt::getFalse(CFP->getContext());
3160         break;
3161       default:
3162         break;
3163       }
3164     }
3165   }
3166 
3167   // If the comparison is with the result of a select instruction, check whether
3168   // comparing with either branch of the select always yields the same value.
3169   if (isa<SelectInst>(LHS) || isa<SelectInst>(RHS))
3170     if (Value *V = ThreadCmpOverSelect(Pred, LHS, RHS, Q, MaxRecurse))
3171       return V;
3172 
3173   // If the comparison is with the result of a phi instruction, check whether
3174   // doing the compare with each incoming phi value yields a common result.
3175   if (isa<PHINode>(LHS) || isa<PHINode>(RHS))
3176     if (Value *V = ThreadCmpOverPHI(Pred, LHS, RHS, Q, MaxRecurse))
3177       return V;
3178 
3179   return nullptr;
3180 }
3181 
3182 Value *llvm::SimplifyFCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
3183                               FastMathFlags FMF, const DataLayout &DL,
3184                               const TargetLibraryInfo *TLI,
3185                               const DominatorTree *DT, AssumptionCache *AC,
3186                               const Instruction *CxtI) {
3187   return ::SimplifyFCmpInst(Predicate, LHS, RHS, FMF,
3188                             Query(DL, TLI, DT, AC, CxtI), RecursionLimit);
3189 }
3190 
3191 /// See if V simplifies when its operand Op is replaced with RepOp.
3192 static const Value *SimplifyWithOpReplaced(Value *V, Value *Op, Value *RepOp,
3193                                            const Query &Q,
3194                                            unsigned MaxRecurse) {
3195   // Trivial replacement.
3196   if (V == Op)
3197     return RepOp;
3198 
3199   auto *I = dyn_cast<Instruction>(V);
3200   if (!I)
3201     return nullptr;
3202 
3203   // If this is a binary operator, try to simplify it with the replaced op.
3204   if (auto *B = dyn_cast<BinaryOperator>(I)) {
3205     // Consider:
3206     //   %cmp = icmp eq i32 %x, 2147483647
3207     //   %add = add nsw i32 %x, 1
3208     //   %sel = select i1 %cmp, i32 -2147483648, i32 %add
3209     //
3210     // We can't replace %sel with %add unless we strip away the flags.
3211     if (isa<OverflowingBinaryOperator>(B))
3212       if (B->hasNoSignedWrap() || B->hasNoUnsignedWrap())
3213         return nullptr;
3214     if (isa<PossiblyExactOperator>(B))
3215       if (B->isExact())
3216         return nullptr;
3217 
3218     if (MaxRecurse) {
3219       if (B->getOperand(0) == Op)
3220         return SimplifyBinOp(B->getOpcode(), RepOp, B->getOperand(1), Q,
3221                              MaxRecurse - 1);
3222       if (B->getOperand(1) == Op)
3223         return SimplifyBinOp(B->getOpcode(), B->getOperand(0), RepOp, Q,
3224                              MaxRecurse - 1);
3225     }
3226   }
3227 
3228   // Same for CmpInsts.
3229   if (CmpInst *C = dyn_cast<CmpInst>(I)) {
3230     if (MaxRecurse) {
3231       if (C->getOperand(0) == Op)
3232         return SimplifyCmpInst(C->getPredicate(), RepOp, C->getOperand(1), Q,
3233                                MaxRecurse - 1);
3234       if (C->getOperand(1) == Op)
3235         return SimplifyCmpInst(C->getPredicate(), C->getOperand(0), RepOp, Q,
3236                                MaxRecurse - 1);
3237     }
3238   }
3239 
3240   // TODO: We could hand off more cases to instsimplify here.
3241 
3242   // If all operands are constant after substituting Op for RepOp then we can
3243   // constant fold the instruction.
3244   if (Constant *CRepOp = dyn_cast<Constant>(RepOp)) {
3245     // Build a list of all constant operands.
3246     SmallVector<Constant *, 8> ConstOps;
3247     for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) {
3248       if (I->getOperand(i) == Op)
3249         ConstOps.push_back(CRepOp);
3250       else if (Constant *COp = dyn_cast<Constant>(I->getOperand(i)))
3251         ConstOps.push_back(COp);
3252       else
3253         break;
3254     }
3255 
3256     // All operands were constants, fold it.
3257     if (ConstOps.size() == I->getNumOperands()) {
3258       if (CmpInst *C = dyn_cast<CmpInst>(I))
3259         return ConstantFoldCompareInstOperands(C->getPredicate(), ConstOps[0],
3260                                                ConstOps[1], Q.DL, Q.TLI);
3261 
3262       if (LoadInst *LI = dyn_cast<LoadInst>(I))
3263         if (!LI->isVolatile())
3264           return ConstantFoldLoadFromConstPtr(ConstOps[0], LI->getType(), Q.DL);
3265 
3266       return ConstantFoldInstOperands(I, ConstOps, Q.DL, Q.TLI);
3267     }
3268   }
3269 
3270   return nullptr;
3271 }
3272 
3273 /// Given operands for a SelectInst, see if we can fold the result.
3274 /// If not, this returns null.
3275 static Value *SimplifySelectInst(Value *CondVal, Value *TrueVal,
3276                                  Value *FalseVal, const Query &Q,
3277                                  unsigned MaxRecurse) {
3278   // select true, X, Y  -> X
3279   // select false, X, Y -> Y
3280   if (Constant *CB = dyn_cast<Constant>(CondVal)) {
3281     if (CB->isAllOnesValue())
3282       return TrueVal;
3283     if (CB->isNullValue())
3284       return FalseVal;
3285   }
3286 
3287   // select C, X, X -> X
3288   if (TrueVal == FalseVal)
3289     return TrueVal;
3290 
3291   if (isa<UndefValue>(CondVal)) {  // select undef, X, Y -> X or Y
3292     if (isa<Constant>(TrueVal))
3293       return TrueVal;
3294     return FalseVal;
3295   }
3296   if (isa<UndefValue>(TrueVal))   // select C, undef, X -> X
3297     return FalseVal;
3298   if (isa<UndefValue>(FalseVal))   // select C, X, undef -> X
3299     return TrueVal;
3300 
3301   if (const auto *ICI = dyn_cast<ICmpInst>(CondVal)) {
3302     unsigned BitWidth = Q.DL.getTypeSizeInBits(TrueVal->getType());
3303     ICmpInst::Predicate Pred = ICI->getPredicate();
3304     Value *CmpLHS = ICI->getOperand(0);
3305     Value *CmpRHS = ICI->getOperand(1);
3306     APInt MinSignedValue = APInt::getSignBit(BitWidth);
3307     Value *X;
3308     const APInt *Y;
3309     bool TrueWhenUnset;
3310     bool IsBitTest = false;
3311     if (ICmpInst::isEquality(Pred) &&
3312         match(CmpLHS, m_And(m_Value(X), m_APInt(Y))) &&
3313         match(CmpRHS, m_Zero())) {
3314       IsBitTest = true;
3315       TrueWhenUnset = Pred == ICmpInst::ICMP_EQ;
3316     } else if (Pred == ICmpInst::ICMP_SLT && match(CmpRHS, m_Zero())) {
3317       X = CmpLHS;
3318       Y = &MinSignedValue;
3319       IsBitTest = true;
3320       TrueWhenUnset = false;
3321     } else if (Pred == ICmpInst::ICMP_SGT && match(CmpRHS, m_AllOnes())) {
3322       X = CmpLHS;
3323       Y = &MinSignedValue;
3324       IsBitTest = true;
3325       TrueWhenUnset = true;
3326     }
3327     if (IsBitTest) {
3328       const APInt *C;
3329       // (X & Y) == 0 ? X & ~Y : X  --> X
3330       // (X & Y) != 0 ? X & ~Y : X  --> X & ~Y
3331       if (FalseVal == X && match(TrueVal, m_And(m_Specific(X), m_APInt(C))) &&
3332           *Y == ~*C)
3333         return TrueWhenUnset ? FalseVal : TrueVal;
3334       // (X & Y) == 0 ? X : X & ~Y  --> X & ~Y
3335       // (X & Y) != 0 ? X : X & ~Y  --> X
3336       if (TrueVal == X && match(FalseVal, m_And(m_Specific(X), m_APInt(C))) &&
3337           *Y == ~*C)
3338         return TrueWhenUnset ? FalseVal : TrueVal;
3339 
3340       if (Y->isPowerOf2()) {
3341         // (X & Y) == 0 ? X | Y : X  --> X | Y
3342         // (X & Y) != 0 ? X | Y : X  --> X
3343         if (FalseVal == X && match(TrueVal, m_Or(m_Specific(X), m_APInt(C))) &&
3344             *Y == *C)
3345           return TrueWhenUnset ? TrueVal : FalseVal;
3346         // (X & Y) == 0 ? X : X | Y  --> X
3347         // (X & Y) != 0 ? X : X | Y  --> X | Y
3348         if (TrueVal == X && match(FalseVal, m_Or(m_Specific(X), m_APInt(C))) &&
3349             *Y == *C)
3350           return TrueWhenUnset ? TrueVal : FalseVal;
3351       }
3352     }
3353     if (ICI->hasOneUse()) {
3354       const APInt *C;
3355       if (match(CmpRHS, m_APInt(C))) {
3356         // X < MIN ? T : F  -->  F
3357         if (Pred == ICmpInst::ICMP_SLT && C->isMinSignedValue())
3358           return FalseVal;
3359         // X < MIN ? T : F  -->  F
3360         if (Pred == ICmpInst::ICMP_ULT && C->isMinValue())
3361           return FalseVal;
3362         // X > MAX ? T : F  -->  F
3363         if (Pred == ICmpInst::ICMP_SGT && C->isMaxSignedValue())
3364           return FalseVal;
3365         // X > MAX ? T : F  -->  F
3366         if (Pred == ICmpInst::ICMP_UGT && C->isMaxValue())
3367           return FalseVal;
3368       }
3369     }
3370 
3371     // If we have an equality comparison then we know the value in one of the
3372     // arms of the select. See if substituting this value into the arm and
3373     // simplifying the result yields the same value as the other arm.
3374     if (Pred == ICmpInst::ICMP_EQ) {
3375       if (SimplifyWithOpReplaced(FalseVal, CmpLHS, CmpRHS, Q, MaxRecurse) ==
3376               TrueVal ||
3377           SimplifyWithOpReplaced(FalseVal, CmpRHS, CmpLHS, Q, MaxRecurse) ==
3378               TrueVal)
3379         return FalseVal;
3380       if (SimplifyWithOpReplaced(TrueVal, CmpLHS, CmpRHS, Q, MaxRecurse) ==
3381               FalseVal ||
3382           SimplifyWithOpReplaced(TrueVal, CmpRHS, CmpLHS, Q, MaxRecurse) ==
3383               FalseVal)
3384         return FalseVal;
3385     } else if (Pred == ICmpInst::ICMP_NE) {
3386       if (SimplifyWithOpReplaced(TrueVal, CmpLHS, CmpRHS, Q, MaxRecurse) ==
3387               FalseVal ||
3388           SimplifyWithOpReplaced(TrueVal, CmpRHS, CmpLHS, Q, MaxRecurse) ==
3389               FalseVal)
3390         return TrueVal;
3391       if (SimplifyWithOpReplaced(FalseVal, CmpLHS, CmpRHS, Q, MaxRecurse) ==
3392               TrueVal ||
3393           SimplifyWithOpReplaced(FalseVal, CmpRHS, CmpLHS, Q, MaxRecurse) ==
3394               TrueVal)
3395         return TrueVal;
3396     }
3397   }
3398 
3399   return nullptr;
3400 }
3401 
3402 Value *llvm::SimplifySelectInst(Value *Cond, Value *TrueVal, Value *FalseVal,
3403                                 const DataLayout &DL,
3404                                 const TargetLibraryInfo *TLI,
3405                                 const DominatorTree *DT, AssumptionCache *AC,
3406                                 const Instruction *CxtI) {
3407   return ::SimplifySelectInst(Cond, TrueVal, FalseVal,
3408                               Query(DL, TLI, DT, AC, CxtI), RecursionLimit);
3409 }
3410 
3411 /// Given operands for an GetElementPtrInst, see if we can fold the result.
3412 /// If not, this returns null.
3413 static Value *SimplifyGEPInst(Type *SrcTy, ArrayRef<Value *> Ops,
3414                               const Query &Q, unsigned) {
3415   // The type of the GEP pointer operand.
3416   unsigned AS =
3417       cast<PointerType>(Ops[0]->getType()->getScalarType())->getAddressSpace();
3418 
3419   // getelementptr P -> P.
3420   if (Ops.size() == 1)
3421     return Ops[0];
3422 
3423   // Compute the (pointer) type returned by the GEP instruction.
3424   Type *LastType = GetElementPtrInst::getIndexedType(SrcTy, Ops.slice(1));
3425   Type *GEPTy = PointerType::get(LastType, AS);
3426   if (VectorType *VT = dyn_cast<VectorType>(Ops[0]->getType()))
3427     GEPTy = VectorType::get(GEPTy, VT->getNumElements());
3428 
3429   if (isa<UndefValue>(Ops[0]))
3430     return UndefValue::get(GEPTy);
3431 
3432   if (Ops.size() == 2) {
3433     // getelementptr P, 0 -> P.
3434     if (match(Ops[1], m_Zero()))
3435       return Ops[0];
3436 
3437     Type *Ty = SrcTy;
3438     if (Ty->isSized()) {
3439       Value *P;
3440       uint64_t C;
3441       uint64_t TyAllocSize = Q.DL.getTypeAllocSize(Ty);
3442       // getelementptr P, N -> P if P points to a type of zero size.
3443       if (TyAllocSize == 0)
3444         return Ops[0];
3445 
3446       // The following transforms are only safe if the ptrtoint cast
3447       // doesn't truncate the pointers.
3448       if (Ops[1]->getType()->getScalarSizeInBits() ==
3449           Q.DL.getPointerSizeInBits(AS)) {
3450         auto PtrToIntOrZero = [GEPTy](Value *P) -> Value * {
3451           if (match(P, m_Zero()))
3452             return Constant::getNullValue(GEPTy);
3453           Value *Temp;
3454           if (match(P, m_PtrToInt(m_Value(Temp))))
3455             if (Temp->getType() == GEPTy)
3456               return Temp;
3457           return nullptr;
3458         };
3459 
3460         // getelementptr V, (sub P, V) -> P if P points to a type of size 1.
3461         if (TyAllocSize == 1 &&
3462             match(Ops[1], m_Sub(m_Value(P), m_PtrToInt(m_Specific(Ops[0])))))
3463           if (Value *R = PtrToIntOrZero(P))
3464             return R;
3465 
3466         // getelementptr V, (ashr (sub P, V), C) -> Q
3467         // if P points to a type of size 1 << C.
3468         if (match(Ops[1],
3469                   m_AShr(m_Sub(m_Value(P), m_PtrToInt(m_Specific(Ops[0]))),
3470                          m_ConstantInt(C))) &&
3471             TyAllocSize == 1ULL << C)
3472           if (Value *R = PtrToIntOrZero(P))
3473             return R;
3474 
3475         // getelementptr V, (sdiv (sub P, V), C) -> Q
3476         // if P points to a type of size C.
3477         if (match(Ops[1],
3478                   m_SDiv(m_Sub(m_Value(P), m_PtrToInt(m_Specific(Ops[0]))),
3479                          m_SpecificInt(TyAllocSize))))
3480           if (Value *R = PtrToIntOrZero(P))
3481             return R;
3482       }
3483     }
3484   }
3485 
3486   // Check to see if this is constant foldable.
3487   for (unsigned i = 0, e = Ops.size(); i != e; ++i)
3488     if (!isa<Constant>(Ops[i]))
3489       return nullptr;
3490 
3491   return ConstantExpr::getGetElementPtr(SrcTy, cast<Constant>(Ops[0]),
3492                                         Ops.slice(1));
3493 }
3494 
3495 Value *llvm::SimplifyGEPInst(Type *SrcTy, ArrayRef<Value *> Ops,
3496                              const DataLayout &DL,
3497                              const TargetLibraryInfo *TLI,
3498                              const DominatorTree *DT, AssumptionCache *AC,
3499                              const Instruction *CxtI) {
3500   return ::SimplifyGEPInst(SrcTy, Ops,
3501                            Query(DL, TLI, DT, AC, CxtI), RecursionLimit);
3502 }
3503 
3504 /// Given operands for an InsertValueInst, see if we can fold the result.
3505 /// If not, this returns null.
3506 static Value *SimplifyInsertValueInst(Value *Agg, Value *Val,
3507                                       ArrayRef<unsigned> Idxs, const Query &Q,
3508                                       unsigned) {
3509   if (Constant *CAgg = dyn_cast<Constant>(Agg))
3510     if (Constant *CVal = dyn_cast<Constant>(Val))
3511       return ConstantFoldInsertValueInstruction(CAgg, CVal, Idxs);
3512 
3513   // insertvalue x, undef, n -> x
3514   if (match(Val, m_Undef()))
3515     return Agg;
3516 
3517   // insertvalue x, (extractvalue y, n), n
3518   if (ExtractValueInst *EV = dyn_cast<ExtractValueInst>(Val))
3519     if (EV->getAggregateOperand()->getType() == Agg->getType() &&
3520         EV->getIndices() == Idxs) {
3521       // insertvalue undef, (extractvalue y, n), n -> y
3522       if (match(Agg, m_Undef()))
3523         return EV->getAggregateOperand();
3524 
3525       // insertvalue y, (extractvalue y, n), n -> y
3526       if (Agg == EV->getAggregateOperand())
3527         return Agg;
3528     }
3529 
3530   return nullptr;
3531 }
3532 
3533 Value *llvm::SimplifyInsertValueInst(
3534     Value *Agg, Value *Val, ArrayRef<unsigned> Idxs, const DataLayout &DL,
3535     const TargetLibraryInfo *TLI, const DominatorTree *DT, AssumptionCache *AC,
3536     const Instruction *CxtI) {
3537   return ::SimplifyInsertValueInst(Agg, Val, Idxs, Query(DL, TLI, DT, AC, CxtI),
3538                                    RecursionLimit);
3539 }
3540 
3541 /// Given operands for an ExtractValueInst, see if we can fold the result.
3542 /// If not, this returns null.
3543 static Value *SimplifyExtractValueInst(Value *Agg, ArrayRef<unsigned> Idxs,
3544                                        const Query &, unsigned) {
3545   if (auto *CAgg = dyn_cast<Constant>(Agg))
3546     return ConstantFoldExtractValueInstruction(CAgg, Idxs);
3547 
3548   // extractvalue x, (insertvalue y, elt, n), n -> elt
3549   unsigned NumIdxs = Idxs.size();
3550   for (auto *IVI = dyn_cast<InsertValueInst>(Agg); IVI != nullptr;
3551        IVI = dyn_cast<InsertValueInst>(IVI->getAggregateOperand())) {
3552     ArrayRef<unsigned> InsertValueIdxs = IVI->getIndices();
3553     unsigned NumInsertValueIdxs = InsertValueIdxs.size();
3554     unsigned NumCommonIdxs = std::min(NumInsertValueIdxs, NumIdxs);
3555     if (InsertValueIdxs.slice(0, NumCommonIdxs) ==
3556         Idxs.slice(0, NumCommonIdxs)) {
3557       if (NumIdxs == NumInsertValueIdxs)
3558         return IVI->getInsertedValueOperand();
3559       break;
3560     }
3561   }
3562 
3563   return nullptr;
3564 }
3565 
3566 Value *llvm::SimplifyExtractValueInst(Value *Agg, ArrayRef<unsigned> Idxs,
3567                                       const DataLayout &DL,
3568                                       const TargetLibraryInfo *TLI,
3569                                       const DominatorTree *DT,
3570                                       AssumptionCache *AC,
3571                                       const Instruction *CxtI) {
3572   return ::SimplifyExtractValueInst(Agg, Idxs, Query(DL, TLI, DT, AC, CxtI),
3573                                     RecursionLimit);
3574 }
3575 
3576 /// Given operands for an ExtractElementInst, see if we can fold the result.
3577 /// If not, this returns null.
3578 static Value *SimplifyExtractElementInst(Value *Vec, Value *Idx, const Query &,
3579                                          unsigned) {
3580   if (auto *CVec = dyn_cast<Constant>(Vec)) {
3581     if (auto *CIdx = dyn_cast<Constant>(Idx))
3582       return ConstantFoldExtractElementInstruction(CVec, CIdx);
3583 
3584     // The index is not relevant if our vector is a splat.
3585     if (auto *Splat = CVec->getSplatValue())
3586       return Splat;
3587 
3588     if (isa<UndefValue>(Vec))
3589       return UndefValue::get(Vec->getType()->getVectorElementType());
3590   }
3591 
3592   // If extracting a specified index from the vector, see if we can recursively
3593   // find a previously computed scalar that was inserted into the vector.
3594   if (auto *IdxC = dyn_cast<ConstantInt>(Idx))
3595     if (Value *Elt = findScalarElement(Vec, IdxC->getZExtValue()))
3596       return Elt;
3597 
3598   return nullptr;
3599 }
3600 
3601 Value *llvm::SimplifyExtractElementInst(
3602     Value *Vec, Value *Idx, const DataLayout &DL, const TargetLibraryInfo *TLI,
3603     const DominatorTree *DT, AssumptionCache *AC, const Instruction *CxtI) {
3604   return ::SimplifyExtractElementInst(Vec, Idx, Query(DL, TLI, DT, AC, CxtI),
3605                                       RecursionLimit);
3606 }
3607 
3608 /// See if we can fold the given phi. If not, returns null.
3609 static Value *SimplifyPHINode(PHINode *PN, const Query &Q) {
3610   // If all of the PHI's incoming values are the same then replace the PHI node
3611   // with the common value.
3612   Value *CommonValue = nullptr;
3613   bool HasUndefInput = false;
3614   for (Value *Incoming : PN->incoming_values()) {
3615     // If the incoming value is the phi node itself, it can safely be skipped.
3616     if (Incoming == PN) continue;
3617     if (isa<UndefValue>(Incoming)) {
3618       // Remember that we saw an undef value, but otherwise ignore them.
3619       HasUndefInput = true;
3620       continue;
3621     }
3622     if (CommonValue && Incoming != CommonValue)
3623       return nullptr;  // Not the same, bail out.
3624     CommonValue = Incoming;
3625   }
3626 
3627   // If CommonValue is null then all of the incoming values were either undef or
3628   // equal to the phi node itself.
3629   if (!CommonValue)
3630     return UndefValue::get(PN->getType());
3631 
3632   // If we have a PHI node like phi(X, undef, X), where X is defined by some
3633   // instruction, we cannot return X as the result of the PHI node unless it
3634   // dominates the PHI block.
3635   if (HasUndefInput)
3636     return ValueDominatesPHI(CommonValue, PN, Q.DT) ? CommonValue : nullptr;
3637 
3638   return CommonValue;
3639 }
3640 
3641 static Value *SimplifyTruncInst(Value *Op, Type *Ty, const Query &Q, unsigned) {
3642   if (Constant *C = dyn_cast<Constant>(Op))
3643     return ConstantFoldCastOperand(Instruction::Trunc, C, Ty, Q.DL);
3644 
3645   return nullptr;
3646 }
3647 
3648 Value *llvm::SimplifyTruncInst(Value *Op, Type *Ty, const DataLayout &DL,
3649                                const TargetLibraryInfo *TLI,
3650                                const DominatorTree *DT, AssumptionCache *AC,
3651                                const Instruction *CxtI) {
3652   return ::SimplifyTruncInst(Op, Ty, Query(DL, TLI, DT, AC, CxtI),
3653                              RecursionLimit);
3654 }
3655 
3656 //=== Helper functions for higher up the class hierarchy.
3657 
3658 /// Given operands for a BinaryOperator, see if we can fold the result.
3659 /// If not, this returns null.
3660 static Value *SimplifyBinOp(unsigned Opcode, Value *LHS, Value *RHS,
3661                             const Query &Q, unsigned MaxRecurse) {
3662   switch (Opcode) {
3663   case Instruction::Add:
3664     return SimplifyAddInst(LHS, RHS, /*isNSW*/false, /*isNUW*/false,
3665                            Q, MaxRecurse);
3666   case Instruction::FAdd:
3667     return SimplifyFAddInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse);
3668 
3669   case Instruction::Sub:
3670     return SimplifySubInst(LHS, RHS, /*isNSW*/false, /*isNUW*/false,
3671                            Q, MaxRecurse);
3672   case Instruction::FSub:
3673     return SimplifyFSubInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse);
3674 
3675   case Instruction::Mul:  return SimplifyMulInst (LHS, RHS, Q, MaxRecurse);
3676   case Instruction::FMul:
3677     return SimplifyFMulInst (LHS, RHS, FastMathFlags(), Q, MaxRecurse);
3678   case Instruction::SDiv: return SimplifySDivInst(LHS, RHS, Q, MaxRecurse);
3679   case Instruction::UDiv: return SimplifyUDivInst(LHS, RHS, Q, MaxRecurse);
3680   case Instruction::FDiv:
3681       return SimplifyFDivInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse);
3682   case Instruction::SRem: return SimplifySRemInst(LHS, RHS, Q, MaxRecurse);
3683   case Instruction::URem: return SimplifyURemInst(LHS, RHS, Q, MaxRecurse);
3684   case Instruction::FRem:
3685       return SimplifyFRemInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse);
3686   case Instruction::Shl:
3687     return SimplifyShlInst(LHS, RHS, /*isNSW*/false, /*isNUW*/false,
3688                            Q, MaxRecurse);
3689   case Instruction::LShr:
3690     return SimplifyLShrInst(LHS, RHS, /*isExact*/false, Q, MaxRecurse);
3691   case Instruction::AShr:
3692     return SimplifyAShrInst(LHS, RHS, /*isExact*/false, Q, MaxRecurse);
3693   case Instruction::And: return SimplifyAndInst(LHS, RHS, Q, MaxRecurse);
3694   case Instruction::Or:  return SimplifyOrInst (LHS, RHS, Q, MaxRecurse);
3695   case Instruction::Xor: return SimplifyXorInst(LHS, RHS, Q, MaxRecurse);
3696   default:
3697     if (Constant *CLHS = dyn_cast<Constant>(LHS))
3698       if (Constant *CRHS = dyn_cast<Constant>(RHS))
3699         return ConstantFoldBinaryOpOperands(Opcode, CLHS, CRHS, Q.DL);
3700 
3701     // If the operation is associative, try some generic simplifications.
3702     if (Instruction::isAssociative(Opcode))
3703       if (Value *V = SimplifyAssociativeBinOp(Opcode, LHS, RHS, Q, MaxRecurse))
3704         return V;
3705 
3706     // If the operation is with the result of a select instruction check whether
3707     // operating on either branch of the select always yields the same value.
3708     if (isa<SelectInst>(LHS) || isa<SelectInst>(RHS))
3709       if (Value *V = ThreadBinOpOverSelect(Opcode, LHS, RHS, Q, MaxRecurse))
3710         return V;
3711 
3712     // If the operation is with the result of a phi instruction, check whether
3713     // operating on all incoming values of the phi always yields the same value.
3714     if (isa<PHINode>(LHS) || isa<PHINode>(RHS))
3715       if (Value *V = ThreadBinOpOverPHI(Opcode, LHS, RHS, Q, MaxRecurse))
3716         return V;
3717 
3718     return nullptr;
3719   }
3720 }
3721 
3722 /// Given operands for a BinaryOperator, see if we can fold the result.
3723 /// If not, this returns null.
3724 /// In contrast to SimplifyBinOp, try to use FastMathFlag when folding the
3725 /// result. In case we don't need FastMathFlags, simply fall to SimplifyBinOp.
3726 static Value *SimplifyFPBinOp(unsigned Opcode, Value *LHS, Value *RHS,
3727                               const FastMathFlags &FMF, const Query &Q,
3728                               unsigned MaxRecurse) {
3729   switch (Opcode) {
3730   case Instruction::FAdd:
3731     return SimplifyFAddInst(LHS, RHS, FMF, Q, MaxRecurse);
3732   case Instruction::FSub:
3733     return SimplifyFSubInst(LHS, RHS, FMF, Q, MaxRecurse);
3734   case Instruction::FMul:
3735     return SimplifyFMulInst(LHS, RHS, FMF, Q, MaxRecurse);
3736   default:
3737     return SimplifyBinOp(Opcode, LHS, RHS, Q, MaxRecurse);
3738   }
3739 }
3740 
3741 Value *llvm::SimplifyBinOp(unsigned Opcode, Value *LHS, Value *RHS,
3742                            const DataLayout &DL, const TargetLibraryInfo *TLI,
3743                            const DominatorTree *DT, AssumptionCache *AC,
3744                            const Instruction *CxtI) {
3745   return ::SimplifyBinOp(Opcode, LHS, RHS, Query(DL, TLI, DT, AC, CxtI),
3746                          RecursionLimit);
3747 }
3748 
3749 Value *llvm::SimplifyFPBinOp(unsigned Opcode, Value *LHS, Value *RHS,
3750                              const FastMathFlags &FMF, const DataLayout &DL,
3751                              const TargetLibraryInfo *TLI,
3752                              const DominatorTree *DT, AssumptionCache *AC,
3753                              const Instruction *CxtI) {
3754   return ::SimplifyFPBinOp(Opcode, LHS, RHS, FMF, Query(DL, TLI, DT, AC, CxtI),
3755                            RecursionLimit);
3756 }
3757 
3758 /// Given operands for a CmpInst, see if we can fold the result.
3759 static Value *SimplifyCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
3760                               const Query &Q, unsigned MaxRecurse) {
3761   if (CmpInst::isIntPredicate((CmpInst::Predicate)Predicate))
3762     return SimplifyICmpInst(Predicate, LHS, RHS, Q, MaxRecurse);
3763   return SimplifyFCmpInst(Predicate, LHS, RHS, FastMathFlags(), Q, MaxRecurse);
3764 }
3765 
3766 Value *llvm::SimplifyCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
3767                              const DataLayout &DL, const TargetLibraryInfo *TLI,
3768                              const DominatorTree *DT, AssumptionCache *AC,
3769                              const Instruction *CxtI) {
3770   return ::SimplifyCmpInst(Predicate, LHS, RHS, Query(DL, TLI, DT, AC, CxtI),
3771                            RecursionLimit);
3772 }
3773 
3774 static bool IsIdempotent(Intrinsic::ID ID) {
3775   switch (ID) {
3776   default: return false;
3777 
3778   // Unary idempotent: f(f(x)) = f(x)
3779   case Intrinsic::fabs:
3780   case Intrinsic::floor:
3781   case Intrinsic::ceil:
3782   case Intrinsic::trunc:
3783   case Intrinsic::rint:
3784   case Intrinsic::nearbyint:
3785   case Intrinsic::round:
3786     return true;
3787   }
3788 }
3789 
3790 template <typename IterTy>
3791 static Value *SimplifyIntrinsic(Function *F, IterTy ArgBegin, IterTy ArgEnd,
3792                                 const Query &Q, unsigned MaxRecurse) {
3793   Intrinsic::ID IID = F->getIntrinsicID();
3794   unsigned NumOperands = std::distance(ArgBegin, ArgEnd);
3795   Type *ReturnType = F->getReturnType();
3796 
3797   // Binary Ops
3798   if (NumOperands == 2) {
3799     Value *LHS = *ArgBegin;
3800     Value *RHS = *(ArgBegin + 1);
3801     if (IID == Intrinsic::usub_with_overflow ||
3802         IID == Intrinsic::ssub_with_overflow) {
3803       // X - X -> { 0, false }
3804       if (LHS == RHS)
3805         return Constant::getNullValue(ReturnType);
3806 
3807       // X - undef -> undef
3808       // undef - X -> undef
3809       if (isa<UndefValue>(LHS) || isa<UndefValue>(RHS))
3810         return UndefValue::get(ReturnType);
3811     }
3812 
3813     if (IID == Intrinsic::uadd_with_overflow ||
3814         IID == Intrinsic::sadd_with_overflow) {
3815       // X + undef -> undef
3816       if (isa<UndefValue>(RHS))
3817         return UndefValue::get(ReturnType);
3818     }
3819 
3820     if (IID == Intrinsic::umul_with_overflow ||
3821         IID == Intrinsic::smul_with_overflow) {
3822       // X * 0 -> { 0, false }
3823       if (match(RHS, m_Zero()))
3824         return Constant::getNullValue(ReturnType);
3825 
3826       // X * undef -> { 0, false }
3827       if (match(RHS, m_Undef()))
3828         return Constant::getNullValue(ReturnType);
3829     }
3830   }
3831 
3832   // Perform idempotent optimizations
3833   if (!IsIdempotent(IID))
3834     return nullptr;
3835 
3836   // Unary Ops
3837   if (NumOperands == 1)
3838     if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(*ArgBegin))
3839       if (II->getIntrinsicID() == IID)
3840         return II;
3841 
3842   return nullptr;
3843 }
3844 
3845 template <typename IterTy>
3846 static Value *SimplifyCall(Value *V, IterTy ArgBegin, IterTy ArgEnd,
3847                            const Query &Q, unsigned MaxRecurse) {
3848   Type *Ty = V->getType();
3849   if (PointerType *PTy = dyn_cast<PointerType>(Ty))
3850     Ty = PTy->getElementType();
3851   FunctionType *FTy = cast<FunctionType>(Ty);
3852 
3853   // call undef -> undef
3854   if (isa<UndefValue>(V))
3855     return UndefValue::get(FTy->getReturnType());
3856 
3857   Function *F = dyn_cast<Function>(V);
3858   if (!F)
3859     return nullptr;
3860 
3861   if (F->isIntrinsic())
3862     if (Value *Ret = SimplifyIntrinsic(F, ArgBegin, ArgEnd, Q, MaxRecurse))
3863       return Ret;
3864 
3865   if (!canConstantFoldCallTo(F))
3866     return nullptr;
3867 
3868   SmallVector<Constant *, 4> ConstantArgs;
3869   ConstantArgs.reserve(ArgEnd - ArgBegin);
3870   for (IterTy I = ArgBegin, E = ArgEnd; I != E; ++I) {
3871     Constant *C = dyn_cast<Constant>(*I);
3872     if (!C)
3873       return nullptr;
3874     ConstantArgs.push_back(C);
3875   }
3876 
3877   return ConstantFoldCall(F, ConstantArgs, Q.TLI);
3878 }
3879 
3880 Value *llvm::SimplifyCall(Value *V, User::op_iterator ArgBegin,
3881                           User::op_iterator ArgEnd, const DataLayout &DL,
3882                           const TargetLibraryInfo *TLI, const DominatorTree *DT,
3883                           AssumptionCache *AC, const Instruction *CxtI) {
3884   return ::SimplifyCall(V, ArgBegin, ArgEnd, Query(DL, TLI, DT, AC, CxtI),
3885                         RecursionLimit);
3886 }
3887 
3888 Value *llvm::SimplifyCall(Value *V, ArrayRef<Value *> Args,
3889                           const DataLayout &DL, const TargetLibraryInfo *TLI,
3890                           const DominatorTree *DT, AssumptionCache *AC,
3891                           const Instruction *CxtI) {
3892   return ::SimplifyCall(V, Args.begin(), Args.end(),
3893                         Query(DL, TLI, DT, AC, CxtI), RecursionLimit);
3894 }
3895 
3896 /// See if we can compute a simplified version of this instruction.
3897 /// If not, this returns null.
3898 Value *llvm::SimplifyInstruction(Instruction *I, const DataLayout &DL,
3899                                  const TargetLibraryInfo *TLI,
3900                                  const DominatorTree *DT, AssumptionCache *AC) {
3901   Value *Result;
3902 
3903   switch (I->getOpcode()) {
3904   default:
3905     Result = ConstantFoldInstruction(I, DL, TLI);
3906     break;
3907   case Instruction::FAdd:
3908     Result = SimplifyFAddInst(I->getOperand(0), I->getOperand(1),
3909                               I->getFastMathFlags(), DL, TLI, DT, AC, I);
3910     break;
3911   case Instruction::Add:
3912     Result = SimplifyAddInst(I->getOperand(0), I->getOperand(1),
3913                              cast<BinaryOperator>(I)->hasNoSignedWrap(),
3914                              cast<BinaryOperator>(I)->hasNoUnsignedWrap(), DL,
3915                              TLI, DT, AC, I);
3916     break;
3917   case Instruction::FSub:
3918     Result = SimplifyFSubInst(I->getOperand(0), I->getOperand(1),
3919                               I->getFastMathFlags(), DL, TLI, DT, AC, I);
3920     break;
3921   case Instruction::Sub:
3922     Result = SimplifySubInst(I->getOperand(0), I->getOperand(1),
3923                              cast<BinaryOperator>(I)->hasNoSignedWrap(),
3924                              cast<BinaryOperator>(I)->hasNoUnsignedWrap(), DL,
3925                              TLI, DT, AC, I);
3926     break;
3927   case Instruction::FMul:
3928     Result = SimplifyFMulInst(I->getOperand(0), I->getOperand(1),
3929                               I->getFastMathFlags(), DL, TLI, DT, AC, I);
3930     break;
3931   case Instruction::Mul:
3932     Result =
3933         SimplifyMulInst(I->getOperand(0), I->getOperand(1), DL, TLI, DT, AC, I);
3934     break;
3935   case Instruction::SDiv:
3936     Result = SimplifySDivInst(I->getOperand(0), I->getOperand(1), DL, TLI, DT,
3937                               AC, I);
3938     break;
3939   case Instruction::UDiv:
3940     Result = SimplifyUDivInst(I->getOperand(0), I->getOperand(1), DL, TLI, DT,
3941                               AC, I);
3942     break;
3943   case Instruction::FDiv:
3944     Result = SimplifyFDivInst(I->getOperand(0), I->getOperand(1),
3945                               I->getFastMathFlags(), DL, TLI, DT, AC, I);
3946     break;
3947   case Instruction::SRem:
3948     Result = SimplifySRemInst(I->getOperand(0), I->getOperand(1), DL, TLI, DT,
3949                               AC, I);
3950     break;
3951   case Instruction::URem:
3952     Result = SimplifyURemInst(I->getOperand(0), I->getOperand(1), DL, TLI, DT,
3953                               AC, I);
3954     break;
3955   case Instruction::FRem:
3956     Result = SimplifyFRemInst(I->getOperand(0), I->getOperand(1),
3957                               I->getFastMathFlags(), DL, TLI, DT, AC, I);
3958     break;
3959   case Instruction::Shl:
3960     Result = SimplifyShlInst(I->getOperand(0), I->getOperand(1),
3961                              cast<BinaryOperator>(I)->hasNoSignedWrap(),
3962                              cast<BinaryOperator>(I)->hasNoUnsignedWrap(), DL,
3963                              TLI, DT, AC, I);
3964     break;
3965   case Instruction::LShr:
3966     Result = SimplifyLShrInst(I->getOperand(0), I->getOperand(1),
3967                               cast<BinaryOperator>(I)->isExact(), DL, TLI, DT,
3968                               AC, I);
3969     break;
3970   case Instruction::AShr:
3971     Result = SimplifyAShrInst(I->getOperand(0), I->getOperand(1),
3972                               cast<BinaryOperator>(I)->isExact(), DL, TLI, DT,
3973                               AC, I);
3974     break;
3975   case Instruction::And:
3976     Result =
3977         SimplifyAndInst(I->getOperand(0), I->getOperand(1), DL, TLI, DT, AC, I);
3978     break;
3979   case Instruction::Or:
3980     Result =
3981         SimplifyOrInst(I->getOperand(0), I->getOperand(1), DL, TLI, DT, AC, I);
3982     break;
3983   case Instruction::Xor:
3984     Result =
3985         SimplifyXorInst(I->getOperand(0), I->getOperand(1), DL, TLI, DT, AC, I);
3986     break;
3987   case Instruction::ICmp:
3988     Result =
3989         SimplifyICmpInst(cast<ICmpInst>(I)->getPredicate(), I->getOperand(0),
3990                          I->getOperand(1), DL, TLI, DT, AC, I);
3991     break;
3992   case Instruction::FCmp:
3993     Result = SimplifyFCmpInst(cast<FCmpInst>(I)->getPredicate(),
3994                               I->getOperand(0), I->getOperand(1),
3995                               I->getFastMathFlags(), DL, TLI, DT, AC, I);
3996     break;
3997   case Instruction::Select:
3998     Result = SimplifySelectInst(I->getOperand(0), I->getOperand(1),
3999                                 I->getOperand(2), DL, TLI, DT, AC, I);
4000     break;
4001   case Instruction::GetElementPtr: {
4002     SmallVector<Value*, 8> Ops(I->op_begin(), I->op_end());
4003     Result = SimplifyGEPInst(cast<GetElementPtrInst>(I)->getSourceElementType(),
4004                              Ops, DL, TLI, DT, AC, I);
4005     break;
4006   }
4007   case Instruction::InsertValue: {
4008     InsertValueInst *IV = cast<InsertValueInst>(I);
4009     Result = SimplifyInsertValueInst(IV->getAggregateOperand(),
4010                                      IV->getInsertedValueOperand(),
4011                                      IV->getIndices(), DL, TLI, DT, AC, I);
4012     break;
4013   }
4014   case Instruction::ExtractValue: {
4015     auto *EVI = cast<ExtractValueInst>(I);
4016     Result = SimplifyExtractValueInst(EVI->getAggregateOperand(),
4017                                       EVI->getIndices(), DL, TLI, DT, AC, I);
4018     break;
4019   }
4020   case Instruction::ExtractElement: {
4021     auto *EEI = cast<ExtractElementInst>(I);
4022     Result = SimplifyExtractElementInst(
4023         EEI->getVectorOperand(), EEI->getIndexOperand(), DL, TLI, DT, AC, I);
4024     break;
4025   }
4026   case Instruction::PHI:
4027     Result = SimplifyPHINode(cast<PHINode>(I), Query(DL, TLI, DT, AC, I));
4028     break;
4029   case Instruction::Call: {
4030     CallSite CS(cast<CallInst>(I));
4031     Result = SimplifyCall(CS.getCalledValue(), CS.arg_begin(), CS.arg_end(), DL,
4032                           TLI, DT, AC, I);
4033     break;
4034   }
4035   case Instruction::Trunc:
4036     Result =
4037         SimplifyTruncInst(I->getOperand(0), I->getType(), DL, TLI, DT, AC, I);
4038     break;
4039   }
4040 
4041   // In general, it is possible for computeKnownBits to determine all bits in a
4042   // value even when the operands are not all constants.
4043   if (!Result && I->getType()->isIntegerTy()) {
4044     unsigned BitWidth = I->getType()->getScalarSizeInBits();
4045     APInt KnownZero(BitWidth, 0);
4046     APInt KnownOne(BitWidth, 0);
4047     computeKnownBits(I, KnownZero, KnownOne, DL, /*Depth*/0, AC, I, DT);
4048     if ((KnownZero | KnownOne).isAllOnesValue())
4049       Result = ConstantInt::get(I->getContext(), KnownOne);
4050   }
4051 
4052   /// If called on unreachable code, the above logic may report that the
4053   /// instruction simplified to itself.  Make life easier for users by
4054   /// detecting that case here, returning a safe value instead.
4055   return Result == I ? UndefValue::get(I->getType()) : Result;
4056 }
4057 
4058 /// \brief Implementation of recursive simplification through an instruction's
4059 /// uses.
4060 ///
4061 /// This is the common implementation of the recursive simplification routines.
4062 /// If we have a pre-simplified value in 'SimpleV', that is forcibly used to
4063 /// replace the instruction 'I'. Otherwise, we simply add 'I' to the list of
4064 /// instructions to process and attempt to simplify it using
4065 /// InstructionSimplify.
4066 ///
4067 /// This routine returns 'true' only when *it* simplifies something. The passed
4068 /// in simplified value does not count toward this.
4069 static bool replaceAndRecursivelySimplifyImpl(Instruction *I, Value *SimpleV,
4070                                               const TargetLibraryInfo *TLI,
4071                                               const DominatorTree *DT,
4072                                               AssumptionCache *AC) {
4073   bool Simplified = false;
4074   SmallSetVector<Instruction *, 8> Worklist;
4075   const DataLayout &DL = I->getModule()->getDataLayout();
4076 
4077   // If we have an explicit value to collapse to, do that round of the
4078   // simplification loop by hand initially.
4079   if (SimpleV) {
4080     for (User *U : I->users())
4081       if (U != I)
4082         Worklist.insert(cast<Instruction>(U));
4083 
4084     // Replace the instruction with its simplified value.
4085     I->replaceAllUsesWith(SimpleV);
4086 
4087     // Gracefully handle edge cases where the instruction is not wired into any
4088     // parent block.
4089     if (I->getParent())
4090       I->eraseFromParent();
4091   } else {
4092     Worklist.insert(I);
4093   }
4094 
4095   // Note that we must test the size on each iteration, the worklist can grow.
4096   for (unsigned Idx = 0; Idx != Worklist.size(); ++Idx) {
4097     I = Worklist[Idx];
4098 
4099     // See if this instruction simplifies.
4100     SimpleV = SimplifyInstruction(I, DL, TLI, DT, AC);
4101     if (!SimpleV)
4102       continue;
4103 
4104     Simplified = true;
4105 
4106     // Stash away all the uses of the old instruction so we can check them for
4107     // recursive simplifications after a RAUW. This is cheaper than checking all
4108     // uses of To on the recursive step in most cases.
4109     for (User *U : I->users())
4110       Worklist.insert(cast<Instruction>(U));
4111 
4112     // Replace the instruction with its simplified value.
4113     I->replaceAllUsesWith(SimpleV);
4114 
4115     // Gracefully handle edge cases where the instruction is not wired into any
4116     // parent block.
4117     if (I->getParent())
4118       I->eraseFromParent();
4119   }
4120   return Simplified;
4121 }
4122 
4123 bool llvm::recursivelySimplifyInstruction(Instruction *I,
4124                                           const TargetLibraryInfo *TLI,
4125                                           const DominatorTree *DT,
4126                                           AssumptionCache *AC) {
4127   return replaceAndRecursivelySimplifyImpl(I, nullptr, TLI, DT, AC);
4128 }
4129 
4130 bool llvm::replaceAndRecursivelySimplify(Instruction *I, Value *SimpleV,
4131                                          const TargetLibraryInfo *TLI,
4132                                          const DominatorTree *DT,
4133                                          AssumptionCache *AC) {
4134   assert(I != SimpleV && "replaceAndRecursivelySimplify(X,X) is not valid!");
4135   assert(SimpleV && "Must provide a simplified value.");
4136   return replaceAndRecursivelySimplifyImpl(I, SimpleV, TLI, DT, AC);
4137 }
4138