- //===-- Float2Int.h - Demote floating point ops to work on integers -------===// 
- // 
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 
- // See https://llvm.org/LICENSE.txt for license information. 
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 
- // 
- //===----------------------------------------------------------------------===// 
- // 
- // This file provides the Float2Int pass, which aims to demote floating 
- // point operations to work on integers, where that is losslessly possible. 
- // 
- //===----------------------------------------------------------------------===// 
-   
- #ifndef LLVM_TRANSFORMS_SCALAR_FLOAT2INT_H 
- #define LLVM_TRANSFORMS_SCALAR_FLOAT2INT_H 
-   
- #include "llvm/ADT/EquivalenceClasses.h" 
- #include "llvm/ADT/MapVector.h" 
- #include "llvm/ADT/SetVector.h" 
- #include "llvm/IR/ConstantRange.h" 
- #include "llvm/IR/PassManager.h" 
-   
- namespace llvm { 
- class DominatorTree; 
- class Function; 
- class Instruction; 
- class LLVMContext; 
- class Type; 
- class Value; 
-   
- class Float2IntPass : public PassInfoMixin<Float2IntPass> { 
- public: 
-   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); 
-   
-   // Glue for old PM. 
-   bool runImpl(Function &F, const DominatorTree &DT); 
-   
- private: 
-   void findRoots(Function &F, const DominatorTree &DT); 
-   void seen(Instruction *I, ConstantRange R); 
-   ConstantRange badRange(); 
-   ConstantRange unknownRange(); 
-   ConstantRange validateRange(ConstantRange R); 
-   std::optional<ConstantRange> calcRange(Instruction *I); 
-   void walkBackwards(); 
-   void walkForwards(); 
-   bool validateAndTransform(); 
-   Value *convert(Instruction *I, Type *ToTy); 
-   void cleanup(); 
-   
-   MapVector<Instruction *, ConstantRange> SeenInsts; 
-   SmallSetVector<Instruction *, 8> Roots; 
-   EquivalenceClasses<Instruction *> ECs; 
-   MapVector<Instruction *, Value *> ConvertedInsts; 
-   LLVMContext *Ctx; 
- }; 
- } 
- #endif // LLVM_TRANSFORMS_SCALAR_FLOAT2INT_H 
-