diff options
| author | Ralf Luther <luther.ralf@gmail.com> | 2019-03-27 20:23:17 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit2@aicp-server-3> | 2019-03-27 20:23:17 +0000 |
| commit | 1ce3a9d272e564b22a1333a1e36a3d3ab7cfab01 (patch) | |
| tree | 391382eadd4fec5bb480f2e8934fa352770221d1 /clang-r353983/include/llvm/Transforms/Vectorize.h | |
| parent | d1d48b140bafaa8a50107292f5fce95562575765 (diff) | |
| parent | 4f56932d3416ac03f646bc1a611b3135fec2fe08 (diff) | |
Merge "Update prebuilt Clang to r353983." into p9.0HEADp9.0-backupp9.0
Diffstat (limited to 'clang-r353983/include/llvm/Transforms/Vectorize.h')
| -rw-r--r-- | clang-r353983/include/llvm/Transforms/Vectorize.h | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/clang-r353983/include/llvm/Transforms/Vectorize.h b/clang-r353983/include/llvm/Transforms/Vectorize.h new file mode 100644 index 00000000..a411b566 --- /dev/null +++ b/clang-r353983/include/llvm/Transforms/Vectorize.h @@ -0,0 +1,143 @@ +//===-- 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 BasicBlockPass; +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(bool InterleaveOnlyWhenForced = false, + bool VectorizeOnlyWhenForced = false); + +//===----------------------------------------------------------------------===// +// +// 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(); + +} // End llvm namespace + +#endif |
