1//===- EarlyCSE.h - Simple and fast CSE pass --------------------*- 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 a simple, fast CSE pass.
11///
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_TRANSFORMS_SCALAR_EARLYCSE_H
15#define LLVM_TRANSFORMS_SCALAR_EARLYCSE_H
16
17#include "llvm/IR/Function.h"
18#include "llvm/IR/PassManager.h"
19
20namespace llvm {
21
22/// \brief A simple and fast domtree-based CSE pass.
23///
24/// This pass does a simple depth-first walk over the dominator tree,
25/// eliminating trivially redundant instructions and using instsimplify to
26/// canonicalize things as it goes. It is intended to be fast and catch obvious
27/// cases so that instcombine and other passes are more effective. It is
28/// expected that a later pass of GVN will catch the interesting/hard cases.
29class EarlyCSEPass {
30public:
31  static StringRef name() { return "EarlyCSEPass"; }
32
33  /// \brief Run the pass over the function.
34  PreservedAnalyses run(Function &F, AnalysisManager<Function> *AM);
35};
36
37}
38
39#endif
40