- //===-- Vectorize.h - Vectorization Transformations -------------*- C++ -*-===// 
- // 
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 
- // See https://llvm.org/LICENSE.txt for license information. 
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 
- // 
- //===----------------------------------------------------------------------===// 
- // 
- // This header file defines prototypes for accessor functions that expose passes 
- // in the Vectorize transformations library. 
- // 
- //===----------------------------------------------------------------------===// 
-   
- #ifndef LLVM_TRANSFORMS_VECTORIZE_H 
- #define LLVM_TRANSFORMS_VECTORIZE_H 
-   
- namespace llvm { 
- class BasicBlock; 
- class Pass; 
-   
- //===----------------------------------------------------------------------===// 
- /// Vectorize configuration. 
- struct VectorizeConfig { 
-   //===--------------------------------------------------------------------===// 
-   // Target architecture related parameters 
-   
-   /// The size of the native vector registers. 
-   unsigned VectorBits; 
-   
-   /// Vectorize boolean values. 
-   bool VectorizeBools; 
-   
-   /// Vectorize integer values. 
-   bool VectorizeInts; 
-   
-   /// Vectorize floating-point values. 
-   bool VectorizeFloats; 
-   
-   /// Vectorize pointer values. 
-   bool VectorizePointers; 
-   
-   /// Vectorize casting (conversion) operations. 
-   bool VectorizeCasts; 
-   
-   /// Vectorize floating-point math intrinsics. 
-   bool VectorizeMath; 
-   
-   /// Vectorize bit intrinsics. 
-   bool VectorizeBitManipulations; 
-   
-   /// Vectorize the fused-multiply-add intrinsic. 
-   bool VectorizeFMA; 
-   
-   /// Vectorize select instructions. 
-   bool VectorizeSelect; 
-   
-   /// Vectorize comparison instructions. 
-   bool VectorizeCmp; 
-   
-   /// Vectorize getelementptr instructions. 
-   bool VectorizeGEP; 
-   
-   /// Vectorize loads and stores. 
-   bool VectorizeMemOps; 
-   
-   /// Only generate aligned loads and stores. 
-   bool AlignedOnly; 
-   
-   //===--------------------------------------------------------------------===// 
-   // Misc parameters 
-   
-   /// The required chain depth for vectorization. 
-   unsigned ReqChainDepth; 
-   
-   /// The maximum search distance for instruction pairs. 
-   unsigned SearchLimit; 
-   
-   /// The maximum number of candidate pairs with which to use a full 
-   ///        cycle check. 
-   unsigned MaxCandPairsForCycleCheck; 
-   
-   /// Replicating one element to a pair breaks the chain. 
-   bool SplatBreaksChain; 
-   
-   /// The maximum number of pairable instructions per group. 
-   unsigned MaxInsts; 
-   
-   /// The maximum number of candidate instruction pairs per group. 
-   unsigned MaxPairs; 
-   
-   /// The maximum number of pairing iterations. 
-   unsigned MaxIter; 
-   
-   /// Don't try to form odd-length vectors. 
-   bool Pow2LenOnly; 
-   
-   /// Don't boost the chain-depth contribution of loads and stores. 
-   bool NoMemOpBoost; 
-   
-   /// Use a fast instruction dependency analysis. 
-   bool FastDep; 
-   
-   /// Initialize the VectorizeConfig from command line options. 
-   VectorizeConfig(); 
- }; 
-   
- //===----------------------------------------------------------------------===// 
- // 
- // LoopVectorize - Create a loop vectorization pass. 
- // 
- Pass *createLoopVectorizePass(); 
- Pass *createLoopVectorizePass(bool InterleaveOnlyWhenForced, 
-                               bool VectorizeOnlyWhenForced); 
-   
- //===----------------------------------------------------------------------===// 
- // 
- // SLPVectorizer - Create a bottom-up SLP vectorizer pass. 
- // 
- Pass *createSLPVectorizerPass(); 
-   
- //===----------------------------------------------------------------------===// 
- /// Vectorize the BasicBlock. 
- /// 
- /// @param BB The BasicBlock to be vectorized 
- /// @param P  The current running pass, should require AliasAnalysis and 
- ///           ScalarEvolution. After the vectorization, AliasAnalysis, 
- ///           ScalarEvolution and CFG are preserved. 
- /// 
- /// @return True if the BB is changed, false otherwise. 
- /// 
- bool vectorizeBasicBlock(Pass *P, BasicBlock &BB, 
-                          const VectorizeConfig &C = VectorizeConfig()); 
-   
- //===----------------------------------------------------------------------===// 
- // 
- // LoadStoreVectorizer - Create vector loads and stores, but leave scalar 
- // operations. 
- // 
- Pass *createLoadStoreVectorizerPass(); 
-   
- //===----------------------------------------------------------------------===// 
- // 
- // Optimize partial vector operations using target cost models. 
- // 
- Pass *createVectorCombinePass(); 
-   
- } // End llvm namespace 
-   
- #endif 
-