Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===-- Float2Int.h - Demote floating point ops to work on integers -------===//
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 file provides the Float2Int pass, which aims to demote floating
10
// point operations to work on integers, where that is losslessly possible.
11
//
12
//===----------------------------------------------------------------------===//
13
 
14
#ifndef LLVM_TRANSFORMS_SCALAR_FLOAT2INT_H
15
#define LLVM_TRANSFORMS_SCALAR_FLOAT2INT_H
16
 
17
#include "llvm/ADT/EquivalenceClasses.h"
18
#include "llvm/ADT/MapVector.h"
19
#include "llvm/ADT/SetVector.h"
20
#include "llvm/IR/ConstantRange.h"
21
#include "llvm/IR/PassManager.h"
22
 
23
namespace llvm {
24
class DominatorTree;
25
class Function;
26
class Instruction;
27
class LLVMContext;
28
class Type;
29
class Value;
30
 
31
class Float2IntPass : public PassInfoMixin<Float2IntPass> {
32
public:
33
  PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
34
 
35
  // Glue for old PM.
36
  bool runImpl(Function &F, const DominatorTree &DT);
37
 
38
private:
39
  void findRoots(Function &F, const DominatorTree &DT);
40
  void seen(Instruction *I, ConstantRange R);
41
  ConstantRange badRange();
42
  ConstantRange unknownRange();
43
  ConstantRange validateRange(ConstantRange R);
44
  std::optional<ConstantRange> calcRange(Instruction *I);
45
  void walkBackwards();
46
  void walkForwards();
47
  bool validateAndTransform();
48
  Value *convert(Instruction *I, Type *ToTy);
49
  void cleanup();
50
 
51
  MapVector<Instruction *, ConstantRange> SeenInsts;
52
  SmallSetVector<Instruction *, 8> Roots;
53
  EquivalenceClasses<Instruction *> ECs;
54
  MapVector<Instruction *, Value *> ConvertedInsts;
55
  LLVMContext *Ctx;
56
};
57
}
58
#endif // LLVM_TRANSFORMS_SCALAR_FLOAT2INT_H