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