//===- 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 ConvertSwitchRangeToICmp = 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 &convertSwitchRangeToICmp(bool B) {
 
    ConvertSwitchRangeToICmp = 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