Home | History | Annotate | Download | only in Scalar
      1 //===- SimplifyCFG.h - Simplify and canonicalize the CFG --------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 /// \file
     10 /// This file provides the interface for the pass responsible for both
     11 /// simplifying and canonicalizing the CFG.
     12 ///
     13 //===----------------------------------------------------------------------===//
     14 
     15 #ifndef LLVM_TRANSFORMS_SCALAR_SIMPLIFYCFG_H
     16 #define LLVM_TRANSFORMS_SCALAR_SIMPLIFYCFG_H
     17 
     18 #include "llvm/IR/Function.h"
     19 #include "llvm/IR/PassManager.h"
     20 #include "llvm/Transforms/Utils/Local.h"
     21 
     22 namespace llvm {
     23 
     24 /// A pass to simplify and canonicalize the CFG of a function.
     25 ///
     26 /// This pass iteratively simplifies the entire CFG of a function. It may change
     27 /// or remove control flow to put the CFG into a canonical form expected by
     28 /// other passes of the mid-level optimizer. Depending on the specified options,
     29 /// it may further optimize control-flow to create non-canonical forms.
     30 class SimplifyCFGPass : public PassInfoMixin<SimplifyCFGPass> {
     31   SimplifyCFGOptions Options;
     32 
     33 public:
     34   /// Construct a pass with default options.
     35   SimplifyCFGPass();
     36 
     37   /// Construct a pass with optional optimizations.
     38   SimplifyCFGPass(const SimplifyCFGOptions &PassOptions);
     39 
     40   /// \brief Run the pass over the function.
     41   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
     42 };
     43 
     44 }
     45 
     46 #endif
     47