LLVM
8.0.1
|
This file contains the X86 implementation of the interleaved accesses optimization generating X86-specific instructions/intrinsics for interleaved access groups. More...
#include "X86ISelLowering.h"
#include "X86Subtarget.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Analysis/VectorUtils.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Value.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/MachineValueType.h"
#include <algorithm>
#include <cassert>
#include <cmath>
#include <cstdint>
Go to the source code of this file.
Functions | |
static MVT | scaleVectorType (MVT VT) |
static void | genShuffleBland (MVT VT, ArrayRef< uint32_t > Mask, SmallVectorImpl< uint32_t > &Out, int LowOffset, int HighOffset) |
static void | reorderSubVector (MVT VT, SmallVectorImpl< Value *> &TransposedMatrix, ArrayRef< Value *> Vec, ArrayRef< uint32_t > VPShuf, unsigned VecElems, unsigned Stride, IRBuilder<> Builder) |
static void | createShuffleStride (MVT VT, int Stride, SmallVectorImpl< uint32_t > &Mask) |
static void | setGroupSize (MVT VT, SmallVectorImpl< uint32_t > &SizeInfo) |
static void | DecodePALIGNRMask (MVT VT, unsigned Imm, SmallVectorImpl< uint32_t > &ShuffleMask, bool AlignDirection=true, bool Unary=false) |
static void | concatSubVector (Value **Vec, ArrayRef< Instruction *> InVec, unsigned VecElems, IRBuilder<> Builder) |
static void | group2Shuffle (MVT VT, SmallVectorImpl< uint32_t > &Mask, SmallVectorImpl< uint32_t > &Output) |
Variables | |
static uint32_t | Concat [] |
This file contains the X86 implementation of the interleaved accesses optimization generating X86-specific instructions/intrinsics for interleaved access groups.
Definition in file X86InterleavedAccess.cpp.
|
static |
Definition at line 518 of file X86InterleavedAccess.cpp.
References createShuffleStride(), llvm::IRBuilder< T, Inserter >::CreateShuffleVector(), llvm::DecodePALIGNRMask(), llvm::UndefValue::get(), getType(), llvm::Value::getType(), llvm::MVT::getVT(), llvm::makeArrayRef(), llvm::SmallVectorImpl< T >::resize(), and setGroupSize().
|
static |
Definition at line 432 of file X86InterleavedAccess.cpp.
References llvm::MVT::getSizeInBits(), llvm::MVT::getVectorNumElements(), llvm::max(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Referenced by concatSubVector().
|
static |
Definition at line 469 of file X86InterleavedAccess.cpp.
References llvm::MVT::getScalarSizeInBits(), llvm::MVT::getSizeInBits(), llvm::MVT::getVectorNumElements(), llvm::max(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().
|
static |
Definition at line 251 of file X86InterleavedAccess.cpp.
References assert(), llvm::MVT::getSizeInBits(), llvm::MVT::getVectorNumElements(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::ArrayRef< T >::size().
Referenced by reorderSubVector().
|
static |
Definition at line 605 of file X86InterleavedAccess.cpp.
References assert(), llvm::concatenateVectors(), llvm::DecodePALIGNRMask(), llvm::VectorType::get(), llvm::UndefValue::get(), llvm::StoreInst::getAlignment(), llvm::StoreInst::getPointerOperand(), llvm::MVT::getSizeInBits(), getType(), llvm::Type::getVectorElementType(), llvm::Type::getVectorNumElements(), llvm::MVT::getVectorNumElements(), llvm::MVT::getVectorVT(), llvm::MVT::i8, llvm::makeArrayRef(), llvm::BitmaskEnumDetail::Mask(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), reorderSubVector(), llvm::SmallVectorImpl< T >::resize(), setGroupSize(), SI, and llvm::ArrayRef< T >::size().
|
static |
Definition at line 281 of file X86InterleavedAccess.cpp.
References llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::SmallVectorImpl< T >::clear(), llvm::copy(), llvm::IRBuilder< T, Inserter >::CreateShuffleVector(), genShuffleBland(), llvm::UndefValue::get(), llvm::MVT::getVectorVT(), llvm::MVT::i8, llvm::makeArrayRef(), Matrix, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SmallVectorImpl< T >::resize(), scaleVectorType(), llvm::MVT::v16i8, and llvm::MVT::v8i16.
Referenced by group2Shuffle().
Definition at line 223 of file X86InterleavedAccess.cpp.
References llvm::MVT::getIntegerVT(), llvm::MVT::getScalarSizeInBits(), llvm::MVT::getVectorElementType(), llvm::MVT::getVectorNumElements(), and llvm::MVT::getVectorVT().
Referenced by reorderSubVector().
|
static |
Definition at line 446 of file X86InterleavedAccess.cpp.
References llvm::Intrinsic::ceil, llvm::MVT::getSizeInBits(), llvm::MVT::getVectorNumElements(), llvm::max(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Referenced by concatSubVector(), and group2Shuffle().
|
static |
Definition at line 229 of file X86InterleavedAccess.cpp.
Referenced by AddCombineVUZPToVPADDL(), combineExtractSubvector(), combineShuffleOfConcatUndef(), combineVectorPack(), ConcatStringInits(), findUser(), getDUPLANEOp(), and reduceBuildVecToShuffleWithZero().