Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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
  83.