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