1 //===- InstructionSimplify.cpp - Fold instruction operands ----------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file implements routines for folding instructions into simpler forms
10 // that do not require creating new instructions.  This does constant folding
11 // ("add i32 1, 1" -> "2") but can also handle non-constant operands, either
12 // returning a constant ("and i32 %x, 0" -> "0") or an already existing value
13 // ("and i32 %x, %x" -> "%x").  All operands are assumed to have already been
14 // simplified: This is usually true and assuming it simplifies the logic (if
15 // they have not been simplified then results are correct but maybe suboptimal).
16 //
17 //===----------------------------------------------------------------------===//
18 
19 #include "llvm/Analysis/InstructionSimplify.h"
20 #include "llvm/ADT/SetVector.h"
21 #include "llvm/ADT/Statistic.h"
22 #include "llvm/Analysis/AliasAnalysis.h"
23 #include "llvm/Analysis/AssumptionCache.h"
24 #include "llvm/Analysis/CaptureTracking.h"
25 #include "llvm/Analysis/CmpInstAnalysis.h"
26 #include "llvm/Analysis/ConstantFolding.h"
27 #include "llvm/Analysis/LoopAnalysisManager.h"
28 #include "llvm/Analysis/MemoryBuiltins.h"
29 #include "llvm/Analysis/ValueTracking.h"
30 #include "llvm/Analysis/VectorUtils.h"
31 #include "llvm/IR/ConstantRange.h"
32 #include "llvm/IR/DataLayout.h"
33 #include "llvm/IR/Dominators.h"
34 #include "llvm/IR/GetElementPtrTypeIterator.h"
35 #include "llvm/IR/GlobalAlias.h"
36 #include "llvm/IR/Operator.h"
37 #include "llvm/IR/PatternMatch.h"
38 #include "llvm/IR/ValueHandle.h"
39 #include "llvm/Support/KnownBits.h"
40 #include <algorithm>
41 using namespace llvm;
42 using namespace llvm::PatternMatch;
43 
44 #define DEBUG_TYPE "instsimplify"
45 
46 enum { RecursionLimit = 3 };
47 
48 STATISTIC(NumExpand,  "Number of expansions");
49 STATISTIC(NumReassoc, "Number of reassociations");
50 
51 static Value *SimplifyAndInst(Value *, Value *, const SimplifyQuery &, unsigned);
52 static Value *SimplifyBinOp(unsigned, Value *, Value *, const SimplifyQuery &,
53                             unsigned);
54 static Value *SimplifyFPBinOp(unsigned, Value *, Value *, const FastMathFlags &,
55                               const SimplifyQuery &, unsigned);
56 static Value *SimplifyCmpInst(unsigned, Value *, Value *, const SimplifyQuery &,
57                               unsigned);
58 static Value *SimplifyICmpInst(unsigned Predicate, Value *LHS, Value *RHS,
59                                const SimplifyQuery &Q, unsigned MaxRecurse);
60 static Value *SimplifyOrInst(Value *, Value *, const SimplifyQuery &, unsigned);
61 static Value *SimplifyXorInst(Value *, Value *, const SimplifyQuery &, unsigned);
62 static Value *SimplifyCastInst(unsigned, Value *, Type *,
63                                const SimplifyQuery &, unsigned);
64 static Value *SimplifyGEPInst(Type *, ArrayRef<Value *>, const SimplifyQuery &,
65                               unsigned);
66 
67 static Value *foldSelectWithBinaryOp(Value *Cond, Value *TrueVal,
68                                      Value *FalseVal) {
69   BinaryOperator::BinaryOps BinOpCode;
70   if (auto *BO = dyn_cast<BinaryOperator>(Cond))
71     BinOpCode = BO->getOpcode();
72   else
73     return nullptr;
74 
75   CmpInst::Predicate ExpectedPred, Pred1, Pred2;
76   if (BinOpCode == BinaryOperator::Or) {
77     ExpectedPred = ICmpInst::ICMP_NE;
78   } else if (BinOpCode == BinaryOperator::And) {
79     ExpectedPred = ICmpInst::ICMP_EQ;
80   } else
81     return nullptr;
82 
83   // %A = icmp eq %TV, %FV
84   // %B = icmp eq %X, %Y (and one of these is a select operand)
85   // %C = and %A, %B
86   // %D = select %C, %TV, %FV
87   // -->
88   // %FV
89 
90   // %A = icmp ne %TV, %FV
91   // %B = icmp ne %X, %Y (and one of these is a select operand)
92   // %C = or %A, %B
93   // %D = select %C, %TV, %FV
94   // -->
95   // %TV
96   Value *X, *Y;
97   if (!match(Cond, m_c_BinOp(m_c_ICmp(Pred1, m_Specific(TrueVal),
98                                       m_Specific(FalseVal)),
99                              m_ICmp(Pred2, m_Value(X), m_Value(Y)))) ||
100       Pred1 != Pred2 || Pred1 != ExpectedPred)
101     return nullptr;
102 
103   if (X == TrueVal || X == FalseVal || Y == TrueVal || Y == FalseVal)
104     return BinOpCode == BinaryOperator::Or ? TrueVal : FalseVal;
105 
106   return nullptr;
107 }
108 
109 /// For a boolean type or a vector of boolean type, return false or a vector
110 /// with every element false.
111 static Constant *getFalse(Type *Ty) {
112   return ConstantInt::getFalse(Ty);
113 }
114 
115 /// For a boolean type or a vector of boolean type, return true or a vector
116 /// with every element true.
117 static Constant *getTrue(Type *Ty) {
118   return ConstantInt::getTrue(Ty);
119 }
120 
121 /// isSameCompare - Is V equivalent to the comparison "LHS Pred RHS"?
122 static bool isSameCompare(Value *V, CmpInst::Predicate Pred, Value *LHS,
123                           Value *RHS) {
124   CmpInst *Cmp = dyn_cast<CmpInst>(V);
125   if (!Cmp)
126     return false;
127   CmpInst::Predicate CPred = Cmp->getPredicate();
128   Value *CLHS = Cmp->getOperand(0), *CRHS = Cmp->getOperand(1);
129   if (CPred == Pred && CLHS == LHS && CRHS == RHS)
130     return true;
131   return CPred == CmpInst::getSwappedPredicate(Pred) && CLHS == RHS &&
132     CRHS == LHS;
133 }
134 
135 /// Does the given value dominate the specified phi node?
136 static bool valueDominatesPHI(Value *V, PHINode *P, const DominatorTree *DT) {
137   Instruction *I = dyn_cast<Instruction>(V);
138   if (!I)
139     // Arguments and constants dominate all instructions.
140     return true;
141 
142   // If we are processing instructions (and/or basic blocks) that have not been
143   // fully added to a function, the parent nodes may still be null. Simply
144   // return the conservative answer in these cases.
145   if (!I->getParent() || !P->getParent() || !I->getFunction())
146     return false;
147 
148   // If we have a DominatorTree then do a precise test.
149   if (DT)
150     return DT->dominates(I, P);
151 
152   // Otherwise, if the instruction is in the entry block and is not an invoke,
153   // then it obviously dominates all phi nodes.
154   if (I->getParent() == &I->getFunction()->getEntryBlock() &&
155       !isa<InvokeInst>(I))
156     return true;
157 
158   return false;
159 }
160 
161 /// Simplify "A op (B op' C)" by distributing op over op', turning it into
162 /// "(A op B) op' (A op C)".  Here "op" is given by Opcode and "op'" is
163 /// given by OpcodeToExpand, while "A" corresponds to LHS and "B op' C" to RHS.
164 /// Also performs the transform "(A op' B) op C" -> "(A op C) op' (B op C)".
165 /// Returns the simplified value, or null if no simplification was performed.
166 static Value *ExpandBinOp(Instruction::BinaryOps Opcode, Value *LHS, Value *RHS,
167                           Instruction::BinaryOps OpcodeToExpand,
168                           const SimplifyQuery &Q, unsigned MaxRecurse) {
169   // Recursion is always used, so bail out at once if we already hit the limit.
170   if (!MaxRecurse--)
171     return nullptr;
172 
173   // Check whether the expression has the form "(A op' B) op C".
174   if (BinaryOperator *Op0 = dyn_cast<BinaryOperator>(LHS))
175     if (Op0->getOpcode() == OpcodeToExpand) {
176       // It does!  Try turning it into "(A op C) op' (B op C)".
177       Value *A = Op0->getOperand(0), *B = Op0->getOperand(1), *C = RHS;
178       // Do "A op C" and "B op C" both simplify?
179       if (Value *L = SimplifyBinOp(Opcode, A, C, Q, MaxRecurse))
180         if (Value *R = SimplifyBinOp(Opcode, B, C, Q, MaxRecurse)) {
181           // They do! Return "L op' R" if it simplifies or is already available.
182           // If "L op' R" equals "A op' B" then "L op' R" is just the LHS.
183           if ((L == A && R == B) || (Instruction::isCommutative(OpcodeToExpand)
184                                      && L == B && R == A)) {
185             ++NumExpand;
186             return LHS;
187           }
188           // Otherwise return "L op' R" if it simplifies.
189           if (Value *V = SimplifyBinOp(OpcodeToExpand, L, R, Q, MaxRecurse)) {
190             ++NumExpand;
191             return V;
192           }
193         }
194     }
195 
196   // Check whether the expression has the form "A op (B op' C)".
197   if (BinaryOperator *Op1 = dyn_cast<BinaryOperator>(RHS))
198     if (Op1->getOpcode() == OpcodeToExpand) {
199       // It does!  Try turning it into "(A op B) op' (A op C)".
200       Value *A = LHS, *B = Op1->getOperand(0), *C = Op1->getOperand(1);
201       // Do "A op B" and "A op C" both simplify?
202       if (Value *L = SimplifyBinOp(Opcode, A, B, Q, MaxRecurse))
203         if (Value *R = SimplifyBinOp(Opcode, A, C, Q, MaxRecurse)) {
204           // They do! Return "L op' R" if it simplifies or is already available.
205           // If "L op' R" equals "B op' C" then "L op' R" is just the RHS.
206           if ((L == B && R == C) || (Instruction::isCommutative(OpcodeToExpand)
207                                      && L == C && R == B)) {
208             ++NumExpand;
209             return RHS;
210           }
211           // Otherwise return "L op' R" if it simplifies.
212           if (Value *V = SimplifyBinOp(OpcodeToExpand, L, R, Q, MaxRecurse)) {
213             ++NumExpand;
214             return V;
215           }
216         }
217     }
218 
219   return nullptr;
220 }
221 
222 /// Generic simplifications for associative binary operations.
223 /// Returns the simpler value, or null if none was found.
224 static Value *SimplifyAssociativeBinOp(Instruction::BinaryOps Opcode,
225                                        Value *LHS, Value *RHS,
226                                        const SimplifyQuery &Q,
227                                        unsigned MaxRecurse) {
228   assert(Instruction::isAssociative(Opcode) && "Not an associative operation!");
229 
230   // Recursion is always used, so bail out at once if we already hit the limit.
231   if (!MaxRecurse--)
232     return nullptr;
233 
234   BinaryOperator *Op0 = dyn_cast<BinaryOperator>(LHS);
235   BinaryOperator *Op1 = dyn_cast<BinaryOperator>(RHS);
236 
237   // Transform: "(A op B) op C" ==> "A op (B op C)" if it simplifies completely.
238   if (Op0 && Op0->getOpcode() == Opcode) {
239     Value *A = Op0->getOperand(0);
240     Value *B = Op0->getOperand(1);
241     Value *C = RHS;
242 
243     // Does "B op C" simplify?
244     if (Value *V = SimplifyBinOp(Opcode, B, C, Q, MaxRecurse)) {
245       // It does!  Return "A op V" if it simplifies or is already available.
246       // If V equals B then "A op V" is just the LHS.
247       if (V == B) return LHS;
248       // Otherwise return "A op V" if it simplifies.
249       if (Value *W = SimplifyBinOp(Opcode, A, V, Q, MaxRecurse)) {
250         ++NumReassoc;
251         return W;
252       }
253     }
254   }
255 
256   // Transform: "A op (B op C)" ==> "(A op B) op C" if it simplifies completely.
257   if (Op1 && Op1->getOpcode() == Opcode) {
258     Value *A = LHS;
259     Value *B = Op1->getOperand(0);
260     Value *C = Op1->getOperand(1);
261 
262     // Does "A op B" simplify?
263     if (Value *V = SimplifyBinOp(Opcode, A, B, Q, MaxRecurse)) {
264       // It does!  Return "V op C" if it simplifies or is already available.
265       // If V equals B then "V op C" is just the RHS.
266       if (V == B) return RHS;
267       // Otherwise return "V op C" if it simplifies.
268       if (Value *W = SimplifyBinOp(Opcode, V, C, Q, MaxRecurse)) {
269         ++NumReassoc;
270         return W;
271       }
272     }
273   }
274 
275   // The remaining transforms require commutativity as well as associativity.
276   if (!Instruction::isCommutative(Opcode))
277     return nullptr;
278 
279   // Transform: "(A op B) op C" ==> "(C op A) op B" if it simplifies completely.
280   if (Op0 && Op0->getOpcode() == Opcode) {
281     Value *A = Op0->getOperand(0);
282     Value *B = Op0->getOperand(1);
283     Value *C = RHS;
284 
285     // Does "C op A" simplify?
286     if (Value *V = SimplifyBinOp(Opcode, C, A, Q, MaxRecurse)) {
287       // It does!  Return "V op B" if it simplifies or is already available.
288       // If V equals A then "V op B" is just the LHS.
289       if (V == A) return LHS;
290       // Otherwise return "V op B" if it simplifies.
291       if (Value *W = SimplifyBinOp(Opcode, V, B, Q, MaxRecurse)) {
292         ++NumReassoc;
293         return W;
294       }
295     }
296   }
297 
298   // Transform: "A op (B op C)" ==> "B op (C op A)" if it simplifies completely.
299   if (Op1 && Op1->getOpcode() == Opcode) {
300     Value *A = LHS;
301     Value *B = Op1->getOperand(0);
302     Value *C = Op1->getOperand(1);
303 
304     // Does "C op A" simplify?
305     if (Value *V = SimplifyBinOp(Opcode, C, A, Q, MaxRecurse)) {
306       // It does!  Return "B op V" if it simplifies or is already available.
307       // If V equals C then "B op V" is just the RHS.
308       if (V == C) return RHS;
309       // Otherwise return "B op V" if it simplifies.
310       if (Value *W = SimplifyBinOp(Opcode, B, V, Q, MaxRecurse)) {
311         ++NumReassoc;
312         return W;
313       }
314     }
315   }
316 
317   return nullptr;
318 }
319 
320 /// In the case of a binary operation with a select instruction as an operand,
321 /// try to simplify the binop by seeing whether evaluating it on both branches
322 /// of the select results in the same value. Returns the common value if so,
323 /// otherwise returns null.
324 static Value *ThreadBinOpOverSelect(Instruction::BinaryOps Opcode, Value *LHS,
325                                     Value *RHS, const SimplifyQuery &Q,
326                                     unsigned MaxRecurse) {
327   // Recursion is always used, so bail out at once if we already hit the limit.
328   if (!MaxRecurse--)
329     return nullptr;
330 
331   SelectInst *SI;
332   if (isa<SelectInst>(LHS)) {
333     SI = cast<SelectInst>(LHS);
334   } else {
335     assert(isa<SelectInst>(RHS) && "No select instruction operand!");
336     SI = cast<SelectInst>(RHS);
337   }
338 
339   // Evaluate the BinOp on the true and false branches of the select.
340   Value *TV;
341   Value *FV;
342   if (SI == LHS) {
343     TV = SimplifyBinOp(Opcode, SI->getTrueValue(), RHS, Q, MaxRecurse);
344     FV = SimplifyBinOp(Opcode, SI->getFalseValue(), RHS, Q, MaxRecurse);
345   } else {
346     TV = SimplifyBinOp(Opcode, LHS, SI->getTrueValue(), Q, MaxRecurse);
347     FV = SimplifyBinOp(Opcode, LHS, SI->getFalseValue(), Q, MaxRecurse);
348   }
349 
350   // If they simplified to the same value, then return the common value.
351   // If they both failed to simplify then return null.
352   if (TV == FV)
353     return TV;
354 
355   // If one branch simplified to undef, return the other one.
356   if (TV && isa<UndefValue>(TV))
357     return FV;
358   if (FV && isa<UndefValue>(FV))
359     return TV;
360 
361   // If applying the operation did not change the true and false select values,
362   // then the result of the binop is the select itself.
363   if (TV == SI->getTrueValue() && FV == SI->getFalseValue())
364     return SI;
365 
366   // If one branch simplified and the other did not, and the simplified
367   // value is equal to the unsimplified one, return the simplified value.
368   // For example, select (cond, X, X & Z) & Z -> X & Z.
369   if ((FV && !TV) || (TV && !FV)) {
370     // Check that the simplified value has the form "X op Y" where "op" is the
371     // same as the original operation.
372     Instruction *Simplified = dyn_cast<Instruction>(FV ? FV : TV);
373     if (Simplified && Simplified->getOpcode() == unsigned(Opcode)) {
374       // The value that didn't simplify is "UnsimplifiedLHS op UnsimplifiedRHS".
375       // We already know that "op" is the same as for the simplified value.  See
376       // if the operands match too.  If so, return the simplified value.
377       Value *UnsimplifiedBranch = FV ? SI->getTrueValue() : SI->getFalseValue();
378       Value *UnsimplifiedLHS = SI == LHS ? UnsimplifiedBranch : LHS;
379       Value *UnsimplifiedRHS = SI == LHS ? RHS : UnsimplifiedBranch;
380       if (Simplified->getOperand(0) == UnsimplifiedLHS &&
381           Simplified->getOperand(1) == UnsimplifiedRHS)
382         return Simplified;
383       if (Simplified->isCommutative() &&
384           Simplified->getOperand(1) == UnsimplifiedLHS &&
385           Simplified->getOperand(0) == UnsimplifiedRHS)
386         return Simplified;
387     }
388   }
389 
390   return nullptr;
391 }
392 
393 /// In the case of a comparison with a select instruction, try to simplify the
394 /// comparison by seeing whether both branches of the select result in the same
395 /// value. Returns the common value if so, otherwise returns null.
396 static Value *ThreadCmpOverSelect(CmpInst::Predicate Pred, Value *LHS,
397                                   Value *RHS, const SimplifyQuery &Q,
398                                   unsigned MaxRecurse) {
399   // Recursion is always used, so bail out at once if we already hit the limit.
400   if (!MaxRecurse--)
401     return nullptr;
402 
403   // Make sure the select is on the LHS.
404   if (!isa<SelectInst>(LHS)) {
405     std::swap(LHS, RHS);
406     Pred = CmpInst::getSwappedPredicate(Pred);
407   }
408   assert(isa<SelectInst>(LHS) && "Not comparing with a select instruction!");
409   SelectInst *SI = cast<SelectInst>(LHS);
410   Value *Cond = SI->getCondition();
411   Value *TV = SI->getTrueValue();
412   Value *FV = SI->getFalseValue();
413 
414   // Now that we have "cmp select(Cond, TV, FV), RHS", analyse it.
415   // Does "cmp TV, RHS" simplify?
416   Value *TCmp = SimplifyCmpInst(Pred, TV, RHS, Q, MaxRecurse);
417   if (TCmp == Cond) {
418     // It not only simplified, it simplified to the select condition.  Replace
419     // it with 'true'.
420     TCmp = getTrue(Cond->getType());
421   } else if (!TCmp) {
422     // It didn't simplify.  However if "cmp TV, RHS" is equal to the select
423     // condition then we can replace it with 'true'.  Otherwise give up.
424     if (!isSameCompare(Cond, Pred, TV, RHS))
425       return nullptr;
426     TCmp = getTrue(Cond->getType());
427   }
428 
429   // Does "cmp FV, RHS" simplify?
430   Value *FCmp = SimplifyCmpInst(Pred, FV, RHS, Q, MaxRecurse);
431   if (FCmp == Cond) {
432     // It not only simplified, it simplified to the select condition.  Replace
433     // it with 'false'.
434     FCmp = getFalse(Cond->getType());
435   } else if (!FCmp) {
436     // It didn't simplify.  However if "cmp FV, RHS" is equal to the select
437     // condition then we can replace it with 'false'.  Otherwise give up.
438     if (!isSameCompare(Cond, Pred, FV, RHS))
439       return nullptr;
440     FCmp = getFalse(Cond->getType());
441   }
442 
443   // If both sides simplified to the same value, then use it as the result of
444   // the original comparison.
445   if (TCmp == FCmp)
446     return TCmp;
447 
448   // The remaining cases only make sense if the select condition has the same
449   // type as the result of the comparison, so bail out if this is not so.
450   if (Cond->getType()->isVectorTy() != RHS->getType()->isVectorTy())
451     return nullptr;
452   // If the false value simplified to false, then the result of the compare
453   // is equal to "Cond && TCmp".  This also catches the case when the false
454   // value simplified to false and the true value to true, returning "Cond".
455   if (match(FCmp, m_Zero()))
456     if (Value *V = SimplifyAndInst(Cond, TCmp, Q, MaxRecurse))
457       return V;
458   // If the true value simplified to true, then the result of the compare
459   // is equal to "Cond || FCmp".
460   if (match(TCmp, m_One()))
461     if (Value *V = SimplifyOrInst(Cond, FCmp, Q, MaxRecurse))
462       return V;
463   // Finally, if the false value simplified to true and the true value to
464   // false, then the result of the compare is equal to "!Cond".
465   if (match(FCmp, m_One()) && match(TCmp, m_Zero()))
466     if (Value *V =
467         SimplifyXorInst(Cond, Constant::getAllOnesValue(Cond->getType()),
468                         Q, MaxRecurse))
469       return V;
470 
471   return nullptr;
472 }
473 
474 /// In the case of a binary operation with an operand that is a PHI instruction,
475 /// try to simplify the binop by seeing whether evaluating it on the incoming
476 /// phi values yields the same result for every value. If so returns the common
477 /// value, otherwise returns null.
478 static Value *ThreadBinOpOverPHI(Instruction::BinaryOps Opcode, Value *LHS,
479                                  Value *RHS, const SimplifyQuery &Q,
480                                  unsigned MaxRecurse) {
481   // Recursion is always used, so bail out at once if we already hit the limit.
482   if (!MaxRecurse--)
483     return nullptr;
484 
485   PHINode *PI;
486   if (isa<PHINode>(LHS)) {
487     PI = cast<PHINode>(LHS);
488     // Bail out if RHS and the phi may be mutually interdependent due to a loop.
489     if (!valueDominatesPHI(RHS, PI, Q.DT))
490       return nullptr;
491   } else {
492     assert(isa<PHINode>(RHS) && "No PHI instruction operand!");
493     PI = cast<PHINode>(RHS);
494     // Bail out if LHS and the phi may be mutually interdependent due to a loop.
495     if (!valueDominatesPHI(LHS, PI, Q.DT))
496       return nullptr;
497   }
498 
499   // Evaluate the BinOp on the incoming phi values.
500   Value *CommonValue = nullptr;
501   for (Value *Incoming : PI->incoming_values()) {
502     // If the incoming value is the phi node itself, it can safely be skipped.
503     if (Incoming == PI) continue;
504     Value *V = PI == LHS ?
505       SimplifyBinOp(Opcode, Incoming, RHS, Q, MaxRecurse) :
506       SimplifyBinOp(Opcode, LHS, Incoming, Q, MaxRecurse);
507     // If the operation failed to simplify, or simplified to a different value
508     // to previously, then give up.
509     if (!V || (CommonValue && V != CommonValue))
510       return nullptr;
511     CommonValue = V;
512   }
513 
514   return CommonValue;
515 }
516 
517 /// In the case of a comparison with a PHI instruction, try to simplify the
518 /// comparison by seeing whether comparing with all of the incoming phi values
519 /// yields the same result every time. If so returns the common result,
520 /// otherwise returns null.
521 static Value *ThreadCmpOverPHI(CmpInst::Predicate Pred, Value *LHS, Value *RHS,
522                                const SimplifyQuery &Q, unsigned MaxRecurse) {
523   // Recursion is always used, so bail out at once if we already hit the limit.
524   if (!MaxRecurse--)
525     return nullptr;
526 
527   // Make sure the phi is on the LHS.
528   if (!isa<PHINode>(LHS)) {
529     std::swap(LHS, RHS);
530     Pred = CmpInst::getSwappedPredicate(Pred);
531   }
532   assert(isa<PHINode>(LHS) && "Not comparing with a phi instruction!");
533   PHINode *PI = cast<PHINode>(LHS);
534 
535   // Bail out if RHS and the phi may be mutually interdependent due to a loop.
536   if (!valueDominatesPHI(RHS, PI, Q.DT))
537     return nullptr;
538 
539   // Evaluate the BinOp on the incoming phi values.
540   Value *CommonValue = nullptr;
541   for (Value *Incoming : PI->incoming_values()) {
542     // If the incoming value is the phi node itself, it can safely be skipped.
543     if (Incoming == PI) continue;
544     Value *V = SimplifyCmpInst(Pred, Incoming, RHS, Q, MaxRecurse);
545     // If the operation failed to simplify, or simplified to a different value
546     // to previously, then give up.
547     if (!V || (CommonValue && V != CommonValue))
548       return nullptr;
549     CommonValue = V;
550   }
551 
552   return CommonValue;
553 }
554 
555 static Constant *foldOrCommuteConstant(Instruction::BinaryOps Opcode,
556                                        Value *&Op0, Value *&Op1,
557                                        const SimplifyQuery &Q) {
558   if (auto *CLHS = dyn_cast<Constant>(Op0)) {
559     if (auto *CRHS = dyn_cast<Constant>(Op1))
560       return ConstantFoldBinaryOpOperands(Opcode, CLHS, CRHS, Q.DL);
561 
562     // Canonicalize the constant to the RHS if this is a commutative operation.
563     if (Instruction::isCommutative(Opcode))
564       std::swap(Op0, Op1);
565   }
566   return nullptr;
567 }
568 
569 /// Given operands for an Add, see if we can fold the result.
570 /// If not, this returns null.
571 static Value *SimplifyAddInst(Value *Op0, Value *Op1, bool IsNSW, bool IsNUW,
572                               const SimplifyQuery &Q, unsigned MaxRecurse) {
573   if (Constant *C = foldOrCommuteConstant(Instruction::Add, Op0, Op1, Q))
574     return C;
575 
576   // X + undef -> undef
577   if (match(Op1, m_Undef()))
578     return Op1;
579 
580   // X + 0 -> X
581   if (match(Op1, m_Zero()))
582     return Op0;
583 
584   // If two operands are negative, return 0.
585   if (isKnownNegation(Op0, Op1))
586     return Constant::getNullValue(Op0->getType());
587 
588   // X + (Y - X) -> Y
589   // (Y - X) + X -> Y
590   // Eg: X + -X -> 0
591   Value *Y = nullptr;
592   if (match(Op1, m_Sub(m_Value(Y), m_Specific(Op0))) ||
593       match(Op0, m_Sub(m_Value(Y), m_Specific(Op1))))
594     return Y;
595 
596   // X + ~X -> -1   since   ~X = -X-1
597   Type *Ty = Op0->getType();
598   if (match(Op0, m_Not(m_Specific(Op1))) ||
599       match(Op1, m_Not(m_Specific(Op0))))
600     return Constant::getAllOnesValue(Ty);
601 
602   // add nsw/nuw (xor Y, signmask), signmask --> Y
603   // The no-wrapping add guarantees that the top bit will be set by the add.
604   // Therefore, the xor must be clearing the already set sign bit of Y.
605   if ((IsNSW || IsNUW) && match(Op1, m_SignMask()) &&
606       match(Op0, m_Xor(m_Value(Y), m_SignMask())))
607     return Y;
608 
609   // add nuw %x, -1  ->  -1, because %x can only be 0.
610   if (IsNUW && match(Op1, m_AllOnes()))
611     return Op1; // Which is -1.
612 
613   /// i1 add -> xor.
614   if (MaxRecurse && Op0->getType()->isIntOrIntVectorTy(1))
615     if (Value *V = SimplifyXorInst(Op0, Op1, Q, MaxRecurse-1))
616       return V;
617 
618   // Try some generic simplifications for associative operations.
619   if (Value *V = SimplifyAssociativeBinOp(Instruction::Add, Op0, Op1, Q,
620                                           MaxRecurse))
621     return V;
622 
623   // Threading Add over selects and phi nodes is pointless, so don't bother.
624   // Threading over the select in "A + select(cond, B, C)" means evaluating
625   // "A+B" and "A+C" and seeing if they are equal; but they are equal if and
626   // only if B and C are equal.  If B and C are equal then (since we assume
627   // that operands have already been simplified) "select(cond, B, C)" should
628   // have been simplified to the common value of B and C already.  Analysing
629   // "A+B" and "A+C" thus gains nothing, but costs compile time.  Similarly
630   // for threading over phi nodes.
631 
632   return nullptr;
633 }
634 
635 Value *llvm::SimplifyAddInst(Value *Op0, Value *Op1, bool IsNSW, bool IsNUW,
636                              const SimplifyQuery &Query) {
637   return ::SimplifyAddInst(Op0, Op1, IsNSW, IsNUW, Query, RecursionLimit);
638 }
639 
640 /// Compute the base pointer and cumulative constant offsets for V.
641 ///
642 /// This strips all constant offsets off of V, leaving it the base pointer, and
643 /// accumulates the total constant offset applied in the returned constant. It
644 /// returns 0 if V is not a pointer, and returns the constant '0' if there are
645 /// no constant offsets applied.
646 ///
647 /// This is very similar to GetPointerBaseWithConstantOffset except it doesn't
648 /// follow non-inbounds geps. This allows it to remain usable for icmp ult/etc.
649 /// folding.
650 static Constant *stripAndComputeConstantOffsets(const DataLayout &DL, Value *&V,
651                                                 bool AllowNonInbounds = false) {
652   assert(V->getType()->isPtrOrPtrVectorTy());
653 
654   Type *IntPtrTy = DL.getIntPtrType(V->getType())->getScalarType();
655   APInt Offset = APInt::getNullValue(IntPtrTy->getIntegerBitWidth());
656 
657   // Even though we don't look through PHI nodes, we could be called on an
658   // instruction in an unreachable block, which may be on a cycle.
659   SmallPtrSet<Value *, 4> Visited;
660   Visited.insert(V);
661   do {
662     if (GEPOperator *GEP = dyn_cast<GEPOperator>(V)) {
663       if ((!AllowNonInbounds && !GEP->isInBounds()) ||
664           !GEP->accumulateConstantOffset(DL, Offset))
665         break;
666       V = GEP->getPointerOperand();
667     } else if (Operator::getOpcode(V) == Instruction::BitCast) {
668       V = cast<Operator>(V)->getOperand(0);
669     } else if (GlobalAlias *GA = dyn_cast<GlobalAlias>(V)) {
670       if (GA->isInterposable())
671         break;
672       V = GA->getAliasee();
673     } else {
674       if (auto CS = CallSite(V))
675         if (Value *RV = CS.getReturnedArgOperand()) {
676           V = RV;
677           continue;
678         }
679       break;
680     }
681     assert(V->getType()->isPtrOrPtrVectorTy() && "Unexpected operand type!");
682   } while (Visited.insert(V).second);
683 
684   Constant *OffsetIntPtr = ConstantInt::get(IntPtrTy, Offset);
685   if (V->getType()->isVectorTy())
686     return ConstantVector::getSplat(V->getType()->getVectorNumElements(),
687                                     OffsetIntPtr);
688   return OffsetIntPtr;
689 }
690 
691 /// Compute the constant difference between two pointer values.
692 /// If the difference is not a constant, returns zero.
693 static Constant *computePointerDifference(const DataLayout &DL, Value *LHS,
694                                           Value *RHS) {
695   Constant *LHSOffset = stripAndComputeConstantOffsets(DL, LHS);
696   Constant *RHSOffset = stripAndComputeConstantOffsets(DL, RHS);
697 
698   // If LHS and RHS are not related via constant offsets to the same base
699   // value, there is nothing we can do here.
700   if (LHS != RHS)
701     return nullptr;
702 
703   // Otherwise, the difference of LHS - RHS can be computed as:
704   //    LHS - RHS
705   //  = (LHSOffset + Base) - (RHSOffset + Base)
706   //  = LHSOffset - RHSOffset
707   return ConstantExpr::getSub(LHSOffset, RHSOffset);
708 }
709 
710 /// Given operands for a Sub, see if we can fold the result.
711 /// If not, this returns null.
712 static Value *SimplifySubInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
713                               const SimplifyQuery &Q, unsigned MaxRecurse) {
714   if (Constant *C = foldOrCommuteConstant(Instruction::Sub, Op0, Op1, Q))
715     return C;
716 
717   // X - undef -> undef
718   // undef - X -> undef
719   if (match(Op0, m_Undef()) || match(Op1, m_Undef()))
720     return UndefValue::get(Op0->getType());
721 
722   // X - 0 -> X
723   if (match(Op1, m_Zero()))
724     return Op0;
725 
726   // X - X -> 0
727   if (Op0 == Op1)
728     return Constant::getNullValue(Op0->getType());
729 
730   // Is this a negation?
731   if (match(Op0, m_Zero())) {
732     // 0 - X -> 0 if the sub is NUW.
733     if (isNUW)
734       return Constant::getNullValue(Op0->getType());
735 
736     KnownBits Known = computeKnownBits(Op1, Q.DL, 0, Q.AC, Q.CxtI, Q.DT);
737     if (Known.Zero.isMaxSignedValue()) {
738       // Op1 is either 0 or the minimum signed value. If the sub is NSW, then
739       // Op1 must be 0 because negating the minimum signed value is undefined.
740       if (isNSW)
741         return Constant::getNullValue(Op0->getType());
742 
743       // 0 - X -> X if X is 0 or the minimum signed value.
744       return Op1;
745     }
746   }
747 
748   // (X + Y) - Z -> X + (Y - Z) or Y + (X - Z) if everything simplifies.
749   // For example, (X + Y) - Y -> X; (Y + X) - Y -> X
750   Value *X = nullptr, *Y = nullptr, *Z = Op1;
751   if (MaxRecurse && match(Op0, m_Add(m_Value(X), m_Value(Y)))) { // (X + Y) - Z
752     // See if "V === Y - Z" simplifies.
753     if (Value *V = SimplifyBinOp(Instruction::Sub, Y, Z, Q, MaxRecurse-1))
754       // It does!  Now see if "X + V" simplifies.
755       if (Value *W = SimplifyBinOp(Instruction::Add, X, V, Q, MaxRecurse-1)) {
756         // It does, we successfully reassociated!
757         ++NumReassoc;
758         return W;
759       }
760     // See if "V === X - Z" simplifies.
761     if (Value *V = SimplifyBinOp(Instruction::Sub, X, Z, Q, MaxRecurse-1))
762       // It does!  Now see if "Y + V" simplifies.
763       if (Value *W = SimplifyBinOp(Instruction::Add, Y, V, Q, MaxRecurse-1)) {
764         // It does, we successfully reassociated!
765         ++NumReassoc;
766         return W;
767       }
768   }
769 
770   // X - (Y + Z) -> (X - Y) - Z or (X - Z) - Y if everything simplifies.
771   // For example, X - (X + 1) -> -1
772   X = Op0;
773   if (MaxRecurse && match(Op1, m_Add(m_Value(Y), m_Value(Z)))) { // X - (Y + Z)
774     // See if "V === X - Y" simplifies.
775     if (Value *V = SimplifyBinOp(Instruction::Sub, X, Y, Q, MaxRecurse-1))
776       // It does!  Now see if "V - Z" simplifies.
777       if (Value *W = SimplifyBinOp(Instruction::Sub, V, Z, Q, MaxRecurse-1)) {
778         // It does, we successfully reassociated!
779         ++NumReassoc;
780         return W;
781       }
782     // See if "V === X - Z" simplifies.
783     if (Value *V = SimplifyBinOp(Instruction::Sub, X, Z, Q, MaxRecurse-1))
784       // It does!  Now see if "V - Y" simplifies.
785       if (Value *W = SimplifyBinOp(Instruction::Sub, V, Y, Q, MaxRecurse-1)) {
786         // It does, we successfully reassociated!
787         ++NumReassoc;
788         return W;
789       }
790   }
791 
792   // Z - (X - Y) -> (Z - X) + Y if everything simplifies.
793   // For example, X - (X - Y) -> Y.
794   Z = Op0;
795   if (MaxRecurse && match(Op1, m_Sub(m_Value(X), m_Value(Y)))) // Z - (X - Y)
796     // See if "V === Z - X" simplifies.
797     if (Value *V = SimplifyBinOp(Instruction::Sub, Z, X, Q, MaxRecurse-1))
798       // It does!  Now see if "V + Y" simplifies.
799       if (Value *W = SimplifyBinOp(Instruction::Add, V, Y, Q, MaxRecurse-1)) {
800         // It does, we successfully reassociated!
801         ++NumReassoc;
802         return W;
803       }
804 
805   // trunc(X) - trunc(Y) -> trunc(X - Y) if everything simplifies.
806   if (MaxRecurse && match(Op0, m_Trunc(m_Value(X))) &&
807       match(Op1, m_Trunc(m_Value(Y))))
808     if (X->getType() == Y->getType())
809       // See if "V === X - Y" simplifies.
810       if (Value *V = SimplifyBinOp(Instruction::Sub, X, Y, Q, MaxRecurse-1))
811         // It does!  Now see if "trunc V" simplifies.
812         if (Value *W = SimplifyCastInst(Instruction::Trunc, V, Op0->getType(),
813                                         Q, MaxRecurse - 1))
814           // It does, return the simplified "trunc V".
815           return W;
816 
817   // Variations on GEP(base, I, ...) - GEP(base, i, ...) -> GEP(null, I-i, ...).
818   if (match(Op0, m_PtrToInt(m_Value(X))) &&
819       match(Op1, m_PtrToInt(m_Value(Y))))
820     if (Constant *Result = computePointerDifference(Q.DL, X, Y))
821       return ConstantExpr::getIntegerCast(Result, Op0->getType(), true);
822 
823   // i1 sub -> xor.
824   if (MaxRecurse && Op0->getType()->isIntOrIntVectorTy(1))
825     if (Value *V = SimplifyXorInst(Op0, Op1, Q, MaxRecurse-1))
826       return V;
827 
828   // Threading Sub over selects and phi nodes is pointless, so don't bother.
829   // Threading over the select in "A - select(cond, B, C)" means evaluating
830   // "A-B" and "A-C" and seeing if they are equal; but they are equal if and
831   // only if B and C are equal.  If B and C are equal then (since we assume
832   // that operands have already been simplified) "select(cond, B, C)" should
833   // have been simplified to the common value of B and C already.  Analysing
834   // "A-B" and "A-C" thus gains nothing, but costs compile time.  Similarly
835   // for threading over phi nodes.
836 
837   return nullptr;
838 }
839 
840 Value *llvm::SimplifySubInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
841                              const SimplifyQuery &Q) {
842   return ::SimplifySubInst(Op0, Op1, isNSW, isNUW, Q, RecursionLimit);
843 }
844 
845 /// Given operands for a Mul, see if we can fold the result.
846 /// If not, this returns null.
847 static Value *SimplifyMulInst(Value *Op0, Value *Op1, const SimplifyQuery &Q,
848                               unsigned MaxRecurse) {
849   if (Constant *C = foldOrCommuteConstant(Instruction::Mul, Op0, Op1, Q))
850     return C;
851 
852   // X * undef -> 0
853   // X * 0 -> 0
854   if (match(Op1, m_CombineOr(m_Undef(), m_Zero())))
855     return Constant::getNullValue(Op0->getType());
856 
857   // X * 1 -> X
858   if (match(Op1, m_One()))
859     return Op0;
860 
861   // (X / Y) * Y -> X if the division is exact.
862   Value *X = nullptr;
863   if (Q.IIQ.UseInstrInfo &&
864       (match(Op0,
865              m_Exact(m_IDiv(m_Value(X), m_Specific(Op1)))) ||     // (X / Y) * Y
866        match(Op1, m_Exact(m_IDiv(m_Value(X), m_Specific(Op0)))))) // Y * (X / Y)
867     return X;
868 
869   // i1 mul -> and.
870   if (MaxRecurse && Op0->getType()->isIntOrIntVectorTy(1))
871     if (Value *V = SimplifyAndInst(Op0, Op1, Q, MaxRecurse-1))
872       return V;
873 
874   // Try some generic simplifications for associative operations.
875   if (Value *V = SimplifyAssociativeBinOp(Instruction::Mul, Op0, Op1, Q,
876                                           MaxRecurse))
877     return V;
878 
879   // Mul distributes over Add. Try some generic simplifications based on this.
880   if (Value *V = ExpandBinOp(Instruction::Mul, Op0, Op1, Instruction::Add,
881                              Q, MaxRecurse))
882     return V;
883 
884   // If the operation is with the result of a select instruction, check whether
885   // operating on either branch of the select always yields the same value.
886   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
887     if (Value *V = ThreadBinOpOverSelect(Instruction::Mul, Op0, Op1, Q,
888                                          MaxRecurse))
889       return V;
890 
891   // If the operation is with the result of a phi instruction, check whether
892   // operating on all incoming values of the phi always yields the same value.
893   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
894     if (Value *V = ThreadBinOpOverPHI(Instruction::Mul, Op0, Op1, Q,
895                                       MaxRecurse))
896       return V;
897 
898   return nullptr;
899 }
900 
901 Value *llvm::SimplifyMulInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) {
902   return ::SimplifyMulInst(Op0, Op1, Q, RecursionLimit);
903 }
904 
905 /// Check for common or similar folds of integer division or integer remainder.
906 /// This applies to all 4 opcodes (sdiv/udiv/srem/urem).
907 static Value *simplifyDivRem(Value *Op0, Value *Op1, bool IsDiv) {
908   Type *Ty = Op0->getType();
909 
910   // X / undef -> undef
911   // X % undef -> undef
912   if (match(Op1, m_Undef()))
913     return Op1;
914 
915   // X / 0 -> undef
916   // X % 0 -> undef
917   // We don't need to preserve faults!
918   if (match(Op1, m_Zero()))
919     return UndefValue::get(Ty);
920 
921   // If any element of a constant divisor vector is zero or undef, the whole op
922   // is undef.
923   auto *Op1C = dyn_cast<Constant>(Op1);
924   if (Op1C && Ty->isVectorTy()) {
925     unsigned NumElts = Ty->getVectorNumElements();
926     for (unsigned i = 0; i != NumElts; ++i) {
927       Constant *Elt = Op1C->getAggregateElement(i);
928       if (Elt && (Elt->isNullValue() || isa<UndefValue>(Elt)))
929         return UndefValue::get(Ty);
930     }
931   }
932 
933   // undef / X -> 0
934   // undef % X -> 0
935   if (match(Op0, m_Undef()))
936     return Constant::getNullValue(Ty);
937 
938   // 0 / X -> 0
939   // 0 % X -> 0
940   if (match(Op0, m_Zero()))
941     return Constant::getNullValue(Op0->getType());
942 
943   // X / X -> 1
944   // X % X -> 0
945   if (Op0 == Op1)
946     return IsDiv ? ConstantInt::get(Ty, 1) : Constant::getNullValue(Ty);
947 
948   // X / 1 -> X
949   // X % 1 -> 0
950   // If this is a boolean op (single-bit element type), we can't have
951   // division-by-zero or remainder-by-zero, so assume the divisor is 1.
952   // Similarly, if we're zero-extending a boolean divisor, then assume it's a 1.
953   Value *X;
954   if (match(Op1, m_One()) || Ty->isIntOrIntVectorTy(1) ||
955       (match(Op1, m_ZExt(m_Value(X))) && X->getType()->isIntOrIntVectorTy(1)))
956     return IsDiv ? Op0 : Constant::getNullValue(Ty);
957 
958   return nullptr;
959 }
960 
961 /// Given a predicate and two operands, return true if the comparison is true.
962 /// This is a helper for div/rem simplification where we return some other value
963 /// when we can prove a relationship between the operands.
964 static bool isICmpTrue(ICmpInst::Predicate Pred, Value *LHS, Value *RHS,
965                        const SimplifyQuery &Q, unsigned MaxRecurse) {
966   Value *V = SimplifyICmpInst(Pred, LHS, RHS, Q, MaxRecurse);
967   Constant *C = dyn_cast_or_null<Constant>(V);
968   return (C && C->isAllOnesValue());
969 }
970 
971 /// Return true if we can simplify X / Y to 0. Remainder can adapt that answer
972 /// to simplify X % Y to X.
973 static bool isDivZero(Value *X, Value *Y, const SimplifyQuery &Q,
974                       unsigned MaxRecurse, bool IsSigned) {
975   // Recursion is always used, so bail out at once if we already hit the limit.
976   if (!MaxRecurse--)
977     return false;
978 
979   if (IsSigned) {
980     // |X| / |Y| --> 0
981     //
982     // We require that 1 operand is a simple constant. That could be extended to
983     // 2 variables if we computed the sign bit for each.
984     //
985     // Make sure that a constant is not the minimum signed value because taking
986     // the abs() of that is undefined.
987     Type *Ty = X->getType();
988     const APInt *C;
989     if (match(X, m_APInt(C)) && !C->isMinSignedValue()) {
990       // Is the variable divisor magnitude always greater than the constant
991       // dividend magnitude?
992       // |Y| > |C| --> Y < -abs(C) or Y > abs(C)
993       Constant *PosDividendC = ConstantInt::get(Ty, C->abs());
994       Constant *NegDividendC = ConstantInt::get(Ty, -C->abs());
995       if (isICmpTrue(CmpInst::ICMP_SLT, Y, NegDividendC, Q, MaxRecurse) ||
996           isICmpTrue(CmpInst::ICMP_SGT, Y, PosDividendC, Q, MaxRecurse))
997         return true;
998     }
999     if (match(Y, m_APInt(C))) {
1000       // Special-case: we can't take the abs() of a minimum signed value. If
1001       // that's the divisor, then all we have to do is prove that the dividend
1002       // is also not the minimum signed value.
1003       if (C->isMinSignedValue())
1004         return isICmpTrue(CmpInst::ICMP_NE, X, Y, Q, MaxRecurse);
1005 
1006       // Is the variable dividend magnitude always less than the constant
1007       // divisor magnitude?
1008       // |X| < |C| --> X > -abs(C) and X < abs(C)
1009       Constant *PosDivisorC = ConstantInt::get(Ty, C->abs());
1010       Constant *NegDivisorC = ConstantInt::get(Ty, -C->abs());
1011       if (isICmpTrue(CmpInst::ICMP_SGT, X, NegDivisorC, Q, MaxRecurse) &&
1012           isICmpTrue(CmpInst::ICMP_SLT, X, PosDivisorC, Q, MaxRecurse))
1013         return true;
1014     }
1015     return false;
1016   }
1017 
1018   // IsSigned == false.
1019   // Is the dividend unsigned less than the divisor?
1020   return isICmpTrue(ICmpInst::ICMP_ULT, X, Y, Q, MaxRecurse);
1021 }
1022 
1023 /// These are simplifications common to SDiv and UDiv.
1024 static Value *simplifyDiv(Instruction::BinaryOps Opcode, Value *Op0, Value *Op1,
1025                           const SimplifyQuery &Q, unsigned MaxRecurse) {
1026   if (Constant *C = foldOrCommuteConstant(Opcode, Op0, Op1, Q))
1027     return C;
1028 
1029   if (Value *V = simplifyDivRem(Op0, Op1, true))
1030     return V;
1031 
1032   bool IsSigned = Opcode == Instruction::SDiv;
1033 
1034   // (X * Y) / Y -> X if the multiplication does not overflow.
1035   Value *X;
1036   if (match(Op0, m_c_Mul(m_Value(X), m_Specific(Op1)))) {
1037     auto *Mul = cast<OverflowingBinaryOperator>(Op0);
1038     // If the Mul does not overflow, then we are good to go.
1039     if ((IsSigned && Q.IIQ.hasNoSignedWrap(Mul)) ||
1040         (!IsSigned && Q.IIQ.hasNoUnsignedWrap(Mul)))
1041       return X;
1042     // If X has the form X = A / Y, then X * Y cannot overflow.
1043     if ((IsSigned && match(X, m_SDiv(m_Value(), m_Specific(Op1)))) ||
1044         (!IsSigned && match(X, m_UDiv(m_Value(), m_Specific(Op1)))))
1045       return X;
1046   }
1047 
1048   // (X rem Y) / Y -> 0
1049   if ((IsSigned && match(Op0, m_SRem(m_Value(), m_Specific(Op1)))) ||
1050       (!IsSigned && match(Op0, m_URem(m_Value(), m_Specific(Op1)))))
1051     return Constant::getNullValue(Op0->getType());
1052 
1053   // (X /u C1) /u C2 -> 0 if C1 * C2 overflow
1054   ConstantInt *C1, *C2;
1055   if (!IsSigned && match(Op0, m_UDiv(m_Value(X), m_ConstantInt(C1))) &&
1056       match(Op1, m_ConstantInt(C2))) {
1057     bool Overflow;
1058     (void)C1->getValue().umul_ov(C2->getValue(), Overflow);
1059     if (Overflow)
1060       return Constant::getNullValue(Op0->getType());
1061   }
1062 
1063   // If the operation is with the result of a select instruction, check whether
1064   // operating on either branch of the select always yields the same value.
1065   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1066     if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse))
1067       return V;
1068 
1069   // If the operation is with the result of a phi instruction, check whether
1070   // operating on all incoming values of the phi always yields the same value.
1071   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1072     if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse))
1073       return V;
1074 
1075   if (isDivZero(Op0, Op1, Q, MaxRecurse, IsSigned))
1076     return Constant::getNullValue(Op0->getType());
1077 
1078   return nullptr;
1079 }
1080 
1081 /// These are simplifications common to SRem and URem.
1082 static Value *simplifyRem(Instruction::BinaryOps Opcode, Value *Op0, Value *Op1,
1083                           const SimplifyQuery &Q, unsigned MaxRecurse) {
1084   if (Constant *C = foldOrCommuteConstant(Opcode, Op0, Op1, Q))
1085     return C;
1086 
1087   if (Value *V = simplifyDivRem(Op0, Op1, false))
1088     return V;
1089 
1090   // (X % Y) % Y -> X % Y
1091   if ((Opcode == Instruction::SRem &&
1092        match(Op0, m_SRem(m_Value(), m_Specific(Op1)))) ||
1093       (Opcode == Instruction::URem &&
1094        match(Op0, m_URem(m_Value(), m_Specific(Op1)))))
1095     return Op0;
1096 
1097   // (X << Y) % X -> 0
1098   if (Q.IIQ.UseInstrInfo &&
1099       ((Opcode == Instruction::SRem &&
1100         match(Op0, m_NSWShl(m_Specific(Op1), m_Value()))) ||
1101        (Opcode == Instruction::URem &&
1102         match(Op0, m_NUWShl(m_Specific(Op1), m_Value())))))
1103     return Constant::getNullValue(Op0->getType());
1104 
1105   // If the operation is with the result of a select instruction, check whether
1106   // operating on either branch of the select always yields the same value.
1107   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1108     if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse))
1109       return V;
1110 
1111   // If the operation is with the result of a phi instruction, check whether
1112   // operating on all incoming values of the phi always yields the same value.
1113   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1114     if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse))
1115       return V;
1116 
1117   // If X / Y == 0, then X % Y == X.
1118   if (isDivZero(Op0, Op1, Q, MaxRecurse, Opcode == Instruction::SRem))
1119     return Op0;
1120 
1121   return nullptr;
1122 }
1123 
1124 /// Given operands for an SDiv, see if we can fold the result.
1125 /// If not, this returns null.
1126 static Value *SimplifySDivInst(Value *Op0, Value *Op1, const SimplifyQuery &Q,
1127                                unsigned MaxRecurse) {
1128   // If two operands are negated and no signed overflow, return -1.
1129   if (isKnownNegation(Op0, Op1, /*NeedNSW=*/true))
1130     return Constant::getAllOnesValue(Op0->getType());
1131 
1132   return simplifyDiv(Instruction::SDiv, Op0, Op1, Q, MaxRecurse);
1133 }
1134 
1135 Value *llvm::SimplifySDivInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) {
1136   return ::SimplifySDivInst(Op0, Op1, Q, RecursionLimit);
1137 }
1138 
1139 /// Given operands for a UDiv, see if we can fold the result.
1140 /// If not, this returns null.
1141 static Value *SimplifyUDivInst(Value *Op0, Value *Op1, const SimplifyQuery &Q,
1142                                unsigned MaxRecurse) {
1143   return simplifyDiv(Instruction::UDiv, Op0, Op1, Q, MaxRecurse);
1144 }
1145 
1146 Value *llvm::SimplifyUDivInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) {
1147   return ::SimplifyUDivInst(Op0, Op1, Q, RecursionLimit);
1148 }
1149 
1150 /// Given operands for an SRem, see if we can fold the result.
1151 /// If not, this returns null.
1152 static Value *SimplifySRemInst(Value *Op0, Value *Op1, const SimplifyQuery &Q,
1153                                unsigned MaxRecurse) {
1154   // If the divisor is 0, the result is undefined, so assume the divisor is -1.
1155   // srem Op0, (sext i1 X) --> srem Op0, -1 --> 0
1156   Value *X;
1157   if (match(Op1, m_SExt(m_Value(X))) && X->getType()->isIntOrIntVectorTy(1))
1158     return ConstantInt::getNullValue(Op0->getType());
1159 
1160   // If the two operands are negated, return 0.
1161   if (isKnownNegation(Op0, Op1))
1162     return ConstantInt::getNullValue(Op0->getType());
1163 
1164   return simplifyRem(Instruction::SRem, Op0, Op1, Q, MaxRecurse);
1165 }
1166 
1167 Value *llvm::SimplifySRemInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) {
1168   return ::SimplifySRemInst(Op0, Op1, Q, RecursionLimit);
1169 }
1170 
1171 /// Given operands for a URem, see if we can fold the result.
1172 /// If not, this returns null.
1173 static Value *SimplifyURemInst(Value *Op0, Value *Op1, const SimplifyQuery &Q,
1174                                unsigned MaxRecurse) {
1175   return simplifyRem(Instruction::URem, Op0, Op1, Q, MaxRecurse);
1176 }
1177 
1178 Value *llvm::SimplifyURemInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) {
1179   return ::SimplifyURemInst(Op0, Op1, Q, RecursionLimit);
1180 }
1181 
1182 /// Returns true if a shift by \c Amount always yields undef.
1183 static bool isUndefShift(Value *Amount) {
1184   Constant *C = dyn_cast<Constant>(Amount);
1185   if (!C)
1186     return false;
1187 
1188   // X shift by undef -> undef because it may shift by the bitwidth.
1189   if (isa<UndefValue>(C))
1190     return true;
1191 
1192   // Shifting by the bitwidth or more is undefined.
1193   if (ConstantInt *CI = dyn_cast<ConstantInt>(C))
1194     if (CI->getValue().getLimitedValue() >=
1195         CI->getType()->getScalarSizeInBits())
1196       return true;
1197 
1198   // If all lanes of a vector shift are undefined the whole shift is.
1199   if (isa<ConstantVector>(C) || isa<ConstantDataVector>(C)) {
1200     for (unsigned I = 0, E = C->getType()->getVectorNumElements(); I != E; ++I)
1201       if (!isUndefShift(C->getAggregateElement(I)))
1202         return false;
1203     return true;
1204   }
1205 
1206   return false;
1207 }
1208 
1209 /// Given operands for an Shl, LShr or AShr, see if we can fold the result.
1210 /// If not, this returns null.
1211 static Value *SimplifyShift(Instruction::BinaryOps Opcode, Value *Op0,
1212                             Value *Op1, const SimplifyQuery &Q, unsigned MaxRecurse) {
1213   if (Constant *C = foldOrCommuteConstant(Opcode, Op0, Op1, Q))
1214     return C;
1215 
1216   // 0 shift by X -> 0
1217   if (match(Op0, m_Zero()))
1218     return Constant::getNullValue(Op0->getType());
1219 
1220   // X shift by 0 -> X
1221   // Shift-by-sign-extended bool must be shift-by-0 because shift-by-all-ones
1222   // would be poison.
1223   Value *X;
1224   if (match(Op1, m_Zero()) ||
1225       (match(Op1, m_SExt(m_Value(X))) && X->getType()->isIntOrIntVectorTy(1)))
1226     return Op0;
1227 
1228   // Fold undefined shifts.
1229   if (isUndefShift(Op1))
1230     return UndefValue::get(Op0->getType());
1231 
1232   // If the operation is with the result of a select instruction, check whether
1233   // operating on either branch of the select always yields the same value.
1234   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1235     if (Value *V = ThreadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse))
1236       return V;
1237 
1238   // If the operation is with the result of a phi instruction, check whether
1239   // operating on all incoming values of the phi always yields the same value.
1240   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1241     if (Value *V = ThreadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse))
1242       return V;
1243 
1244   // If any bits in the shift amount make that value greater than or equal to
1245   // the number of bits in the type, the shift is undefined.
1246   KnownBits Known = computeKnownBits(Op1, Q.DL, 0, Q.AC, Q.CxtI, Q.DT);
1247   if (Known.One.getLimitedValue() >= Known.getBitWidth())
1248     return UndefValue::get(Op0->getType());
1249 
1250   // If all valid bits in the shift amount are known zero, the first operand is
1251   // unchanged.
1252   unsigned NumValidShiftBits = Log2_32_Ceil(Known.getBitWidth());
1253   if (Known.countMinTrailingZeros() >= NumValidShiftBits)
1254     return Op0;
1255 
1256   return nullptr;
1257 }
1258 
1259 /// Given operands for an Shl, LShr or AShr, see if we can
1260 /// fold the result.  If not, this returns null.
1261 static Value *SimplifyRightShift(Instruction::BinaryOps Opcode, Value *Op0,
1262                                  Value *Op1, bool isExact, const SimplifyQuery &Q,
1263                                  unsigned MaxRecurse) {
1264   if (Value *V = SimplifyShift(Opcode, Op0, Op1, Q, MaxRecurse))
1265     return V;
1266 
1267   // X >> X -> 0
1268   if (Op0 == Op1)
1269     return Constant::getNullValue(Op0->getType());
1270 
1271   // undef >> X -> 0
1272   // undef >> X -> undef (if it's exact)
1273   if (match(Op0, m_Undef()))
1274     return isExact ? Op0 : Constant::getNullValue(Op0->getType());
1275 
1276   // The low bit cannot be shifted out of an exact shift if it is set.
1277   if (isExact) {
1278     KnownBits Op0Known = computeKnownBits(Op0, Q.DL, /*Depth=*/0, Q.AC, Q.CxtI, Q.DT);
1279     if (Op0Known.One[0])
1280       return Op0;
1281   }
1282 
1283   return nullptr;
1284 }
1285 
1286 /// Given operands for an Shl, see if we can fold the result.
1287 /// If not, this returns null.
1288 static Value *SimplifyShlInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
1289                               const SimplifyQuery &Q, unsigned MaxRecurse) {
1290   if (Value *V = SimplifyShift(Instruction::Shl, Op0, Op1, Q, MaxRecurse))
1291     return V;
1292 
1293   // undef << X -> 0
1294   // undef << X -> undef if (if it's NSW/NUW)
1295   if (match(Op0, m_Undef()))
1296     return isNSW || isNUW ? Op0 : Constant::getNullValue(Op0->getType());
1297 
1298   // (X >> A) << A -> X
1299   Value *X;
1300   if (Q.IIQ.UseInstrInfo &&
1301       match(Op0, m_Exact(m_Shr(m_Value(X), m_Specific(Op1)))))
1302     return X;
1303 
1304   // shl nuw i8 C, %x  ->  C  iff C has sign bit set.
1305   if (isNUW && match(Op0, m_Negative()))
1306     return Op0;
1307   // NOTE: could use computeKnownBits() / LazyValueInfo,
1308   // but the cost-benefit analysis suggests it isn't worth it.
1309 
1310   return nullptr;
1311 }
1312 
1313 Value *llvm::SimplifyShlInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
1314                              const SimplifyQuery &Q) {
1315   return ::SimplifyShlInst(Op0, Op1, isNSW, isNUW, Q, RecursionLimit);
1316 }
1317 
1318 /// Given operands for an LShr, see if we can fold the result.
1319 /// If not, this returns null.
1320 static Value *SimplifyLShrInst(Value *Op0, Value *Op1, bool isExact,
1321                                const SimplifyQuery &Q, unsigned MaxRecurse) {
1322   if (Value *V = SimplifyRightShift(Instruction::LShr, Op0, Op1, isExact, Q,
1323                                     MaxRecurse))
1324       return V;
1325 
1326   // (X << A) >> A -> X
1327   Value *X;
1328   if (match(Op0, m_NUWShl(m_Value(X), m_Specific(Op1))))
1329     return X;
1330 
1331   // ((X << A) | Y) >> A -> X  if effective width of Y is not larger than A.
1332   // We can return X as we do in the above case since OR alters no bits in X.
1333   // SimplifyDemandedBits in InstCombine can do more general optimization for
1334   // bit manipulation. This pattern aims to provide opportunities for other
1335   // optimizers by supporting a simple but common case in InstSimplify.
1336   Value *Y;
1337   const APInt *ShRAmt, *ShLAmt;
1338   if (match(Op1, m_APInt(ShRAmt)) &&
1339       match(Op0, m_c_Or(m_NUWShl(m_Value(X), m_APInt(ShLAmt)), m_Value(Y))) &&
1340       *ShRAmt == *ShLAmt) {
1341     const KnownBits YKnown = computeKnownBits(Y, Q.DL, 0, Q.AC, Q.CxtI, Q.DT);
1342     const unsigned Width = Op0->getType()->getScalarSizeInBits();
1343     const unsigned EffWidthY = Width - YKnown.countMinLeadingZeros();
1344     if (ShRAmt->uge(EffWidthY))
1345       return X;
1346   }
1347 
1348   return nullptr;
1349 }
1350 
1351 Value *llvm::SimplifyLShrInst(Value *Op0, Value *Op1, bool isExact,
1352                               const SimplifyQuery &Q) {
1353   return ::SimplifyLShrInst(Op0, Op1, isExact, Q, RecursionLimit);
1354 }
1355 
1356 /// Given operands for an AShr, see if we can fold the result.
1357 /// If not, this returns null.
1358 static Value *SimplifyAShrInst(Value *Op0, Value *Op1, bool isExact,
1359                                const SimplifyQuery &Q, unsigned MaxRecurse) {
1360   if (Value *V = SimplifyRightShift(Instruction::AShr, Op0, Op1, isExact, Q,
1361                                     MaxRecurse))
1362     return V;
1363 
1364   // all ones >>a X -> -1
1365   // Do not return Op0 because it may contain undef elements if it's a vector.
1366   if (match(Op0, m_AllOnes()))
1367     return Constant::getAllOnesValue(Op0->getType());
1368 
1369   // (X << A) >> A -> X
1370   Value *X;
1371   if (Q.IIQ.UseInstrInfo && match(Op0, m_NSWShl(m_Value(X), m_Specific(Op1))))
1372     return X;
1373 
1374   // Arithmetic shifting an all-sign-bit value is a no-op.
1375   unsigned NumSignBits = ComputeNumSignBits(Op0, Q.DL, 0, Q.AC, Q.CxtI, Q.DT);
1376   if (NumSignBits == Op0->getType()->getScalarSizeInBits())
1377     return Op0;
1378 
1379   return nullptr;
1380 }
1381 
1382 Value *llvm::SimplifyAShrInst(Value *Op0, Value *Op1, bool isExact,
1383                               const SimplifyQuery &Q) {
1384   return ::SimplifyAShrInst(Op0, Op1, isExact, Q, RecursionLimit);
1385 }
1386 
1387 /// Commuted variants are assumed to be handled by calling this function again
1388 /// with the parameters swapped.
1389 static Value *simplifyUnsignedRangeCheck(ICmpInst *ZeroICmp,
1390                                          ICmpInst *UnsignedICmp, bool IsAnd) {
1391   Value *X, *Y;
1392 
1393   ICmpInst::Predicate EqPred;
1394   if (!match(ZeroICmp, m_ICmp(EqPred, m_Value(Y), m_Zero())) ||
1395       !ICmpInst::isEquality(EqPred))
1396     return nullptr;
1397 
1398   ICmpInst::Predicate UnsignedPred;
1399   if (match(UnsignedICmp, m_ICmp(UnsignedPred, m_Value(X), m_Specific(Y))) &&
1400       ICmpInst::isUnsigned(UnsignedPred))
1401     ;
1402   else if (match(UnsignedICmp,
1403                  m_ICmp(UnsignedPred, m_Specific(Y), m_Value(X))) &&
1404            ICmpInst::isUnsigned(UnsignedPred))
1405     UnsignedPred = ICmpInst::getSwappedPredicate(UnsignedPred);
1406   else
1407     return nullptr;
1408 
1409   // X < Y && Y != 0  -->  X < Y
1410   // X < Y || Y != 0  -->  Y != 0
1411   if (UnsignedPred == ICmpInst::ICMP_ULT && EqPred == ICmpInst::ICMP_NE)
1412     return IsAnd ? UnsignedICmp : ZeroICmp;
1413 
1414   // X >= Y || Y != 0  -->  true
1415   // X >= Y || Y == 0  -->  X >= Y
1416   if (UnsignedPred == ICmpInst::ICMP_UGE && !IsAnd) {
1417     if (EqPred == ICmpInst::ICMP_NE)
1418       return getTrue(UnsignedICmp->getType());
1419     return UnsignedICmp;
1420   }
1421 
1422   // X < Y && Y == 0  -->  false
1423   if (UnsignedPred == ICmpInst::ICMP_ULT && EqPred == ICmpInst::ICMP_EQ &&
1424       IsAnd)
1425     return getFalse(UnsignedICmp->getType());
1426 
1427   return nullptr;
1428 }
1429 
1430 /// Commuted variants are assumed to be handled by calling this function again
1431 /// with the parameters swapped.
1432 static Value *simplifyAndOfICmpsWithSameOperands(ICmpInst *Op0, ICmpInst *Op1) {
1433   ICmpInst::Predicate Pred0, Pred1;
1434   Value *A ,*B;
1435   if (!match(Op0, m_ICmp(Pred0, m_Value(A), m_Value(B))) ||
1436       !match(Op1, m_ICmp(Pred1, m_Specific(A), m_Specific(B))))
1437     return nullptr;
1438 
1439   // We have (icmp Pred0, A, B) & (icmp Pred1, A, B).
1440   // If Op1 is always implied true by Op0, then Op0 is a subset of Op1, and we
1441   // can eliminate Op1 from this 'and'.
1442   if (ICmpInst::isImpliedTrueByMatchingCmp(Pred0, Pred1))
1443     return Op0;
1444 
1445   // Check for any combination of predicates that are guaranteed to be disjoint.
1446   if ((Pred0 == ICmpInst::getInversePredicate(Pred1)) ||
1447       (Pred0 == ICmpInst::ICMP_EQ && ICmpInst::isFalseWhenEqual(Pred1)) ||
1448       (Pred0 == ICmpInst::ICMP_SLT && Pred1 == ICmpInst::ICMP_SGT) ||
1449       (Pred0 == ICmpInst::ICMP_ULT && Pred1 == ICmpInst::ICMP_UGT))
1450     return getFalse(Op0->getType());
1451 
1452   return nullptr;
1453 }
1454 
1455 /// Commuted variants are assumed to be handled by calling this function again
1456 /// with the parameters swapped.
1457 static Value *simplifyOrOfICmpsWithSameOperands(ICmpInst *Op0, ICmpInst *Op1) {
1458   ICmpInst::Predicate Pred0, Pred1;
1459   Value *A ,*B;
1460   if (!match(Op0, m_ICmp(Pred0, m_Value(A), m_Value(B))) ||
1461       !match(Op1, m_ICmp(Pred1, m_Specific(A), m_Specific(B))))
1462     return nullptr;
1463 
1464   // We have (icmp Pred0, A, B) | (icmp Pred1, A, B).
1465   // If Op1 is always implied true by Op0, then Op0 is a subset of Op1, and we
1466   // can eliminate Op0 from this 'or'.
1467   if (ICmpInst::isImpliedTrueByMatchingCmp(Pred0, Pred1))
1468     return Op1;
1469 
1470   // Check for any combination of predicates that cover the entire range of
1471   // possibilities.
1472   if ((Pred0 == ICmpInst::getInversePredicate(Pred1)) ||
1473       (Pred0 == ICmpInst::ICMP_NE && ICmpInst::isTrueWhenEqual(Pred1)) ||
1474       (Pred0 == ICmpInst::ICMP_SLE && Pred1 == ICmpInst::ICMP_SGE) ||
1475       (Pred0 == ICmpInst::ICMP_ULE && Pred1 == ICmpInst::ICMP_UGE))
1476     return getTrue(Op0->getType());
1477 
1478   return nullptr;
1479 }
1480 
1481 /// Test if a pair of compares with a shared operand and 2 constants has an
1482 /// empty set intersection, full set union, or if one compare is a superset of
1483 /// the other.
1484 static Value *simplifyAndOrOfICmpsWithConstants(ICmpInst *Cmp0, ICmpInst *Cmp1,
1485                                                 bool IsAnd) {
1486   // Look for this pattern: {and/or} (icmp X, C0), (icmp X, C1)).
1487   if (Cmp0->getOperand(0) != Cmp1->getOperand(0))
1488     return nullptr;
1489 
1490   const APInt *C0, *C1;
1491   if (!match(Cmp0->getOperand(1), m_APInt(C0)) ||
1492       !match(Cmp1->getOperand(1), m_APInt(C1)))
1493     return nullptr;
1494 
1495   auto Range0 = ConstantRange::makeExactICmpRegion(Cmp0->getPredicate(), *C0);
1496   auto Range1 = ConstantRange::makeExactICmpRegion(Cmp1->getPredicate(), *C1);
1497 
1498   // For and-of-compares, check if the intersection is empty:
1499   // (icmp X, C0) && (icmp X, C1) --> empty set --> false
1500   if (IsAnd && Range0.intersectWith(Range1).isEmptySet())
1501     return getFalse(Cmp0->getType());
1502 
1503   // For or-of-compares, check if the union is full:
1504   // (icmp X, C0) || (icmp X, C1) --> full set --> true
1505   if (!IsAnd && Range0.unionWith(Range1).isFullSet())
1506     return getTrue(Cmp0->getType());
1507 
1508   // Is one range a superset of the other?
1509   // If this is and-of-compares, take the smaller set:
1510   // (icmp sgt X, 4) && (icmp sgt X, 42) --> icmp sgt X, 42
1511   // If this is or-of-compares, take the larger set:
1512   // (icmp sgt X, 4) || (icmp sgt X, 42) --> icmp sgt X, 4
1513   if (Range0.contains(Range1))
1514     return IsAnd ? Cmp1 : Cmp0;
1515   if (Range1.contains(Range0))
1516     return IsAnd ? Cmp0 : Cmp1;
1517 
1518   return nullptr;
1519 }
1520 
1521 static Value *simplifyAndOrOfICmpsWithZero(ICmpInst *Cmp0, ICmpInst *Cmp1,
1522                                            bool IsAnd) {
1523   ICmpInst::Predicate P0 = Cmp0->getPredicate(), P1 = Cmp1->getPredicate();
1524   if (!match(Cmp0->getOperand(1), m_Zero()) ||
1525       !match(Cmp1->getOperand(1), m_Zero()) || P0 != P1)
1526     return nullptr;
1527 
1528   if ((IsAnd && P0 != ICmpInst::ICMP_NE) || (!IsAnd && P1 != ICmpInst::ICMP_EQ))
1529     return nullptr;
1530 
1531   // We have either "(X == 0 || Y == 0)" or "(X != 0 && Y != 0)".
1532   Value *X = Cmp0->getOperand(0);
1533   Value *Y = Cmp1->getOperand(0);
1534 
1535   // If one of the compares is a masked version of a (not) null check, then
1536   // that compare implies the other, so we eliminate the other. Optionally, look
1537   // through a pointer-to-int cast to match a null check of a pointer type.
1538 
1539   // (X == 0) || (([ptrtoint] X & ?) == 0) --> ([ptrtoint] X & ?) == 0
1540   // (X == 0) || ((? & [ptrtoint] X) == 0) --> (? & [ptrtoint] X) == 0
1541   // (X != 0) && (([ptrtoint] X & ?) != 0) --> ([ptrtoint] X & ?) != 0
1542   // (X != 0) && ((? & [ptrtoint] X) != 0) --> (? & [ptrtoint] X) != 0
1543   if (match(Y, m_c_And(m_Specific(X), m_Value())) ||
1544       match(Y, m_c_And(m_PtrToInt(m_Specific(X)), m_Value())))
1545     return Cmp1;
1546 
1547   // (([ptrtoint] Y & ?) == 0) || (Y == 0) --> ([ptrtoint] Y & ?) == 0
1548   // ((? & [ptrtoint] Y) == 0) || (Y == 0) --> (? & [ptrtoint] Y) == 0
1549   // (([ptrtoint] Y & ?) != 0) && (Y != 0) --> ([ptrtoint] Y & ?) != 0
1550   // ((? & [ptrtoint] Y) != 0) && (Y != 0) --> (? & [ptrtoint] Y) != 0
1551   if (match(X, m_c_And(m_Specific(Y), m_Value())) ||
1552       match(X, m_c_And(m_PtrToInt(m_Specific(Y)), m_Value())))
1553     return Cmp0;
1554 
1555   return nullptr;
1556 }
1557 
1558 static Value *simplifyAndOfICmpsWithAdd(ICmpInst *Op0, ICmpInst *Op1,
1559                                         const InstrInfoQuery &IIQ) {
1560   // (icmp (add V, C0), C1) & (icmp V, C0)
1561   ICmpInst::Predicate Pred0, Pred1;
1562   const APInt *C0, *C1;
1563   Value *V;
1564   if (!match(Op0, m_ICmp(Pred0, m_Add(m_Value(V), m_APInt(C0)), m_APInt(C1))))
1565     return nullptr;
1566 
1567   if (!match(Op1, m_ICmp(Pred1, m_Specific(V), m_Value())))
1568     return nullptr;
1569 
1570   auto *AddInst = cast<OverflowingBinaryOperator>(Op0->getOperand(0));
1571   if (AddInst->getOperand(1) != Op1->getOperand(1))
1572     return nullptr;
1573 
1574   Type *ITy = Op0->getType();
1575   bool isNSW = IIQ.hasNoSignedWrap(AddInst);
1576   bool isNUW = IIQ.hasNoUnsignedWrap(AddInst);
1577 
1578   const APInt Delta = *C1 - *C0;
1579   if (C0->isStrictlyPositive()) {
1580     if (Delta == 2) {
1581       if (Pred0 == ICmpInst::ICMP_ULT && Pred1 == ICmpInst::ICMP_SGT)
1582         return getFalse(ITy);
1583       if (Pred0 == ICmpInst::ICMP_SLT && Pred1 == ICmpInst::ICMP_SGT && isNSW)
1584         return getFalse(ITy);
1585     }
1586     if (Delta == 1) {
1587       if (Pred0 == ICmpInst::ICMP_ULE && Pred1 == ICmpInst::ICMP_SGT)
1588         return getFalse(ITy);
1589       if (Pred0 == ICmpInst::ICMP_SLE && Pred1 == ICmpInst::ICMP_SGT && isNSW)
1590         return getFalse(ITy);
1591     }
1592   }
1593   if (C0->getBoolValue() && isNUW) {
1594     if (Delta == 2)
1595       if (Pred0 == ICmpInst::ICMP_ULT && Pred1 == ICmpInst::ICMP_UGT)
1596         return getFalse(ITy);
1597     if (Delta == 1)
1598       if (Pred0 == ICmpInst::ICMP_ULE && Pred1 == ICmpInst::ICMP_UGT)
1599         return getFalse(ITy);
1600   }
1601 
1602   return nullptr;
1603 }
1604 
1605 static Value *simplifyAndOfICmps(ICmpInst *Op0, ICmpInst *Op1,
1606                                  const InstrInfoQuery &IIQ) {
1607   if (Value *X = simplifyUnsignedRangeCheck(Op0, Op1, /*IsAnd=*/true))
1608     return X;
1609   if (Value *X = simplifyUnsignedRangeCheck(Op1, Op0, /*IsAnd=*/true))
1610     return X;
1611 
1612   if (Value *X = simplifyAndOfICmpsWithSameOperands(Op0, Op1))
1613     return X;
1614   if (Value *X = simplifyAndOfICmpsWithSameOperands(Op1, Op0))
1615     return X;
1616 
1617   if (Value *X = simplifyAndOrOfICmpsWithConstants(Op0, Op1, true))
1618     return X;
1619 
1620   if (Value *X = simplifyAndOrOfICmpsWithZero(Op0, Op1, true))
1621     return X;
1622 
1623   if (Value *X = simplifyAndOfICmpsWithAdd(Op0, Op1, IIQ))
1624     return X;
1625   if (Value *X = simplifyAndOfICmpsWithAdd(Op1, Op0, IIQ))
1626     return X;
1627 
1628   return nullptr;
1629 }
1630 
1631 static Value *simplifyOrOfICmpsWithAdd(ICmpInst *Op0, ICmpInst *Op1,
1632                                        const InstrInfoQuery &IIQ) {
1633   // (icmp (add V, C0), C1) | (icmp V, C0)
1634   ICmpInst::Predicate Pred0, Pred1;
1635   const APInt *C0, *C1;
1636   Value *V;
1637   if (!match(Op0, m_ICmp(Pred0, m_Add(m_Value(V), m_APInt(C0)), m_APInt(C1))))
1638     return nullptr;
1639 
1640   if (!match(Op1, m_ICmp(Pred1, m_Specific(V), m_Value())))
1641     return nullptr;
1642 
1643   auto *AddInst = cast<BinaryOperator>(Op0->getOperand(0));
1644   if (AddInst->getOperand(1) != Op1->getOperand(1))
1645     return nullptr;
1646 
1647   Type *ITy = Op0->getType();
1648   bool isNSW = IIQ.hasNoSignedWrap(AddInst);
1649   bool isNUW = IIQ.hasNoUnsignedWrap(AddInst);
1650 
1651   const APInt Delta = *C1 - *C0;
1652   if (C0->isStrictlyPositive()) {
1653     if (Delta == 2) {
1654       if (Pred0 == ICmpInst::ICMP_UGE && Pred1 == ICmpInst::ICMP_SLE)
1655         return getTrue(ITy);
1656       if (Pred0 == ICmpInst::ICMP_SGE && Pred1 == ICmpInst::ICMP_SLE && isNSW)
1657         return getTrue(ITy);
1658     }
1659     if (Delta == 1) {
1660       if (Pred0 == ICmpInst::ICMP_UGT && Pred1 == ICmpInst::ICMP_SLE)
1661         return getTrue(ITy);
1662       if (Pred0 == ICmpInst::ICMP_SGT && Pred1 == ICmpInst::ICMP_SLE && isNSW)
1663         return getTrue(ITy);
1664     }
1665   }
1666   if (C0->getBoolValue() && isNUW) {
1667     if (Delta == 2)
1668       if (Pred0 == ICmpInst::ICMP_UGE && Pred1 == ICmpInst::ICMP_ULE)
1669         return getTrue(ITy);
1670     if (Delta == 1)
1671       if (Pred0 == ICmpInst::ICMP_UGT && Pred1 == ICmpInst::ICMP_ULE)
1672         return getTrue(ITy);
1673   }
1674 
1675   return nullptr;
1676 }
1677 
1678 static Value *simplifyOrOfICmps(ICmpInst *Op0, ICmpInst *Op1,
1679                                 const InstrInfoQuery &IIQ) {
1680   if (Value *X = simplifyUnsignedRangeCheck(Op0, Op1, /*IsAnd=*/false))
1681     return X;
1682   if (Value *X = simplifyUnsignedRangeCheck(Op1, Op0, /*IsAnd=*/false))
1683     return X;
1684 
1685   if (Value *X = simplifyOrOfICmpsWithSameOperands(Op0, Op1))
1686     return X;
1687   if (Value *X = simplifyOrOfICmpsWithSameOperands(Op1, Op0))
1688     return X;
1689 
1690   if (Value *X = simplifyAndOrOfICmpsWithConstants(Op0, Op1, false))
1691     return X;
1692 
1693   if (Value *X = simplifyAndOrOfICmpsWithZero(Op0, Op1, false))
1694     return X;
1695 
1696   if (Value *X = simplifyOrOfICmpsWithAdd(Op0, Op1, IIQ))
1697     return X;
1698   if (Value *X = simplifyOrOfICmpsWithAdd(Op1, Op0, IIQ))
1699     return X;
1700 
1701   return nullptr;
1702 }
1703 
1704 static Value *simplifyAndOrOfFCmps(const TargetLibraryInfo *TLI,
1705                                    FCmpInst *LHS, FCmpInst *RHS, bool IsAnd) {
1706   Value *LHS0 = LHS->getOperand(0), *LHS1 = LHS->getOperand(1);
1707   Value *RHS0 = RHS->getOperand(0), *RHS1 = RHS->getOperand(1);
1708   if (LHS0->getType() != RHS0->getType())
1709     return nullptr;
1710 
1711   FCmpInst::Predicate PredL = LHS->getPredicate(), PredR = RHS->getPredicate();
1712   if ((PredL == FCmpInst::FCMP_ORD && PredR == FCmpInst::FCMP_ORD && IsAnd) ||
1713       (PredL == FCmpInst::FCMP_UNO && PredR == FCmpInst::FCMP_UNO && !IsAnd)) {
1714     // (fcmp ord NNAN, X) & (fcmp ord X, Y) --> fcmp ord X, Y
1715     // (fcmp ord NNAN, X) & (fcmp ord Y, X) --> fcmp ord Y, X
1716     // (fcmp ord X, NNAN) & (fcmp ord X, Y) --> fcmp ord X, Y
1717     // (fcmp ord X, NNAN) & (fcmp ord Y, X) --> fcmp ord Y, X
1718     // (fcmp uno NNAN, X) | (fcmp uno X, Y) --> fcmp uno X, Y
1719     // (fcmp uno NNAN, X) | (fcmp uno Y, X) --> fcmp uno Y, X
1720     // (fcmp uno X, NNAN) | (fcmp uno X, Y) --> fcmp uno X, Y
1721     // (fcmp uno X, NNAN) | (fcmp uno Y, X) --> fcmp uno Y, X
1722     if ((isKnownNeverNaN(LHS0, TLI) && (LHS1 == RHS0 || LHS1 == RHS1)) ||
1723         (isKnownNeverNaN(LHS1, TLI) && (LHS0 == RHS0 || LHS0 == RHS1)))
1724       return RHS;
1725 
1726     // (fcmp ord X, Y) & (fcmp ord NNAN, X) --> fcmp ord X, Y
1727     // (fcmp ord Y, X) & (fcmp ord NNAN, X) --> fcmp ord Y, X
1728     // (fcmp ord X, Y) & (fcmp ord X, NNAN) --> fcmp ord X, Y
1729     // (fcmp ord Y, X) & (fcmp ord X, NNAN) --> fcmp ord Y, X
1730     // (fcmp uno X, Y) | (fcmp uno NNAN, X) --> fcmp uno X, Y
1731     // (fcmp uno Y, X) | (fcmp uno NNAN, X) --> fcmp uno Y, X
1732     // (fcmp uno X, Y) | (fcmp uno X, NNAN) --> fcmp uno X, Y
1733     // (fcmp uno Y, X) | (fcmp uno X, NNAN) --> fcmp uno Y, X
1734     if ((isKnownNeverNaN(RHS0, TLI) && (RHS1 == LHS0 || RHS1 == LHS1)) ||
1735         (isKnownNeverNaN(RHS1, TLI) && (RHS0 == LHS0 || RHS0 == LHS1)))
1736       return LHS;
1737   }
1738 
1739   return nullptr;
1740 }
1741 
1742 static Value *simplifyAndOrOfCmps(const SimplifyQuery &Q,
1743                                   Value *Op0, Value *Op1, bool IsAnd) {
1744   // Look through casts of the 'and' operands to find compares.
1745   auto *Cast0 = dyn_cast<CastInst>(Op0);
1746   auto *Cast1 = dyn_cast<CastInst>(Op1);
1747   if (Cast0 && Cast1 && Cast0->getOpcode() == Cast1->getOpcode() &&
1748       Cast0->getSrcTy() == Cast1->getSrcTy()) {
1749     Op0 = Cast0->getOperand(0);
1750     Op1 = Cast1->getOperand(0);
1751   }
1752 
1753   Value *V = nullptr;
1754   auto *ICmp0 = dyn_cast<ICmpInst>(Op0);
1755   auto *ICmp1 = dyn_cast<ICmpInst>(Op1);
1756   if (ICmp0 && ICmp1)
1757     V = IsAnd ? simplifyAndOfICmps(ICmp0, ICmp1, Q.IIQ)
1758               : simplifyOrOfICmps(ICmp0, ICmp1, Q.IIQ);
1759 
1760   auto *FCmp0 = dyn_cast<FCmpInst>(Op0);
1761   auto *FCmp1 = dyn_cast<FCmpInst>(Op1);
1762   if (FCmp0 && FCmp1)
1763     V = simplifyAndOrOfFCmps(Q.TLI, FCmp0, FCmp1, IsAnd);
1764 
1765   if (!V)
1766     return nullptr;
1767   if (!Cast0)
1768     return V;
1769 
1770   // If we looked through casts, we can only handle a constant simplification
1771   // because we are not allowed to create a cast instruction here.
1772   if (auto *C = dyn_cast<Constant>(V))
1773     return ConstantExpr::getCast(Cast0->getOpcode(), C, Cast0->getType());
1774 
1775   return nullptr;
1776 }
1777 
1778 /// Given operands for an And, see if we can fold the result.
1779 /// If not, this returns null.
1780 static Value *SimplifyAndInst(Value *Op0, Value *Op1, const SimplifyQuery &Q,
1781                               unsigned MaxRecurse) {
1782   if (Constant *C = foldOrCommuteConstant(Instruction::And, Op0, Op1, Q))
1783     return C;
1784 
1785   // X & undef -> 0
1786   if (match(Op1, m_Undef()))
1787     return Constant::getNullValue(Op0->getType());
1788 
1789   // X & X = X
1790   if (Op0 == Op1)
1791     return Op0;
1792 
1793   // X & 0 = 0
1794   if (match(Op1, m_Zero()))
1795     return Constant::getNullValue(Op0->getType());
1796 
1797   // X & -1 = X
1798   if (match(Op1, m_AllOnes()))
1799     return Op0;
1800 
1801   // A & ~A  =  ~A & A  =  0
1802   if (match(Op0, m_Not(m_Specific(Op1))) ||
1803       match(Op1, m_Not(m_Specific(Op0))))
1804     return Constant::getNullValue(Op0->getType());
1805 
1806   // (A | ?) & A = A
1807   if (match(Op0, m_c_Or(m_Specific(Op1), m_Value())))
1808     return Op1;
1809 
1810   // A & (A | ?) = A
1811   if (match(Op1, m_c_Or(m_Specific(Op0), m_Value())))
1812     return Op0;
1813 
1814   // A mask that only clears known zeros of a shifted value is a no-op.
1815   Value *X;
1816   const APInt *Mask;
1817   const APInt *ShAmt;
1818   if (match(Op1, m_APInt(Mask))) {
1819     // If all bits in the inverted and shifted mask are clear:
1820     // and (shl X, ShAmt), Mask --> shl X, ShAmt
1821     if (match(Op0, m_Shl(m_Value(X), m_APInt(ShAmt))) &&
1822         (~(*Mask)).lshr(*ShAmt).isNullValue())
1823       return Op0;
1824 
1825     // If all bits in the inverted and shifted mask are clear:
1826     // and (lshr X, ShAmt), Mask --> lshr X, ShAmt
1827     if (match(Op0, m_LShr(m_Value(X), m_APInt(ShAmt))) &&
1828         (~(*Mask)).shl(*ShAmt).isNullValue())
1829       return Op0;
1830   }
1831 
1832   // A & (-A) = A if A is a power of two or zero.
1833   if (match(Op0, m_Neg(m_Specific(Op1))) ||
1834       match(Op1, m_Neg(m_Specific(Op0)))) {
1835     if (isKnownToBeAPowerOfTwo(Op0, Q.DL, /*OrZero*/ true, 0, Q.AC, Q.CxtI,
1836                                Q.DT))
1837       return Op0;
1838     if (isKnownToBeAPowerOfTwo(Op1, Q.DL, /*OrZero*/ true, 0, Q.AC, Q.CxtI,
1839                                Q.DT))
1840       return Op1;
1841   }
1842 
1843   if (Value *V = simplifyAndOrOfCmps(Q, Op0, Op1, true))
1844     return V;
1845 
1846   // Try some generic simplifications for associative operations.
1847   if (Value *V = SimplifyAssociativeBinOp(Instruction::And, Op0, Op1, Q,
1848                                           MaxRecurse))
1849     return V;
1850 
1851   // And distributes over Or.  Try some generic simplifications based on this.
1852   if (Value *V = ExpandBinOp(Instruction::And, Op0, Op1, Instruction::Or,
1853                              Q, MaxRecurse))
1854     return V;
1855 
1856   // And distributes over Xor.  Try some generic simplifications based on this.
1857   if (Value *V = ExpandBinOp(Instruction::And, Op0, Op1, Instruction::Xor,
1858                              Q, MaxRecurse))
1859     return V;
1860 
1861   // If the operation is with the result of a select instruction, check whether
1862   // operating on either branch of the select always yields the same value.
1863   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
1864     if (Value *V = ThreadBinOpOverSelect(Instruction::And, Op0, Op1, Q,
1865                                          MaxRecurse))
1866       return V;
1867 
1868   // If the operation is with the result of a phi instruction, check whether
1869   // operating on all incoming values of the phi always yields the same value.
1870   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
1871     if (Value *V = ThreadBinOpOverPHI(Instruction::And, Op0, Op1, Q,
1872                                       MaxRecurse))
1873       return V;
1874 
1875   // Assuming the effective width of Y is not larger than A, i.e. all bits
1876   // from X and Y are disjoint in (X << A) | Y,
1877   // if the mask of this AND op covers all bits of X or Y, while it covers
1878   // no bits from the other, we can bypass this AND op. E.g.,
1879   // ((X << A) | Y) & Mask -> Y,
1880   //     if Mask = ((1 << effective_width_of(Y)) - 1)
1881   // ((X << A) | Y) & Mask -> X << A,
1882   //     if Mask = ((1 << effective_width_of(X)) - 1) << A
1883   // SimplifyDemandedBits in InstCombine can optimize the general case.
1884   // This pattern aims to help other passes for a common case.
1885   Value *Y, *XShifted;
1886   if (match(Op1, m_APInt(Mask)) &&
1887       match(Op0, m_c_Or(m_CombineAnd(m_NUWShl(m_Value(X), m_APInt(ShAmt)),
1888                                      m_Value(XShifted)),
1889                         m_Value(Y)))) {
1890     const unsigned Width = Op0->getType()->getScalarSizeInBits();
1891     const unsigned ShftCnt = ShAmt->getLimitedValue(Width);
1892     const KnownBits YKnown = computeKnownBits(Y, Q.DL, 0, Q.AC, Q.CxtI, Q.DT);
1893     const unsigned EffWidthY = Width - YKnown.countMinLeadingZeros();
1894     if (EffWidthY <= ShftCnt) {
1895       const KnownBits XKnown = computeKnownBits(X, Q.DL, 0, Q.AC, Q.CxtI,
1896                                                 Q.DT);
1897       const unsigned EffWidthX = Width - XKnown.countMinLeadingZeros();
1898       const APInt EffBitsY = APInt::getLowBitsSet(Width, EffWidthY);
1899       const APInt EffBitsX = APInt::getLowBitsSet(Width, EffWidthX) << ShftCnt;
1900       // If the mask is extracting all bits from X or Y as is, we can skip
1901       // this AND op.
1902       if (EffBitsY.isSubsetOf(*Mask) && !EffBitsX.intersects(*Mask))
1903         return Y;
1904       if (EffBitsX.isSubsetOf(*Mask) && !EffBitsY.intersects(*Mask))
1905         return XShifted;
1906     }
1907   }
1908 
1909   return nullptr;
1910 }
1911 
1912 Value *llvm::SimplifyAndInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) {
1913   return ::SimplifyAndInst(Op0, Op1, Q, RecursionLimit);
1914 }
1915 
1916 /// Given operands for an Or, see if we can fold the result.
1917 /// If not, this returns null.
1918 static Value *SimplifyOrInst(Value *Op0, Value *Op1, const SimplifyQuery &Q,
1919                              unsigned MaxRecurse) {
1920   if (Constant *C = foldOrCommuteConstant(Instruction::Or, Op0, Op1, Q))
1921     return C;
1922 
1923   // X | undef -> -1
1924   // X | -1 = -1
1925   // Do not return Op1 because it may contain undef elements if it's a vector.
1926   if (match(Op1, m_Undef()) || match(Op1, m_AllOnes()))
1927     return Constant::getAllOnesValue(Op0->getType());
1928 
1929   // X | X = X
1930   // X | 0 = X
1931   if (Op0 == Op1 || match(Op1, m_Zero()))
1932     return Op0;
1933 
1934   // A | ~A  =  ~A | A  =  -1
1935   if (match(Op0, m_Not(m_Specific(Op1))) ||
1936       match(Op1, m_Not(m_Specific(Op0))))
1937     return Constant::getAllOnesValue(Op0->getType());
1938 
1939   // (A & ?) | A = A
1940   if (match(Op0, m_c_And(m_Specific(Op1), m_Value())))
1941     return Op1;
1942 
1943   // A | (A & ?) = A
1944   if (match(Op1, m_c_And(m_Specific(Op0), m_Value())))
1945     return Op0;
1946 
1947   // ~(A & ?) | A = -1
1948   if (match(Op0, m_Not(m_c_And(m_Specific(Op1), m_Value()))))
1949     return Constant::getAllOnesValue(Op1->getType());
1950 
1951   // A | ~(A & ?) = -1
1952   if (match(Op1, m_Not(m_c_And(m_Specific(Op1), m_Value()))))
1953     return Constant::getAllOnesValue(Op0->getType());
1954 
1955   Value *A, *B;
1956   // (A & ~B) | (A ^ B) -> (A ^ B)
1957   // (~B & A) | (A ^ B) -> (A ^ B)
1958   // (A & ~B) | (B ^ A) -> (B ^ A)
1959   // (~B & A) | (B ^ A) -> (B ^ A)
1960   if (match(Op1, m_Xor(m_Value(A), m_Value(B))) &&
1961       (match(Op0, m_c_And(m_Specific(A), m_Not(m_Specific(B)))) ||
1962        match(Op0, m_c_And(m_Not(m_Specific(A)), m_Specific(B)))))
1963     return Op1;
1964 
1965   // Commute the 'or' operands.
1966   // (A ^ B) | (A & ~B) -> (A ^ B)
1967   // (A ^ B) | (~B & A) -> (A ^ B)
1968   // (B ^ A) | (A & ~B) -> (B ^ A)
1969   // (B ^ A) | (~B & A) -> (B ^ A)
1970   if (match(Op0, m_Xor(m_Value(A), m_Value(B))) &&
1971       (match(Op1, m_c_And(m_Specific(A), m_Not(m_Specific(B)))) ||
1972        match(Op1, m_c_And(m_Not(m_Specific(A)), m_Specific(B)))))
1973     return Op0;
1974 
1975   // (A & B) | (~A ^ B) -> (~A ^ B)
1976   // (B & A) | (~A ^ B) -> (~A ^ B)
1977   // (A & B) | (B ^ ~A) -> (B ^ ~A)
1978   // (B & A) | (B ^ ~A) -> (B ^ ~A)
1979   if (match(Op0, m_And(m_Value(A), m_Value(B))) &&
1980       (match(Op1, m_c_Xor(m_Specific(A), m_Not(m_Specific(B)))) ||
1981        match(Op1, m_c_Xor(m_Not(m_Specific(A)), m_Specific(B)))))
1982     return Op1;
1983 
1984   // (~A ^ B) | (A & B) -> (~A ^ B)
1985   // (~A ^ B) | (B & A) -> (~A ^ B)
1986   // (B ^ ~A) | (A & B) -> (B ^ ~A)
1987   // (B ^ ~A) | (B & A) -> (B ^ ~A)
1988   if (match(Op1, m_And(m_Value(A), m_Value(B))) &&
1989       (match(Op0, m_c_Xor(m_Specific(A), m_Not(m_Specific(B)))) ||
1990        match(Op0, m_c_Xor(m_Not(m_Specific(A)), m_Specific(B)))))
1991     return Op0;
1992 
1993   if (Value *V = simplifyAndOrOfCmps(Q, Op0, Op1, false))
1994     return V;
1995 
1996   // Try some generic simplifications for associative operations.
1997   if (Value *V = SimplifyAssociativeBinOp(Instruction::Or, Op0, Op1, Q,
1998                                           MaxRecurse))
1999     return V;
2000 
2001   // Or distributes over And.  Try some generic simplifications based on this.
2002   if (Value *V = ExpandBinOp(Instruction::Or, Op0, Op1, Instruction::And, Q,
2003                              MaxRecurse))
2004     return V;
2005 
2006   // If the operation is with the result of a select instruction, check whether
2007   // operating on either branch of the select always yields the same value.
2008   if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1))
2009     if (Value *V = ThreadBinOpOverSelect(Instruction::Or, Op0, Op1, Q,
2010                                          MaxRecurse))
2011       return V;
2012 
2013   // (A & C1)|(B & C2)
2014   const APInt *C1, *C2;
2015   if (match(Op0, m_And(m_Value(A), m_APInt(C1))) &&
2016       match(Op1, m_And(m_Value(B), m_APInt(C2)))) {
2017     if (*C1 == ~*C2) {
2018       // (A & C1)|(B & C2)
2019       // If we have: ((V + N) & C1) | (V & C2)
2020       // .. and C2 = ~C1 and C2 is 0+1+ and (N & C2) == 0
2021       // replace with V+N.
2022       Value *N;
2023       if (C2->isMask() && // C2 == 0+1+
2024           match(A, m_c_Add(m_Specific(B), m_Value(N)))) {
2025         // Add commutes, try both ways.
2026         if (MaskedValueIsZero(N, *C2, Q.DL, 0, Q.AC, Q.CxtI, Q.DT))
2027           return A;
2028       }
2029       // Or commutes, try both ways.
2030       if (C1->isMask() &&
2031           match(B, m_c_Add(m_Specific(A), m_Value(N)))) {
2032         // Add commutes, try both ways.
2033         if (MaskedValueIsZero(N, *C1, Q.DL, 0, Q.AC, Q.CxtI, Q.DT))
2034           return B;
2035       }
2036     }
2037   }
2038 
2039   // If the operation is with the result of a phi instruction, check whether
2040   // operating on all incoming values of the phi always yields the same value.
2041   if (isa<PHINode>(Op0) || isa<PHINode>(Op1))
2042     if (Value *V = ThreadBinOpOverPHI(Instruction::Or, Op0, Op1, Q, MaxRecurse))
2043       return V;
2044 
2045   return nullptr;
2046 }
2047 
2048 Value *llvm::SimplifyOrInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) {
2049   return ::SimplifyOrInst(Op0, Op1, Q, RecursionLimit);
2050 }
2051 
2052 /// Given operands for a Xor, see if we can fold the result.
2053 /// If not, this returns null.
2054 static Value *SimplifyXorInst(Value *Op0, Value *Op1, const SimplifyQuery &Q,
2055                               unsigned MaxRecurse) {
2056   if (Constant *C = foldOrCommuteConstant(Instruction::Xor, Op0, Op1, Q))
2057     return C;
2058 
2059   // A ^ undef -> undef
2060   if (match(Op1, m_Undef()))
2061     return Op1;
2062 
2063   // A ^ 0 = A
2064   if (match(Op1, m_Zero()))
2065     return Op0;
2066 
2067   // A ^ A = 0
2068   if (Op0 == Op1)
2069     return Constant::getNullValue(Op0->getType());
2070 
2071   // A ^ ~A  =  ~A ^ A  =  -1
2072   if (match(Op0, m_Not(m_Specific(Op1))) ||
2073       match(Op1, m_Not(m_Specific(Op0))))
2074     return Constant::getAllOnesValue(Op0->getType());
2075 
2076   // Try some generic simplifications for associative operations.
2077   if (Value *V = SimplifyAssociativeBinOp(Instruction::Xor, Op0, Op1, Q,
2078                                           MaxRecurse))
2079     return V;
2080 
2081   // Threading Xor over selects and phi nodes is pointless, so don't bother.
2082   // Threading over the select in "A ^ select(cond, B, C)" means evaluating
2083   // "A^B" and "A^C" and seeing if they are equal; but they are equal if and
2084   // only if B and C are equal.  If B and C are equal then (since we assume
2085   // that operands have already been simplified) "select(cond, B, C)" should
2086   // have been simplified to the common value of B and C already.  Analysing
2087   // "A^B" and "A^C" thus gains nothing, but costs compile time.  Similarly
2088   // for threading over phi nodes.
2089 
2090   return nullptr;
2091 }
2092 
2093 Value *llvm::SimplifyXorInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) {
2094   return ::SimplifyXorInst(Op0, Op1, Q, RecursionLimit);
2095 }
2096 
2097 
2098 static Type *GetCompareTy(Value *Op) {
2099   return CmpInst::makeCmpResultType(Op->getType());
2100 }
2101 
2102 /// Rummage around inside V looking for something equivalent to the comparison
2103 /// "LHS Pred RHS". Return such a value if found, otherwise return null.
2104 /// Helper function for analyzing max/min idioms.
2105 static Value *ExtractEquivalentCondition(Value *V, CmpInst::Predicate Pred,
2106                                          Value *LHS, Value *RHS) {
2107   SelectInst *SI = dyn_cast<SelectInst>(V);
2108   if (!SI)
2109     return nullptr;
2110   CmpInst *Cmp = dyn_cast<CmpInst>(SI->getCondition());
2111   if (!Cmp)
2112     return nullptr;
2113   Value *CmpLHS = Cmp->getOperand(0), *CmpRHS = Cmp->getOperand(1);
2114   if (Pred == Cmp->getPredicate() && LHS == CmpLHS && RHS == CmpRHS)
2115     return Cmp;
2116   if (Pred == CmpInst::getSwappedPredicate(Cmp->getPredicate()) &&
2117       LHS == CmpRHS && RHS == CmpLHS)
2118     return Cmp;
2119   return nullptr;
2120 }
2121 
2122 // A significant optimization not implemented here is assuming that alloca
2123 // addresses are not equal to incoming argument values. They don't *alias*,
2124 // as we say, but that doesn't mean they aren't equal, so we take a
2125 // conservative approach.
2126 //
2127 // This is inspired in part by C++11 5.10p1:
2128 //   "Two pointers of the same type compare equal if and only if they are both
2129 //    null, both point to the same function, or both represent the same
2130 //    address."
2131 //
2132 // This is pretty permissive.
2133 //
2134 // It's also partly due to C11 6.5.9p6:
2135 //   "Two pointers compare equal if and only if both are null pointers, both are
2136 //    pointers to the same object (including a pointer to an object and a
2137 //    subobject at its beginning) or function, both are pointers to one past the
2138 //    last element of the same array object, or one is a pointer to one past the
2139 //    end of one array object and the other is a pointer to the start of a
2140 //    different array object that happens to immediately follow the first array
2141 //    object in the address space.)
2142 //
2143 // C11's version is more restrictive, however there's no reason why an argument
2144 // couldn't be a one-past-the-end value for a stack object in the caller and be
2145 // equal to the beginning of a stack object in the callee.
2146 //
2147 // If the C and C++ standards are ever made sufficiently restrictive in this
2148 // area, it may be possible to update LLVM's semantics accordingly and reinstate
2149 // this optimization.
2150 static Constant *
2151 computePointerICmp(const DataLayout &DL, const TargetLibraryInfo *TLI,
2152                    const DominatorTree *DT, CmpInst::Predicate Pred,
2153                    AssumptionCache *AC, const Instruction *CxtI,
2154                    const InstrInfoQuery &IIQ, Value *LHS, Value *RHS) {
2155   // First, skip past any trivial no-ops.
2156   LHS = LHS->stripPointerCasts();
2157   RHS = RHS->stripPointerCasts();
2158 
2159   // A non-null pointer is not equal to a null pointer.
2160   if (llvm::isKnownNonZero(LHS, DL, 0, nullptr, nullptr, nullptr,
2161                            IIQ.UseInstrInfo) &&
2162       isa<ConstantPointerNull>(RHS) &&
2163       (Pred == CmpInst::ICMP_EQ || Pred == CmpInst::ICMP_NE))
2164     return ConstantInt::get(GetCompareTy(LHS),
2165                             !CmpInst::isTrueWhenEqual(Pred));
2166 
2167   // We can only fold certain predicates on pointer comparisons.
2168   switch (Pred) {
2169   default:
2170     return nullptr;
2171 
2172     // Equality comaprisons are easy to fold.
2173   case CmpInst::ICMP_EQ:
2174   case CmpInst::ICMP_NE:
2175     break;
2176 
2177     // We can only handle unsigned relational comparisons because 'inbounds' on
2178     // a GEP only protects against unsigned wrapping.
2179   case CmpInst::ICMP_UGT:
2180   case CmpInst::ICMP_UGE:
2181   case CmpInst::ICMP_ULT:
2182   case CmpInst::ICMP_ULE:
2183     // However, we have to switch them to their signed variants to handle
2184     // negative indices from the base pointer.
2185     Pred = ICmpInst::getSignedPredicate(Pred);
2186     break;
2187   }
2188 
2189   // Strip off any constant offsets so that we can reason about them.
2190   // It's tempting to use getUnderlyingObject or even just stripInBoundsOffsets
2191   // here and compare base addresses like AliasAnalysis does, however there are
2192   // numerous hazards. AliasAnalysis and its utilities rely on special rules
2193   // governing loads and stores which don't apply to icmps. Also, AliasAnalysis
2194   // doesn't need to guarantee pointer inequality when it says NoAlias.
2195   Constant *LHSOffset = stripAndComputeConstantOffsets(DL, LHS);
2196   Constant *RHSOffset = stripAndComputeConstantOffsets(DL, RHS);
2197 
2198   // If LHS and RHS are related via constant offsets to the same base
2199   // value, we can replace it with an icmp which just compares the offsets.
2200   if (LHS == RHS)
2201     return ConstantExpr::getICmp(Pred, LHSOffset, RHSOffset);
2202 
2203   // Various optimizations for (in)equality comparisons.
2204   if (Pred == CmpInst::ICMP_EQ || Pred == CmpInst::ICMP_NE) {
2205     // Different non-empty allocations that exist at the same time have
2206     // different addresses (if the program can tell). Global variables always
2207     // exist, so they always exist during the lifetime of each other and all
2208     // allocas. Two different allocas usually have different addresses...
2209     //
2210     // However, if there's an @llvm.stackrestore dynamically in between two
2211     // allocas, they may have the same address. It's tempting to reduce the
2212     // scope of the problem by only looking at *static* allocas here. That would
2213     // cover the majority of allocas while significantly reducing the likelihood
2214     // of having an @llvm.stackrestore pop up in the middle. However, it's not
2215     // actually impossible for an @llvm.stackrestore to pop up in the middle of
2216     // an entry block. Also, if we have a block that's not attached to a
2217     // function, we can't tell if it's "static" under the current definition.
2218     // Theoretically, this problem could be fixed by creating a new kind of
2219     // instruction kind specifically for static allocas. Such a new instruction
2220     // could be required to be at the top of the entry block, thus preventing it
2221     // from being subject to a @llvm.stackrestore. Instcombine could even
2222     // convert regular allocas into these special allocas. It'd be nifty.
2223     // However, until then, this problem remains open.
2224     //
2225     // So, we'll assume that two non-empty allocas have different addresses
2226     // for now.
2227     //
2228     // With all that, if the offsets are within the bounds of their allocations
2229     // (and not one-past-the-end! so we can't use inbounds!), and their
2230     // allocations aren't the same, the pointers are not equal.
2231     //
2232     // Note that it's not necessary to check for LHS being a global variable
2233     // address, due to canonicalization and constant folding.
2234     if (isa<AllocaInst>(LHS) &&
2235         (isa<AllocaInst>(RHS) || isa<GlobalVariable>(RHS))) {
2236       ConstantInt *LHSOffsetCI = dyn_cast<ConstantInt>(LHSOffset);
2237       ConstantInt *RHSOffsetCI = dyn_cast<ConstantInt>(RHSOffset);
2238       uint64_t LHSSize, RHSSize;
2239       ObjectSizeOpts Opts;
2240       Opts.NullIsUnknownSize =
2241           NullPointerIsDefined(cast<AllocaInst>(LHS)->getFunction());
2242       if (LHSOffsetCI && RHSOffsetCI &&
2243           getObjectSize(LHS, LHSSize, DL, TLI, Opts) &&
2244           getObjectSize(RHS, RHSSize, DL, TLI, Opts)) {
2245         const APInt &LHSOffsetValue = LHSOffsetCI->getValue();
2246         const APInt &RHSOffsetValue = RHSOffsetCI->getValue();
2247         if (!LHSOffsetValue.isNegative() &&
2248             !RHSOffsetValue.isNegative() &&
2249             LHSOffsetValue.ult(LHSSize) &&
2250             RHSOffsetValue.ult(RHSSize)) {
2251           return ConstantInt::get(GetCompareTy(LHS),
2252                                   !CmpInst::isTrueWhenEqual(Pred));
2253         }
2254       }
2255 
2256       // Repeat the above check but this time without depending on DataLayout
2257       // or being able to compute a precise size.
2258       if (!cast<PointerType>(LHS->getType())->isEmptyTy() &&
2259           !cast<PointerType>(RHS->getType())->isEmptyTy() &&
2260           LHSOffset->isNullValue() &&
2261           RHSOffset->isNullValue())
2262         return ConstantInt::get(GetCompareTy(LHS),
2263                                 !CmpInst::isTrueWhenEqual(Pred));
2264     }
2265 
2266     // Even if an non-inbounds GEP occurs along the path we can still optimize
2267     // equality comparisons concerning the result. We avoid walking the whole
2268     // chain again by starting where the last calls to
2269     // stripAndComputeConstantOffsets left off and accumulate the offsets.
2270     Constant *LHSNoBound = stripAndComputeConstantOffsets(DL, LHS, true);
2271     Constant *RHSNoBound = stripAndComputeConstantOffsets(DL, RHS, true);
2272     if (LHS == RHS)
2273       return ConstantExpr::getICmp(Pred,
2274                                    ConstantExpr::getAdd(LHSOffset, LHSNoBound),
2275                                    ConstantExpr::getAdd(RHSOffset, RHSNoBound));
2276 
2277     // If one side of the equality comparison must come from a noalias call
2278     // (meaning a system memory allocation function), and the other side must
2279     // come from a pointer that cannot overlap with dynamically-allocated
2280     // memory within the lifetime of the current function (allocas, byval
2281     // arguments, globals), then determine the comparison result here.
2282     SmallVector<Value *, 8> LHSUObjs, RHSUObjs;
2283     GetUnderlyingObjects(LHS, LHSUObjs, DL);
2284     GetUnderlyingObjects(RHS, RHSUObjs, DL);
2285 
2286     // Is the set of underlying objects all noalias calls?
2287     auto IsNAC = [](ArrayRef<Value *> Objects) {
2288       return all_of(Objects, isNoAliasCall);
2289     };
2290 
2291     // Is the set of underlying objects all things which must be disjoint from
2292     // noalias calls. For allocas, we consider only static ones (dynamic
2293     // allocas might be transformed into calls to malloc not simultaneously
2294     // live with the compared-to allocation). For globals, we exclude symbols
2295     // that might be resolve lazily to symbols in another dynamically-loaded
2296     // library (and, thus, could be malloc'ed by the implementation).
2297     auto IsAllocDisjoint = [](ArrayRef<Value *> Objects) {
2298       return all_of(Objects, [](Value *V) {
2299         if (const AllocaInst *AI = dyn_cast<AllocaInst>(V))
2300           return AI->getParent() && AI->getFunction() && AI->isStaticAlloca();
2301         if (const GlobalValue *GV = dyn_cast<GlobalValue>(V))
2302           return (GV->hasLocalLinkage() || GV->hasHiddenVisibility() ||
2303                   GV->hasProtectedVisibility() || GV->hasGlobalUnnamedAddr()) &&
2304                  !GV->isThreadLocal();
2305         if (const Argument *A = dyn_cast<Argument>(V))
2306           return A->hasByValAttr();
2307         return false;
2308       });
2309     };
2310 
2311     if ((IsNAC(LHSUObjs) && IsAllocDisjoint(RHSUObjs)) ||
2312         (IsNAC(RHSUObjs) && IsAllocDisjoint(LHSUObjs)))
2313         return ConstantInt::get(GetCompareTy(LHS),
2314                                 !CmpInst::isTrueWhenEqual(Pred));
2315 
2316     // Fold comparisons for non-escaping pointer even if the allocation call
2317     // cannot be elided. We cannot fold malloc comparison to null. Also, the
2318     // dynamic allocation call could be either of the operands.
2319     Value *MI = nullptr;
2320     if (isAllocLikeFn(LHS, TLI) &&
2321         llvm::isKnownNonZero(RHS, DL, 0, nullptr, CxtI, DT))
2322       MI = LHS;
2323     else if (isAllocLikeFn(RHS, TLI) &&
2324              llvm::isKnownNonZero(LHS, DL, 0, nullptr, CxtI, DT))
2325       MI = RHS;
2326     // FIXME: We should also fold the compare when the pointer escapes, but the
2327     // compare dominates the pointer escape
2328     if (MI && !PointerMayBeCaptured(MI, true, true))
2329       return ConstantInt::get(GetCompareTy(LHS),
2330                               CmpInst::isFalseWhenEqual(Pred));
2331   }
2332 
2333   // Otherwise, fail.
2334   return nullptr;
2335 }
2336 
2337 /// Fold an icmp when its operands have i1 scalar type.
2338 static Value *simplifyICmpOfBools(CmpInst::Predicate Pred, Value *LHS,
2339                                   Value *RHS, const SimplifyQuery &Q) {
2340   Type *ITy = GetCompareTy(LHS); // The return type.
2341   Type *OpTy = LHS->getType();   // The operand type.
2342   if (!OpTy->isIntOrIntVectorTy(1))
2343     return nullptr;
2344 
2345   // A boolean compared to true/false can be simplified in 14 out of the 20
2346   // (10 predicates * 2 constants) possible combinations. Cases not handled here
2347   // require a 'not' of the LHS, so those must be transformed in InstCombine.
2348   if (match(RHS, m_Zero())) {
2349     switch (Pred) {
2350     case CmpInst::ICMP_NE:  // X !=  0 -> X
2351     case CmpInst::ICMP_UGT: // X >u  0 -> X
2352     case CmpInst::ICMP_SLT: // X <s  0 -> X
2353       return LHS;
2354 
2355     case CmpInst::ICMP_ULT: // X <u  0 -> false
2356     case CmpInst::ICMP_SGT: // X >s  0 -> false
2357       return getFalse(ITy);
2358 
2359     case CmpInst::ICMP_UGE: // X >=u 0 -> true
2360     case CmpInst::ICMP_SLE: // X <=s 0 -> true
2361       return getTrue(ITy);
2362 
2363     default: break;
2364     }
2365   } else if (match(RHS, m_One())) {
2366     switch (Pred) {
2367     case CmpInst::ICMP_EQ:  // X ==   1 -> X
2368     case CmpInst::ICMP_UGE: // X >=u  1 -> X
2369     case CmpInst::ICMP_SLE: // X <=s -1 -> X
2370       return LHS;
2371 
2372     case CmpInst::ICMP_UGT: // X >u   1 -> false
2373     case CmpInst::ICMP_SLT: // X <s  -1 -> false
2374       return getFalse(ITy);
2375 
2376     case CmpInst::ICMP_ULE: // X <=u  1 -> true
2377     case CmpInst::ICMP_SGE: // X >=s -1 -> true
2378       return getTrue(ITy);
2379 
2380     default: break;
2381     }
2382   }
2383 
2384   switch (Pred) {
2385   default:
2386     break;
2387   case ICmpInst::ICMP_UGE:
2388     if (isImpliedCondition(RHS, LHS, Q.DL).getValueOr(false))
2389       return getTrue(ITy);
2390     break;
2391   case ICmpInst::ICMP_SGE:
2392     /// For signed comparison, the values for an i1 are 0 and -1
2393     /// respectively. This maps into a truth table of:
2394     /// LHS | RHS | LHS >=s RHS   | LHS implies RHS
2395     ///  0  |  0  |  1 (0 >= 0)   |  1
2396     ///  0  |  1  |  1 (0 >= -1)  |  1
2397     ///  1  |  0  |  0 (-1 >= 0)  |  0
2398     ///  1  |  1  |  1 (-1 >= -1) |  1
2399     if (isImpliedCondition(LHS, RHS, Q.DL).getValueOr(false))
2400       return getTrue(ITy);
2401     break;
2402   case ICmpInst::ICMP_ULE:
2403     if (isImpliedCondition(LHS, RHS, Q.DL).getValueOr(false))
2404       return getTrue(ITy);
2405     break;
2406   }
2407 
2408   return nullptr;
2409 }
2410 
2411 /// Try hard to fold icmp with zero RHS because this is a common case.
2412 static Value *simplifyICmpWithZero(CmpInst::Predicate Pred, Value *LHS,
2413                                    Value *RHS, const SimplifyQuery &Q) {
2414   if (!match(RHS, m_Zero()))
2415     return nullptr;
2416 
2417   Type *ITy = GetCompareTy(LHS); // The return type.
2418   switch (Pred) {
2419   default:
2420     llvm_unreachable("Unknown ICmp predicate!");
2421   case ICmpInst::ICMP_ULT:
2422     return getFalse(ITy);
2423   case ICmpInst::ICMP_UGE:
2424     return getTrue(ITy);
2425   case ICmpInst::ICMP_EQ:
2426   case ICmpInst::ICMP_ULE:
2427     if (isKnownNonZero(LHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT, Q.IIQ.UseInstrInfo))
2428       return getFalse(ITy);
2429     break;
2430   case ICmpInst::ICMP_NE:
2431   case ICmpInst::ICMP_UGT:
2432     if (isKnownNonZero(LHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT, Q.IIQ.UseInstrInfo))
2433       return getTrue(ITy);
2434     break;
2435   case ICmpInst::ICMP_SLT: {
2436     KnownBits LHSKnown = computeKnownBits(LHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT);
2437     if (LHSKnown.isNegative())
2438       return getTrue(ITy);
2439     if (LHSKnown.isNonNegative())
2440       return getFalse(ITy);
2441     break;
2442   }
2443   case ICmpInst::ICMP_SLE: {
2444     KnownBits LHSKnown = computeKnownBits(LHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT);
2445     if (LHSKnown.isNegative())
2446       return getTrue(ITy);
2447     if (LHSKnown.isNonNegative() &&
2448         isKnownNonZero(LHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT))
2449       return getFalse(ITy);
2450     break;
2451   }
2452   case ICmpInst::ICMP_SGE: {
2453     KnownBits LHSKnown = computeKnownBits(LHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT);
2454     if (LHSKnown.isNegative())
2455       return getFalse(ITy);
2456     if (LHSKnown.isNonNegative())
2457       return getTrue(ITy);
2458     break;
2459   }
2460   case ICmpInst::ICMP_SGT: {
2461     KnownBits LHSKnown = computeKnownBits(LHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT);
2462     if (LHSKnown.isNegative())
2463       return getFalse(ITy);
2464     if (LHSKnown.isNonNegative() &&
2465         isKnownNonZero(LHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT))
2466       return getTrue(ITy);
2467     break;
2468   }
2469   }
2470 
2471   return nullptr;
2472 }
2473 
2474 /// Many binary operators with a constant operand have an easy-to-compute
2475 /// range of outputs. This can be used to fold a comparison to always true or
2476 /// always false.
2477 static void setLimitsForBinOp(BinaryOperator &BO, APInt &Lower, APInt &Upper,
2478                               const InstrInfoQuery &IIQ) {
2479   unsigned Width = Lower.getBitWidth();
2480   const APInt *C;
2481   switch (BO.getOpcode()) {
2482   case Instruction::Add:
2483     if (match(BO.getOperand(1), m_APInt(C)) && !C->isNullValue()) {
2484       // FIXME: If we have both nuw and nsw, we should reduce the range further.
2485       if (IIQ.hasNoUnsignedWrap(cast<OverflowingBinaryOperator>(&BO))) {
2486         // 'add nuw x, C' produces [C, UINT_MAX].
2487         Lower = *C;
2488       } else if (IIQ.hasNoSignedWrap(cast<OverflowingBinaryOperator>(&BO))) {
2489         if (C->isNegative()) {
2490           // 'add nsw x, -C' produces [SINT_MIN, SINT_MAX - C].
2491           Lower = APInt::getSignedMinValue(Width);
2492           Upper = APInt::getSignedMaxValue(Width) + *C + 1;
2493         } else {
2494           // 'add nsw x, +C' produces [SINT_MIN + C, SINT_MAX].
2495           Lower = APInt::getSignedMinValue(Width) + *C;
2496           Upper = APInt::getSignedMaxValue(Width) + 1;
2497         }
2498       }
2499     }
2500     break;
2501 
2502   case Instruction::And:
2503     if (match(BO.getOperand(1), m_APInt(C)))
2504       // 'and x, C' produces [0, C].
2505       Upper = *C + 1;
2506     break;
2507 
2508   case Instruction::Or:
2509     if (match(BO.getOperand(1), m_APInt(C)))
2510       // 'or x, C' produces [C, UINT_MAX].
2511       Lower = *C;
2512     break;
2513 
2514   case Instruction::AShr:
2515     if (match(BO.getOperand(1), m_APInt(C)) && C->ult(Width)) {
2516       // 'ashr x, C' produces [INT_MIN >> C, INT_MAX >> C].
2517       Lower = APInt::getSignedMinValue(Width).ashr(*C);
2518       Upper = APInt::getSignedMaxValue(Width).ashr(*C) + 1;
2519     } else if (match(BO.getOperand(0), m_APInt(C))) {
2520       unsigned ShiftAmount = Width - 1;
2521       if (!C->isNullValue() && IIQ.isExact(&BO))
2522         ShiftAmount = C->countTrailingZeros();
2523       if (C->isNegative()) {
2524         // 'ashr C, x' produces [C, C >> (Width-1)]
2525         Lower = *C;
2526         Upper = C->ashr(ShiftAmount) + 1;
2527       } else {
2528         // 'ashr C, x' produces [C >> (Width-1), C]
2529         Lower = C->ashr(ShiftAmount);
2530         Upper = *C + 1;
2531       }
2532     }
2533     break;
2534 
2535   case Instruction::LShr:
2536     if (match(BO.getOperand(1), m_APInt(C)) && C->ult(Width)) {
2537       // 'lshr x, C' produces [0, UINT_MAX >> C].
2538       Upper = APInt::getAllOnesValue(Width).lshr(*C) + 1;
2539     } else if (match(BO.getOperand(0), m_APInt(C))) {
2540       // 'lshr C, x' produces [C >> (Width-1), C].
2541       unsigned ShiftAmount = Width - 1;
2542       if (!C->isNullValue() && IIQ.isExact(&BO))
2543         ShiftAmount = C->countTrailingZeros();
2544       Lower = C->lshr(ShiftAmount);
2545       Upper = *C + 1;
2546     }
2547     break;
2548 
2549   case Instruction::Shl:
2550     if (match(BO.getOperand(0), m_APInt(C))) {
2551       if (IIQ.hasNoUnsignedWrap(&BO)) {
2552         // 'shl nuw C, x' produces [C, C << CLZ(C)]
2553         Lower = *C;
2554         Upper = Lower.shl(Lower.countLeadingZeros()) + 1;
2555       } else if (BO.hasNoSignedWrap()) { // TODO: What if both nuw+nsw?
2556         if (C->isNegative()) {
2557           // 'shl nsw C, x' produces [C << CLO(C)-1, C]
2558           unsigned ShiftAmount = C->countLeadingOnes() - 1;
2559           Lower = C->shl(ShiftAmount);
2560           Upper = *C + 1;
2561         } else {
2562           // 'shl nsw C, x' produces [C, C << CLZ(C)-1]
2563           unsigned ShiftAmount = C->countLeadingZeros() - 1;
2564           Lower = *C;
2565           Upper = C->shl(ShiftAmount) + 1;
2566         }
2567       }
2568     }
2569     break;
2570 
2571   case Instruction::SDiv:
2572     if (match(BO.getOperand(1), m_APInt(C))) {
2573       APInt IntMin = APInt::getSignedMinValue(Width);
2574       APInt IntMax = APInt::getSignedMaxValue(Width);
2575       if (C->isAllOnesValue()) {
2576         // 'sdiv x, -1' produces [INT_MIN + 1, INT_MAX]
2577         //    where C != -1 and C != 0 and C != 1
2578         Lower = IntMin + 1;
2579         Upper = IntMax + 1;
2580       } else if (C->countLeadingZeros() < Width - 1) {
2581         // 'sdiv x, C' produces [INT_MIN / C, INT_MAX / C]
2582         //    where C != -1 and C != 0 and C != 1
2583         Lower = IntMin.sdiv(*C);
2584         Upper = IntMax.sdiv(*C);
2585         if (Lower.sgt(Upper))
2586           std::swap(Lower, Upper);
2587         Upper = Upper + 1;
2588         assert(Upper != Lower && "Upper part of range has wrapped!");
2589       }
2590     } else if (match(BO.getOperand(0), m_APInt(C))) {
2591       if (C->isMinSignedValue()) {
2592         // 'sdiv INT_MIN, x' produces [INT_MIN, INT_MIN / -2].
2593         Lower = *C;
2594         Upper = Lower.lshr(1) + 1;
2595       } else {
2596         // 'sdiv C, x' produces [-|C|, |C|].
2597         Upper = C->abs() + 1;
2598         Lower = (-Upper) + 1;
2599       }
2600     }
2601     break;
2602 
2603   case Instruction::UDiv:
2604     if (match(BO.getOperand(1), m_APInt(C)) && !C->isNullValue()) {
2605       // 'udiv x, C' produces [0, UINT_MAX / C].
2606       Upper = APInt::getMaxValue(Width).udiv(*C) + 1;
2607     } else if (match(BO.getOperand(0), m_APInt(C))) {
2608       // 'udiv C, x' produces [0, C].
2609       Upper = *C + 1;
2610     }
2611     break;
2612 
2613   case Instruction::SRem:
2614     if (match(BO.getOperand(1), m_APInt(C))) {
2615       // 'srem x, C' produces (-|C|, |C|).
2616       Upper = C->abs();
2617       Lower = (-Upper) + 1;
2618     }
2619     break;
2620 
2621   case Instruction::URem:
2622     if (match(BO.getOperand(1), m_APInt(C)))
2623       // 'urem x, C' produces [0, C).
2624       Upper = *C;
2625     break;
2626 
2627   default:
2628     break;
2629   }
2630 }
2631 
2632 /// Some intrinsics with a constant operand have an easy-to-compute range of
2633 /// outputs. This can be used to fold a comparison to always true or always
2634 /// false.
2635 static void setLimitsForIntrinsic(IntrinsicInst &II, APInt &Lower,
2636                                   APInt &Upper) {
2637   unsigned Width = Lower.getBitWidth();
2638   const APInt *C;
2639   switch (II.getIntrinsicID()) {
2640   case Intrinsic::uadd_sat:
2641     // uadd.sat(x, C) produces [C, UINT_MAX].
2642     if (match(II.getOperand(0), m_APInt(C)) ||
2643         match(II.getOperand(1), m_APInt(C)))
2644       Lower = *C;
2645     break;
2646   case Intrinsic::sadd_sat:
2647     if (match(II.getOperand(0), m_APInt(C)) ||
2648         match(II.getOperand(1), m_APInt(C))) {
2649       if (C->isNegative()) {
2650         // sadd.sat(x, -C) produces [SINT_MIN, SINT_MAX + (-C)].
2651         Lower = APInt::getSignedMinValue(Width);
2652         Upper = APInt::getSignedMaxValue(Width) + *C + 1;
2653       } else {
2654         // sadd.sat(x, +C) produces [SINT_MIN + C, SINT_MAX].
2655         Lower = APInt::getSignedMinValue(Width) + *C;
2656         Upper = APInt::getSignedMaxValue(Width) + 1;
2657       }
2658     }
2659     break;
2660   case Intrinsic::usub_sat:
2661     // usub.sat(C, x) produces [0, C].
2662     if (match(II.getOperand(0), m_APInt(C)))
2663       Upper = *C + 1;
2664     // usub.sat(x, C) produces [0, UINT_MAX - C].
2665     else if (match(II.getOperand(1), m_APInt(C)))
2666       Upper = APInt::getMaxValue(Width) - *C + 1;
2667     break;
2668   case Intrinsic::ssub_sat:
2669     if (match(II.getOperand(0), m_APInt(C))) {
2670       if (C->isNegative()) {
2671         // ssub.sat(-C, x) produces [SINT_MIN, -SINT_MIN + (-C)].
2672         Lower = APInt::getSignedMinValue(Width);
2673         Upper = *C - APInt::getSignedMinValue(Width) + 1;
2674       } else {
2675         // ssub.sat(+C, x) produces [-SINT_MAX + C, SINT_MAX].
2676         Lower = *C - APInt::getSignedMaxValue(Width);
2677         Upper = APInt::getSignedMaxValue(Width) + 1;
2678       }
2679     } else if (match(II.getOperand(1), m_APInt(C))) {
2680       if (C->isNegative()) {
2681         // ssub.sat(x, -C) produces [SINT_MIN - (-C), SINT_MAX]:
2682         Lower = APInt::getSignedMinValue(Width) - *C;
2683         Upper = APInt::getSignedMaxValue(Width) + 1;
2684       } else {
2685         // ssub.sat(x, +C) produces [SINT_MIN, SINT_MAX - C].
2686         Lower = APInt::getSignedMinValue(Width);
2687         Upper = APInt::getSignedMaxValue(Width) - *C + 1;
2688       }
2689     }
2690     break;
2691   default:
2692     break;
2693   }
2694 }
2695 
2696 static Value *simplifyICmpWithConstant(CmpInst::Predicate Pred, Value *LHS,
2697                                        Value *RHS, const InstrInfoQuery &IIQ) {
2698   Type *ITy = GetCompareTy(RHS); // The return type.
2699 
2700   Value *X;
2701   // Sign-bit checks can be optimized to true/false after unsigned
2702   // floating-point casts:
2703   // icmp slt (bitcast (uitofp X)),  0 --> false
2704   // icmp sgt (bitcast (uitofp X)), -1 --> true
2705   if (match(LHS, m_BitCast(m_UIToFP(m_Value(X))))) {
2706     if (Pred == ICmpInst::ICMP_SLT && match(RHS, m_Zero()))
2707       return ConstantInt::getFalse(ITy);
2708     if (Pred == ICmpInst::ICMP_SGT && match(RHS, m_AllOnes()))
2709       return ConstantInt::getTrue(ITy);
2710   }
2711 
2712   const APInt *C;
2713   if (!match(RHS, m_APInt(C)))
2714     return nullptr;
2715 
2716   // Rule out tautological comparisons (eg., ult 0 or uge 0).
2717   ConstantRange RHS_CR = ConstantRange::makeExactICmpRegion(Pred, *C);
2718   if (RHS_CR.isEmptySet())
2719     return ConstantInt::getFalse(ITy);
2720   if (RHS_CR.isFullSet())
2721     return ConstantInt::getTrue(ITy);
2722 
2723   // Find the range of possible values for binary operators.
2724   unsigned Width = C->getBitWidth();
2725   APInt Lower = APInt(Width, 0);
2726   APInt Upper = APInt(Width, 0);
2727   if (auto *BO = dyn_cast<BinaryOperator>(LHS))
2728     setLimitsForBinOp(*BO, Lower, Upper, IIQ);
2729   else if (auto *II = dyn_cast<IntrinsicInst>(LHS))
2730     setLimitsForIntrinsic(*II, Lower, Upper);
2731 
2732   ConstantRange LHS_CR =
2733       Lower != Upper ? ConstantRange(Lower, Upper) : ConstantRange(Width, true);
2734 
2735   if (auto *I = dyn_cast<Instruction>(LHS))
2736     if (auto *Ranges = IIQ.getMetadata(I, LLVMContext::MD_range))
2737       LHS_CR = LHS_CR.intersectWith(getConstantRangeFromMetadata(*Ranges));
2738 
2739   if (!LHS_CR.isFullSet()) {
2740     if (RHS_CR.contains(LHS_CR))
2741       return ConstantInt::getTrue(ITy);
2742     if (RHS_CR.inverse().contains(LHS_CR))
2743       return ConstantInt::getFalse(ITy);
2744   }
2745 
2746   return nullptr;
2747 }
2748 
2749 /// TODO: A large part of this logic is duplicated in InstCombine's
2750 /// foldICmpBinOp(). We should be able to share that and avoid the code
2751 /// duplication.
2752 static Value *simplifyICmpWithBinOp(CmpInst::Predicate Pred, Value *LHS,
2753                                     Value *RHS, const SimplifyQuery &Q,
2754                                     unsigned MaxRecurse) {
2755   Type *ITy = GetCompareTy(LHS); // The return type.
2756 
2757   BinaryOperator *LBO = dyn_cast<BinaryOperator>(LHS);
2758   BinaryOperator *RBO = dyn_cast<BinaryOperator>(RHS);
2759   if (MaxRecurse && (LBO || RBO)) {
2760     // Analyze the case when either LHS or RHS is an add instruction.
2761     Value *A = nullptr, *B = nullptr, *C = nullptr, *D = nullptr;
2762     // LHS = A + B (or A and B are null); RHS = C + D (or C and D are null).
2763     bool NoLHSWrapProblem = false, NoRHSWrapProblem = false;
2764     if (LBO && LBO->getOpcode() == Instruction::Add) {
2765       A = LBO->getOperand(0);
2766       B = LBO->getOperand(1);
2767       NoLHSWrapProblem =
2768           ICmpInst::isEquality(Pred) ||
2769           (CmpInst::isUnsigned(Pred) &&
2770            Q.IIQ.hasNoUnsignedWrap(cast<OverflowingBinaryOperator>(LBO))) ||
2771           (CmpInst::isSigned(Pred) &&
2772            Q.IIQ.hasNoSignedWrap(cast<OverflowingBinaryOperator>(LBO)));
2773     }
2774     if (RBO && RBO->getOpcode() == Instruction::Add) {
2775       C = RBO->getOperand(0);
2776       D = RBO->getOperand(1);
2777       NoRHSWrapProblem =
2778           ICmpInst::isEquality(Pred) ||
2779           (CmpInst::isUnsigned(Pred) &&
2780            Q.IIQ.hasNoUnsignedWrap(cast<OverflowingBinaryOperator>(RBO))) ||
2781           (CmpInst::isSigned(Pred) &&
2782            Q.IIQ.hasNoSignedWrap(cast<OverflowingBinaryOperator>(RBO)));
2783     }
2784 
2785     // icmp (X+Y), X -> icmp Y, 0 for equalities or if there is no overflow.
2786     if ((A == RHS || B == RHS) && NoLHSWrapProblem)
2787       if (Value *V = SimplifyICmpInst(Pred, A == RHS ? B : A,
2788                                       Constant::getNullValue(RHS->getType()), Q,
2789                                       MaxRecurse - 1))
2790         return V;
2791 
2792     // icmp X, (X+Y) -> icmp 0, Y for equalities or if there is no overflow.
2793     if ((C == LHS || D == LHS) && NoRHSWrapProblem)
2794       if (Value *V =
2795               SimplifyICmpInst(Pred, Constant::getNullValue(LHS->getType()),
2796                                C == LHS ? D : C, Q, MaxRecurse - 1))
2797         return V;
2798 
2799     // icmp (X+Y), (X+Z) -> icmp Y,Z for equalities or if there is no overflow.
2800     if (A && C && (A == C || A == D || B == C || B == D) && NoLHSWrapProblem &&
2801         NoRHSWrapProblem) {
2802       // Determine Y and Z in the form icmp (X+Y), (X+Z).
2803       Value *Y, *Z;
2804       if (A == C) {
2805         // C + B == C + D  ->  B == D
2806         Y = B;
2807         Z = D;
2808       } else if (A == D) {
2809         // D + B == C + D  ->  B == C
2810         Y = B;
2811         Z = C;
2812       } else if (B == C) {
2813         // A + C == C + D  ->  A == D
2814         Y = A;
2815         Z = D;
2816       } else {
2817         assert(B == D);
2818         // A + D == C + D  ->  A == C
2819         Y = A;
2820         Z = C;
2821       }
2822       if (Value *V = SimplifyICmpInst(Pred, Y, Z, Q, MaxRecurse - 1))
2823         return V;
2824     }
2825   }
2826 
2827   {
2828     Value *Y = nullptr;
2829     // icmp pred (or X, Y), X
2830     if (LBO && match(LBO, m_c_Or(m_Value(Y), m_Specific(RHS)))) {
2831       if (Pred == ICmpInst::ICMP_ULT)
2832         return getFalse(ITy);
2833       if (Pred == ICmpInst::ICMP_UGE)
2834         return getTrue(ITy);
2835 
2836       if (Pred == ICmpInst::ICMP_SLT || Pred == ICmpInst::ICMP_SGE) {
2837         KnownBits RHSKnown = computeKnownBits(RHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT);
2838         KnownBits YKnown = computeKnownBits(Y, Q.DL, 0, Q.AC, Q.CxtI, Q.DT);
2839         if (RHSKnown.isNonNegative() && YKnown.isNegative())
2840           return Pred == ICmpInst::ICMP_SLT ? getTrue(ITy) : getFalse(ITy);
2841         if (RHSKnown.isNegative() || YKnown.isNonNegative())
2842           return Pred == ICmpInst::ICMP_SLT ? getFalse(ITy) : getTrue(ITy);
2843       }
2844     }
2845     // icmp pred X, (or X, Y)
2846     if (RBO && match(RBO, m_c_Or(m_Value(Y), m_Specific(LHS)))) {
2847       if (Pred == ICmpInst::ICMP_ULE)
2848         return getTrue(ITy);
2849       if (Pred == ICmpInst::ICMP_UGT)
2850         return getFalse(ITy);
2851 
2852       if (Pred == ICmpInst::ICMP_SGT || Pred == ICmpInst::ICMP_SLE) {
2853         KnownBits LHSKnown = computeKnownBits(LHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT);
2854         KnownBits YKnown = computeKnownBits(Y, Q.DL, 0, Q.AC, Q.CxtI, Q.DT);
2855         if (LHSKnown.isNonNegative() && YKnown.isNegative())
2856           return Pred == ICmpInst::ICMP_SGT ? getTrue(ITy) : getFalse(ITy);
2857         if (LHSKnown.isNegative() || YKnown.isNonNegative())
2858           return Pred == ICmpInst::ICMP_SGT ? getFalse(ITy) : getTrue(ITy);
2859       }
2860     }
2861   }
2862 
2863   // icmp pred (and X, Y), X
2864   if (LBO && match(LBO, m_c_And(m_Value(), m_Specific(RHS)))) {
2865     if (Pred == ICmpInst::ICMP_UGT)
2866       return getFalse(ITy);
2867     if (Pred == ICmpInst::ICMP_ULE)
2868       return getTrue(ITy);
2869   }
2870   // icmp pred X, (and X, Y)
2871   if (RBO && match(RBO, m_c_And(m_Value(), m_Specific(LHS)))) {
2872     if (Pred == ICmpInst::ICMP_UGE)
2873       return getTrue(ITy);
2874     if (Pred == ICmpInst::ICMP_ULT)
2875       return getFalse(ITy);
2876   }
2877 
2878   // 0 - (zext X) pred C
2879   if (!CmpInst::isUnsigned(Pred) && match(LHS, m_Neg(m_ZExt(m_Value())))) {
2880     if (ConstantInt *RHSC = dyn_cast<ConstantInt>(RHS)) {
2881       if (RHSC->getValue().isStrictlyPositive()) {
2882         if (Pred == ICmpInst::ICMP_SLT)
2883           return ConstantInt::getTrue(RHSC->getContext());
2884         if (Pred == ICmpInst::ICMP_SGE)
2885           return ConstantInt::getFalse(RHSC->getContext());
2886         if (Pred == ICmpInst::ICMP_EQ)
2887           return ConstantInt::getFalse(RHSC->getContext());
2888         if (Pred == ICmpInst::ICMP_NE)
2889           return ConstantInt::getTrue(RHSC->getContext());
2890       }
2891       if (RHSC->getValue().isNonNegative()) {
2892         if (Pred == ICmpInst::ICMP_SLE)
2893           return ConstantInt::getTrue(RHSC->getContext());
2894         if (Pred == ICmpInst::ICMP_SGT)
2895           return ConstantInt::getFalse(RHSC->getContext());
2896       }
2897     }
2898   }
2899 
2900   // icmp pred (urem X, Y), Y
2901   if (LBO && match(LBO, m_URem(m_Value(), m_Specific(RHS)))) {
2902     switch (Pred) {
2903     default:
2904       break;
2905     case ICmpInst::ICMP_SGT:
2906     case ICmpInst::ICMP_SGE: {
2907       KnownBits Known = computeKnownBits(RHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT);
2908       if (!Known.isNonNegative())
2909         break;
2910       LLVM_FALLTHROUGH;
2911     }
2912     case ICmpInst::ICMP_EQ:
2913     case ICmpInst::ICMP_UGT:
2914     case ICmpInst::ICMP_UGE:
2915       return getFalse(ITy);
2916     case ICmpInst::ICMP_SLT:
2917     case ICmpInst::ICMP_SLE: {
2918       KnownBits Known = computeKnownBits(RHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT);
2919       if (!Known.isNonNegative())
2920         break;
2921       LLVM_FALLTHROUGH;
2922     }
2923     case ICmpInst::ICMP_NE:
2924     case ICmpInst::ICMP_ULT:
2925     case ICmpInst::ICMP_ULE:
2926       return getTrue(ITy);
2927     }
2928   }
2929 
2930   // icmp pred X, (urem Y, X)
2931   if (RBO && match(RBO, m_URem(m_Value(), m_Specific(LHS)))) {
2932     switch (Pred) {
2933     default:
2934       break;
2935     case ICmpInst::ICMP_SGT:
2936     case ICmpInst::ICMP_SGE: {
2937       KnownBits Known = computeKnownBits(LHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT);
2938       if (!Known.isNonNegative())
2939         break;
2940       LLVM_FALLTHROUGH;
2941     }
2942     case ICmpInst::ICMP_NE:
2943     case ICmpInst::ICMP_UGT:
2944     case ICmpInst::ICMP_UGE:
2945       return getTrue(ITy);
2946     case ICmpInst::ICMP_SLT:
2947     case ICmpInst::ICMP_SLE: {
2948       KnownBits Known = computeKnownBits(LHS, Q.DL, 0, Q.AC, Q.CxtI, Q.DT);
2949       if (!Known.isNonNegative())
2950         break;
2951       LLVM_FALLTHROUGH;
2952     }
2953     case ICmpInst::ICMP_EQ:
2954     case ICmpInst::ICMP_ULT:
2955     case ICmpInst::ICMP_ULE:
2956       return getFalse(ITy);
2957     }
2958   }
2959 
2960   // x >> y <=u x
2961   // x udiv y <=u x.
2962   if (LBO && (match(LBO, m_LShr(m_Specific(RHS), m_Value())) ||
2963               match(LBO, m_UDiv(m_Specific(RHS), m_Value())))) {
2964     // icmp pred (X op Y), X
2965     if (Pred == ICmpInst::ICMP_UGT)
2966       return getFalse(ITy);
2967     if (Pred == ICmpInst::ICMP_ULE)
2968       return getTrue(ITy);
2969   }
2970 
2971   // x >=u x >> y
2972   // x >=u x udiv y.
2973   if (RBO && (match(RBO, m_LShr(m_Specific(LHS), m_Value())) ||
2974               match(RBO, m_UDiv(m_Specific(LHS), m_Value())))) {
2975     // icmp pred X, (X op Y)
2976     if (Pred == ICmpInst::ICMP_ULT)
2977       return getFalse(ITy);
2978     if (Pred == ICmpInst::ICMP_UGE)
2979       return getTrue(ITy);
2980   }
2981 
2982   // handle:
2983   //   CI2 << X == CI
2984   //   CI2 << X != CI
2985   //
2986   //   where CI2 is a power of 2 and CI isn't
2987   if (auto *CI = dyn_cast<ConstantInt>(RHS)) {
2988     const APInt *CI2Val, *CIVal = &CI->getValue();
2989     if (LBO && match(LBO, m_Shl(m_APInt(CI2Val), m_Value())) &&
2990         CI2Val->isPowerOf2()) {
2991       if (!CIVal->isPowerOf2()) {
2992         // CI2 << X can equal zero in some circumstances,
2993         // this simplification is unsafe if CI is zero.
2994         //
2995         // We know it is safe if:
2996         // - The shift is nsw, we can't shift out the one bit.
2997         // - The shift is nuw, we can't shift out the one bit.
2998         // - CI2 is one
2999         // - CI isn't zero
3000         if (Q.IIQ.hasNoSignedWrap(cast<OverflowingBinaryOperator>(LBO)) ||
3001             Q.IIQ.hasNoUnsignedWrap(cast<OverflowingBinaryOperator>(LBO)) ||
3002             CI2Val->isOneValue() || !CI->isZero()) {
3003           if (Pred == ICmpInst::ICMP_EQ)
3004             return ConstantInt::getFalse(RHS->getContext());
3005           if (Pred == ICmpInst::ICMP_NE)
3006             return ConstantInt::getTrue(RHS->getContext());
3007         }
3008       }
3009       if (CIVal->isSignMask() && CI2Val->isOneValue()) {
3010         if (Pred == ICmpInst::ICMP_UGT)
3011           return ConstantInt::getFalse(RHS->getContext());
3012         if (Pred == ICmpInst::ICMP_ULE)
3013           return ConstantInt::getTrue(RHS->getContext());
3014       }
3015     }
3016   }
3017 
3018   if (MaxRecurse && LBO && RBO && LBO->getOpcode() == RBO->getOpcode() &&
3019       LBO->getOperand(1) == RBO->getOperand(1)) {
3020     switch (LBO->getOpcode()) {
3021     default:
3022       break;
3023     case Instruction::UDiv:
3024     case Instruction::LShr:
3025       if (ICmpInst::isSigned(Pred) || !Q.IIQ.isExact(LBO) ||
3026           !Q.IIQ.isExact(RBO))
3027         break;
3028       if (Value *V = SimplifyICmpInst(Pred, LBO->getOperand(0),
3029                                       RBO->getOperand(0), Q, MaxRecurse - 1))
3030           return V;
3031       break;
3032     case Instruction::SDiv:
3033       if (!ICmpInst::isEquality(Pred) || !Q.IIQ.isExact(LBO) ||
3034           !Q.IIQ.isExact(RBO))
3035         break;
3036       if (Value *V = SimplifyICmpInst(Pred, LBO->getOperand(0),
3037                                       RBO->getOperand(0), Q, MaxRecurse - 1))
3038         return V;
3039       break;
3040     case Instruction::AShr:
3041       if (!Q.IIQ.isExact(LBO) || !Q.IIQ.isExact(RBO))
3042         break;
3043       if (Value *V = SimplifyICmpInst(Pred, LBO->getOperand(0),
3044                                       RBO->getOperand(0), Q, MaxRecurse - 1))
3045         return V;
3046       break;
3047     case Instruction::Shl: {
3048       bool NUW = Q.IIQ.hasNoUnsignedWrap(LBO) && Q.IIQ.hasNoUnsignedWrap(RBO);
3049       bool NSW = Q.IIQ.hasNoSignedWrap(LBO) && Q.IIQ.hasNoSignedWrap(RBO);
3050       if (!NUW && !NSW)
3051         break;
3052       if (!NSW && ICmpInst::isSigned(Pred))
3053         break;
3054       if (Value *V = SimplifyICmpInst(Pred, LBO->getOperand(0),
3055                                       RBO->getOperand(0), Q, MaxRecurse - 1))
3056         return V;
3057       break;
3058     }
3059     }
3060   }
3061   return nullptr;
3062 }
3063 
3064 static Value *simplifyICmpWithAbsNabs(CmpInst::Predicate Pred, Value *Op0,
3065                                       Value *Op1) {
3066   // We need a comparison with a constant.
3067   const APInt *C;
3068   if (!match(Op1, m_APInt(C)))
3069     return nullptr;
3070 
3071   // matchSelectPattern returns the negation part of an abs pattern in SP1.
3072   // If the negate has an NSW flag, abs(INT_MIN) is undefined. Without that
3073   // constraint, we can't make a contiguous range for the result of abs.
3074   ICmpInst::Predicate AbsPred = ICmpInst::BAD_ICMP_PREDICATE;
3075   Value *SP0, *SP1;
3076   SelectPatternFlavor SPF = matchSelectPattern(Op0, SP0, SP1).Flavor;
3077   if (SPF == SelectPatternFlavor::SPF_ABS &&
3078       cast<Instruction>(SP1)->hasNoSignedWrap())
3079     // The result of abs(X) is >= 0 (with nsw).
3080     AbsPred = ICmpInst::ICMP_SGE;
3081   if (SPF == SelectPatternFlavor::SPF_NABS)
3082     // The result of -abs(X) is <= 0.
3083     AbsPred = ICmpInst::ICMP_SLE;
3084 
3085   if (AbsPred == ICmpInst::BAD_ICMP_PREDICATE)
3086     return nullptr;
3087 
3088   // If there is no intersection between abs/nabs and the range of this icmp,
3089   // the icmp must be false. If the abs/nabs range is a subset of the icmp
3090   // range, the icmp must be true.
3091   APInt Zero = APInt::getNullValue(C->getBitWidth());
3092   ConstantRange AbsRange = ConstantRange::makeExactICmpRegion(AbsPred, Zero);
3093   ConstantRange CmpRange = ConstantRange::makeExactICmpRegion(Pred, *C);
3094   if (AbsRange.intersectWith(CmpRange).isEmptySet())
3095     return getFalse(GetCompareTy(Op0));
3096   if (CmpRange.contains(AbsRange))
3097     return getTrue(GetCompareTy(Op0));
3098 
3099   return nullptr;
3100 }
3101 
3102 /// Simplify integer comparisons where at least one operand of the compare
3103 /// matches an integer min/max idiom.
3104 static Value *simplifyICmpWithMinMax(CmpInst::Predicate Pred, Value *LHS,
3105                                      Value *RHS, const SimplifyQuery &Q,
3106                                      unsigned MaxRecurse) {
3107   Type *ITy = GetCompareTy(LHS); // The return type.
3108   Value *A, *B;
3109   CmpInst::Predicate P = CmpInst::BAD_ICMP_PREDICATE;
3110   CmpInst::Predicate EqP; // Chosen so that "A == max/min(A,B)" iff "A EqP B".
3111 
3112   // Signed variants on "max(a,b)>=a -> true".
3113   if (match(LHS, m_SMax(m_Value(A), m_Value(B))) && (A == RHS || B == RHS)) {
3114     if (A != RHS)
3115       std::swap(A, B);       // smax(A, B) pred A.
3116     EqP = CmpInst::ICMP_SGE; // "A == smax(A, B)" iff "A sge B".
3117     // We analyze this as smax(A, B) pred A.
3118     P = Pred;
3119   } else if (match(RHS, m_SMax(m_Value(A), m_Value(B))) &&
3120              (A == LHS || B == LHS)) {
3121     if (A != LHS)
3122       std::swap(A, B);       // A pred smax(A, B).
3123     EqP = CmpInst::ICMP_SGE; // "A == smax(A, B)" iff "A sge B".
3124     // We analyze this as smax(A, B) swapped-pred A.
3125     P = CmpInst::getSwappedPredicate(Pred);
3126   } else if (match(LHS, m_SMin(m_Value(A), m_Value(B))) &&
3127              (A == RHS || B == RHS)) {
3128     if (A != RHS)
3129       std::swap(A, B);       // smin(A, B) pred A.
3130     EqP = CmpInst::ICMP_SLE; // "A == smin(A, B)" iff "A sle B".
3131     // We analyze this as smax(-A, -B) swapped-pred -A.
3132     // Note that we do not need to actually form -A or -B thanks to EqP.
3133     P = CmpInst::getSwappedPredicate(Pred);
3134   } else if (match(RHS, m_SMin(m_Value(A), m_Value(B))) &&
3135              (A == LHS || B == LHS)) {
3136     if (A != LHS)
3137       std::swap(A, B);       // A pred smin(A, B).
3138     EqP = CmpInst::ICMP_SLE; // "A == smin(A, B)" iff "A sle B".
3139     // We analyze this as smax(-A, -B) pred -A.
3140     // Note that we do not need to actually form -A or -B thanks to EqP.
3141     P = Pred;
3142   }
3143   if (P != CmpInst::BAD_ICMP_PREDICATE) {
3144     // Cases correspond to "max(A, B) p A".
3145     switch (P) {
3146     default:
3147       break;
3148     case CmpInst::ICMP_EQ:
3149     case CmpInst::ICMP_SLE:
3150       // Equivalent to "A EqP B".  This may be the same as the condition tested
3151       // in the max/min; if so, we can just return that.
3152       if (Value *V = ExtractEquivalentCondition(LHS, EqP, A, B))
3153         return V;
3154       if (Value *V = ExtractEquivalentCondition(RHS, EqP, A, B))
3155         return V;
3156       // Otherwise, see if "A EqP B" simplifies.
3157       if (MaxRecurse)
3158         if (Value *V = SimplifyICmpInst(EqP, A, B, Q, MaxRecurse - 1))
3159           return V;
3160       break;
3161     case CmpInst::ICMP_NE:
3162     case CmpInst::ICMP_SGT: {
3163       CmpInst::Predicate InvEqP = CmpInst::getInversePredicate(EqP);
3164       // Equivalent to "A InvEqP B".  This may be the same as the condition
3165       // tested in the max/min; if so, we can just return that.
3166       if (Value *V = ExtractEquivalentCondition(LHS, InvEqP, A, B))
3167         return V;
3168       if (Value *V = ExtractEquivalentCondition(RHS, InvEqP, A, B))
3169         return V;
3170       // Otherwise, see if "A InvEqP B" simplifies.
3171       if (MaxRecurse)
3172         if (Value *V = SimplifyICmpInst(InvEqP, A, B, Q, MaxRecurse - 1))
3173           return V;
3174       break;
3175     }
3176     case CmpInst::ICMP_SGE:
3177       // Always true.
3178       return getTrue(ITy);
3179     case CmpInst::ICMP_SLT:
3180       // Always false.
3181       return getFalse(ITy);
3182     }
3183   }
3184 
3185   // Unsigned variants on "max(a,b)>=a -> true".
3186   P = CmpInst::BAD_ICMP_PREDICATE;
3187   if (match(LHS, m_UMax(m_Value(A), m_Value(B))) && (A == RHS || B == RHS)) {
3188     if (A != RHS)
3189       std::swap(A, B);       // umax(A, B) pred A.
3190     EqP = CmpInst::ICMP_UGE; // "A == umax(A, B)" iff "A uge B".
3191     // We analyze this as umax(A, B) pred A.
3192     P = Pred;
3193   } else if (match(RHS, m_UMax(m_Value(A), m_Value(B))) &&
3194              (A == LHS || B == LHS)) {
3195     if (A != LHS)
3196       std::swap(A, B);       // A pred umax(A, B).
3197     EqP = CmpInst::ICMP_UGE; // "A == umax(A, B)" iff "A uge B".
3198     // We analyze this as umax(A, B) swapped-pred A.
3199     P = CmpInst::getSwappedPredicate(Pred);
3200   } else if (match(LHS, m_UMin(m_Value(A), m_Value(B))) &&
3201              (A == RHS || B == RHS)) {
3202     if (A != RHS)
3203       std::swap(A, B);       // umin(A, B) pred A.
3204     EqP = CmpInst::ICMP_ULE; // "A == umin(A, B)" iff "A ule B".
3205     // We analyze this as umax(-A, -B) swapped-pred -A.
3206     // Note that we do not need to actually form -A or -B thanks to EqP.
3207     P = CmpInst::getSwappedPredicate(Pred);
3208   } else if (match(RHS, m_UMin(m_Value(A), m_Value(B))) &&
3209              (A == LHS || B == LHS)) {
3210     if (A != LHS)
3211       std::swap(A, B);       // A pred umin(A, B).
3212     EqP = CmpInst::ICMP_ULE; // "A == umin(A, B)" iff "A ule B".
3213     // We analyze this as umax(-A, -B) pred -A.
3214     // Note that we do not need to actually form -A or -B thanks to EqP.
3215     P = Pred;
3216   }
3217   if (P != CmpInst::BAD_ICMP_PREDICATE) {
3218     // Cases correspond to "max(A, B) p A".
3219     switch (P) {
3220     default:
3221       break;
3222     case CmpInst::ICMP_EQ:
3223     case CmpInst::ICMP_ULE:
3224       // Equivalent to "A EqP B".  This may be the same as the condition tested
3225       // in the max/min; if so, we can just return that.
3226       if (Value *V = ExtractEquivalentCondition(LHS, EqP, A, B))
3227         return V;
3228       if (Value *V = ExtractEquivalentCondition(RHS, EqP, A, B))
3229         return V;
3230       // Otherwise, see if "A EqP B" simplifies.
3231       if (MaxRecurse)
3232         if (Value *V = SimplifyICmpInst(EqP, A, B, Q, MaxRecurse - 1))
3233           return V;
3234       break;
3235     case CmpInst::ICMP_NE:
3236     case CmpInst::ICMP_UGT: {
3237       CmpInst::Predicate InvEqP = CmpInst::getInversePredicate(EqP);
3238       // Equivalent to "A InvEqP B".  This may be the same as the condition
3239       // tested in the max/min; if so, we can just return that.
3240       if (Value *V = ExtractEquivalentCondition(LHS, InvEqP, A, B))
3241         return V;
3242       if (Value *V = ExtractEquivalentCondition(RHS, InvEqP, A, B))
3243         return V;
3244       // Otherwise, see if "A InvEqP B" simplifies.
3245       if (MaxRecurse)
3246         if (Value *V = SimplifyICmpInst(InvEqP, A, B, Q, MaxRecurse - 1))
3247           return V;
3248       break;
3249     }
3250     case CmpInst::ICMP_UGE:
3251       // Always true.
3252       return getTrue(ITy);
3253     case CmpInst::ICMP_ULT:
3254       // Always false.
3255       return getFalse(ITy);
3256     }
3257   }
3258 
3259   // Variants on "max(x,y) >= min(x,z)".
3260   Value *C, *D;
3261   if (match(LHS, m_SMax(m_Value(A), m_Value(B))) &&
3262       match(RHS, m_SMin(m_Value(C), m_Value(D))) &&
3263       (A == C || A == D || B == C || B == D)) {
3264     // max(x, ?) pred min(x, ?).
3265     if (Pred == CmpInst::ICMP_SGE)
3266       // Always true.
3267       return getTrue(ITy);
3268     if (Pred == CmpInst::ICMP_SLT)
3269       // Always false.
3270       return getFalse(ITy);
3271   } else if (match(LHS, m_SMin(m_Value(A), m_Value(B))) &&
3272              match(RHS, m_SMax(m_Value(C), m_Value(D))) &&
3273              (A == C || A == D || B == C || B == D)) {
3274     // min(x, ?) pred max(x, ?).
3275     if (Pred == CmpInst::ICMP_SLE)
3276       // Always true.
3277       return getTrue(ITy);
3278     if (Pred == CmpInst::ICMP_SGT)
3279       // Always false.
3280       return getFalse(ITy);
3281   } else if (match(LHS, m_UMax(m_Value(A), m_Value(B))) &&
3282              match(RHS, m_UMin(m_Value(C), m_Value(D))) &&
3283              (A == C || A == D || B == C || B == D)) {
3284     // max(x, ?) pred min(x, ?).
3285     if (Pred == CmpInst::ICMP_UGE)
3286       // Always true.
3287       return getTrue(ITy);
3288     if (Pred == CmpInst::ICMP_ULT)
3289       // Always false.
3290       return getFalse(ITy);
3291   } else if (match(LHS, m_UMin(m_Value(A), m_Value(B))) &&
3292              match(RHS, m_UMax(m_Value(C), m_Value(D))) &&
3293              (A == C || A == D || B == C || B == D)) {
3294     // min(x, ?) pred max(x, ?).
3295     if (Pred == CmpInst::ICMP_ULE)
3296       // Always true.
3297       return getTrue(ITy);
3298     if (Pred == CmpInst::ICMP_UGT)
3299       // Always false.
3300       return getFalse(ITy);
3301   }
3302 
3303   return nullptr;
3304 }
3305 
3306 /// Given operands for an ICmpInst, see if we can fold the result.
3307 /// If not, this returns null.
3308 static Value *SimplifyICmpInst(unsigned Predicate, Value *LHS, Value *RHS,
3309                                const SimplifyQuery &Q, unsigned MaxRecurse) {
3310   CmpInst::Predicate Pred = (CmpInst::Predicate)Predicate;
3311   assert(CmpInst::isIntPredicate(Pred) && "Not an integer compare!");
3312 
3313   if (Constant *CLHS = dyn_cast<Constant>(LHS)) {
3314     if (Constant *CRHS = dyn_cast<Constant>(RHS))
3315       return ConstantFoldCompareInstOperands(Pred, CLHS, CRHS, Q.DL, Q.TLI);
3316 
3317     // If we have a constant, make sure it is on the RHS.
3318     std::swap(LHS, RHS);
3319     Pred = CmpInst::getSwappedPredicate(Pred);
3320   }
3321 
3322   Type *ITy = GetCompareTy(LHS); // The return type.
3323 
3324   // icmp X, X -> true/false
3325   // icmp X, undef -> true/false because undef could be X.
3326   if (LHS == RHS || isa<UndefValue>(RHS))
3327     return ConstantInt::get(ITy, CmpInst::isTrueWhenEqual(Pred));
3328 
3329   if (Value *V = simplifyICmpOfBools(Pred, LHS, RHS, Q))
3330     return V;
3331 
3332   if (Value *V = simplifyICmpWithZero(Pred, LHS, RHS, Q))
3333     return V;
3334 
3335   if (Value *V = simplifyICmpWithConstant(Pred, LHS, RHS, Q.IIQ))
3336     return V;
3337 
3338   // If both operands have range metadata, use the metadata
3339   // to simplify the comparison.
3340   if (isa<Instruction>(RHS) && isa<Instruction>(LHS)) {
3341     auto RHS_Instr = cast<Instruction>(RHS);
3342     auto LHS_Instr = cast<Instruction>(LHS);
3343 
3344     if (Q.IIQ.getMetadata(RHS_Instr, LLVMContext::MD_range) &&
3345         Q.IIQ.getMetadata(LHS_Instr, LLVMContext::MD_range)) {
3346       auto RHS_CR = getConstantRangeFromMetadata(
3347           *RHS_Instr->getMetadata(LLVMContext::MD_range));
3348       auto LHS_CR = getConstantRangeFromMetadata(
3349           *LHS_Instr->getMetadata(LLVMContext::MD_range));
3350 
3351       auto Satisfied_CR = ConstantRange::makeSatisfyingICmpRegion(Pred, RHS_CR);
3352       if (Satisfied_CR.contains(LHS_CR))
3353         return ConstantInt::getTrue(RHS->getContext());
3354 
3355       auto InversedSatisfied_CR = ConstantRange::makeSatisfyingICmpRegion(
3356                 CmpInst::getInversePredicate(Pred), RHS_CR);
3357       if (InversedSatisfied_CR.contains(LHS_CR))
3358         return ConstantInt::getFalse(RHS->getContext());
3359     }
3360   }
3361 
3362   // Compare of cast, for example (zext X) != 0 -> X != 0
3363   if (isa<CastInst>(LHS) && (isa<Constant>(RHS) || isa<CastInst>(RHS))) {
3364     Instruction *LI = cast<CastInst>(LHS);
3365     Value *SrcOp = LI->getOperand(0);
3366     Type *SrcTy = SrcOp->getType();
3367     Type *DstTy = LI->getType();
3368 
3369     // Turn icmp (ptrtoint x), (ptrtoint/constant) into a compare of the input
3370     // if the integer type is the same size as the pointer type.
3371     if (MaxRecurse && isa<PtrToIntInst>(LI) &&
3372         Q.DL.getTypeSizeInBits(SrcTy) == DstTy->getPrimitiveSizeInBits()) {
3373       if (Constant *RHSC = dyn_cast<Constant>(RHS)) {
3374         // Transfer the cast to the constant.
3375         if (Value *V = SimplifyICmpInst(Pred, SrcOp,
3376                                         ConstantExpr::getIntToPtr(RHSC, SrcTy),
3377                                         Q, MaxRecurse-1))
3378           return V;
3379       } else if (PtrToIntInst *RI = dyn_cast<PtrToIntInst>(RHS)) {
3380         if (RI->getOperand(0)->getType() == SrcTy)
3381           // Compare without the cast.
3382           if (Value *V = SimplifyICmpInst(Pred, SrcOp, RI->getOperand(0),
3383                                           Q, MaxRecurse-1))
3384             return V;
3385       }
3386     }
3387 
3388     if (isa<ZExtInst>(LHS)) {
3389       // Turn icmp (zext X), (zext Y) into a compare of X and Y if they have the
3390       // same type.
3391       if (ZExtInst *RI = dyn_cast<ZExtInst>(RHS)) {
3392         if (MaxRecurse && SrcTy == RI->getOperand(0)->getType())
3393           // Compare X and Y.  Note that signed predicates become unsigned.
3394           if (Value *V = SimplifyICmpInst(ICmpInst::getUnsignedPredicate(Pred),
3395                                           SrcOp, RI->getOperand(0), Q,
3396                                           MaxRecurse-1))
3397             return V;
3398       }
3399       // Turn icmp (zext X), Cst into a compare of X and Cst if Cst is extended
3400       // too.  If not, then try to deduce the result of the comparison.
3401       else if (ConstantInt *CI = dyn_cast<ConstantInt>(RHS)) {
3402         // Compute the constant that would happen if we truncated to SrcTy then
3403         // reextended to DstTy.
3404         Constant *Trunc = ConstantExpr::getTrunc(CI, SrcTy);
3405         Constant *RExt = ConstantExpr::getCast(CastInst::ZExt, Trunc, DstTy);
3406 
3407         // If the re-extended constant didn't change then this is effectively
3408         // also a case of comparing two zero-extended values.
3409         if (RExt == CI && MaxRecurse)
3410           if (Value *V = SimplifyICmpInst(ICmpInst::getUnsignedPredicate(Pred),
3411                                         SrcOp, Trunc, Q, MaxRecurse-1))
3412             return V;
3413 
3414         // Otherwise the upper bits of LHS are zero while RHS has a non-zero bit
3415         // there.  Use this to work out the result of the comparison.
3416         if (RExt != CI) {
3417           switch (Pred) {
3418           default: llvm_unreachable("Unknown ICmp predicate!");
3419           // LHS <u RHS.
3420           case ICmpInst::ICMP_EQ:
3421           case ICmpInst::ICMP_UGT:
3422           case ICmpInst::ICMP_UGE:
3423             return ConstantInt::getFalse(CI->getContext());
3424 
3425           case ICmpInst::ICMP_NE:
3426           case ICmpInst::ICMP_ULT:
3427           case ICmpInst::ICMP_ULE:
3428             return ConstantInt::getTrue(CI->getContext());
3429 
3430           // LHS is non-negative.  If RHS is negative then LHS >s LHS.  If RHS
3431           // is non-negative then LHS <s RHS.
3432           case ICmpInst::ICMP_SGT:
3433           case ICmpInst::ICMP_SGE:
3434             return CI->getValue().isNegative() ?
3435               ConstantInt::getTrue(CI->getContext()) :
3436               ConstantInt::getFalse(CI->getContext());
3437 
3438           case ICmpInst::ICMP_SLT:
3439           case ICmpInst::ICMP_SLE:
3440             return CI->getValue().isNegative() ?
3441               ConstantInt::getFalse(CI->getContext()) :
3442               ConstantInt::getTrue(CI->getContext());
3443           }
3444         }
3445       }
3446     }
3447 
3448     if (isa<SExtInst>(LHS)) {
3449       // Turn icmp (sext X), (sext Y) into a compare of X and Y if they have the
3450       // same type.
3451       if (SExtInst *RI = dyn_cast<SExtInst>(RHS)) {
3452         if (MaxRecurse && SrcTy == RI->getOperand(0)->getType())
3453           // Compare X and Y.  Note that the predicate does not change.
3454           if (Value *V = SimplifyICmpInst(Pred, SrcOp, RI->getOperand(0),
3455                                           Q, MaxRecurse-1))
3456             return V;
3457       }
3458       // Turn icmp (sext X), Cst into a compare of X and Cst if Cst is extended
3459       // too.  If not, then try to deduce the result of the comparison.
3460       else if (ConstantInt *CI = dyn_cast<ConstantInt>(RHS)) {
3461         // Compute the constant that would happen if we truncated to SrcTy then
3462         // reextended to DstTy.
3463         Constant *Trunc = ConstantExpr::getTrunc(CI, SrcTy);
3464         Constant *RExt = ConstantExpr::getCast(CastInst::SExt, Trunc, DstTy);
3465 
3466         // If the re-extended constant didn't change then this is effectively
3467         // also a case of comparing two sign-extended values.
3468         if (RExt == CI && MaxRecurse)
3469           if (Value *V = SimplifyICmpInst(Pred, SrcOp, Trunc, Q, MaxRecurse-1))
3470             return V;
3471 
3472         // Otherwise the upper bits of LHS are all equal, while RHS has varying
3473         // bits there.  Use this to work out the result of the comparison.
3474         if (RExt != CI) {
3475           switch (Pred) {
3476           default: llvm_unreachable("Unknown ICmp predicate!");
3477           case ICmpInst::ICMP_EQ:
3478             return ConstantInt::getFalse(CI->getContext());
3479           case ICmpInst::ICMP_NE:
3480             return ConstantInt::getTrue(CI->getContext());
3481 
3482           // If RHS is non-negative then LHS <s RHS.  If RHS is negative then
3483           // LHS >s RHS.
3484           case ICmpInst::ICMP_SGT:
3485           case ICmpInst::ICMP_SGE:
3486             return CI->getValue().isNegative() ?
3487               ConstantInt::getTrue(CI->getContext()) :
3488               ConstantInt::getFalse(CI->getContext());
3489           case ICmpInst::ICMP_SLT:
3490           case ICmpInst::ICMP_SLE:
3491             return CI->getValue().isNegative() ?
3492               ConstantInt::getFalse(CI->getContext()) :
3493               ConstantInt::getTrue(CI->getContext());
3494 
3495           // If LHS is non-negative then LHS <u RHS.  If LHS is negative then
3496           // LHS >u RHS.
3497           case ICmpInst::ICMP_UGT:
3498           case ICmpInst::ICMP_UGE:
3499             // Comparison is true iff the LHS <s 0.
3500             if (MaxRecurse)
3501               if (Value *V = SimplifyICmpInst(ICmpInst::ICMP_SLT, SrcOp,
3502                                               Constant::getNullValue(SrcTy),
3503                                               Q, MaxRecurse-1))
3504                 return V;
3505             break;
3506           case ICmpInst::ICMP_ULT:
3507           case ICmpInst::ICMP_ULE:
3508             // Comparison is true iff the LHS >=s 0.
3509             if (MaxRecurse)
3510               if (Value *V = SimplifyICmpInst(ICmpInst::ICMP_SGE, SrcOp,
3511                                               Constant::getNullValue(SrcTy),
3512                                               Q, MaxRecurse-1))
3513                 return V;
3514             break;
3515           }
3516         }
3517       }
3518     }
3519   }
3520 
3521   // icmp eq|ne X, Y -> false|true if X != Y
3522   if (ICmpInst::isEquality(Pred) &&
3523       isKnownNonEqual(LHS, RHS, Q.DL, Q.AC, Q.CxtI, Q.DT, Q.IIQ.UseInstrInfo)) {
3524     return Pred == ICmpInst::ICMP_NE ? getTrue(ITy) : getFalse(ITy);
3525   }
3526 
3527   if (Value *V = simplifyICmpWithBinOp(Pred, LHS, RHS, Q, MaxRecurse))
3528     return V;
3529 
3530   if (Value *V = simplifyICmpWithMinMax(Pred, LHS, RHS, Q, MaxRecurse))
3531     return V;
3532 
3533   if (Value *V = simplifyICmpWithAbsNabs(Pred, LHS, RHS))
3534     return V;
3535 
3536   // Simplify comparisons of related pointers using a powerful, recursive
3537   // GEP-walk when we have target data available..
3538   if (LHS->getType()->isPointerTy())
3539     if (auto *C = computePointerICmp(Q.DL, Q.TLI, Q.DT, Pred, Q.AC, Q.CxtI,
3540                                      Q.IIQ, LHS, RHS))
3541       return C;
3542   if (auto *CLHS = dyn_cast<PtrToIntOperator>(LHS))
3543     if (auto *CRHS = dyn_cast<PtrToIntOperator>(RHS))
3544       if (Q.DL.getTypeSizeInBits(CLHS->getPointerOperandType()) ==
3545               Q.DL.getTypeSizeInBits(CLHS->getType()) &&
3546           Q.DL.getTypeSizeInBits(CRHS->getPointerOperandType()) ==
3547               Q.DL.getTypeSizeInBits(CRHS->getType()))
3548         if (auto *C = computePointerICmp(Q.DL, Q.TLI, Q.DT, Pred, Q.AC, Q.CxtI,
3549                                          Q.IIQ, CLHS->getPointerOperand(),
3550                                          CRHS->getPointerOperand()))
3551           return C;
3552 
3553   if (GetElementPtrInst *GLHS = dyn_cast<GetElementPtrInst>(LHS)) {
3554     if (GEPOperator *GRHS = dyn_cast<GEPOperator>(RHS)) {
3555       if (GLHS->getPointerOperand() == GRHS->getPointerOperand() &&
3556           GLHS->hasAllConstantIndices() && GRHS->hasAllConstantIndices() &&
3557           (ICmpInst::isEquality(Pred) ||
3558            (GLHS->isInBounds() && GRHS->isInBounds() &&
3559             Pred == ICmpInst::getSignedPredicate(Pred)))) {
3560         // The bases are equal and the indices are constant.  Build a constant
3561         // expression GEP with the same indices and a null base pointer to see
3562         // what constant folding can make out of it.
3563         Constant *Null = Constant::getNullValue(GLHS->getPointerOperandType());
3564         SmallVector<Value *, 4> IndicesLHS(GLHS->idx_begin(), GLHS->idx_end());
3565         Constant *NewLHS = ConstantExpr::getGetElementPtr(
3566             GLHS->getSourceElementType(), Null, IndicesLHS);
3567 
3568         SmallVector<Value *, 4> IndicesRHS(GRHS->idx_begin(), GRHS->idx_end());
3569         Constant *NewRHS = ConstantExpr::getGetElementPtr(
3570             GLHS->getSourceElementType(), Null, IndicesRHS);
3571         return ConstantExpr::getICmp(Pred, NewLHS, NewRHS);
3572       }
3573     }
3574   }
3575 
3576   // If the comparison is with the result of a select instruction, check whether
3577   // comparing with either branch of the select always yields the same value.
3578   if (isa<SelectInst>(LHS) || isa<SelectInst>(RHS))
3579     if (Value *V = ThreadCmpOverSelect(Pred, LHS, RHS, Q, MaxRecurse))
3580       return V;
3581 
3582   // If the comparison is with the result of a phi instruction, check whether
3583   // doing the compare with each incoming phi value yields a common result.
3584   if (isa<PHINode>(LHS) || isa<PHINode>(RHS))
3585     if (Value *V = ThreadCmpOverPHI(Pred, LHS, RHS, Q, MaxRecurse))
3586       return V;
3587 
3588   return nullptr;
3589 }
3590 
3591 Value *llvm::SimplifyICmpInst(unsigned Predicate, Value *LHS, Value *RHS,
3592                               const SimplifyQuery &Q) {
3593   return ::SimplifyICmpInst(Predicate, LHS, RHS, Q, RecursionLimit);
3594 }
3595 
3596 /// Given operands for an FCmpInst, see if we can fold the result.
3597 /// If not, this returns null.
3598 static Value *SimplifyFCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
3599                                FastMathFlags FMF, const SimplifyQuery &Q,
3600                                unsigned MaxRecurse) {
3601   CmpInst::Predicate Pred = (CmpInst::Predicate)Predicate;
3602   assert(CmpInst::isFPPredicate(Pred) && "Not an FP compare!");
3603 
3604   if (Constant *CLHS = dyn_cast<Constant>(LHS)) {
3605     if (Constant *CRHS = dyn_cast<Constant>(RHS))
3606       return ConstantFoldCompareInstOperands(Pred, CLHS, CRHS, Q.DL, Q.TLI);
3607 
3608     // If we have a constant, make sure it is on the RHS.
3609     std::swap(LHS, RHS);
3610     Pred = CmpInst::getSwappedPredicate(Pred);
3611   }
3612 
3613   // Fold trivial predicates.
3614   Type *RetTy = GetCompareTy(LHS);
3615   if (Pred == FCmpInst::FCMP_FALSE)
3616     return getFalse(RetTy);
3617   if (Pred == FCmpInst::FCMP_TRUE)
3618     return getTrue(RetTy);
3619 
3620   // Fold (un)ordered comparison if we can determine there are no NaNs.
3621   if (Pred == FCmpInst::FCMP_UNO || Pred == FCmpInst::FCMP_ORD)
3622     if (FMF.noNaNs() ||
3623         (isKnownNeverNaN(LHS, Q.TLI) && isKnownNeverNaN(RHS, Q.TLI)))
3624       return ConstantInt::get(RetTy, Pred == FCmpInst::FCMP_ORD);
3625 
3626   // NaN is unordered; NaN is not ordered.
3627   assert((FCmpInst::isOrdered(Pred) || FCmpInst::isUnordered(Pred)) &&
3628          "Comparison must be either ordered or unordered");
3629   if (match(RHS, m_NaN()))
3630     return ConstantInt::get(RetTy, CmpInst::isUnordered(Pred));
3631 
3632   // fcmp pred x, undef  and  fcmp pred undef, x
3633   // fold to true if unordered, false if ordered
3634   if (isa<UndefValue>(LHS) || isa<UndefValue>(RHS)) {
3635     // Choosing NaN for the undef will always make unordered comparison succeed
3636     // and ordered comparison fail.
3637     return ConstantInt::get(RetTy, CmpInst::isUnordered(Pred));
3638   }
3639 
3640   // fcmp x,x -> true/false.  Not all compares are foldable.
3641   if (LHS == RHS) {
3642     if (CmpInst::isTrueWhenEqual(Pred))
3643       return getTrue(RetTy);
3644     if (CmpInst::isFalseWhenEqual(Pred))
3645       return getFalse(RetTy);
3646   }
3647 
3648   // Handle fcmp with constant RHS.
3649   const APFloat *C;
3650   if (match(RHS, m_APFloat(C))) {
3651     // Check whether the constant is an infinity.
3652     if (C->isInfinity()) {
3653       if (C->isNegative()) {
3654         switch (Pred) {
3655         case FCmpInst::FCMP_OLT:
3656           // No value is ordered and less than negative infinity.
3657           return getFalse(RetTy);
3658         case FCmpInst::FCMP_UGE:
3659           // All values are unordered with or at least negative infinity.
3660           return getTrue(RetTy);
3661         default:
3662           break;
3663         }
3664       } else {
3665         switch (Pred) {
3666         case FCmpInst::FCMP_OGT:
3667           // No value is ordered and greater than infinity.
3668           return getFalse(RetTy);
3669         case FCmpInst::FCMP_ULE:
3670           // All values are unordered with and at most infinity.
3671           return getTrue(RetTy);
3672         default:
3673           break;
3674         }
3675       }
3676     }
3677     if (C->isZero()) {
3678       switch (Pred) {
3679       case FCmpInst::FCMP_OGE:
3680         if (FMF.noNaNs() && CannotBeOrderedLessThanZero(LHS, Q.TLI))
3681           return getTrue(RetTy);
3682         break;
3683       case FCmpInst::FCMP_UGE:
3684         if (CannotBeOrderedLessThanZero(LHS, Q.TLI))
3685           return getTrue(RetTy);
3686         break;
3687       case FCmpInst::FCMP_ULT:
3688         if (FMF.noNaNs() && CannotBeOrderedLessThanZero(LHS, Q.TLI))
3689           return getFalse(RetTy);
3690         break;
3691       case FCmpInst::FCMP_OLT:
3692         if (CannotBeOrderedLessThanZero(LHS, Q.TLI))
3693           return getFalse(RetTy);
3694         break;
3695       default:
3696         break;
3697       }
3698     } else if (C->isNegative()) {
3699       assert(!C->isNaN() && "Unexpected NaN constant!");
3700       // TODO: We can catch more cases by using a range check rather than
3701       //       relying on CannotBeOrderedLessThanZero.
3702       switch (Pred) {
3703       case FCmpInst::FCMP_UGE:
3704       case FCmpInst::FCMP_UGT:
3705       case FCmpInst::FCMP_UNE:
3706         // (X >= 0) implies (X > C) when (C < 0)
3707         if (CannotBeOrderedLessThanZero(LHS, Q.TLI))
3708           return getTrue(RetTy);
3709         break;
3710       case FCmpInst::FCMP_OEQ:
3711       case FCmpInst::FCMP_OLE:
3712       case FCmpInst::FCMP_OLT:
3713         // (X >= 0) implies !(X < C) when (C < 0)
3714         if (CannotBeOrderedLessThanZero(LHS, Q.TLI))
3715           return getFalse(RetTy);
3716         break;
3717       default:
3718         break;
3719       }
3720     }
3721   }
3722 
3723   // If the comparison is with the result of a select instruction, check whether
3724   // comparing with either branch of the select always yields the same value.
3725   if (isa<SelectInst>(LHS) || isa<SelectInst>(RHS))
3726     if (Value *V = ThreadCmpOverSelect(Pred, LHS, RHS, Q, MaxRecurse))
3727       return V;
3728 
3729   // If the comparison is with the result of a phi instruction, check whether
3730   // doing the compare with each incoming phi value yields a common result.
3731   if (isa<PHINode>(LHS) || isa<PHINode>(RHS))
3732     if (Value *V = ThreadCmpOverPHI(Pred, LHS, RHS, Q, MaxRecurse))
3733       return V;
3734 
3735   return nullptr;
3736 }
3737 
3738 Value *llvm::SimplifyFCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
3739                               FastMathFlags FMF, const SimplifyQuery &Q) {
3740   return ::SimplifyFCmpInst(Predicate, LHS, RHS, FMF, Q, RecursionLimit);
3741 }
3742 
3743 /// See if V simplifies when its operand Op is replaced with RepOp.
3744 static const Value *SimplifyWithOpReplaced(Value *V, Value *Op, Value *RepOp,
3745                                            const SimplifyQuery &Q,
3746                                            unsigned MaxRecurse) {
3747   // Trivial replacement.
3748   if (V == Op)
3749     return RepOp;
3750 
3751   // We cannot replace a constant, and shouldn't even try.
3752   if (isa<Constant>(Op))
3753     return nullptr;
3754 
3755   auto *I = dyn_cast<Instruction>(V);
3756   if (!I)
3757     return nullptr;
3758 
3759   // If this is a binary operator, try to simplify it with the replaced op.
3760   if (auto *B = dyn_cast<BinaryOperator>(I)) {
3761     // Consider:
3762     //   %cmp = icmp eq i32 %x, 2147483647
3763     //   %add = add nsw i32 %x, 1
3764     //   %sel = select i1 %cmp, i32 -2147483648, i32 %add
3765     //
3766     // We can't replace %sel with %add unless we strip away the flags.
3767     if (isa<OverflowingBinaryOperator>(B))
3768       if (Q.IIQ.hasNoSignedWrap(B) || Q.IIQ.hasNoUnsignedWrap(B))
3769         return nullptr;
3770     if (isa<PossiblyExactOperator>(B) && Q.IIQ.isExact(B))
3771       return nullptr;
3772 
3773     if (MaxRecurse) {
3774       if (B->getOperand(0) == Op)
3775         return SimplifyBinOp(B->getOpcode(), RepOp, B->getOperand(1), Q,
3776                              MaxRecurse - 1);
3777       if (B->getOperand(1) == Op)
3778         return SimplifyBinOp(B->getOpcode(), B->getOperand(0), RepOp, Q,
3779                              MaxRecurse - 1);
3780     }
3781   }
3782 
3783   // Same for CmpInsts.
3784   if (CmpInst *C = dyn_cast<CmpInst>(I)) {
3785     if (MaxRecurse) {
3786       if (C->getOperand(0) == Op)
3787         return SimplifyCmpInst(C->getPredicate(), RepOp, C->getOperand(1), Q,
3788                                MaxRecurse - 1);
3789       if (C->getOperand(1) == Op)
3790         return SimplifyCmpInst(C->getPredicate(), C->getOperand(0), RepOp, Q,
3791                                MaxRecurse - 1);
3792     }
3793   }
3794 
3795   // Same for GEPs.
3796   if (auto *GEP = dyn_cast<GetElementPtrInst>(I)) {
3797     if (MaxRecurse) {
3798       SmallVector<Value *, 8> NewOps(GEP->getNumOperands());
3799       transform(GEP->operands(), NewOps.begin(),
3800                 [&](Value *V) { return V == Op ? RepOp : V; });
3801       return SimplifyGEPInst(GEP->getSourceElementType(), NewOps, Q,
3802                              MaxRecurse - 1);
3803     }
3804   }
3805 
3806   // TODO: We could hand off more cases to instsimplify here.
3807 
3808   // If all operands are constant after substituting Op for RepOp then we can
3809   // constant fold the instruction.
3810   if (Constant *CRepOp = dyn_cast<Constant>(RepOp)) {
3811     // Build a list of all constant operands.
3812     SmallVector<Constant *, 8> ConstOps;
3813     for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) {
3814       if (I->getOperand(i) == Op)
3815         ConstOps.push_back(CRepOp);
3816       else if (Constant *COp = dyn_cast<Constant>(I->getOperand(i)))
3817         ConstOps.push_back(COp);
3818       else
3819         break;
3820     }
3821 
3822     // All operands were constants, fold it.
3823     if (ConstOps.size() == I->getNumOperands()) {
3824       if (CmpInst *C = dyn_cast<CmpInst>(I))
3825         return ConstantFoldCompareInstOperands(C->getPredicate(), ConstOps[0],
3826                                                ConstOps[1], Q.DL, Q.TLI);
3827 
3828       if (LoadInst *LI = dyn_cast<LoadInst>(I))
3829         if (!LI->isVolatile())
3830           return ConstantFoldLoadFromConstPtr(ConstOps[0], LI->getType(), Q.DL);
3831 
3832       return ConstantFoldInstOperands(I, ConstOps, Q.DL, Q.TLI);
3833     }
3834   }
3835 
3836   return nullptr;
3837 }
3838 
3839 /// Try to simplify a select instruction when its condition operand is an
3840 /// integer comparison where one operand of the compare is a constant.
3841 static Value *simplifySelectBitTest(Value *TrueVal, Value *FalseVal, Value *X,
3842                                     const APInt *Y, bool TrueWhenUnset) {
3843   const APInt *C;
3844 
3845   // (X & Y) == 0 ? X & ~Y : X  --> X
3846   // (X & Y) != 0 ? X & ~Y : X  --> X & ~Y
3847   if (FalseVal == X && match(TrueVal, m_And(m_Specific(X), m_APInt(C))) &&
3848       *Y == ~*C)
3849     return TrueWhenUnset ? FalseVal : TrueVal;
3850 
3851   // (X & Y) == 0 ? X : X & ~Y  --> X & ~Y
3852   // (X & Y) != 0 ? X : X & ~Y  --> X
3853   if (TrueVal == X && match(FalseVal, m_And(m_Specific(X), m_APInt(C))) &&
3854       *Y == ~*C)
3855     return TrueWhenUnset ? FalseVal : TrueVal;
3856 
3857   if (Y->isPowerOf2()) {
3858     // (X & Y) == 0 ? X | Y : X  --> X | Y
3859     // (X & Y) != 0 ? X | Y : X  --> X
3860     if (FalseVal == X && match(TrueVal, m_Or(m_Specific(X), m_APInt(C))) &&
3861         *Y == *C)
3862       return TrueWhenUnset ? TrueVal : FalseVal;
3863 
3864     // (X & Y) == 0 ? X : X | Y  --> X
3865     // (X & Y) != 0 ? X : X | Y  --> X | Y
3866     if (TrueVal == X && match(FalseVal, m_Or(m_Specific(X), m_APInt(C))) &&
3867         *Y == *C)
3868       return TrueWhenUnset ? TrueVal : FalseVal;
3869   }
3870 
3871   return nullptr;
3872 }
3873 
3874 /// An alternative way to test if a bit is set or not uses sgt/slt instead of
3875 /// eq/ne.
3876 static Value *simplifySelectWithFakeICmpEq(Value *CmpLHS, Value *CmpRHS,
3877                                            ICmpInst::Predicate Pred,
3878                                            Value *TrueVal, Value *FalseVal) {
3879   Value *X;
3880   APInt Mask;
3881   if (!decomposeBitTestICmp(CmpLHS, CmpRHS, Pred, X, Mask))
3882     return nullptr;
3883 
3884   return simplifySelectBitTest(TrueVal, FalseVal, X, &Mask,
3885                                Pred == ICmpInst::ICMP_EQ);
3886 }
3887 
3888 /// Try to simplify a select instruction when its condition operand is an
3889 /// integer comparison.
3890 static Value *simplifySelectWithICmpCond(Value *CondVal, Value *TrueVal,
3891                                          Value *FalseVal, const SimplifyQuery &Q,
3892                                          unsigned MaxRecurse) {
3893   ICmpInst::Predicate Pred;
3894   Value *CmpLHS, *CmpRHS;
3895   if (!match(CondVal, m_ICmp(Pred, m_Value(CmpLHS), m_Value(CmpRHS))))
3896     return nullptr;
3897 
3898   if (ICmpInst::isEquality(Pred) && match(CmpRHS, m_Zero())) {
3899     Value *X;
3900     const APInt *Y;
3901     if (match(CmpLHS, m_And(m_Value(X), m_APInt(Y))))
3902       if (Value *V = simplifySelectBitTest(TrueVal, FalseVal, X, Y,
3903                                            Pred == ICmpInst::ICMP_EQ))
3904         return V;
3905 
3906     // Test for zero-shift-guard-ops around funnel shifts. These are used to
3907     // avoid UB from oversized shifts in raw IR rotate patterns, but the
3908     // intrinsics do not have that problem.
3909     Value *ShAmt;
3910     auto isFsh = m_CombineOr(m_Intrinsic<Intrinsic::fshl>(m_Value(X), m_Value(),
3911                                                           m_Value(ShAmt)),
3912                              m_Intrinsic<Intrinsic::fshr>(m_Value(), m_Value(X),
3913                                                           m_Value(ShAmt)));
3914     // (ShAmt != 0) ? fshl(X, *, ShAmt) : X --> fshl(X, *, ShAmt)
3915     // (ShAmt != 0) ? fshr(*, X, ShAmt) : X --> fshr(*, X, ShAmt)
3916     // (ShAmt == 0) ? fshl(X, *, ShAmt) : X --> X
3917     // (ShAmt == 0) ? fshr(*, X, ShAmt) : X --> X
3918     if (match(TrueVal, isFsh) && FalseVal == X && CmpLHS == ShAmt)
3919       return Pred == ICmpInst::ICMP_NE ? TrueVal : X;
3920 
3921     // (ShAmt == 0) ? X : fshl(X, *, ShAmt) --> fshl(X, *, ShAmt)
3922     // (ShAmt == 0) ? X : fshr(*, X, ShAmt) --> fshr(*, X, ShAmt)
3923     // (ShAmt != 0) ? X : fshl(X, *, ShAmt) --> X
3924     // (ShAmt != 0) ? X : fshr(*, X, ShAmt) --> X
3925     if (match(FalseVal, isFsh) && TrueVal == X && CmpLHS == ShAmt)
3926       return Pred == ICmpInst::ICMP_EQ ? FalseVal : X;
3927   }
3928 
3929   // Check for other compares that behave like bit test.
3930   if (Value *V = simplifySelectWithFakeICmpEq(CmpLHS, CmpRHS, Pred,
3931                                               TrueVal, FalseVal))
3932     return V;
3933 
3934   // If we have an equality comparison, then we know the value in one of the
3935   // arms of the select. See if substituting this value into the arm and
3936   // simplifying the result yields the same value as the other arm.
3937   if (Pred == ICmpInst::ICMP_EQ) {
3938     if (SimplifyWithOpReplaced(FalseVal, CmpLHS, CmpRHS, Q, MaxRecurse) ==
3939             TrueVal ||
3940         SimplifyWithOpReplaced(FalseVal, CmpRHS, CmpLHS, Q, MaxRecurse) ==
3941             TrueVal)
3942       return FalseVal;
3943     if (SimplifyWithOpReplaced(TrueVal, CmpLHS, CmpRHS, Q, MaxRecurse) ==
3944             FalseVal ||
3945         SimplifyWithOpReplaced(TrueVal, CmpRHS, CmpLHS, Q, MaxRecurse) ==
3946             FalseVal)
3947       return FalseVal;
3948   } else if (Pred == ICmpInst::ICMP_NE) {
3949     if (SimplifyWithOpReplaced(TrueVal, CmpLHS, CmpRHS, Q, MaxRecurse) ==
3950             FalseVal ||
3951         SimplifyWithOpReplaced(TrueVal, CmpRHS, CmpLHS, Q, MaxRecurse) ==
3952             FalseVal)
3953       return TrueVal;
3954     if (SimplifyWithOpReplaced(FalseVal, CmpLHS, CmpRHS, Q, MaxRecurse) ==
3955             TrueVal ||
3956         SimplifyWithOpReplaced(FalseVal, CmpRHS, CmpLHS, Q, MaxRecurse) ==
3957             TrueVal)
3958       return TrueVal;
3959   }
3960 
3961   return nullptr;
3962 }
3963 
3964 /// Try to simplify a select instruction when its condition operand is a
3965 /// floating-point comparison.
3966 static Value *simplifySelectWithFCmp(Value *Cond, Value *T, Value *F) {
3967   FCmpInst::Predicate Pred;
3968   if (!match(Cond, m_FCmp(Pred, m_Specific(T), m_Specific(F))) &&
3969       !match(Cond, m_FCmp(Pred, m_Specific(F), m_Specific(T))))
3970     return nullptr;
3971 
3972   // TODO: The transform may not be valid with -0.0. An incomplete way of
3973   // testing for that possibility is to check if at least one operand is a
3974   // non-zero constant.
3975   const APFloat *C;
3976   if ((match(T, m_APFloat(C)) && C->isNonZero()) ||
3977       (match(F, m_APFloat(C)) && C->isNonZero())) {
3978     // (T == F) ? T : F --> F
3979     // (F == T) ? T : F --> F
3980     if (Pred == FCmpInst::FCMP_OEQ)
3981       return F;
3982 
3983     // (T != F) ? T : F --> T
3984     // (F != T) ? T : F --> T
3985     if (Pred == FCmpInst::FCMP_UNE)
3986       return T;
3987   }
3988 
3989   return nullptr;
3990 }
3991 
3992 /// Given operands for a SelectInst, see if we can fold the result.
3993 /// If not, this returns null.
3994 static Value *SimplifySelectInst(Value *Cond, Value *TrueVal, Value *FalseVal,
3995                                  const SimplifyQuery &Q, unsigned MaxRecurse) {
3996   if (auto *CondC = dyn_cast<Constant>(Cond)) {
3997     if (auto *TrueC = dyn_cast<Constant>(TrueVal))
3998       if (auto *FalseC = dyn_cast<Constant>(FalseVal))
3999         return ConstantFoldSelectInstruction(CondC, TrueC, FalseC);
4000 
4001     // select undef, X, Y -> X or Y
4002     if (isa<UndefValue>(CondC))
4003       return isa<Constant>(FalseVal) ? FalseVal : TrueVal;
4004 
4005     // TODO: Vector constants with undef elements don't simplify.
4006 
4007     // select true, X, Y  -> X
4008     if (CondC->isAllOnesValue())
4009       return TrueVal;
4010     // select false, X, Y -> Y
4011     if (CondC->isNullValue())
4012       return FalseVal;
4013   }
4014 
4015   // select ?, X, X -> X
4016   if (TrueVal == FalseVal)
4017     return TrueVal;
4018 
4019   if (isa<UndefValue>(TrueVal))   // select ?, undef, X -> X
4020     return FalseVal;
4021   if (isa<UndefValue>(FalseVal))   // select ?, X, undef -> X
4022     return TrueVal;
4023 
4024   if (Value *V =
4025           simplifySelectWithICmpCond(Cond, TrueVal, FalseVal, Q, MaxRecurse))
4026     return V;
4027 
4028   if (Value *V = simplifySelectWithFCmp(Cond, TrueVal, FalseVal))
4029     return V;
4030 
4031   if (Value *V = foldSelectWithBinaryOp(Cond, TrueVal, FalseVal))
4032     return V;
4033 
4034   Optional<bool> Imp = isImpliedByDomCondition(Cond, Q.CxtI, Q.DL);
4035   if (Imp)
4036     return *Imp ? TrueVal : FalseVal;
4037 
4038   return nullptr;
4039 }
4040 
4041 Value *llvm::SimplifySelectInst(Value *Cond, Value *TrueVal, Value *FalseVal,
4042                                 const SimplifyQuery &Q) {
4043   return ::SimplifySelectInst(Cond, TrueVal, FalseVal, Q, RecursionLimit);
4044 }
4045 
4046 /// Given operands for an GetElementPtrInst, see if we can fold the result.
4047 /// If not, this returns null.
4048 static Value *SimplifyGEPInst(Type *SrcTy, ArrayRef<Value *> Ops,
4049                               const SimplifyQuery &Q, unsigned) {
4050   // The type of the GEP pointer operand.
4051   unsigned AS =
4052       cast<PointerType>(Ops[0]->getType()->getScalarType())->getAddressSpace();
4053 
4054   // getelementptr P -> P.
4055   if (Ops.size() == 1)
4056     return Ops[0];
4057 
4058   // Compute the (pointer) type returned by the GEP instruction.
4059   Type *LastType = GetElementPtrInst::getIndexedType(SrcTy, Ops.slice(1));
4060   Type *GEPTy = PointerType::get(LastType, AS);
4061   if (VectorType *VT = dyn_cast<VectorType>(Ops[0]->getType()))
4062     GEPTy = VectorType::get(GEPTy, VT->getNumElements());
4063   else if (VectorType *VT = dyn_cast<VectorType>(Ops[1]->getType()))
4064     GEPTy = VectorType::get(GEPTy, VT->getNumElements());
4065 
4066   if (isa<UndefValue>(Ops[0]))
4067     return UndefValue::get(GEPTy);
4068 
4069   if (Ops.size() == 2) {
4070     // getelementptr P, 0 -> P.
4071     if (match(Ops[1], m_Zero()) && Ops[0]->getType() == GEPTy)
4072       return Ops[0];
4073 
4074     Type *Ty = SrcTy;
4075     if (Ty->isSized()) {
4076       Value *P;
4077       uint64_t C;
4078       uint64_t TyAllocSize = Q.DL.getTypeAllocSize(Ty);
4079       // getelementptr P, N -> P if P points to a type of zero size.
4080       if (TyAllocSize == 0 && Ops[0]->getType() == GEPTy)
4081         return Ops[0];
4082 
4083       // The following transforms are only safe if the ptrtoint cast
4084       // doesn't truncate the pointers.
4085       if (Ops[1]->getType()->getScalarSizeInBits() ==
4086           Q.DL.getIndexSizeInBits(AS)) {
4087         auto PtrToIntOrZero = [GEPTy](Value *P) -> Value * {
4088           if (match(P, m_Zero()))
4089             return Constant::getNullValue(GEPTy);
4090           Value *Temp;
4091           if (match(P, m_PtrToInt(m_Value(Temp))))
4092             if (Temp->getType() == GEPTy)
4093               return Temp;
4094           return nullptr;
4095         };
4096 
4097         // getelementptr V, (sub P, V) -> P if P points to a type of size 1.
4098         if (TyAllocSize == 1 &&
4099             match(Ops[1], m_Sub(m_Value(P), m_PtrToInt(m_Specific(Ops[0])))))
4100           if (Value *R = PtrToIntOrZero(P))
4101             return R;
4102 
4103         // getelementptr V, (ashr (sub P, V), C) -> Q
4104         // if P points to a type of size 1 << C.
4105         if (match(Ops[1],
4106                   m_AShr(m_Sub(m_Value(P), m_PtrToInt(m_Specific(Ops[0]))),
4107                          m_ConstantInt(C))) &&
4108             TyAllocSize == 1ULL << C)
4109           if (Value *R = PtrToIntOrZero(P))
4110             return R;
4111 
4112         // getelementptr V, (sdiv (sub P, V), C) -> Q
4113         // if P points to a type of size C.
4114         if (match(Ops[1],
4115                   m_SDiv(m_Sub(m_Value(P), m_PtrToInt(m_Specific(Ops[0]))),
4116                          m_SpecificInt(TyAllocSize))))
4117           if (Value *R = PtrToIntOrZero(P))
4118             return R;
4119       }
4120     }
4121   }
4122 
4123   if (Q.DL.getTypeAllocSize(LastType) == 1 &&
4124       all_of(Ops.slice(1).drop_back(1),
4125              [](Value *Idx) { return match(Idx, m_Zero()); })) {
4126     unsigned IdxWidth =
4127         Q.DL.getIndexSizeInBits(Ops[0]->getType()->getPointerAddressSpace());
4128     if (Q.DL.getTypeSizeInBits(Ops.back()->getType()) == IdxWidth) {
4129       APInt BasePtrOffset(IdxWidth, 0);
4130       Value *StrippedBasePtr =
4131           Ops[0]->stripAndAccumulateInBoundsConstantOffsets(Q.DL,
4132                                                             BasePtrOffset);
4133 
4134       // gep (gep V, C), (sub 0, V) -> C
4135       if (match(Ops.back(),
4136                 m_Sub(m_Zero(), m_PtrToInt(m_Specific(StrippedBasePtr))))) {
4137         auto *CI = ConstantInt::get(GEPTy->getContext(), BasePtrOffset);
4138         return ConstantExpr::getIntToPtr(CI, GEPTy);
4139       }
4140       // gep (gep V, C), (xor V, -1) -> C-1
4141       if (match(Ops.back(),
4142                 m_Xor(m_PtrToInt(m_Specific(StrippedBasePtr)), m_AllOnes()))) {
4143         auto *CI = ConstantInt::get(GEPTy->getContext(), BasePtrOffset - 1);
4144         return ConstantExpr::getIntToPtr(CI, GEPTy);
4145       }
4146     }
4147   }
4148 
4149   // Check to see if this is constant foldable.
4150   if (!all_of(Ops, [](Value *V) { return isa<Constant>(V); }))
4151     return nullptr;
4152 
4153   auto *CE = ConstantExpr::getGetElementPtr(SrcTy, cast<Constant>(Ops[0]),
4154                                             Ops.slice(1));
4155   if (auto *CEFolded = ConstantFoldConstant(CE, Q.DL))
4156     return CEFolded;
4157   return CE;
4158 }
4159 
4160 Value *llvm::SimplifyGEPInst(Type *SrcTy, ArrayRef<Value *> Ops,
4161                              const SimplifyQuery &Q) {
4162   return ::SimplifyGEPInst(SrcTy, Ops, Q, RecursionLimit);
4163 }
4164 
4165 /// Given operands for an InsertValueInst, see if we can fold the result.
4166 /// If not, this returns null.
4167 static Value *SimplifyInsertValueInst(Value *Agg, Value *Val,
4168                                       ArrayRef<unsigned> Idxs, const SimplifyQuery &Q,
4169                                       unsigned) {
4170   if (Constant *CAgg = dyn_cast<Constant>(Agg))
4171     if (Constant *CVal = dyn_cast<Constant>(Val))
4172       return ConstantFoldInsertValueInstruction(CAgg, CVal, Idxs);
4173 
4174   // insertvalue x, undef, n -> x
4175   if (match(Val, m_Undef()))
4176     return Agg;
4177 
4178   // insertvalue x, (extractvalue y, n), n
4179   if (ExtractValueInst *EV = dyn_cast<ExtractValueInst>(Val))
4180     if (EV->getAggregateOperand()->getType() == Agg->getType() &&
4181         EV->getIndices() == Idxs) {
4182       // insertvalue undef, (extractvalue y, n), n -> y
4183       if (match(Agg, m_Undef()))
4184         return EV->getAggregateOperand();
4185 
4186       // insertvalue y, (extractvalue y, n), n -> y
4187       if (Agg == EV->getAggregateOperand())
4188         return Agg;
4189     }
4190 
4191   return nullptr;
4192 }
4193 
4194 Value *llvm::SimplifyInsertValueInst(Value *Agg, Value *Val,
4195                                      ArrayRef<unsigned> Idxs,
4196                                      const SimplifyQuery &Q) {
4197   return ::SimplifyInsertValueInst(Agg, Val, Idxs, Q, RecursionLimit);
4198 }
4199 
4200 Value *llvm::SimplifyInsertElementInst(Value *Vec, Value *Val, Value *Idx,
4201                                        const SimplifyQuery &Q) {
4202   // Try to constant fold.
4203   auto *VecC = dyn_cast<Constant>(Vec);
4204   auto *ValC = dyn_cast<Constant>(Val);
4205   auto *IdxC = dyn_cast<Constant>(Idx);
4206   if (VecC && ValC && IdxC)
4207     return ConstantFoldInsertElementInstruction(VecC, ValC, IdxC);
4208 
4209   // Fold into undef if index is out of bounds.
4210   if (auto *CI = dyn_cast<ConstantInt>(Idx)) {
4211     uint64_t NumElements = cast<VectorType>(Vec->getType())->getNumElements();
4212     if (CI->uge(NumElements))
4213       return UndefValue::get(Vec->getType());
4214   }
4215 
4216   // If index is undef, it might be out of bounds (see above case)
4217   if (isa<UndefValue>(Idx))
4218     return UndefValue::get(Vec->getType());
4219 
4220   return nullptr;
4221 }
4222 
4223 /// Given operands for an ExtractValueInst, see if we can fold the result.
4224 /// If not, this returns null.
4225 static Value *SimplifyExtractValueInst(Value *Agg, ArrayRef<unsigned> Idxs,
4226                                        const SimplifyQuery &, unsigned) {
4227   if (auto *CAgg = dyn_cast<Constant>(Agg))
4228     return ConstantFoldExtractValueInstruction(CAgg, Idxs);
4229 
4230   // extractvalue x, (insertvalue y, elt, n), n -> elt
4231   unsigned NumIdxs = Idxs.size();
4232   for (auto *IVI = dyn_cast<InsertValueInst>(Agg); IVI != nullptr;
4233        IVI = dyn_cast<InsertValueInst>(IVI->getAggregateOperand())) {
4234     ArrayRef<unsigned> InsertValueIdxs = IVI->getIndices();
4235     unsigned NumInsertValueIdxs = InsertValueIdxs.size();
4236     unsigned NumCommonIdxs = std::min(NumInsertValueIdxs, NumIdxs);
4237     if (InsertValueIdxs.slice(0, NumCommonIdxs) ==
4238         Idxs.slice(0, NumCommonIdxs)) {
4239       if (NumIdxs == NumInsertValueIdxs)
4240         return IVI->getInsertedValueOperand();
4241       break;
4242     }
4243   }
4244 
4245   return nullptr;
4246 }
4247 
4248 Value *llvm::SimplifyExtractValueInst(Value *Agg, ArrayRef<unsigned> Idxs,
4249                                       const SimplifyQuery &Q) {
4250   return ::SimplifyExtractValueInst(Agg, Idxs, Q, RecursionLimit);
4251 }
4252 
4253 /// Given operands for an ExtractElementInst, see if we can fold the result.
4254 /// If not, this returns null.
4255 static Value *SimplifyExtractElementInst(Value *Vec, Value *Idx, const SimplifyQuery &,
4256                                          unsigned) {
4257   if (auto *CVec = dyn_cast<Constant>(Vec)) {
4258     if (auto *CIdx = dyn_cast<Constant>(Idx))
4259       return ConstantFoldExtractElementInstruction(CVec, CIdx);
4260 
4261     // The index is not relevant if our vector is a splat.
4262     if (auto *Splat = CVec->getSplatValue())
4263       return Splat;
4264 
4265     if (isa<UndefValue>(Vec))
4266       return UndefValue::get(Vec->getType()->getVectorElementType());
4267   }
4268 
4269   // If extracting a specified index from the vector, see if we can recursively
4270   // find a previously computed scalar that was inserted into the vector.
4271   if (auto *IdxC = dyn_cast<ConstantInt>(Idx)) {
4272     if (IdxC->getValue().uge(Vec->getType()->getVectorNumElements()))
4273       // definitely out of bounds, thus undefined result
4274       return UndefValue::get(Vec->getType()->getVectorElementType());
4275     if (Value *Elt = findScalarElement(Vec, IdxC->getZExtValue()))
4276       return Elt;
4277   }
4278 
4279   // An undef extract index can be arbitrarily chosen to be an out-of-range
4280   // index value, which would result in the instruction being undef.
4281   if (isa<UndefValue>(Idx))
4282     return UndefValue::get(Vec->getType()->getVectorElementType());
4283 
4284   return nullptr;
4285 }
4286 
4287 Value *llvm::SimplifyExtractElementInst(Value *Vec, Value *Idx,
4288                                         const SimplifyQuery &Q) {
4289   return ::SimplifyExtractElementInst(Vec, Idx, Q, RecursionLimit);
4290 }
4291 
4292 /// See if we can fold the given phi. If not, returns null.
4293 static Value *SimplifyPHINode(PHINode *PN, const SimplifyQuery &Q) {
4294   // If all of the PHI's incoming values are the same then replace the PHI node
4295   // with the common value.
4296   Value *CommonValue = nullptr;
4297   bool HasUndefInput = false;
4298   for (Value *Incoming : PN->incoming_values()) {
4299     // If the incoming value is the phi node itself, it can safely be skipped.
4300     if (Incoming == PN) continue;
4301     if (isa<UndefValue>(Incoming)) {
4302       // Remember that we saw an undef value, but otherwise ignore them.
4303       HasUndefInput = true;
4304       continue;
4305     }
4306     if (CommonValue && Incoming != CommonValue)
4307       return nullptr;  // Not the same, bail out.
4308     CommonValue = Incoming;
4309   }
4310 
4311   // If CommonValue is null then all of the incoming values were either undef or
4312   // equal to the phi node itself.
4313   if (!CommonValue)
4314     return UndefValue::get(PN->getType());
4315 
4316   // If we have a PHI node like phi(X, undef, X), where X is defined by some
4317   // instruction, we cannot return X as the result of the PHI node unless it
4318   // dominates the PHI block.
4319   if (HasUndefInput)
4320     return valueDominatesPHI(CommonValue, PN, Q.DT) ? CommonValue : nullptr;
4321 
4322   return CommonValue;
4323 }
4324 
4325 static Value *SimplifyCastInst(unsigned CastOpc, Value *Op,
4326                                Type *Ty, const SimplifyQuery &Q, unsigned MaxRecurse) {
4327   if (auto *C = dyn_cast<Constant>(Op))
4328     return ConstantFoldCastOperand(CastOpc, C, Ty, Q.DL);
4329 
4330   if (auto *CI = dyn_cast<CastInst>(Op)) {
4331     auto *Src = CI->getOperand(0);
4332     Type *SrcTy = Src->getType();
4333     Type *MidTy = CI->getType();
4334     Type *DstTy = Ty;
4335     if (Src->getType() == Ty) {
4336       auto FirstOp = static_cast<Instruction::CastOps>(CI->getOpcode());
4337       auto SecondOp = static_cast<Instruction::CastOps>(CastOpc);
4338       Type *SrcIntPtrTy =
4339           SrcTy->isPtrOrPtrVectorTy() ? Q.DL.getIntPtrType(SrcTy) : nullptr;
4340       Type *MidIntPtrTy =
4341           MidTy->isPtrOrPtrVectorTy() ? Q.DL.getIntPtrType(MidTy) : nullptr;
4342       Type *DstIntPtrTy =
4343           DstTy->isPtrOrPtrVectorTy() ? Q.DL.getIntPtrType(DstTy) : nullptr;
4344       if (CastInst::isEliminableCastPair(FirstOp, SecondOp, SrcTy, MidTy, DstTy,
4345                                          SrcIntPtrTy, MidIntPtrTy,
4346                                          DstIntPtrTy) == Instruction::BitCast)
4347         return Src;
4348     }
4349   }
4350 
4351   // bitcast x -> x
4352   if (CastOpc == Instruction::BitCast)
4353     if (Op->getType() == Ty)
4354       return Op;
4355 
4356   return nullptr;
4357 }
4358 
4359 Value *llvm::SimplifyCastInst(unsigned CastOpc, Value *Op, Type *Ty,
4360                               const SimplifyQuery &Q) {
4361   return ::SimplifyCastInst(CastOpc, Op, Ty, Q, RecursionLimit);
4362 }
4363 
4364 /// For the given destination element of a shuffle, peek through shuffles to
4365 /// match a root vector source operand that contains that element in the same
4366 /// vector lane (ie, the same mask index), so we can eliminate the shuffle(s).
4367 static Value *foldIdentityShuffles(int DestElt, Value *Op0, Value *Op1,
4368                                    int MaskVal, Value *RootVec,
4369                                    unsigned MaxRecurse) {
4370   if (!MaxRecurse--)
4371     return nullptr;
4372 
4373   // Bail out if any mask value is undefined. That kind of shuffle may be
4374   // simplified further based on demanded bits or other folds.
4375   if (MaskVal == -1)
4376     return nullptr;
4377 
4378   // The mask value chooses which source operand we need to look at next.
4379   int InVecNumElts = Op0->getType()->getVectorNumElements();
4380   int RootElt = MaskVal;
4381   Value *SourceOp = Op0;
4382   if (MaskVal >= InVecNumElts) {
4383     RootElt = MaskVal - InVecNumElts;
4384     SourceOp = Op1;
4385   }
4386 
4387   // If the source operand is a shuffle itself, look through it to find the
4388   // matching root vector.
4389   if (auto *SourceShuf = dyn_cast<ShuffleVectorInst>(SourceOp)) {
4390     return foldIdentityShuffles(
4391         DestElt, SourceShuf->getOperand(0), SourceShuf->getOperand(1),
4392         SourceShuf->getMaskValue(RootElt), RootVec, MaxRecurse);
4393   }
4394 
4395   // TODO: Look through bitcasts? What if the bitcast changes the vector element
4396   // size?
4397 
4398   // The source operand is not a shuffle. Initialize the root vector value for
4399   // this shuffle if that has not been done yet.
4400   if (!RootVec)
4401     RootVec = SourceOp;
4402 
4403   // Give up as soon as a source operand does not match the existing root value.
4404   if (RootVec != SourceOp)
4405     return nullptr;
4406 
4407   // The element must be coming from the same lane in the source vector
4408   // (although it may have crossed lanes in intermediate shuffles).
4409   if (RootElt != DestElt)
4410     return nullptr;
4411 
4412   return RootVec;
4413 }
4414 
4415 static Value *SimplifyShuffleVectorInst(Value *Op0, Value *Op1, Constant *Mask,
4416                                         Type *RetTy, const SimplifyQuery &Q,
4417                                         unsigned MaxRecurse) {
4418   if (isa<UndefValue>(Mask))
4419     return UndefValue::get(RetTy);
4420 
4421   Type *InVecTy = Op0->getType();
4422   unsigned MaskNumElts = Mask->getType()->getVectorNumElements();
4423   unsigned InVecNumElts = InVecTy->getVectorNumElements();
4424 
4425   SmallVector<int, 32> Indices;
4426   ShuffleVectorInst::getShuffleMask(Mask, Indices);
4427   assert(MaskNumElts == Indices.size() &&
4428          "Size of Indices not same as number of mask elements?");
4429 
4430   // Canonicalization: If mask does not select elements from an input vector,
4431   // replace that input vector with undef.
4432   bool MaskSelects0 = false, MaskSelects1 = false;
4433   for (unsigned i = 0; i != MaskNumElts; ++i) {
4434     if (Indices[i] == -1)
4435       continue;
4436     if ((unsigned)Indices[i] < InVecNumElts)
4437       MaskSelects0 = true;
4438     else
4439       MaskSelects1 = true;
4440   }
4441   if (!MaskSelects0)
4442     Op0 = UndefValue::get(InVecTy);
4443   if (!MaskSelects1)
4444     Op1 = UndefValue::get(InVecTy);
4445 
4446   auto *Op0Const = dyn_cast<Constant>(Op0);
4447   auto *Op1Const = dyn_cast<Constant>(Op1);
4448 
4449   // If all operands are constant, constant fold the shuffle.
4450   if (Op0Const && Op1Const)
4451     return ConstantFoldShuffleVectorInstruction(Op0Const, Op1Const, Mask);
4452 
4453   // Canonicalization: if only one input vector is constant, it shall be the
4454   // second one.
4455   if (Op0Const && !Op1Const) {
4456     std::swap(Op0, Op1);
4457     ShuffleVectorInst::commuteShuffleMask(Indices, InVecNumElts);
4458   }
4459 
4460   // A shuffle of a splat is always the splat itself. Legal if the shuffle's
4461   // value type is same as the input vectors' type.
4462   if (auto *OpShuf = dyn_cast<ShuffleVectorInst>(Op0))
4463     if (isa<UndefValue>(Op1) && RetTy == InVecTy &&
4464         OpShuf->getMask()->getSplatValue())
4465       return Op0;
4466 
4467   // Don't fold a shuffle with undef mask elements. This may get folded in a
4468   // better way using demanded bits or other analysis.
4469   // TODO: Should we allow this?
4470   if (find(Indices, -1) != Indices.end())
4471     return nullptr;
4472 
4473   // Check if every element of this shuffle can be mapped back to the
4474   // corresponding element of a single root vector. If so, we don't need this
4475   // shuffle. This handles simple identity shuffles as well as chains of
4476   // shuffles that may widen/narrow and/or move elements across lanes and back.
4477   Value *RootVec = nullptr;
4478   for (unsigned i = 0; i != MaskNumElts; ++i) {
4479     // Note that recursion is limited for each vector element, so if any element
4480     // exceeds the limit, this will fail to simplify.
4481     RootVec =
4482         foldIdentityShuffles(i, Op0, Op1, Indices[i], RootVec, MaxRecurse);
4483 
4484     // We can't replace a widening/narrowing shuffle with one of its operands.
4485     if (!RootVec || RootVec->getType() != RetTy)
4486       return nullptr;
4487   }
4488   return RootVec;
4489 }
4490 
4491 /// Given operands for a ShuffleVectorInst, fold the result or return null.
4492 Value *llvm::SimplifyShuffleVectorInst(Value *Op0, Value *Op1, Constant *Mask,
4493                                        Type *RetTy, const SimplifyQuery &Q) {
4494   return ::SimplifyShuffleVectorInst(Op0, Op1, Mask, RetTy, Q, RecursionLimit);
4495 }
4496 
4497 static Constant *propagateNaN(Constant *In) {
4498   // If the input is a vector with undef elements, just return a default NaN.
4499   if (!In->isNaN())
4500     return ConstantFP::getNaN(In->getType());
4501 
4502   // Propagate the existing NaN constant when possible.
4503   // TODO: Should we quiet a signaling NaN?
4504   return In;
4505 }
4506 
4507 static Constant *simplifyFPBinop(Value *Op0, Value *Op1) {
4508   if (isa<UndefValue>(Op0) || isa<UndefValue>(Op1))
4509     return ConstantFP::getNaN(Op0->getType());
4510 
4511   if (match(Op0, m_NaN()))
4512     return propagateNaN(cast<Constant>(Op0));
4513   if (match(Op1, m_NaN()))
4514     return propagateNaN(cast<Constant>(Op1));
4515 
4516   return nullptr;
4517 }
4518 
4519 /// Given operands for an FAdd, see if we can fold the result.  If not, this
4520 /// returns null.
4521 static Value *SimplifyFAddInst(Value *Op0, Value *Op1, FastMathFlags FMF,
4522                                const SimplifyQuery &Q, unsigned MaxRecurse) {
4523   if (Constant *C = foldOrCommuteConstant(Instruction::FAdd, Op0, Op1, Q))
4524     return C;
4525 
4526   if (Constant *C = simplifyFPBinop(Op0, Op1))
4527     return C;
4528 
4529   // fadd X, -0 ==> X
4530   if (match(Op1, m_NegZeroFP()))
4531     return Op0;
4532 
4533   // fadd X, 0 ==> X, when we know X is not -0
4534   if (match(Op1, m_PosZeroFP()) &&
4535       (FMF.noSignedZeros() || CannotBeNegativeZero(Op0, Q.TLI)))
4536     return Op0;
4537 
4538   // With nnan: (+/-0.0 - X) + X --> 0.0 (and commuted variant)
4539   // We don't have to explicitly exclude infinities (ninf): INF + -INF == NaN.
4540   // Negative zeros are allowed because we always end up with positive zero:
4541   // X = -0.0: (-0.0 - (-0.0)) + (-0.0) == ( 0.0) + (-0.0) == 0.0
4542   // X = -0.0: ( 0.0 - (-0.0)) + (-0.0) == ( 0.0) + (-0.0) == 0.0
4543   // X =  0.0: (-0.0 - ( 0.0)) + ( 0.0) == (-0.0) + ( 0.0) == 0.0
4544   // X =  0.0: ( 0.0 - ( 0.0)) + ( 0.0) == ( 0.0) + ( 0.0) == 0.0
4545   if (FMF.noNaNs() && (match(Op0, m_FSub(m_AnyZeroFP(), m_Specific(Op1))) ||
4546                        match(Op1, m_FSub(m_AnyZeroFP(), m_Specific(Op0)))))
4547     return ConstantFP::getNullValue(Op0->getType());
4548 
4549   // (X - Y) + Y --> X
4550   // Y + (X - Y) --> X
4551   Value *X;
4552   if (FMF.noSignedZeros() && FMF.allowReassoc() &&
4553       (match(Op0, m_FSub(m_Value(X), m_Specific(Op1))) ||
4554        match(Op1, m_FSub(m_Value(X), m_Specific(Op0)))))
4555     return X;
4556 
4557   return nullptr;
4558 }
4559 
4560 /// Given operands for an FSub, see if we can fold the result.  If not, this
4561 /// returns null.
4562 static Value *SimplifyFSubInst(Value *Op0, Value *Op1, FastMathFlags FMF,
4563                                const SimplifyQuery &Q, unsigned MaxRecurse) {
4564   if (Constant *C = foldOrCommuteConstant(Instruction::FSub, Op0, Op1, Q))
4565     return C;
4566 
4567   if (Constant *C = simplifyFPBinop(Op0, Op1))
4568     return C;
4569 
4570   // fsub X, +0 ==> X
4571   if (match(Op1, m_PosZeroFP()))
4572     return Op0;
4573 
4574   // fsub X, -0 ==> X, when we know X is not -0
4575   if (match(Op1, m_NegZeroFP()) &&
4576       (FMF.noSignedZeros() || CannotBeNegativeZero(Op0, Q.TLI)))
4577     return Op0;
4578 
4579   // fsub -0.0, (fsub -0.0, X) ==> X
4580   Value *X;
4581   if (match(Op0, m_NegZeroFP()) &&
4582       match(Op1, m_FSub(m_NegZeroFP(), m_Value(X))))
4583     return X;
4584 
4585   // fsub 0.0, (fsub 0.0, X) ==> X if signed zeros are ignored.
4586   if (FMF.noSignedZeros() && match(Op0, m_AnyZeroFP()) &&
4587       match(Op1, m_FSub(m_AnyZeroFP(), m_Value(X))))
4588     return X;
4589 
4590   // fsub nnan x, x ==> 0.0
4591   if (FMF.noNaNs() && Op0 == Op1)
4592     return Constant::getNullValue(Op0->getType());
4593 
4594   // Y - (Y - X) --> X
4595   // (X + Y) - Y --> X
4596   if (FMF.noSignedZeros() && FMF.allowReassoc() &&
4597       (match(Op1, m_FSub(m_Specific(Op0), m_Value(X))) ||
4598        match(Op0, m_c_FAdd(m_Specific(Op1), m_Value(X)))))
4599     return X;
4600 
4601   return nullptr;
4602 }
4603 
4604 /// Given the operands for an FMul, see if we can fold the result
4605 static Value *SimplifyFMulInst(Value *Op0, Value *Op1, FastMathFlags FMF,
4606                                const SimplifyQuery &Q, unsigned MaxRecurse) {
4607   if (Constant *C = foldOrCommuteConstant(Instruction::FMul, Op0, Op1, Q))
4608     return C;
4609 
4610   if (Constant *C = simplifyFPBinop(Op0, Op1))
4611     return C;
4612 
4613   // fmul X, 1.0 ==> X
4614   if (match(Op1, m_FPOne()))
4615     return Op0;
4616 
4617   // fmul nnan nsz X, 0 ==> 0
4618   if (FMF.noNaNs() && FMF.noSignedZeros() && match(Op1, m_AnyZeroFP()))
4619     return ConstantFP::getNullValue(Op0->getType());
4620 
4621   // sqrt(X) * sqrt(X) --> X, if we can:
4622   // 1. Remove the intermediate rounding (reassociate).
4623   // 2. Ignore non-zero negative numbers because sqrt would produce NAN.
4624   // 3. Ignore -0.0 because sqrt(-0.0) == -0.0, but -0.0 * -0.0 == 0.0.
4625   Value *X;
4626   if (Op0 == Op1 && match(Op0, m_Intrinsic<Intrinsic::sqrt>(m_Value(X))) &&
4627       FMF.allowReassoc() && FMF.noNaNs() && FMF.noSignedZeros())
4628     return X;
4629 
4630   return nullptr;
4631 }
4632 
4633 Value *llvm::SimplifyFAddInst(Value *Op0, Value *Op1, FastMathFlags FMF,
4634                               const SimplifyQuery &Q) {
4635   return ::SimplifyFAddInst(Op0, Op1, FMF, Q, RecursionLimit);
4636 }
4637 
4638 
4639 Value *llvm::SimplifyFSubInst(Value *Op0, Value *Op1, FastMathFlags FMF,
4640                               const SimplifyQuery &Q) {
4641   return ::SimplifyFSubInst(Op0, Op1, FMF, Q, RecursionLimit);
4642 }
4643 
4644 Value *llvm::SimplifyFMulInst(Value *Op0, Value *Op1, FastMathFlags FMF,
4645                               const SimplifyQuery &Q) {
4646   return ::SimplifyFMulInst(Op0, Op1, FMF, Q, RecursionLimit);
4647 }
4648 
4649 static Value *SimplifyFDivInst(Value *Op0, Value *Op1, FastMathFlags FMF,
4650                                const SimplifyQuery &Q, unsigned) {
4651   if (Constant *C = foldOrCommuteConstant(Instruction::FDiv, Op0, Op1, Q))
4652     return C;
4653 
4654   if (Constant *C = simplifyFPBinop(Op0, Op1))
4655     return C;
4656 
4657   // X / 1.0 -> X
4658   if (match(Op1, m_FPOne()))
4659     return Op0;
4660 
4661   // 0 / X -> 0
4662   // Requires that NaNs are off (X could be zero) and signed zeroes are
4663   // ignored (X could be positive or negative, so the output sign is unknown).
4664   if (FMF.noNaNs() && FMF.noSignedZeros() && match(Op0, m_AnyZeroFP()))
4665     return ConstantFP::getNullValue(Op0->getType());
4666 
4667   if (FMF.noNaNs()) {
4668     // X / X -> 1.0 is legal when NaNs are ignored.
4669     // We can ignore infinities because INF/INF is NaN.
4670     if (Op0 == Op1)
4671       return ConstantFP::get(Op0->getType(), 1.0);
4672 
4673     // (X * Y) / Y --> X if we can reassociate to the above form.
4674     Value *X;
4675     if (FMF.allowReassoc() && match(Op0, m_c_FMul(m_Value(X), m_Specific(Op1))))
4676       return X;
4677 
4678     // -X /  X -> -1.0 and
4679     //  X / -X -> -1.0 are legal when NaNs are ignored.
4680     // We can ignore signed zeros because +-0.0/+-0.0 is NaN and ignored.
4681     if (match(Op0, m_FNegNSZ(m_Specific(Op1))) ||
4682         match(Op1, m_FNegNSZ(m_Specific(Op0))))
4683       return ConstantFP::get(Op0->getType(), -1.0);
4684   }
4685 
4686   return nullptr;
4687 }
4688 
4689 Value *llvm::SimplifyFDivInst(Value *Op0, Value *Op1, FastMathFlags FMF,
4690                               const SimplifyQuery &Q) {
4691   return ::SimplifyFDivInst(Op0, Op1, FMF, Q, RecursionLimit);
4692 }
4693 
4694 static Value *SimplifyFRemInst(Value *Op0, Value *Op1, FastMathFlags FMF,
4695                                const SimplifyQuery &Q, unsigned) {
4696   if (Constant *C = foldOrCommuteConstant(Instruction::FRem, Op0, Op1, Q))
4697     return C;
4698 
4699   if (Constant *C = simplifyFPBinop(Op0, Op1))
4700     return C;
4701 
4702   // Unlike fdiv, the result of frem always matches the sign of the dividend.
4703   // The constant match may include undef elements in a vector, so return a full
4704   // zero constant as the result.
4705   if (FMF.noNaNs()) {
4706     // +0 % X -> 0
4707     if (match(Op0, m_PosZeroFP()))
4708       return ConstantFP::getNullValue(Op0->getType());
4709     // -0 % X -> -0
4710     if (match(Op0, m_NegZeroFP()))
4711       return ConstantFP::getNegativeZero(Op0->getType());
4712   }
4713 
4714   return nullptr;
4715 }
4716 
4717 Value *llvm::SimplifyFRemInst(Value *Op0, Value *Op1, FastMathFlags FMF,
4718                               const SimplifyQuery &Q) {
4719   return ::SimplifyFRemInst(Op0, Op1, FMF, Q, RecursionLimit);
4720 }
4721 
4722 //=== Helper functions for higher up the class hierarchy.
4723 
4724 /// Given operands for a BinaryOperator, see if we can fold the result.
4725 /// If not, this returns null.
4726 static Value *SimplifyBinOp(unsigned Opcode, Value *LHS, Value *RHS,
4727                             const SimplifyQuery &Q, unsigned MaxRecurse) {
4728   switch (Opcode) {
4729   case Instruction::Add:
4730     return SimplifyAddInst(LHS, RHS, false, false, Q, MaxRecurse);
4731   case Instruction::Sub:
4732     return SimplifySubInst(LHS, RHS, false, false, Q, MaxRecurse);
4733   case Instruction::Mul:
4734     return SimplifyMulInst(LHS, RHS, Q, MaxRecurse);
4735   case Instruction::SDiv:
4736     return SimplifySDivInst(LHS, RHS, Q, MaxRecurse);
4737   case Instruction::UDiv:
4738     return SimplifyUDivInst(LHS, RHS, Q, MaxRecurse);
4739   case Instruction::SRem:
4740     return SimplifySRemInst(LHS, RHS, Q, MaxRecurse);
4741   case Instruction::URem:
4742     return SimplifyURemInst(LHS, RHS, Q, MaxRecurse);
4743   case Instruction::Shl:
4744     return SimplifyShlInst(LHS, RHS, false, false, Q, MaxRecurse);
4745   case Instruction::LShr:
4746     return SimplifyLShrInst(LHS, RHS, false, Q, MaxRecurse);
4747   case Instruction::AShr:
4748     return SimplifyAShrInst(LHS, RHS, false, Q, MaxRecurse);
4749   case Instruction::And:
4750     return SimplifyAndInst(LHS, RHS, Q, MaxRecurse);
4751   case Instruction::Or:
4752     return SimplifyOrInst(LHS, RHS, Q, MaxRecurse);
4753   case Instruction::Xor:
4754     return SimplifyXorInst(LHS, RHS, Q, MaxRecurse);
4755   case Instruction::FAdd:
4756     return SimplifyFAddInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse);
4757   case Instruction::FSub:
4758     return SimplifyFSubInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse);
4759   case Instruction::FMul:
4760     return SimplifyFMulInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse);
4761   case Instruction::FDiv:
4762     return SimplifyFDivInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse);
4763   case Instruction::FRem:
4764     return SimplifyFRemInst(LHS, RHS, FastMathFlags(), Q, MaxRecurse);
4765   default:
4766     llvm_unreachable("Unexpected opcode");
4767   }
4768 }
4769 
4770 /// Given operands for a BinaryOperator, see if we can fold the result.
4771 /// If not, this returns null.
4772 /// In contrast to SimplifyBinOp, try to use FastMathFlag when folding the
4773 /// result. In case we don't need FastMathFlags, simply fall to SimplifyBinOp.
4774 static Value *SimplifyFPBinOp(unsigned Opcode, Value *LHS, Value *RHS,
4775                               const FastMathFlags &FMF, const SimplifyQuery &Q,
4776                               unsigned MaxRecurse) {
4777   switch (Opcode) {
4778   case Instruction::FAdd:
4779     return SimplifyFAddInst(LHS, RHS, FMF, Q, MaxRecurse);
4780   case Instruction::FSub:
4781     return SimplifyFSubInst(LHS, RHS, FMF, Q, MaxRecurse);
4782   case Instruction::FMul:
4783     return SimplifyFMulInst(LHS, RHS, FMF, Q, MaxRecurse);
4784   case Instruction::FDiv:
4785     return SimplifyFDivInst(LHS, RHS, FMF, Q, MaxRecurse);
4786   default:
4787     return SimplifyBinOp(Opcode, LHS, RHS, Q, MaxRecurse);
4788   }
4789 }
4790 
4791 Value *llvm::SimplifyBinOp(unsigned Opcode, Value *LHS, Value *RHS,
4792                            const SimplifyQuery &Q) {
4793   return ::SimplifyBinOp(Opcode, LHS, RHS, Q, RecursionLimit);
4794 }
4795 
4796 Value *llvm::SimplifyFPBinOp(unsigned Opcode, Value *LHS, Value *RHS,
4797                              FastMathFlags FMF, const SimplifyQuery &Q) {
4798   return ::SimplifyFPBinOp(Opcode, LHS, RHS, FMF, Q, RecursionLimit);
4799 }
4800 
4801 /// Given operands for a CmpInst, see if we can fold the result.
4802 static Value *SimplifyCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
4803                               const SimplifyQuery &Q, unsigned MaxRecurse) {
4804   if (CmpInst::isIntPredicate((CmpInst::Predicate)Predicate))
4805     return SimplifyICmpInst(Predicate, LHS, RHS, Q, MaxRecurse);
4806   return SimplifyFCmpInst(Predicate, LHS, RHS, FastMathFlags(), Q, MaxRecurse);
4807 }
4808 
4809 Value *llvm::SimplifyCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
4810                              const SimplifyQuery &Q) {
4811   return ::SimplifyCmpInst(Predicate, LHS, RHS, Q, RecursionLimit);
4812 }
4813 
4814 static bool IsIdempotent(Intrinsic::ID ID) {
4815   switch (ID) {
4816   default: return false;
4817 
4818   // Unary idempotent: f(f(x)) = f(x)
4819   case Intrinsic::fabs:
4820   case Intrinsic::floor:
4821   case Intrinsic::ceil:
4822   case Intrinsic::trunc:
4823   case Intrinsic::rint:
4824   case Intrinsic::nearbyint:
4825   case Intrinsic::round:
4826   case Intrinsic::canonicalize:
4827     return true;
4828   }
4829 }
4830 
4831 static Value *SimplifyRelativeLoad(Constant *Ptr, Constant *Offset,
4832                                    const DataLayout &DL) {
4833   GlobalValue *PtrSym;
4834   APInt PtrOffset;
4835   if (!IsConstantOffsetFromGlobal(Ptr, PtrSym, PtrOffset, DL))
4836     return nullptr;
4837 
4838   Type *Int8PtrTy = Type::getInt8PtrTy(Ptr->getContext());
4839   Type *Int32Ty = Type::getInt32Ty(Ptr->getContext());
4840   Type *Int32PtrTy = Int32Ty->getPointerTo();
4841   Type *Int64Ty = Type::getInt64Ty(Ptr->getContext());
4842 
4843   auto *OffsetConstInt = dyn_cast<ConstantInt>(Offset);
4844   if (!OffsetConstInt || OffsetConstInt->getType()->getBitWidth() > 64)
4845     return nullptr;
4846 
4847   uint64_t OffsetInt = OffsetConstInt->getSExtValue();
4848   if (OffsetInt % 4 != 0)
4849     return nullptr;
4850 
4851   Constant *C = ConstantExpr::getGetElementPtr(
4852       Int32Ty, ConstantExpr::getBitCast(Ptr, Int32PtrTy),
4853       ConstantInt::get(Int64Ty, OffsetInt / 4));
4854   Constant *Loaded = ConstantFoldLoadFromConstPtr(C, Int32Ty, DL);
4855   if (!Loaded)
4856     return nullptr;
4857 
4858   auto *LoadedCE = dyn_cast<ConstantExpr>(Loaded);
4859   if (!LoadedCE)
4860     return nullptr;
4861 
4862   if (LoadedCE->getOpcode() == Instruction::Trunc) {
4863     LoadedCE = dyn_cast<ConstantExpr>(LoadedCE->getOperand(0));
4864     if (!LoadedCE)
4865       return nullptr;
4866   }
4867 
4868   if (LoadedCE->getOpcode() != Instruction::Sub)
4869     return nullptr;
4870 
4871   auto *LoadedLHS = dyn_cast<ConstantExpr>(LoadedCE->getOperand(0));
4872   if (!LoadedLHS || LoadedLHS->getOpcode() != Instruction::PtrToInt)
4873     return nullptr;
4874   auto *LoadedLHSPtr = LoadedLHS->getOperand(0);
4875 
4876   Constant *LoadedRHS = LoadedCE->getOperand(1);
4877   GlobalValue *LoadedRHSSym;
4878   APInt LoadedRHSOffset;
4879   if (!IsConstantOffsetFromGlobal(LoadedRHS, LoadedRHSSym, LoadedRHSOffset,
4880                                   DL) ||
4881       PtrSym != LoadedRHSSym || PtrOffset != LoadedRHSOffset)
4882     return nullptr;
4883 
4884   return ConstantExpr::getBitCast(LoadedLHSPtr, Int8PtrTy);
4885 }
4886 
4887 static bool maskIsAllZeroOrUndef(Value *Mask) {
4888   auto *ConstMask = dyn_cast<Constant>(Mask);
4889   if (!ConstMask)
4890     return false;
4891   if (ConstMask->isNullValue() || isa<UndefValue>(ConstMask))
4892     return true;
4893   for (unsigned I = 0, E = ConstMask->getType()->getVectorNumElements(); I != E;
4894        ++I) {
4895     if (auto *MaskElt = ConstMask->getAggregateElement(I))
4896       if (MaskElt->isNullValue() || isa<UndefValue>(MaskElt))
4897         continue;
4898     return false;
4899   }
4900   return true;
4901 }
4902 
4903 static Value *simplifyUnaryIntrinsic(Function *F, Value *Op0,
4904                                      const SimplifyQuery &Q) {
4905   // Idempotent functions return the same result when called repeatedly.
4906   Intrinsic::ID IID = F->getIntrinsicID();
4907   if (IsIdempotent(IID))
4908     if (auto *II = dyn_cast<IntrinsicInst>(Op0))
4909       if (II->getIntrinsicID() == IID)
4910         return II;
4911 
4912   Value *X;
4913   switch (IID) {
4914   case Intrinsic::fabs:
4915     if (SignBitMustBeZero(Op0, Q.TLI)) return Op0;
4916     break;
4917   case Intrinsic::bswap:
4918     // bswap(bswap(x)) -> x
4919     if (match(Op0, m_BSwap(m_Value(X)))) return X;
4920     break;
4921   case Intrinsic::bitreverse:
4922     // bitreverse(bitreverse(x)) -> x
4923     if (match(Op0, m_BitReverse(m_Value(X)))) return X;
4924     break;
4925   case Intrinsic::exp:
4926     // exp(log(x)) -> x
4927     if (Q.CxtI->hasAllowReassoc() &&
4928         match(Op0, m_Intrinsic<Intrinsic::log>(m_Value(X)))) return X;
4929     break;
4930   case Intrinsic::exp2:
4931     // exp2(log2(x)) -> x
4932     if (Q.CxtI->hasAllowReassoc() &&
4933         match(Op0, m_Intrinsic<Intrinsic::log2>(m_Value(X)))) return X;
4934     break;
4935   case Intrinsic::log:
4936     // log(exp(x)) -> x
4937     if (Q.CxtI->hasAllowReassoc() &&
4938         match(Op0, m_Intrinsic<Intrinsic::exp>(m_Value(X)))) return X;
4939     break;
4940   case Intrinsic::log2:
4941     // log2(exp2(x)) -> x
4942     if (Q.CxtI->hasAllowReassoc() &&
4943         (match(Op0, m_Intrinsic<Intrinsic::exp2>(m_Value(X))) ||
4944          match(Op0, m_Intrinsic<Intrinsic::pow>(m_SpecificFP(2.0),
4945                                                 m_Value(X))))) return X;
4946     break;
4947   case Intrinsic::log10:
4948     // log10(pow(10.0, x)) -> x
4949     if (Q.CxtI->hasAllowReassoc() &&
4950         match(Op0, m_Intrinsic<Intrinsic::pow>(m_SpecificFP(10.0),
4951                                                m_Value(X)))) return X;
4952     break;
4953   default:
4954     break;
4955   }
4956 
4957   return nullptr;
4958 }
4959 
4960 static Value *simplifyBinaryIntrinsic(Function *F, Value *Op0, Value *Op1,
4961                                       const SimplifyQuery &Q) {
4962   Intrinsic::ID IID = F->getIntrinsicID();
4963   Type *ReturnType = F->getReturnType();
4964   switch (IID) {
4965   case Intrinsic::usub_with_overflow:
4966   case Intrinsic::ssub_with_overflow:
4967     // X - X -> { 0, false }
4968     if (Op0 == Op1)
4969       return Constant::getNullValue(ReturnType);
4970     // X - undef -> undef
4971     // undef - X -> undef
4972     if (isa<UndefValue>(Op0) || isa<UndefValue>(Op1))
4973       return UndefValue::get(ReturnType);
4974     break;
4975   case Intrinsic::uadd_with_overflow:
4976   case Intrinsic::sadd_with_overflow:
4977     // X + undef -> undef
4978     if (isa<UndefValue>(Op0) || isa<UndefValue>(Op1))
4979       return UndefValue::get(ReturnType);
4980     break;
4981   case Intrinsic::umul_with_overflow:
4982   case Intrinsic::smul_with_overflow:
4983     // 0 * X -> { 0, false }
4984     // X * 0 -> { 0, false }
4985     if (match(Op0, m_Zero()) || match(Op1, m_Zero()))
4986       return Constant::getNullValue(ReturnType);
4987     // undef * X -> { 0, false }
4988     // X * undef -> { 0, false }
4989     if (match(Op0, m_Undef()) || match(Op1, m_Undef()))
4990       return Constant::getNullValue(ReturnType);
4991     break;
4992   case Intrinsic::uadd_sat:
4993     // sat(MAX + X) -> MAX
4994     // sat(X + MAX) -> MAX
4995     if (match(Op0, m_AllOnes()) || match(Op1, m_AllOnes()))
4996       return Constant::getAllOnesValue(ReturnType);
4997     LLVM_FALLTHROUGH;
4998   case Intrinsic::sadd_sat:
4999     // sat(X + undef) -> -1
5000     // sat(undef + X) -> -1
5001     // For unsigned: Assume undef is MAX, thus we saturate to MAX (-1).
5002     // For signed: Assume undef is ~X, in which case X + ~X = -1.
5003     if (match(Op0, m_Undef()) || match(Op1, m_Undef()))
5004       return Constant::getAllOnesValue(ReturnType);
5005 
5006     // X + 0 -> X
5007     if (match(Op1, m_Zero()))
5008       return Op0;
5009     // 0 + X -> X
5010     if (match(Op0, m_Zero()))
5011       return Op1;
5012     break;
5013   case Intrinsic::usub_sat:
5014     // sat(0 - X) -> 0, sat(X - MAX) -> 0
5015     if (match(Op0, m_Zero()) || match(Op1, m_AllOnes()))
5016       return Constant::getNullValue(ReturnType);
5017     LLVM_FALLTHROUGH;
5018   case Intrinsic::ssub_sat:
5019     // X - X -> 0, X - undef -> 0, undef - X -> 0
5020     if (Op0 == Op1 || match(Op0, m_Undef()) || match(Op1, m_Undef()))
5021       return Constant::getNullValue(ReturnType);
5022     // X - 0 -> X
5023     if (match(Op1, m_Zero()))
5024       return Op0;
5025     break;
5026   case Intrinsic::load_relative:
5027     if (auto *C0 = dyn_cast<Constant>(Op0))
5028       if (auto *C1 = dyn_cast<Constant>(Op1))
5029         return SimplifyRelativeLoad(C0, C1, Q.DL);
5030     break;
5031   case Intrinsic::powi:
5032     if (auto *Power = dyn_cast<ConstantInt>(Op1)) {
5033       // powi(x, 0) -> 1.0
5034       if (Power->isZero())
5035         return ConstantFP::get(Op0->getType(), 1.0);
5036       // powi(x, 1) -> x
5037       if (Power->isOne())
5038         return Op0;
5039     }
5040     break;
5041   case Intrinsic::maxnum:
5042   case Intrinsic::minnum:
5043   case Intrinsic::maximum:
5044   case Intrinsic::minimum: {
5045     // If the arguments are the same, this is a no-op.
5046     if (Op0 == Op1) return Op0;
5047 
5048     // If one argument is undef, return the other argument.
5049     if (match(Op0, m_Undef()))
5050       return Op1;
5051     if (match(Op1, m_Undef()))
5052       return Op0;
5053 
5054     // If one argument is NaN, return other or NaN appropriately.
5055     bool PropagateNaN = IID == Intrinsic::minimum || IID == Intrinsic::maximum;
5056     if (match(Op0, m_NaN()))
5057       return PropagateNaN ? Op0 : Op1;
5058     if (match(Op1, m_NaN()))
5059       return PropagateNaN ? Op1 : Op0;
5060 
5061     // Min/max of the same operation with common operand:
5062     // m(m(X, Y)), X --> m(X, Y) (4 commuted variants)
5063     if (auto *M0 = dyn_cast<IntrinsicInst>(Op0))
5064       if (M0->getIntrinsicID() == IID &&
5065           (M0->getOperand(0) == Op1 || M0->getOperand(1) == Op1))
5066         return Op0;
5067     if (auto *M1 = dyn_cast<IntrinsicInst>(Op1))
5068       if (M1->getIntrinsicID() == IID &&
5069           (M1->getOperand(0) == Op0 || M1->getOperand(1) == Op0))
5070         return Op1;
5071 
5072     // min(X, -Inf) --> -Inf (and commuted variant)
5073     // max(X, +Inf) --> +Inf (and commuted variant)
5074     bool UseNegInf = IID == Intrinsic::minnum || IID == Intrinsic::minimum;
5075     const APFloat *C;
5076     if ((match(Op0, m_APFloat(C)) && C->isInfinity() &&
5077          C->isNegative() == UseNegInf) ||
5078         (match(Op1, m_APFloat(C)) && C->isInfinity() &&
5079          C->isNegative() == UseNegInf))
5080       return ConstantFP::getInfinity(ReturnType, UseNegInf);
5081 
5082     // TODO: minnum(nnan x, inf) -> x
5083     // TODO: minnum(nnan ninf x, flt_max) -> x
5084     // TODO: maxnum(nnan x, -inf) -> x
5085     // TODO: maxnum(nnan ninf x, -flt_max) -> x
5086     break;
5087   }
5088   default:
5089     break;
5090   }
5091 
5092   return nullptr;
5093 }
5094 
5095 template <typename IterTy>
5096 static Value *simplifyIntrinsic(Function *F, IterTy ArgBegin, IterTy ArgEnd,
5097                                 const SimplifyQuery &Q) {
5098   // Intrinsics with no operands have some kind of side effect. Don't simplify.
5099   unsigned NumOperands = std::distance(ArgBegin, ArgEnd);
5100   if (NumOperands == 0)
5101     return nullptr;
5102 
5103   Intrinsic::ID IID = F->getIntrinsicID();
5104   if (NumOperands == 1)
5105     return simplifyUnaryIntrinsic(F, ArgBegin[0], Q);
5106 
5107   if (NumOperands == 2)
5108     return simplifyBinaryIntrinsic(F, ArgBegin[0], ArgBegin[1], Q);
5109 
5110   // Handle intrinsics with 3 or more arguments.
5111   switch (IID) {
5112   case Intrinsic::masked_load: {
5113     Value *MaskArg = ArgBegin[2];
5114     Value *PassthruArg = ArgBegin[3];
5115     // If the mask is all zeros or undef, the "passthru" argument is the result.
5116     if (maskIsAllZeroOrUndef(MaskArg))
5117       return PassthruArg;
5118     return nullptr;
5119   }
5120   case Intrinsic::fshl:
5121   case Intrinsic::fshr: {
5122     Value *Op0 = ArgBegin[0], *Op1 = ArgBegin[1], *ShAmtArg = ArgBegin[2];
5123 
5124     // If both operands are undef, the result is undef.
5125     if (match(Op0, m_Undef()) && match(Op1, m_Undef()))
5126       return UndefValue::get(F->getReturnType());
5127 
5128     // If shift amount is undef, assume it is zero.
5129     if (match(ShAmtArg, m_Undef()))
5130       return ArgBegin[IID == Intrinsic::fshl ? 0 : 1];
5131 
5132     const APInt *ShAmtC;
5133     if (match(ShAmtArg, m_APInt(ShAmtC))) {
5134       // If there's effectively no shift, return the 1st arg or 2nd arg.
5135       // TODO: For vectors, we could check each element of a non-splat constant.
5136       APInt BitWidth = APInt(ShAmtC->getBitWidth(), ShAmtC->getBitWidth());
5137       if (ShAmtC->urem(BitWidth).isNullValue())
5138         return ArgBegin[IID == Intrinsic::fshl ? 0 : 1];
5139     }
5140     return nullptr;
5141   }
5142   default:
5143     return nullptr;
5144   }
5145 }
5146 
5147 template <typename IterTy>
5148 static Value *SimplifyCall(ImmutableCallSite CS, Value *V, IterTy ArgBegin,
5149                            IterTy ArgEnd, const SimplifyQuery &Q,
5150                            unsigned MaxRecurse) {
5151   Type *Ty = V->getType();
5152   if (PointerType *PTy = dyn_cast<PointerType>(Ty))
5153     Ty = PTy->getElementType();
5154   FunctionType *FTy = cast<FunctionType>(Ty);
5155 
5156   // call undef -> undef
5157   // call null -> undef
5158   if (isa<UndefValue>(V) || isa<ConstantPointerNull>(V))
5159     return UndefValue::get(FTy->getReturnType());
5160 
5161   Function *F = dyn_cast<Function>(V);
5162   if (!F)
5163     return nullptr;
5164 
5165   if (F->isIntrinsic())
5166     if (Value *Ret = simplifyIntrinsic(F, ArgBegin, ArgEnd, Q))
5167       return Ret;
5168 
5169   if (!canConstantFoldCallTo(CS, F))
5170     return nullptr;
5171 
5172   SmallVector<Constant *, 4> ConstantArgs;
5173   ConstantArgs.reserve(ArgEnd - ArgBegin);
5174   for (IterTy I = ArgBegin, E = ArgEnd; I != E; ++I) {
5175     Constant *C = dyn_cast<Constant>(*I);
5176     if (!C)
5177       return nullptr;
5178     ConstantArgs.push_back(C);
5179   }
5180 
5181   return ConstantFoldCall(CS, F, ConstantArgs, Q.TLI);
5182 }
5183 
5184 Value *llvm::SimplifyCall(ImmutableCallSite CS, Value *V,
5185                           User::op_iterator ArgBegin, User::op_iterator ArgEnd,
5186                           const SimplifyQuery &Q) {
5187   return ::SimplifyCall(CS, V, ArgBegin, ArgEnd, Q, RecursionLimit);
5188 }
5189 
5190 Value *llvm::SimplifyCall(ImmutableCallSite CS, Value *V,
5191                           ArrayRef<Value *> Args, const SimplifyQuery &Q) {
5192   return ::SimplifyCall(CS, V, Args.begin(), Args.end(), Q, RecursionLimit);
5193 }
5194 
5195 Value *llvm::SimplifyCall(ImmutableCallSite ICS, const SimplifyQuery &Q) {
5196   CallSite CS(const_cast<Instruction*>(ICS.getInstruction()));
5197   return ::SimplifyCall(CS, CS.getCalledValue(), CS.arg_begin(), CS.arg_end(),
5198                         Q, RecursionLimit);
5199 }
5200 
5201 /// See if we can compute a simplified version of this instruction.
5202 /// If not, this returns null.
5203 
5204 Value *llvm::SimplifyInstruction(Instruction *I, const SimplifyQuery &SQ,
5205                                  OptimizationRemarkEmitter *ORE) {
5206   const SimplifyQuery Q = SQ.CxtI ? SQ : SQ.getWithInstruction(I);
5207   Value *Result;
5208 
5209   switch (I->getOpcode()) {
5210   default:
5211     Result = ConstantFoldInstruction(I, Q.DL, Q.TLI);
5212     break;
5213   case Instruction::FAdd:
5214     Result = SimplifyFAddInst(I->getOperand(0), I->getOperand(1),
5215                               I->getFastMathFlags(), Q);
5216     break;
5217   case Instruction::Add:
5218     Result =
5219         SimplifyAddInst(I->getOperand(0), I->getOperand(1),
5220                         Q.IIQ.hasNoSignedWrap(cast<BinaryOperator>(I)),
5221                         Q.IIQ.hasNoUnsignedWrap(cast<BinaryOperator>(I)), Q);
5222     break;
5223   case Instruction::FSub:
5224     Result = SimplifyFSubInst(I->getOperand(0), I->getOperand(1),
5225                               I->getFastMathFlags(), Q);
5226     break;
5227   case Instruction::Sub:
5228     Result =
5229         SimplifySubInst(I->getOperand(0), I->getOperand(1),
5230                         Q.IIQ.hasNoSignedWrap(cast<BinaryOperator>(I)),
5231                         Q.IIQ.hasNoUnsignedWrap(cast<BinaryOperator>(I)), Q);
5232     break;
5233   case Instruction::FMul:
5234     Result = SimplifyFMulInst(I->getOperand(0), I->getOperand(1),
5235                               I->getFastMathFlags(), Q);
5236     break;
5237   case Instruction::Mul:
5238     Result = SimplifyMulInst(I->getOperand(0), I->getOperand(1), Q);
5239     break;
5240   case Instruction::SDiv:
5241     Result = SimplifySDivInst(I->getOperand(0), I->getOperand(1), Q);
5242     break;
5243   case Instruction::UDiv:
5244     Result = SimplifyUDivInst(I->getOperand(0), I->getOperand(1), Q);
5245     break;
5246   case Instruction::FDiv:
5247     Result = SimplifyFDivInst(I->getOperand(0), I->getOperand(1),
5248                               I->getFastMathFlags(), Q);
5249     break;
5250   case Instruction::SRem:
5251     Result = SimplifySRemInst(I->getOperand(0), I->getOperand(1), Q);
5252     break;
5253   case Instruction::URem:
5254     Result = SimplifyURemInst(I->getOperand(0), I->getOperand(1), Q);
5255     break;
5256   case Instruction::FRem:
5257     Result = SimplifyFRemInst(I->getOperand(0), I->getOperand(1),
5258                               I->getFastMathFlags(), Q);
5259     break;
5260   case Instruction::Shl:
5261     Result =
5262         SimplifyShlInst(I->getOperand(0), I->getOperand(1),
5263                         Q.IIQ.hasNoSignedWrap(cast<BinaryOperator>(I)),
5264                         Q.IIQ.hasNoUnsignedWrap(cast<BinaryOperator>(I)), Q);
5265     break;
5266   case Instruction::LShr:
5267     Result = SimplifyLShrInst(I->getOperand(0), I->getOperand(1),
5268                               Q.IIQ.isExact(cast<BinaryOperator>(I)), Q);
5269     break;
5270   case Instruction::AShr:
5271     Result = SimplifyAShrInst(I->getOperand(0), I->getOperand(1),
5272                               Q.IIQ.isExact(cast<BinaryOperator>(I)), Q);
5273     break;
5274   case Instruction::And:
5275     Result = SimplifyAndInst(I->getOperand(0), I->getOperand(1), Q);
5276     break;
5277   case Instruction::Or:
5278     Result = SimplifyOrInst(I->getOperand(0), I->getOperand(1), Q);
5279     break;
5280   case Instruction::Xor:
5281     Result = SimplifyXorInst(I->getOperand(0), I->getOperand(1), Q);
5282     break;
5283   case Instruction::ICmp:
5284     Result = SimplifyICmpInst(cast<ICmpInst>(I)->getPredicate(),
5285                               I->getOperand(0), I->getOperand(1), Q);
5286     break;
5287   case Instruction::FCmp:
5288     Result =
5289         SimplifyFCmpInst(cast<FCmpInst>(I)->getPredicate(), I->getOperand(0),
5290                          I->getOperand(1), I->getFastMathFlags(), Q);
5291     break;
5292   case Instruction::Select:
5293     Result = SimplifySelectInst(I->getOperand(0), I->getOperand(1),
5294                                 I->getOperand(2), Q);
5295     break;
5296   case Instruction::GetElementPtr: {
5297     SmallVector<Value *, 8> Ops(I->op_begin(), I->op_end());
5298     Result = SimplifyGEPInst(cast<GetElementPtrInst>(I)->getSourceElementType(),
5299                              Ops, Q);
5300     break;
5301   }
5302   case Instruction::InsertValue: {
5303     InsertValueInst *IV = cast<InsertValueInst>(I);
5304     Result = SimplifyInsertValueInst(IV->getAggregateOperand(),
5305                                      IV->getInsertedValueOperand(),
5306                                      IV->getIndices(), Q);
5307     break;
5308   }
5309   case Instruction::InsertElement: {
5310     auto *IE = cast<InsertElementInst>(I);
5311     Result = SimplifyInsertElementInst(IE->getOperand(0), IE->getOperand(1),
5312                                        IE->getOperand(2), Q);
5313     break;
5314   }
5315   case Instruction::ExtractValue: {
5316     auto *EVI = cast<ExtractValueInst>(I);
5317     Result = SimplifyExtractValueInst(EVI->getAggregateOperand(),
5318                                       EVI->getIndices(), Q);
5319     break;
5320   }
5321   case Instruction::ExtractElement: {
5322     auto *EEI = cast<ExtractElementInst>(I);
5323     Result = SimplifyExtractElementInst(EEI->getVectorOperand(),
5324                                         EEI->getIndexOperand(), Q);
5325     break;
5326   }
5327   case Instruction::ShuffleVector: {
5328     auto *SVI = cast<ShuffleVectorInst>(I);
5329     Result = SimplifyShuffleVectorInst(SVI->getOperand(0), SVI->getOperand(1),
5330                                        SVI->getMask(), SVI->getType(), Q);
5331     break;
5332   }
5333   case Instruction::PHI:
5334     Result = SimplifyPHINode(cast<PHINode>(I), Q);
5335     break;
5336   case Instruction::Call: {
5337     CallSite CS(cast<CallInst>(I));
5338     Result = SimplifyCall(CS, Q);
5339     break;
5340   }
5341 #define HANDLE_CAST_INST(num, opc, clas) case Instruction::opc:
5342 #include "llvm/IR/Instruction.def"
5343 #undef HANDLE_CAST_INST
5344     Result =
5345         SimplifyCastInst(I->getOpcode(), I->getOperand(0), I->getType(), Q);
5346     break;
5347   case Instruction::Alloca:
5348     // No simplifications for Alloca and it can't be constant folded.
5349     Result = nullptr;
5350     break;
5351   }
5352 
5353   // In general, it is possible for computeKnownBits to determine all bits in a
5354   // value even when the operands are not all constants.
5355   if (!Result && I->getType()->isIntOrIntVectorTy()) {
5356     KnownBits Known = computeKnownBits(I, Q.DL, /*Depth*/ 0, Q.AC, I, Q.DT, ORE);
5357     if (Known.isConstant())
5358       Result = ConstantInt::get(I->getType(), Known.getConstant());
5359   }
5360 
5361   /// If called on unreachable code, the above logic may report that the
5362   /// instruction simplified to itself.  Make life easier for users by
5363   /// detecting that case here, returning a safe value instead.
5364   return Result == I ? UndefValue::get(I->getType()) : Result;
5365 }
5366 
5367 /// Implementation of recursive simplification through an instruction's
5368 /// uses.
5369 ///
5370 /// This is the common implementation of the recursive simplification routines.
5371 /// If we have a pre-simplified value in 'SimpleV', that is forcibly used to
5372 /// replace the instruction 'I'. Otherwise, we simply add 'I' to the list of
5373 /// instructions to process and attempt to simplify it using
5374 /// InstructionSimplify.
5375 ///
5376 /// This routine returns 'true' only when *it* simplifies something. The passed
5377 /// in simplified value does not count toward this.
5378 static bool replaceAndRecursivelySimplifyImpl(Instruction *I, Value *SimpleV,
5379                                               const TargetLibraryInfo *TLI,
5380                                               const DominatorTree *DT,
5381                                               AssumptionCache *AC) {
5382   bool Simplified = false;
5383   SmallSetVector<Instruction *, 8> Worklist;
5384   const DataLayout &DL = I->getModule()->getDataLayout();
5385 
5386   // If we have an explicit value to collapse to, do that round of the
5387   // simplification loop by hand initially.
5388   if (SimpleV) {
5389     for (User *U : I->users())
5390       if (U != I)
5391         Worklist.insert(cast<Instruction>(U));
5392 
5393     // Replace the instruction with its simplified value.
5394     I->replaceAllUsesWith(SimpleV);
5395 
5396     // Gracefully handle edge cases where the instruction is not wired into any
5397     // parent block.
5398     if (I->getParent() && !I->isEHPad() && !I->isTerminator() &&
5399         !I->mayHaveSideEffects())
5400       I->eraseFromParent();
5401   } else {
5402     Worklist.insert(I);
5403   }
5404 
5405   // Note that we must test the size on each iteration, the worklist can grow.
5406   for (unsigned Idx = 0; Idx != Worklist.size(); ++Idx) {
5407     I = Worklist[Idx];
5408 
5409     // See if this instruction simplifies.
5410     SimpleV = SimplifyInstruction(I, {DL, TLI, DT, AC});
5411     if (!SimpleV)
5412       continue;
5413 
5414     Simplified = true;
5415 
5416     // Stash away all the uses of the old instruction so we can check them for
5417     // recursive simplifications after a RAUW. This is cheaper than checking all
5418     // uses of To on the recursive step in most cases.
5419     for (User *U : I->users())
5420       Worklist.insert(cast<Instruction>(U));
5421 
5422     // Replace the instruction with its simplified value.
5423     I->replaceAllUsesWith(SimpleV);
5424 
5425     // Gracefully handle edge cases where the instruction is not wired into any
5426     // parent block.
5427     if (I->getParent() && !I->isEHPad() && !I->isTerminator() &&
5428         !I->mayHaveSideEffects())
5429       I->eraseFromParent();
5430   }
5431   return Simplified;
5432 }
5433 
5434 bool llvm::recursivelySimplifyInstruction(Instruction *I,
5435                                           const TargetLibraryInfo *TLI,
5436                                           const DominatorTree *DT,
5437                                           AssumptionCache *AC) {
5438   return replaceAndRecursivelySimplifyImpl(I, nullptr, TLI, DT, AC);
5439 }
5440 
5441 bool llvm::replaceAndRecursivelySimplify(Instruction *I, Value *SimpleV,
5442                                          const TargetLibraryInfo *TLI,
5443                                          const DominatorTree *DT,
5444                                          AssumptionCache *AC) {
5445   assert(I != SimpleV && "replaceAndRecursivelySimplify(X,X) is not valid!");
5446   assert(SimpleV && "Must provide a simplified value.");
5447   return replaceAndRecursivelySimplifyImpl(I, SimpleV, TLI, DT, AC);
5448 }
5449 
5450 namespace llvm {
5451 const SimplifyQuery getBestSimplifyQuery(Pass &P, Function &F) {
5452   auto *DTWP = P.getAnalysisIfAvailable<DominatorTreeWrapperPass>();
5453   auto *DT = DTWP ? &DTWP->getDomTree() : nullptr;
5454   auto *TLIWP = P.getAnalysisIfAvailable<TargetLibraryInfoWrapperPass>();
5455   auto *TLI = TLIWP ? &TLIWP->getTLI() : nullptr;
5456   auto *ACWP = P.getAnalysisIfAvailable<AssumptionCacheTracker>();
5457   auto *AC = ACWP ? &ACWP->getAssumptionCache(F) : nullptr;
5458   return {F.getParent()->getDataLayout(), TLI, DT, AC};
5459 }
5460 
5461 const SimplifyQuery getBestSimplifyQuery(LoopStandardAnalysisResults &AR,
5462                                          const DataLayout &DL) {
5463   return {DL, &AR.TLI, &AR.DT, &AR.AC};
5464 }
5465 
5466 template <class T, class... TArgs>
5467 const SimplifyQuery getBestSimplifyQuery(AnalysisManager<T, TArgs...> &AM,
5468                                          Function &F) {
5469   auto *DT = AM.template getCachedResult<DominatorTreeAnalysis>(F);
5470   auto *TLI = AM.template getCachedResult<TargetLibraryAnalysis>(F);
5471   auto *AC = AM.template getCachedResult<AssumptionAnalysis>(F);
5472   return {F.getParent()->getDataLayout(), TLI, DT, AC};
5473 }
5474 template const SimplifyQuery getBestSimplifyQuery(AnalysisManager<Function> &,
5475                                                   Function &);
5476 }
5477