1//===- LoopIdiomRecognize.h - Loop Idiom Recognize 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 pass implements an idiom recognizer that transforms simple loops into a
10// non-loop form. In cases that this kicks in, it can be a significant
11// performance win.
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef LLVM_TRANSFORMS_SCALAR_LOOPIDIOMRECOGNIZE_H
16#define LLVM_TRANSFORMS_SCALAR_LOOPIDIOMRECOGNIZE_H
17
18#include "llvm/Analysis/LoopAnalysisManager.h"
19#include "llvm/IR/PassManager.h"
20
21namespace llvm {
22
23class Loop;
24class LPMUpdater;
25
26/// Options to disable Loop Idiom Recognize, which can be shared with other
27/// passes.
28struct DisableLIRP {
29 /// When true, the entire pass is disabled.
30 static bool All;
31
32 /// When true, Memset is disabled.
33 static bool Memset;
34
35 /// When true, Memcpy is disabled.
36 static bool Memcpy;
37};
38
39/// Performs Loop Idiom Recognize Pass.
40class LoopIdiomRecognizePass : public PassInfoMixin<LoopIdiomRecognizePass> {
41public:
42 PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM,
43 LoopStandardAnalysisResults &AR, LPMUpdater &U);
44};
45
46} // end namespace llvm
47
48#endif // LLVM_TRANSFORMS_SCALAR_LOOPIDIOMRECOGNIZE_H
49

source code of llvm/include/llvm/Transforms/Scalar/LoopIdiomRecognize.h