1//===- SimplifyCFGOptions.h - Control structure for SimplifyCFG -*- 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// A set of parameters used to control the transforms in the SimplifyCFG pass.
10// Options may change depending on the position in the optimization pipeline.
11// For example, canonical form that includes switches and branches may later be
12// replaced by lookup tables and selects.
13//
14//===----------------------------------------------------------------------===//
15
16#ifndef LLVM_TRANSFORMS_UTILS_SIMPLIFYCFGOPTIONS_H
17#define LLVM_TRANSFORMS_UTILS_SIMPLIFYCFGOPTIONS_H
18
19namespace llvm {
20
21class AssumptionCache;
22
23struct SimplifyCFGOptions {
24 int BonusInstThreshold = 1;
25 bool ForwardSwitchCondToPhi = false;
26 bool ConvertSwitchRangeToICmp = false;
27 bool ConvertSwitchToLookupTable = false;
28 bool NeedCanonicalLoop = true;
29 bool HoistCommonInsts = false;
30 bool SinkCommonInsts = false;
31 bool SimplifyCondBranch = true;
32 bool SpeculateBlocks = true;
33
34 AssumptionCache *AC = nullptr;
35
36 // Support 'builder' pattern to set members by name at construction time.
37 SimplifyCFGOptions &bonusInstThreshold(int I) {
38 BonusInstThreshold = I;
39 return *this;
40 }
41 SimplifyCFGOptions &forwardSwitchCondToPhi(bool B) {
42 ForwardSwitchCondToPhi = B;
43 return *this;
44 }
45 SimplifyCFGOptions &convertSwitchRangeToICmp(bool B) {
46 ConvertSwitchRangeToICmp = B;
47 return *this;
48 }
49 SimplifyCFGOptions &convertSwitchToLookupTable(bool B) {
50 ConvertSwitchToLookupTable = B;
51 return *this;
52 }
53 SimplifyCFGOptions &needCanonicalLoops(bool B) {
54 NeedCanonicalLoop = B;
55 return *this;
56 }
57 SimplifyCFGOptions &hoistCommonInsts(bool B) {
58 HoistCommonInsts = B;
59 return *this;
60 }
61 SimplifyCFGOptions &sinkCommonInsts(bool B) {
62 SinkCommonInsts = B;
63 return *this;
64 }
65 SimplifyCFGOptions &setAssumptionCache(AssumptionCache *Cache) {
66 AC = Cache;
67 return *this;
68 }
69 SimplifyCFGOptions &setSimplifyCondBranch(bool B) {
70 SimplifyCondBranch = B;
71 return *this;
72 }
73
74 SimplifyCFGOptions &speculateBlocks(bool B) {
75 SpeculateBlocks = B;
76 return *this;
77 }
78};
79
80} // namespace llvm
81
82#endif // LLVM_TRANSFORMS_UTILS_SIMPLIFYCFGOPTIONS_H
83

source code of llvm/include/llvm/Transforms/Utils/SimplifyCFGOptions.h