LLVM  3.7.0
Namespaces | Macros | Functions | Variables
InterleavedAccessPass.cpp File Reference
#include "llvm/CodeGen/Passes.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.

Namespaces

 llvm
 Compute iterated dominance frontiers using a linear time algorithm.
 

Macros

#define DEBUG_TYPE   "interleaved-access"
 

Functions

static void llvm::initializeInterleavedAccessPass (PassRegistry &)
 
 INITIALIZE_TM_PASS (InterleavedAccess,"interleaved-access","Lower interleaved memory accesses to target specific intrinsics", false, false) FunctionPass *llvm
 
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)
 Check if the mask is a DE-interleave mask for an interleaved load. More...
 
static bool isReInterleaveMask (ArrayRef< int > Mask, unsigned &Factor)
 Check if the mask is RE-interleave mask for an interleaved store. More...
 

Variables

static cl::opt< boolLowerInterleavedAccesses ("lower-interleaved-accesses", cl::desc("Enable lowering interleaved accesses to intrinsics"), cl::init(false), cl::Hidden)
 
static unsigned MaxFactor
 

Macro Definition Documentation

#define DEBUG_TYPE   "interleaved-access"

Definition at line 50 of file InterleavedAccessPass.cpp.

Function Documentation

INITIALIZE_TM_PASS ( InterleavedAccess  ,
"interleaved-access"  ,
"Lower interleaved memory accesses to target specific intrinsics"  ,
false  ,
false   
)

Definition at line 93 of file InterleavedAccessPass.cpp.

static bool isDeInterleaveMask ( ArrayRef< int Mask,
unsigned Factor,
unsigned Index 
)
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 128 of file InterleavedAccessPass.cpp.

References isDeInterleaveMaskOfFactor(), MaxFactor, 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 104 of file InterleavedAccessPass.cpp.

References llvm::ArrayRef< T >::size().

Referenced by isDeInterleaveMask().

static bool isReInterleaveMask ( ArrayRef< int Mask,
unsigned Factor 
)
static

Check if the mask is RE-interleave mask for an interleaved store.

I.e. <0, NumSubElts, ... , NumSubElts*(Factor - 1), 1, NumSubElts + 1, ...>

E.g. The RE-interleave mask (Factor = 2) could be: <0, 4, 1, 5, 2, 6, 3, 7>

Definition at line 147 of file InterleavedAccessPass.cpp.

References llvm::isPowerOf2_32(), MaxFactor, and llvm::ArrayRef< T >::size().

Variable Documentation

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

Definition at line 57 of file InterleavedAccessPass.cpp.

Referenced by isDeInterleaveMask(), and isReInterleaveMask().