Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

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

  1. //===- SCCP.h - Sparse Conditional Constant Propagation ---------*- 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. // This pass implements  interprocedural sparse conditional constant
  10. // propagation and merging.
  11. //
  12. // Specifically, this:
  13. //   * Assumes values are constant unless proven otherwise
  14. //   * Assumes BasicBlocks are dead unless proven otherwise
  15. //   * Proves values to be constant, and replaces them with constants
  16. //   * Proves conditional branches to be unconditional
  17. //
  18. //===----------------------------------------------------------------------===//
  19.  
  20. #ifndef LLVM_TRANSFORMS_IPO_SCCP_H
  21. #define LLVM_TRANSFORMS_IPO_SCCP_H
  22.  
  23. #include "llvm/IR/PassManager.h"
  24.  
  25. namespace llvm {
  26.  
  27. class Module;
  28.  
  29. /// A set of parameters to control various transforms performed by IPSCCP pass.
  30. /// Each of the boolean parameters can be set to:
  31. ///   true - enabling the transformation.
  32. ///   false - disabling the transformation.
  33. /// Intended use is to create a default object, modify parameters with
  34. /// additional setters and then pass it to IPSCCP.
  35. struct IPSCCPOptions {
  36.   bool AllowFuncSpec;
  37.  
  38.   IPSCCPOptions(bool AllowFuncSpec = true) : AllowFuncSpec(AllowFuncSpec) {}
  39.  
  40.   /// Enables or disables Specialization of Functions.
  41.   IPSCCPOptions &setFuncSpec(bool FuncSpec) {
  42.     AllowFuncSpec = FuncSpec;
  43.     return *this;
  44.   }
  45. };
  46.  
  47. /// Pass to perform interprocedural constant propagation.
  48. class IPSCCPPass : public PassInfoMixin<IPSCCPPass> {
  49.   IPSCCPOptions Options;
  50.  
  51. public:
  52.   IPSCCPPass() = default;
  53.  
  54.   IPSCCPPass(IPSCCPOptions Options) : Options(Options) {}
  55.  
  56.   PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
  57.  
  58.   bool isFuncSpecEnabled() const { return Options.AllowFuncSpec; }
  59. };
  60.  
  61. } // end namespace llvm
  62.  
  63. #endif // LLVM_TRANSFORMS_IPO_SCCP_H
  64.