1 //===- ValueTracking.cpp - Walk computations to compute properties --------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This file contains routines that help analyze properties that chains of
12 //===----------------------------------------------------------------------===//
14 #include "llvm/Analysis/ValueTracking.h"
15 #include "llvm/ADT/APFloat.h"
16 #include "llvm/ADT/APInt.h"
17 #include "llvm/ADT/ArrayRef.h"
18 #include "llvm/ADT/None.h"
19 #include "llvm/ADT/Optional.h"
20 #include "llvm/ADT/STLExtras.h"
21 #include "llvm/ADT/SmallPtrSet.h"
22 #include "llvm/ADT/SmallSet.h"
23 #include "llvm/ADT/SmallVector.h"
24 #include "llvm/ADT/StringRef.h"
25 #include "llvm/ADT/iterator_range.h"
26 #include "llvm/Analysis/AliasAnalysis.h"
27 #include "llvm/Analysis/AssumptionCache.h"
28 #include "llvm/Analysis/GuardUtils.h"
29 #include "llvm/Analysis/InstructionSimplify.h"
30 #include "llvm/Analysis/Loads.h"
31 #include "llvm/Analysis/LoopInfo.h"
32 #include "llvm/Analysis/OptimizationRemarkEmitter.h"
33 #include "llvm/Analysis/TargetLibraryInfo.h"
34 #include "llvm/IR/Argument.h"
35 #include "llvm/IR/Attributes.h"
36 #include "llvm/IR/BasicBlock.h"
37 #include "llvm/IR/CallSite.h"
38 #include "llvm/IR/Constant.h"
39 #include "llvm/IR/ConstantRange.h"
40 #include "llvm/IR/Constants.h"
41 #include "llvm/IR/DerivedTypes.h"
42 #include "llvm/IR/DiagnosticInfo.h"
43 #include "llvm/IR/Dominators.h"
44 #include "llvm/IR/Function.h"
45 #include "llvm/IR/GetElementPtrTypeIterator.h"
46 #include "llvm/IR/GlobalAlias.h"
47 #include "llvm/IR/GlobalValue.h"
48 #include "llvm/IR/GlobalVariable.h"
49 #include "llvm/IR/InstrTypes.h"
50 #include "llvm/IR/Instruction.h"
51 #include "llvm/IR/Instructions.h"
52 #include "llvm/IR/IntrinsicInst.h"
53 #include "llvm/IR/Intrinsics.h"
54 #include "llvm/IR/LLVMContext.h"
55 #include "llvm/IR/Metadata.h"
56 #include "llvm/IR/Module.h"
57 #include "llvm/IR/Operator.h"
58 #include "llvm/IR/PatternMatch.h"
59 #include "llvm/IR/Type.h"
60 #include "llvm/IR/User.h"
61 #include "llvm/IR/Value.h"
62 #include "llvm/Support/Casting.h"
63 #include "llvm/Support/CommandLine.h"
64 #include "llvm/Support/Compiler.h"
65 #include "llvm/Support/ErrorHandling.h"
66 #include "llvm/Support/KnownBits.h"
67 #include "llvm/Support/MathExtras.h"
76 using namespace llvm::PatternMatch
;
78 const unsigned MaxDepth
= 6;
80 // Controls the number of uses of the value searched for possible
81 // dominating comparisons.
82 static cl::opt
<unsigned> DomConditionsMaxUses("dom-conditions-max-uses",
83 cl::Hidden
, cl::init(20));
85 /// Returns the bitwidth of the given scalar or pointer type. For vector types,
86 /// returns the element type's bitwidth.
87 static unsigned getBitWidth(Type
*Ty
, const DataLayout
&DL
) {
88 if (unsigned BitWidth
= Ty
->getScalarSizeInBits())
91 return DL
.getIndexTypeSizeInBits(Ty
);
96 // Simplifying using an assume can only be done in a particular control-flow
97 // context (the context instruction provides that context). If an assume and
98 // the context instruction are not in the same block then the DT helps in
99 // figuring out if we can use it.
101 const DataLayout
&DL
;
103 const Instruction
*CxtI
;
104 const DominatorTree
*DT
;
106 // Unlike the other analyses, this may be a nullptr because not all clients
107 // provide it currently.
108 OptimizationRemarkEmitter
*ORE
;
110 /// Set of assumptions that should be excluded from further queries.
111 /// This is because of the potential for mutual recursion to cause
112 /// computeKnownBits to repeatedly visit the same assume intrinsic. The
113 /// classic case of this is assume(x = y), which will attempt to determine
114 /// bits in x from bits in y, which will attempt to determine bits in y from
115 /// bits in x, etc. Regarding the mutual recursion, computeKnownBits can call
116 /// isKnownNonZero, which calls computeKnownBits and isKnownToBeAPowerOfTwo
117 /// (all of which can call computeKnownBits), and so on.
118 std::array
<const Value
*, MaxDepth
> Excluded
;
120 /// If true, it is safe to use metadata during simplification.
123 unsigned NumExcluded
= 0;
125 Query(const DataLayout
&DL
, AssumptionCache
*AC
, const Instruction
*CxtI
,
126 const DominatorTree
*DT
, bool UseInstrInfo
,
127 OptimizationRemarkEmitter
*ORE
= nullptr)
128 : DL(DL
), AC(AC
), CxtI(CxtI
), DT(DT
), ORE(ORE
), IIQ(UseInstrInfo
) {}
130 Query(const Query
&Q
, const Value
*NewExcl
)
131 : DL(Q
.DL
), AC(Q
.AC
), CxtI(Q
.CxtI
), DT(Q
.DT
), ORE(Q
.ORE
), IIQ(Q
.IIQ
),
132 NumExcluded(Q
.NumExcluded
) {
133 Excluded
= Q
.Excluded
;
134 Excluded
[NumExcluded
++] = NewExcl
;
135 assert(NumExcluded
<= Excluded
.size());
138 bool isExcluded(const Value
*Value
) const {
139 if (NumExcluded
== 0)
141 auto End
= Excluded
.begin() + NumExcluded
;
142 return std::find(Excluded
.begin(), End
, Value
) != End
;
146 } // end anonymous namespace
148 // Given the provided Value and, potentially, a context instruction, return
149 // the preferred context instruction (if any).
150 static const Instruction
*safeCxtI(const Value
*V
, const Instruction
*CxtI
) {
151 // If we've been provided with a context instruction, then use that (provided
152 // it has been inserted).
153 if (CxtI
&& CxtI
->getParent())
156 // If the value is really an already-inserted instruction, then use that.
157 CxtI
= dyn_cast
<Instruction
>(V
);
158 if (CxtI
&& CxtI
->getParent())
164 static void computeKnownBits(const Value
*V
, KnownBits
&Known
,
165 unsigned Depth
, const Query
&Q
);
167 void llvm::computeKnownBits(const Value
*V
, KnownBits
&Known
,
168 const DataLayout
&DL
, unsigned Depth
,
169 AssumptionCache
*AC
, const Instruction
*CxtI
,
170 const DominatorTree
*DT
,
171 OptimizationRemarkEmitter
*ORE
, bool UseInstrInfo
) {
172 ::computeKnownBits(V
, Known
, Depth
,
173 Query(DL
, AC
, safeCxtI(V
, CxtI
), DT
, UseInstrInfo
, ORE
));
176 static KnownBits
computeKnownBits(const Value
*V
, unsigned Depth
,
179 KnownBits
llvm::computeKnownBits(const Value
*V
, const DataLayout
&DL
,
180 unsigned Depth
, AssumptionCache
*AC
,
181 const Instruction
*CxtI
,
182 const DominatorTree
*DT
,
183 OptimizationRemarkEmitter
*ORE
,
185 return ::computeKnownBits(
186 V
, Depth
, Query(DL
, AC
, safeCxtI(V
, CxtI
), DT
, UseInstrInfo
, ORE
));
189 bool llvm::haveNoCommonBitsSet(const Value
*LHS
, const Value
*RHS
,
190 const DataLayout
&DL
, AssumptionCache
*AC
,
191 const Instruction
*CxtI
, const DominatorTree
*DT
,
193 assert(LHS
->getType() == RHS
->getType() &&
194 "LHS and RHS should have the same type");
195 assert(LHS
->getType()->isIntOrIntVectorTy() &&
196 "LHS and RHS should be integers");
197 // Look for an inverted mask: (X & ~M) op (Y & M).
199 if (match(LHS
, m_c_And(m_Not(m_Value(M
)), m_Value())) &&
200 match(RHS
, m_c_And(m_Specific(M
), m_Value())))
202 if (match(RHS
, m_c_And(m_Not(m_Value(M
)), m_Value())) &&
203 match(LHS
, m_c_And(m_Specific(M
), m_Value())))
205 IntegerType
*IT
= cast
<IntegerType
>(LHS
->getType()->getScalarType());
206 KnownBits
LHSKnown(IT
->getBitWidth());
207 KnownBits
RHSKnown(IT
->getBitWidth());
208 computeKnownBits(LHS
, LHSKnown
, DL
, 0, AC
, CxtI
, DT
, nullptr, UseInstrInfo
);
209 computeKnownBits(RHS
, RHSKnown
, DL
, 0, AC
, CxtI
, DT
, nullptr, UseInstrInfo
);
210 return (LHSKnown
.Zero
| RHSKnown
.Zero
).isAllOnesValue();
213 bool llvm::isOnlyUsedInZeroEqualityComparison(const Instruction
*CxtI
) {
214 for (const User
*U
: CxtI
->users()) {
215 if (const ICmpInst
*IC
= dyn_cast
<ICmpInst
>(U
))
216 if (IC
->isEquality())
217 if (Constant
*C
= dyn_cast
<Constant
>(IC
->getOperand(1)))
218 if (C
->isNullValue())
225 static bool isKnownToBeAPowerOfTwo(const Value
*V
, bool OrZero
, unsigned Depth
,
228 bool llvm::isKnownToBeAPowerOfTwo(const Value
*V
, const DataLayout
&DL
,
229 bool OrZero
, unsigned Depth
,
230 AssumptionCache
*AC
, const Instruction
*CxtI
,
231 const DominatorTree
*DT
, bool UseInstrInfo
) {
232 return ::isKnownToBeAPowerOfTwo(
233 V
, OrZero
, Depth
, Query(DL
, AC
, safeCxtI(V
, CxtI
), DT
, UseInstrInfo
));
236 static bool isKnownNonZero(const Value
*V
, unsigned Depth
, const Query
&Q
);
238 bool llvm::isKnownNonZero(const Value
*V
, const DataLayout
&DL
, unsigned Depth
,
239 AssumptionCache
*AC
, const Instruction
*CxtI
,
240 const DominatorTree
*DT
, bool UseInstrInfo
) {
241 return ::isKnownNonZero(V
, Depth
,
242 Query(DL
, AC
, safeCxtI(V
, CxtI
), DT
, UseInstrInfo
));
245 bool llvm::isKnownNonNegative(const Value
*V
, const DataLayout
&DL
,
246 unsigned Depth
, AssumptionCache
*AC
,
247 const Instruction
*CxtI
, const DominatorTree
*DT
,
250 computeKnownBits(V
, DL
, Depth
, AC
, CxtI
, DT
, nullptr, UseInstrInfo
);
251 return Known
.isNonNegative();
254 bool llvm::isKnownPositive(const Value
*V
, const DataLayout
&DL
, unsigned Depth
,
255 AssumptionCache
*AC
, const Instruction
*CxtI
,
256 const DominatorTree
*DT
, bool UseInstrInfo
) {
257 if (auto *CI
= dyn_cast
<ConstantInt
>(V
))
258 return CI
->getValue().isStrictlyPositive();
260 // TODO: We'd doing two recursive queries here. We should factor this such
261 // that only a single query is needed.
262 return isKnownNonNegative(V
, DL
, Depth
, AC
, CxtI
, DT
, UseInstrInfo
) &&
263 isKnownNonZero(V
, DL
, Depth
, AC
, CxtI
, DT
, UseInstrInfo
);
266 bool llvm::isKnownNegative(const Value
*V
, const DataLayout
&DL
, unsigned Depth
,
267 AssumptionCache
*AC
, const Instruction
*CxtI
,
268 const DominatorTree
*DT
, bool UseInstrInfo
) {
270 computeKnownBits(V
, DL
, Depth
, AC
, CxtI
, DT
, nullptr, UseInstrInfo
);
271 return Known
.isNegative();
274 static bool isKnownNonEqual(const Value
*V1
, const Value
*V2
, const Query
&Q
);
276 bool llvm::isKnownNonEqual(const Value
*V1
, const Value
*V2
,
277 const DataLayout
&DL
, AssumptionCache
*AC
,
278 const Instruction
*CxtI
, const DominatorTree
*DT
,
280 return ::isKnownNonEqual(V1
, V2
,
281 Query(DL
, AC
, safeCxtI(V1
, safeCxtI(V2
, CxtI
)), DT
,
282 UseInstrInfo
, /*ORE=*/nullptr));
285 static bool MaskedValueIsZero(const Value
*V
, const APInt
&Mask
, unsigned Depth
,
288 bool llvm::MaskedValueIsZero(const Value
*V
, const APInt
&Mask
,
289 const DataLayout
&DL
, unsigned Depth
,
290 AssumptionCache
*AC
, const Instruction
*CxtI
,
291 const DominatorTree
*DT
, bool UseInstrInfo
) {
292 return ::MaskedValueIsZero(
293 V
, Mask
, Depth
, Query(DL
, AC
, safeCxtI(V
, CxtI
), DT
, UseInstrInfo
));
296 static unsigned ComputeNumSignBits(const Value
*V
, unsigned Depth
,
299 unsigned llvm::ComputeNumSignBits(const Value
*V
, const DataLayout
&DL
,
300 unsigned Depth
, AssumptionCache
*AC
,
301 const Instruction
*CxtI
,
302 const DominatorTree
*DT
, bool UseInstrInfo
) {
303 return ::ComputeNumSignBits(
304 V
, Depth
, Query(DL
, AC
, safeCxtI(V
, CxtI
), DT
, UseInstrInfo
));
307 static void computeKnownBitsAddSub(bool Add
, const Value
*Op0
, const Value
*Op1
,
309 KnownBits
&KnownOut
, KnownBits
&Known2
,
310 unsigned Depth
, const Query
&Q
) {
311 unsigned BitWidth
= KnownOut
.getBitWidth();
313 // If an initial sequence of bits in the result is not needed, the
314 // corresponding bits in the operands are not needed.
315 KnownBits
LHSKnown(BitWidth
);
316 computeKnownBits(Op0
, LHSKnown
, Depth
+ 1, Q
);
317 computeKnownBits(Op1
, Known2
, Depth
+ 1, Q
);
319 KnownOut
= KnownBits::computeForAddSub(Add
, NSW
, LHSKnown
, Known2
);
322 static void computeKnownBitsMul(const Value
*Op0
, const Value
*Op1
, bool NSW
,
323 KnownBits
&Known
, KnownBits
&Known2
,
324 unsigned Depth
, const Query
&Q
) {
325 unsigned BitWidth
= Known
.getBitWidth();
326 computeKnownBits(Op1
, Known
, Depth
+ 1, Q
);
327 computeKnownBits(Op0
, Known2
, Depth
+ 1, Q
);
329 bool isKnownNegative
= false;
330 bool isKnownNonNegative
= false;
331 // If the multiplication is known not to overflow, compute the sign bit.
334 // The product of a number with itself is non-negative.
335 isKnownNonNegative
= true;
337 bool isKnownNonNegativeOp1
= Known
.isNonNegative();
338 bool isKnownNonNegativeOp0
= Known2
.isNonNegative();
339 bool isKnownNegativeOp1
= Known
.isNegative();
340 bool isKnownNegativeOp0
= Known2
.isNegative();
341 // The product of two numbers with the same sign is non-negative.
342 isKnownNonNegative
= (isKnownNegativeOp1
&& isKnownNegativeOp0
) ||
343 (isKnownNonNegativeOp1
&& isKnownNonNegativeOp0
);
344 // The product of a negative number and a non-negative number is either
346 if (!isKnownNonNegative
)
347 isKnownNegative
= (isKnownNegativeOp1
&& isKnownNonNegativeOp0
&&
348 isKnownNonZero(Op0
, Depth
, Q
)) ||
349 (isKnownNegativeOp0
&& isKnownNonNegativeOp1
&&
350 isKnownNonZero(Op1
, Depth
, Q
));
354 assert(!Known
.hasConflict() && !Known2
.hasConflict());
355 // Compute a conservative estimate for high known-0 bits.
356 unsigned LeadZ
= std::max(Known
.countMinLeadingZeros() +
357 Known2
.countMinLeadingZeros(),
358 BitWidth
) - BitWidth
;
359 LeadZ
= std::min(LeadZ
, BitWidth
);
361 // The result of the bottom bits of an integer multiply can be
362 // inferred by looking at the bottom bits of both operands and
363 // multiplying them together.
364 // We can infer at least the minimum number of known trailing bits
365 // of both operands. Depending on number of trailing zeros, we can
366 // infer more bits, because (a*b) <=> ((a/m) * (b/n)) * (m*n) assuming
367 // a and b are divisible by m and n respectively.
368 // We then calculate how many of those bits are inferrable and set
369 // the output. For example, the i8 mul:
372 // We know the bottom 3 bits are zero since the first can be divided by
373 // 4 and the second by 2, thus having ((12/4) * (14/2)) * (2*4).
374 // Applying the multiplication to the trimmed arguments gets:
384 // Which allows us to infer the 2 LSBs. Since we're multiplying the result
385 // by 8, the bottom 3 bits will be 0, so we can infer a total of 5 bits.
386 // The proof for this can be described as:
387 // Pre: (C1 >= 0) && (C1 < (1 << C5)) && (C2 >= 0) && (C2 < (1 << C6)) &&
388 // (C7 == (1 << (umin(countTrailingZeros(C1), C5) +
389 // umin(countTrailingZeros(C2), C6) +
390 // umin(C5 - umin(countTrailingZeros(C1), C5),
391 // C6 - umin(countTrailingZeros(C2), C6)))) - 1)
392 // %aa = shl i8 %a, C5
393 // %bb = shl i8 %b, C6
394 // %aaa = or i8 %aa, C1
395 // %bbb = or i8 %bb, C2
396 // %mul = mul i8 %aaa, %bbb
397 // %mask = and i8 %mul, C7
399 // %mask = i8 ((C1*C2)&C7)
400 // Where C5, C6 describe the known bits of %a, %b
401 // C1, C2 describe the known bottom bits of %a, %b.
402 // C7 describes the mask of the known bits of the result.
403 APInt Bottom0
= Known
.One
;
404 APInt Bottom1
= Known2
.One
;
406 // How many times we'd be able to divide each argument by 2 (shr by 1).
407 // This gives us the number of trailing zeros on the multiplication result.
408 unsigned TrailBitsKnown0
= (Known
.Zero
| Known
.One
).countTrailingOnes();
409 unsigned TrailBitsKnown1
= (Known2
.Zero
| Known2
.One
).countTrailingOnes();
410 unsigned TrailZero0
= Known
.countMinTrailingZeros();
411 unsigned TrailZero1
= Known2
.countMinTrailingZeros();
412 unsigned TrailZ
= TrailZero0
+ TrailZero1
;
414 // Figure out the fewest known-bits operand.
415 unsigned SmallestOperand
= std::min(TrailBitsKnown0
- TrailZero0
,
416 TrailBitsKnown1
- TrailZero1
);
417 unsigned ResultBitsKnown
= std::min(SmallestOperand
+ TrailZ
, BitWidth
);
419 APInt BottomKnown
= Bottom0
.getLoBits(TrailBitsKnown0
) *
420 Bottom1
.getLoBits(TrailBitsKnown1
);
423 Known
.Zero
.setHighBits(LeadZ
);
424 Known
.Zero
|= (~BottomKnown
).getLoBits(ResultBitsKnown
);
425 Known
.One
|= BottomKnown
.getLoBits(ResultBitsKnown
);
427 // Only make use of no-wrap flags if we failed to compute the sign bit
428 // directly. This matters if the multiplication always overflows, in
429 // which case we prefer to follow the result of the direct computation,
430 // though as the program is invoking undefined behaviour we can choose
431 // whatever we like here.
432 if (isKnownNonNegative
&& !Known
.isNegative())
433 Known
.makeNonNegative();
434 else if (isKnownNegative
&& !Known
.isNonNegative())
435 Known
.makeNegative();
438 void llvm::computeKnownBitsFromRangeMetadata(const MDNode
&Ranges
,
440 unsigned BitWidth
= Known
.getBitWidth();
441 unsigned NumRanges
= Ranges
.getNumOperands() / 2;
442 assert(NumRanges
>= 1);
444 Known
.Zero
.setAllBits();
445 Known
.One
.setAllBits();
447 for (unsigned i
= 0; i
< NumRanges
; ++i
) {
449 mdconst::extract
<ConstantInt
>(Ranges
.getOperand(2 * i
+ 0));
451 mdconst::extract
<ConstantInt
>(Ranges
.getOperand(2 * i
+ 1));
452 ConstantRange
Range(Lower
->getValue(), Upper
->getValue());
454 // The first CommonPrefixBits of all values in Range are equal.
455 unsigned CommonPrefixBits
=
456 (Range
.getUnsignedMax() ^ Range
.getUnsignedMin()).countLeadingZeros();
458 APInt Mask
= APInt::getHighBitsSet(BitWidth
, CommonPrefixBits
);
459 Known
.One
&= Range
.getUnsignedMax() & Mask
;
460 Known
.Zero
&= ~Range
.getUnsignedMax() & Mask
;
464 static bool isEphemeralValueOf(const Instruction
*I
, const Value
*E
) {
465 SmallVector
<const Value
*, 16> WorkSet(1, I
);
466 SmallPtrSet
<const Value
*, 32> Visited
;
467 SmallPtrSet
<const Value
*, 16> EphValues
;
469 // The instruction defining an assumption's condition itself is always
470 // considered ephemeral to that assumption (even if it has other
471 // non-ephemeral users). See r246696's test case for an example.
472 if (is_contained(I
->operands(), E
))
475 while (!WorkSet
.empty()) {
476 const Value
*V
= WorkSet
.pop_back_val();
477 if (!Visited
.insert(V
).second
)
480 // If all uses of this value are ephemeral, then so is this value.
481 if (llvm::all_of(V
->users(), [&](const User
*U
) {
482 return EphValues
.count(U
);
487 if (V
== I
|| isSafeToSpeculativelyExecute(V
)) {
489 if (const User
*U
= dyn_cast
<User
>(V
))
490 for (User::const_op_iterator J
= U
->op_begin(), JE
= U
->op_end();
492 WorkSet
.push_back(*J
);
500 // Is this an intrinsic that cannot be speculated but also cannot trap?
501 bool llvm::isAssumeLikeIntrinsic(const Instruction
*I
) {
502 if (const CallInst
*CI
= dyn_cast
<CallInst
>(I
))
503 if (Function
*F
= CI
->getCalledFunction())
504 switch (F
->getIntrinsicID()) {
506 // FIXME: This list is repeated from NoTTI::getIntrinsicCost.
507 case Intrinsic::assume
:
508 case Intrinsic::sideeffect
:
509 case Intrinsic::dbg_declare
:
510 case Intrinsic::dbg_value
:
511 case Intrinsic::dbg_label
:
512 case Intrinsic::invariant_start
:
513 case Intrinsic::invariant_end
:
514 case Intrinsic::lifetime_start
:
515 case Intrinsic::lifetime_end
:
516 case Intrinsic::objectsize
:
517 case Intrinsic::ptr_annotation
:
518 case Intrinsic::var_annotation
:
525 bool llvm::isValidAssumeForContext(const Instruction
*Inv
,
526 const Instruction
*CxtI
,
527 const DominatorTree
*DT
) {
528 // There are two restrictions on the use of an assume:
529 // 1. The assume must dominate the context (or the control flow must
530 // reach the assume whenever it reaches the context).
531 // 2. The context must not be in the assume's set of ephemeral values
532 // (otherwise we will use the assume to prove that the condition
533 // feeding the assume is trivially true, thus causing the removal of
537 if (DT
->dominates(Inv
, CxtI
))
539 } else if (Inv
->getParent() == CxtI
->getParent()->getSinglePredecessor()) {
540 // We don't have a DT, but this trivially dominates.
544 // With or without a DT, the only remaining case we will check is if the
545 // instructions are in the same BB. Give up if that is not the case.
546 if (Inv
->getParent() != CxtI
->getParent())
549 // If we have a dom tree, then we now know that the assume doesn't dominate
550 // the other instruction. If we don't have a dom tree then we can check if
551 // the assume is first in the BB.
553 // Search forward from the assume until we reach the context (or the end
554 // of the block); the common case is that the assume will come first.
555 for (auto I
= std::next(BasicBlock::const_iterator(Inv
)),
556 IE
= Inv
->getParent()->end(); I
!= IE
; ++I
)
561 // Don't let an assume affect itself - this would cause the problems
562 // `isEphemeralValueOf` is trying to prevent, and it would also make
563 // the loop below go out of bounds.
567 // The context comes first, but they're both in the same block. Make sure
568 // there is nothing in between that might interrupt the control flow.
569 for (BasicBlock::const_iterator I
=
570 std::next(BasicBlock::const_iterator(CxtI
)), IE(Inv
);
572 if (!isGuaranteedToTransferExecutionToSuccessor(&*I
))
575 return !isEphemeralValueOf(Inv
, CxtI
);
578 static void computeKnownBitsFromAssume(const Value
*V
, KnownBits
&Known
,
579 unsigned Depth
, const Query
&Q
) {
580 // Use of assumptions is context-sensitive. If we don't have a context, we
582 if (!Q
.AC
|| !Q
.CxtI
)
585 unsigned BitWidth
= Known
.getBitWidth();
587 // Note that the patterns below need to be kept in sync with the code
588 // in AssumptionCache::updateAffectedValues.
590 for (auto &AssumeVH
: Q
.AC
->assumptionsFor(V
)) {
593 CallInst
*I
= cast
<CallInst
>(AssumeVH
);
594 assert(I
->getParent()->getParent() == Q
.CxtI
->getParent()->getParent() &&
595 "Got assumption for the wrong function!");
599 // Warning: This loop can end up being somewhat performance sensitive.
600 // We're running this loop for once for each value queried resulting in a
601 // runtime of ~O(#assumes * #values).
603 assert(I
->getCalledFunction()->getIntrinsicID() == Intrinsic::assume
&&
604 "must be an assume intrinsic");
606 Value
*Arg
= I
->getArgOperand(0);
608 if (Arg
== V
&& isValidAssumeForContext(I
, Q
.CxtI
, Q
.DT
)) {
609 assert(BitWidth
== 1 && "assume operand is not i1?");
613 if (match(Arg
, m_Not(m_Specific(V
))) &&
614 isValidAssumeForContext(I
, Q
.CxtI
, Q
.DT
)) {
615 assert(BitWidth
== 1 && "assume operand is not i1?");
620 // The remaining tests are all recursive, so bail out if we hit the limit.
621 if (Depth
== MaxDepth
)
624 ICmpInst
*Cmp
= dyn_cast
<ICmpInst
>(Arg
);
629 auto m_V
= m_CombineOr(m_Specific(V
), m_PtrToInt(m_Specific(V
)));
631 CmpInst::Predicate Pred
;
633 switch (Cmp
->getPredicate()) {
636 case ICmpInst::ICMP_EQ
:
638 if (match(Cmp
, m_c_ICmp(Pred
, m_V
, m_Value(A
))) &&
639 isValidAssumeForContext(I
, Q
.CxtI
, Q
.DT
)) {
640 KnownBits
RHSKnown(BitWidth
);
641 computeKnownBits(A
, RHSKnown
, Depth
+1, Query(Q
, I
));
642 Known
.Zero
|= RHSKnown
.Zero
;
643 Known
.One
|= RHSKnown
.One
;
645 } else if (match(Cmp
,
646 m_c_ICmp(Pred
, m_c_And(m_V
, m_Value(B
)), m_Value(A
))) &&
647 isValidAssumeForContext(I
, Q
.CxtI
, Q
.DT
)) {
648 KnownBits
RHSKnown(BitWidth
);
649 computeKnownBits(A
, RHSKnown
, Depth
+1, Query(Q
, I
));
650 KnownBits
MaskKnown(BitWidth
);
651 computeKnownBits(B
, MaskKnown
, Depth
+1, Query(Q
, I
));
653 // For those bits in the mask that are known to be one, we can propagate
654 // known bits from the RHS to V.
655 Known
.Zero
|= RHSKnown
.Zero
& MaskKnown
.One
;
656 Known
.One
|= RHSKnown
.One
& MaskKnown
.One
;
657 // assume(~(v & b) = a)
658 } else if (match(Cmp
, m_c_ICmp(Pred
, m_Not(m_c_And(m_V
, m_Value(B
))),
660 isValidAssumeForContext(I
, Q
.CxtI
, Q
.DT
)) {
661 KnownBits
RHSKnown(BitWidth
);
662 computeKnownBits(A
, RHSKnown
, Depth
+1, Query(Q
, I
));
663 KnownBits
MaskKnown(BitWidth
);
664 computeKnownBits(B
, MaskKnown
, Depth
+1, Query(Q
, I
));
666 // For those bits in the mask that are known to be one, we can propagate
667 // inverted known bits from the RHS to V.
668 Known
.Zero
|= RHSKnown
.One
& MaskKnown
.One
;
669 Known
.One
|= RHSKnown
.Zero
& MaskKnown
.One
;
671 } else if (match(Cmp
,
672 m_c_ICmp(Pred
, m_c_Or(m_V
, m_Value(B
)), m_Value(A
))) &&
673 isValidAssumeForContext(I
, Q
.CxtI
, Q
.DT
)) {
674 KnownBits
RHSKnown(BitWidth
);
675 computeKnownBits(A
, RHSKnown
, Depth
+1, Query(Q
, I
));
676 KnownBits
BKnown(BitWidth
);
677 computeKnownBits(B
, BKnown
, Depth
+1, Query(Q
, I
));
679 // For those bits in B that are known to be zero, we can propagate known
680 // bits from the RHS to V.
681 Known
.Zero
|= RHSKnown
.Zero
& BKnown
.Zero
;
682 Known
.One
|= RHSKnown
.One
& BKnown
.Zero
;
683 // assume(~(v | b) = a)
684 } else if (match(Cmp
, m_c_ICmp(Pred
, m_Not(m_c_Or(m_V
, m_Value(B
))),
686 isValidAssumeForContext(I
, Q
.CxtI
, Q
.DT
)) {
687 KnownBits
RHSKnown(BitWidth
);
688 computeKnownBits(A
, RHSKnown
, Depth
+1, Query(Q
, I
));
689 KnownBits
BKnown(BitWidth
);
690 computeKnownBits(B
, BKnown
, Depth
+1, Query(Q
, I
));
692 // For those bits in B that are known to be zero, we can propagate
693 // inverted known bits from the RHS to V.
694 Known
.Zero
|= RHSKnown
.One
& BKnown
.Zero
;
695 Known
.One
|= RHSKnown
.Zero
& BKnown
.Zero
;
697 } else if (match(Cmp
,
698 m_c_ICmp(Pred
, m_c_Xor(m_V
, m_Value(B
)), m_Value(A
))) &&
699 isValidAssumeForContext(I
, Q
.CxtI
, Q
.DT
)) {
700 KnownBits
RHSKnown(BitWidth
);
701 computeKnownBits(A
, RHSKnown
, Depth
+1, Query(Q
, I
));
702 KnownBits
BKnown(BitWidth
);
703 computeKnownBits(B
, BKnown
, Depth
+1, Query(Q
, I
));
705 // For those bits in B that are known to be zero, we can propagate known
706 // bits from the RHS to V. For those bits in B that are known to be one,
707 // we can propagate inverted known bits from the RHS to V.
708 Known
.Zero
|= RHSKnown
.Zero
& BKnown
.Zero
;
709 Known
.One
|= RHSKnown
.One
& BKnown
.Zero
;
710 Known
.Zero
|= RHSKnown
.One
& BKnown
.One
;
711 Known
.One
|= RHSKnown
.Zero
& BKnown
.One
;
712 // assume(~(v ^ b) = a)
713 } else if (match(Cmp
, m_c_ICmp(Pred
, m_Not(m_c_Xor(m_V
, m_Value(B
))),
715 isValidAssumeForContext(I
, Q
.CxtI
, Q
.DT
)) {
716 KnownBits
RHSKnown(BitWidth
);
717 computeKnownBits(A
, RHSKnown
, Depth
+1, Query(Q
, I
));
718 KnownBits
BKnown(BitWidth
);
719 computeKnownBits(B
, BKnown
, Depth
+1, Query(Q
, I
));
721 // For those bits in B that are known to be zero, we can propagate
722 // inverted known bits from the RHS to V. For those bits in B that are
723 // known to be one, we can propagate known bits from the RHS to V.
724 Known
.Zero
|= RHSKnown
.One
& BKnown
.Zero
;
725 Known
.One
|= RHSKnown
.Zero
& BKnown
.Zero
;
726 Known
.Zero
|= RHSKnown
.Zero
& BKnown
.One
;
727 Known
.One
|= RHSKnown
.One
& BKnown
.One
;
728 // assume(v << c = a)
729 } else if (match(Cmp
, m_c_ICmp(Pred
, m_Shl(m_V
, m_ConstantInt(C
)),
731 isValidAssumeForContext(I
, Q
.CxtI
, Q
.DT
) && C
< BitWidth
) {
732 KnownBits
RHSKnown(BitWidth
);
733 computeKnownBits(A
, RHSKnown
, Depth
+1, Query(Q
, I
));
734 // For those bits in RHS that are known, we can propagate them to known
735 // bits in V shifted to the right by C.
736 RHSKnown
.Zero
.lshrInPlace(C
);
737 Known
.Zero
|= RHSKnown
.Zero
;
738 RHSKnown
.One
.lshrInPlace(C
);
739 Known
.One
|= RHSKnown
.One
;
740 // assume(~(v << c) = a)
741 } else if (match(Cmp
, m_c_ICmp(Pred
, m_Not(m_Shl(m_V
, m_ConstantInt(C
))),
743 isValidAssumeForContext(I
, Q
.CxtI
, Q
.DT
) && C
< BitWidth
) {
744 KnownBits
RHSKnown(BitWidth
);
745 computeKnownBits(A
, RHSKnown
, Depth
+1, Query(Q
, I
));
746 // For those bits in RHS that are known, we can propagate them inverted
747 // to known bits in V shifted to the right by C.
748 RHSKnown
.One
.lshrInPlace(C
);
749 Known
.Zero
|= RHSKnown
.One
;
750 RHSKnown
.Zero
.lshrInPlace(C
);
751 Known
.One
|= RHSKnown
.Zero
;
752 // assume(v >> c = a)
753 } else if (match(Cmp
, m_c_ICmp(Pred
, m_Shr(m_V
, m_ConstantInt(C
)),
755 isValidAssumeForContext(I
, Q
.CxtI
, Q
.DT
) && C
< BitWidth
) {
756 KnownBits
RHSKnown(BitWidth
);
757 computeKnownBits(A
, RHSKnown
, Depth
+1, Query(Q
, I
));
758 // For those bits in RHS that are known, we can propagate them to known
759 // bits in V shifted to the right by C.
760 Known
.Zero
|= RHSKnown
.Zero
<< C
;
761 Known
.One
|= RHSKnown
.One
<< C
;
762 // assume(~(v >> c) = a)
763 } else if (match(Cmp
, m_c_ICmp(Pred
, m_Not(m_Shr(m_V
, m_ConstantInt(C
))),
765 isValidAssumeForContext(I
, Q
.CxtI
, Q
.DT
) && C
< BitWidth
) {
766 KnownBits
RHSKnown(BitWidth
);
767 computeKnownBits(A
, RHSKnown
, Depth
+1, Query(Q
, I
));
768 // For those bits in RHS that are known, we can propagate them inverted
769 // to known bits in V shifted to the right by C.
770 Known
.Zero
|= RHSKnown
.One
<< C
;
771 Known
.One
|= RHSKnown
.Zero
<< C
;
774 case ICmpInst::ICMP_SGE
:
775 // assume(v >=_s c) where c is non-negative
776 if (match(Cmp
, m_ICmp(Pred
, m_V
, m_Value(A
))) &&
777 isValidAssumeForContext(I
, Q
.CxtI
, Q
.DT
)) {
778 KnownBits
RHSKnown(BitWidth
);
779 computeKnownBits(A
, RHSKnown
, Depth
+ 1, Query(Q
, I
));
781 if (RHSKnown
.isNonNegative()) {
782 // We know that the sign bit is zero.
783 Known
.makeNonNegative();
787 case ICmpInst::ICMP_SGT
:
788 // assume(v >_s c) where c is at least -1.
789 if (match(Cmp
, m_ICmp(Pred
, m_V
, m_Value(A
))) &&
790 isValidAssumeForContext(I
, Q
.CxtI
, Q
.DT
)) {
791 KnownBits
RHSKnown(BitWidth
);
792 computeKnownBits(A
, RHSKnown
, Depth
+ 1, Query(Q
, I
));
794 if (RHSKnown
.isAllOnes() || RHSKnown
.isNonNegative()) {
795 // We know that the sign bit is zero.
796 Known
.makeNonNegative();
800 case ICmpInst::ICMP_SLE
:
801 // assume(v <=_s c) where c is negative
802 if (match(Cmp
, m_ICmp(Pred
, m_V
, m_Value(A
))) &&
803 isValidAssumeForContext(I
, Q
.CxtI
, Q
.DT
)) {
804 KnownBits
RHSKnown(BitWidth
);
805 computeKnownBits(A
, RHSKnown
, Depth
+ 1, Query(Q
, I
));
807 if (RHSKnown
.isNegative()) {
808 // We know that the sign bit is one.
809 Known
.makeNegative();
813 case ICmpInst::ICMP_SLT
:
814 // assume(v <_s c) where c is non-positive
815 if (match(Cmp
, m_ICmp(Pred
, m_V
, m_Value(A
))) &&
816 isValidAssumeForContext(I
, Q
.CxtI
, Q
.DT
)) {
817 KnownBits
RHSKnown(BitWidth
);
818 computeKnownBits(A
, RHSKnown
, Depth
+1, Query(Q
, I
));
820 if (RHSKnown
.isZero() || RHSKnown
.isNegative()) {
821 // We know that the sign bit is one.
822 Known
.makeNegative();
826 case ICmpInst::ICMP_ULE
:
828 if (match(Cmp
, m_ICmp(Pred
, m_V
, m_Value(A
))) &&
829 isValidAssumeForContext(I
, Q
.CxtI
, Q
.DT
)) {
830 KnownBits
RHSKnown(BitWidth
);
831 computeKnownBits(A
, RHSKnown
, Depth
+1, Query(Q
, I
));
833 // Whatever high bits in c are zero are known to be zero.
834 Known
.Zero
.setHighBits(RHSKnown
.countMinLeadingZeros());
837 case ICmpInst::ICMP_ULT
:
839 if (match(Cmp
, m_ICmp(Pred
, m_V
, m_Value(A
))) &&
840 isValidAssumeForContext(I
, Q
.CxtI
, Q
.DT
)) {
841 KnownBits
RHSKnown(BitWidth
);
842 computeKnownBits(A
, RHSKnown
, Depth
+1, Query(Q
, I
));
844 // If the RHS is known zero, then this assumption must be wrong (nothing
845 // is unsigned less than zero). Signal a conflict and get out of here.
846 if (RHSKnown
.isZero()) {
847 Known
.Zero
.setAllBits();
848 Known
.One
.setAllBits();
852 // Whatever high bits in c are zero are known to be zero (if c is a power
853 // of 2, then one more).
854 if (isKnownToBeAPowerOfTwo(A
, false, Depth
+ 1, Query(Q
, I
)))
855 Known
.Zero
.setHighBits(RHSKnown
.countMinLeadingZeros() + 1);
857 Known
.Zero
.setHighBits(RHSKnown
.countMinLeadingZeros());
863 // If assumptions conflict with each other or previous known bits, then we
864 // have a logical fallacy. It's possible that the assumption is not reachable,
865 // so this isn't a real bug. On the other hand, the program may have undefined
866 // behavior, or we might have a bug in the compiler. We can't assert/crash, so
867 // clear out the known bits, try to warn the user, and hope for the best.
868 if (Known
.Zero
.intersects(Known
.One
)) {
873 auto *CxtI
= const_cast<Instruction
*>(Q
.CxtI
);
874 return OptimizationRemarkAnalysis("value-tracking", "BadAssumption",
876 << "Detected conflicting code assumptions. Program may "
877 "have undefined behavior, or compiler may have "
883 /// Compute known bits from a shift operator, including those with a
884 /// non-constant shift amount. Known is the output of this function. Known2 is a
885 /// pre-allocated temporary with the same bit width as Known. KZF and KOF are
886 /// operator-specific functions that, given the known-zero or known-one bits
887 /// respectively, and a shift amount, compute the implied known-zero or
888 /// known-one bits of the shift operator's result respectively for that shift
889 /// amount. The results from calling KZF and KOF are conservatively combined for
890 /// all permitted shift amounts.
891 static void computeKnownBitsFromShiftOperator(
892 const Operator
*I
, KnownBits
&Known
, KnownBits
&Known2
,
893 unsigned Depth
, const Query
&Q
,
894 function_ref
<APInt(const APInt
&, unsigned)> KZF
,
895 function_ref
<APInt(const APInt
&, unsigned)> KOF
) {
896 unsigned BitWidth
= Known
.getBitWidth();
898 if (auto *SA
= dyn_cast
<ConstantInt
>(I
->getOperand(1))) {
899 unsigned ShiftAmt
= SA
->getLimitedValue(BitWidth
-1);
901 computeKnownBits(I
->getOperand(0), Known
, Depth
+ 1, Q
);
902 Known
.Zero
= KZF(Known
.Zero
, ShiftAmt
);
903 Known
.One
= KOF(Known
.One
, ShiftAmt
);
904 // If the known bits conflict, this must be an overflowing left shift, so
905 // the shift result is poison. We can return anything we want. Choose 0 for
906 // the best folding opportunity.
907 if (Known
.hasConflict())
913 computeKnownBits(I
->getOperand(1), Known
, Depth
+ 1, Q
);
915 // If the shift amount could be greater than or equal to the bit-width of the
916 // LHS, the value could be poison, but bail out because the check below is
917 // expensive. TODO: Should we just carry on?
918 if ((~Known
.Zero
).uge(BitWidth
)) {
923 // Note: We cannot use Known.Zero.getLimitedValue() here, because if
924 // BitWidth > 64 and any upper bits are known, we'll end up returning the
925 // limit value (which implies all bits are known).
926 uint64_t ShiftAmtKZ
= Known
.Zero
.zextOrTrunc(64).getZExtValue();
927 uint64_t ShiftAmtKO
= Known
.One
.zextOrTrunc(64).getZExtValue();
929 // It would be more-clearly correct to use the two temporaries for this
930 // calculation. Reusing the APInts here to prevent unnecessary allocations.
933 // If we know the shifter operand is nonzero, we can sometimes infer more
934 // known bits. However this is expensive to compute, so be lazy about it and
935 // only compute it when absolutely necessary.
936 Optional
<bool> ShifterOperandIsNonZero
;
938 // Early exit if we can't constrain any well-defined shift amount.
939 if (!(ShiftAmtKZ
& (PowerOf2Ceil(BitWidth
) - 1)) &&
940 !(ShiftAmtKO
& (PowerOf2Ceil(BitWidth
) - 1))) {
941 ShifterOperandIsNonZero
= isKnownNonZero(I
->getOperand(1), Depth
+ 1, Q
);
942 if (!*ShifterOperandIsNonZero
)
946 computeKnownBits(I
->getOperand(0), Known2
, Depth
+ 1, Q
);
948 Known
.Zero
.setAllBits();
949 Known
.One
.setAllBits();
950 for (unsigned ShiftAmt
= 0; ShiftAmt
< BitWidth
; ++ShiftAmt
) {
951 // Combine the shifted known input bits only for those shift amounts
952 // compatible with its known constraints.
953 if ((ShiftAmt
& ~ShiftAmtKZ
) != ShiftAmt
)
955 if ((ShiftAmt
| ShiftAmtKO
) != ShiftAmt
)
957 // If we know the shifter is nonzero, we may be able to infer more known
958 // bits. This check is sunk down as far as possible to avoid the expensive
959 // call to isKnownNonZero if the cheaper checks above fail.
961 if (!ShifterOperandIsNonZero
.hasValue())
962 ShifterOperandIsNonZero
=
963 isKnownNonZero(I
->getOperand(1), Depth
+ 1, Q
);
964 if (*ShifterOperandIsNonZero
)
968 Known
.Zero
&= KZF(Known2
.Zero
, ShiftAmt
);
969 Known
.One
&= KOF(Known2
.One
, ShiftAmt
);
972 // If the known bits conflict, the result is poison. Return a 0 and hope the
973 // caller can further optimize that.
974 if (Known
.hasConflict())
978 static void computeKnownBitsFromOperator(const Operator
*I
, KnownBits
&Known
,
979 unsigned Depth
, const Query
&Q
) {
980 unsigned BitWidth
= Known
.getBitWidth();
982 KnownBits
Known2(Known
);
983 switch (I
->getOpcode()) {
985 case Instruction::Load
:
987 Q
.IIQ
.getMetadata(cast
<LoadInst
>(I
), LLVMContext::MD_range
))
988 computeKnownBitsFromRangeMetadata(*MD
, Known
);
990 case Instruction::And
: {
991 // If either the LHS or the RHS are Zero, the result is zero.
992 computeKnownBits(I
->getOperand(1), Known
, Depth
+ 1, Q
);
993 computeKnownBits(I
->getOperand(0), Known2
, Depth
+ 1, Q
);
995 // Output known-1 bits are only known if set in both the LHS & RHS.
996 Known
.One
&= Known2
.One
;
997 // Output known-0 are known to be clear if zero in either the LHS | RHS.
998 Known
.Zero
|= Known2
.Zero
;
1000 // and(x, add (x, -1)) is a common idiom that always clears the low bit;
1001 // here we handle the more general case of adding any odd number by
1002 // matching the form add(x, add(x, y)) where y is odd.
1003 // TODO: This could be generalized to clearing any bit set in y where the
1004 // following bit is known to be unset in y.
1005 Value
*X
= nullptr, *Y
= nullptr;
1006 if (!Known
.Zero
[0] && !Known
.One
[0] &&
1007 match(I
, m_c_BinOp(m_Value(X
), m_Add(m_Deferred(X
), m_Value(Y
))))) {
1009 computeKnownBits(Y
, Known2
, Depth
+ 1, Q
);
1010 if (Known2
.countMinTrailingOnes() > 0)
1011 Known
.Zero
.setBit(0);
1015 case Instruction::Or
:
1016 computeKnownBits(I
->getOperand(1), Known
, Depth
+ 1, Q
);
1017 computeKnownBits(I
->getOperand(0), Known2
, Depth
+ 1, Q
);
1019 // Output known-0 bits are only known if clear in both the LHS & RHS.
1020 Known
.Zero
&= Known2
.Zero
;
1021 // Output known-1 are known to be set if set in either the LHS | RHS.
1022 Known
.One
|= Known2
.One
;
1024 case Instruction::Xor
: {
1025 computeKnownBits(I
->getOperand(1), Known
, Depth
+ 1, Q
);
1026 computeKnownBits(I
->getOperand(0), Known2
, Depth
+ 1, Q
);
1028 // Output known-0 bits are known if clear or set in both the LHS & RHS.
1029 APInt KnownZeroOut
= (Known
.Zero
& Known2
.Zero
) | (Known
.One
& Known2
.One
);
1030 // Output known-1 are known to be set if set in only one of the LHS, RHS.
1031 Known
.One
= (Known
.Zero
& Known2
.One
) | (Known
.One
& Known2
.Zero
);
1032 Known
.Zero
= std::move(KnownZeroOut
);
1035 case Instruction::Mul
: {
1036 bool NSW
= Q
.IIQ
.hasNoSignedWrap(cast
<OverflowingBinaryOperator
>(I
));
1037 computeKnownBitsMul(I
->getOperand(0), I
->getOperand(1), NSW
, Known
,
1041 case Instruction::UDiv
: {
1042 // For the purposes of computing leading zeros we can conservatively
1043 // treat a udiv as a logical right shift by the power of 2 known to
1044 // be less than the denominator.
1045 computeKnownBits(I
->getOperand(0), Known2
, Depth
+ 1, Q
);
1046 unsigned LeadZ
= Known2
.countMinLeadingZeros();
1049 computeKnownBits(I
->getOperand(1), Known2
, Depth
+ 1, Q
);
1050 unsigned RHSMaxLeadingZeros
= Known2
.countMaxLeadingZeros();
1051 if (RHSMaxLeadingZeros
!= BitWidth
)
1052 LeadZ
= std::min(BitWidth
, LeadZ
+ BitWidth
- RHSMaxLeadingZeros
- 1);
1054 Known
.Zero
.setHighBits(LeadZ
);
1057 case Instruction::Select
: {
1058 const Value
*LHS
, *RHS
;
1059 SelectPatternFlavor SPF
= matchSelectPattern(I
, LHS
, RHS
).Flavor
;
1060 if (SelectPatternResult::isMinOrMax(SPF
)) {
1061 computeKnownBits(RHS
, Known
, Depth
+ 1, Q
);
1062 computeKnownBits(LHS
, Known2
, Depth
+ 1, Q
);
1064 computeKnownBits(I
->getOperand(2), Known
, Depth
+ 1, Q
);
1065 computeKnownBits(I
->getOperand(1), Known2
, Depth
+ 1, Q
);
1068 unsigned MaxHighOnes
= 0;
1069 unsigned MaxHighZeros
= 0;
1070 if (SPF
== SPF_SMAX
) {
1071 // If both sides are negative, the result is negative.
1072 if (Known
.isNegative() && Known2
.isNegative())
1073 // We can derive a lower bound on the result by taking the max of the
1074 // leading one bits.
1076 std::max(Known
.countMinLeadingOnes(), Known2
.countMinLeadingOnes());
1077 // If either side is non-negative, the result is non-negative.
1078 else if (Known
.isNonNegative() || Known2
.isNonNegative())
1080 } else if (SPF
== SPF_SMIN
) {
1081 // If both sides are non-negative, the result is non-negative.
1082 if (Known
.isNonNegative() && Known2
.isNonNegative())
1083 // We can derive an upper bound on the result by taking the max of the
1084 // leading zero bits.
1085 MaxHighZeros
= std::max(Known
.countMinLeadingZeros(),
1086 Known2
.countMinLeadingZeros());
1087 // If either side is negative, the result is negative.
1088 else if (Known
.isNegative() || Known2
.isNegative())
1090 } else if (SPF
== SPF_UMAX
) {
1091 // We can derive a lower bound on the result by taking the max of the
1092 // leading one bits.
1094 std::max(Known
.countMinLeadingOnes(), Known2
.countMinLeadingOnes());
1095 } else if (SPF
== SPF_UMIN
) {
1096 // We can derive an upper bound on the result by taking the max of the
1097 // leading zero bits.
1099 std::max(Known
.countMinLeadingZeros(), Known2
.countMinLeadingZeros());
1100 } else if (SPF
== SPF_ABS
) {
1101 // RHS from matchSelectPattern returns the negation part of abs pattern.
1102 // If the negate has an NSW flag we can assume the sign bit of the result
1103 // will be 0 because that makes abs(INT_MIN) undefined.
1104 if (match(RHS
, m_Neg(m_Specific(LHS
))) &&
1105 Q
.IIQ
.hasNoSignedWrap(cast
<Instruction
>(RHS
)))
1109 // Only known if known in both the LHS and RHS.
1110 Known
.One
&= Known2
.One
;
1111 Known
.Zero
&= Known2
.Zero
;
1112 if (MaxHighOnes
> 0)
1113 Known
.One
.setHighBits(MaxHighOnes
);
1114 if (MaxHighZeros
> 0)
1115 Known
.Zero
.setHighBits(MaxHighZeros
);
1118 case Instruction::FPTrunc
:
1119 case Instruction::FPExt
:
1120 case Instruction::FPToUI
:
1121 case Instruction::FPToSI
:
1122 case Instruction::SIToFP
:
1123 case Instruction::UIToFP
:
1124 break; // Can't work with floating point.
1125 case Instruction::PtrToInt
:
1126 case Instruction::IntToPtr
:
1127 // Fall through and handle them the same as zext/trunc.
1129 case Instruction::ZExt
:
1130 case Instruction::Trunc
: {
1131 Type
*SrcTy
= I
->getOperand(0)->getType();
1133 unsigned SrcBitWidth
;
1134 // Note that we handle pointer operands here because of inttoptr/ptrtoint
1135 // which fall through here.
1136 Type
*ScalarTy
= SrcTy
->getScalarType();
1137 SrcBitWidth
= ScalarTy
->isPointerTy() ?
1138 Q
.DL
.getIndexTypeSizeInBits(ScalarTy
) :
1139 Q
.DL
.getTypeSizeInBits(ScalarTy
);
1141 assert(SrcBitWidth
&& "SrcBitWidth can't be zero");
1142 Known
= Known
.zextOrTrunc(SrcBitWidth
, false);
1143 computeKnownBits(I
->getOperand(0), Known
, Depth
+ 1, Q
);
1144 Known
= Known
.zextOrTrunc(BitWidth
, true /* ExtendedBitsAreKnownZero */);
1147 case Instruction::BitCast
: {
1148 Type
*SrcTy
= I
->getOperand(0)->getType();
1149 if (SrcTy
->isIntOrPtrTy() &&
1150 // TODO: For now, not handling conversions like:
1151 // (bitcast i64 %x to <2 x i32>)
1152 !I
->getType()->isVectorTy()) {
1153 computeKnownBits(I
->getOperand(0), Known
, Depth
+ 1, Q
);
1158 case Instruction::SExt
: {
1159 // Compute the bits in the result that are not present in the input.
1160 unsigned SrcBitWidth
= I
->getOperand(0)->getType()->getScalarSizeInBits();
1162 Known
= Known
.trunc(SrcBitWidth
);
1163 computeKnownBits(I
->getOperand(0), Known
, Depth
+ 1, Q
);
1164 // If the sign bit of the input is known set or clear, then we know the
1165 // top bits of the result.
1166 Known
= Known
.sext(BitWidth
);
1169 case Instruction::Shl
: {
1170 // (shl X, C1) & C2 == 0 iff (X & C2 >>u C1) == 0
1171 bool NSW
= Q
.IIQ
.hasNoSignedWrap(cast
<OverflowingBinaryOperator
>(I
));
1172 auto KZF
= [NSW
](const APInt
&KnownZero
, unsigned ShiftAmt
) {
1173 APInt KZResult
= KnownZero
<< ShiftAmt
;
1174 KZResult
.setLowBits(ShiftAmt
); // Low bits known 0.
1175 // If this shift has "nsw" keyword, then the result is either a poison
1176 // value or has the same sign bit as the first operand.
1177 if (NSW
&& KnownZero
.isSignBitSet())
1178 KZResult
.setSignBit();
1182 auto KOF
= [NSW
](const APInt
&KnownOne
, unsigned ShiftAmt
) {
1183 APInt KOResult
= KnownOne
<< ShiftAmt
;
1184 if (NSW
&& KnownOne
.isSignBitSet())
1185 KOResult
.setSignBit();
1189 computeKnownBitsFromShiftOperator(I
, Known
, Known2
, Depth
, Q
, KZF
, KOF
);
1192 case Instruction::LShr
: {
1193 // (lshr X, C1) & C2 == 0 iff (-1 >> C1) & C2 == 0
1194 auto KZF
= [](const APInt
&KnownZero
, unsigned ShiftAmt
) {
1195 APInt KZResult
= KnownZero
.lshr(ShiftAmt
);
1196 // High bits known zero.
1197 KZResult
.setHighBits(ShiftAmt
);
1201 auto KOF
= [](const APInt
&KnownOne
, unsigned ShiftAmt
) {
1202 return KnownOne
.lshr(ShiftAmt
);
1205 computeKnownBitsFromShiftOperator(I
, Known
, Known2
, Depth
, Q
, KZF
, KOF
);
1208 case Instruction::AShr
: {
1209 // (ashr X, C1) & C2 == 0 iff (-1 >> C1) & C2 == 0
1210 auto KZF
= [](const APInt
&KnownZero
, unsigned ShiftAmt
) {
1211 return KnownZero
.ashr(ShiftAmt
);
1214 auto KOF
= [](const APInt
&KnownOne
, unsigned ShiftAmt
) {
1215 return KnownOne
.ashr(ShiftAmt
);
1218 computeKnownBitsFromShiftOperator(I
, Known
, Known2
, Depth
, Q
, KZF
, KOF
);
1221 case Instruction::Sub
: {
1222 bool NSW
= Q
.IIQ
.hasNoSignedWrap(cast
<OverflowingBinaryOperator
>(I
));
1223 computeKnownBitsAddSub(false, I
->getOperand(0), I
->getOperand(1), NSW
,
1224 Known
, Known2
, Depth
, Q
);
1227 case Instruction::Add
: {
1228 bool NSW
= Q
.IIQ
.hasNoSignedWrap(cast
<OverflowingBinaryOperator
>(I
));
1229 computeKnownBitsAddSub(true, I
->getOperand(0), I
->getOperand(1), NSW
,
1230 Known
, Known2
, Depth
, Q
);
1233 case Instruction::SRem
:
1234 if (ConstantInt
*Rem
= dyn_cast
<ConstantInt
>(I
->getOperand(1))) {
1235 APInt RA
= Rem
->getValue().abs();
1236 if (RA
.isPowerOf2()) {
1237 APInt LowBits
= RA
- 1;
1238 computeKnownBits(I
->getOperand(0), Known2
, Depth
+ 1, Q
);
1240 // The low bits of the first operand are unchanged by the srem.
1241 Known
.Zero
= Known2
.Zero
& LowBits
;
1242 Known
.One
= Known2
.One
& LowBits
;
1244 // If the first operand is non-negative or has all low bits zero, then
1245 // the upper bits are all zero.
1246 if (Known2
.isNonNegative() || LowBits
.isSubsetOf(Known2
.Zero
))
1247 Known
.Zero
|= ~LowBits
;
1249 // If the first operand is negative and not all low bits are zero, then
1250 // the upper bits are all one.
1251 if (Known2
.isNegative() && LowBits
.intersects(Known2
.One
))
1252 Known
.One
|= ~LowBits
;
1254 assert((Known
.Zero
& Known
.One
) == 0 && "Bits known to be one AND zero?");
1259 // The sign bit is the LHS's sign bit, except when the result of the
1260 // remainder is zero.
1261 computeKnownBits(I
->getOperand(0), Known2
, Depth
+ 1, Q
);
1262 // If it's known zero, our sign bit is also zero.
1263 if (Known2
.isNonNegative())
1264 Known
.makeNonNegative();
1267 case Instruction::URem
: {
1268 if (ConstantInt
*Rem
= dyn_cast
<ConstantInt
>(I
->getOperand(1))) {
1269 const APInt
&RA
= Rem
->getValue();
1270 if (RA
.isPowerOf2()) {
1271 APInt LowBits
= (RA
- 1);
1272 computeKnownBits(I
->getOperand(0), Known
, Depth
+ 1, Q
);
1273 Known
.Zero
|= ~LowBits
;
1274 Known
.One
&= LowBits
;
1279 // Since the result is less than or equal to either operand, any leading
1280 // zero bits in either operand must also exist in the result.
1281 computeKnownBits(I
->getOperand(0), Known
, Depth
+ 1, Q
);
1282 computeKnownBits(I
->getOperand(1), Known2
, Depth
+ 1, Q
);
1285 std::max(Known
.countMinLeadingZeros(), Known2
.countMinLeadingZeros());
1287 Known
.Zero
.setHighBits(Leaders
);
1291 case Instruction::Alloca
: {
1292 const AllocaInst
*AI
= cast
<AllocaInst
>(I
);
1293 unsigned Align
= AI
->getAlignment();
1295 Align
= Q
.DL
.getABITypeAlignment(AI
->getAllocatedType());
1298 Known
.Zero
.setLowBits(countTrailingZeros(Align
));
1301 case Instruction::GetElementPtr
: {
1302 // Analyze all of the subscripts of this getelementptr instruction
1303 // to determine if we can prove known low zero bits.
1304 KnownBits
LocalKnown(BitWidth
);
1305 computeKnownBits(I
->getOperand(0), LocalKnown
, Depth
+ 1, Q
);
1306 unsigned TrailZ
= LocalKnown
.countMinTrailingZeros();
1308 gep_type_iterator GTI
= gep_type_begin(I
);
1309 for (unsigned i
= 1, e
= I
->getNumOperands(); i
!= e
; ++i
, ++GTI
) {
1310 Value
*Index
= I
->getOperand(i
);
1311 if (StructType
*STy
= GTI
.getStructTypeOrNull()) {
1312 // Handle struct member offset arithmetic.
1314 // Handle case when index is vector zeroinitializer
1315 Constant
*CIndex
= cast
<Constant
>(Index
);
1316 if (CIndex
->isZeroValue())
1319 if (CIndex
->getType()->isVectorTy())
1320 Index
= CIndex
->getSplatValue();
1322 unsigned Idx
= cast
<ConstantInt
>(Index
)->getZExtValue();
1323 const StructLayout
*SL
= Q
.DL
.getStructLayout(STy
);
1324 uint64_t Offset
= SL
->getElementOffset(Idx
);
1325 TrailZ
= std::min
<unsigned>(TrailZ
,
1326 countTrailingZeros(Offset
));
1328 // Handle array index arithmetic.
1329 Type
*IndexedTy
= GTI
.getIndexedType();
1330 if (!IndexedTy
->isSized()) {
1334 unsigned GEPOpiBits
= Index
->getType()->getScalarSizeInBits();
1335 uint64_t TypeSize
= Q
.DL
.getTypeAllocSize(IndexedTy
);
1336 LocalKnown
.Zero
= LocalKnown
.One
= APInt(GEPOpiBits
, 0);
1337 computeKnownBits(Index
, LocalKnown
, Depth
+ 1, Q
);
1338 TrailZ
= std::min(TrailZ
,
1339 unsigned(countTrailingZeros(TypeSize
) +
1340 LocalKnown
.countMinTrailingZeros()));
1344 Known
.Zero
.setLowBits(TrailZ
);
1347 case Instruction::PHI
: {
1348 const PHINode
*P
= cast
<PHINode
>(I
);
1349 // Handle the case of a simple two-predecessor recurrence PHI.
1350 // There's a lot more that could theoretically be done here, but
1351 // this is sufficient to catch some interesting cases.
1352 if (P
->getNumIncomingValues() == 2) {
1353 for (unsigned i
= 0; i
!= 2; ++i
) {
1354 Value
*L
= P
->getIncomingValue(i
);
1355 Value
*R
= P
->getIncomingValue(!i
);
1356 Operator
*LU
= dyn_cast
<Operator
>(L
);
1359 unsigned Opcode
= LU
->getOpcode();
1360 // Check for operations that have the property that if
1361 // both their operands have low zero bits, the result
1362 // will have low zero bits.
1363 if (Opcode
== Instruction::Add
||
1364 Opcode
== Instruction::Sub
||
1365 Opcode
== Instruction::And
||
1366 Opcode
== Instruction::Or
||
1367 Opcode
== Instruction::Mul
) {
1368 Value
*LL
= LU
->getOperand(0);
1369 Value
*LR
= LU
->getOperand(1);
1370 // Find a recurrence.
1376 continue; // Check for recurrence with L and R flipped.
1377 // Ok, we have a PHI of the form L op= R. Check for low
1379 computeKnownBits(R
, Known2
, Depth
+ 1, Q
);
1381 // We need to take the minimum number of known bits
1382 KnownBits
Known3(Known
);
1383 computeKnownBits(L
, Known3
, Depth
+ 1, Q
);
1385 Known
.Zero
.setLowBits(std::min(Known2
.countMinTrailingZeros(),
1386 Known3
.countMinTrailingZeros()));
1388 auto *OverflowOp
= dyn_cast
<OverflowingBinaryOperator
>(LU
);
1389 if (OverflowOp
&& Q
.IIQ
.hasNoSignedWrap(OverflowOp
)) {
1390 // If initial value of recurrence is nonnegative, and we are adding
1391 // a nonnegative number with nsw, the result can only be nonnegative
1392 // or poison value regardless of the number of times we execute the
1393 // add in phi recurrence. If initial value is negative and we are
1394 // adding a negative number with nsw, the result can only be
1395 // negative or poison value. Similar arguments apply to sub and mul.
1397 // (add non-negative, non-negative) --> non-negative
1398 // (add negative, negative) --> negative
1399 if (Opcode
== Instruction::Add
) {
1400 if (Known2
.isNonNegative() && Known3
.isNonNegative())
1401 Known
.makeNonNegative();
1402 else if (Known2
.isNegative() && Known3
.isNegative())
1403 Known
.makeNegative();
1406 // (sub nsw non-negative, negative) --> non-negative
1407 // (sub nsw negative, non-negative) --> negative
1408 else if (Opcode
== Instruction::Sub
&& LL
== I
) {
1409 if (Known2
.isNonNegative() && Known3
.isNegative())
1410 Known
.makeNonNegative();
1411 else if (Known2
.isNegative() && Known3
.isNonNegative())
1412 Known
.makeNegative();
1415 // (mul nsw non-negative, non-negative) --> non-negative
1416 else if (Opcode
== Instruction::Mul
&& Known2
.isNonNegative() &&
1417 Known3
.isNonNegative())
1418 Known
.makeNonNegative();
1426 // Unreachable blocks may have zero-operand PHI nodes.
1427 if (P
->getNumIncomingValues() == 0)
1430 // Otherwise take the unions of the known bit sets of the operands,
1431 // taking conservative care to avoid excessive recursion.
1432 if (Depth
< MaxDepth
- 1 && !Known
.Zero
&& !Known
.One
) {
1433 // Skip if every incoming value references to ourself.
1434 if (dyn_cast_or_null
<UndefValue
>(P
->hasConstantValue()))
1437 Known
.Zero
.setAllBits();
1438 Known
.One
.setAllBits();
1439 for (Value
*IncValue
: P
->incoming_values()) {
1440 // Skip direct self references.
1441 if (IncValue
== P
) continue;
1443 Known2
= KnownBits(BitWidth
);
1444 // Recurse, but cap the recursion to one level, because we don't
1445 // want to waste time spinning around in loops.
1446 computeKnownBits(IncValue
, Known2
, MaxDepth
- 1, Q
);
1447 Known
.Zero
&= Known2
.Zero
;
1448 Known
.One
&= Known2
.One
;
1449 // If all bits have been ruled out, there's no need to check
1451 if (!Known
.Zero
&& !Known
.One
)
1457 case Instruction::Call
:
1458 case Instruction::Invoke
:
1459 // If range metadata is attached to this call, set known bits from that,
1460 // and then intersect with known bits based on other properties of the
1463 Q
.IIQ
.getMetadata(cast
<Instruction
>(I
), LLVMContext::MD_range
))
1464 computeKnownBitsFromRangeMetadata(*MD
, Known
);
1465 if (const Value
*RV
= ImmutableCallSite(I
).getReturnedArgOperand()) {
1466 computeKnownBits(RV
, Known2
, Depth
+ 1, Q
);
1467 Known
.Zero
|= Known2
.Zero
;
1468 Known
.One
|= Known2
.One
;
1470 if (const IntrinsicInst
*II
= dyn_cast
<IntrinsicInst
>(I
)) {
1471 switch (II
->getIntrinsicID()) {
1473 case Intrinsic::bitreverse
:
1474 computeKnownBits(I
->getOperand(0), Known2
, Depth
+ 1, Q
);
1475 Known
.Zero
|= Known2
.Zero
.reverseBits();
1476 Known
.One
|= Known2
.One
.reverseBits();
1478 case Intrinsic::bswap
:
1479 computeKnownBits(I
->getOperand(0), Known2
, Depth
+ 1, Q
);
1480 Known
.Zero
|= Known2
.Zero
.byteSwap();
1481 Known
.One
|= Known2
.One
.byteSwap();
1483 case Intrinsic::ctlz
: {
1484 computeKnownBits(I
->getOperand(0), Known2
, Depth
+ 1, Q
);
1485 // If we have a known 1, its position is our upper bound.
1486 unsigned PossibleLZ
= Known2
.One
.countLeadingZeros();
1487 // If this call is undefined for 0, the result will be less than 2^n.
1488 if (II
->getArgOperand(1) == ConstantInt::getTrue(II
->getContext()))
1489 PossibleLZ
= std::min(PossibleLZ
, BitWidth
- 1);
1490 unsigned LowBits
= Log2_32(PossibleLZ
)+1;
1491 Known
.Zero
.setBitsFrom(LowBits
);
1494 case Intrinsic::cttz
: {
1495 computeKnownBits(I
->getOperand(0), Known2
, Depth
+ 1, Q
);
1496 // If we have a known 1, its position is our upper bound.
1497 unsigned PossibleTZ
= Known2
.One
.countTrailingZeros();
1498 // If this call is undefined for 0, the result will be less than 2^n.
1499 if (II
->getArgOperand(1) == ConstantInt::getTrue(II
->getContext()))
1500 PossibleTZ
= std::min(PossibleTZ
, BitWidth
- 1);
1501 unsigned LowBits
= Log2_32(PossibleTZ
)+1;
1502 Known
.Zero
.setBitsFrom(LowBits
);
1505 case Intrinsic::ctpop
: {
1506 computeKnownBits(I
->getOperand(0), Known2
, Depth
+ 1, Q
);
1507 // We can bound the space the count needs. Also, bits known to be zero
1508 // can't contribute to the population.
1509 unsigned BitsPossiblySet
= Known2
.countMaxPopulation();
1510 unsigned LowBits
= Log2_32(BitsPossiblySet
)+1;
1511 Known
.Zero
.setBitsFrom(LowBits
);
1512 // TODO: we could bound KnownOne using the lower bound on the number
1513 // of bits which might be set provided by popcnt KnownOne2.
1516 case Intrinsic::fshr
:
1517 case Intrinsic::fshl
: {
1519 if (!match(I
->getOperand(2), m_APInt(SA
)))
1522 // Normalize to funnel shift left.
1523 uint64_t ShiftAmt
= SA
->urem(BitWidth
);
1524 if (II
->getIntrinsicID() == Intrinsic::fshr
)
1525 ShiftAmt
= BitWidth
- ShiftAmt
;
1527 KnownBits
Known3(Known
);
1528 computeKnownBits(I
->getOperand(0), Known2
, Depth
+ 1, Q
);
1529 computeKnownBits(I
->getOperand(1), Known3
, Depth
+ 1, Q
);
1532 Known2
.Zero
.shl(ShiftAmt
) | Known3
.Zero
.lshr(BitWidth
- ShiftAmt
);
1534 Known2
.One
.shl(ShiftAmt
) | Known3
.One
.lshr(BitWidth
- ShiftAmt
);
1537 case Intrinsic::uadd_sat
:
1538 case Intrinsic::usub_sat
: {
1539 bool IsAdd
= II
->getIntrinsicID() == Intrinsic::uadd_sat
;
1540 computeKnownBits(I
->getOperand(0), Known
, Depth
+ 1, Q
);
1541 computeKnownBits(I
->getOperand(1), Known2
, Depth
+ 1, Q
);
1543 // Add: Leading ones of either operand are preserved.
1544 // Sub: Leading zeros of LHS and leading ones of RHS are preserved
1545 // as leading zeros in the result.
1546 unsigned LeadingKnown
;
1548 LeadingKnown
= std::max(Known
.countMinLeadingOnes(),
1549 Known2
.countMinLeadingOnes());
1551 LeadingKnown
= std::max(Known
.countMinLeadingZeros(),
1552 Known2
.countMinLeadingOnes());
1554 Known
= KnownBits::computeForAddSub(
1555 IsAdd
, /* NSW */ false, Known
, Known2
);
1557 // We select between the operation result and all-ones/zero
1558 // respectively, so we can preserve known ones/zeros.
1560 Known
.One
.setHighBits(LeadingKnown
);
1561 Known
.Zero
.clearAllBits();
1563 Known
.Zero
.setHighBits(LeadingKnown
);
1564 Known
.One
.clearAllBits();
1568 case Intrinsic::x86_sse42_crc32_64_64
:
1569 Known
.Zero
.setBitsFrom(32);
1574 case Instruction::ExtractElement
:
1575 // Look through extract element. At the moment we keep this simple and skip
1576 // tracking the specific element. But at least we might find information
1577 // valid for all elements of the vector (for example if vector is sign
1578 // extended, shifted, etc).
1579 computeKnownBits(I
->getOperand(0), Known
, Depth
+ 1, Q
);
1581 case Instruction::ExtractValue
:
1582 if (IntrinsicInst
*II
= dyn_cast
<IntrinsicInst
>(I
->getOperand(0))) {
1583 const ExtractValueInst
*EVI
= cast
<ExtractValueInst
>(I
);
1584 if (EVI
->getNumIndices() != 1) break;
1585 if (EVI
->getIndices()[0] == 0) {
1586 switch (II
->getIntrinsicID()) {
1588 case Intrinsic::uadd_with_overflow
:
1589 case Intrinsic::sadd_with_overflow
:
1590 computeKnownBitsAddSub(true, II
->getArgOperand(0),
1591 II
->getArgOperand(1), false, Known
, Known2
,
1594 case Intrinsic::usub_with_overflow
:
1595 case Intrinsic::ssub_with_overflow
:
1596 computeKnownBitsAddSub(false, II
->getArgOperand(0),
1597 II
->getArgOperand(1), false, Known
, Known2
,
1600 case Intrinsic::umul_with_overflow
:
1601 case Intrinsic::smul_with_overflow
:
1602 computeKnownBitsMul(II
->getArgOperand(0), II
->getArgOperand(1), false,
1603 Known
, Known2
, Depth
, Q
);
1611 /// Determine which bits of V are known to be either zero or one and return
1613 KnownBits
computeKnownBits(const Value
*V
, unsigned Depth
, const Query
&Q
) {
1614 KnownBits
Known(getBitWidth(V
->getType(), Q
.DL
));
1615 computeKnownBits(V
, Known
, Depth
, Q
);
1619 /// Determine which bits of V are known to be either zero or one and return
1620 /// them in the Known bit set.
1622 /// NOTE: we cannot consider 'undef' to be "IsZero" here. The problem is that
1623 /// we cannot optimize based on the assumption that it is zero without changing
1624 /// it to be an explicit zero. If we don't change it to zero, other code could
1625 /// optimized based on the contradictory assumption that it is non-zero.
1626 /// Because instcombine aggressively folds operations with undef args anyway,
1627 /// this won't lose us code quality.
1629 /// This function is defined on values with integer type, values with pointer
1630 /// type, and vectors of integers. In the case
1631 /// where V is a vector, known zero, and known one values are the
1632 /// same width as the vector element, and the bit is set only if it is true
1633 /// for all of the elements in the vector.
1634 void computeKnownBits(const Value
*V
, KnownBits
&Known
, unsigned Depth
,
1636 assert(V
&& "No Value?");
1637 assert(Depth
<= MaxDepth
&& "Limit Search Depth");
1638 unsigned BitWidth
= Known
.getBitWidth();
1640 assert((V
->getType()->isIntOrIntVectorTy(BitWidth
) ||
1641 V
->getType()->isPtrOrPtrVectorTy()) &&
1642 "Not integer or pointer type!");
1644 Type
*ScalarTy
= V
->getType()->getScalarType();
1645 unsigned ExpectedWidth
= ScalarTy
->isPointerTy() ?
1646 Q
.DL
.getIndexTypeSizeInBits(ScalarTy
) : Q
.DL
.getTypeSizeInBits(ScalarTy
);
1647 assert(ExpectedWidth
== BitWidth
&& "V and Known should have same BitWidth");
1649 (void)ExpectedWidth
;
1652 if (match(V
, m_APInt(C
))) {
1653 // We know all of the bits for a scalar constant or a splat vector constant!
1655 Known
.Zero
= ~Known
.One
;
1658 // Null and aggregate-zero are all-zeros.
1659 if (isa
<ConstantPointerNull
>(V
) || isa
<ConstantAggregateZero
>(V
)) {
1663 // Handle a constant vector by taking the intersection of the known bits of
1665 if (const ConstantDataSequential
*CDS
= dyn_cast
<ConstantDataSequential
>(V
)) {
1666 // We know that CDS must be a vector of integers. Take the intersection of
1668 Known
.Zero
.setAllBits(); Known
.One
.setAllBits();
1669 for (unsigned i
= 0, e
= CDS
->getNumElements(); i
!= e
; ++i
) {
1670 APInt Elt
= CDS
->getElementAsAPInt(i
);
1677 if (const auto *CV
= dyn_cast
<ConstantVector
>(V
)) {
1678 // We know that CV must be a vector of integers. Take the intersection of
1680 Known
.Zero
.setAllBits(); Known
.One
.setAllBits();
1681 for (unsigned i
= 0, e
= CV
->getNumOperands(); i
!= e
; ++i
) {
1682 Constant
*Element
= CV
->getAggregateElement(i
);
1683 auto *ElementCI
= dyn_cast_or_null
<ConstantInt
>(Element
);
1688 const APInt
&Elt
= ElementCI
->getValue();
1695 // Start out not knowing anything.
1698 // We can't imply anything about undefs.
1699 if (isa
<UndefValue
>(V
))
1702 // There's no point in looking through other users of ConstantData for
1703 // assumptions. Confirm that we've handled them all.
1704 assert(!isa
<ConstantData
>(V
) && "Unhandled constant data!");
1706 // Limit search depth.
1707 // All recursive calls that increase depth must come after this.
1708 if (Depth
== MaxDepth
)
1711 // A weak GlobalAlias is totally unknown. A non-weak GlobalAlias has
1712 // the bits of its aliasee.
1713 if (const GlobalAlias
*GA
= dyn_cast
<GlobalAlias
>(V
)) {
1714 if (!GA
->isInterposable())
1715 computeKnownBits(GA
->getAliasee(), Known
, Depth
+ 1, Q
);
1719 if (const Operator
*I
= dyn_cast
<Operator
>(V
))
1720 computeKnownBitsFromOperator(I
, Known
, Depth
, Q
);
1722 // Aligned pointers have trailing zeros - refine Known.Zero set
1723 if (V
->getType()->isPointerTy()) {
1724 unsigned Align
= V
->getPointerAlignment(Q
.DL
);
1726 Known
.Zero
.setLowBits(countTrailingZeros(Align
));
1729 // computeKnownBitsFromAssume strictly refines Known.
1730 // Therefore, we run them after computeKnownBitsFromOperator.
1732 // Check whether a nearby assume intrinsic can determine some known bits.
1733 computeKnownBitsFromAssume(V
, Known
, Depth
, Q
);
1735 assert((Known
.Zero
& Known
.One
) == 0 && "Bits known to be one AND zero?");
1738 /// Return true if the given value is known to have exactly one
1739 /// bit set when defined. For vectors return true if every element is known to
1740 /// be a power of two when defined. Supports values with integer or pointer
1741 /// types and vectors of integers.
1742 bool isKnownToBeAPowerOfTwo(const Value
*V
, bool OrZero
, unsigned Depth
,
1744 assert(Depth
<= MaxDepth
&& "Limit Search Depth");
1746 // Attempt to match against constants.
1747 if (OrZero
&& match(V
, m_Power2OrZero()))
1749 if (match(V
, m_Power2()))
1752 // 1 << X is clearly a power of two if the one is not shifted off the end. If
1753 // it is shifted off the end then the result is undefined.
1754 if (match(V
, m_Shl(m_One(), m_Value())))
1757 // (signmask) >>l X is clearly a power of two if the one is not shifted off
1758 // the bottom. If it is shifted off the bottom then the result is undefined.
1759 if (match(V
, m_LShr(m_SignMask(), m_Value())))
1762 // The remaining tests are all recursive, so bail out if we hit the limit.
1763 if (Depth
++ == MaxDepth
)
1766 Value
*X
= nullptr, *Y
= nullptr;
1767 // A shift left or a logical shift right of a power of two is a power of two
1769 if (OrZero
&& (match(V
, m_Shl(m_Value(X
), m_Value())) ||
1770 match(V
, m_LShr(m_Value(X
), m_Value()))))
1771 return isKnownToBeAPowerOfTwo(X
, /*OrZero*/ true, Depth
, Q
);
1773 if (const ZExtInst
*ZI
= dyn_cast
<ZExtInst
>(V
))
1774 return isKnownToBeAPowerOfTwo(ZI
->getOperand(0), OrZero
, Depth
, Q
);
1776 if (const SelectInst
*SI
= dyn_cast
<SelectInst
>(V
))
1777 return isKnownToBeAPowerOfTwo(SI
->getTrueValue(), OrZero
, Depth
, Q
) &&
1778 isKnownToBeAPowerOfTwo(SI
->getFalseValue(), OrZero
, Depth
, Q
);
1780 if (OrZero
&& match(V
, m_And(m_Value(X
), m_Value(Y
)))) {
1781 // A power of two and'd with anything is a power of two or zero.
1782 if (isKnownToBeAPowerOfTwo(X
, /*OrZero*/ true, Depth
, Q
) ||
1783 isKnownToBeAPowerOfTwo(Y
, /*OrZero*/ true, Depth
, Q
))
1785 // X & (-X) is always a power of two or zero.
1786 if (match(X
, m_Neg(m_Specific(Y
))) || match(Y
, m_Neg(m_Specific(X
))))
1791 // Adding a power-of-two or zero to the same power-of-two or zero yields
1792 // either the original power-of-two, a larger power-of-two or zero.
1793 if (match(V
, m_Add(m_Value(X
), m_Value(Y
)))) {
1794 const OverflowingBinaryOperator
*VOBO
= cast
<OverflowingBinaryOperator
>(V
);
1795 if (OrZero
|| Q
.IIQ
.hasNoUnsignedWrap(VOBO
) ||
1796 Q
.IIQ
.hasNoSignedWrap(VOBO
)) {
1797 if (match(X
, m_And(m_Specific(Y
), m_Value())) ||
1798 match(X
, m_And(m_Value(), m_Specific(Y
))))
1799 if (isKnownToBeAPowerOfTwo(Y
, OrZero
, Depth
, Q
))
1801 if (match(Y
, m_And(m_Specific(X
), m_Value())) ||
1802 match(Y
, m_And(m_Value(), m_Specific(X
))))
1803 if (isKnownToBeAPowerOfTwo(X
, OrZero
, Depth
, Q
))
1806 unsigned BitWidth
= V
->getType()->getScalarSizeInBits();
1807 KnownBits
LHSBits(BitWidth
);
1808 computeKnownBits(X
, LHSBits
, Depth
, Q
);
1810 KnownBits
RHSBits(BitWidth
);
1811 computeKnownBits(Y
, RHSBits
, Depth
, Q
);
1812 // If i8 V is a power of two or zero:
1813 // ZeroBits: 1 1 1 0 1 1 1 1
1814 // ~ZeroBits: 0 0 0 1 0 0 0 0
1815 if ((~(LHSBits
.Zero
& RHSBits
.Zero
)).isPowerOf2())
1816 // If OrZero isn't set, we cannot give back a zero result.
1817 // Make sure either the LHS or RHS has a bit set.
1818 if (OrZero
|| RHSBits
.One
.getBoolValue() || LHSBits
.One
.getBoolValue())
1823 // An exact divide or right shift can only shift off zero bits, so the result
1824 // is a power of two only if the first operand is a power of two and not
1825 // copying a sign bit (sdiv int_min, 2).
1826 if (match(V
, m_Exact(m_LShr(m_Value(), m_Value()))) ||
1827 match(V
, m_Exact(m_UDiv(m_Value(), m_Value())))) {
1828 return isKnownToBeAPowerOfTwo(cast
<Operator
>(V
)->getOperand(0), OrZero
,
1835 /// Test whether a GEP's result is known to be non-null.
1837 /// Uses properties inherent in a GEP to try to determine whether it is known
1840 /// Currently this routine does not support vector GEPs.
1841 static bool isGEPKnownNonNull(const GEPOperator
*GEP
, unsigned Depth
,
1843 const Function
*F
= nullptr;
1844 if (const Instruction
*I
= dyn_cast
<Instruction
>(GEP
))
1845 F
= I
->getFunction();
1847 if (!GEP
->isInBounds() ||
1848 NullPointerIsDefined(F
, GEP
->getPointerAddressSpace()))
1851 // FIXME: Support vector-GEPs.
1852 assert(GEP
->getType()->isPointerTy() && "We only support plain pointer GEP");
1854 // If the base pointer is non-null, we cannot walk to a null address with an
1855 // inbounds GEP in address space zero.
1856 if (isKnownNonZero(GEP
->getPointerOperand(), Depth
, Q
))
1859 // Walk the GEP operands and see if any operand introduces a non-zero offset.
1860 // If so, then the GEP cannot produce a null pointer, as doing so would
1861 // inherently violate the inbounds contract within address space zero.
1862 for (gep_type_iterator GTI
= gep_type_begin(GEP
), GTE
= gep_type_end(GEP
);
1863 GTI
!= GTE
; ++GTI
) {
1864 // Struct types are easy -- they must always be indexed by a constant.
1865 if (StructType
*STy
= GTI
.getStructTypeOrNull()) {
1866 ConstantInt
*OpC
= cast
<ConstantInt
>(GTI
.getOperand());
1867 unsigned ElementIdx
= OpC
->getZExtValue();
1868 const StructLayout
*SL
= Q
.DL
.getStructLayout(STy
);
1869 uint64_t ElementOffset
= SL
->getElementOffset(ElementIdx
);
1870 if (ElementOffset
> 0)
1875 // If we have a zero-sized type, the index doesn't matter. Keep looping.
1876 if (Q
.DL
.getTypeAllocSize(GTI
.getIndexedType()) == 0)
1879 // Fast path the constant operand case both for efficiency and so we don't
1880 // increment Depth when just zipping down an all-constant GEP.
1881 if (ConstantInt
*OpC
= dyn_cast
<ConstantInt
>(GTI
.getOperand())) {
1887 // We post-increment Depth here because while isKnownNonZero increments it
1888 // as well, when we pop back up that increment won't persist. We don't want
1889 // to recurse 10k times just because we have 10k GEP operands. We don't
1890 // bail completely out because we want to handle constant GEPs regardless
1892 if (Depth
++ >= MaxDepth
)
1895 if (isKnownNonZero(GTI
.getOperand(), Depth
, Q
))
1902 static bool isKnownNonNullFromDominatingCondition(const Value
*V
,
1903 const Instruction
*CtxI
,
1904 const DominatorTree
*DT
) {
1905 assert(V
->getType()->isPointerTy() && "V must be pointer type");
1906 assert(!isa
<ConstantData
>(V
) && "Did not expect ConstantPointerNull");
1911 unsigned NumUsesExplored
= 0;
1912 for (auto *U
: V
->users()) {
1913 // Avoid massive lists
1914 if (NumUsesExplored
>= DomConditionsMaxUses
)
1918 // If the value is used as an argument to a call or invoke, then argument
1919 // attributes may provide an answer about null-ness.
1920 if (auto CS
= ImmutableCallSite(U
))
1921 if (auto *CalledFunc
= CS
.getCalledFunction())
1922 for (const Argument
&Arg
: CalledFunc
->args())
1923 if (CS
.getArgOperand(Arg
.getArgNo()) == V
&&
1924 Arg
.hasNonNullAttr() && DT
->dominates(CS
.getInstruction(), CtxI
))
1927 // Consider only compare instructions uniquely controlling a branch
1928 CmpInst::Predicate Pred
;
1929 if (!match(const_cast<User
*>(U
),
1930 m_c_ICmp(Pred
, m_Specific(V
), m_Zero())) ||
1931 (Pred
!= ICmpInst::ICMP_EQ
&& Pred
!= ICmpInst::ICMP_NE
))
1934 SmallVector
<const User
*, 4> WorkList
;
1935 SmallPtrSet
<const User
*, 4> Visited
;
1936 for (auto *CmpU
: U
->users()) {
1937 assert(WorkList
.empty() && "Should be!");
1938 if (Visited
.insert(CmpU
).second
)
1939 WorkList
.push_back(CmpU
);
1941 while (!WorkList
.empty()) {
1942 auto *Curr
= WorkList
.pop_back_val();
1944 // If a user is an AND, add all its users to the work list. We only
1945 // propagate "pred != null" condition through AND because it is only
1946 // correct to assume that all conditions of AND are met in true branch.
1947 // TODO: Support similar logic of OR and EQ predicate?
1948 if (Pred
== ICmpInst::ICMP_NE
)
1949 if (auto *BO
= dyn_cast
<BinaryOperator
>(Curr
))
1950 if (BO
->getOpcode() == Instruction::And
) {
1951 for (auto *BOU
: BO
->users())
1952 if (Visited
.insert(BOU
).second
)
1953 WorkList
.push_back(BOU
);
1957 if (const BranchInst
*BI
= dyn_cast
<BranchInst
>(Curr
)) {
1958 assert(BI
->isConditional() && "uses a comparison!");
1960 BasicBlock
*NonNullSuccessor
=
1961 BI
->getSuccessor(Pred
== ICmpInst::ICMP_EQ
? 1 : 0);
1962 BasicBlockEdge
Edge(BI
->getParent(), NonNullSuccessor
);
1963 if (Edge
.isSingleEdge() && DT
->dominates(Edge
, CtxI
->getParent()))
1965 } else if (Pred
== ICmpInst::ICMP_NE
&& isGuard(Curr
) &&
1966 DT
->dominates(cast
<Instruction
>(Curr
), CtxI
)) {
1976 /// Does the 'Range' metadata (which must be a valid MD_range operand list)
1977 /// ensure that the value it's attached to is never Value? 'RangeType' is
1978 /// is the type of the value described by the range.
1979 static bool rangeMetadataExcludesValue(const MDNode
* Ranges
, const APInt
& Value
) {
1980 const unsigned NumRanges
= Ranges
->getNumOperands() / 2;
1981 assert(NumRanges
>= 1);
1982 for (unsigned i
= 0; i
< NumRanges
; ++i
) {
1983 ConstantInt
*Lower
=
1984 mdconst::extract
<ConstantInt
>(Ranges
->getOperand(2 * i
+ 0));
1985 ConstantInt
*Upper
=
1986 mdconst::extract
<ConstantInt
>(Ranges
->getOperand(2 * i
+ 1));
1987 ConstantRange
Range(Lower
->getValue(), Upper
->getValue());
1988 if (Range
.contains(Value
))
1994 /// Return true if the given value is known to be non-zero when defined. For
1995 /// vectors, return true if every element is known to be non-zero when
1996 /// defined. For pointers, if the context instruction and dominator tree are
1997 /// specified, perform context-sensitive analysis and return true if the
1998 /// pointer couldn't possibly be null at the specified instruction.
1999 /// Supports values with integer or pointer type and vectors of integers.
2000 bool isKnownNonZero(const Value
*V
, unsigned Depth
, const Query
&Q
) {
2001 if (auto *C
= dyn_cast
<Constant
>(V
)) {
2002 if (C
->isNullValue())
2004 if (isa
<ConstantInt
>(C
))
2005 // Must be non-zero due to null test above.
2008 if (auto *CE
= dyn_cast
<ConstantExpr
>(C
)) {
2009 // See the comment for IntToPtr/PtrToInt instructions below.
2010 if (CE
->getOpcode() == Instruction::IntToPtr
||
2011 CE
->getOpcode() == Instruction::PtrToInt
)
2012 if (Q
.DL
.getTypeSizeInBits(CE
->getOperand(0)->getType()) <=
2013 Q
.DL
.getTypeSizeInBits(CE
->getType()))
2014 return isKnownNonZero(CE
->getOperand(0), Depth
, Q
);
2017 // For constant vectors, check that all elements are undefined or known
2018 // non-zero to determine that the whole vector is known non-zero.
2019 if (auto *VecTy
= dyn_cast
<VectorType
>(C
->getType())) {
2020 for (unsigned i
= 0, e
= VecTy
->getNumElements(); i
!= e
; ++i
) {
2021 Constant
*Elt
= C
->getAggregateElement(i
);
2022 if (!Elt
|| Elt
->isNullValue())
2024 if (!isa
<UndefValue
>(Elt
) && !isa
<ConstantInt
>(Elt
))
2030 // A global variable in address space 0 is non null unless extern weak
2031 // or an absolute symbol reference. Other address spaces may have null as a
2032 // valid address for a global, so we can't assume anything.
2033 if (const GlobalValue
*GV
= dyn_cast
<GlobalValue
>(V
)) {
2034 if (!GV
->isAbsoluteSymbolRef() && !GV
->hasExternalWeakLinkage() &&
2035 GV
->getType()->getAddressSpace() == 0)
2041 if (auto *I
= dyn_cast
<Instruction
>(V
)) {
2042 if (MDNode
*Ranges
= Q
.IIQ
.getMetadata(I
, LLVMContext::MD_range
)) {
2043 // If the possible ranges don't contain zero, then the value is
2044 // definitely non-zero.
2045 if (auto *Ty
= dyn_cast
<IntegerType
>(V
->getType())) {
2046 const APInt
ZeroValue(Ty
->getBitWidth(), 0);
2047 if (rangeMetadataExcludesValue(Ranges
, ZeroValue
))
2053 // Some of the tests below are recursive, so bail out if we hit the limit.
2054 if (Depth
++ >= MaxDepth
)
2057 // Check for pointer simplifications.
2058 if (V
->getType()->isPointerTy()) {
2059 // Alloca never returns null, malloc might.
2060 if (isa
<AllocaInst
>(V
) && Q
.DL
.getAllocaAddrSpace() == 0)
2063 // A byval, inalloca, or nonnull argument is never null.
2064 if (const Argument
*A
= dyn_cast
<Argument
>(V
))
2065 if (A
->hasByValOrInAllocaAttr() || A
->hasNonNullAttr())
2068 // A Load tagged with nonnull metadata is never null.
2069 if (const LoadInst
*LI
= dyn_cast
<LoadInst
>(V
))
2070 if (Q
.IIQ
.getMetadata(LI
, LLVMContext::MD_nonnull
))
2073 if (const auto *Call
= dyn_cast
<CallBase
>(V
)) {
2074 if (Call
->isReturnNonNull())
2076 if (const auto *RP
= getArgumentAliasingToReturnedPointer(Call
, true))
2077 return isKnownNonZero(RP
, Depth
, Q
);
2082 // Check for recursive pointer simplifications.
2083 if (V
->getType()->isPointerTy()) {
2084 if (isKnownNonNullFromDominatingCondition(V
, Q
.CxtI
, Q
.DT
))
2087 // Look through bitcast operations, GEPs, and int2ptr instructions as they
2088 // do not alter the value, or at least not the nullness property of the
2089 // value, e.g., int2ptr is allowed to zero/sign extend the value.
2091 // Note that we have to take special care to avoid looking through
2092 // truncating casts, e.g., int2ptr/ptr2int with appropriate sizes, as well
2093 // as casts that can alter the value, e.g., AddrSpaceCasts.
2094 if (const GEPOperator
*GEP
= dyn_cast
<GEPOperator
>(V
))
2095 if (isGEPKnownNonNull(GEP
, Depth
, Q
))
2098 if (auto *BCO
= dyn_cast
<BitCastOperator
>(V
))
2099 return isKnownNonZero(BCO
->getOperand(0), Depth
, Q
);
2101 if (auto *I2P
= dyn_cast
<IntToPtrInst
>(V
))
2102 if (Q
.DL
.getTypeSizeInBits(I2P
->getSrcTy()) <=
2103 Q
.DL
.getTypeSizeInBits(I2P
->getDestTy()))
2104 return isKnownNonZero(I2P
->getOperand(0), Depth
, Q
);
2107 // Similar to int2ptr above, we can look through ptr2int here if the cast
2108 // is a no-op or an extend and not a truncate.
2109 if (auto *P2I
= dyn_cast
<PtrToIntInst
>(V
))
2110 if (Q
.DL
.getTypeSizeInBits(P2I
->getSrcTy()) <=
2111 Q
.DL
.getTypeSizeInBits(P2I
->getDestTy()))
2112 return isKnownNonZero(P2I
->getOperand(0), Depth
, Q
);
2114 unsigned BitWidth
= getBitWidth(V
->getType()->getScalarType(), Q
.DL
);
2116 // X | Y != 0 if X != 0 or Y != 0.
2117 Value
*X
= nullptr, *Y
= nullptr;
2118 if (match(V
, m_Or(m_Value(X
), m_Value(Y
))))
2119 return isKnownNonZero(X
, Depth
, Q
) || isKnownNonZero(Y
, Depth
, Q
);
2121 // ext X != 0 if X != 0.
2122 if (isa
<SExtInst
>(V
) || isa
<ZExtInst
>(V
))
2123 return isKnownNonZero(cast
<Instruction
>(V
)->getOperand(0), Depth
, Q
);
2125 // shl X, Y != 0 if X is odd. Note that the value of the shift is undefined
2126 // if the lowest bit is shifted off the end.
2127 if (match(V
, m_Shl(m_Value(X
), m_Value(Y
)))) {
2128 // shl nuw can't remove any non-zero bits.
2129 const OverflowingBinaryOperator
*BO
= cast
<OverflowingBinaryOperator
>(V
);
2130 if (Q
.IIQ
.hasNoUnsignedWrap(BO
))
2131 return isKnownNonZero(X
, Depth
, Q
);
2133 KnownBits
Known(BitWidth
);
2134 computeKnownBits(X
, Known
, Depth
, Q
);
2138 // shr X, Y != 0 if X is negative. Note that the value of the shift is not
2139 // defined if the sign bit is shifted off the end.
2140 else if (match(V
, m_Shr(m_Value(X
), m_Value(Y
)))) {
2141 // shr exact can only shift out zero bits.
2142 const PossiblyExactOperator
*BO
= cast
<PossiblyExactOperator
>(V
);
2144 return isKnownNonZero(X
, Depth
, Q
);
2146 KnownBits Known
= computeKnownBits(X
, Depth
, Q
);
2147 if (Known
.isNegative())
2150 // If the shifter operand is a constant, and all of the bits shifted
2151 // out are known to be zero, and X is known non-zero then at least one
2152 // non-zero bit must remain.
2153 if (ConstantInt
*Shift
= dyn_cast
<ConstantInt
>(Y
)) {
2154 auto ShiftVal
= Shift
->getLimitedValue(BitWidth
- 1);
2155 // Is there a known one in the portion not shifted out?
2156 if (Known
.countMaxLeadingZeros() < BitWidth
- ShiftVal
)
2158 // Are all the bits to be shifted out known zero?
2159 if (Known
.countMinTrailingZeros() >= ShiftVal
)
2160 return isKnownNonZero(X
, Depth
, Q
);
2163 // div exact can only produce a zero if the dividend is zero.
2164 else if (match(V
, m_Exact(m_IDiv(m_Value(X
), m_Value())))) {
2165 return isKnownNonZero(X
, Depth
, Q
);
2168 else if (match(V
, m_Add(m_Value(X
), m_Value(Y
)))) {
2169 KnownBits XKnown
= computeKnownBits(X
, Depth
, Q
);
2170 KnownBits YKnown
= computeKnownBits(Y
, Depth
, Q
);
2172 // If X and Y are both non-negative (as signed values) then their sum is not
2173 // zero unless both X and Y are zero.
2174 if (XKnown
.isNonNegative() && YKnown
.isNonNegative())
2175 if (isKnownNonZero(X
, Depth
, Q
) || isKnownNonZero(Y
, Depth
, Q
))
2178 // If X and Y are both negative (as signed values) then their sum is not
2179 // zero unless both X and Y equal INT_MIN.
2180 if (XKnown
.isNegative() && YKnown
.isNegative()) {
2181 APInt Mask
= APInt::getSignedMaxValue(BitWidth
);
2182 // The sign bit of X is set. If some other bit is set then X is not equal
2184 if (XKnown
.One
.intersects(Mask
))
2186 // The sign bit of Y is set. If some other bit is set then Y is not equal
2188 if (YKnown
.One
.intersects(Mask
))
2192 // The sum of a non-negative number and a power of two is not zero.
2193 if (XKnown
.isNonNegative() &&
2194 isKnownToBeAPowerOfTwo(Y
, /*OrZero*/ false, Depth
, Q
))
2196 if (YKnown
.isNonNegative() &&
2197 isKnownToBeAPowerOfTwo(X
, /*OrZero*/ false, Depth
, Q
))
2201 else if (match(V
, m_Mul(m_Value(X
), m_Value(Y
)))) {
2202 const OverflowingBinaryOperator
*BO
= cast
<OverflowingBinaryOperator
>(V
);
2203 // If X and Y are non-zero then so is X * Y as long as the multiplication
2204 // does not overflow.
2205 if ((Q
.IIQ
.hasNoSignedWrap(BO
) || Q
.IIQ
.hasNoUnsignedWrap(BO
)) &&
2206 isKnownNonZero(X
, Depth
, Q
) && isKnownNonZero(Y
, Depth
, Q
))
2209 // (C ? X : Y) != 0 if X != 0 and Y != 0.
2210 else if (const SelectInst
*SI
= dyn_cast
<SelectInst
>(V
)) {
2211 if (isKnownNonZero(SI
->getTrueValue(), Depth
, Q
) &&
2212 isKnownNonZero(SI
->getFalseValue(), Depth
, Q
))
2216 else if (const PHINode
*PN
= dyn_cast
<PHINode
>(V
)) {
2217 // Try and detect a recurrence that monotonically increases from a
2218 // starting value, as these are common as induction variables.
2219 if (PN
->getNumIncomingValues() == 2) {
2220 Value
*Start
= PN
->getIncomingValue(0);
2221 Value
*Induction
= PN
->getIncomingValue(1);
2222 if (isa
<ConstantInt
>(Induction
) && !isa
<ConstantInt
>(Start
))
2223 std::swap(Start
, Induction
);
2224 if (ConstantInt
*C
= dyn_cast
<ConstantInt
>(Start
)) {
2225 if (!C
->isZero() && !C
->isNegative()) {
2227 if (Q
.IIQ
.UseInstrInfo
&&
2228 (match(Induction
, m_NSWAdd(m_Specific(PN
), m_ConstantInt(X
))) ||
2229 match(Induction
, m_NUWAdd(m_Specific(PN
), m_ConstantInt(X
)))) &&
2235 // Check if all incoming values are non-zero constant.
2236 bool AllNonZeroConstants
= llvm::all_of(PN
->operands(), [](Value
*V
) {
2237 return isa
<ConstantInt
>(V
) && !cast
<ConstantInt
>(V
)->isZero();
2239 if (AllNonZeroConstants
)
2243 KnownBits
Known(BitWidth
);
2244 computeKnownBits(V
, Known
, Depth
, Q
);
2245 return Known
.One
!= 0;
2248 /// Return true if V2 == V1 + X, where X is known non-zero.
2249 static bool isAddOfNonZero(const Value
*V1
, const Value
*V2
, const Query
&Q
) {
2250 const BinaryOperator
*BO
= dyn_cast
<BinaryOperator
>(V1
);
2251 if (!BO
|| BO
->getOpcode() != Instruction::Add
)
2253 Value
*Op
= nullptr;
2254 if (V2
== BO
->getOperand(0))
2255 Op
= BO
->getOperand(1);
2256 else if (V2
== BO
->getOperand(1))
2257 Op
= BO
->getOperand(0);
2260 return isKnownNonZero(Op
, 0, Q
);
2263 /// Return true if it is known that V1 != V2.
2264 static bool isKnownNonEqual(const Value
*V1
, const Value
*V2
, const Query
&Q
) {
2267 if (V1
->getType() != V2
->getType())
2268 // We can't look through casts yet.
2270 if (isAddOfNonZero(V1
, V2
, Q
) || isAddOfNonZero(V2
, V1
, Q
))
2273 if (V1
->getType()->isIntOrIntVectorTy()) {
2274 // Are any known bits in V1 contradictory to known bits in V2? If V1
2275 // has a known zero where V2 has a known one, they must not be equal.
2276 KnownBits Known1
= computeKnownBits(V1
, 0, Q
);
2277 KnownBits Known2
= computeKnownBits(V2
, 0, Q
);
2279 if (Known1
.Zero
.intersects(Known2
.One
) ||
2280 Known2
.Zero
.intersects(Known1
.One
))
2286 /// Return true if 'V & Mask' is known to be zero. We use this predicate to
2287 /// simplify operations downstream. Mask is known to be zero for bits that V
2290 /// This function is defined on values with integer type, values with pointer
2291 /// type, and vectors of integers. In the case
2292 /// where V is a vector, the mask, known zero, and known one values are the
2293 /// same width as the vector element, and the bit is set only if it is true
2294 /// for all of the elements in the vector.
2295 bool MaskedValueIsZero(const Value
*V
, const APInt
&Mask
, unsigned Depth
,
2297 KnownBits
Known(Mask
.getBitWidth());
2298 computeKnownBits(V
, Known
, Depth
, Q
);
2299 return Mask
.isSubsetOf(Known
.Zero
);
2302 // Match a signed min+max clamp pattern like smax(smin(In, CHigh), CLow).
2303 // Returns the input and lower/upper bounds.
2304 static bool isSignedMinMaxClamp(const Value
*Select
, const Value
*&In
,
2305 const APInt
*&CLow
, const APInt
*&CHigh
) {
2306 assert(isa
<Operator
>(Select
) &&
2307 cast
<Operator
>(Select
)->getOpcode() == Instruction::Select
&&
2308 "Input should be a Select!");
2310 const Value
*LHS
, *RHS
, *LHS2
, *RHS2
;
2311 SelectPatternFlavor SPF
= matchSelectPattern(Select
, LHS
, RHS
).Flavor
;
2312 if (SPF
!= SPF_SMAX
&& SPF
!= SPF_SMIN
)
2315 if (!match(RHS
, m_APInt(CLow
)))
2318 SelectPatternFlavor SPF2
= matchSelectPattern(LHS
, LHS2
, RHS2
).Flavor
;
2319 if (getInverseMinMaxFlavor(SPF
) != SPF2
)
2322 if (!match(RHS2
, m_APInt(CHigh
)))
2325 if (SPF
== SPF_SMIN
)
2326 std::swap(CLow
, CHigh
);
2329 return CLow
->sle(*CHigh
);
2332 /// For vector constants, loop over the elements and find the constant with the
2333 /// minimum number of sign bits. Return 0 if the value is not a vector constant
2334 /// or if any element was not analyzed; otherwise, return the count for the
2335 /// element with the minimum number of sign bits.
2336 static unsigned computeNumSignBitsVectorConstant(const Value
*V
,
2338 const auto *CV
= dyn_cast
<Constant
>(V
);
2339 if (!CV
|| !CV
->getType()->isVectorTy())
2342 unsigned MinSignBits
= TyBits
;
2343 unsigned NumElts
= CV
->getType()->getVectorNumElements();
2344 for (unsigned i
= 0; i
!= NumElts
; ++i
) {
2345 // If we find a non-ConstantInt, bail out.
2346 auto *Elt
= dyn_cast_or_null
<ConstantInt
>(CV
->getAggregateElement(i
));
2350 MinSignBits
= std::min(MinSignBits
, Elt
->getValue().getNumSignBits());
2356 static unsigned ComputeNumSignBitsImpl(const Value
*V
, unsigned Depth
,
2359 static unsigned ComputeNumSignBits(const Value
*V
, unsigned Depth
,
2361 unsigned Result
= ComputeNumSignBitsImpl(V
, Depth
, Q
);
2362 assert(Result
> 0 && "At least one sign bit needs to be present!");
2366 /// Return the number of times the sign bit of the register is replicated into
2367 /// the other bits. We know that at least 1 bit is always equal to the sign bit
2368 /// (itself), but other cases can give us information. For example, immediately
2369 /// after an "ashr X, 2", we know that the top 3 bits are all equal to each
2370 /// other, so we return 3. For vectors, return the number of sign bits for the
2371 /// vector element with the minimum number of known sign bits.
2372 static unsigned ComputeNumSignBitsImpl(const Value
*V
, unsigned Depth
,
2374 assert(Depth
<= MaxDepth
&& "Limit Search Depth");
2376 // We return the minimum number of sign bits that are guaranteed to be present
2377 // in V, so for undef we have to conservatively return 1. We don't have the
2378 // same behavior for poison though -- that's a FIXME today.
2380 Type
*ScalarTy
= V
->getType()->getScalarType();
2381 unsigned TyBits
= ScalarTy
->isPointerTy() ?
2382 Q
.DL
.getIndexTypeSizeInBits(ScalarTy
) :
2383 Q
.DL
.getTypeSizeInBits(ScalarTy
);
2386 unsigned FirstAnswer
= 1;
2388 // Note that ConstantInt is handled by the general computeKnownBits case
2391 if (Depth
== MaxDepth
)
2392 return 1; // Limit search depth.
2394 const Operator
*U
= dyn_cast
<Operator
>(V
);
2395 switch (Operator::getOpcode(V
)) {
2397 case Instruction::SExt
:
2398 Tmp
= TyBits
- U
->getOperand(0)->getType()->getScalarSizeInBits();
2399 return ComputeNumSignBits(U
->getOperand(0), Depth
+ 1, Q
) + Tmp
;
2401 case Instruction::SDiv
: {
2402 const APInt
*Denominator
;
2403 // sdiv X, C -> adds log(C) sign bits.
2404 if (match(U
->getOperand(1), m_APInt(Denominator
))) {
2406 // Ignore non-positive denominator.
2407 if (!Denominator
->isStrictlyPositive())
2410 // Calculate the incoming numerator bits.
2411 unsigned NumBits
= ComputeNumSignBits(U
->getOperand(0), Depth
+ 1, Q
);
2413 // Add floor(log(C)) bits to the numerator bits.
2414 return std::min(TyBits
, NumBits
+ Denominator
->logBase2());
2419 case Instruction::SRem
: {
2420 const APInt
*Denominator
;
2421 // srem X, C -> we know that the result is within [-C+1,C) when C is a
2422 // positive constant. This let us put a lower bound on the number of sign
2424 if (match(U
->getOperand(1), m_APInt(Denominator
))) {
2426 // Ignore non-positive denominator.
2427 if (!Denominator
->isStrictlyPositive())
2430 // Calculate the incoming numerator bits. SRem by a positive constant
2431 // can't lower the number of sign bits.
2433 ComputeNumSignBits(U
->getOperand(0), Depth
+ 1, Q
);
2435 // Calculate the leading sign bit constraints by examining the
2436 // denominator. Given that the denominator is positive, there are two
2439 // 1. the numerator is positive. The result range is [0,C) and [0,C) u<
2440 // (1 << ceilLogBase2(C)).
2442 // 2. the numerator is negative. Then the result range is (-C,0] and
2443 // integers in (-C,0] are either 0 or >u (-1 << ceilLogBase2(C)).
2445 // Thus a lower bound on the number of sign bits is `TyBits -
2446 // ceilLogBase2(C)`.
2448 unsigned ResBits
= TyBits
- Denominator
->ceilLogBase2();
2449 return std::max(NumrBits
, ResBits
);
2454 case Instruction::AShr
: {
2455 Tmp
= ComputeNumSignBits(U
->getOperand(0), Depth
+ 1, Q
);
2456 // ashr X, C -> adds C sign bits. Vectors too.
2458 if (match(U
->getOperand(1), m_APInt(ShAmt
))) {
2459 if (ShAmt
->uge(TyBits
))
2460 break; // Bad shift.
2461 unsigned ShAmtLimited
= ShAmt
->getZExtValue();
2462 Tmp
+= ShAmtLimited
;
2463 if (Tmp
> TyBits
) Tmp
= TyBits
;
2467 case Instruction::Shl
: {
2469 if (match(U
->getOperand(1), m_APInt(ShAmt
))) {
2470 // shl destroys sign bits.
2471 Tmp
= ComputeNumSignBits(U
->getOperand(0), Depth
+ 1, Q
);
2472 if (ShAmt
->uge(TyBits
) || // Bad shift.
2473 ShAmt
->uge(Tmp
)) break; // Shifted all sign bits out.
2474 Tmp2
= ShAmt
->getZExtValue();
2479 case Instruction::And
:
2480 case Instruction::Or
:
2481 case Instruction::Xor
: // NOT is handled here.
2482 // Logical binary ops preserve the number of sign bits at the worst.
2483 Tmp
= ComputeNumSignBits(U
->getOperand(0), Depth
+ 1, Q
);
2485 Tmp2
= ComputeNumSignBits(U
->getOperand(1), Depth
+ 1, Q
);
2486 FirstAnswer
= std::min(Tmp
, Tmp2
);
2487 // We computed what we know about the sign bits as our first
2488 // answer. Now proceed to the generic code that uses
2489 // computeKnownBits, and pick whichever answer is better.
2493 case Instruction::Select
: {
2494 // If we have a clamp pattern, we know that the number of sign bits will be
2495 // the minimum of the clamp min/max range.
2497 const APInt
*CLow
, *CHigh
;
2498 if (isSignedMinMaxClamp(U
, X
, CLow
, CHigh
))
2499 return std::min(CLow
->getNumSignBits(), CHigh
->getNumSignBits());
2501 Tmp
= ComputeNumSignBits(U
->getOperand(1), Depth
+ 1, Q
);
2502 if (Tmp
== 1) break;
2503 Tmp2
= ComputeNumSignBits(U
->getOperand(2), Depth
+ 1, Q
);
2504 return std::min(Tmp
, Tmp2
);
2507 case Instruction::Add
:
2508 // Add can have at most one carry bit. Thus we know that the output
2509 // is, at worst, one more bit than the inputs.
2510 Tmp
= ComputeNumSignBits(U
->getOperand(0), Depth
+ 1, Q
);
2511 if (Tmp
== 1) break;
2513 // Special case decrementing a value (ADD X, -1):
2514 if (const auto *CRHS
= dyn_cast
<Constant
>(U
->getOperand(1)))
2515 if (CRHS
->isAllOnesValue()) {
2516 KnownBits
Known(TyBits
);
2517 computeKnownBits(U
->getOperand(0), Known
, Depth
+ 1, Q
);
2519 // If the input is known to be 0 or 1, the output is 0/-1, which is all
2521 if ((Known
.Zero
| 1).isAllOnesValue())
2524 // If we are subtracting one from a positive number, there is no carry
2525 // out of the result.
2526 if (Known
.isNonNegative())
2530 Tmp2
= ComputeNumSignBits(U
->getOperand(1), Depth
+ 1, Q
);
2531 if (Tmp2
== 1) break;
2532 return std::min(Tmp
, Tmp2
)-1;
2534 case Instruction::Sub
:
2535 Tmp2
= ComputeNumSignBits(U
->getOperand(1), Depth
+ 1, Q
);
2536 if (Tmp2
== 1) break;
2539 if (const auto *CLHS
= dyn_cast
<Constant
>(U
->getOperand(0)))
2540 if (CLHS
->isNullValue()) {
2541 KnownBits
Known(TyBits
);
2542 computeKnownBits(U
->getOperand(1), Known
, Depth
+ 1, Q
);
2543 // If the input is known to be 0 or 1, the output is 0/-1, which is all
2545 if ((Known
.Zero
| 1).isAllOnesValue())
2548 // If the input is known to be positive (the sign bit is known clear),
2549 // the output of the NEG has the same number of sign bits as the input.
2550 if (Known
.isNonNegative())
2553 // Otherwise, we treat this like a SUB.
2556 // Sub can have at most one carry bit. Thus we know that the output
2557 // is, at worst, one more bit than the inputs.
2558 Tmp
= ComputeNumSignBits(U
->getOperand(0), Depth
+ 1, Q
);
2559 if (Tmp
== 1) break;
2560 return std::min(Tmp
, Tmp2
)-1;
2562 case Instruction::Mul
: {
2563 // The output of the Mul can be at most twice the valid bits in the inputs.
2564 unsigned SignBitsOp0
= ComputeNumSignBits(U
->getOperand(0), Depth
+ 1, Q
);
2565 if (SignBitsOp0
== 1) break;
2566 unsigned SignBitsOp1
= ComputeNumSignBits(U
->getOperand(1), Depth
+ 1, Q
);
2567 if (SignBitsOp1
== 1) break;
2568 unsigned OutValidBits
=
2569 (TyBits
- SignBitsOp0
+ 1) + (TyBits
- SignBitsOp1
+ 1);
2570 return OutValidBits
> TyBits
? 1 : TyBits
- OutValidBits
+ 1;
2573 case Instruction::PHI
: {
2574 const PHINode
*PN
= cast
<PHINode
>(U
);
2575 unsigned NumIncomingValues
= PN
->getNumIncomingValues();
2576 // Don't analyze large in-degree PHIs.
2577 if (NumIncomingValues
> 4) break;
2578 // Unreachable blocks may have zero-operand PHI nodes.
2579 if (NumIncomingValues
== 0) break;
2581 // Take the minimum of all incoming values. This can't infinitely loop
2582 // because of our depth threshold.
2583 Tmp
= ComputeNumSignBits(PN
->getIncomingValue(0), Depth
+ 1, Q
);
2584 for (unsigned i
= 1, e
= NumIncomingValues
; i
!= e
; ++i
) {
2585 if (Tmp
== 1) return Tmp
;
2587 Tmp
, ComputeNumSignBits(PN
->getIncomingValue(i
), Depth
+ 1, Q
));
2592 case Instruction::Trunc
:
2593 // FIXME: it's tricky to do anything useful for this, but it is an important
2594 // case for targets like X86.
2597 case Instruction::ExtractElement
:
2598 // Look through extract element. At the moment we keep this simple and skip
2599 // tracking the specific element. But at least we might find information
2600 // valid for all elements of the vector (for example if vector is sign
2601 // extended, shifted, etc).
2602 return ComputeNumSignBits(U
->getOperand(0), Depth
+ 1, Q
);
2604 case Instruction::ShuffleVector
: {
2605 // TODO: This is copied almost directly from the SelectionDAG version of
2606 // ComputeNumSignBits. It would be better if we could share common
2607 // code. If not, make sure that changes are translated to the DAG.
2609 // Collect the minimum number of sign bits that are shared by every vector
2610 // element referenced by the shuffle.
2611 auto *Shuf
= cast
<ShuffleVectorInst
>(U
);
2612 int NumElts
= Shuf
->getOperand(0)->getType()->getVectorNumElements();
2613 int NumMaskElts
= Shuf
->getMask()->getType()->getVectorNumElements();
2614 APInt
DemandedLHS(NumElts
, 0), DemandedRHS(NumElts
, 0);
2615 for (int i
= 0; i
!= NumMaskElts
; ++i
) {
2616 int M
= Shuf
->getMaskValue(i
);
2617 assert(M
< NumElts
* 2 && "Invalid shuffle mask constant");
2618 // For undef elements, we don't know anything about the common state of
2619 // the shuffle result.
2623 DemandedLHS
.setBit(M
% NumElts
);
2625 DemandedRHS
.setBit(M
% NumElts
);
2627 Tmp
= std::numeric_limits
<unsigned>::max();
2629 Tmp
= ComputeNumSignBits(Shuf
->getOperand(0), Depth
+ 1, Q
);
2630 if (!!DemandedRHS
) {
2631 Tmp2
= ComputeNumSignBits(Shuf
->getOperand(1), Depth
+ 1, Q
);
2632 Tmp
= std::min(Tmp
, Tmp2
);
2634 // If we don't know anything, early out and try computeKnownBits fall-back.
2637 assert(Tmp
<= V
->getType()->getScalarSizeInBits() &&
2638 "Failed to determine minimum sign bits");
2643 // Finally, if we can prove that the top bits of the result are 0's or 1's,
2644 // use this information.
2646 // If we can examine all elements of a vector constant successfully, we're
2647 // done (we can't do any better than that). If not, keep trying.
2648 if (unsigned VecSignBits
= computeNumSignBitsVectorConstant(V
, TyBits
))
2651 KnownBits
Known(TyBits
);
2652 computeKnownBits(V
, Known
, Depth
, Q
);
2654 // If we know that the sign bit is either zero or one, determine the number of
2655 // identical bits in the top of the input value.
2656 return std::max(FirstAnswer
, Known
.countMinSignBits());
2659 /// This function computes the integer multiple of Base that equals V.
2660 /// If successful, it returns true and returns the multiple in
2661 /// Multiple. If unsuccessful, it returns false. It looks
2662 /// through SExt instructions only if LookThroughSExt is true.
2663 bool llvm::ComputeMultiple(Value
*V
, unsigned Base
, Value
*&Multiple
,
2664 bool LookThroughSExt
, unsigned Depth
) {
2665 const unsigned MaxDepth
= 6;
2667 assert(V
&& "No Value?");
2668 assert(Depth
<= MaxDepth
&& "Limit Search Depth");
2669 assert(V
->getType()->isIntegerTy() && "Not integer or pointer type!");
2671 Type
*T
= V
->getType();
2673 ConstantInt
*CI
= dyn_cast
<ConstantInt
>(V
);
2683 ConstantExpr
*CO
= dyn_cast
<ConstantExpr
>(V
);
2684 Constant
*BaseVal
= ConstantInt::get(T
, Base
);
2685 if (CO
&& CO
== BaseVal
) {
2687 Multiple
= ConstantInt::get(T
, 1);
2691 if (CI
&& CI
->getZExtValue() % Base
== 0) {
2692 Multiple
= ConstantInt::get(T
, CI
->getZExtValue() / Base
);
2696 if (Depth
== MaxDepth
) return false; // Limit search depth.
2698 Operator
*I
= dyn_cast
<Operator
>(V
);
2699 if (!I
) return false;
2701 switch (I
->getOpcode()) {
2703 case Instruction::SExt
:
2704 if (!LookThroughSExt
) return false;
2705 // otherwise fall through to ZExt
2707 case Instruction::ZExt
:
2708 return ComputeMultiple(I
->getOperand(0), Base
, Multiple
,
2709 LookThroughSExt
, Depth
+1);
2710 case Instruction::Shl
:
2711 case Instruction::Mul
: {
2712 Value
*Op0
= I
->getOperand(0);
2713 Value
*Op1
= I
->getOperand(1);
2715 if (I
->getOpcode() == Instruction::Shl
) {
2716 ConstantInt
*Op1CI
= dyn_cast
<ConstantInt
>(Op1
);
2717 if (!Op1CI
) return false;
2718 // Turn Op0 << Op1 into Op0 * 2^Op1
2719 APInt Op1Int
= Op1CI
->getValue();
2720 uint64_t BitToSet
= Op1Int
.getLimitedValue(Op1Int
.getBitWidth() - 1);
2721 APInt
API(Op1Int
.getBitWidth(), 0);
2722 API
.setBit(BitToSet
);
2723 Op1
= ConstantInt::get(V
->getContext(), API
);
2726 Value
*Mul0
= nullptr;
2727 if (ComputeMultiple(Op0
, Base
, Mul0
, LookThroughSExt
, Depth
+1)) {
2728 if (Constant
*Op1C
= dyn_cast
<Constant
>(Op1
))
2729 if (Constant
*MulC
= dyn_cast
<Constant
>(Mul0
)) {
2730 if (Op1C
->getType()->getPrimitiveSizeInBits() <
2731 MulC
->getType()->getPrimitiveSizeInBits())
2732 Op1C
= ConstantExpr::getZExt(Op1C
, MulC
->getType());
2733 if (Op1C
->getType()->getPrimitiveSizeInBits() >
2734 MulC
->getType()->getPrimitiveSizeInBits())
2735 MulC
= ConstantExpr::getZExt(MulC
, Op1C
->getType());
2737 // V == Base * (Mul0 * Op1), so return (Mul0 * Op1)
2738 Multiple
= ConstantExpr::getMul(MulC
, Op1C
);
2742 if (ConstantInt
*Mul0CI
= dyn_cast
<ConstantInt
>(Mul0
))
2743 if (Mul0CI
->getValue() == 1) {
2744 // V == Base * Op1, so return Op1
2750 Value
*Mul1
= nullptr;
2751 if (ComputeMultiple(Op1
, Base
, Mul1
, LookThroughSExt
, Depth
+1)) {
2752 if (Constant
*Op0C
= dyn_cast
<Constant
>(Op0
))
2753 if (Constant
*MulC
= dyn_cast
<Constant
>(Mul1
)) {
2754 if (Op0C
->getType()->getPrimitiveSizeInBits() <
2755 MulC
->getType()->getPrimitiveSizeInBits())
2756 Op0C
= ConstantExpr::getZExt(Op0C
, MulC
->getType());
2757 if (Op0C
->getType()->getPrimitiveSizeInBits() >
2758 MulC
->getType()->getPrimitiveSizeInBits())
2759 MulC
= ConstantExpr::getZExt(MulC
, Op0C
->getType());
2761 // V == Base * (Mul1 * Op0), so return (Mul1 * Op0)
2762 Multiple
= ConstantExpr::getMul(MulC
, Op0C
);
2766 if (ConstantInt
*Mul1CI
= dyn_cast
<ConstantInt
>(Mul1
))
2767 if (Mul1CI
->getValue() == 1) {
2768 // V == Base * Op0, so return Op0
2776 // We could not determine if V is a multiple of Base.
2780 Intrinsic::ID
llvm::getIntrinsicForCallSite(ImmutableCallSite ICS
,
2781 const TargetLibraryInfo
*TLI
) {
2782 const Function
*F
= ICS
.getCalledFunction();
2784 return Intrinsic::not_intrinsic
;
2786 if (F
->isIntrinsic())
2787 return F
->getIntrinsicID();
2790 return Intrinsic::not_intrinsic
;
2793 // We're going to make assumptions on the semantics of the functions, check
2794 // that the target knows that it's available in this environment and it does
2795 // not have local linkage.
2796 if (!F
|| F
->hasLocalLinkage() || !TLI
->getLibFunc(*F
, Func
))
2797 return Intrinsic::not_intrinsic
;
2799 if (!ICS
.onlyReadsMemory())
2800 return Intrinsic::not_intrinsic
;
2802 // Otherwise check if we have a call to a function that can be turned into a
2803 // vector intrinsic.
2810 return Intrinsic::sin
;
2814 return Intrinsic::cos
;
2818 return Intrinsic::exp
;
2822 return Intrinsic::exp2
;
2826 return Intrinsic::log
;
2828 case LibFunc_log10f
:
2829 case LibFunc_log10l
:
2830 return Intrinsic::log10
;
2834 return Intrinsic::log2
;
2838 return Intrinsic::fabs
;
2842 return Intrinsic::minnum
;
2846 return Intrinsic::maxnum
;
2847 case LibFunc_copysign
:
2848 case LibFunc_copysignf
:
2849 case LibFunc_copysignl
:
2850 return Intrinsic::copysign
;
2852 case LibFunc_floorf
:
2853 case LibFunc_floorl
:
2854 return Intrinsic::floor
;
2858 return Intrinsic::ceil
;
2860 case LibFunc_truncf
:
2861 case LibFunc_truncl
:
2862 return Intrinsic::trunc
;
2866 return Intrinsic::rint
;
2867 case LibFunc_nearbyint
:
2868 case LibFunc_nearbyintf
:
2869 case LibFunc_nearbyintl
:
2870 return Intrinsic::nearbyint
;
2872 case LibFunc_roundf
:
2873 case LibFunc_roundl
:
2874 return Intrinsic::round
;
2878 return Intrinsic::pow
;
2882 return Intrinsic::sqrt
;
2885 return Intrinsic::not_intrinsic
;
2888 /// Return true if we can prove that the specified FP value is never equal to
2891 /// NOTE: this function will need to be revisited when we support non-default
2893 bool llvm::CannotBeNegativeZero(const Value
*V
, const TargetLibraryInfo
*TLI
,
2895 if (auto *CFP
= dyn_cast
<ConstantFP
>(V
))
2896 return !CFP
->getValueAPF().isNegZero();
2898 // Limit search depth.
2899 if (Depth
== MaxDepth
)
2902 auto *Op
= dyn_cast
<Operator
>(V
);
2906 // Check if the nsz fast-math flag is set.
2907 if (auto *FPO
= dyn_cast
<FPMathOperator
>(Op
))
2908 if (FPO
->hasNoSignedZeros())
2911 // (fadd x, 0.0) is guaranteed to return +0.0, not -0.0.
2912 if (match(Op
, m_FAdd(m_Value(), m_PosZeroFP())))
2915 // sitofp and uitofp turn into +0.0 for zero.
2916 if (isa
<SIToFPInst
>(Op
) || isa
<UIToFPInst
>(Op
))
2919 if (auto *Call
= dyn_cast
<CallInst
>(Op
)) {
2920 Intrinsic::ID IID
= getIntrinsicForCallSite(Call
, TLI
);
2924 // sqrt(-0.0) = -0.0, no other negative results are possible.
2925 case Intrinsic::sqrt
:
2926 case Intrinsic::canonicalize
:
2927 return CannotBeNegativeZero(Call
->getArgOperand(0), TLI
, Depth
+ 1);
2929 case Intrinsic::fabs
:
2937 /// If \p SignBitOnly is true, test for a known 0 sign bit rather than a
2938 /// standard ordered compare. e.g. make -0.0 olt 0.0 be true because of the sign
2939 /// bit despite comparing equal.
2940 static bool cannotBeOrderedLessThanZeroImpl(const Value
*V
,
2941 const TargetLibraryInfo
*TLI
,
2944 // TODO: This function does not do the right thing when SignBitOnly is true
2945 // and we're lowering to a hypothetical IEEE 754-compliant-but-evil platform
2946 // which flips the sign bits of NaNs. See
2947 // https://llvm.org/bugs/show_bug.cgi?id=31702.
2949 if (const ConstantFP
*CFP
= dyn_cast
<ConstantFP
>(V
)) {
2950 return !CFP
->getValueAPF().isNegative() ||
2951 (!SignBitOnly
&& CFP
->getValueAPF().isZero());
2954 // Handle vector of constants.
2955 if (auto *CV
= dyn_cast
<Constant
>(V
)) {
2956 if (CV
->getType()->isVectorTy()) {
2957 unsigned NumElts
= CV
->getType()->getVectorNumElements();
2958 for (unsigned i
= 0; i
!= NumElts
; ++i
) {
2959 auto *CFP
= dyn_cast_or_null
<ConstantFP
>(CV
->getAggregateElement(i
));
2962 if (CFP
->getValueAPF().isNegative() &&
2963 (SignBitOnly
|| !CFP
->getValueAPF().isZero()))
2967 // All non-negative ConstantFPs.
2972 if (Depth
== MaxDepth
)
2973 return false; // Limit search depth.
2975 const Operator
*I
= dyn_cast
<Operator
>(V
);
2979 switch (I
->getOpcode()) {
2982 // Unsigned integers are always nonnegative.
2983 case Instruction::UIToFP
:
2985 case Instruction::FMul
:
2986 // x*x is always non-negative or a NaN.
2987 if (I
->getOperand(0) == I
->getOperand(1) &&
2988 (!SignBitOnly
|| cast
<FPMathOperator
>(I
)->hasNoNaNs()))
2992 case Instruction::FAdd
:
2993 case Instruction::FDiv
:
2994 case Instruction::FRem
:
2995 return cannotBeOrderedLessThanZeroImpl(I
->getOperand(0), TLI
, SignBitOnly
,
2997 cannotBeOrderedLessThanZeroImpl(I
->getOperand(1), TLI
, SignBitOnly
,
2999 case Instruction::Select
:
3000 return cannotBeOrderedLessThanZeroImpl(I
->getOperand(1), TLI
, SignBitOnly
,
3002 cannotBeOrderedLessThanZeroImpl(I
->getOperand(2), TLI
, SignBitOnly
,
3004 case Instruction::FPExt
:
3005 case Instruction::FPTrunc
:
3006 // Widening/narrowing never change sign.
3007 return cannotBeOrderedLessThanZeroImpl(I
->getOperand(0), TLI
, SignBitOnly
,
3009 case Instruction::ExtractElement
:
3010 // Look through extract element. At the moment we keep this simple and skip
3011 // tracking the specific element. But at least we might find information
3012 // valid for all elements of the vector.
3013 return cannotBeOrderedLessThanZeroImpl(I
->getOperand(0), TLI
, SignBitOnly
,
3015 case Instruction::Call
:
3016 const auto *CI
= cast
<CallInst
>(I
);
3017 Intrinsic::ID IID
= getIntrinsicForCallSite(CI
, TLI
);
3021 case Intrinsic::maxnum
:
3022 return (isKnownNeverNaN(I
->getOperand(0), TLI
) &&
3023 cannotBeOrderedLessThanZeroImpl(I
->getOperand(0), TLI
,
3024 SignBitOnly
, Depth
+ 1)) ||
3025 (isKnownNeverNaN(I
->getOperand(1), TLI
) &&
3026 cannotBeOrderedLessThanZeroImpl(I
->getOperand(1), TLI
,
3027 SignBitOnly
, Depth
+ 1));
3029 case Intrinsic::maximum
:
3030 return cannotBeOrderedLessThanZeroImpl(I
->getOperand(0), TLI
, SignBitOnly
,
3032 cannotBeOrderedLessThanZeroImpl(I
->getOperand(1), TLI
, SignBitOnly
,
3034 case Intrinsic::minnum
:
3035 case Intrinsic::minimum
:
3036 return cannotBeOrderedLessThanZeroImpl(I
->getOperand(0), TLI
, SignBitOnly
,
3038 cannotBeOrderedLessThanZeroImpl(I
->getOperand(1), TLI
, SignBitOnly
,
3040 case Intrinsic::exp
:
3041 case Intrinsic::exp2
:
3042 case Intrinsic::fabs
:
3045 case Intrinsic::sqrt
:
3046 // sqrt(x) is always >= -0 or NaN. Moreover, sqrt(x) == -0 iff x == -0.
3049 return CI
->hasNoNaNs() && (CI
->hasNoSignedZeros() ||
3050 CannotBeNegativeZero(CI
->getOperand(0), TLI
));
3052 case Intrinsic::powi
:
3053 if (ConstantInt
*Exponent
= dyn_cast
<ConstantInt
>(I
->getOperand(1))) {
3054 // powi(x,n) is non-negative if n is even.
3055 if (Exponent
->getBitWidth() <= 64 && Exponent
->getSExtValue() % 2u == 0)
3058 // TODO: This is not correct. Given that exp is an integer, here are the
3059 // ways that pow can return a negative value:
3061 // pow(x, exp) --> negative if exp is odd and x is negative.
3062 // pow(-0, exp) --> -inf if exp is negative odd.
3063 // pow(-0, exp) --> -0 if exp is positive odd.
3064 // pow(-inf, exp) --> -0 if exp is negative odd.
3065 // pow(-inf, exp) --> -inf if exp is positive odd.
3067 // Therefore, if !SignBitOnly, we can return true if x >= +0 or x is NaN,
3068 // but we must return false if x == -0. Unfortunately we do not currently
3069 // have a way of expressing this constraint. See details in
3070 // https://llvm.org/bugs/show_bug.cgi?id=31702.
3071 return cannotBeOrderedLessThanZeroImpl(I
->getOperand(0), TLI
, SignBitOnly
,
3074 case Intrinsic::fma
:
3075 case Intrinsic::fmuladd
:
3076 // x*x+y is non-negative if y is non-negative.
3077 return I
->getOperand(0) == I
->getOperand(1) &&
3078 (!SignBitOnly
|| cast
<FPMathOperator
>(I
)->hasNoNaNs()) &&
3079 cannotBeOrderedLessThanZeroImpl(I
->getOperand(2), TLI
, SignBitOnly
,
3087 bool llvm::CannotBeOrderedLessThanZero(const Value
*V
,
3088 const TargetLibraryInfo
*TLI
) {
3089 return cannotBeOrderedLessThanZeroImpl(V
, TLI
, false, 0);
3092 bool llvm::SignBitMustBeZero(const Value
*V
, const TargetLibraryInfo
*TLI
) {
3093 return cannotBeOrderedLessThanZeroImpl(V
, TLI
, true, 0);
3096 bool llvm::isKnownNeverNaN(const Value
*V
, const TargetLibraryInfo
*TLI
,
3098 assert(V
->getType()->isFPOrFPVectorTy() && "Querying for NaN on non-FP type");
3100 // If we're told that NaNs won't happen, assume they won't.
3101 if (auto *FPMathOp
= dyn_cast
<FPMathOperator
>(V
))
3102 if (FPMathOp
->hasNoNaNs())
3105 // Handle scalar constants.
3106 if (auto *CFP
= dyn_cast
<ConstantFP
>(V
))
3107 return !CFP
->isNaN();
3109 if (Depth
== MaxDepth
)
3112 if (auto *Inst
= dyn_cast
<Instruction
>(V
)) {
3113 switch (Inst
->getOpcode()) {
3114 case Instruction::FAdd
:
3115 case Instruction::FMul
:
3116 case Instruction::FSub
:
3117 case Instruction::FDiv
:
3118 case Instruction::FRem
: {
3119 // TODO: Need isKnownNeverInfinity
3122 case Instruction::Select
: {
3123 return isKnownNeverNaN(Inst
->getOperand(1), TLI
, Depth
+ 1) &&
3124 isKnownNeverNaN(Inst
->getOperand(2), TLI
, Depth
+ 1);
3126 case Instruction::SIToFP
:
3127 case Instruction::UIToFP
:
3129 case Instruction::FPTrunc
:
3130 case Instruction::FPExt
:
3131 return isKnownNeverNaN(Inst
->getOperand(0), TLI
, Depth
+ 1);
3137 if (const auto *II
= dyn_cast
<IntrinsicInst
>(V
)) {
3138 switch (II
->getIntrinsicID()) {
3139 case Intrinsic::canonicalize
:
3140 case Intrinsic::fabs
:
3141 case Intrinsic::copysign
:
3142 case Intrinsic::exp
:
3143 case Intrinsic::exp2
:
3144 case Intrinsic::floor
:
3145 case Intrinsic::ceil
:
3146 case Intrinsic::trunc
:
3147 case Intrinsic::rint
:
3148 case Intrinsic::nearbyint
:
3149 case Intrinsic::round
:
3150 return isKnownNeverNaN(II
->getArgOperand(0), TLI
, Depth
+ 1);
3151 case Intrinsic::sqrt
:
3152 return isKnownNeverNaN(II
->getArgOperand(0), TLI
, Depth
+ 1) &&
3153 CannotBeOrderedLessThanZero(II
->getArgOperand(0), TLI
);
3154 case Intrinsic::minnum
:
3155 case Intrinsic::maxnum
:
3156 // If either operand is not NaN, the result is not NaN.
3157 return isKnownNeverNaN(II
->getArgOperand(0), TLI
, Depth
+ 1) ||
3158 isKnownNeverNaN(II
->getArgOperand(1), TLI
, Depth
+ 1);
3164 // Bail out for constant expressions, but try to handle vector constants.
3165 if (!V
->getType()->isVectorTy() || !isa
<Constant
>(V
))
3168 // For vectors, verify that each element is not NaN.
3169 unsigned NumElts
= V
->getType()->getVectorNumElements();
3170 for (unsigned i
= 0; i
!= NumElts
; ++i
) {
3171 Constant
*Elt
= cast
<Constant
>(V
)->getAggregateElement(i
);
3174 if (isa
<UndefValue
>(Elt
))
3176 auto *CElt
= dyn_cast
<ConstantFP
>(Elt
);
3177 if (!CElt
|| CElt
->isNaN())
3180 // All elements were confirmed not-NaN or undefined.
3184 Value
*llvm::isBytewiseValue(Value
*V
, const DataLayout
&DL
) {
3186 // All byte-wide stores are splatable, even of arbitrary variables.
3187 if (V
->getType()->isIntegerTy(8))
3190 LLVMContext
&Ctx
= V
->getContext();
3192 // Undef don't care.
3193 auto *UndefInt8
= UndefValue::get(Type::getInt8Ty(Ctx
));
3194 if (isa
<UndefValue
>(V
))
3197 const uint64_t Size
= DL
.getTypeStoreSize(V
->getType());
3201 Constant
*C
= dyn_cast
<Constant
>(V
);
3203 // Conceptually, we could handle things like:
3204 // %a = zext i8 %X to i16
3205 // %b = shl i16 %a, 8
3206 // %c = or i16 %a, %b
3207 // but until there is an example that actually needs this, it doesn't seem
3208 // worth worrying about.
3212 // Handle 'null' ConstantArrayZero etc.
3213 if (C
->isNullValue())
3214 return Constant::getNullValue(Type::getInt8Ty(Ctx
));
3216 // Constant floating-point values can be handled as integer values if the
3217 // corresponding integer value is "byteable". An important case is 0.0.
3218 if (ConstantFP
*CFP
= dyn_cast
<ConstantFP
>(C
)) {
3220 if (CFP
->getType()->isHalfTy())
3221 Ty
= Type::getInt16Ty(Ctx
);
3222 else if (CFP
->getType()->isFloatTy())
3223 Ty
= Type::getInt32Ty(Ctx
);
3224 else if (CFP
->getType()->isDoubleTy())
3225 Ty
= Type::getInt64Ty(Ctx
);
3226 // Don't handle long double formats, which have strange constraints.
3227 return Ty
? isBytewiseValue(ConstantExpr::getBitCast(CFP
, Ty
), DL
)
3231 // We can handle constant integers that are multiple of 8 bits.
3232 if (ConstantInt
*CI
= dyn_cast
<ConstantInt
>(C
)) {
3233 if (CI
->getBitWidth() % 8 == 0) {
3234 assert(CI
->getBitWidth() > 8 && "8 bits should be handled above!");
3235 if (!CI
->getValue().isSplat(8))
3237 return ConstantInt::get(Ctx
, CI
->getValue().trunc(8));
3241 if (auto *CE
= dyn_cast
<ConstantExpr
>(C
)) {
3242 if (CE
->getOpcode() == Instruction::IntToPtr
) {
3243 auto PS
= DL
.getPointerSizeInBits(
3244 cast
<PointerType
>(CE
->getType())->getAddressSpace());
3245 return isBytewiseValue(
3246 ConstantExpr::getIntegerCast(CE
->getOperand(0),
3247 Type::getIntNTy(Ctx
, PS
), false),
3252 auto Merge
= [&](Value
*LHS
, Value
*RHS
) -> Value
* {
3257 if (LHS
== UndefInt8
)
3259 if (RHS
== UndefInt8
)
3264 if (ConstantDataSequential
*CA
= dyn_cast
<ConstantDataSequential
>(C
)) {
3265 Value
*Val
= UndefInt8
;
3266 for (unsigned I
= 0, E
= CA
->getNumElements(); I
!= E
; ++I
)
3267 if (!(Val
= Merge(Val
, isBytewiseValue(CA
->getElementAsConstant(I
), DL
))))
3272 if (isa
<ConstantAggregate
>(C
)) {
3273 Value
*Val
= UndefInt8
;
3274 for (unsigned I
= 0, E
= C
->getNumOperands(); I
!= E
; ++I
)
3275 if (!(Val
= Merge(Val
, isBytewiseValue(C
->getOperand(I
), DL
))))
3280 // Don't try to handle the handful of other constants.
3284 // This is the recursive version of BuildSubAggregate. It takes a few different
3285 // arguments. Idxs is the index within the nested struct From that we are
3286 // looking at now (which is of type IndexedType). IdxSkip is the number of
3287 // indices from Idxs that should be left out when inserting into the resulting
3288 // struct. To is the result struct built so far, new insertvalue instructions
3290 static Value
*BuildSubAggregate(Value
*From
, Value
* To
, Type
*IndexedType
,
3291 SmallVectorImpl
<unsigned> &Idxs
,
3293 Instruction
*InsertBefore
) {
3294 StructType
*STy
= dyn_cast
<StructType
>(IndexedType
);
3296 // Save the original To argument so we can modify it
3298 // General case, the type indexed by Idxs is a struct
3299 for (unsigned i
= 0, e
= STy
->getNumElements(); i
!= e
; ++i
) {
3300 // Process each struct element recursively
3303 To
= BuildSubAggregate(From
, To
, STy
->getElementType(i
), Idxs
, IdxSkip
,
3307 // Couldn't find any inserted value for this index? Cleanup
3308 while (PrevTo
!= OrigTo
) {
3309 InsertValueInst
* Del
= cast
<InsertValueInst
>(PrevTo
);
3310 PrevTo
= Del
->getAggregateOperand();
3311 Del
->eraseFromParent();
3313 // Stop processing elements
3317 // If we successfully found a value for each of our subaggregates
3321 // Base case, the type indexed by SourceIdxs is not a struct, or not all of
3322 // the struct's elements had a value that was inserted directly. In the latter
3323 // case, perhaps we can't determine each of the subelements individually, but
3324 // we might be able to find the complete struct somewhere.
3326 // Find the value that is at that particular spot
3327 Value
*V
= FindInsertedValue(From
, Idxs
);
3332 // Insert the value in the new (sub) aggregate
3333 return InsertValueInst::Create(To
, V
, makeArrayRef(Idxs
).slice(IdxSkip
),
3334 "tmp", InsertBefore
);
3337 // This helper takes a nested struct and extracts a part of it (which is again a
3338 // struct) into a new value. For example, given the struct:
3339 // { a, { b, { c, d }, e } }
3340 // and the indices "1, 1" this returns
3343 // It does this by inserting an insertvalue for each element in the resulting
3344 // struct, as opposed to just inserting a single struct. This will only work if
3345 // each of the elements of the substruct are known (ie, inserted into From by an
3346 // insertvalue instruction somewhere).
3348 // All inserted insertvalue instructions are inserted before InsertBefore
3349 static Value
*BuildSubAggregate(Value
*From
, ArrayRef
<unsigned> idx_range
,
3350 Instruction
*InsertBefore
) {
3351 assert(InsertBefore
&& "Must have someplace to insert!");
3352 Type
*IndexedType
= ExtractValueInst::getIndexedType(From
->getType(),
3354 Value
*To
= UndefValue::get(IndexedType
);
3355 SmallVector
<unsigned, 10> Idxs(idx_range
.begin(), idx_range
.end());
3356 unsigned IdxSkip
= Idxs
.size();
3358 return BuildSubAggregate(From
, To
, IndexedType
, Idxs
, IdxSkip
, InsertBefore
);
3361 /// Given an aggregate and a sequence of indices, see if the scalar value
3362 /// indexed is already around as a register, for example if it was inserted
3363 /// directly into the aggregate.
3365 /// If InsertBefore is not null, this function will duplicate (modified)
3366 /// insertvalues when a part of a nested struct is extracted.
3367 Value
*llvm::FindInsertedValue(Value
*V
, ArrayRef
<unsigned> idx_range
,
3368 Instruction
*InsertBefore
) {
3369 // Nothing to index? Just return V then (this is useful at the end of our
3371 if (idx_range
.empty())
3373 // We have indices, so V should have an indexable type.
3374 assert((V
->getType()->isStructTy() || V
->getType()->isArrayTy()) &&
3375 "Not looking at a struct or array?");
3376 assert(ExtractValueInst::getIndexedType(V
->getType(), idx_range
) &&
3377 "Invalid indices for type?");
3379 if (Constant
*C
= dyn_cast
<Constant
>(V
)) {
3380 C
= C
->getAggregateElement(idx_range
[0]);
3381 if (!C
) return nullptr;
3382 return FindInsertedValue(C
, idx_range
.slice(1), InsertBefore
);
3385 if (InsertValueInst
*I
= dyn_cast
<InsertValueInst
>(V
)) {
3386 // Loop the indices for the insertvalue instruction in parallel with the
3387 // requested indices
3388 const unsigned *req_idx
= idx_range
.begin();
3389 for (const unsigned *i
= I
->idx_begin(), *e
= I
->idx_end();
3390 i
!= e
; ++i
, ++req_idx
) {
3391 if (req_idx
== idx_range
.end()) {
3392 // We can't handle this without inserting insertvalues
3396 // The requested index identifies a part of a nested aggregate. Handle
3397 // this specially. For example,
3398 // %A = insertvalue { i32, {i32, i32 } } undef, i32 10, 1, 0
3399 // %B = insertvalue { i32, {i32, i32 } } %A, i32 11, 1, 1
3400 // %C = extractvalue {i32, { i32, i32 } } %B, 1
3401 // This can be changed into
3402 // %A = insertvalue {i32, i32 } undef, i32 10, 0
3403 // %C = insertvalue {i32, i32 } %A, i32 11, 1
3404 // which allows the unused 0,0 element from the nested struct to be
3406 return BuildSubAggregate(V
, makeArrayRef(idx_range
.begin(), req_idx
),
3410 // This insert value inserts something else than what we are looking for.
3411 // See if the (aggregate) value inserted into has the value we are
3412 // looking for, then.
3414 return FindInsertedValue(I
->getAggregateOperand(), idx_range
,
3417 // If we end up here, the indices of the insertvalue match with those
3418 // requested (though possibly only partially). Now we recursively look at
3419 // the inserted value, passing any remaining indices.
3420 return FindInsertedValue(I
->getInsertedValueOperand(),
3421 makeArrayRef(req_idx
, idx_range
.end()),
3425 if (ExtractValueInst
*I
= dyn_cast
<ExtractValueInst
>(V
)) {
3426 // If we're extracting a value from an aggregate that was extracted from
3427 // something else, we can extract from that something else directly instead.
3428 // However, we will need to chain I's indices with the requested indices.
3430 // Calculate the number of indices required
3431 unsigned size
= I
->getNumIndices() + idx_range
.size();
3432 // Allocate some space to put the new indices in
3433 SmallVector
<unsigned, 5> Idxs
;
3435 // Add indices from the extract value instruction
3436 Idxs
.append(I
->idx_begin(), I
->idx_end());
3438 // Add requested indices
3439 Idxs
.append(idx_range
.begin(), idx_range
.end());
3441 assert(Idxs
.size() == size
3442 && "Number of indices added not correct?");
3444 return FindInsertedValue(I
->getAggregateOperand(), Idxs
, InsertBefore
);
3446 // Otherwise, we don't know (such as, extracting from a function return value
3447 // or load instruction)
3451 bool llvm::isGEPBasedOnPointerToString(const GEPOperator
*GEP
,
3452 unsigned CharSize
) {
3453 // Make sure the GEP has exactly three arguments.
3454 if (GEP
->getNumOperands() != 3)
3457 // Make sure the index-ee is a pointer to array of \p CharSize integers.
3459 ArrayType
*AT
= dyn_cast
<ArrayType
>(GEP
->getSourceElementType());
3460 if (!AT
|| !AT
->getElementType()->isIntegerTy(CharSize
))
3463 // Check to make sure that the first operand of the GEP is an integer and
3464 // has value 0 so that we are sure we're indexing into the initializer.
3465 const ConstantInt
*FirstIdx
= dyn_cast
<ConstantInt
>(GEP
->getOperand(1));
3466 if (!FirstIdx
|| !FirstIdx
->isZero())
3472 bool llvm::getConstantDataArrayInfo(const Value
*V
,
3473 ConstantDataArraySlice
&Slice
,
3474 unsigned ElementSize
, uint64_t Offset
) {
3477 // Look through bitcast instructions and geps.
3478 V
= V
->stripPointerCasts();
3480 // If the value is a GEP instruction or constant expression, treat it as an
3482 if (const GEPOperator
*GEP
= dyn_cast
<GEPOperator
>(V
)) {
3483 // The GEP operator should be based on a pointer to string constant, and is
3484 // indexing into the string constant.
3485 if (!isGEPBasedOnPointerToString(GEP
, ElementSize
))
3488 // If the second index isn't a ConstantInt, then this is a variable index
3489 // into the array. If this occurs, we can't say anything meaningful about
3491 uint64_t StartIdx
= 0;
3492 if (const ConstantInt
*CI
= dyn_cast
<ConstantInt
>(GEP
->getOperand(2)))
3493 StartIdx
= CI
->getZExtValue();
3496 return getConstantDataArrayInfo(GEP
->getOperand(0), Slice
, ElementSize
,
3500 // The GEP instruction, constant or instruction, must reference a global
3501 // variable that is a constant and is initialized. The referenced constant
3502 // initializer is the array that we'll use for optimization.
3503 const GlobalVariable
*GV
= dyn_cast
<GlobalVariable
>(V
);
3504 if (!GV
|| !GV
->isConstant() || !GV
->hasDefinitiveInitializer())
3507 const ConstantDataArray
*Array
;
3509 if (GV
->getInitializer()->isNullValue()) {
3510 Type
*GVTy
= GV
->getValueType();
3511 if ( (ArrayTy
= dyn_cast
<ArrayType
>(GVTy
)) ) {
3512 // A zeroinitializer for the array; there is no ConstantDataArray.
3515 const DataLayout
&DL
= GV
->getParent()->getDataLayout();
3516 uint64_t SizeInBytes
= DL
.getTypeStoreSize(GVTy
);
3517 uint64_t Length
= SizeInBytes
/ (ElementSize
/ 8);
3518 if (Length
<= Offset
)
3521 Slice
.Array
= nullptr;
3523 Slice
.Length
= Length
- Offset
;
3527 // This must be a ConstantDataArray.
3528 Array
= dyn_cast
<ConstantDataArray
>(GV
->getInitializer());
3531 ArrayTy
= Array
->getType();
3533 if (!ArrayTy
->getElementType()->isIntegerTy(ElementSize
))
3536 uint64_t NumElts
= ArrayTy
->getArrayNumElements();
3537 if (Offset
> NumElts
)
3540 Slice
.Array
= Array
;
3541 Slice
.Offset
= Offset
;
3542 Slice
.Length
= NumElts
- Offset
;
3546 /// This function computes the length of a null-terminated C string pointed to
3547 /// by V. If successful, it returns true and returns the string in Str.
3548 /// If unsuccessful, it returns false.
3549 bool llvm::getConstantStringInfo(const Value
*V
, StringRef
&Str
,
3550 uint64_t Offset
, bool TrimAtNul
) {
3551 ConstantDataArraySlice Slice
;
3552 if (!getConstantDataArrayInfo(V
, Slice
, 8, Offset
))
3555 if (Slice
.Array
== nullptr) {
3560 if (Slice
.Length
== 1) {
3561 Str
= StringRef("", 1);
3564 // We cannot instantiate a StringRef as we do not have an appropriate string
3569 // Start out with the entire array in the StringRef.
3570 Str
= Slice
.Array
->getAsString();
3571 // Skip over 'offset' bytes.
3572 Str
= Str
.substr(Slice
.Offset
);
3575 // Trim off the \0 and anything after it. If the array is not nul
3576 // terminated, we just return the whole end of string. The client may know
3577 // some other way that the string is length-bound.
3578 Str
= Str
.substr(0, Str
.find('\0'));
3583 // These next two are very similar to the above, but also look through PHI
3585 // TODO: See if we can integrate these two together.
3587 /// If we can compute the length of the string pointed to by
3588 /// the specified pointer, return 'len+1'. If we can't, return 0.
3589 static uint64_t GetStringLengthH(const Value
*V
,
3590 SmallPtrSetImpl
<const PHINode
*> &PHIs
,
3591 unsigned CharSize
) {
3592 // Look through noop bitcast instructions.
3593 V
= V
->stripPointerCasts();
3595 // If this is a PHI node, there are two cases: either we have already seen it
3597 if (const PHINode
*PN
= dyn_cast
<PHINode
>(V
)) {
3598 if (!PHIs
.insert(PN
).second
)
3599 return ~0ULL; // already in the set.
3601 // If it was new, see if all the input strings are the same length.
3602 uint64_t LenSoFar
= ~0ULL;
3603 for (Value
*IncValue
: PN
->incoming_values()) {
3604 uint64_t Len
= GetStringLengthH(IncValue
, PHIs
, CharSize
);
3605 if (Len
== 0) return 0; // Unknown length -> unknown.
3607 if (Len
== ~0ULL) continue;
3609 if (Len
!= LenSoFar
&& LenSoFar
!= ~0ULL)
3610 return 0; // Disagree -> unknown.
3614 // Success, all agree.
3618 // strlen(select(c,x,y)) -> strlen(x) ^ strlen(y)
3619 if (const SelectInst
*SI
= dyn_cast
<SelectInst
>(V
)) {
3620 uint64_t Len1
= GetStringLengthH(SI
->getTrueValue(), PHIs
, CharSize
);
3621 if (Len1
== 0) return 0;
3622 uint64_t Len2
= GetStringLengthH(SI
->getFalseValue(), PHIs
, CharSize
);
3623 if (Len2
== 0) return 0;
3624 if (Len1
== ~0ULL) return Len2
;
3625 if (Len2
== ~0ULL) return Len1
;
3626 if (Len1
!= Len2
) return 0;
3630 // Otherwise, see if we can read the string.
3631 ConstantDataArraySlice Slice
;
3632 if (!getConstantDataArrayInfo(V
, Slice
, CharSize
))
3635 if (Slice
.Array
== nullptr)
3638 // Search for nul characters
3639 unsigned NullIndex
= 0;
3640 for (unsigned E
= Slice
.Length
; NullIndex
< E
; ++NullIndex
) {
3641 if (Slice
.Array
->getElementAsInteger(Slice
.Offset
+ NullIndex
) == 0)
3645 return NullIndex
+ 1;
3648 /// If we can compute the length of the string pointed to by
3649 /// the specified pointer, return 'len+1'. If we can't, return 0.
3650 uint64_t llvm::GetStringLength(const Value
*V
, unsigned CharSize
) {
3651 if (!V
->getType()->isPointerTy())
3654 SmallPtrSet
<const PHINode
*, 32> PHIs
;
3655 uint64_t Len
= GetStringLengthH(V
, PHIs
, CharSize
);
3656 // If Len is ~0ULL, we had an infinite phi cycle: this is dead code, so return
3657 // an empty string as a length.
3658 return Len
== ~0ULL ? 1 : Len
;
3662 llvm::getArgumentAliasingToReturnedPointer(const CallBase
*Call
,
3663 bool MustPreserveNullness
) {
3665 "getArgumentAliasingToReturnedPointer only works on nonnull calls");
3666 if (const Value
*RV
= Call
->getReturnedArgOperand())
3668 // This can be used only as a aliasing property.
3669 if (isIntrinsicReturningPointerAliasingArgumentWithoutCapturing(
3670 Call
, MustPreserveNullness
))
3671 return Call
->getArgOperand(0);
3675 bool llvm::isIntrinsicReturningPointerAliasingArgumentWithoutCapturing(
3676 const CallBase
*Call
, bool MustPreserveNullness
) {
3677 return Call
->getIntrinsicID() == Intrinsic::launder_invariant_group
||
3678 Call
->getIntrinsicID() == Intrinsic::strip_invariant_group
||
3679 Call
->getIntrinsicID() == Intrinsic::aarch64_irg
||
3680 Call
->getIntrinsicID() == Intrinsic::aarch64_tagp
||
3681 (!MustPreserveNullness
&&
3682 Call
->getIntrinsicID() == Intrinsic::ptrmask
);
3685 /// \p PN defines a loop-variant pointer to an object. Check if the
3686 /// previous iteration of the loop was referring to the same object as \p PN.
3687 static bool isSameUnderlyingObjectInLoop(const PHINode
*PN
,
3688 const LoopInfo
*LI
) {
3689 // Find the loop-defined value.
3690 Loop
*L
= LI
->getLoopFor(PN
->getParent());
3691 if (PN
->getNumIncomingValues() != 2)
3694 // Find the value from previous iteration.
3695 auto *PrevValue
= dyn_cast
<Instruction
>(PN
->getIncomingValue(0));
3696 if (!PrevValue
|| LI
->getLoopFor(PrevValue
->getParent()) != L
)
3697 PrevValue
= dyn_cast
<Instruction
>(PN
->getIncomingValue(1));
3698 if (!PrevValue
|| LI
->getLoopFor(PrevValue
->getParent()) != L
)
3701 // If a new pointer is loaded in the loop, the pointer references a different
3702 // object in every iteration. E.g.:
3706 if (auto *Load
= dyn_cast
<LoadInst
>(PrevValue
))
3707 if (!L
->isLoopInvariant(Load
->getPointerOperand()))
3712 Value
*llvm::GetUnderlyingObject(Value
*V
, const DataLayout
&DL
,
3713 unsigned MaxLookup
) {
3714 if (!V
->getType()->isPointerTy())
3716 for (unsigned Count
= 0; MaxLookup
== 0 || Count
< MaxLookup
; ++Count
) {
3717 if (GEPOperator
*GEP
= dyn_cast
<GEPOperator
>(V
)) {
3718 V
= GEP
->getPointerOperand();
3719 } else if (Operator::getOpcode(V
) == Instruction::BitCast
||
3720 Operator::getOpcode(V
) == Instruction::AddrSpaceCast
) {
3721 V
= cast
<Operator
>(V
)->getOperand(0);
3722 } else if (GlobalAlias
*GA
= dyn_cast
<GlobalAlias
>(V
)) {
3723 if (GA
->isInterposable())
3725 V
= GA
->getAliasee();
3726 } else if (isa
<AllocaInst
>(V
)) {
3727 // An alloca can't be further simplified.
3730 if (auto *Call
= dyn_cast
<CallBase
>(V
)) {
3731 // CaptureTracking can know about special capturing properties of some
3732 // intrinsics like launder.invariant.group, that can't be expressed with
3733 // the attributes, but have properties like returning aliasing pointer.
3734 // Because some analysis may assume that nocaptured pointer is not
3735 // returned from some special intrinsic (because function would have to
3736 // be marked with returns attribute), it is crucial to use this function
3737 // because it should be in sync with CaptureTracking. Not using it may
3738 // cause weird miscompilations where 2 aliasing pointers are assumed to
3740 if (auto *RP
= getArgumentAliasingToReturnedPointer(Call
, false)) {
3746 // See if InstructionSimplify knows any relevant tricks.
3747 if (Instruction
*I
= dyn_cast
<Instruction
>(V
))
3748 // TODO: Acquire a DominatorTree and AssumptionCache and use them.
3749 if (Value
*Simplified
= SimplifyInstruction(I
, {DL
, I
})) {
3756 assert(V
->getType()->isPointerTy() && "Unexpected operand type!");
3761 void llvm::GetUnderlyingObjects(const Value
*V
,
3762 SmallVectorImpl
<const Value
*> &Objects
,
3763 const DataLayout
&DL
, LoopInfo
*LI
,
3764 unsigned MaxLookup
) {
3765 SmallPtrSet
<const Value
*, 4> Visited
;
3766 SmallVector
<const Value
*, 4> Worklist
;
3767 Worklist
.push_back(V
);
3769 const Value
*P
= Worklist
.pop_back_val();
3770 P
= GetUnderlyingObject(P
, DL
, MaxLookup
);
3772 if (!Visited
.insert(P
).second
)
3775 if (auto *SI
= dyn_cast
<SelectInst
>(P
)) {
3776 Worklist
.push_back(SI
->getTrueValue());
3777 Worklist
.push_back(SI
->getFalseValue());
3781 if (auto *PN
= dyn_cast
<PHINode
>(P
)) {
3782 // If this PHI changes the underlying object in every iteration of the
3783 // loop, don't look through it. Consider:
3786 // Prev = Curr; // Prev = PHI (Prev_0, Curr)
3790 // Prev is tracking Curr one iteration behind so they refer to different
3791 // underlying objects.
3792 if (!LI
|| !LI
->isLoopHeader(PN
->getParent()) ||
3793 isSameUnderlyingObjectInLoop(PN
, LI
))
3794 for (Value
*IncValue
: PN
->incoming_values())
3795 Worklist
.push_back(IncValue
);
3799 Objects
.push_back(P
);
3800 } while (!Worklist
.empty());
3803 /// This is the function that does the work of looking through basic
3804 /// ptrtoint+arithmetic+inttoptr sequences.
3805 static const Value
*getUnderlyingObjectFromInt(const Value
*V
) {
3807 if (const Operator
*U
= dyn_cast
<Operator
>(V
)) {
3808 // If we find a ptrtoint, we can transfer control back to the
3809 // regular getUnderlyingObjectFromInt.
3810 if (U
->getOpcode() == Instruction::PtrToInt
)
3811 return U
->getOperand(0);
3812 // If we find an add of a constant, a multiplied value, or a phi, it's
3813 // likely that the other operand will lead us to the base
3814 // object. We don't have to worry about the case where the
3815 // object address is somehow being computed by the multiply,
3816 // because our callers only care when the result is an
3817 // identifiable object.
3818 if (U
->getOpcode() != Instruction::Add
||
3819 (!isa
<ConstantInt
>(U
->getOperand(1)) &&
3820 Operator::getOpcode(U
->getOperand(1)) != Instruction::Mul
&&
3821 !isa
<PHINode
>(U
->getOperand(1))))
3823 V
= U
->getOperand(0);
3827 assert(V
->getType()->isIntegerTy() && "Unexpected operand type!");
3831 /// This is a wrapper around GetUnderlyingObjects and adds support for basic
3832 /// ptrtoint+arithmetic+inttoptr sequences.
3833 /// It returns false if unidentified object is found in GetUnderlyingObjects.
3834 bool llvm::getUnderlyingObjectsForCodeGen(const Value
*V
,
3835 SmallVectorImpl
<Value
*> &Objects
,
3836 const DataLayout
&DL
) {
3837 SmallPtrSet
<const Value
*, 16> Visited
;
3838 SmallVector
<const Value
*, 4> Working(1, V
);
3840 V
= Working
.pop_back_val();
3842 SmallVector
<const Value
*, 4> Objs
;
3843 GetUnderlyingObjects(V
, Objs
, DL
);
3845 for (const Value
*V
: Objs
) {
3846 if (!Visited
.insert(V
).second
)
3848 if (Operator::getOpcode(V
) == Instruction::IntToPtr
) {
3850 getUnderlyingObjectFromInt(cast
<User
>(V
)->getOperand(0));
3851 if (O
->getType()->isPointerTy()) {
3852 Working
.push_back(O
);
3856 // If GetUnderlyingObjects fails to find an identifiable object,
3857 // getUnderlyingObjectsForCodeGen also fails for safety.
3858 if (!isIdentifiedObject(V
)) {
3862 Objects
.push_back(const_cast<Value
*>(V
));
3864 } while (!Working
.empty());
3868 /// Return true if the only users of this pointer are lifetime markers.
3869 bool llvm::onlyUsedByLifetimeMarkers(const Value
*V
) {
3870 for (const User
*U
: V
->users()) {
3871 const IntrinsicInst
*II
= dyn_cast
<IntrinsicInst
>(U
);
3872 if (!II
) return false;
3874 if (!II
->isLifetimeStartOrEnd())
3880 bool llvm::isSafeToSpeculativelyExecute(const Value
*V
,
3881 const Instruction
*CtxI
,
3882 const DominatorTree
*DT
) {
3883 const Operator
*Inst
= dyn_cast
<Operator
>(V
);
3887 for (unsigned i
= 0, e
= Inst
->getNumOperands(); i
!= e
; ++i
)
3888 if (Constant
*C
= dyn_cast
<Constant
>(Inst
->getOperand(i
)))
3892 switch (Inst
->getOpcode()) {
3895 case Instruction::UDiv
:
3896 case Instruction::URem
: {
3897 // x / y is undefined if y == 0.
3899 if (match(Inst
->getOperand(1), m_APInt(V
)))
3903 case Instruction::SDiv
:
3904 case Instruction::SRem
: {
3905 // x / y is undefined if y == 0 or x == INT_MIN and y == -1
3906 const APInt
*Numerator
, *Denominator
;
3907 if (!match(Inst
->getOperand(1), m_APInt(Denominator
)))
3909 // We cannot hoist this division if the denominator is 0.
3910 if (*Denominator
== 0)
3912 // It's safe to hoist if the denominator is not 0 or -1.
3913 if (*Denominator
!= -1)
3915 // At this point we know that the denominator is -1. It is safe to hoist as
3916 // long we know that the numerator is not INT_MIN.
3917 if (match(Inst
->getOperand(0), m_APInt(Numerator
)))
3918 return !Numerator
->isMinSignedValue();
3919 // The numerator *might* be MinSignedValue.
3922 case Instruction::Load
: {
3923 const LoadInst
*LI
= cast
<LoadInst
>(Inst
);
3924 if (!LI
->isUnordered() ||
3925 // Speculative load may create a race that did not exist in the source.
3926 LI
->getFunction()->hasFnAttribute(Attribute::SanitizeThread
) ||
3927 // Speculative load may load data from dirty regions.
3928 LI
->getFunction()->hasFnAttribute(Attribute::SanitizeAddress
) ||
3929 LI
->getFunction()->hasFnAttribute(Attribute::SanitizeHWAddress
))
3931 const DataLayout
&DL
= LI
->getModule()->getDataLayout();
3932 return isDereferenceableAndAlignedPointer(LI
->getPointerOperand(),
3933 LI
->getType(), LI
->getAlignment(),
3936 case Instruction::Call
: {
3937 auto *CI
= cast
<const CallInst
>(Inst
);
3938 const Function
*Callee
= CI
->getCalledFunction();
3940 // The called function could have undefined behavior or side-effects, even
3941 // if marked readnone nounwind.
3942 return Callee
&& Callee
->isSpeculatable();
3944 case Instruction::VAArg
:
3945 case Instruction::Alloca
:
3946 case Instruction::Invoke
:
3947 case Instruction::CallBr
:
3948 case Instruction::PHI
:
3949 case Instruction::Store
:
3950 case Instruction::Ret
:
3951 case Instruction::Br
:
3952 case Instruction::IndirectBr
:
3953 case Instruction::Switch
:
3954 case Instruction::Unreachable
:
3955 case Instruction::Fence
:
3956 case Instruction::AtomicRMW
:
3957 case Instruction::AtomicCmpXchg
:
3958 case Instruction::LandingPad
:
3959 case Instruction::Resume
:
3960 case Instruction::CatchSwitch
:
3961 case Instruction::CatchPad
:
3962 case Instruction::CatchRet
:
3963 case Instruction::CleanupPad
:
3964 case Instruction::CleanupRet
:
3965 return false; // Misc instructions which have effects
3969 bool llvm::mayBeMemoryDependent(const Instruction
&I
) {
3970 return I
.mayReadOrWriteMemory() || !isSafeToSpeculativelyExecute(&I
);
3973 /// Convert ConstantRange OverflowResult into ValueTracking OverflowResult.
3974 static OverflowResult
mapOverflowResult(ConstantRange::OverflowResult OR
) {
3976 case ConstantRange::OverflowResult::MayOverflow
:
3977 return OverflowResult::MayOverflow
;
3978 case ConstantRange::OverflowResult::AlwaysOverflowsLow
:
3979 return OverflowResult::AlwaysOverflowsLow
;
3980 case ConstantRange::OverflowResult::AlwaysOverflowsHigh
:
3981 return OverflowResult::AlwaysOverflowsHigh
;
3982 case ConstantRange::OverflowResult::NeverOverflows
:
3983 return OverflowResult::NeverOverflows
;
3985 llvm_unreachable("Unknown OverflowResult");
3988 /// Combine constant ranges from computeConstantRange() and computeKnownBits().
3989 static ConstantRange
computeConstantRangeIncludingKnownBits(
3990 const Value
*V
, bool ForSigned
, const DataLayout
&DL
, unsigned Depth
,
3991 AssumptionCache
*AC
, const Instruction
*CxtI
, const DominatorTree
*DT
,
3992 OptimizationRemarkEmitter
*ORE
= nullptr, bool UseInstrInfo
= true) {
3993 KnownBits Known
= computeKnownBits(
3994 V
, DL
, Depth
, AC
, CxtI
, DT
, ORE
, UseInstrInfo
);
3995 ConstantRange CR1
= ConstantRange::fromKnownBits(Known
, ForSigned
);
3996 ConstantRange CR2
= computeConstantRange(V
, UseInstrInfo
);
3997 ConstantRange::PreferredRangeType RangeType
=
3998 ForSigned
? ConstantRange::Signed
: ConstantRange::Unsigned
;
3999 return CR1
.intersectWith(CR2
, RangeType
);
4002 OverflowResult
llvm::computeOverflowForUnsignedMul(
4003 const Value
*LHS
, const Value
*RHS
, const DataLayout
&DL
,
4004 AssumptionCache
*AC
, const Instruction
*CxtI
, const DominatorTree
*DT
,
4005 bool UseInstrInfo
) {
4006 KnownBits LHSKnown
= computeKnownBits(LHS
, DL
, /*Depth=*/0, AC
, CxtI
, DT
,
4007 nullptr, UseInstrInfo
);
4008 KnownBits RHSKnown
= computeKnownBits(RHS
, DL
, /*Depth=*/0, AC
, CxtI
, DT
,
4009 nullptr, UseInstrInfo
);
4010 ConstantRange LHSRange
= ConstantRange::fromKnownBits(LHSKnown
, false);
4011 ConstantRange RHSRange
= ConstantRange::fromKnownBits(RHSKnown
, false);
4012 return mapOverflowResult(LHSRange
.unsignedMulMayOverflow(RHSRange
));
4016 llvm::computeOverflowForSignedMul(const Value
*LHS
, const Value
*RHS
,
4017 const DataLayout
&DL
, AssumptionCache
*AC
,
4018 const Instruction
*CxtI
,
4019 const DominatorTree
*DT
, bool UseInstrInfo
) {
4020 // Multiplying n * m significant bits yields a result of n + m significant
4021 // bits. If the total number of significant bits does not exceed the
4022 // result bit width (minus 1), there is no overflow.
4023 // This means if we have enough leading sign bits in the operands
4024 // we can guarantee that the result does not overflow.
4025 // Ref: "Hacker's Delight" by Henry Warren
4026 unsigned BitWidth
= LHS
->getType()->getScalarSizeInBits();
4028 // Note that underestimating the number of sign bits gives a more
4029 // conservative answer.
4030 unsigned SignBits
= ComputeNumSignBits(LHS
, DL
, 0, AC
, CxtI
, DT
) +
4031 ComputeNumSignBits(RHS
, DL
, 0, AC
, CxtI
, DT
);
4033 // First handle the easy case: if we have enough sign bits there's
4034 // definitely no overflow.
4035 if (SignBits
> BitWidth
+ 1)
4036 return OverflowResult::NeverOverflows
;
4038 // There are two ambiguous cases where there can be no overflow:
4039 // SignBits == BitWidth + 1 and
4040 // SignBits == BitWidth
4041 // The second case is difficult to check, therefore we only handle the
4043 if (SignBits
== BitWidth
+ 1) {
4044 // It overflows only when both arguments are negative and the true
4045 // product is exactly the minimum negative number.
4046 // E.g. mul i16 with 17 sign bits: 0xff00 * 0xff80 = 0x8000
4047 // For simplicity we just check if at least one side is not negative.
4048 KnownBits LHSKnown
= computeKnownBits(LHS
, DL
, /*Depth=*/0, AC
, CxtI
, DT
,
4049 nullptr, UseInstrInfo
);
4050 KnownBits RHSKnown
= computeKnownBits(RHS
, DL
, /*Depth=*/0, AC
, CxtI
, DT
,
4051 nullptr, UseInstrInfo
);
4052 if (LHSKnown
.isNonNegative() || RHSKnown
.isNonNegative())
4053 return OverflowResult::NeverOverflows
;
4055 return OverflowResult::MayOverflow
;
4058 OverflowResult
llvm::computeOverflowForUnsignedAdd(
4059 const Value
*LHS
, const Value
*RHS
, const DataLayout
&DL
,
4060 AssumptionCache
*AC
, const Instruction
*CxtI
, const DominatorTree
*DT
,
4061 bool UseInstrInfo
) {
4062 ConstantRange LHSRange
= computeConstantRangeIncludingKnownBits(
4063 LHS
, /*ForSigned=*/false, DL
, /*Depth=*/0, AC
, CxtI
, DT
,
4064 nullptr, UseInstrInfo
);
4065 ConstantRange RHSRange
= computeConstantRangeIncludingKnownBits(
4066 RHS
, /*ForSigned=*/false, DL
, /*Depth=*/0, AC
, CxtI
, DT
,
4067 nullptr, UseInstrInfo
);
4068 return mapOverflowResult(LHSRange
.unsignedAddMayOverflow(RHSRange
));
4071 static OverflowResult
computeOverflowForSignedAdd(const Value
*LHS
,
4073 const AddOperator
*Add
,
4074 const DataLayout
&DL
,
4075 AssumptionCache
*AC
,
4076 const Instruction
*CxtI
,
4077 const DominatorTree
*DT
) {
4078 if (Add
&& Add
->hasNoSignedWrap()) {
4079 return OverflowResult::NeverOverflows
;
4082 // If LHS and RHS each have at least two sign bits, the addition will look
4088 // If the carry into the most significant position is 0, X and Y can't both
4089 // be 1 and therefore the carry out of the addition is also 0.
4091 // If the carry into the most significant position is 1, X and Y can't both
4092 // be 0 and therefore the carry out of the addition is also 1.
4094 // Since the carry into the most significant position is always equal to
4095 // the carry out of the addition, there is no signed overflow.
4096 if (ComputeNumSignBits(LHS
, DL
, 0, AC
, CxtI
, DT
) > 1 &&
4097 ComputeNumSignBits(RHS
, DL
, 0, AC
, CxtI
, DT
) > 1)
4098 return OverflowResult::NeverOverflows
;
4100 ConstantRange LHSRange
= computeConstantRangeIncludingKnownBits(
4101 LHS
, /*ForSigned=*/true, DL
, /*Depth=*/0, AC
, CxtI
, DT
);
4102 ConstantRange RHSRange
= computeConstantRangeIncludingKnownBits(
4103 RHS
, /*ForSigned=*/true, DL
, /*Depth=*/0, AC
, CxtI
, DT
);
4105 mapOverflowResult(LHSRange
.signedAddMayOverflow(RHSRange
));
4106 if (OR
!= OverflowResult::MayOverflow
)
4109 // The remaining code needs Add to be available. Early returns if not so.
4111 return OverflowResult::MayOverflow
;
4113 // If the sign of Add is the same as at least one of the operands, this add
4114 // CANNOT overflow. If this can be determined from the known bits of the
4115 // operands the above signedAddMayOverflow() check will have already done so.
4116 // The only other way to improve on the known bits is from an assumption, so
4117 // call computeKnownBitsFromAssume() directly.
4118 bool LHSOrRHSKnownNonNegative
=
4119 (LHSRange
.isAllNonNegative() || RHSRange
.isAllNonNegative());
4120 bool LHSOrRHSKnownNegative
=
4121 (LHSRange
.isAllNegative() || RHSRange
.isAllNegative());
4122 if (LHSOrRHSKnownNonNegative
|| LHSOrRHSKnownNegative
) {
4123 KnownBits
AddKnown(LHSRange
.getBitWidth());
4124 computeKnownBitsFromAssume(
4125 Add
, AddKnown
, /*Depth=*/0, Query(DL
, AC
, CxtI
, DT
, true));
4126 if ((AddKnown
.isNonNegative() && LHSOrRHSKnownNonNegative
) ||
4127 (AddKnown
.isNegative() && LHSOrRHSKnownNegative
))
4128 return OverflowResult::NeverOverflows
;
4131 return OverflowResult::MayOverflow
;
4134 OverflowResult
llvm::computeOverflowForUnsignedSub(const Value
*LHS
,
4136 const DataLayout
&DL
,
4137 AssumptionCache
*AC
,
4138 const Instruction
*CxtI
,
4139 const DominatorTree
*DT
) {
4140 ConstantRange LHSRange
= computeConstantRangeIncludingKnownBits(
4141 LHS
, /*ForSigned=*/false, DL
, /*Depth=*/0, AC
, CxtI
, DT
);
4142 ConstantRange RHSRange
= computeConstantRangeIncludingKnownBits(
4143 RHS
, /*ForSigned=*/false, DL
, /*Depth=*/0, AC
, CxtI
, DT
);
4144 return mapOverflowResult(LHSRange
.unsignedSubMayOverflow(RHSRange
));
4147 OverflowResult
llvm::computeOverflowForSignedSub(const Value
*LHS
,
4149 const DataLayout
&DL
,
4150 AssumptionCache
*AC
,
4151 const Instruction
*CxtI
,
4152 const DominatorTree
*DT
) {
4153 // If LHS and RHS each have at least two sign bits, the subtraction
4155 if (ComputeNumSignBits(LHS
, DL
, 0, AC
, CxtI
, DT
) > 1 &&
4156 ComputeNumSignBits(RHS
, DL
, 0, AC
, CxtI
, DT
) > 1)
4157 return OverflowResult::NeverOverflows
;
4159 ConstantRange LHSRange
= computeConstantRangeIncludingKnownBits(
4160 LHS
, /*ForSigned=*/true, DL
, /*Depth=*/0, AC
, CxtI
, DT
);
4161 ConstantRange RHSRange
= computeConstantRangeIncludingKnownBits(
4162 RHS
, /*ForSigned=*/true, DL
, /*Depth=*/0, AC
, CxtI
, DT
);
4163 return mapOverflowResult(LHSRange
.signedSubMayOverflow(RHSRange
));
4166 bool llvm::isOverflowIntrinsicNoWrap(const WithOverflowInst
*WO
,
4167 const DominatorTree
&DT
) {
4168 SmallVector
<const BranchInst
*, 2> GuardingBranches
;
4169 SmallVector
<const ExtractValueInst
*, 2> Results
;
4171 for (const User
*U
: WO
->users()) {
4172 if (const auto *EVI
= dyn_cast
<ExtractValueInst
>(U
)) {
4173 assert(EVI
->getNumIndices() == 1 && "Obvious from CI's type");
4175 if (EVI
->getIndices()[0] == 0)
4176 Results
.push_back(EVI
);
4178 assert(EVI
->getIndices()[0] == 1 && "Obvious from CI's type");
4180 for (const auto *U
: EVI
->users())
4181 if (const auto *B
= dyn_cast
<BranchInst
>(U
)) {
4182 assert(B
->isConditional() && "How else is it using an i1?");
4183 GuardingBranches
.push_back(B
);
4187 // We are using the aggregate directly in a way we don't want to analyze
4188 // here (storing it to a global, say).
4193 auto AllUsesGuardedByBranch
= [&](const BranchInst
*BI
) {
4194 BasicBlockEdge
NoWrapEdge(BI
->getParent(), BI
->getSuccessor(1));
4195 if (!NoWrapEdge
.isSingleEdge())
4198 // Check if all users of the add are provably no-wrap.
4199 for (const auto *Result
: Results
) {
4200 // If the extractvalue itself is not executed on overflow, the we don't
4201 // need to check each use separately, since domination is transitive.
4202 if (DT
.dominates(NoWrapEdge
, Result
->getParent()))
4205 for (auto &RU
: Result
->uses())
4206 if (!DT
.dominates(NoWrapEdge
, RU
))
4213 return llvm::any_of(GuardingBranches
, AllUsesGuardedByBranch
);
4217 OverflowResult
llvm::computeOverflowForSignedAdd(const AddOperator
*Add
,
4218 const DataLayout
&DL
,
4219 AssumptionCache
*AC
,
4220 const Instruction
*CxtI
,
4221 const DominatorTree
*DT
) {
4222 return ::computeOverflowForSignedAdd(Add
->getOperand(0), Add
->getOperand(1),
4223 Add
, DL
, AC
, CxtI
, DT
);
4226 OverflowResult
llvm::computeOverflowForSignedAdd(const Value
*LHS
,
4228 const DataLayout
&DL
,
4229 AssumptionCache
*AC
,
4230 const Instruction
*CxtI
,
4231 const DominatorTree
*DT
) {
4232 return ::computeOverflowForSignedAdd(LHS
, RHS
, nullptr, DL
, AC
, CxtI
, DT
);
4235 bool llvm::isGuaranteedToTransferExecutionToSuccessor(const Instruction
*I
) {
4236 // Note: An atomic operation isn't guaranteed to return in a reasonable amount
4237 // of time because it's possible for another thread to interfere with it for an
4238 // arbitrary length of time, but programs aren't allowed to rely on that.
4240 // If there is no successor, then execution can't transfer to it.
4241 if (const auto *CRI
= dyn_cast
<CleanupReturnInst
>(I
))
4242 return !CRI
->unwindsToCaller();
4243 if (const auto *CatchSwitch
= dyn_cast
<CatchSwitchInst
>(I
))
4244 return !CatchSwitch
->unwindsToCaller();
4245 if (isa
<ResumeInst
>(I
))
4247 if (isa
<ReturnInst
>(I
))
4249 if (isa
<UnreachableInst
>(I
))
4252 // Calls can throw, or contain an infinite loop, or kill the process.
4253 if (auto CS
= ImmutableCallSite(I
)) {
4254 // Call sites that throw have implicit non-local control flow.
4255 if (!CS
.doesNotThrow())
4258 // A function which doens't throw and has "willreturn" attribute will
4260 if (CS
.hasFnAttr(Attribute::WillReturn
))
4263 // Non-throwing call sites can loop infinitely, call exit/pthread_exit
4264 // etc. and thus not return. However, LLVM already assumes that
4266 // - Thread exiting actions are modeled as writes to memory invisible to
4269 // - Loops that don't have side effects (side effects are volatile/atomic
4270 // stores and IO) always terminate (see http://llvm.org/PR965).
4271 // Furthermore IO itself is also modeled as writes to memory invisible to
4274 // We rely on those assumptions here, and use the memory effects of the call
4275 // target as a proxy for checking that it always returns.
4277 // FIXME: This isn't aggressive enough; a call which only writes to a global
4278 // is guaranteed to return.
4279 return CS
.onlyReadsMemory() || CS
.onlyAccessesArgMemory();
4282 // Other instructions return normally.
4286 bool llvm::isGuaranteedToTransferExecutionToSuccessor(const BasicBlock
*BB
) {
4287 // TODO: This is slightly conservative for invoke instruction since exiting
4288 // via an exception *is* normal control for them.
4289 for (auto I
= BB
->begin(), E
= BB
->end(); I
!= E
; ++I
)
4290 if (!isGuaranteedToTransferExecutionToSuccessor(&*I
))
4295 bool llvm::isGuaranteedToExecuteForEveryIteration(const Instruction
*I
,
4297 // The loop header is guaranteed to be executed for every iteration.
4299 // FIXME: Relax this constraint to cover all basic blocks that are
4300 // guaranteed to be executed at every iteration.
4301 if (I
->getParent() != L
->getHeader()) return false;
4303 for (const Instruction
&LI
: *L
->getHeader()) {
4304 if (&LI
== I
) return true;
4305 if (!isGuaranteedToTransferExecutionToSuccessor(&LI
)) return false;
4307 llvm_unreachable("Instruction not contained in its own parent basic block.");
4310 bool llvm::propagatesFullPoison(const Instruction
*I
) {
4311 // TODO: This should include all instructions apart from phis, selects and
4312 // call-like instructions.
4313 switch (I
->getOpcode()) {
4314 case Instruction::Add
:
4315 case Instruction::Sub
:
4316 case Instruction::Xor
:
4317 case Instruction::Trunc
:
4318 case Instruction::BitCast
:
4319 case Instruction::AddrSpaceCast
:
4320 case Instruction::Mul
:
4321 case Instruction::Shl
:
4322 case Instruction::GetElementPtr
:
4323 // These operations all propagate poison unconditionally. Note that poison
4324 // is not any particular value, so xor or subtraction of poison with
4325 // itself still yields poison, not zero.
4328 case Instruction::AShr
:
4329 case Instruction::SExt
:
4330 // For these operations, one bit of the input is replicated across
4331 // multiple output bits. A replicated poison bit is still poison.
4334 case Instruction::ICmp
:
4335 // Comparing poison with any value yields poison. This is why, for
4336 // instance, x s< (x +nsw 1) can be folded to true.
4344 const Value
*llvm::getGuaranteedNonFullPoisonOp(const Instruction
*I
) {
4345 switch (I
->getOpcode()) {
4346 case Instruction::Store
:
4347 return cast
<StoreInst
>(I
)->getPointerOperand();
4349 case Instruction::Load
:
4350 return cast
<LoadInst
>(I
)->getPointerOperand();
4352 case Instruction::AtomicCmpXchg
:
4353 return cast
<AtomicCmpXchgInst
>(I
)->getPointerOperand();
4355 case Instruction::AtomicRMW
:
4356 return cast
<AtomicRMWInst
>(I
)->getPointerOperand();
4358 case Instruction::UDiv
:
4359 case Instruction::SDiv
:
4360 case Instruction::URem
:
4361 case Instruction::SRem
:
4362 return I
->getOperand(1);
4365 // Note: It's really tempting to think that a conditional branch or
4366 // switch should be listed here, but that's incorrect. It's not
4367 // branching off of poison which is UB, it is executing a side effecting
4368 // instruction which follows the branch.
4373 bool llvm::mustTriggerUB(const Instruction
*I
,
4374 const SmallSet
<const Value
*, 16>& KnownPoison
) {
4375 auto *NotPoison
= getGuaranteedNonFullPoisonOp(I
);
4376 return (NotPoison
&& KnownPoison
.count(NotPoison
));
4380 bool llvm::programUndefinedIfFullPoison(const Instruction
*PoisonI
) {
4381 // We currently only look for uses of poison values within the same basic
4382 // block, as that makes it easier to guarantee that the uses will be
4383 // executed given that PoisonI is executed.
4385 // FIXME: Expand this to consider uses beyond the same basic block. To do
4386 // this, look out for the distinction between post-dominance and strong
4388 const BasicBlock
*BB
= PoisonI
->getParent();
4390 // Set of instructions that we have proved will yield poison if PoisonI
4392 SmallSet
<const Value
*, 16> YieldsPoison
;
4393 SmallSet
<const BasicBlock
*, 4> Visited
;
4394 YieldsPoison
.insert(PoisonI
);
4395 Visited
.insert(PoisonI
->getParent());
4397 BasicBlock::const_iterator Begin
= PoisonI
->getIterator(), End
= BB
->end();
4400 while (Iter
++ < MaxDepth
) {
4401 for (auto &I
: make_range(Begin
, End
)) {
4402 if (&I
!= PoisonI
) {
4403 if (mustTriggerUB(&I
, YieldsPoison
))
4405 if (!isGuaranteedToTransferExecutionToSuccessor(&I
))
4409 // Mark poison that propagates from I through uses of I.
4410 if (YieldsPoison
.count(&I
)) {
4411 for (const User
*User
: I
.users()) {
4412 const Instruction
*UserI
= cast
<Instruction
>(User
);
4413 if (propagatesFullPoison(UserI
))
4414 YieldsPoison
.insert(User
);
4419 if (auto *NextBB
= BB
->getSingleSuccessor()) {
4420 if (Visited
.insert(NextBB
).second
) {
4422 Begin
= BB
->getFirstNonPHI()->getIterator();
4433 static bool isKnownNonNaN(const Value
*V
, FastMathFlags FMF
) {
4437 if (auto *C
= dyn_cast
<ConstantFP
>(V
))
4440 if (auto *C
= dyn_cast
<ConstantDataVector
>(V
)) {
4441 if (!C
->getElementType()->isFloatingPointTy())
4443 for (unsigned I
= 0, E
= C
->getNumElements(); I
< E
; ++I
) {
4444 if (C
->getElementAsAPFloat(I
).isNaN())
4453 static bool isKnownNonZero(const Value
*V
) {
4454 if (auto *C
= dyn_cast
<ConstantFP
>(V
))
4455 return !C
->isZero();
4457 if (auto *C
= dyn_cast
<ConstantDataVector
>(V
)) {
4458 if (!C
->getElementType()->isFloatingPointTy())
4460 for (unsigned I
= 0, E
= C
->getNumElements(); I
< E
; ++I
) {
4461 if (C
->getElementAsAPFloat(I
).isZero())
4470 /// Match clamp pattern for float types without care about NaNs or signed zeros.
4471 /// Given non-min/max outer cmp/select from the clamp pattern this
4472 /// function recognizes if it can be substitued by a "canonical" min/max
4474 static SelectPatternResult
matchFastFloatClamp(CmpInst::Predicate Pred
,
4475 Value
*CmpLHS
, Value
*CmpRHS
,
4476 Value
*TrueVal
, Value
*FalseVal
,
4477 Value
*&LHS
, Value
*&RHS
) {
4479 // X < C1 ? C1 : Min(X, C2) --> Max(C1, Min(X, C2))
4480 // X > C1 ? C1 : Max(X, C2) --> Min(C1, Max(X, C2))
4481 // and return description of the outer Max/Min.
4483 // First, check if select has inverse order:
4484 if (CmpRHS
== FalseVal
) {
4485 std::swap(TrueVal
, FalseVal
);
4486 Pred
= CmpInst::getInversePredicate(Pred
);
4489 // Assume success now. If there's no match, callers should not use these anyway.
4494 if (CmpRHS
!= TrueVal
|| !match(CmpRHS
, m_APFloat(FC1
)) || !FC1
->isFinite())
4495 return {SPF_UNKNOWN
, SPNB_NA
, false};
4499 case CmpInst::FCMP_OLT
:
4500 case CmpInst::FCMP_OLE
:
4501 case CmpInst::FCMP_ULT
:
4502 case CmpInst::FCMP_ULE
:
4504 m_CombineOr(m_OrdFMin(m_Specific(CmpLHS
), m_APFloat(FC2
)),
4505 m_UnordFMin(m_Specific(CmpLHS
), m_APFloat(FC2
)))) &&
4506 FC1
->compare(*FC2
) == APFloat::cmpResult::cmpLessThan
)
4507 return {SPF_FMAXNUM
, SPNB_RETURNS_ANY
, false};
4509 case CmpInst::FCMP_OGT
:
4510 case CmpInst::FCMP_OGE
:
4511 case CmpInst::FCMP_UGT
:
4512 case CmpInst::FCMP_UGE
:
4514 m_CombineOr(m_OrdFMax(m_Specific(CmpLHS
), m_APFloat(FC2
)),
4515 m_UnordFMax(m_Specific(CmpLHS
), m_APFloat(FC2
)))) &&
4516 FC1
->compare(*FC2
) == APFloat::cmpResult::cmpGreaterThan
)
4517 return {SPF_FMINNUM
, SPNB_RETURNS_ANY
, false};
4523 return {SPF_UNKNOWN
, SPNB_NA
, false};
4526 /// Recognize variations of:
4527 /// CLAMP(v,l,h) ==> ((v) < (l) ? (l) : ((v) > (h) ? (h) : (v)))
4528 static SelectPatternResult
matchClamp(CmpInst::Predicate Pred
,
4529 Value
*CmpLHS
, Value
*CmpRHS
,
4530 Value
*TrueVal
, Value
*FalseVal
) {
4531 // Swap the select operands and predicate to match the patterns below.
4532 if (CmpRHS
!= TrueVal
) {
4533 Pred
= ICmpInst::getSwappedPredicate(Pred
);
4534 std::swap(TrueVal
, FalseVal
);
4537 if (CmpRHS
== TrueVal
&& match(CmpRHS
, m_APInt(C1
))) {
4539 // (X <s C1) ? C1 : SMIN(X, C2) ==> SMAX(SMIN(X, C2), C1)
4540 if (match(FalseVal
, m_SMin(m_Specific(CmpLHS
), m_APInt(C2
))) &&
4541 C1
->slt(*C2
) && Pred
== CmpInst::ICMP_SLT
)
4542 return {SPF_SMAX
, SPNB_NA
, false};
4544 // (X >s C1) ? C1 : SMAX(X, C2) ==> SMIN(SMAX(X, C2), C1)
4545 if (match(FalseVal
, m_SMax(m_Specific(CmpLHS
), m_APInt(C2
))) &&
4546 C1
->sgt(*C2
) && Pred
== CmpInst::ICMP_SGT
)
4547 return {SPF_SMIN
, SPNB_NA
, false};
4549 // (X <u C1) ? C1 : UMIN(X, C2) ==> UMAX(UMIN(X, C2), C1)
4550 if (match(FalseVal
, m_UMin(m_Specific(CmpLHS
), m_APInt(C2
))) &&
4551 C1
->ult(*C2
) && Pred
== CmpInst::ICMP_ULT
)
4552 return {SPF_UMAX
, SPNB_NA
, false};
4554 // (X >u C1) ? C1 : UMAX(X, C2) ==> UMIN(UMAX(X, C2), C1)
4555 if (match(FalseVal
, m_UMax(m_Specific(CmpLHS
), m_APInt(C2
))) &&
4556 C1
->ugt(*C2
) && Pred
== CmpInst::ICMP_UGT
)
4557 return {SPF_UMIN
, SPNB_NA
, false};
4559 return {SPF_UNKNOWN
, SPNB_NA
, false};
4562 /// Recognize variations of:
4563 /// a < c ? min(a,b) : min(b,c) ==> min(min(a,b),min(b,c))
4564 static SelectPatternResult
matchMinMaxOfMinMax(CmpInst::Predicate Pred
,
4565 Value
*CmpLHS
, Value
*CmpRHS
,
4566 Value
*TVal
, Value
*FVal
,
4568 // TODO: Allow FP min/max with nnan/nsz.
4569 assert(CmpInst::isIntPredicate(Pred
) && "Expected integer comparison");
4572 SelectPatternResult L
= matchSelectPattern(TVal
, A
, B
, nullptr, Depth
+ 1);
4573 if (!SelectPatternResult::isMinOrMax(L
.Flavor
))
4574 return {SPF_UNKNOWN
, SPNB_NA
, false};
4577 SelectPatternResult R
= matchSelectPattern(FVal
, C
, D
, nullptr, Depth
+ 1);
4578 if (L
.Flavor
!= R
.Flavor
)
4579 return {SPF_UNKNOWN
, SPNB_NA
, false};
4581 // We have something like: x Pred y ? min(a, b) : min(c, d).
4582 // Try to match the compare to the min/max operations of the select operands.
4583 // First, make sure we have the right compare predicate.
4586 if (Pred
== ICmpInst::ICMP_SGT
|| Pred
== ICmpInst::ICMP_SGE
) {
4587 Pred
= ICmpInst::getSwappedPredicate(Pred
);
4588 std::swap(CmpLHS
, CmpRHS
);
4590 if (Pred
== ICmpInst::ICMP_SLT
|| Pred
== ICmpInst::ICMP_SLE
)
4592 return {SPF_UNKNOWN
, SPNB_NA
, false};
4594 if (Pred
== ICmpInst::ICMP_SLT
|| Pred
== ICmpInst::ICMP_SLE
) {
4595 Pred
= ICmpInst::getSwappedPredicate(Pred
);
4596 std::swap(CmpLHS
, CmpRHS
);
4598 if (Pred
== ICmpInst::ICMP_SGT
|| Pred
== ICmpInst::ICMP_SGE
)
4600 return {SPF_UNKNOWN
, SPNB_NA
, false};
4602 if (Pred
== ICmpInst::ICMP_UGT
|| Pred
== ICmpInst::ICMP_UGE
) {
4603 Pred
= ICmpInst::getSwappedPredicate(Pred
);
4604 std::swap(CmpLHS
, CmpRHS
);
4606 if (Pred
== ICmpInst::ICMP_ULT
|| Pred
== ICmpInst::ICMP_ULE
)
4608 return {SPF_UNKNOWN
, SPNB_NA
, false};
4610 if (Pred
== ICmpInst::ICMP_ULT
|| Pred
== ICmpInst::ICMP_ULE
) {
4611 Pred
= ICmpInst::getSwappedPredicate(Pred
);
4612 std::swap(CmpLHS
, CmpRHS
);
4614 if (Pred
== ICmpInst::ICMP_UGT
|| Pred
== ICmpInst::ICMP_UGE
)
4616 return {SPF_UNKNOWN
, SPNB_NA
, false};
4618 return {SPF_UNKNOWN
, SPNB_NA
, false};
4621 // If there is a common operand in the already matched min/max and the other
4622 // min/max operands match the compare operands (either directly or inverted),
4623 // then this is min/max of the same flavor.
4625 // a pred c ? m(a, b) : m(c, b) --> m(m(a, b), m(c, b))
4626 // ~c pred ~a ? m(a, b) : m(c, b) --> m(m(a, b), m(c, b))
4628 if ((CmpLHS
== A
&& CmpRHS
== C
) || (match(C
, m_Not(m_Specific(CmpLHS
))) &&
4629 match(A
, m_Not(m_Specific(CmpRHS
)))))
4630 return {L
.Flavor
, SPNB_NA
, false};
4632 // a pred d ? m(a, b) : m(b, d) --> m(m(a, b), m(b, d))
4633 // ~d pred ~a ? m(a, b) : m(b, d) --> m(m(a, b), m(b, d))
4635 if ((CmpLHS
== A
&& CmpRHS
== D
) || (match(D
, m_Not(m_Specific(CmpLHS
))) &&
4636 match(A
, m_Not(m_Specific(CmpRHS
)))))
4637 return {L
.Flavor
, SPNB_NA
, false};
4639 // b pred c ? m(a, b) : m(c, a) --> m(m(a, b), m(c, a))
4640 // ~c pred ~b ? m(a, b) : m(c, a) --> m(m(a, b), m(c, a))
4642 if ((CmpLHS
== B
&& CmpRHS
== C
) || (match(C
, m_Not(m_Specific(CmpLHS
))) &&
4643 match(B
, m_Not(m_Specific(CmpRHS
)))))
4644 return {L
.Flavor
, SPNB_NA
, false};
4646 // b pred d ? m(a, b) : m(a, d) --> m(m(a, b), m(a, d))
4647 // ~d pred ~b ? m(a, b) : m(a, d) --> m(m(a, b), m(a, d))
4649 if ((CmpLHS
== B
&& CmpRHS
== D
) || (match(D
, m_Not(m_Specific(CmpLHS
))) &&
4650 match(B
, m_Not(m_Specific(CmpRHS
)))))
4651 return {L
.Flavor
, SPNB_NA
, false};
4654 return {SPF_UNKNOWN
, SPNB_NA
, false};
4657 /// Match non-obvious integer minimum and maximum sequences.
4658 static SelectPatternResult
matchMinMax(CmpInst::Predicate Pred
,
4659 Value
*CmpLHS
, Value
*CmpRHS
,
4660 Value
*TrueVal
, Value
*FalseVal
,
4661 Value
*&LHS
, Value
*&RHS
,
4663 // Assume success. If there's no match, callers should not use these anyway.
4667 SelectPatternResult SPR
= matchClamp(Pred
, CmpLHS
, CmpRHS
, TrueVal
, FalseVal
);
4668 if (SPR
.Flavor
!= SelectPatternFlavor::SPF_UNKNOWN
)
4671 SPR
= matchMinMaxOfMinMax(Pred
, CmpLHS
, CmpRHS
, TrueVal
, FalseVal
, Depth
);
4672 if (SPR
.Flavor
!= SelectPatternFlavor::SPF_UNKNOWN
)
4675 if (Pred
!= CmpInst::ICMP_SGT
&& Pred
!= CmpInst::ICMP_SLT
)
4676 return {SPF_UNKNOWN
, SPNB_NA
, false};
4679 // (X >s Y) ? 0 : Z ==> (Z >s 0) ? 0 : Z ==> SMIN(Z, 0)
4680 // (X <s Y) ? 0 : Z ==> (Z <s 0) ? 0 : Z ==> SMAX(Z, 0)
4681 if (match(TrueVal
, m_Zero()) &&
4682 match(FalseVal
, m_NSWSub(m_Specific(CmpLHS
), m_Specific(CmpRHS
))))
4683 return {Pred
== CmpInst::ICMP_SGT
? SPF_SMIN
: SPF_SMAX
, SPNB_NA
, false};
4686 // (X >s Y) ? Z : 0 ==> (Z >s 0) ? Z : 0 ==> SMAX(Z, 0)
4687 // (X <s Y) ? Z : 0 ==> (Z <s 0) ? Z : 0 ==> SMIN(Z, 0)
4688 if (match(FalseVal
, m_Zero()) &&
4689 match(TrueVal
, m_NSWSub(m_Specific(CmpLHS
), m_Specific(CmpRHS
))))
4690 return {Pred
== CmpInst::ICMP_SGT
? SPF_SMAX
: SPF_SMIN
, SPNB_NA
, false};
4693 if (!match(CmpRHS
, m_APInt(C1
)))
4694 return {SPF_UNKNOWN
, SPNB_NA
, false};
4696 // An unsigned min/max can be written with a signed compare.
4698 if ((CmpLHS
== TrueVal
&& match(FalseVal
, m_APInt(C2
))) ||
4699 (CmpLHS
== FalseVal
&& match(TrueVal
, m_APInt(C2
)))) {
4700 // Is the sign bit set?
4701 // (X <s 0) ? X : MAXVAL ==> (X >u MAXVAL) ? X : MAXVAL ==> UMAX
4702 // (X <s 0) ? MAXVAL : X ==> (X >u MAXVAL) ? MAXVAL : X ==> UMIN
4703 if (Pred
== CmpInst::ICMP_SLT
&& C1
->isNullValue() &&
4704 C2
->isMaxSignedValue())
4705 return {CmpLHS
== TrueVal
? SPF_UMAX
: SPF_UMIN
, SPNB_NA
, false};
4707 // Is the sign bit clear?
4708 // (X >s -1) ? MINVAL : X ==> (X <u MINVAL) ? MINVAL : X ==> UMAX
4709 // (X >s -1) ? X : MINVAL ==> (X <u MINVAL) ? X : MINVAL ==> UMIN
4710 if (Pred
== CmpInst::ICMP_SGT
&& C1
->isAllOnesValue() &&
4711 C2
->isMinSignedValue())
4712 return {CmpLHS
== FalseVal
? SPF_UMAX
: SPF_UMIN
, SPNB_NA
, false};
4715 // Look through 'not' ops to find disguised signed min/max.
4716 // (X >s C) ? ~X : ~C ==> (~X <s ~C) ? ~X : ~C ==> SMIN(~X, ~C)
4717 // (X <s C) ? ~X : ~C ==> (~X >s ~C) ? ~X : ~C ==> SMAX(~X, ~C)
4718 if (match(TrueVal
, m_Not(m_Specific(CmpLHS
))) &&
4719 match(FalseVal
, m_APInt(C2
)) && ~(*C1
) == *C2
)
4720 return {Pred
== CmpInst::ICMP_SGT
? SPF_SMIN
: SPF_SMAX
, SPNB_NA
, false};
4722 // (X >s C) ? ~C : ~X ==> (~X <s ~C) ? ~C : ~X ==> SMAX(~C, ~X)
4723 // (X <s C) ? ~C : ~X ==> (~X >s ~C) ? ~C : ~X ==> SMIN(~C, ~X)
4724 if (match(FalseVal
, m_Not(m_Specific(CmpLHS
))) &&
4725 match(TrueVal
, m_APInt(C2
)) && ~(*C1
) == *C2
)
4726 return {Pred
== CmpInst::ICMP_SGT
? SPF_SMAX
: SPF_SMIN
, SPNB_NA
, false};
4728 return {SPF_UNKNOWN
, SPNB_NA
, false};
4731 bool llvm::isKnownNegation(const Value
*X
, const Value
*Y
, bool NeedNSW
) {
4732 assert(X
&& Y
&& "Invalid operand");
4734 // X = sub (0, Y) || X = sub nsw (0, Y)
4735 if ((!NeedNSW
&& match(X
, m_Sub(m_ZeroInt(), m_Specific(Y
)))) ||
4736 (NeedNSW
&& match(X
, m_NSWSub(m_ZeroInt(), m_Specific(Y
)))))
4739 // Y = sub (0, X) || Y = sub nsw (0, X)
4740 if ((!NeedNSW
&& match(Y
, m_Sub(m_ZeroInt(), m_Specific(X
)))) ||
4741 (NeedNSW
&& match(Y
, m_NSWSub(m_ZeroInt(), m_Specific(X
)))))
4744 // X = sub (A, B), Y = sub (B, A) || X = sub nsw (A, B), Y = sub nsw (B, A)
4746 return (!NeedNSW
&& (match(X
, m_Sub(m_Value(A
), m_Value(B
))) &&
4747 match(Y
, m_Sub(m_Specific(B
), m_Specific(A
))))) ||
4748 (NeedNSW
&& (match(X
, m_NSWSub(m_Value(A
), m_Value(B
))) &&
4749 match(Y
, m_NSWSub(m_Specific(B
), m_Specific(A
)))));
4752 static SelectPatternResult
matchSelectPattern(CmpInst::Predicate Pred
,
4754 Value
*CmpLHS
, Value
*CmpRHS
,
4755 Value
*TrueVal
, Value
*FalseVal
,
4756 Value
*&LHS
, Value
*&RHS
,
4758 if (CmpInst::isFPPredicate(Pred
)) {
4759 // IEEE-754 ignores the sign of 0.0 in comparisons. So if the select has one
4760 // 0.0 operand, set the compare's 0.0 operands to that same value for the
4761 // purpose of identifying min/max. Disregard vector constants with undefined
4762 // elements because those can not be back-propagated for analysis.
4763 Value
*OutputZeroVal
= nullptr;
4764 if (match(TrueVal
, m_AnyZeroFP()) && !match(FalseVal
, m_AnyZeroFP()) &&
4765 !cast
<Constant
>(TrueVal
)->containsUndefElement())
4766 OutputZeroVal
= TrueVal
;
4767 else if (match(FalseVal
, m_AnyZeroFP()) && !match(TrueVal
, m_AnyZeroFP()) &&
4768 !cast
<Constant
>(FalseVal
)->containsUndefElement())
4769 OutputZeroVal
= FalseVal
;
4771 if (OutputZeroVal
) {
4772 if (match(CmpLHS
, m_AnyZeroFP()))
4773 CmpLHS
= OutputZeroVal
;
4774 if (match(CmpRHS
, m_AnyZeroFP()))
4775 CmpRHS
= OutputZeroVal
;
4782 // Signed zero may return inconsistent results between implementations.
4783 // (0.0 <= -0.0) ? 0.0 : -0.0 // Returns 0.0
4784 // minNum(0.0, -0.0) // May return -0.0 or 0.0 (IEEE 754-2008 5.3.1)
4785 // Therefore, we behave conservatively and only proceed if at least one of the
4786 // operands is known to not be zero or if we don't care about signed zero.
4789 // FIXME: Include OGT/OLT/UGT/ULT.
4790 case CmpInst::FCMP_OGE
: case CmpInst::FCMP_OLE
:
4791 case CmpInst::FCMP_UGE
: case CmpInst::FCMP_ULE
:
4792 if (!FMF
.noSignedZeros() && !isKnownNonZero(CmpLHS
) &&
4793 !isKnownNonZero(CmpRHS
))
4794 return {SPF_UNKNOWN
, SPNB_NA
, false};
4797 SelectPatternNaNBehavior NaNBehavior
= SPNB_NA
;
4798 bool Ordered
= false;
4800 // When given one NaN and one non-NaN input:
4801 // - maxnum/minnum (C99 fmaxf()/fminf()) return the non-NaN input.
4802 // - A simple C99 (a < b ? a : b) construction will return 'b' (as the
4803 // ordered comparison fails), which could be NaN or non-NaN.
4804 // so here we discover exactly what NaN behavior is required/accepted.
4805 if (CmpInst::isFPPredicate(Pred
)) {
4806 bool LHSSafe
= isKnownNonNaN(CmpLHS
, FMF
);
4807 bool RHSSafe
= isKnownNonNaN(CmpRHS
, FMF
);
4809 if (LHSSafe
&& RHSSafe
) {
4810 // Both operands are known non-NaN.
4811 NaNBehavior
= SPNB_RETURNS_ANY
;
4812 } else if (CmpInst::isOrdered(Pred
)) {
4813 // An ordered comparison will return false when given a NaN, so it
4817 // LHS is non-NaN, so if RHS is NaN then NaN will be returned.
4818 NaNBehavior
= SPNB_RETURNS_NAN
;
4820 NaNBehavior
= SPNB_RETURNS_OTHER
;
4822 // Completely unsafe.
4823 return {SPF_UNKNOWN
, SPNB_NA
, false};
4826 // An unordered comparison will return true when given a NaN, so it
4829 // LHS is non-NaN, so if RHS is NaN then non-NaN will be returned.
4830 NaNBehavior
= SPNB_RETURNS_OTHER
;
4832 NaNBehavior
= SPNB_RETURNS_NAN
;
4834 // Completely unsafe.
4835 return {SPF_UNKNOWN
, SPNB_NA
, false};
4839 if (TrueVal
== CmpRHS
&& FalseVal
== CmpLHS
) {
4840 std::swap(CmpLHS
, CmpRHS
);
4841 Pred
= CmpInst::getSwappedPredicate(Pred
);
4842 if (NaNBehavior
== SPNB_RETURNS_NAN
)
4843 NaNBehavior
= SPNB_RETURNS_OTHER
;
4844 else if (NaNBehavior
== SPNB_RETURNS_OTHER
)
4845 NaNBehavior
= SPNB_RETURNS_NAN
;
4849 // ([if]cmp X, Y) ? X : Y
4850 if (TrueVal
== CmpLHS
&& FalseVal
== CmpRHS
) {
4852 default: return {SPF_UNKNOWN
, SPNB_NA
, false}; // Equality.
4853 case ICmpInst::ICMP_UGT
:
4854 case ICmpInst::ICMP_UGE
: return {SPF_UMAX
, SPNB_NA
, false};
4855 case ICmpInst::ICMP_SGT
:
4856 case ICmpInst::ICMP_SGE
: return {SPF_SMAX
, SPNB_NA
, false};
4857 case ICmpInst::ICMP_ULT
:
4858 case ICmpInst::ICMP_ULE
: return {SPF_UMIN
, SPNB_NA
, false};
4859 case ICmpInst::ICMP_SLT
:
4860 case ICmpInst::ICMP_SLE
: return {SPF_SMIN
, SPNB_NA
, false};
4861 case FCmpInst::FCMP_UGT
:
4862 case FCmpInst::FCMP_UGE
:
4863 case FCmpInst::FCMP_OGT
:
4864 case FCmpInst::FCMP_OGE
: return {SPF_FMAXNUM
, NaNBehavior
, Ordered
};
4865 case FCmpInst::FCMP_ULT
:
4866 case FCmpInst::FCMP_ULE
:
4867 case FCmpInst::FCMP_OLT
:
4868 case FCmpInst::FCMP_OLE
: return {SPF_FMINNUM
, NaNBehavior
, Ordered
};
4872 if (isKnownNegation(TrueVal
, FalseVal
)) {
4873 // Sign-extending LHS does not change its sign, so TrueVal/FalseVal can
4874 // match against either LHS or sext(LHS).
4875 auto MaybeSExtCmpLHS
=
4876 m_CombineOr(m_Specific(CmpLHS
), m_SExt(m_Specific(CmpLHS
)));
4877 auto ZeroOrAllOnes
= m_CombineOr(m_ZeroInt(), m_AllOnes());
4878 auto ZeroOrOne
= m_CombineOr(m_ZeroInt(), m_One());
4879 if (match(TrueVal
, MaybeSExtCmpLHS
)) {
4880 // Set the return values. If the compare uses the negated value (-X >s 0),
4881 // swap the return values because the negated value is always 'RHS'.
4884 if (match(CmpLHS
, m_Neg(m_Specific(FalseVal
))))
4885 std::swap(LHS
, RHS
);
4887 // (X >s 0) ? X : -X or (X >s -1) ? X : -X --> ABS(X)
4888 // (-X >s 0) ? -X : X or (-X >s -1) ? -X : X --> ABS(X)
4889 if (Pred
== ICmpInst::ICMP_SGT
&& match(CmpRHS
, ZeroOrAllOnes
))
4890 return {SPF_ABS
, SPNB_NA
, false};
4892 // (X >=s 0) ? X : -X or (X >=s 1) ? X : -X --> ABS(X)
4893 if (Pred
== ICmpInst::ICMP_SGE
&& match(CmpRHS
, ZeroOrOne
))
4894 return {SPF_ABS
, SPNB_NA
, false};
4896 // (X <s 0) ? X : -X or (X <s 1) ? X : -X --> NABS(X)
4897 // (-X <s 0) ? -X : X or (-X <s 1) ? -X : X --> NABS(X)
4898 if (Pred
== ICmpInst::ICMP_SLT
&& match(CmpRHS
, ZeroOrOne
))
4899 return {SPF_NABS
, SPNB_NA
, false};
4901 else if (match(FalseVal
, MaybeSExtCmpLHS
)) {
4902 // Set the return values. If the compare uses the negated value (-X >s 0),
4903 // swap the return values because the negated value is always 'RHS'.
4906 if (match(CmpLHS
, m_Neg(m_Specific(TrueVal
))))
4907 std::swap(LHS
, RHS
);
4909 // (X >s 0) ? -X : X or (X >s -1) ? -X : X --> NABS(X)
4910 // (-X >s 0) ? X : -X or (-X >s -1) ? X : -X --> NABS(X)
4911 if (Pred
== ICmpInst::ICMP_SGT
&& match(CmpRHS
, ZeroOrAllOnes
))
4912 return {SPF_NABS
, SPNB_NA
, false};
4914 // (X <s 0) ? -X : X or (X <s 1) ? -X : X --> ABS(X)
4915 // (-X <s 0) ? X : -X or (-X <s 1) ? X : -X --> ABS(X)
4916 if (Pred
== ICmpInst::ICMP_SLT
&& match(CmpRHS
, ZeroOrOne
))
4917 return {SPF_ABS
, SPNB_NA
, false};
4921 if (CmpInst::isIntPredicate(Pred
))
4922 return matchMinMax(Pred
, CmpLHS
, CmpRHS
, TrueVal
, FalseVal
, LHS
, RHS
, Depth
);
4924 // According to (IEEE 754-2008 5.3.1), minNum(0.0, -0.0) and similar
4925 // may return either -0.0 or 0.0, so fcmp/select pair has stricter
4926 // semantics than minNum. Be conservative in such case.
4927 if (NaNBehavior
!= SPNB_RETURNS_ANY
||
4928 (!FMF
.noSignedZeros() && !isKnownNonZero(CmpLHS
) &&
4929 !isKnownNonZero(CmpRHS
)))
4930 return {SPF_UNKNOWN
, SPNB_NA
, false};
4932 return matchFastFloatClamp(Pred
, CmpLHS
, CmpRHS
, TrueVal
, FalseVal
, LHS
, RHS
);
4935 /// Helps to match a select pattern in case of a type mismatch.
4937 /// The function processes the case when type of true and false values of a
4938 /// select instruction differs from type of the cmp instruction operands because
4939 /// of a cast instruction. The function checks if it is legal to move the cast
4940 /// operation after "select". If yes, it returns the new second value of
4941 /// "select" (with the assumption that cast is moved):
4942 /// 1. As operand of cast instruction when both values of "select" are same cast
4944 /// 2. As restored constant (by applying reverse cast operation) when the first
4945 /// value of the "select" is a cast operation and the second value is a
4947 /// NOTE: We return only the new second value because the first value could be
4948 /// accessed as operand of cast instruction.
4949 static Value
*lookThroughCast(CmpInst
*CmpI
, Value
*V1
, Value
*V2
,
4950 Instruction::CastOps
*CastOp
) {
4951 auto *Cast1
= dyn_cast
<CastInst
>(V1
);
4955 *CastOp
= Cast1
->getOpcode();
4956 Type
*SrcTy
= Cast1
->getSrcTy();
4957 if (auto *Cast2
= dyn_cast
<CastInst
>(V2
)) {
4958 // If V1 and V2 are both the same cast from the same type, look through V1.
4959 if (*CastOp
== Cast2
->getOpcode() && SrcTy
== Cast2
->getSrcTy())
4960 return Cast2
->getOperand(0);
4964 auto *C
= dyn_cast
<Constant
>(V2
);
4968 Constant
*CastedTo
= nullptr;
4970 case Instruction::ZExt
:
4971 if (CmpI
->isUnsigned())
4972 CastedTo
= ConstantExpr::getTrunc(C
, SrcTy
);
4974 case Instruction::SExt
:
4975 if (CmpI
->isSigned())
4976 CastedTo
= ConstantExpr::getTrunc(C
, SrcTy
, true);
4978 case Instruction::Trunc
:
4980 if (match(CmpI
->getOperand(1), m_Constant(CmpConst
)) &&
4981 CmpConst
->getType() == SrcTy
) {
4982 // Here we have the following case:
4984 // %cond = cmp iN %x, CmpConst
4985 // %tr = trunc iN %x to iK
4986 // %narrowsel = select i1 %cond, iK %t, iK C
4988 // We can always move trunc after select operation:
4990 // %cond = cmp iN %x, CmpConst
4991 // %widesel = select i1 %cond, iN %x, iN CmpConst
4992 // %tr = trunc iN %widesel to iK
4994 // Note that C could be extended in any way because we don't care about
4995 // upper bits after truncation. It can't be abs pattern, because it would
4998 // select i1 %cond, x, -x.
5000 // So only min/max pattern could be matched. Such match requires widened C
5001 // == CmpConst. That is why set widened C = CmpConst, condition trunc
5002 // CmpConst == C is checked below.
5003 CastedTo
= CmpConst
;
5005 CastedTo
= ConstantExpr::getIntegerCast(C
, SrcTy
, CmpI
->isSigned());
5008 case Instruction::FPTrunc
:
5009 CastedTo
= ConstantExpr::getFPExtend(C
, SrcTy
, true);
5011 case Instruction::FPExt
:
5012 CastedTo
= ConstantExpr::getFPTrunc(C
, SrcTy
, true);
5014 case Instruction::FPToUI
:
5015 CastedTo
= ConstantExpr::getUIToFP(C
, SrcTy
, true);
5017 case Instruction::FPToSI
:
5018 CastedTo
= ConstantExpr::getSIToFP(C
, SrcTy
, true);
5020 case Instruction::UIToFP
:
5021 CastedTo
= ConstantExpr::getFPToUI(C
, SrcTy
, true);
5023 case Instruction::SIToFP
:
5024 CastedTo
= ConstantExpr::getFPToSI(C
, SrcTy
, true);
5033 // Make sure the cast doesn't lose any information.
5034 Constant
*CastedBack
=
5035 ConstantExpr::getCast(*CastOp
, CastedTo
, C
->getType(), true);
5036 if (CastedBack
!= C
)
5042 SelectPatternResult
llvm::matchSelectPattern(Value
*V
, Value
*&LHS
, Value
*&RHS
,
5043 Instruction::CastOps
*CastOp
,
5045 if (Depth
>= MaxDepth
)
5046 return {SPF_UNKNOWN
, SPNB_NA
, false};
5048 SelectInst
*SI
= dyn_cast
<SelectInst
>(V
);
5049 if (!SI
) return {SPF_UNKNOWN
, SPNB_NA
, false};
5051 CmpInst
*CmpI
= dyn_cast
<CmpInst
>(SI
->getCondition());
5052 if (!CmpI
) return {SPF_UNKNOWN
, SPNB_NA
, false};
5054 Value
*TrueVal
= SI
->getTrueValue();
5055 Value
*FalseVal
= SI
->getFalseValue();
5057 return llvm::matchDecomposedSelectPattern(CmpI
, TrueVal
, FalseVal
, LHS
, RHS
,
5061 SelectPatternResult
llvm::matchDecomposedSelectPattern(
5062 CmpInst
*CmpI
, Value
*TrueVal
, Value
*FalseVal
, Value
*&LHS
, Value
*&RHS
,
5063 Instruction::CastOps
*CastOp
, unsigned Depth
) {
5064 CmpInst::Predicate Pred
= CmpI
->getPredicate();
5065 Value
*CmpLHS
= CmpI
->getOperand(0);
5066 Value
*CmpRHS
= CmpI
->getOperand(1);
5068 if (isa
<FPMathOperator
>(CmpI
))
5069 FMF
= CmpI
->getFastMathFlags();
5072 if (CmpI
->isEquality())
5073 return {SPF_UNKNOWN
, SPNB_NA
, false};
5075 // Deal with type mismatches.
5076 if (CastOp
&& CmpLHS
->getType() != TrueVal
->getType()) {
5077 if (Value
*C
= lookThroughCast(CmpI
, TrueVal
, FalseVal
, CastOp
)) {
5078 // If this is a potential fmin/fmax with a cast to integer, then ignore
5079 // -0.0 because there is no corresponding integer value.
5080 if (*CastOp
== Instruction::FPToSI
|| *CastOp
== Instruction::FPToUI
)
5081 FMF
.setNoSignedZeros();
5082 return ::matchSelectPattern(Pred
, FMF
, CmpLHS
, CmpRHS
,
5083 cast
<CastInst
>(TrueVal
)->getOperand(0), C
,
5086 if (Value
*C
= lookThroughCast(CmpI
, FalseVal
, TrueVal
, CastOp
)) {
5087 // If this is a potential fmin/fmax with a cast to integer, then ignore
5088 // -0.0 because there is no corresponding integer value.
5089 if (*CastOp
== Instruction::FPToSI
|| *CastOp
== Instruction::FPToUI
)
5090 FMF
.setNoSignedZeros();
5091 return ::matchSelectPattern(Pred
, FMF
, CmpLHS
, CmpRHS
,
5092 C
, cast
<CastInst
>(FalseVal
)->getOperand(0),
5096 return ::matchSelectPattern(Pred
, FMF
, CmpLHS
, CmpRHS
, TrueVal
, FalseVal
,
5100 CmpInst::Predicate
llvm::getMinMaxPred(SelectPatternFlavor SPF
, bool Ordered
) {
5101 if (SPF
== SPF_SMIN
) return ICmpInst::ICMP_SLT
;
5102 if (SPF
== SPF_UMIN
) return ICmpInst::ICMP_ULT
;
5103 if (SPF
== SPF_SMAX
) return ICmpInst::ICMP_SGT
;
5104 if (SPF
== SPF_UMAX
) return ICmpInst::ICMP_UGT
;
5105 if (SPF
== SPF_FMINNUM
)
5106 return Ordered
? FCmpInst::FCMP_OLT
: FCmpInst::FCMP_ULT
;
5107 if (SPF
== SPF_FMAXNUM
)
5108 return Ordered
? FCmpInst::FCMP_OGT
: FCmpInst::FCMP_UGT
;
5109 llvm_unreachable("unhandled!");
5112 SelectPatternFlavor
llvm::getInverseMinMaxFlavor(SelectPatternFlavor SPF
) {
5113 if (SPF
== SPF_SMIN
) return SPF_SMAX
;
5114 if (SPF
== SPF_UMIN
) return SPF_UMAX
;
5115 if (SPF
== SPF_SMAX
) return SPF_SMIN
;
5116 if (SPF
== SPF_UMAX
) return SPF_UMIN
;
5117 llvm_unreachable("unhandled!");
5120 CmpInst::Predicate
llvm::getInverseMinMaxPred(SelectPatternFlavor SPF
) {
5121 return getMinMaxPred(getInverseMinMaxFlavor(SPF
));
5124 /// Return true if "icmp Pred LHS RHS" is always true.
5125 static bool isTruePredicate(CmpInst::Predicate Pred
, const Value
*LHS
,
5126 const Value
*RHS
, const DataLayout
&DL
,
5128 assert(!LHS
->getType()->isVectorTy() && "TODO: extend to handle vectors!");
5129 if (ICmpInst::isTrueWhenEqual(Pred
) && LHS
== RHS
)
5136 case CmpInst::ICMP_SLE
: {
5139 // LHS s<= LHS +_{nsw} C if C >= 0
5140 if (match(RHS
, m_NSWAdd(m_Specific(LHS
), m_APInt(C
))))
5141 return !C
->isNegative();
5145 case CmpInst::ICMP_ULE
: {
5148 // LHS u<= LHS +_{nuw} C for any C
5149 if (match(RHS
, m_NUWAdd(m_Specific(LHS
), m_APInt(C
))))
5152 // Match A to (X +_{nuw} CA) and B to (X +_{nuw} CB)
5153 auto MatchNUWAddsToSameValue
= [&](const Value
*A
, const Value
*B
,
5155 const APInt
*&CA
, const APInt
*&CB
) {
5156 if (match(A
, m_NUWAdd(m_Value(X
), m_APInt(CA
))) &&
5157 match(B
, m_NUWAdd(m_Specific(X
), m_APInt(CB
))))
5160 // If X & C == 0 then (X | C) == X +_{nuw} C
5161 if (match(A
, m_Or(m_Value(X
), m_APInt(CA
))) &&
5162 match(B
, m_Or(m_Specific(X
), m_APInt(CB
)))) {
5163 KnownBits
Known(CA
->getBitWidth());
5164 computeKnownBits(X
, Known
, DL
, Depth
+ 1, /*AC*/ nullptr,
5165 /*CxtI*/ nullptr, /*DT*/ nullptr);
5166 if (CA
->isSubsetOf(Known
.Zero
) && CB
->isSubsetOf(Known
.Zero
))
5174 const APInt
*CLHS
, *CRHS
;
5175 if (MatchNUWAddsToSameValue(LHS
, RHS
, X
, CLHS
, CRHS
))
5176 return CLHS
->ule(*CRHS
);
5183 /// Return true if "icmp Pred BLHS BRHS" is true whenever "icmp Pred
5184 /// ALHS ARHS" is true. Otherwise, return None.
5185 static Optional
<bool>
5186 isImpliedCondOperands(CmpInst::Predicate Pred
, const Value
*ALHS
,
5187 const Value
*ARHS
, const Value
*BLHS
, const Value
*BRHS
,
5188 const DataLayout
&DL
, unsigned Depth
) {
5193 case CmpInst::ICMP_SLT
:
5194 case CmpInst::ICMP_SLE
:
5195 if (isTruePredicate(CmpInst::ICMP_SLE
, BLHS
, ALHS
, DL
, Depth
) &&
5196 isTruePredicate(CmpInst::ICMP_SLE
, ARHS
, BRHS
, DL
, Depth
))
5200 case CmpInst::ICMP_ULT
:
5201 case CmpInst::ICMP_ULE
:
5202 if (isTruePredicate(CmpInst::ICMP_ULE
, BLHS
, ALHS
, DL
, Depth
) &&
5203 isTruePredicate(CmpInst::ICMP_ULE
, ARHS
, BRHS
, DL
, Depth
))
5209 /// Return true if the operands of the two compares match. IsSwappedOps is true
5210 /// when the operands match, but are swapped.
5211 static bool isMatchingOps(const Value
*ALHS
, const Value
*ARHS
,
5212 const Value
*BLHS
, const Value
*BRHS
,
5213 bool &IsSwappedOps
) {
5215 bool IsMatchingOps
= (ALHS
== BLHS
&& ARHS
== BRHS
);
5216 IsSwappedOps
= (ALHS
== BRHS
&& ARHS
== BLHS
);
5217 return IsMatchingOps
|| IsSwappedOps
;
5220 /// Return true if "icmp1 APred X, Y" implies "icmp2 BPred X, Y" is true.
5221 /// Return false if "icmp1 APred X, Y" implies "icmp2 BPred X, Y" is false.
5222 /// Otherwise, return None if we can't infer anything.
5223 static Optional
<bool> isImpliedCondMatchingOperands(CmpInst::Predicate APred
,
5224 CmpInst::Predicate BPred
,
5225 bool AreSwappedOps
) {
5226 // Canonicalize the predicate as if the operands were not commuted.
5228 BPred
= ICmpInst::getSwappedPredicate(BPred
);
5230 if (CmpInst::isImpliedTrueByMatchingCmp(APred
, BPred
))
5232 if (CmpInst::isImpliedFalseByMatchingCmp(APred
, BPred
))
5238 /// Return true if "icmp APred X, C1" implies "icmp BPred X, C2" is true.
5239 /// Return false if "icmp APred X, C1" implies "icmp BPred X, C2" is false.
5240 /// Otherwise, return None if we can't infer anything.
5241 static Optional
<bool>
5242 isImpliedCondMatchingImmOperands(CmpInst::Predicate APred
,
5243 const ConstantInt
*C1
,
5244 CmpInst::Predicate BPred
,
5245 const ConstantInt
*C2
) {
5246 ConstantRange DomCR
=
5247 ConstantRange::makeExactICmpRegion(APred
, C1
->getValue());
5249 ConstantRange::makeAllowedICmpRegion(BPred
, C2
->getValue());
5250 ConstantRange Intersection
= DomCR
.intersectWith(CR
);
5251 ConstantRange Difference
= DomCR
.difference(CR
);
5252 if (Intersection
.isEmptySet())
5254 if (Difference
.isEmptySet())
5259 /// Return true if LHS implies RHS is true. Return false if LHS implies RHS is
5260 /// false. Otherwise, return None if we can't infer anything.
5261 static Optional
<bool> isImpliedCondICmps(const ICmpInst
*LHS
,
5262 const ICmpInst
*RHS
,
5263 const DataLayout
&DL
, bool LHSIsTrue
,
5265 Value
*ALHS
= LHS
->getOperand(0);
5266 Value
*ARHS
= LHS
->getOperand(1);
5267 // The rest of the logic assumes the LHS condition is true. If that's not the
5268 // case, invert the predicate to make it so.
5269 ICmpInst::Predicate APred
=
5270 LHSIsTrue
? LHS
->getPredicate() : LHS
->getInversePredicate();
5272 Value
*BLHS
= RHS
->getOperand(0);
5273 Value
*BRHS
= RHS
->getOperand(1);
5274 ICmpInst::Predicate BPred
= RHS
->getPredicate();
5276 // Can we infer anything when the two compares have matching operands?
5278 if (isMatchingOps(ALHS
, ARHS
, BLHS
, BRHS
, AreSwappedOps
)) {
5279 if (Optional
<bool> Implication
= isImpliedCondMatchingOperands(
5280 APred
, BPred
, AreSwappedOps
))
5282 // No amount of additional analysis will infer the second condition, so
5287 // Can we infer anything when the LHS operands match and the RHS operands are
5288 // constants (not necessarily matching)?
5289 if (ALHS
== BLHS
&& isa
<ConstantInt
>(ARHS
) && isa
<ConstantInt
>(BRHS
)) {
5290 if (Optional
<bool> Implication
= isImpliedCondMatchingImmOperands(
5291 APred
, cast
<ConstantInt
>(ARHS
), BPred
, cast
<ConstantInt
>(BRHS
)))
5293 // No amount of additional analysis will infer the second condition, so
5299 return isImpliedCondOperands(APred
, ALHS
, ARHS
, BLHS
, BRHS
, DL
, Depth
);
5303 /// Return true if LHS implies RHS is true. Return false if LHS implies RHS is
5304 /// false. Otherwise, return None if we can't infer anything. We expect the
5305 /// RHS to be an icmp and the LHS to be an 'and' or an 'or' instruction.
5306 static Optional
<bool> isImpliedCondAndOr(const BinaryOperator
*LHS
,
5307 const ICmpInst
*RHS
,
5308 const DataLayout
&DL
, bool LHSIsTrue
,
5310 // The LHS must be an 'or' or an 'and' instruction.
5311 assert((LHS
->getOpcode() == Instruction::And
||
5312 LHS
->getOpcode() == Instruction::Or
) &&
5313 "Expected LHS to be 'and' or 'or'.");
5315 assert(Depth
<= MaxDepth
&& "Hit recursion limit");
5317 // If the result of an 'or' is false, then we know both legs of the 'or' are
5318 // false. Similarly, if the result of an 'and' is true, then we know both
5319 // legs of the 'and' are true.
5321 if ((!LHSIsTrue
&& match(LHS
, m_Or(m_Value(ALHS
), m_Value(ARHS
)))) ||
5322 (LHSIsTrue
&& match(LHS
, m_And(m_Value(ALHS
), m_Value(ARHS
))))) {
5323 // FIXME: Make this non-recursion.
5324 if (Optional
<bool> Implication
=
5325 isImpliedCondition(ALHS
, RHS
, DL
, LHSIsTrue
, Depth
+ 1))
5327 if (Optional
<bool> Implication
=
5328 isImpliedCondition(ARHS
, RHS
, DL
, LHSIsTrue
, Depth
+ 1))
5335 Optional
<bool> llvm::isImpliedCondition(const Value
*LHS
, const Value
*RHS
,
5336 const DataLayout
&DL
, bool LHSIsTrue
,
5338 // Bail out when we hit the limit.
5339 if (Depth
== MaxDepth
)
5342 // A mismatch occurs when we compare a scalar cmp to a vector cmp, for
5344 if (LHS
->getType() != RHS
->getType())
5347 Type
*OpTy
= LHS
->getType();
5348 assert(OpTy
->isIntOrIntVectorTy(1) && "Expected integer type only!");
5350 // LHS ==> RHS by definition
5354 // FIXME: Extending the code below to handle vectors.
5355 if (OpTy
->isVectorTy())
5358 assert(OpTy
->isIntegerTy(1) && "implied by above");
5360 // Both LHS and RHS are icmps.
5361 const ICmpInst
*LHSCmp
= dyn_cast
<ICmpInst
>(LHS
);
5362 const ICmpInst
*RHSCmp
= dyn_cast
<ICmpInst
>(RHS
);
5363 if (LHSCmp
&& RHSCmp
)
5364 return isImpliedCondICmps(LHSCmp
, RHSCmp
, DL
, LHSIsTrue
, Depth
);
5366 // The LHS should be an 'or' or an 'and' instruction. We expect the RHS to be
5367 // an icmp. FIXME: Add support for and/or on the RHS.
5368 const BinaryOperator
*LHSBO
= dyn_cast
<BinaryOperator
>(LHS
);
5369 if (LHSBO
&& RHSCmp
) {
5370 if ((LHSBO
->getOpcode() == Instruction::And
||
5371 LHSBO
->getOpcode() == Instruction::Or
))
5372 return isImpliedCondAndOr(LHSBO
, RHSCmp
, DL
, LHSIsTrue
, Depth
);
5377 Optional
<bool> llvm::isImpliedByDomCondition(const Value
*Cond
,
5378 const Instruction
*ContextI
,
5379 const DataLayout
&DL
) {
5380 assert(Cond
->getType()->isIntOrIntVectorTy(1) && "Condition must be bool");
5381 if (!ContextI
|| !ContextI
->getParent())
5384 // TODO: This is a poor/cheap way to determine dominance. Should we use a
5385 // dominator tree (eg, from a SimplifyQuery) instead?
5386 const BasicBlock
*ContextBB
= ContextI
->getParent();
5387 const BasicBlock
*PredBB
= ContextBB
->getSinglePredecessor();
5391 // We need a conditional branch in the predecessor.
5393 BasicBlock
*TrueBB
, *FalseBB
;
5394 if (!match(PredBB
->getTerminator(), m_Br(m_Value(PredCond
), TrueBB
, FalseBB
)))
5397 // The branch should get simplified. Don't bother simplifying this condition.
5398 if (TrueBB
== FalseBB
)
5401 assert((TrueBB
== ContextBB
|| FalseBB
== ContextBB
) &&
5402 "Predecessor block does not point to successor?");
5404 // Is this condition implied by the predecessor condition?
5405 bool CondIsTrue
= TrueBB
== ContextBB
;
5406 return isImpliedCondition(PredCond
, Cond
, DL
, CondIsTrue
);
5409 static void setLimitsForBinOp(const BinaryOperator
&BO
, APInt
&Lower
,
5410 APInt
&Upper
, const InstrInfoQuery
&IIQ
) {
5411 unsigned Width
= Lower
.getBitWidth();
5413 switch (BO
.getOpcode()) {
5414 case Instruction::Add
:
5415 if (match(BO
.getOperand(1), m_APInt(C
)) && !C
->isNullValue()) {
5416 // FIXME: If we have both nuw and nsw, we should reduce the range further.
5417 if (IIQ
.hasNoUnsignedWrap(cast
<OverflowingBinaryOperator
>(&BO
))) {
5418 // 'add nuw x, C' produces [C, UINT_MAX].
5420 } else if (IIQ
.hasNoSignedWrap(cast
<OverflowingBinaryOperator
>(&BO
))) {
5421 if (C
->isNegative()) {
5422 // 'add nsw x, -C' produces [SINT_MIN, SINT_MAX - C].
5423 Lower
= APInt::getSignedMinValue(Width
);
5424 Upper
= APInt::getSignedMaxValue(Width
) + *C
+ 1;
5426 // 'add nsw x, +C' produces [SINT_MIN + C, SINT_MAX].
5427 Lower
= APInt::getSignedMinValue(Width
) + *C
;
5428 Upper
= APInt::getSignedMaxValue(Width
) + 1;
5434 case Instruction::And
:
5435 if (match(BO
.getOperand(1), m_APInt(C
)))
5436 // 'and x, C' produces [0, C].
5440 case Instruction::Or
:
5441 if (match(BO
.getOperand(1), m_APInt(C
)))
5442 // 'or x, C' produces [C, UINT_MAX].
5446 case Instruction::AShr
:
5447 if (match(BO
.getOperand(1), m_APInt(C
)) && C
->ult(Width
)) {
5448 // 'ashr x, C' produces [INT_MIN >> C, INT_MAX >> C].
5449 Lower
= APInt::getSignedMinValue(Width
).ashr(*C
);
5450 Upper
= APInt::getSignedMaxValue(Width
).ashr(*C
) + 1;
5451 } else if (match(BO
.getOperand(0), m_APInt(C
))) {
5452 unsigned ShiftAmount
= Width
- 1;
5453 if (!C
->isNullValue() && IIQ
.isExact(&BO
))
5454 ShiftAmount
= C
->countTrailingZeros();
5455 if (C
->isNegative()) {
5456 // 'ashr C, x' produces [C, C >> (Width-1)]
5458 Upper
= C
->ashr(ShiftAmount
) + 1;
5460 // 'ashr C, x' produces [C >> (Width-1), C]
5461 Lower
= C
->ashr(ShiftAmount
);
5467 case Instruction::LShr
:
5468 if (match(BO
.getOperand(1), m_APInt(C
)) && C
->ult(Width
)) {
5469 // 'lshr x, C' produces [0, UINT_MAX >> C].
5470 Upper
= APInt::getAllOnesValue(Width
).lshr(*C
) + 1;
5471 } else if (match(BO
.getOperand(0), m_APInt(C
))) {
5472 // 'lshr C, x' produces [C >> (Width-1), C].
5473 unsigned ShiftAmount
= Width
- 1;
5474 if (!C
->isNullValue() && IIQ
.isExact(&BO
))
5475 ShiftAmount
= C
->countTrailingZeros();
5476 Lower
= C
->lshr(ShiftAmount
);
5481 case Instruction::Shl
:
5482 if (match(BO
.getOperand(0), m_APInt(C
))) {
5483 if (IIQ
.hasNoUnsignedWrap(&BO
)) {
5484 // 'shl nuw C, x' produces [C, C << CLZ(C)]
5486 Upper
= Lower
.shl(Lower
.countLeadingZeros()) + 1;
5487 } else if (BO
.hasNoSignedWrap()) { // TODO: What if both nuw+nsw?
5488 if (C
->isNegative()) {
5489 // 'shl nsw C, x' produces [C << CLO(C)-1, C]
5490 unsigned ShiftAmount
= C
->countLeadingOnes() - 1;
5491 Lower
= C
->shl(ShiftAmount
);
5494 // 'shl nsw C, x' produces [C, C << CLZ(C)-1]
5495 unsigned ShiftAmount
= C
->countLeadingZeros() - 1;
5497 Upper
= C
->shl(ShiftAmount
) + 1;
5503 case Instruction::SDiv
:
5504 if (match(BO
.getOperand(1), m_APInt(C
))) {
5505 APInt IntMin
= APInt::getSignedMinValue(Width
);
5506 APInt IntMax
= APInt::getSignedMaxValue(Width
);
5507 if (C
->isAllOnesValue()) {
5508 // 'sdiv x, -1' produces [INT_MIN + 1, INT_MAX]
5509 // where C != -1 and C != 0 and C != 1
5512 } else if (C
->countLeadingZeros() < Width
- 1) {
5513 // 'sdiv x, C' produces [INT_MIN / C, INT_MAX / C]
5514 // where C != -1 and C != 0 and C != 1
5515 Lower
= IntMin
.sdiv(*C
);
5516 Upper
= IntMax
.sdiv(*C
);
5517 if (Lower
.sgt(Upper
))
5518 std::swap(Lower
, Upper
);
5520 assert(Upper
!= Lower
&& "Upper part of range has wrapped!");
5522 } else if (match(BO
.getOperand(0), m_APInt(C
))) {
5523 if (C
->isMinSignedValue()) {
5524 // 'sdiv INT_MIN, x' produces [INT_MIN, INT_MIN / -2].
5526 Upper
= Lower
.lshr(1) + 1;
5528 // 'sdiv C, x' produces [-|C|, |C|].
5529 Upper
= C
->abs() + 1;
5530 Lower
= (-Upper
) + 1;
5535 case Instruction::UDiv
:
5536 if (match(BO
.getOperand(1), m_APInt(C
)) && !C
->isNullValue()) {
5537 // 'udiv x, C' produces [0, UINT_MAX / C].
5538 Upper
= APInt::getMaxValue(Width
).udiv(*C
) + 1;
5539 } else if (match(BO
.getOperand(0), m_APInt(C
))) {
5540 // 'udiv C, x' produces [0, C].
5545 case Instruction::SRem
:
5546 if (match(BO
.getOperand(1), m_APInt(C
))) {
5547 // 'srem x, C' produces (-|C|, |C|).
5549 Lower
= (-Upper
) + 1;
5553 case Instruction::URem
:
5554 if (match(BO
.getOperand(1), m_APInt(C
)))
5555 // 'urem x, C' produces [0, C).
5564 static void setLimitsForIntrinsic(const IntrinsicInst
&II
, APInt
&Lower
,
5566 unsigned Width
= Lower
.getBitWidth();
5568 switch (II
.getIntrinsicID()) {
5569 case Intrinsic::uadd_sat
:
5570 // uadd.sat(x, C) produces [C, UINT_MAX].
5571 if (match(II
.getOperand(0), m_APInt(C
)) ||
5572 match(II
.getOperand(1), m_APInt(C
)))
5575 case Intrinsic::sadd_sat
:
5576 if (match(II
.getOperand(0), m_APInt(C
)) ||
5577 match(II
.getOperand(1), m_APInt(C
))) {
5578 if (C
->isNegative()) {
5579 // sadd.sat(x, -C) produces [SINT_MIN, SINT_MAX + (-C)].
5580 Lower
= APInt::getSignedMinValue(Width
);
5581 Upper
= APInt::getSignedMaxValue(Width
) + *C
+ 1;
5583 // sadd.sat(x, +C) produces [SINT_MIN + C, SINT_MAX].
5584 Lower
= APInt::getSignedMinValue(Width
) + *C
;
5585 Upper
= APInt::getSignedMaxValue(Width
) + 1;
5589 case Intrinsic::usub_sat
:
5590 // usub.sat(C, x) produces [0, C].
5591 if (match(II
.getOperand(0), m_APInt(C
)))
5593 // usub.sat(x, C) produces [0, UINT_MAX - C].
5594 else if (match(II
.getOperand(1), m_APInt(C
)))
5595 Upper
= APInt::getMaxValue(Width
) - *C
+ 1;
5597 case Intrinsic::ssub_sat
:
5598 if (match(II
.getOperand(0), m_APInt(C
))) {
5599 if (C
->isNegative()) {
5600 // ssub.sat(-C, x) produces [SINT_MIN, -SINT_MIN + (-C)].
5601 Lower
= APInt::getSignedMinValue(Width
);
5602 Upper
= *C
- APInt::getSignedMinValue(Width
) + 1;
5604 // ssub.sat(+C, x) produces [-SINT_MAX + C, SINT_MAX].
5605 Lower
= *C
- APInt::getSignedMaxValue(Width
);
5606 Upper
= APInt::getSignedMaxValue(Width
) + 1;
5608 } else if (match(II
.getOperand(1), m_APInt(C
))) {
5609 if (C
->isNegative()) {
5610 // ssub.sat(x, -C) produces [SINT_MIN - (-C), SINT_MAX]:
5611 Lower
= APInt::getSignedMinValue(Width
) - *C
;
5612 Upper
= APInt::getSignedMaxValue(Width
) + 1;
5614 // ssub.sat(x, +C) produces [SINT_MIN, SINT_MAX - C].
5615 Lower
= APInt::getSignedMinValue(Width
);
5616 Upper
= APInt::getSignedMaxValue(Width
) - *C
+ 1;
5625 static void setLimitsForSelectPattern(const SelectInst
&SI
, APInt
&Lower
,
5626 APInt
&Upper
, const InstrInfoQuery
&IIQ
) {
5627 const Value
*LHS
, *RHS
;
5628 SelectPatternResult R
= matchSelectPattern(&SI
, LHS
, RHS
);
5629 if (R
.Flavor
== SPF_UNKNOWN
)
5632 unsigned BitWidth
= SI
.getType()->getScalarSizeInBits();
5634 if (R
.Flavor
== SelectPatternFlavor::SPF_ABS
) {
5635 // If the negation part of the abs (in RHS) has the NSW flag,
5636 // then the result of abs(X) is [0..SIGNED_MAX],
5637 // otherwise it is [0..SIGNED_MIN], as -SIGNED_MIN == SIGNED_MIN.
5638 Lower
= APInt::getNullValue(BitWidth
);
5639 if (match(RHS
, m_Neg(m_Specific(LHS
))) &&
5640 IIQ
.hasNoSignedWrap(cast
<Instruction
>(RHS
)))
5641 Upper
= APInt::getSignedMaxValue(BitWidth
) + 1;
5643 Upper
= APInt::getSignedMinValue(BitWidth
) + 1;
5647 if (R
.Flavor
== SelectPatternFlavor::SPF_NABS
) {
5648 // The result of -abs(X) is <= 0.
5649 Lower
= APInt::getSignedMinValue(BitWidth
);
5650 Upper
= APInt(BitWidth
, 1);
5655 if (!match(LHS
, m_APInt(C
)) && !match(RHS
, m_APInt(C
)))
5666 Lower
= APInt::getSignedMinValue(BitWidth
);
5671 Upper
= APInt::getSignedMaxValue(BitWidth
) + 1;
5678 ConstantRange
llvm::computeConstantRange(const Value
*V
, bool UseInstrInfo
) {
5679 assert(V
->getType()->isIntOrIntVectorTy() && "Expected integer instruction");
5682 if (match(V
, m_APInt(C
)))
5683 return ConstantRange(*C
);
5685 InstrInfoQuery
IIQ(UseInstrInfo
);
5686 unsigned BitWidth
= V
->getType()->getScalarSizeInBits();
5687 APInt Lower
= APInt(BitWidth
, 0);
5688 APInt Upper
= APInt(BitWidth
, 0);
5689 if (auto *BO
= dyn_cast
<BinaryOperator
>(V
))
5690 setLimitsForBinOp(*BO
, Lower
, Upper
, IIQ
);
5691 else if (auto *II
= dyn_cast
<IntrinsicInst
>(V
))
5692 setLimitsForIntrinsic(*II
, Lower
, Upper
);
5693 else if (auto *SI
= dyn_cast
<SelectInst
>(V
))
5694 setLimitsForSelectPattern(*SI
, Lower
, Upper
, IIQ
);
5696 ConstantRange CR
= ConstantRange::getNonEmpty(Lower
, Upper
);
5698 if (auto *I
= dyn_cast
<Instruction
>(V
))
5699 if (auto *Range
= IIQ
.getMetadata(I
, LLVMContext::MD_range
))
5700 CR
= CR
.intersectWith(getConstantRangeFromMetadata(*Range
));
5705 static Optional
<int64_t>
5706 getOffsetFromIndex(const GEPOperator
*GEP
, unsigned Idx
, const DataLayout
&DL
) {
5707 // Skip over the first indices.
5708 gep_type_iterator GTI
= gep_type_begin(GEP
);
5709 for (unsigned i
= 1; i
!= Idx
; ++i
, ++GTI
)
5712 // Compute the offset implied by the rest of the indices.
5714 for (unsigned i
= Idx
, e
= GEP
->getNumOperands(); i
!= e
; ++i
, ++GTI
) {
5715 ConstantInt
*OpC
= dyn_cast
<ConstantInt
>(GEP
->getOperand(i
));
5719 continue; // No offset.
5721 // Handle struct indices, which add their field offset to the pointer.
5722 if (StructType
*STy
= GTI
.getStructTypeOrNull()) {
5723 Offset
+= DL
.getStructLayout(STy
)->getElementOffset(OpC
->getZExtValue());
5727 // Otherwise, we have a sequential type like an array or vector. Multiply
5728 // the index by the ElementSize.
5729 uint64_t Size
= DL
.getTypeAllocSize(GTI
.getIndexedType());
5730 Offset
+= Size
* OpC
->getSExtValue();
5736 Optional
<int64_t> llvm::isPointerOffset(const Value
*Ptr1
, const Value
*Ptr2
,
5737 const DataLayout
&DL
) {
5738 Ptr1
= Ptr1
->stripPointerCasts();
5739 Ptr2
= Ptr2
->stripPointerCasts();
5741 // Handle the trivial case first.
5746 const GEPOperator
*GEP1
= dyn_cast
<GEPOperator
>(Ptr1
);
5747 const GEPOperator
*GEP2
= dyn_cast
<GEPOperator
>(Ptr2
);
5749 // If one pointer is a GEP and the other isn't, then see if the GEP is a
5750 // constant offset from the base, as in "P" and "gep P, 1".
5751 if (GEP1
&& !GEP2
&& GEP1
->getOperand(0)->stripPointerCasts() == Ptr2
) {
5752 auto Offset
= getOffsetFromIndex(GEP1
, 1, DL
);
5758 if (GEP2
&& !GEP1
&& GEP2
->getOperand(0)->stripPointerCasts() == Ptr1
) {
5759 return getOffsetFromIndex(GEP2
, 1, DL
);
5762 // Right now we handle the case when Ptr1/Ptr2 are both GEPs with an identical
5763 // base. After that base, they may have some number of common (and
5764 // potentially variable) indices. After that they handle some constant
5765 // offset, which determines their offset from each other. At this point, we
5766 // handle no other case.
5767 if (!GEP1
|| !GEP2
|| GEP1
->getOperand(0) != GEP2
->getOperand(0))
5770 // Skip any common indices and track the GEP types.
5772 for (; Idx
!= GEP1
->getNumOperands() && Idx
!= GEP2
->getNumOperands(); ++Idx
)
5773 if (GEP1
->getOperand(Idx
) != GEP2
->getOperand(Idx
))
5776 auto Offset1
= getOffsetFromIndex(GEP1
, Idx
, DL
);
5777 auto Offset2
= getOffsetFromIndex(GEP2
, Idx
, DL
);
5778 if (!Offset1
|| !Offset2
)
5780 return *Offset2
- *Offset1
;