Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:44:41

0001 //===- LoopIdiomRecognize.h - Loop Idiom Recognize Pass ---------*- C++ -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 //
0009 // This pass implements an idiom recognizer that transforms simple loops into a
0010 // non-loop form.  In cases that this kicks in, it can be a significant
0011 // performance win.
0012 //
0013 //===----------------------------------------------------------------------===//
0014 
0015 #ifndef LLVM_TRANSFORMS_SCALAR_LOOPIDIOMRECOGNIZE_H
0016 #define LLVM_TRANSFORMS_SCALAR_LOOPIDIOMRECOGNIZE_H
0017 
0018 #include "llvm/Analysis/LoopAnalysisManager.h"
0019 #include "llvm/IR/PassManager.h"
0020 
0021 namespace llvm {
0022 
0023 class Loop;
0024 class LPMUpdater;
0025 
0026 /// Options to disable Loop Idiom Recognize, which can be shared with other
0027 /// passes.
0028 struct DisableLIRP {
0029   /// When true, the entire pass is disabled.
0030   static bool All;
0031 
0032   /// When true, Memset is disabled.
0033   static bool Memset;
0034 
0035   /// When true, Memcpy is disabled.
0036   static bool Memcpy;
0037 };
0038 
0039 /// Performs Loop Idiom Recognize Pass.
0040 class LoopIdiomRecognizePass : public PassInfoMixin<LoopIdiomRecognizePass> {
0041 public:
0042   PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM,
0043                         LoopStandardAnalysisResults &AR, LPMUpdater &U);
0044 };
0045 
0046 } // end namespace llvm
0047 
0048 #endif // LLVM_TRANSFORMS_SCALAR_LOOPIDIOMRECOGNIZE_H