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
25namespace llvm {
26
27class 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.
35struct 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.
48class IPSCCPPass : public PassInfoMixin<IPSCCPPass> {
49 IPSCCPOptions Options;
50
51public:
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
64

source code of llvm/include/llvm/Transforms/IPO/SCCP.h