1//===- LoopStrengthReduce.h - Loop Strength Reduce 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// This transformation analyzes and transforms the induction variables (and
11// computations derived from them) into forms suitable for efficient execution
12// on the target.
13//
14// This pass performs a strength reduction on array references inside loops that
15// have as one or more of their components the loop induction variable, it
16// rewrites expressions to take advantage of scaled-index addressing modes
17// available on the target, and it performs a variety of other optimizations
18// related to loop induction variables.
19//
20//===----------------------------------------------------------------------===//
21
22#ifndef LLVM_TRANSFORMS_SCALAR_LOOPSTRENGTHREDUCE_H
23#define LLVM_TRANSFORMS_SCALAR_LOOPSTRENGTHREDUCE_H
24
25#include "llvm/Analysis/LoopInfo.h"
26#include "llvm/IR/PassManager.h"
27#include "llvm/Transforms/Scalar/LoopPassManager.h"
28
29namespace llvm {
30
31/// Performs Loop Strength Reduce Pass.
32class LoopStrengthReducePass : public PassInfoMixin<LoopStrengthReducePass> {
33public:
34  PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM,
35                        LoopStandardAnalysisResults &AR, LPMUpdater &U);
36};
37} // end namespace llvm
38
39#endif // LLVM_TRANSFORMS_SCALAR_LOOPSTRENGTHREDUCE_H
40