Home | History | Annotate | Line # | Download | only in Scalar
      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 
     21 namespace llvm {
     22 
     23 class Loop;
     24 class LPMUpdater;
     25 
     26 /// Options to disable Loop Idiom Recognize, which can be shared with other
     27 /// passes.
     28 struct 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.
     40 class LoopIdiomRecognizePass : public PassInfoMixin<LoopIdiomRecognizePass> {
     41 public:
     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