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
//===- SCCP.h - Sparse Conditional Constant Propagation ---------*- C++ -*-===//
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 pass implements  interprocedural sparse conditional constant
10
// propagation and merging.
11
//
12
// Specifically, this:
13
//   * Assumes values are constant unless proven otherwise
14
//   * Assumes BasicBlocks are dead unless proven otherwise
15
//   * Proves values to be constant, and replaces them with constants
16
//   * Proves conditional branches to be unconditional
17
//
18
//===----------------------------------------------------------------------===//
19
 
20
#ifndef LLVM_TRANSFORMS_IPO_SCCP_H
21
#define LLVM_TRANSFORMS_IPO_SCCP_H
22
 
23
#include "llvm/IR/PassManager.h"
24
 
25
namespace llvm {
26
 
27
class Module;
28
 
29
/// A set of parameters to control various transforms performed by IPSCCP pass.
30
/// Each of the boolean parameters can be set to:
31
///   true - enabling the transformation.
32
///   false - disabling the transformation.
33
/// Intended use is to create a default object, modify parameters with
34
/// additional setters and then pass it to IPSCCP.
35
struct IPSCCPOptions {
36
  bool AllowFuncSpec;
37
 
38
  IPSCCPOptions(bool AllowFuncSpec = true) : AllowFuncSpec(AllowFuncSpec) {}
39
 
40
  /// Enables or disables Specialization of Functions.
41
  IPSCCPOptions &setFuncSpec(bool FuncSpec) {
42
    AllowFuncSpec = FuncSpec;
43
    return *this;
44
  }
45
};
46
 
47
/// Pass to perform interprocedural constant propagation.
48
class IPSCCPPass : public PassInfoMixin<IPSCCPPass> {
49
  IPSCCPOptions Options;
50
 
51
public:
52
  IPSCCPPass() = default;
53
 
54
  IPSCCPPass(IPSCCPOptions Options) : Options(Options) {}
55
 
56
  PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
57
 
58
  bool isFuncSpecEnabled() const { return Options.AllowFuncSpec; }
59
};
60
 
61
} // end namespace llvm
62
 
63
#endif // LLVM_TRANSFORMS_IPO_SCCP_H