]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/include/llvm/Transforms/Vectorize.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / include / llvm / Transforms / Vectorize.h
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.
25 struct 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 //
110 BasicBlockPass *
111 createBBVectorizePass(const VectorizeConfig &C = VectorizeConfig());
112
113 //===----------------------------------------------------------------------===//
114 //
115 // LoopVectorize - Create a loop vectorization pass.
116 //
117 Pass *createLoopVectorizePass();
118
119 //===----------------------------------------------------------------------===//
120 //
121 // SLPVectorizer - Create a bottom-up SLP vectorizer pass.
122 //
123 Pass *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 ///
135 bool vectorizeBasicBlock(Pass *P, BasicBlock &BB,
136                          const VectorizeConfig &C = VectorizeConfig());
137
138 } // End llvm namespace
139
140 #endif