LLVM  4.0.0
Macros | Functions | Variables
InterleavedAccessPass.cpp File Reference
#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"
Include dependency graph for InterleavedAccessPass.cpp:

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< boolLowerInterleavedAccesses ("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
 

Macro Definition Documentation

#define DEBUG_TYPE   "interleaved-access"

Definition at line 58 of file InterleavedAccessPass.cpp.

Function Documentation

INITIALIZE_TM_PASS_BEGIN ( InterleavedAccess  ,
"interleaved-access ,
"Lower interleaved memory accesses to target specific intrinsics ,
false  ,
false   
)
static bool isDeInterleaveMask ( ArrayRef< int >  Mask,
unsigned Factor,
unsigned Index,
unsigned  MaxFactor 
)
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 bool isDeInterleaveMaskOfFactor ( ArrayRef< int >  Mask,
unsigned  Factor,
unsigned Index 
)
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 bool isReInterleaveMask ( ArrayRef< int >  Mask,
unsigned Factor,
unsigned  MaxFactor,
unsigned  OpNumElts 
)
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().

Variable Documentation

interleaved access
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.

cl::opt<bool> LowerInterleavedAccesses("lower-interleaved-accesses", cl::desc("Enable lowering interleaved accesses to intrinsics"), cl::init(true), cl::Hidden)
static