LLVM 17.0.0git
Macros | Enumerations | Functions | Variables
LowerMatrixIntrinsics.cpp File Reference
#include "llvm/Transforms/Scalar/LowerMatrixIntrinsics.h"
#include "llvm/ADT/PostOrderIterator.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/Analysis/DomTreeUpdater.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/Analysis/VectorUtils.h"
#include "llvm/IR/CFG.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/MatrixBuilder.h"
#include "llvm/IR/PatternMatch.h"
#include "llvm/InitializePasses.h"
#include "llvm/Pass.h"
#include "llvm/Support/Alignment.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Transforms/Scalar.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/LoopUtils.h"
#include "llvm/Transforms/Utils/MatrixUtils.h"
#include <cmath>
Include dependency graph for LowerMatrixIntrinsics.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "lower-matrix-intrinsics"
 

Enumerations

enum class  MatrixLayoutTy { ColumnMajor , RowMajor }
 

Functions

static DISubprogramgetSubprogram (DIScope *Scope)
 Helper function to either return Scope, if it is a subprogram or the attached subprogram for a local scope.
 
static void eraseFromParentAndMove (Value *V, BasicBlock::reverse_iterator &II, BasicBlock &BB)
 Erase V from BB and move \II forward to avoid invalidating iterators.
 
static bool isSplat (Value *V)
 Return true if V is a splat of a value (which is used when multiplying a matrix with a scalar).
 
template<typename LTy , typename RTy >
auto m_AnyMul (const LTy &L, const RTy &R)
 Match any mul operation (fp or integer).
 
