summaryrefslogtreecommitdiff
path: root/include/llvm/Analysis/DemandedBits.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/Analysis/DemandedBits.h')
-rw-r--r--include/llvm/Analysis/DemandedBits.h39
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 ∾
- 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 ∾
+ 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