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
//===- 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
 
19
namespace llvm {
20
 
21
class AssumptionCache;
22
 
23
struct 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 FoldTwoEntryPHINode = 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 &setFoldTwoEntryPHINode(bool B) {
75
    FoldTwoEntryPHINode = B;
76
    return *this;
77
  }
78
};
79
 
80
} // namespace llvm
81
 
82
#endif // LLVM_TRANSFORMS_UTILS_SIMPLIFYCFGOPTIONS_H