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
21namespace llvm {
22
23/// \brief A pass to simplify and canonicalize the CFG of a function.
24///
25/// This pass iteratively simplifies the entire CFG of a function, removing
26/// unnecessary control flows and bringing it into the canonical form expected
27/// by the rest of the mid-level optimizer.
28class SimplifyCFGPass : public PassInfoMixin<SimplifyCFGPass> {
29  int BonusInstThreshold;
30  bool LateSimplifyCFG;
31
32public:
33  /// \brief Construct a pass with the default thresholds
34  /// and switch optimizations.
35  SimplifyCFGPass();
36
37  /// \brief Construct a pass with a specific bonus threshold
38  /// and optional switch optimizations.
39  SimplifyCFGPass(int BonusInstThreshold, bool LateSimplifyCFG);
40
41  /// \brief Run the pass over the function.
42  PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
43};
44
45}
46
47#endif
48