LLVM  13.0.0git
Classes | Public Types | Public Member Functions | List of all members
llvm::LoopVectorizeHints Class Reference

Utility class for getting and setting loop vectorizer hints in the form of loop metadata. More...

#include "llvm/Transforms/Vectorize/LoopVectorizationLegality.h"

Public Types

enum  ForceKind { FK_Undefined = -1, FK_Disabled = 0, FK_Enabled = 1 }
 

Public Member Functions

 LoopVectorizeHints (const Loop *L, bool InterleaveOnlyWhenForced, OptimizationRemarkEmitter &ORE)
 
void setAlreadyVectorized ()
 Mark the loop L as already vectorized by setting the width to 1. More...
 
bool allowVectorization (Function *F, Loop *L, bool VectorizeOnlyWhenForced) const
 
void emitRemarkWithHints () const
 Dumps all the hint information. More...
 
ElementCount getWidth () const
 
unsigned getInterleave () const
 
unsigned getIsVectorized () const
 
unsigned getPredicate () const
 
enum ForceKind getForce () const
 
bool isScalable () const
 
const char * vectorizeAnalysisPassName () const
 If hints are provided that force vectorization, use the AlwaysPrint pass name to force the frontend to print the diagnostic. More...
 
bool allowReordering () const
 
bool isPotentiallyUnsafe () const
 
void setPotentiallyUnsafe ()
 

Detailed Description

Utility class for getting and setting loop vectorizer hints in the form of loop metadata.

This class keeps a number of loop annotations locally (as member variables) and can, upon request, write them back as metadata on the loop. It will initially scan the loop for existing metadata, and will update the local values based on information in the loop. We cannot write all values to metadata, as the mere presence of some info, for example 'force', means a decision has been made. So, we need to be careful NOT to add them if the user hasn't specifically asked so.

Definition at line 46 of file LoopVectorizationLegality.h.

Member Enumeration Documentation

◆ ForceKind

Enumerator
FK_Undefined 

Not selected.

FK_Disabled 

Forcing disabled.

FK_Enabled 

Forcing enabled.

Definition at line 93 of file LoopVectorizationLegality.h.

Constructor & Destructor Documentation

◆ LoopVectorizeHints()

llvm::LoopVectorizeHints::LoopVectorizeHints ( const Loop L,
bool  InterleaveOnlyWhenForced,
OptimizationRemarkEmitter ORE 
)

Member Function Documentation

◆ allowReordering()

bool llvm::LoopVectorizeHints::allowReordering ( ) const
inline

◆ allowVectorization()

bool llvm::LoopVectorizeHints::allowVectorization ( Function F,
Loop L,
bool  VectorizeOnlyWhenForced 
) const

◆ emitRemarkWithHints()

void llvm::LoopVectorizeHints::emitRemarkWithHints ( ) const

Dumps all the hint information.

Definition at line 151 of file LoopVectorizationLegality.cpp.

References FK_Disabled, and LV_NAME.

Referenced by allowVectorization(), isExplicitVecOuterLoop(), and llvm::LoopVectorizePass::processLoop().

◆ getForce()

enum ForceKind llvm::LoopVectorizeHints::getForce ( ) const
inline

◆ getInterleave()

unsigned llvm::LoopVectorizeHints::getInterleave ( ) const
inline

◆ getIsVectorized()

unsigned llvm::LoopVectorizeHints::getIsVectorized ( ) const
inline

Definition at line 115 of file LoopVectorizationLegality.h.

Referenced by allowVectorization().

◆ getPredicate()

unsigned llvm::LoopVectorizeHints::getPredicate ( ) const
inline

Definition at line 116 of file LoopVectorizationLegality.h.

Referenced by getScalarEpilogueLowering().

◆ getWidth()

ElementCount llvm::LoopVectorizeHints::getWidth ( ) const
inline

◆ isPotentiallyUnsafe()

bool llvm::LoopVectorizeHints::isPotentiallyUnsafe ( ) const
inline

Definition at line 141 of file LoopVectorizationLegality.h.

References FK_Enabled, and getForce().

Referenced by llvm::LoopVectorizePass::processLoop().

◆ isScalable()

bool llvm::LoopVectorizeHints::isScalable ( ) const
inline

Definition at line 124 of file LoopVectorizationLegality.h.

Referenced by getWidth().

◆ setAlreadyVectorized()

void llvm::LoopVectorizeHints::setAlreadyVectorized ( )

◆ setPotentiallyUnsafe()

void llvm::LoopVectorizeHints::setPotentiallyUnsafe ( )
inline

Definition at line 150 of file LoopVectorizationLegality.h.

◆ vectorizeAnalysisPassName()

const char * llvm::LoopVectorizeHints::vectorizeAnalysisPassName ( ) const

If hints are provided that force vectorization, use the AlwaysPrint pass name to force the frontend to print the diagnostic.

Definition at line 177 of file LoopVectorizationLegality.cpp.

References llvm::OptimizationRemarkAnalysis::AlwaysPrint, FK_Disabled, FK_Undefined, llvm::LinearPolySize< ElementCount >::getFixed(), getForce(), getWidth(), isZero(), and LV_NAME.

Referenced by allowVectorization(), llvm::LoopVectorizePass::processLoop(), and llvm::reportVectorizationFailure().


The documentation for this class was generated from the following files: