diff options
Diffstat (limited to 'llvm/lib/Transforms/AggressiveInstCombine/AggressiveInstCombineInternal.h')
| -rw-r--r-- | llvm/lib/Transforms/AggressiveInstCombine/AggressiveInstCombineInternal.h | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/llvm/lib/Transforms/AggressiveInstCombine/AggressiveInstCombineInternal.h b/llvm/lib/Transforms/AggressiveInstCombine/AggressiveInstCombineInternal.h index 42bcadfc7dcd..5d69e26d6ecc 100644 --- a/llvm/lib/Transforms/AggressiveInstCombine/AggressiveInstCombineInternal.h +++ b/llvm/lib/Transforms/AggressiveInstCombine/AggressiveInstCombineInternal.h @@ -17,6 +17,8 @@ #include "llvm/ADT/MapVector.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/Analysis/ValueTracking.h" +#include "llvm/Support/KnownBits.h" using namespace llvm; @@ -39,16 +41,18 @@ using namespace llvm; //===----------------------------------------------------------------------===// namespace llvm { - class DataLayout; - class DominatorTree; - class Function; - class Instruction; - class TargetLibraryInfo; - class TruncInst; - class Type; - class Value; +class AssumptionCache; +class DataLayout; +class DominatorTree; +class Function; +class Instruction; +class TargetLibraryInfo; +class TruncInst; +class Type; +class Value; class TruncInstCombine { + AssumptionCache &AC; TargetLibraryInfo &TLI; const DataLayout &DL; const DominatorTree &DT; @@ -75,9 +79,9 @@ class TruncInstCombine { MapVector<Instruction *, Info> InstInfoMap; public: - TruncInstCombine(TargetLibraryInfo &TLI, const DataLayout &DL, - const DominatorTree &DT) - : TLI(TLI), DL(DL), DT(DT), CurrentTruncInst(nullptr) {} + TruncInstCombine(AssumptionCache &AC, TargetLibraryInfo &TLI, + const DataLayout &DL, const DominatorTree &DT) + : AC(AC), TLI(TLI), DL(DL), DT(DT), CurrentTruncInst(nullptr) {} /// Perform TruncInst pattern optimization on given function. bool run(Function &F); @@ -104,6 +108,18 @@ private: /// to be reduced. Type *getBestTruncatedType(); + KnownBits computeKnownBits(const Value *V) const { + return llvm::computeKnownBits(V, DL, /*Depth=*/0, &AC, + /*CtxI=*/cast<Instruction>(CurrentTruncInst), + &DT); + } + + unsigned ComputeNumSignBits(const Value *V) const { + return llvm::ComputeNumSignBits( + V, DL, /*Depth=*/0, &AC, /*CtxI=*/cast<Instruction>(CurrentTruncInst), + &DT); + } + /// Given a \p V value and a \p SclTy scalar type return the generated reduced /// value of \p V based on the type \p SclTy. /// |
