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