123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===-- 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
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|