diff options
Diffstat (limited to 'include/llvm/Analysis/DemandedBits.h')
| -rw-r--r-- | include/llvm/Analysis/DemandedBits.h | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/include/llvm/Analysis/DemandedBits.h b/include/llvm/Analysis/DemandedBits.h index e52c66f361c3..ab8668256ba2 100644 --- a/include/llvm/Analysis/DemandedBits.h +++ b/include/llvm/Analysis/DemandedBits.h @@ -1,4 +1,4 @@ -//===-- llvm/Analysis/DemandedBits.h - Determine demanded bits --*- C++ -*-===// +//===- llvm/Analysis/DemandedBits.h - Determine demanded bits ---*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -24,44 +24,45 @@ #include "llvm/ADT/APInt.h" #include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/Optional.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/IR/PassManager.h" #include "llvm/Pass.h" namespace llvm { -class FunctionPass; +class AssumptionCache; +class DominatorTree; class Function; class Instruction; -class DominatorTree; -class AssumptionCache; struct KnownBits; +class raw_ostream; class DemandedBits { public: DemandedBits(Function &F, AssumptionCache &AC, DominatorTree &DT) : - F(F), AC(AC), DT(DT), Analyzed(false) {} + F(F), AC(AC), DT(DT) {} /// Return the bits demanded from instruction I. APInt getDemandedBits(Instruction *I); /// Return true if, during analysis, I could not be reached. bool isInstructionDead(Instruction *I); - + void print(raw_ostream &OS); private: - Function &F; - AssumptionCache &AC; - DominatorTree &DT; - void performAnalysis(); void determineLiveOperandBits(const Instruction *UserI, const Instruction *I, unsigned OperandNo, const APInt &AOut, APInt &AB, KnownBits &Known, KnownBits &Known2); - bool Analyzed; + Function &F; + AssumptionCache &AC; + DominatorTree &DT; + + bool Analyzed = false; // The set of visited instructions (non-integer-typed only). SmallPtrSet<Instruction*, 32> Visited; @@ -71,16 +72,18 @@ private: class DemandedBitsWrapperPass : public FunctionPass { private: mutable Optional<DemandedBits> DB; + public: static char ID; // Pass identification, replacement for typeid + DemandedBitsWrapperPass(); bool runOnFunction(Function &F) override; void getAnalysisUsage(AnalysisUsage &AU) const override; - + /// Clean up memory in between runs void releaseMemory() override; - + DemandedBits &getDemandedBits() { return *DB; } void print(raw_ostream &OS, const Module *M) const override; @@ -89,11 +92,12 @@ public: /// An analysis that produces \c DemandedBits for a function. class DemandedBitsAnalysis : public AnalysisInfoMixin<DemandedBitsAnalysis> { friend AnalysisInfoMixin<DemandedBitsAnalysis>; + static AnalysisKey Key; public: - /// \brief Provide the result typedef for this analysis pass. - typedef DemandedBits Result; + /// \brief Provide the result type for this analysis pass. + using Result = DemandedBits; /// \brief Run the analysis pass over a function and produce demanded bits /// information. @@ -106,12 +110,13 @@ class DemandedBitsPrinterPass : public PassInfoMixin<DemandedBitsPrinterPass> { public: explicit DemandedBitsPrinterPass(raw_ostream &OS) : OS(OS) {} + PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); }; /// Create a demanded bits analysis pass. FunctionPass *createDemandedBitsWrapperPass(); -} // End llvm namespace +} // end namespace llvm -#endif +#endif // LLVM_ANALYSIS_DEMANDED_BITS_H |
