Polly 22.0.0git
MatmulOptimizer.cpp File Reference
#include "polly/MatmulOptimizer.h"
#include "polly/DependenceInfo.h"
#include "polly/Options.h"
#include "polly/ScheduleTreeTransform.h"
#include "polly/ScopInfo.h"
#include "polly/ScopPass.h"
#include "polly/Simplify.h"
#include "polly/Support/GICHelper.h"
#include "polly/Support/ISLTools.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/Sequence.h"
#include "llvm/ADT/SetOperations.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/iterator_range.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/TypeSize.h"
#include "llvm/Support/raw_ostream.h"
#include "isl/ctx.h"
#include "isl/schedule_node.h"
#include "isl/schedule_type.h"
#include "isl/union_map.h"
#include "isl/union_set.h"
#include <algorithm>
#include <cassert>
#include <cmath>
#include <cstdint>
#include <string>
#include <vector>
#include "polly/Support/PollyDebug.h"

Go to the source code of this file.

Namespaces

namespace  llvm

Macros

#define DEBUG_TYPE   "polly-opt-isl"

Functions

static cl::opt< int > LatencyVectorFma ("polly-target-latency-vector-fma", cl::desc("The minimal number of cycles between issuing two " "dependent consecutive vector fused multiply-add " "instructions."), cl::Hidden, cl::init(8), cl::cat(PollyCategory))
static cl::opt< int > ThroughputVectorFma ("polly-target-throughput-vector-fma", cl::desc("A throughput of the processor floating-point arithmetic units " "expressed in the number of vector fused multiply-add " "instructions per clock cycle."), cl::Hidden, cl::init(1), cl::cat(PollyCategory))
static cl::opt< int > FirstCacheLevelSize ("polly-target-1st-cache-level-size", cl::desc("The size of the first cache level specified in bytes."), cl::Hidden, cl::init(-1), cl::cat(PollyCategory))
static cl::opt< int > FirstCacheLevelDefaultSize ("polly-target-1st-cache-level-default-size", cl::desc("The default size of the first cache level specified in bytes" " (if not enough were provided by the TargetTransformInfo)."), cl::Hidden, cl::init(32768), cl::cat(PollyCategory))
static cl::opt< int > SecondCacheLevelSize ("polly-target-2nd-cache-level-size", cl::desc("The size of the second level specified in bytes."), cl::Hidden, cl::init(-1), cl::cat(PollyCategory))
static cl::opt< int > SecondCacheLevelDefaultSize ("polly-target-2nd-cache-level-default-size", cl::desc("The default size of the second cache level specified in bytes" " (if not enough were provided by the TargetTransformInfo)."), cl::Hidden, cl::init(262144), cl::cat(PollyCategory))
static cl::opt< int > FirstCacheLevelAssociativity ("polly-target-1st-cache-level-associativity", cl::desc("The associativity of the first cache level."), cl::Hidden, cl::init(-1), cl::cat(PollyCategory))
static cl::opt< int > FirstCacheLevelDefaultAssociativity ("polly-target-1st-cache-level-default-associativity", cl::desc("The default associativity of the first cache level" " (if not enough were provided by the TargetTransformInfo)."), cl::Hidden, cl::init(8), cl::cat(PollyCategory))
static cl::opt< int > SecondCacheLevelAssociativity ("polly-target-2nd-cache-level-associativity", cl::desc("The associativity of the second cache level."), cl::Hidden, cl::init(-1), cl::cat(PollyCategory))
static cl::opt< int > SecondCacheLevelDefaultAssociativity ("polly-target-2nd-cache-level-default-associativity", cl::desc("The default associativity of the second cache level" " (if not enough were provided by the TargetTransformInfo)."), cl::Hidden, cl::init(8), cl::cat(PollyCategory))
static cl::opt< int > VectorRegisterBitwidth ("polly-target-vector-register-bitwidth", cl::desc("The size in bits of a vector register (if not set, this " "information is taken from LLVM's target information."), cl::Hidden, cl::init(-1), cl::cat(PollyCategory))
static cl::opt< int > PollyPatternMatchingNcQuotient ("polly-pattern-matching-nc-quotient", cl::desc("Quotient that is obtained by dividing Nc, the parameter of the" "macro-kernel, by Nr, the parameter of the micro-kernel"), cl::Hidden, cl::init(256), cl::cat(PollyCategory))
static cl::opt< bool > PMBasedTCOpts ("polly-tc-opt", cl::desc("Perform optimizations of tensor contractions based " "on pattern matching"), cl::init(false), cl::ZeroOrMore, cl::cat(PollyCategory))
static cl::opt< bool > PMBasedMMMOpts ("polly-matmul-opt", cl::desc("Perform optimizations of matrix multiplications " "based on pattern matching"), cl::init(true), cl::ZeroOrMore, cl::cat(PollyCategory))
static cl::opt< int > OptComputeOut ("polly-tc-dependences-computeout", cl::desc("Bound the dependence analysis by a maximal amount of " "computational steps (0 means no bound)"), cl::Hidden, cl::init(500000), cl::ZeroOrMore, cl::cat(PollyCategory))

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "polly-opt-isl"

Definition at line 46 of file MatmulOptimizer.cpp.

Function Documentation

◆ FirstCacheLevelAssociativity()

