78 lines
2.3 KiB
C
78 lines
2.3 KiB
C
|
//===- SimplifyCFGOptions.h - Control structure for SimplifyCFG -*- C++ -*-===//
|
||
|
//
|
||
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||
|
// See https://llvm.org/LICENSE.txt for license information.
|
||
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||
|
//
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
//
|
||
|
// A set of parameters used to control the transforms in the SimplifyCFG pass.
|
||
|
// Options may change depending on the position in the optimization pipeline.
|
||
|
// For example, canonical form that includes switches and branches may later be
|
||
|
// replaced by lookup tables and selects.
|
||
|
//
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
|
||
|
#ifndef LLVM_TRANSFORMS_UTILS_SIMPLIFYCFGOPTIONS_H
|
||
|
#define LLVM_TRANSFORMS_UTILS_SIMPLIFYCFGOPTIONS_H
|
||
|
|
||
|
namespace llvm {
|
||
|
|
||
|
class AssumptionCache;
|
||
|
|
||
|
struct SimplifyCFGOptions {
|
||
|
int BonusInstThreshold = 1;
|
||
|
bool ForwardSwitchCondToPhi = false;
|
||
|
bool ConvertSwitchToLookupTable = false;
|
||
|
bool NeedCanonicalLoop = true;
|
||
|
bool HoistCommonInsts = false;
|
||
|
bool SinkCommonInsts = false;
|
||
|
bool SimplifyCondBranch = true;
|
||
|
bool FoldTwoEntryPHINode = true;
|
||
|
|
||
|
AssumptionCache *AC = nullptr;
|
||
|
|
||
|
// Support 'builder' pattern to set members by name at construction time.
|
||
|
SimplifyCFGOptions &bonusInstThreshold(int I) {
|
||
|
BonusInstThreshold = I;
|
||
|
return *this;
|
||
|
}
|
||
|
SimplifyCFGOptions &forwardSwitchCondToPhi(bool B) {
|
||
|
ForwardSwitchCondToPhi = B;
|
||
|
return *this;
|
||
|
}
|
||
|
SimplifyCFGOptions &convertSwitchToLookupTable(bool B) {
|
||
|
ConvertSwitchToLookupTable = B;
|
||
|
return *this;
|
||
|
}
|
||
|
SimplifyCFGOptions &needCanonicalLoops(bool B) {
|
||
|
NeedCanonicalLoop = B;
|
||
|
return *this;
|
||
|
}
|
||
|
SimplifyCFGOptions &hoistCommonInsts(bool B) {
|
||
|
HoistCommonInsts = B;
|
||
|
return *this;
|
||
|
}
|
||
|
SimplifyCFGOptions &sinkCommonInsts(bool B) {
|
||
|
SinkCommonInsts = B;
|
||
|
return *this;
|
||
|
}
|
||
|
SimplifyCFGOptions &setAssumptionCache(AssumptionCache *Cache) {
|
||
|
AC = Cache;
|
||
|
return *this;
|
||
|
}
|
||
|
SimplifyCFGOptions &setSimplifyCondBranch(bool B) {
|
||
|
SimplifyCondBranch = B;
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
SimplifyCFGOptions &setFoldTwoEntryPHINode(bool B) {
|
||
|
FoldTwoEntryPHINode = B;
|
||
|
return *this;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
} // namespace llvm
|
||
|
|
||
|
#endif // LLVM_TRANSFORMS_UTILS_SIMPLIFYCFGOPTIONS_H
|