xref: /freebsd/contrib/llvm-project/llvm/lib/Analysis/DemandedBits.cpp (revision d0b2dbfa0ecf2bbc9709efc5e20baf8e4b44bbbf)
1 //===- DemandedBits.cpp - Determine demanded bits -------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This pass implements a demanded bits analysis. A demanded bit is one that
10 // contributes to a result; bits that are not demanded can be either zero or
11 // one without affecting control or data flow. For example in this sequence:
12 //
13 //   %1 = add i32 %x, %y
14 //   %2 = trunc i32 %1 to i16
15 //
16 // Only the lowest 16 bits of %1 are demanded; the rest are removed by the
17 // trunc.
18 //
19 //===----------------------------------------------------------------------===//
20 
21 #include "llvm/Analysis/DemandedBits.h"
22 #include "llvm/ADT/APInt.h"
23 #include "llvm/ADT/SetVector.h"
24 #include "llvm/Analysis/AssumptionCache.h"
25 #include "llvm/Analysis/ValueTracking.h"
26 #include "llvm/IR/DataLayout.h"
27 #include "llvm/IR/Dominators.h"
28 #include "llvm/IR/InstIterator.h"
29 #include "llvm/IR/Instruction.h"
30 #include "llvm/IR/IntrinsicInst.h"
31 #include "llvm/IR/Module.h"
32 #include "llvm/IR/Operator.h"
33 #include "llvm/IR/PassManager.h"
34 #include "llvm/IR/PatternMatch.h"
35 #include "llvm/IR/Type.h"
36 #include "llvm/IR/Use.h"
37 #include "llvm/InitializePasses.h"
38 #include "llvm/Pass.h"
39 #include "llvm/Support/Casting.h"
40 #include "llvm/Support/Debug.h"
41 #include "llvm/Support/KnownBits.h"
42 #include "llvm/Support/raw_ostream.h"
43 #include <algorithm>
44 #include <cstdint>
45 
46 using namespace llvm;
47 using namespace llvm::PatternMatch;
48 
49 #define DEBUG_TYPE "demanded-bits"
50 
51 char DemandedBitsWrapperPass::ID = 0;
52 
53 INITIALIZE_PASS_BEGIN(DemandedBitsWrapperPass, "demanded-bits",
54                       "Demanded bits analysis", false, false)
55 INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker)
56 INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
57 INITIALIZE_PASS_END(DemandedBitsWrapperPass, "demanded-bits",
58                     "Demanded bits analysis", false, false)
59 
60 DemandedBitsWrapperPass::DemandedBitsWrapperPass() : FunctionPass(ID) {
61   initializeDemandedBitsWrapperPassPass(*PassRegistry::getPassRegistry());
62 }
63 
64 void DemandedBitsWrapperPass::getAnalysisUsage(AnalysisUsage &AU) const {
65   AU.setPreservesCFG();
66   AU.addRequired<AssumptionCacheTracker>();
67   AU.addRequired<DominatorTreeWrapperPass>();
68   AU.setPreservesAll();
69 }
70 
71 void DemandedBitsWrapperPass::print(raw_ostream &OS, const Module *M) const {
72   DB->print(OS);
73 }
74 
75 static bool isAlwaysLive(Instruction *I) {
76   return I->isTerminator() || isa<DbgInfoIntrinsic>(I) || I->isEHPad() ||
77          I->mayHaveSideEffects();
78 }
79 
80 void DemandedBits::determineLiveOperandBits(
81     const Instruction *UserI, const Value *Val, unsigned OperandNo,
82     const APInt &AOut, APInt &AB, KnownBits &Known, KnownBits &Known2,
83     bool &KnownBitsComputed) {
84   unsigned BitWidth = AB.getBitWidth();
85 
86   // We're called once per operand, but for some instructions, we need to
87   // compute known bits of both operands in order to determine the live bits of
88   // either (when both operands are instructions themselves). We don't,
89   // however, want to do this twice, so we cache the result in APInts that live
90   // in the caller. For the two-relevant-operands case, both operand values are
91   // provided here.
92   auto ComputeKnownBits =
93       [&](unsigned BitWidth, const Value *V1, const Value *V2) {
94         if (KnownBitsComputed)
95           return;
96         KnownBitsComputed = true;
97 
98         const DataLayout &DL = UserI->getModule()->getDataLayout();
99         Known = KnownBits(BitWidth);
100         computeKnownBits(V1, Known, DL, 0, &AC, UserI, &DT);
101 
102         if (V2) {
103           Known2 = KnownBits(BitWidth);
104           computeKnownBits(V2, Known2, DL, 0, &AC, UserI, &DT);
105         }
106       };
107 
108   switch (UserI->getOpcode()) {
109   default: break;
110   case Instruction::Call:
111   case Instruction::Invoke:
112     if (const IntrinsicInst *II = dyn_cast<IntrinsicInst>(UserI)) {
113       switch (II->getIntrinsicID()) {
114       default: break;
115       case Intrinsic::bswap:
116         // The alive bits of the input are the swapped alive bits of
117         // the output.
118         AB = AOut.byteSwap();
119         break;
120       case Intrinsic::bitreverse:
121         // The alive bits of the input are the reversed alive bits of
122         // the output.
123         AB = AOut.reverseBits();
124         break;
125       case Intrinsic::ctlz:
126         if (OperandNo == 0) {
127           // We need some output bits, so we need all bits of the
128           // input to the left of, and including, the leftmost bit
129           // known to be one.
130           ComputeKnownBits(BitWidth, Val, nullptr);
131           AB = APInt::getHighBitsSet(BitWidth,
132                  std::min(BitWidth, Known.countMaxLeadingZeros()+1));
133         }
134         break;
135       case Intrinsic::cttz:
136         if (OperandNo == 0) {
137           // We need some output bits, so we need all bits of the
138           // input to the right of, and including, the rightmost bit
139           // known to be one.
140           ComputeKnownBits(BitWidth, Val, nullptr);
141           AB = APInt::getLowBitsSet(BitWidth,
142                  std::min(BitWidth, Known.countMaxTrailingZeros()+1));
143         }
144         break;
145       case Intrinsic::fshl:
146       case Intrinsic::fshr: {
147         const APInt *SA;
148         if (OperandNo == 2) {
149           // Shift amount is modulo the bitwidth. For powers of two we have
150           // SA % BW == SA & (BW - 1).
151           if (isPowerOf2_32(BitWidth))
152             AB = BitWidth - 1;
153         } else if (match(II->getOperand(2), m_APInt(SA))) {
154           // Normalize to funnel shift left. APInt shifts of BitWidth are well-
155           // defined, so no need to special-case zero shifts here.
156           uint64_t ShiftAmt = SA->urem(BitWidth);
157           if (II->getIntrinsicID() == Intrinsic::fshr)
158             ShiftAmt = BitWidth - ShiftAmt;
159 
160           if (OperandNo == 0)
161             AB = AOut.lshr(ShiftAmt);
162           else if (OperandNo == 1)
163             AB = AOut.shl(BitWidth - ShiftAmt);
164         }
165         break;
166       }
167       case Intrinsic::umax:
168       case Intrinsic::umin:
169       case Intrinsic::smax:
170       case Intrinsic::smin:
171         // If low bits of result are not demanded, they are also not demanded
172         // for the min/max operands.
173         AB = APInt::getBitsSetFrom(BitWidth, AOut.countTrailingZeros());
174         break;
175       }
176     }
177     break;
178   case Instruction::Add:
179     if (AOut.isMask()) {
180       AB = AOut;
181     } else {
182       ComputeKnownBits(BitWidth, UserI->getOperand(0), UserI->getOperand(1));
183       AB = determineLiveOperandBitsAdd(OperandNo, AOut, Known, Known2);
184     }
185     break;
186   case Instruction::Sub:
187     if (AOut.isMask()) {
188       AB = AOut;
189     } else {
190       ComputeKnownBits(BitWidth, UserI->getOperand(0), UserI->getOperand(1));
191       AB = determineLiveOperandBitsSub(OperandNo, AOut, Known, Known2);
192     }
193     break;
194   case Instruction::Mul:
195     // Find the highest live output bit. We don't need any more input
196     // bits than that (adds, and thus subtracts, ripple only to the
197     // left).
198     AB = APInt::getLowBitsSet(BitWidth, AOut.getActiveBits());
199     break;
200   case Instruction::Shl:
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.lshr(ShiftAmt);
206 
207         // If the shift is nuw/nsw, then the high bits are not dead
208         // (because we've promised that they *must* be zero).
209         const ShlOperator *S = cast<ShlOperator>(UserI);
210         if (S->hasNoSignedWrap())
211           AB |= APInt::getHighBitsSet(BitWidth, ShiftAmt+1);
212         else if (S->hasNoUnsignedWrap())
213           AB |= APInt::getHighBitsSet(BitWidth, ShiftAmt);
214       }
215     }
216     break;
217   case Instruction::LShr:
218     if (OperandNo == 0) {
219       const APInt *ShiftAmtC;
220       if (match(UserI->getOperand(1), m_APInt(ShiftAmtC))) {
221         uint64_t ShiftAmt = ShiftAmtC->getLimitedValue(BitWidth - 1);
222         AB = AOut.shl(ShiftAmt);
223 
224         // If the shift is exact, then the low bits are not dead
225         // (they must be zero).
226         if (cast<LShrOperator>(UserI)->isExact())
227           AB |= APInt::getLowBitsSet(BitWidth, ShiftAmt);
228       }
229     }
230     break;
231   case Instruction::AShr:
232     if (OperandNo == 0) {
233       const APInt *ShiftAmtC;
234       if (match(UserI->getOperand(1), m_APInt(ShiftAmtC))) {
235         uint64_t ShiftAmt = ShiftAmtC->getLimitedValue(BitWidth - 1);
236         AB = AOut.shl(ShiftAmt);
237         // Because the high input bit is replicated into the
238         // high-order bits of the result, if we need any of those
239         // bits, then we must keep the highest input bit.
240         if ((AOut & APInt::getHighBitsSet(BitWidth, ShiftAmt))
241             .getBoolValue())
242           AB.setSignBit();
243 
244         // If the shift is exact, then the low bits are not dead
245         // (they must be zero).
246         if (cast<AShrOperator>(UserI)->isExact())
247           AB |= APInt::getLowBitsSet(BitWidth, ShiftAmt);
248       }
249     }
250     break;
251   case Instruction::And:
252     AB = AOut;
253 
254     // For bits that are known zero, the corresponding bits in the
255     // other operand are dead (unless they're both zero, in which
256     // case they can't both be dead, so just mark the LHS bits as
257     // dead).
258     ComputeKnownBits(BitWidth, UserI->getOperand(0), UserI->getOperand(1));
259     if (OperandNo == 0)
260       AB &= ~Known2.Zero;
261     else
262       AB &= ~(Known.Zero & ~Known2.Zero);
263     break;
264   case Instruction::Or:
265     AB = AOut;
266 
267     // For bits that are known one, the corresponding bits in the
268     // other operand are dead (unless they're both one, in which
269     // case they can't both be dead, so just mark the LHS bits as
270     // dead).
271     ComputeKnownBits(BitWidth, UserI->getOperand(0), UserI->getOperand(1));
272     if (OperandNo == 0)
273       AB &= ~Known2.One;
274     else
275       AB &= ~(Known.One & ~Known2.One);
276     break;
277   case Instruction::Xor:
278   case Instruction::PHI:
279     AB = AOut;
280     break;
281   case Instruction::Trunc:
282     AB = AOut.zext(BitWidth);
283     break;
284   case Instruction::ZExt:
285     AB = AOut.trunc(BitWidth);
286     break;
287   case Instruction::SExt:
288     AB = AOut.trunc(BitWidth);
289     // Because the high input bit is replicated into the
290     // high-order bits of the result, if we need any of those
291     // bits, then we must keep the highest input bit.
292     if ((AOut & APInt::getHighBitsSet(AOut.getBitWidth(),
293                                       AOut.getBitWidth() - BitWidth))
294         .getBoolValue())
295       AB.setSignBit();
296     break;
297   case Instruction::Select:
298     if (OperandNo != 0)
299       AB = AOut;
300     break;
301   case Instruction::ExtractElement:
302     if (OperandNo == 0)
303       AB = AOut;
304     break;
305   case Instruction::InsertElement:
306   case Instruction::ShuffleVector:
307     if (OperandNo == 0 || OperandNo == 1)
308       AB = AOut;
309     break;
310   }
311 }
312 
313 bool DemandedBitsWrapperPass::runOnFunction(Function &F) {
314   auto &AC = getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);
315   auto &DT = getAnalysis<DominatorTreeWrapperPass>().getDomTree();
316   DB.emplace(F, AC, DT);
317   return false;
318 }
319 
320 void DemandedBitsWrapperPass::releaseMemory() {
321   DB.reset();
322 }
323 
324 void DemandedBits::performAnalysis() {
325   if (Analyzed)
326     // Analysis already completed for this function.
327     return;
328   Analyzed = true;
329 
330   Visited.clear();
331   AliveBits.clear();
332   DeadUses.clear();
333 
334   SmallSetVector<Instruction*, 16> Worklist;
335 
336   // Collect the set of "root" instructions that are known live.
337   for (Instruction &I : instructions(F)) {
338     if (!isAlwaysLive(&I))
339       continue;
340 
341     LLVM_DEBUG(dbgs() << "DemandedBits: Root: " << I << "\n");
342     // For integer-valued instructions, set up an initial empty set of alive
343     // bits and add the instruction to the work list. For other instructions
344     // add their operands to the work list (for integer values operands, mark
345     // all bits as live).
346     Type *T = I.getType();
347     if (T->isIntOrIntVectorTy()) {
348       if (AliveBits.try_emplace(&I, T->getScalarSizeInBits(), 0).second)
349         Worklist.insert(&I);
350 
351       continue;
352     }
353 
354     // Non-integer-typed instructions...
355     for (Use &OI : I.operands()) {
356       if (Instruction *J = dyn_cast<Instruction>(OI)) {
357         Type *T = J->getType();
358         if (T->isIntOrIntVectorTy())
359           AliveBits[J] = APInt::getAllOnes(T->getScalarSizeInBits());
360         else
361           Visited.insert(J);
362         Worklist.insert(J);
363       }
364     }
365     // To save memory, we don't add I to the Visited set here. Instead, we
366     // check isAlwaysLive on every instruction when searching for dead
367     // instructions later (we need to check isAlwaysLive for the
368     // integer-typed instructions anyway).
369   }
370 
371   // Propagate liveness backwards to operands.
372   while (!Worklist.empty()) {
373     Instruction *UserI = Worklist.pop_back_val();
374 
375     LLVM_DEBUG(dbgs() << "DemandedBits: Visiting: " << *UserI);
376     APInt AOut;
377     bool InputIsKnownDead = false;
378     if (UserI->getType()->isIntOrIntVectorTy()) {
379       AOut = AliveBits[UserI];
380       LLVM_DEBUG(dbgs() << " Alive Out: 0x"
381                         << Twine::utohexstr(AOut.getLimitedValue()));
382 
383       // If all bits of the output are dead, then all bits of the input
384       // are also dead.
385       InputIsKnownDead = !AOut && !isAlwaysLive(UserI);
386     }
387     LLVM_DEBUG(dbgs() << "\n");
388 
389     KnownBits Known, Known2;
390     bool KnownBitsComputed = false;
391     // Compute the set of alive bits for each operand. These are anded into the
392     // existing set, if any, and if that changes the set of alive bits, the
393     // operand is added to the work-list.
394     for (Use &OI : UserI->operands()) {
395       // We also want to detect dead uses of arguments, but will only store
396       // demanded bits for instructions.
397       Instruction *I = dyn_cast<Instruction>(OI);
398       if (!I && !isa<Argument>(OI))
399         continue;
400 
401       Type *T = OI->getType();
402       if (T->isIntOrIntVectorTy()) {
403         unsigned BitWidth = T->getScalarSizeInBits();
404         APInt AB = APInt::getAllOnes(BitWidth);
405         if (InputIsKnownDead) {
406           AB = APInt(BitWidth, 0);
407         } else {
408           // Bits of each operand that are used to compute alive bits of the
409           // output are alive, all others are dead.
410           determineLiveOperandBits(UserI, OI, OI.getOperandNo(), AOut, AB,
411                                    Known, Known2, KnownBitsComputed);
412 
413           // Keep track of uses which have no demanded bits.
414           if (AB.isZero())
415             DeadUses.insert(&OI);
416           else
417             DeadUses.erase(&OI);
418         }
419 
420         if (I) {
421           // If we've added to the set of alive bits (or the operand has not
422           // been previously visited), then re-queue the operand to be visited
423           // again.
424           auto Res = AliveBits.try_emplace(I);
425           if (Res.second || (AB |= Res.first->second) != Res.first->second) {
426             Res.first->second = std::move(AB);
427             Worklist.insert(I);
428           }
429         }
430       } else if (I && Visited.insert(I).second) {
431         Worklist.insert(I);
432       }
433     }
434   }
435 }
436 
437 APInt DemandedBits::getDemandedBits(Instruction *I) {
438   performAnalysis();
439 
440   auto Found = AliveBits.find(I);
441   if (Found != AliveBits.end())
442     return Found->second;
443 
444   const DataLayout &DL = I->getModule()->getDataLayout();
445   return APInt::getAllOnes(DL.getTypeSizeInBits(I->getType()->getScalarType()));
446 }
447 
448 APInt DemandedBits::getDemandedBits(Use *U) {
449   Type *T = (*U)->getType();
450   Instruction *UserI = cast<Instruction>(U->getUser());
451   const DataLayout &DL = UserI->getModule()->getDataLayout();
452   unsigned BitWidth = DL.getTypeSizeInBits(T->getScalarType());
453 
454   // We only track integer uses, everything else produces a mask with all bits
455   // set
456   if (!T->isIntOrIntVectorTy())
457     return APInt::getAllOnes(BitWidth);
458 
459   if (isUseDead(U))
460     return APInt(BitWidth, 0);
461 
462   performAnalysis();
463 
464   APInt AOut = getDemandedBits(UserI);
465   APInt AB = APInt::getAllOnes(BitWidth);
466   KnownBits Known, Known2;
467   bool KnownBitsComputed = false;
468 
469   determineLiveOperandBits(UserI, *U, U->getOperandNo(), AOut, AB, Known,
470                            Known2, KnownBitsComputed);
471 
472   return AB;
473 }
474 
475 bool DemandedBits::isInstructionDead(Instruction *I) {
476   performAnalysis();
477 
478   return !Visited.count(I) && AliveBits.find(I) == AliveBits.end() &&
479     !isAlwaysLive(I);
480 }
481 
482 bool DemandedBits::isUseDead(Use *U) {
483   // We only track integer uses, everything else is assumed live.
484   if (!(*U)->getType()->isIntOrIntVectorTy())
485     return false;
486 
487   // Uses by always-live instructions are never dead.
488   Instruction *UserI = cast<Instruction>(U->getUser());
489   if (isAlwaysLive(UserI))
490     return false;
491 
492   performAnalysis();
493   if (DeadUses.count(U))
494     return true;
495 
496   // If no output bits are demanded, no input bits are demanded and the use
497   // is dead. These uses might not be explicitly present in the DeadUses map.
498   if (UserI->getType()->isIntOrIntVectorTy()) {
499     auto Found = AliveBits.find(UserI);
500     if (Found != AliveBits.end() && Found->second.isZero())
501       return true;
502   }
503 
504   return false;
505 }
506 
507 void DemandedBits::print(raw_ostream &OS) {
508   auto PrintDB = [&](const Instruction *I, const APInt &A, Value *V = nullptr) {
509     OS << "DemandedBits: 0x" << Twine::utohexstr(A.getLimitedValue())
510        << " for ";
511     if (V) {
512       V->printAsOperand(OS, false);
513       OS << " in ";
514     }
515     OS << *I << '\n';
516   };
517 
518   performAnalysis();
519   for (auto &KV : AliveBits) {
520     Instruction *I = KV.first;
521     PrintDB(I, KV.second);
522 
523     for (Use &OI : I->operands()) {
524       PrintDB(I, getDemandedBits(&OI), OI);
525     }
526   }
527 }
528 
529 static APInt determineLiveOperandBitsAddCarry(unsigned OperandNo,
530                                               const APInt &AOut,
531                                               const KnownBits &LHS,
532                                               const KnownBits &RHS,
533                                               bool CarryZero, bool CarryOne) {
534   assert(!(CarryZero && CarryOne) &&
535          "Carry can't be zero and one at the same time");
536 
537   // The following check should be done by the caller, as it also indicates
538   // that LHS and RHS don't need to be computed.
539   //
540   // if (AOut.isMask())
541   //   return AOut;
542 
543   // Boundary bits' carry out is unaffected by their carry in.
544   APInt Bound = (LHS.Zero & RHS.Zero) | (LHS.One & RHS.One);
545 
546   // First, the alive carry bits are determined from the alive output bits:
547   // Let demand ripple to the right but only up to any set bit in Bound.
548   //   AOut         = -1----
549   //   Bound        = ----1-
550   //   ACarry&~AOut = --111-
551   APInt RBound = Bound.reverseBits();
552   APInt RAOut = AOut.reverseBits();
553   APInt RProp = RAOut + (RAOut | ~RBound);
554   APInt RACarry = RProp ^ ~RBound;
555   APInt ACarry = RACarry.reverseBits();
556 
557   // Then, the alive input bits are determined from the alive carry bits:
558   APInt NeededToMaintainCarryZero;
559   APInt NeededToMaintainCarryOne;
560   if (OperandNo == 0) {
561     NeededToMaintainCarryZero = LHS.Zero | ~RHS.Zero;
562     NeededToMaintainCarryOne = LHS.One | ~RHS.One;
563   } else {
564     NeededToMaintainCarryZero = RHS.Zero | ~LHS.Zero;
565     NeededToMaintainCarryOne = RHS.One | ~LHS.One;
566   }
567 
568   // As in computeForAddCarry
569   APInt PossibleSumZero = ~LHS.Zero + ~RHS.Zero + !CarryZero;
570   APInt PossibleSumOne = LHS.One + RHS.One + CarryOne;
571 
572   // The below is simplified from
573   //
574   // APInt CarryKnownZero = ~(PossibleSumZero ^ LHS.Zero ^ RHS.Zero);
575   // APInt CarryKnownOne = PossibleSumOne ^ LHS.One ^ RHS.One;
576   // APInt CarryUnknown = ~(CarryKnownZero | CarryKnownOne);
577   //
578   // APInt NeededToMaintainCarry =
579   //   (CarryKnownZero & NeededToMaintainCarryZero) |
580   //   (CarryKnownOne  & NeededToMaintainCarryOne) |
581   //   CarryUnknown;
582 
583   APInt NeededToMaintainCarry = (~PossibleSumZero | NeededToMaintainCarryZero) &
584                                 (PossibleSumOne | NeededToMaintainCarryOne);
585 
586   APInt AB = AOut | (ACarry & NeededToMaintainCarry);
587   return AB;
588 }
589 
590 APInt DemandedBits::determineLiveOperandBitsAdd(unsigned OperandNo,
591                                                 const APInt &AOut,
592                                                 const KnownBits &LHS,
593                                                 const KnownBits &RHS) {
594   return determineLiveOperandBitsAddCarry(OperandNo, AOut, LHS, RHS, true,
595                                           false);
596 }
597 
598 APInt DemandedBits::determineLiveOperandBitsSub(unsigned OperandNo,
599                                                 const APInt &AOut,
600                                                 const KnownBits &LHS,
601                                                 const KnownBits &RHS) {
602   KnownBits NRHS;
603   NRHS.Zero = RHS.One;
604   NRHS.One = RHS.Zero;
605   return determineLiveOperandBitsAddCarry(OperandNo, AOut, LHS, NRHS, false,
606                                           true);
607 }
608 
609 FunctionPass *llvm::createDemandedBitsWrapperPass() {
610   return new DemandedBitsWrapperPass();
611 }
612 
613 AnalysisKey DemandedBitsAnalysis::Key;
614 
615 DemandedBits DemandedBitsAnalysis::run(Function &F,
616                                              FunctionAnalysisManager &AM) {
617   auto &AC = AM.getResult<AssumptionAnalysis>(F);
618   auto &DT = AM.getResult<DominatorTreeAnalysis>(F);
619   return DemandedBits(F, AC, DT);
620 }
621 
622 PreservedAnalyses DemandedBitsPrinterPass::run(Function &F,
623                                                FunctionAnalysisManager &AM) {
624   AM.getResult<DemandedBitsAnalysis>(F).print(OS);
625   return PreservedAnalyses::all();
626 }
627