|
LLVM
4.0.0
|
#include "llvm/CodeGen/Passes.h"#include "llvm/IR/Dominators.h"#include "llvm/IR/InstIterator.h"#include "llvm/Support/Debug.h"#include "llvm/Support/MathExtras.h"#include "llvm/Support/raw_ostream.h"#include "llvm/Target/TargetLowering.h"#include "llvm/Target/TargetSubtargetInfo.h"Go to the source code of this file.
Macros | |
| #define | DEBUG_TYPE "interleaved-access" |
Functions | |
| INITIALIZE_TM_PASS_BEGIN (InterleavedAccess,"interleaved-access","Lower interleaved memory accesses to target specific intrinsics", false, false) INITIALIZE_TM_PASS_END(InterleavedAccess | |
| static bool | isDeInterleaveMaskOfFactor (ArrayRef< int > Mask, unsigned Factor, unsigned &Index) |
Check if the mask is a DE-interleave mask of the given factor Factor like: <Index, Index+Factor, ..., Index+(NumElts-1)*Factor> More... | |
| static bool | isDeInterleaveMask (ArrayRef< int > Mask, unsigned &Factor, unsigned &Index, unsigned MaxFactor) |
| Check if the mask is a DE-interleave mask for an interleaved load. More... | |
| static bool | isReInterleaveMask (ArrayRef< int > Mask, unsigned &Factor, unsigned MaxFactor, unsigned OpNumElts) |
| Check if the mask can be used in an interleaved store. More... | |
Variables | |
| static cl::opt< bool > | LowerInterleavedAccesses ("lower-interleaved-accesses", cl::desc("Enable lowering interleaved accesses to intrinsics"), cl::init(true), cl::Hidden) |
| interleaved | access |
| interleaved Lower interleaved memory accesses to target specific | intrinsics |
| interleaved Lower interleaved memory accesses to target specific | false |
| #define DEBUG_TYPE "interleaved-access" |
Definition at line 58 of file InterleavedAccessPass.cpp.
| INITIALIZE_TM_PASS_BEGIN | ( | InterleavedAccess | , |
| "interleaved-access" | , | ||
| "Lower interleaved memory accesses to target specific intrinsics" | , | ||
| false | , | ||
| false | |||
| ) |
|
static |
Check if the mask is a DE-interleave mask for an interleaved load.
E.g. DE-interleave masks (Factor = 2) could be: <0, 2, 4, 6> (mask of index 0 to extract even elements) <1, 3, 5, 7> (mask of index 1 to extract odd elements)
Definition at line 152 of file InterleavedAccessPass.cpp.
References isDeInterleaveMaskOfFactor(), and llvm::ArrayRef< T >::size().
|
static |
Check if the mask is a DE-interleave mask of the given factor Factor like: <Index, Index+Factor, ..., Index+(NumElts-1)*Factor>
Definition at line 128 of file InterleavedAccessPass.cpp.
References i, and llvm::ArrayRef< T >::size().
Referenced by isDeInterleaveMask().
|
static |
Check if the mask can be used in an interleaved store.
It checks for a more general pattern than the RE-interleave mask. I.e. <x, y, ... z, x+1, y+1, ...z+1, x+2, y+2, ...z+2, ...> E.g. For a Factor of 2 (LaneLen=4): <4, 32, 5, 33, 6, 34, 7, 35> E.g. For a Factor of 3 (LaneLen=4): <4, 32, 16, 5, 33, 17, 6, 34, 18, 7, 35, 19> E.g. For a Factor of 4 (LaneLen=2): <8, 2, 12, 4, 9, 3, 13, 5>
The particular case of an RE-interleave mask is: I.e. <0, LaneLen, ... , LaneLen*(Factor - 1), 1, LaneLen + 1, ...> E.g. For a Factor of 2 (LaneLen=4): <0, 4, 1, 5, 2, 6, 3, 7>
Definition at line 176 of file InterleavedAccessPass.cpp.
References I, llvm::isPowerOf2_32(), and llvm::ArrayRef< T >::size().
| interleaved access |
Definition at line 117 of file InterleavedAccessPass.cpp.
Referenced by GetSymbolRef(), llvm::inferLibFuncAttributes(), and initialize().
| interleaved Lower interleaved memory accesses to target specific false |
Definition at line 117 of file InterleavedAccessPass.cpp.
| interleaved Lower interleaved memory accesses to target specific intrinsics |
Definition at line 117 of file InterleavedAccessPass.cpp.
|
static |
1.8.6