cl::opt< int > FirstCacheLevelAssociativity ( "polly-target-1st-cache-level-associativity" ,
cl::desc("The associativity of the first cache level.") ,
cl::Hidden ,
cl::init(-1) ,
cl::cat(PollyCategory)  )
static

References PollyCategory.

◆ FirstCacheLevelDefaultAssociativity()

cl::opt< int > FirstCacheLevelDefaultAssociativity ( "polly-target-1st-cache-level-default-associativity" ,
cl::desc("The default associativity of the first cache level" " (if not enough were provided by the TargetTransformInfo).") ,
cl::Hidden ,
cl::init(8) ,
cl::cat(PollyCategory)  )
static

References PollyCategory.

◆ FirstCacheLevelDefaultSize()

cl::opt< int > FirstCacheLevelDefaultSize ( "polly-target-1st-cache-level-default-size" ,
cl::desc("The default size of the first cache level specified in bytes" " (if not enough were provided by the TargetTransformInfo).") ,
cl::Hidden ,
cl::init(32768) ,
cl::cat(PollyCategory)  )
static

References PollyCategory.

◆ FirstCacheLevelSize()

cl::opt< int > FirstCacheLevelSize ( "polly-target-1st-cache-level-size" ,
cl::desc("The size of the first cache level specified in bytes.") ,
cl::Hidden ,
cl::init(-1) ,
cl::cat(PollyCategory)  )
static

References PollyCategory.

◆ LatencyVectorFma()

cl::opt< int > LatencyVectorFma ( "polly-target-latency-vector-fma" ,
cl::desc("The minimal number of cycles between issuing two " "dependent consecutive vector fused multiply-add " "instructions.") ,
cl::Hidden ,
cl::init(8) ,
cl::cat(PollyCategory)  )
static

References PollyCategory.

◆ OptComputeOut()

cl::opt< int > OptComputeOut ( "polly-tc-dependences-computeout" ,
cl::desc("Bound the dependence analysis by a maximal amount of " "computational steps (0 means no bound)") ,
cl::Hidden ,
cl::init(500000) ,
cl::ZeroOrMore ,
cl::cat(PollyCategory)  )
static

References PollyCategory.

◆ PMBasedMMMOpts()

cl::opt< bool > PMBasedMMMOpts ( "polly-matmul-opt" ,
cl::desc("Perform optimizations of matrix multiplications " "based on pattern matching") ,
cl::init(true) ,
cl::ZeroOrMore ,
cl::cat(PollyCategory)  )
static

◆ PMBasedTCOpts()

cl::opt< bool > PMBasedTCOpts ( "polly-tc-opt" ,
cl::desc("Perform optimizations of tensor contractions based " "on pattern matching") ,
cl::init(false) ,
cl::ZeroOrMore ,
cl::cat(PollyCategory)  )
static

◆ PollyPatternMatchingNcQuotient()

cl::opt< int > PollyPatternMatchingNcQuotient ( "polly-pattern-matching-nc-quotient" ,
cl::desc("Quotient that is obtained by dividing Nc, the parameter of the" "macro-kernel, by Nr, the parameter of the micro-kernel") ,
cl::Hidden ,
cl::init(256) ,
cl::cat(PollyCategory)  )
static

References PollyCategory.

◆ SecondCacheLevelAssociativity()

cl::opt< int > SecondCacheLevelAssociativity ( "polly-target-2nd-cache-level-associativity" ,
cl::desc("The associativity of the second cache level.") ,
cl::Hidden ,
cl::init(-1) ,
cl::cat(PollyCategory)  )
static

References PollyCategory.

◆ SecondCacheLevelDefaultAssociativity()

cl::opt< int > SecondCacheLevelDefaultAssociativity ( "polly-target-2nd-cache-level-default-associativity" ,
cl::desc("The default associativity of the second cache level" " (if not enough were provided by the TargetTransformInfo).") ,
cl::Hidden ,
cl::init(8) ,
cl::cat(PollyCategory)  )
static

References PollyCategory.

◆ SecondCacheLevelDefaultSize()

cl::opt< int > SecondCacheLevelDefaultSize ( "polly-target-2nd-cache-level-default-size" ,
cl::desc("The default size of the second cache level specified in bytes" " (if not enough were provided by the TargetTransformInfo).") ,
cl::Hidden ,
cl::init(262144) ,
cl::cat(PollyCategory)  )
static

References PollyCategory.

◆ SecondCacheLevelSize()

cl::opt< int > SecondCacheLevelSize ( "polly-target-2nd-cache-level-size" ,
cl::desc("The size of the second level specified in bytes.") ,
cl::Hidden ,
cl::init(-1) ,
cl::cat(PollyCategory)  )
static

References PollyCategory.

◆ ThroughputVectorFma()

cl::opt< int > ThroughputVectorFma ( "polly-target-throughput-vector-fma" ,
cl::desc("A throughput of the processor floating-point arithmetic units " "expressed in the number of vector fused multiply-add " "instructions per clock cycle.") ,
cl::Hidden ,
cl::init(1) ,
cl::cat(PollyCategory)  )
static

References PollyCategory.

◆ VectorRegisterBitwidth()

cl::opt< int > VectorRegisterBitwidth ( "polly-target-vector-register-bitwidth" )
static

References PollyCategory.