template<typename LTy , typename RTy >
auto m_AnyAdd (const LTy &L, const RTy &R)
 Match any add operation (fp or integer).
 
 INITIALIZE_PASS_BEGIN (LowerMatrixIntrinsicsLegacyPass, DEBUG_TYPE, pass_name, false, false) INITIALIZE_PASS_END(LowerMatrixIntrinsicsLegacyPass
 
 INITIALIZE_PASS_BEGIN (LowerMatrixIntrinsicsMinimalLegacyPass, "lower-matrix-intrinsics-minimal", pass_name_minimal, false, false) INITIALIZE_PASS_END(LowerMatrixIntrinsicsMinimalLegacyPass
 

Variables

static cl::opt< boolFuseMatrix ("fuse-matrix", cl::init(true), cl::Hidden, cl::desc("Enable/disable fusing matrix instructions."))
 
static cl::opt< unsignedTileSize ("fuse-matrix-tile-size", cl::init(4), cl::Hidden, cl::desc("Tile size for matrix instruction fusion using square-shaped tiles."))
 
static cl::opt< boolTileUseLoops ("fuse-matrix-use-loops", cl::init(false), cl::Hidden, cl::desc("Generate loop nest for tiling."))
 
static cl::opt< boolForceFusion ("force-fuse-matrix", cl::init(false), cl::Hidden, cl::desc("Force matrix instruction fusion even if not profitable."))
 
static cl::opt< boolAllowContractEnabled ("matrix-allow-contract", cl::init(false), cl::Hidden, cl::desc("Allow the use of FMAs if available and profitable. This may " "result in different results, due to less rounding error."))
 
static cl::opt< MatrixLayoutTyMatrixLayout ("matrix-default-layout", cl::init(MatrixLayoutTy::ColumnMajor), cl::desc("Sets the default matrix layout"), cl::values(clEnumValN(MatrixLayoutTy::ColumnMajor, "column-major", "Use column-major layout"), clEnumValN(MatrixLayoutTy::RowMajor, "row-major", "Use row-major layout")))
 
static cl::opt< boolPrintAfterTransposeOpt ("matrix-print-after-transpose-opt", cl::init(false))
 
static const char pass_name [] = "Lower the matrix intrinsics"
 
 DEBUG_TYPE
 
 false
 
static const char pass_name_minimal [] = "Lower the matrix intrinsics (minimal)"
 
lower matrix intrinsics minimal
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "lower-matrix-intrinsics"

Definition at line 54 of file LowerMatrixIntrinsics.cpp.

Enumeration Type Documentation

◆ MatrixLayoutTy

enum class MatrixLayoutTy
strong
Enumerator
ColumnMajor 
RowMajor 

Definition at line 75 of file LowerMatrixIntrinsics.cpp.

Function Documentation

◆ eraseFromParentAndMove()

static void eraseFromParentAndMove ( Value V,
BasicBlock::reverse_iterator II,
BasicBlock BB 
)
static

Erase V from BB and move \II forward to avoid invalidating iterators.

Definition at line 98 of file LowerMatrixIntrinsics.cpp.

References llvm::BasicBlock::rend().

◆ getSubprogram()

static DISubprogram * getSubprogram ( DIScope Scope)
static

Helper function to either return Scope, if it is a subprogram or the attached subprogram for a local scope.

Definition at line 90 of file LowerMatrixIntrinsics.cpp.

References llvm::DILocalScope::getSubprogram().

◆ INITIALIZE_PASS_BEGIN() [1/2]

INITIALIZE_PASS_BEGIN ( LowerMatrixIntrinsicsLegacyPass  ,
DEBUG_TYPE  ,
pass_name  ,
false  ,
false   
)

◆ INITIALIZE_PASS_BEGIN() [2/2]

INITIALIZE_PASS_BEGIN ( LowerMatrixIntrinsicsMinimalLegacyPass  ,
"lower-matrix-intrinsics-minimal"  ,
pass_name_minimal  ,
false  ,
false   
)

◆ isSplat()

static bool isSplat ( Value V)
static

Return true if V is a splat of a value (which is used when multiplying a matrix with a scalar).

Definition at line 111 of file LowerMatrixIntrinsics.cpp.

Referenced by llvm::PPC::get_VSPLTI_elt(), llvm::DOTGraphTraits< BoUpSLP * >::getNodeLabel(), llvm::slpvectorizer::BoUpSLP::isTreeTinyAndNotFullyVectorizable(), and llvm::InstCombinerImpl::visitShuffleVectorInst().

◆ m_AnyAdd()

template<typename LTy , typename RTy >
auto m_AnyAdd ( const LTy &  L,
const RTy &  R 
)

Match any add operation (fp or integer).

Definition at line 125 of file LowerMatrixIntrinsics.cpp.

References llvm::PatternMatch::m_Add(), llvm::PatternMatch::m_CombineOr(), and llvm::PatternMatch::m_FAdd().

◆ m_AnyMul()

template<typename LTy , typename RTy >
auto m_AnyMul ( const LTy &  L,
const RTy &  R 
)

Match any mul operation (fp or integer).

Definition at line 119 of file LowerMatrixIntrinsics.cpp.

References llvm::PatternMatch::m_CombineOr(), llvm::PatternMatch::m_FMul(), and llvm::PatternMatch::m_Mul().

Variable Documentation

◆ AllowContractEnabled

cl::opt< bool > AllowContractEnabled("matrix-allow-contract", cl::init(false), cl::Hidden, cl::desc("Allow the use of FMAs if available and profitable. This may " "result in different results, due to less rounding error.")) ( "matrix-allow-contract"  ,
cl::init(false)  ,
cl::Hidden  ,
cl::desc("Allow the use of FMAs if available and profitable. This may " "result in different results, due to less rounding error.")   
)
static

◆ DEBUG_TYPE

DEBUG_TYPE

Definition at line 2448 of file LowerMatrixIntrinsics.cpp.

◆ false

lower matrix intrinsics false

Definition at line 2449 of file LowerMatrixIntrinsics.cpp.

◆ ForceFusion

cl::opt< bool > ForceFusion("force-fuse-matrix", cl::init(false), cl::Hidden, cl::desc("Force matrix instruction fusion even if not profitable.")) ( "force-fuse-matrix"  ,
cl::init(false)  ,
cl::Hidden  ,
cl::desc("Force matrix instruction fusion even if not profitable.")   
)
static

◆ FuseMatrix

cl::opt< bool > FuseMatrix("fuse-matrix", cl::init(true), cl::Hidden, cl::desc("Enable/disable fusing matrix instructions.")) ( "fuse-matrix"  ,
cl::init(true ,
cl::Hidden  ,
cl::desc("Enable/disable fusing matrix instructions.")   
)
static

◆ MatrixLayout

cl::opt< MatrixLayoutTy > MatrixLayout("matrix-default-layout", cl::init(MatrixLayoutTy::ColumnMajor), cl::desc("Sets the default matrix layout"), cl::values(clEnumValN(MatrixLayoutTy::ColumnMajor, "column-major", "Use column-major layout"), clEnumValN(MatrixLayoutTy::RowMajor, "row-major", "Use row-major layout"))) ( "matrix-default-layout"  ,
cl::init(MatrixLayoutTy::ColumnMajor ,
cl::desc("Sets the default matrix layout")  ,
cl::values(clEnumValN(MatrixLayoutTy::ColumnMajor, "column-major", "Use column-major layout"), clEnumValN(MatrixLayoutTy::RowMajor, "row-major", "Use row-major layout"))   
)
static

◆ minimal

lower matrix intrinsics minimal

Definition at line 2490 of file LowerMatrixIntrinsics.cpp.

◆ pass_name

pass_name = "Lower the matrix intrinsics"
static

Definition at line 2440 of file LowerMatrixIntrinsics.cpp.

◆ pass_name_minimal

lower matrix intrinsics pass_name_minimal = "Lower the matrix intrinsics (minimal)"
static

Definition at line 2484 of file LowerMatrixIntrinsics.cpp.

◆ PrintAfterTransposeOpt

cl::opt< bool > PrintAfterTransposeOpt("matrix-print-after-transpose-opt", cl::init(false)) ( "matrix-print-after-transpose-opt"  ,
cl::init(false)   
)
static

◆ TileSize

cl::opt< unsigned > TileSize("fuse-matrix-tile-size", cl::init(4), cl::Hidden, cl::desc( "Tile size for matrix instruction fusion using square-shaped tiles.")) ( "fuse-matrix-tile-size"  ,
cl::init(4)  ,
cl::Hidden  ,
cl::desc( "Tile size for matrix instruction fusion using square-shaped tiles.")   
)
static

◆ TileUseLoops

cl::opt< bool > TileUseLoops("fuse-matrix-use-loops", cl::init(false), cl::Hidden, cl::desc("Generate loop nest for tiling.")) ( "fuse-matrix-use-loops"  ,
cl::init(false)  ,
cl::Hidden  ,
cl::desc("Generate loop nest for tiling.")   
)
static