Vectorize.h revision 263508
1//===-- Vectorize.h - Vectorization Transformations -------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This header file defines prototypes for accessor functions that expose passes 11// in the Vectorize transformations library. 12// 13//===----------------------------------------------------------------------===// 14 15#ifndef LLVM_TRANSFORMS_VECTORIZE_H 16#define LLVM_TRANSFORMS_VECTORIZE_H 17 18namespace llvm { 19class BasicBlock; 20class BasicBlockPass; 21class Pass; 22 23//===----------------------------------------------------------------------===// 24/// @brief Vectorize configuration. 25struct VectorizeConfig { 26 //===--------------------------------------------------------------------===// 27 // Target architecture related parameters 28 29 /// @brief The size of the native vector registers. 30 unsigned VectorBits; 31 32 /// @brief Vectorize boolean values. 33 bool VectorizeBools; 34 35 /// @brief Vectorize integer values. 36 bool VectorizeInts; 37 38 /// @brief Vectorize floating-point values. 39 bool VectorizeFloats; 40 41 /// @brief Vectorize pointer values. 42 bool VectorizePointers; 43 44 /// @brief Vectorize casting (conversion) operations. 45 bool VectorizeCasts; 46 47 /// @brief Vectorize floating-point math intrinsics. 48 bool VectorizeMath; 49 50 /// @brief Vectorize the fused-multiply-add intrinsic. 51 bool VectorizeFMA; 52 53 /// @brief Vectorize select instructions. 54 bool VectorizeSelect; 55 56 /// @brief Vectorize comparison instructions. 57 bool VectorizeCmp; 58 59 /// @brief Vectorize getelementptr instructions. 60 bool VectorizeGEP; 61 62 /// @brief Vectorize loads and stores. 63 bool VectorizeMemOps; 64 65 /// @brief Only generate aligned loads and stores. 66 bool AlignedOnly; 67 68 //===--------------------------------------------------------------------===// 69 // Misc parameters 70 71 /// @brief The required chain depth for vectorization. 72 unsigned ReqChainDepth; 73 74 /// @brief The maximum search distance for instruction pairs. 75 unsigned SearchLimit; 76 77 /// @brief The maximum number of candidate pairs with which to use a full 78 /// cycle check. 79 unsigned MaxCandPairsForCycleCheck; 80 81 /// @brief Replicating one element to a pair breaks the chain. 82 bool SplatBreaksChain; 83 84 /// @brief The maximum number of pairable instructions per group. 85 unsigned MaxInsts; 86 87 /// @brief The maximum number of candidate instruction pairs per group. 88 unsigned MaxPairs; 89 90 /// @brief The maximum number of pairing iterations. 91 unsigned MaxIter; 92 93 /// @brief Don't try to form odd-length vectors. 94 bool Pow2LenOnly; 95 96 /// @brief Don't boost the chain-depth contribution of loads and stores. 97 bool NoMemOpBoost; 98 99 /// @brief Use a fast instruction dependency analysis. 100 bool FastDep; 101 102 /// @brief Initialize the VectorizeConfig from command line options. 103 VectorizeConfig(); 104}; 105 106//===----------------------------------------------------------------------===// 107// 108// BBVectorize - A basic-block vectorization pass. 109// 110BasicBlockPass * 111createBBVectorizePass(const VectorizeConfig &C = VectorizeConfig()); 112 113//===----------------------------------------------------------------------===// 114// 115// LoopVectorize - Create a loop vectorization pass. 116// 117Pass *createLoopVectorizePass(bool NoUnrolling = false); 118 119//===----------------------------------------------------------------------===// 120// 121// SLPVectorizer - Create a bottom-up SLP vectorizer pass. 122// 123Pass *createSLPVectorizerPass(); 124 125//===----------------------------------------------------------------------===// 126/// @brief Vectorize the BasicBlock. 127/// 128/// @param BB The BasicBlock to be vectorized 129/// @param P The current running pass, should require AliasAnalysis and 130/// ScalarEvolution. After the vectorization, AliasAnalysis, 131/// ScalarEvolution and CFG are preserved. 132/// 133/// @return True if the BB is changed, false otherwise. 134/// 135bool vectorizeBasicBlock(Pass *P, BasicBlock &BB, 136 const VectorizeConfig &C = VectorizeConfig()); 137 138} // End llvm namespace 139 140#endif 141