LLVM 20.0.0git
|
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/CodeGenTypes/MachineValueType.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 <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< int > Mask, SmallVectorImpl< int > &Out, int LowOffset, int HighOffset) |
static void | reorderSubVector (MVT VT, SmallVectorImpl< Value * > &TransposedMatrix, ArrayRef< Value * > Vec, ArrayRef< int > VPShuf, unsigned VecElems, unsigned Stride, IRBuilder<> &Builder) |
static void | createShuffleStride (MVT VT, int Stride, SmallVectorImpl< int > &Mask) |
static void | setGroupSize (MVT VT, SmallVectorImpl< int > &SizeInfo) |
static void | DecodePALIGNRMask (MVT VT, unsigned Imm, SmallVectorImpl< int > &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< int > &Mask, SmallVectorImpl< int > &Output) |
Variables | |
static constexpr int | 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 522 of file X86InterleavedAccess.cpp.
References Concat, and llvm::IRBuilderBase::CreateShuffleVector().
|
static |
Definition at line 436 of file X86InterleavedAccess.cpp.
References llvm::MVT::getSizeInBits(), and llvm::MVT::getVectorNumElements().
|
static |
Definition at line 473 of file X86InterleavedAccess.cpp.
References llvm::sampleprof::Base, llvm::MVT::getScalarSizeInBits(), llvm::MVT::getSizeInBits(), llvm::MVT::getVectorNumElements(), llvm::Offset, and llvm::SmallVectorTemplateBase< T, bool >::push_back().
|
static |
Definition at line 257 of file X86InterleavedAccess.cpp.
References assert(), llvm::MVT::getSizeInBits(), llvm::MVT::getVectorNumElements(), I, and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Referenced by reorderSubVector().
|
static |
Definition at line 606 of file X86InterleavedAccess.cpp.
References llvm::MVT::getSizeInBits(), llvm::MVT::getVectorNumElements(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().
|
static |
Definition at line 287 of file X86InterleavedAccess.cpp.
References llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::SmallVectorImpl< T >::clear(), Concat, llvm::IRBuilderBase::CreateShuffleVector(), and genShuffleBland().
Definition at line 229 of file X86InterleavedAccess.cpp.
References llvm::MVT::getIntegerVT(), llvm::MVT::getScalarSizeInBits(), llvm::MVT::getVectorElementType(), llvm::MVT::getVectorNumElements(), and llvm::MVT::getVectorVT().
|
static |
Definition at line 450 of file X86InterleavedAccess.cpp.
References llvm::MVT::getSizeInBits(), llvm::MVT::getVectorNumElements(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().
|
staticconstexpr |
Definition at line 235 of file X86InterleavedAccess.cpp.
Referenced by AddCombineVUZPToVPADDL(), combineEXTRACT_SUBVECTOR(), combineScalarAndWithMaskSetcc(), combineShuffleOfConcatUndef(), combineVectorPack(), ConcatStringInits(), concatSubVector(), llvm::AMDGPULegalizerInfo::legalizeImageIntrinsic(), performBuildVectorCombine(), performUADDVZextCombine(), performUzpCombine(), performVectorTruncZeroCombine(), reorderSubVector(), and llvm::InstCombinerImpl::visitOr().