xref: /llvm-project/llvm/include/llvm/Transforms/Vectorize/LoopIdiomVectorize.h (revision 8b55d342b6375ec64985272020d21f29422dce6a)
137e309f1SMin-Yih Hsu //===----------LoopIdiomVectorize.h -----------------------------*- C++ -*-===//
237e309f1SMin-Yih Hsu //
337e309f1SMin-Yih Hsu // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
437e309f1SMin-Yih Hsu // See https://llvm.org/LICENSE.txt for license information.
537e309f1SMin-Yih Hsu // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
637e309f1SMin-Yih Hsu //
737e309f1SMin-Yih Hsu //===----------------------------------------------------------------------===//
837e309f1SMin-Yih Hsu 
937e309f1SMin-Yih Hsu #ifndef LLVM_LIB_TRANSFORMS_VECTORIZE_LOOPIDIOMVECTORIZE_H
1037e309f1SMin-Yih Hsu #define LLVM_LIB_TRANSFORMS_VECTORIZE_LOOPIDIOMVECTORIZE_H
1137e309f1SMin-Yih Hsu 
1237e309f1SMin-Yih Hsu #include "llvm/IR/PassManager.h"
1337e309f1SMin-Yih Hsu #include "llvm/Transforms/Scalar/LoopPassManager.h"
1437e309f1SMin-Yih Hsu 
1537e309f1SMin-Yih Hsu namespace llvm {
16*8b55d342SMin-Yih Hsu enum class LoopIdiomVectorizeStyle { Masked, Predicated };
17*8b55d342SMin-Yih Hsu 
18*8b55d342SMin-Yih Hsu class LoopIdiomVectorizePass : public PassInfoMixin<LoopIdiomVectorizePass> {
19*8b55d342SMin-Yih Hsu   LoopIdiomVectorizeStyle VectorizeStyle = LoopIdiomVectorizeStyle::Masked;
20*8b55d342SMin-Yih Hsu 
21*8b55d342SMin-Yih Hsu   // The VF used in vectorizing the byte compare pattern.
22*8b55d342SMin-Yih Hsu   unsigned ByteCompareVF = 16;
23*8b55d342SMin-Yih Hsu 
24*8b55d342SMin-Yih Hsu public:
25*8b55d342SMin-Yih Hsu   LoopIdiomVectorizePass() = default;
LoopIdiomVectorizePass(LoopIdiomVectorizeStyle S)26*8b55d342SMin-Yih Hsu   explicit LoopIdiomVectorizePass(LoopIdiomVectorizeStyle S)
27*8b55d342SMin-Yih Hsu       : VectorizeStyle(S) {}
28*8b55d342SMin-Yih Hsu 
LoopIdiomVectorizePass(LoopIdiomVectorizeStyle S,unsigned BCVF)29*8b55d342SMin-Yih Hsu   LoopIdiomVectorizePass(LoopIdiomVectorizeStyle S, unsigned BCVF)
30*8b55d342SMin-Yih Hsu       : VectorizeStyle(S), ByteCompareVF(BCVF) {}
31*8b55d342SMin-Yih Hsu 
3237e309f1SMin-Yih Hsu   PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM,
3337e309f1SMin-Yih Hsu                         LoopStandardAnalysisResults &AR, LPMUpdater &U);
3437e309f1SMin-Yih Hsu };
3537e309f1SMin-Yih Hsu } // namespace llvm
3637e309f1SMin-Yih Hsu #endif // LLVM_LIB_TRANSFORMS_VECTORIZE_LOOPIDIOMVECTORIZE_H
37