LLVM  8.0.1
DemandedBits.cpp
Go to the documentation of this file.
1 //===- DemandedBits.cpp - Determine demanded bits -------------------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This pass implements a demanded bits analysis. A demanded bit is one that
11 // contributes to a result; bits that are not demanded can be either zero or
12 // one without affecting control or data flow. For example in this sequence:
13 //
14 // %1 = add i32 %x, %y
15 // %2 = trunc i32 %1 to i16
16 //
17 // Only the lowest 16 bits of %1 are demanded; the rest are removed by the
18 // trunc.
19 //
20 //===----------------------------------------------------------------------===//
21 
23 #include "llvm/ADT/APInt.h"
24 #include "llvm/ADT/SetVector.h"
25 #include "llvm/ADT/StringExtras.h"
28 #include "llvm/IR/BasicBlock.h"
29 #include "llvm/IR/Constants.h"
30 #include "llvm/IR/DataLayout.h"
31 #include "llvm/IR/DerivedTypes.h"
32 #include "llvm/IR/Dominators.h"
33 #include "llvm/IR/InstIterator.h"
34 #include "llvm/IR/InstrTypes.h"
35 #include "llvm/IR/Instruction.h"
36 #include "llvm/IR/IntrinsicInst.h"
37 #include "llvm/IR/Intrinsics.h"
38 #include "llvm/IR/Module.h"
39 #include "llvm/IR/Operator.h"
40 #include "llvm/IR/PassManager.h"
41 #include "llvm/IR/PatternMatch.h"
42 #include "llvm/IR/Type.h"
43 #include "llvm/IR/Use.h"
44 #include "llvm/Pass.h"
45 #include "llvm/Support/Casting.h"
46 #include "llvm/Support/Debug.h"
47 #include "llvm/Support/KnownBits.h"
49 #include <algorithm>
50 #include <cstdint>
51 
52 using namespace llvm;
53 using namespace llvm::PatternMatch;
54 
55 #define DEBUG_TYPE "demanded-bits"
56 
58 
60  "Demanded bits analysis", false, false)
64  "Demanded bits analysis", false, false)
65 
66 DemandedBitsWrapperPass::DemandedBitsWrapperPass() : FunctionPass(ID) {
68 }
69 
71  AU.setPreservesCFG();
74  AU.setPreservesAll();
75 }
76 
78  DB->print(OS);
79 }
80 
81 static bool isAlwaysLive(Instruction *I) {
82  return I->isTerminator() || isa<DbgInfoIntrinsic>(I) || I->isEHPad() ||
83  I->mayHaveSideEffects();
84 }
85 
86 void DemandedBits::determineLiveOperandBits(
87  const Instruction *UserI, const Value *Val, unsigned OperandNo,
88  const APInt &AOut, APInt &AB, KnownBits &Known, KnownBits &Known2,
89  bool &KnownBitsComputed) {
90  unsigned BitWidth = AB.getBitWidth();
91 
92  // We're called once per operand, but for some instructions, we need to
93  // compute known bits of both operands in order to determine the live bits of
94  // either (when both operands are instructions themselves). We don't,
95  // however, want to do this twice, so we cache the result in APInts that live
96  // in the caller. For the two-relevant-operands case, both operand values are
97  // provided here.
98  auto ComputeKnownBits =
99  [&](unsigned BitWidth, const Value *V1, const Value *V2) {
100  if (KnownBitsComputed)
101  return;
102  KnownBitsComputed = true;
103 
104  const DataLayout &DL = UserI->getModule()->getDataLayout();
105  Known = KnownBits(BitWidth);
106  computeKnownBits(V1, Known, DL, 0, &AC, UserI, &DT);
107 
108  if (V2) {
109  Known2 = KnownBits(BitWidth);
110  computeKnownBits(V2, Known2, DL, 0, &AC, UserI, &DT);
111  }
112  };
113 
114  switch (UserI->getOpcode()) {
115  default: break;
116  case Instruction::Call:
117  case Instruction::Invoke:
118  if (const IntrinsicInst *II = dyn_cast<IntrinsicInst>(UserI))
119  switch (II->getIntrinsicID()) {
120  default: break;
121  case Intrinsic::bswap:
122  // The alive bits of the input are the swapped alive bits of
123  // the output.
124  AB = AOut.byteSwap();
125  break;
127  // The alive bits of the input are the reversed alive bits of
128  // the output.
129  AB = AOut.reverseBits();
130  break;
131  case Intrinsic::ctlz:
132  if (OperandNo == 0) {
133  // We need some output bits, so we need all bits of the
134  // input to the left of, and including, the leftmost bit
135  // known to be one.
136  ComputeKnownBits(BitWidth, Val, nullptr);
137  AB = APInt::getHighBitsSet(BitWidth,
138  std::min(BitWidth, Known.countMaxLeadingZeros()+1));
139  }
140  break;
141  case Intrinsic::cttz:
142  if (OperandNo == 0) {
143  // We need some output bits, so we need all bits of the
144  // input to the right of, and including, the rightmost bit
145  // known to be one.
146  ComputeKnownBits(BitWidth, Val, nullptr);
147  AB = APInt::getLowBitsSet(BitWidth,
148  std::min(BitWidth, Known.countMaxTrailingZeros()+1));
149  }
150  break;
151  case Intrinsic::fshl:
152  case Intrinsic::fshr: {
153  const APInt *SA;
154  if (OperandNo == 2) {
155  // Shift amount is modulo the bitwidth. For powers of two we have
156  // SA % BW == SA & (BW - 1).
157  if (isPowerOf2_32(BitWidth))
158  AB = BitWidth - 1;
159  } else if (match(II->getOperand(2), m_APInt(SA))) {
160  // Normalize to funnel shift left. APInt shifts of BitWidth are well-
161  // defined, so no need to special-case zero shifts here.
162  uint64_t ShiftAmt = SA->urem(BitWidth);
163  if (II->getIntrinsicID() == Intrinsic::fshr)
164  ShiftAmt = BitWidth - ShiftAmt;
165 
166  if (OperandNo == 0)
167  AB = AOut.lshr(ShiftAmt);
168  else if (OperandNo == 1)
169  AB = AOut.shl(BitWidth - ShiftAmt);
170  }
171  break;
172  }
173  }
174  break;
175  case Instruction::Add:
176  case Instruction::Sub:
177  case Instruction::Mul:
178  // Find the highest live output bit. We don't need any more input
179  // bits than that (adds, and thus subtracts, ripple only to the
180  // left).
181  AB = APInt::getLowBitsSet(BitWidth, AOut.getActiveBits());
182  break;
183  case Instruction::Shl:
184  if (OperandNo == 0) {
185  const APInt *ShiftAmtC;
186  if (match(UserI->getOperand(1), m_APInt(ShiftAmtC))) {
187  uint64_t ShiftAmt = ShiftAmtC->getLimitedValue(BitWidth - 1);
188  AB = AOut.lshr(ShiftAmt);
189 
190  // If the shift is nuw/nsw, then the high bits are not dead
191  // (because we've promised that they *must* be zero).
192  const ShlOperator *S = cast<ShlOperator>(UserI);
193  if (S->hasNoSignedWrap())
194  AB |= APInt::getHighBitsSet(BitWidth, ShiftAmt+1);
195  else if (S->hasNoUnsignedWrap())
196  AB |= APInt::getHighBitsSet(BitWidth, ShiftAmt);
197  }
198  }
199  break;
200  case Instruction::LShr:
201  if (OperandNo == 0) {
202  const APInt *ShiftAmtC;
203  if (match(UserI->getOperand(1), m_APInt(ShiftAmtC))) {
204  uint64_t ShiftAmt = ShiftAmtC->getLimitedValue(BitWidth - 1);
205  AB = AOut.shl(ShiftAmt);
206 
207  // If the shift is exact, then the low bits are not dead
208  // (they must be zero).
209  if (cast<LShrOperator>(UserI)->isExact())
210  AB |= APInt::getLowBitsSet(BitWidth, ShiftAmt);
211  }
212  }
213  break;
214  case Instruction::AShr:
215  if (OperandNo == 0) {
216  const APInt *ShiftAmtC;
217  if (match(UserI->getOperand(1), m_APInt(ShiftAmtC))) {
218  uint64_t ShiftAmt = ShiftAmtC->getLimitedValue(BitWidth - 1);
219  AB = AOut.shl(ShiftAmt);
220  // Because the high input bit is replicated into the
221  // high-order bits of the result, if we need any of those
222  // bits, then we must keep the highest input bit.
223  if ((AOut & APInt::getHighBitsSet(BitWidth, ShiftAmt))
224  .getBoolValue())
225  AB.setSignBit();
226 
227  // If the shift is exact, then the low bits are not dead
228  // (they must be zero).
229  if (cast<AShrOperator>(UserI)->isExact())
230  AB |= APInt::getLowBitsSet(BitWidth, ShiftAmt);
231  }
232  }
233  break;
234  case Instruction::And:
235  AB = AOut;
236 
237  // For bits that are known zero, the corresponding bits in the
238  // other operand are dead (unless they're both zero, in which
239  // case they can't both be dead, so just mark the LHS bits as
240  // dead).
241  ComputeKnownBits(BitWidth, UserI->getOperand(0), UserI->getOperand(1));
242  if (OperandNo == 0)
243  AB &= ~Known2.Zero;
244  else
245  AB &= ~(Known.Zero & ~Known2.Zero);
246  break;
247  case Instruction::Or:
248  AB = AOut;
249 
250  // For bits that are known one, the corresponding bits in the
251  // other operand are dead (unless they're both one, in which
252  // case they can't both be dead, so just mark the LHS bits as
253  // dead).
254  ComputeKnownBits(BitWidth, UserI->getOperand(0), UserI->getOperand(1));
255  if (OperandNo == 0)
256  AB &= ~Known2.One;
257  else
258  AB &= ~(Known.One & ~Known2.One);
259  break;
260  case Instruction::Xor:
261  case Instruction::PHI:
262  AB = AOut;
263  break;
264  case Instruction::Trunc:
265  AB = AOut.zext(BitWidth);
266  break;
267  case Instruction::ZExt:
268  AB = AOut.trunc(BitWidth);
269  break;
270  case Instruction::SExt:
271  AB = AOut.trunc(BitWidth);
272  // Because the high input bit is replicated into the
273  // high-order bits of the result, if we need any of those
274  // bits, then we must keep the highest input bit.
275  if ((AOut & APInt::getHighBitsSet(AOut.getBitWidth(),
276  AOut.getBitWidth() - BitWidth))
277  .getBoolValue())
278  AB.setSignBit();
279  break;
280  case Instruction::Select:
281  if (OperandNo != 0)
282  AB = AOut;
283  break;
284  case Instruction::ExtractElement:
285  if (OperandNo == 0)
286  AB = AOut;
287  break;
288  case Instruction::InsertElement:
289  case Instruction::ShuffleVector:
290  if (OperandNo == 0 || OperandNo == 1)
291  AB = AOut;
292  break;
293  }
294 }
295 
297  auto &AC = getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);
298  auto &DT = getAnalysis<DominatorTreeWrapperPass>().getDomTree();
299  DB.emplace(F, AC, DT);
300  return false;
301 }
302 
304  DB.reset();
305 }
306 
307 void DemandedBits::performAnalysis() {
308  if (Analyzed)
309  // Analysis already completed for this function.
310  return;
311  Analyzed = true;
312 
313  Visited.clear();
314  AliveBits.clear();
315  DeadUses.clear();
316 
318 
319  // Collect the set of "root" instructions that are known live.
320  for (Instruction &I : instructions(F)) {
321  if (!isAlwaysLive(&I))
322  continue;
323 
324  LLVM_DEBUG(dbgs() << "DemandedBits: Root: " << I << "\n");
325  // For integer-valued instructions, set up an initial empty set of alive
326  // bits and add the instruction to the work list. For other instructions
327  // add their operands to the work list (for integer values operands, mark
328  // all bits as live).
329  Type *T = I.getType();
330  if (T->isIntOrIntVectorTy()) {
331  if (AliveBits.try_emplace(&I, T->getScalarSizeInBits(), 0).second)
332  Worklist.insert(&I);
333 
334  continue;
335  }
336 
337  // Non-integer-typed instructions...
338  for (Use &OI : I.operands()) {
339  if (Instruction *J = dyn_cast<Instruction>(OI)) {
340  Type *T = J->getType();
341  if (T->isIntOrIntVectorTy())
342  AliveBits[J] = APInt::getAllOnesValue(T->getScalarSizeInBits());
343  Worklist.insert(J);
344  }
345  }
346  // To save memory, we don't add I to the Visited set here. Instead, we
347  // check isAlwaysLive on every instruction when searching for dead
348  // instructions later (we need to check isAlwaysLive for the
349  // integer-typed instructions anyway).
350  }
351 
352  // Propagate liveness backwards to operands.
353  while (!Worklist.empty()) {
354  Instruction *UserI = Worklist.pop_back_val();
355 
356  LLVM_DEBUG(dbgs() << "DemandedBits: Visiting: " << *UserI);
357  APInt AOut;
358  if (UserI->getType()->isIntOrIntVectorTy()) {
359  AOut = AliveBits[UserI];
360  LLVM_DEBUG(dbgs() << " Alive Out: 0x"
361  << Twine::utohexstr(AOut.getLimitedValue()));
362  }
363  LLVM_DEBUG(dbgs() << "\n");
364 
365  if (!UserI->getType()->isIntOrIntVectorTy())
366  Visited.insert(UserI);
367 
368  KnownBits Known, Known2;
369  bool KnownBitsComputed = false;
370  // Compute the set of alive bits for each operand. These are anded into the
371  // existing set, if any, and if that changes the set of alive bits, the
372  // operand is added to the work-list.
373  for (Use &OI : UserI->operands()) {
374  // We also want to detect dead uses of arguments, but will only store
375  // demanded bits for instructions.
377  if (!I && !isa<Argument>(OI))
378  continue;
379 
380  Type *T = OI->getType();
381  if (T->isIntOrIntVectorTy()) {
382  unsigned BitWidth = T->getScalarSizeInBits();
383  APInt AB = APInt::getAllOnesValue(BitWidth);
384  if (UserI->getType()->isIntOrIntVectorTy() && !AOut &&
385  !isAlwaysLive(UserI)) {
386  // If all bits of the output are dead, then all bits of the input
387  // are also dead.
388  AB = APInt(BitWidth, 0);
389  } else {
390  // Bits of each operand that are used to compute alive bits of the
391  // output are alive, all others are dead.
392  determineLiveOperandBits(UserI, OI, OI.getOperandNo(), AOut, AB,
393  Known, Known2, KnownBitsComputed);
394 
395  // Keep track of uses which have no demanded bits.
396  if (AB.isNullValue())
397  DeadUses.insert(&OI);
398  else
399  DeadUses.erase(&OI);
400  }
401 
402  if (I) {
403  // If we've added to the set of alive bits (or the operand has not
404  // been previously visited), then re-queue the operand to be visited
405  // again.
406  APInt ABPrev(BitWidth, 0);
407  auto ABI = AliveBits.find(I);
408  if (ABI != AliveBits.end())
409  ABPrev = ABI->second;
410 
411  APInt ABNew = AB | ABPrev;
412  if (ABNew != ABPrev || ABI == AliveBits.end()) {
413  AliveBits[I] = std::move(ABNew);
414  Worklist.insert(I);
415  }
416  }
417  } else if (I && !Visited.count(I)) {
418  Worklist.insert(I);
419  }
420  }
421  }
422 }
423 
425  performAnalysis();
426 
427  auto Found = AliveBits.find(I);
428  if (Found != AliveBits.end())
429  return Found->second;
430 
431  const DataLayout &DL = I->getModule()->getDataLayout();
432  return APInt::getAllOnesValue(
433  DL.getTypeSizeInBits(I->getType()->getScalarType()));
434 }
435 
437  performAnalysis();
438 
439  return !Visited.count(I) && AliveBits.find(I) == AliveBits.end() &&
440  !isAlwaysLive(I);
441 }
442 
444  // We only track integer uses, everything else is assumed live.
445  if (!(*U)->getType()->isIntOrIntVectorTy())
446  return false;
447 
448  // Uses by always-live instructions are never dead.
449  Instruction *UserI = cast<Instruction>(U->getUser());
450  if (isAlwaysLive(UserI))
451  return false;
452 
453  performAnalysis();
454  if (DeadUses.count(U))
455  return true;
456 
457  // If no output bits are demanded, no input bits are demanded and the use
458  // is dead. These uses might not be explicitly present in the DeadUses map.
459  if (UserI->getType()->isIntOrIntVectorTy()) {
460  auto Found = AliveBits.find(UserI);
461  if (Found != AliveBits.end() && Found->second.isNullValue())
462  return true;
463  }
464 
465  return false;
466 }
467 
469  performAnalysis();
470  for (auto &KV : AliveBits) {
471  OS << "DemandedBits: 0x" << Twine::utohexstr(KV.second.getLimitedValue())
472  << " for " << *KV.first << '\n';
473  }
474 }
475 
477  return new DemandedBitsWrapperPass();
478 }
479 
480 AnalysisKey DemandedBitsAnalysis::Key;
481 
484  auto &AC = AM.getResult<AssumptionAnalysis>(F);
485  auto &DT = AM.getResult<DominatorTreeAnalysis>(F);
486  return DemandedBits(F, AC, DT);
487 }
488 
492  return PreservedAnalyses::all();
493 }
void computeKnownBits(const Value *V, KnownBits &Known, const DataLayout &DL, unsigned Depth=0, AssumptionCache *AC=nullptr, const Instruction *CxtI=nullptr, const DominatorTree *DT=nullptr, OptimizationRemarkEmitter *ORE=nullptr, bool UseInstrInfo=true)
Determine which bits of V are known to be either zero or one and return them in the KnownZero/KnownOn...
A parsed version of the target data layout string in and methods for querying it. ...
Definition: DataLayout.h:111
void initializeDemandedBitsWrapperPassPass(PassRegistry &)
void setSignBit()
Set the sign bit to 1.
Definition: APInt.h:1413
static PassRegistry * getPassRegistry()
getPassRegistry - Access the global registry object, which is automatically initialized at applicatio...
static APInt getAllOnesValue(unsigned numBits)
Get the all-ones value.
Definition: APInt.h:562
PassT::Result & getResult(IRUnitT &IR, ExtraArgTs... ExtraArgs)
Get the result of an analysis pass for a given IR unit.
Definition: PassManager.h:770
This class represents lattice values for constants.
Definition: AllocatorList.h:24
A Module instance is used to store all the information related to an LLVM module. ...
Definition: Module.h:65
bool isInstructionDead(Instruction *I)
Return true if, during analysis, I could not be reached.
APInt zext(unsigned width) const
Zero extend to a new width.
Definition: APInt.cpp:858
static APInt getLowBitsSet(unsigned numBits, unsigned loBitsSet)
Get a value with low bits set.
Definition: APInt.h:648
An immutable pass that tracks lazily created AssumptionCache objects.
bool isTerminator() const
Definition: Instruction.h:129
demanded bits
unsigned second
APInt trunc(unsigned width) const
Truncate to new width.
Definition: APInt.cpp:811
Analysis pass which computes a DominatorTree.
Definition: Dominators.h:231
F(f)
unsigned countMaxTrailingZeros() const
Returns the maximum number of trailing zero bits possible.
Definition: KnownBits.h:166
This defines the Use class.
unsigned getBitWidth() const
Return the number of bits in the APInt.
Definition: APInt.h:1509
bool match(Val *V, const Pattern &P)
Definition: PatternMatch.h:48
AnalysisUsage & addRequired()
#define INITIALIZE_PASS_DEPENDENCY(depName)
Definition: PassSupport.h:51
const DataLayout & getDataLayout() const
Get the data layout for the module&#39;s target platform.
Definition: Module.cpp:371
APInt shl(unsigned shiftAmt) const
Left-shift function.
Definition: APInt.h:993
bool runOnFunction(Function &F) override
runOnFunction - Virtual method overriden by subclasses to do the per-function processing of the pass...
A Use represents the edge between a Value definition and its users.
Definition: Use.h:56
void getAnalysisUsage(AnalysisUsage &AU) const override
getAnalysisUsage - This function should be overriden by passes that need analysis information to do t...
An analysis that produces DemandedBits for a function.
Definition: DemandedBits.h:107
This file implements a class to represent arbitrary precision integral constant values and operations...
unsigned getActiveBits() const
Compute the number of active bits in the value.
Definition: APInt.h:1533
Type * getType() const
All values are typed, get the type of this value.
Definition: Value.h:245
bool insert(const value_type &X)
Insert a new element into the SetVector.
Definition: SetVector.h:142
unsigned getOpcode() const
Returns a member of one of the enums like Instruction::Add.
Definition: Instruction.h:126
DemandedBits run(Function &F, FunctionAnalysisManager &AM)
Run the analysis pass over a function and produce demanded bits information.
bool isIntOrIntVectorTy() const
Return true if this is an integer type or a vector of integer types.
Definition: Type.h:203
APInt reverseBits() const
Definition: APInt.cpp:644
Value * getOperand(unsigned i) const
Definition: User.h:170
Type * getScalarType() const
If this is a vector type, return the element type, otherwise return &#39;this&#39;.
Definition: Type.h:304
static APInt getHighBitsSet(unsigned numBits, unsigned hiBitsSet)
Get a value with high bits set.
Definition: APInt.h:636
A set of analyses that are preserved following a run of a transformation pass.
Definition: PassManager.h:154
* if(!EatIfPresent(lltok::kw_thread_local)) return false
ParseOptionalThreadLocal := /*empty.
apint_match m_APInt(const APInt *&Res)
Match a ConstantInt or splatted ConstantVector, binding the specified pointer to the contained APInt...
Definition: PatternMatch.h:176
APInt urem(const APInt &RHS) const
Unsigned remainder operation.
Definition: APInt.cpp:1613
constexpr bool isPowerOf2_32(uint32_t Value)
Return true if the argument is a power of two > 0.
Definition: MathExtras.h:429
The instances of the Type class are immutable: once they are created, they are never changed...
Definition: Type.h:46
INITIALIZE_PASS_BEGIN(DemandedBitsWrapperPass, "demanded-bits", "Demanded bits analysis", false, false) INITIALIZE_PASS_END(DemandedBitsWrapperPass
This file contains the declarations for the subclasses of Constant, which represent the different fla...
bool mayHaveSideEffects() const
Return true if the instruction may have side effects.
Definition: Instruction.h:562
Represent the analysis usage information of a pass.
FunctionPass class - This class is used to implement most global optimizations.
Definition: Pass.h:285
op_range operands()
Definition: User.h:238
static void print(raw_ostream &Out, object::Archive::Kind Kind, T Val)
demanded Demanded bits analysis
static PreservedAnalyses all()
Construct a special preserved set that preserves all passes.
Definition: PassManager.h:160
INITIALIZE_PASS_END(RegBankSelect, DEBUG_TYPE, "Assign register bank of generic virtual registers", false, false) RegBankSelect
APInt lshr(unsigned shiftAmt) const
Logical right-shift function.
Definition: APInt.h:971
A function analysis which provides an AssumptionCache.
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
A SetVector that performs no allocations if smaller than a certain size.
Definition: SetVector.h:298
unsigned countMaxLeadingZeros() const
Returns the maximum number of leading zero bits possible.
Definition: KnownBits.h:176
unsigned getScalarSizeInBits() const LLVM_READONLY
If this is a vector type, return the getPrimitiveSizeInBits value for the element type...
Definition: Type.cpp:130
Module.h This file contains the declarations for the Module class.
static Twine utohexstr(const uint64_t &Val)
Definition: Twine.h:385
void setPreservesCFG()
This function should be called by the pass, iff they do not:
Definition: Pass.cpp:286
APInt getDemandedBits(Instruction *I)
Return the bits demanded from instruction I.
raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
Definition: Debug.cpp:133
const Module * getModule() const
Return the module owning the function this instruction belongs to or nullptr it the function does not...
Definition: Instruction.cpp:56
Class for arbitrary precision integers.
Definition: APInt.h:70
void setPreservesAll()
Set by analyses that do not transform their input at all.
bool hasNoSignedWrap() const
Test whether this operation is known to never undergo signed overflow, aka the nsw property...
Definition: Operator.h:96
void print(raw_ostream &OS, const Module *M) const override
print - Print out the internal state of the pass.
uint64_t getLimitedValue(uint64_t Limit=UINT64_MAX) const
If this value is smaller than the specified limit, return it, otherwise return the limit value...
Definition: APInt.h:482
#define I(x, y, z)
Definition: MD5.cpp:58
bool empty() const
Determine if the SetVector is empty or not.
Definition: SetVector.h:73
LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)
Definition: Casting.h:323
APInt byteSwap() const
Definition: APInt.cpp:618
bool isUseDead(Use *U)
Return whether this use is dead by means of not having any demanded bits.
LLVM Value Representation.
Definition: Value.h:73
static bool isAlwaysLive(Instruction *I)
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:46
bool isEHPad() const
Return true if the instruction is a variety of EH-block.
Definition: Instruction.h:573
inst_range instructions(Function *F)
Definition: InstIterator.h:134
A container for analyses that lazily runs them and caches their results.
Legacy analysis pass which computes a DominatorTree.
Definition: Dominators.h:260
This header defines various interfaces for pass management in LLVM.
FunctionPass * createDemandedBitsWrapperPass()
Create a demanded bits analysis pass.
#define LLVM_DEBUG(X)
Definition: Debug.h:123
A special type used by analysis passes to provide an address that identifies that particular analysis...
Definition: PassManager.h:71
void releaseMemory() override
Clean up memory in between runs.
void print(raw_ostream &OS)
A wrapper class for inspecting calls to intrinsic functions.
Definition: IntrinsicInst.h:44
bool hasNoUnsignedWrap() const
Test whether this operation is known to never undergo unsigned overflow, aka the nuw property...
Definition: Operator.h:90