LLVM  10.0.0svn
Macros | Functions | Variables
MVETailPredication.cpp File Reference

Armv8.1m introduced MVE, M-Profile Vector Extension, and low-overhead branches to help accelerate DSP applications. More...

#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/LoopPass.h"
#include "llvm/Analysis/ScalarEvolution.h"
#include "llvm/Analysis/ScalarEvolutionExpander.h"
#include "llvm/Analysis/ScalarEvolutionExpressions.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/CodeGen/TargetPassConfig.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/PatternMatch.h"
#include "llvm/Support/Debug.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "ARM.h"
#include "ARMSubtarget.h"
Include dependency graph for MVETailPredication.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "mve-tail-predication"
 
#define DESC   "Transform predicated vector loops to use MVE tail predication"
 

Functions

static bool IsDecrement (Instruction &I)
 
static bool IsMasked (Instruction *I)
 
static VectorTypegetVectorType (IntrinsicInst *I)
 
static void Cleanup (DenseMap< Instruction *, Instruction *> &NewPredicates, SetVector< Instruction *> &MaybeDead, Loop *L)
 

Variables

static cl::opt< boolDisableTailPredication ("disable-mve-tail-predication", cl::Hidden, cl::init(true), cl::desc("Disable MVE Tail Predication"))
 

Detailed Description

Armv8.1m introduced MVE, M-Profile Vector Extension, and low-overhead branches to help accelerate DSP applications.

These two extensions can be combined to provide implicit vector predication within a low-overhead loop. The HardwareLoops pass inserts intrinsics identifying loops that the backend will attempt to convert into a low-overhead loop. The vectorizer is responsible for generating a vectorized loop in which the lanes are predicated upon the iteration counter. This pass looks at these predicated vector loops, that are targets for low-overhead loops, and prepares it for code generation. Once the vectorizer has produced a masked loop, there's a couple of final forms:

Definition in file MVETailPredication.cpp.

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "mve-tail-predication"

Definition at line 41 of file MVETailPredication.cpp.

Referenced by llvm::createMVETailPredicationPass().

◆ DESC

#define DESC   "Transform predicated vector loops to use MVE tail predication"

Definition at line 42 of file MVETailPredication.cpp.

Referenced by llvm::createMVETailPredicationPass().

Function Documentation

◆ Cleanup()

static void Cleanup ( DenseMap< Instruction *, Instruction *> &  NewPredicates,
SetVector< Instruction *> &  MaybeDead,
Loop L 
)
static

◆ getVectorType()

static VectorType* getVectorType ( IntrinsicInst I)
static

◆ IsDecrement()

static bool IsDecrement ( Instruction I)
static

Definition at line 92 of file MVETailPredication.cpp.

References llvm::dyn_cast(), and I.

Referenced by IsMasked().

◆ IsMasked()

static bool IsMasked ( Instruction I)
static

Variable Documentation

◆ DisableTailPredication

cl::opt<bool> DisableTailPredication("disable-mve-tail-predication", cl::Hidden, cl::init(true), cl::desc("Disable MVE Tail Predication"))
static

Referenced by IsMasked().