LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Transforms/Vectorize.h
Go to the documentation of this file.
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 
18 namespace llvm {
19 class BasicBlock;
20 class BasicBlockPass;
21 class Pass;
22 
23 //===----------------------------------------------------------------------===//
24 /// @brief Vectorize configuration.
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.
34 
35  /// @brief Vectorize integer values.
37 
38  /// @brief Vectorize floating-point values.
40 
41  /// @brief Vectorize pointer values.
43 
44  /// @brief Vectorize casting (conversion) operations.
46 
47  /// @brief Vectorize floating-point math intrinsics.
49 
50  /// @brief Vectorize the fused-multiply-add intrinsic.
52 
53  /// @brief Vectorize select instructions.
55 
56  /// @brief Vectorize comparison instructions.
58 
59  /// @brief Vectorize getelementptr instructions.
61 
62  /// @brief Vectorize loads and stores.
64 
65  /// @brief Only generate aligned loads and stores.
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.
80 
81  /// @brief Replicating one element to a pair breaks the chain.
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.
95 
96  /// @brief Don't boost the chain-depth contribution of loads and stores.
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 //
112 
113 //===----------------------------------------------------------------------===//
114 //
115 // LoopVectorize - Create a loop vectorization pass.
116 //
117 Pass *createLoopVectorizePass(bool NoUnrolling = false);
118 
119 //===----------------------------------------------------------------------===//
120 //
121 // SLPVectorizer - Create a bottom-up SLP vectorizer pass.
122 //
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 ///
136  const VectorizeConfig &C = VectorizeConfig());
137 
138 } // End llvm namespace
139 
140 #endif
bool VectorizeFMA
Vectorize the fused-multiply-add intrinsic.
Pass * createLoopVectorizePass(bool NoUnrolling=false)
Various leaf nodes.
Definition: ISDOpcodes.h:60
bool VectorizeMath
Vectorize floating-point math intrinsics.
unsigned MaxCandPairsForCycleCheck
The maximum number of candidate pairs with which to use a full cycle check.
bool Pow2LenOnly
Don't try to form odd-length vectors.
bool VectorizePointers
Vectorize pointer values.
bool VectorizeCmp
Vectorize comparison instructions.
unsigned MaxIter
The maximum number of pairing iterations.
bool VectorizeMemOps
Vectorize loads and stores.
#define P(N)
bool AlignedOnly
Only generate aligned loads and stores.
LLVM Basic Block Representation.
Definition: BasicBlock.h:72
bool SplatBreaksChain
Replicating one element to a pair breaks the chain.
unsigned SearchLimit
The maximum search distance for instruction pairs.
unsigned MaxPairs
The maximum number of candidate instruction pairs per group.
bool VectorizeFloats
Vectorize floating-point values.
bool vectorizeBasicBlock(Pass *P, BasicBlock &BB, const VectorizeConfig &C=VectorizeConfig())
Vectorize the BasicBlock.
bool FastDep
Use a fast instruction dependency analysis.
Vectorize configuration.
bool VectorizeCasts
Vectorize casting (conversion) operations.
BasicBlockPass * createBBVectorizePass(const VectorizeConfig &C=VectorizeConfig())
bool VectorizeBools
Vectorize boolean values.
unsigned ReqChainDepth
The required chain depth for vectorization.
unsigned MaxInsts
The maximum number of pairable instructions per group.
bool NoMemOpBoost
Don't boost the chain-depth contribution of loads and stores.
bool VectorizeGEP
Vectorize getelementptr instructions.
VectorizeConfig()
Initialize the VectorizeConfig from command line options.
Pass * createSLPVectorizerPass()
bool VectorizeInts
Vectorize integer values.
bool VectorizeSelect
Vectorize select instructions.
unsigned VectorBits
The size of the native vector registers.