blob: fb3a7490346f409f9569617a7d9ed8dc44394741 [file] [log] [blame]
//===- 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