1 | //===- LoopStrengthReduce.h - Loop Strength Reduce Pass ---------*- C++ -*-===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | // |
9 | // This transformation analyzes and transforms the induction variables (and |
10 | // computations derived from them) into forms suitable for efficient execution |
11 | // on the target. |
12 | // |
13 | // This pass performs a strength reduction on array references inside loops that |
14 | // have as one or more of their components the loop induction variable, it |
15 | // rewrites expressions to take advantage of scaled-index addressing modes |
16 | // available on the target, and it performs a variety of other optimizations |
17 | // related to loop induction variables. |
18 | // |
19 | //===----------------------------------------------------------------------===// |
20 | |
21 | #ifndef LLVM_TRANSFORMS_SCALAR_LOOPSTRENGTHREDUCE_H |
22 | #define LLVM_TRANSFORMS_SCALAR_LOOPSTRENGTHREDUCE_H |
23 | |
24 | #include "llvm/Analysis/LoopAnalysisManager.h" |
25 | #include "llvm/IR/PassManager.h" |
26 | |
27 | namespace llvm { |
28 | |
29 | class Loop; |
30 | class LPMUpdater; |
31 | |
32 | /// Performs Loop Strength Reduce Pass. |
33 | class LoopStrengthReducePass : public PassInfoMixin<LoopStrengthReducePass> { |
34 | public: |
35 | PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM, |
36 | LoopStandardAnalysisResults &AR, LPMUpdater &U); |
37 | }; |
38 | |
39 | } // end namespace llvm |
40 | |
41 | #endif // LLVM_TRANSFORMS_SCALAR_LOOPSTRENGTHREDUCE_H |
42 | |