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
22namespace 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.
30class SimplifyCFGPass : public PassInfoMixin<SimplifyCFGPass> {
31  SimplifyCFGOptions Options;
32
33public:
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