Enzyme main
Loading...
Searching...
No Matches
mlir::enzyme Namespace Reference

Namespaces

namespace  batchutils
 
namespace  detail
 
namespace  oputils
 
namespace  transforms
 

Classes

class  ActivityAnalyzer
 Helper class to analyze the differential activity. More...
 
class  ActivityPrinterConfig
 
class  AliasAnalysis
 This analysis implements interprocedural alias analysis. More...
 
class  AliasClassLattice
 
class  BackwardActivityAnnotationAnalysis
 
class  BackwardOriginsLattice
 
class  BackwardOriginsMap
 
struct  CacheInfo
 Information about a cache, each cache init should have one corresponding push and pop. More...
 
class  DenseActivityAnnotationAnalysis
 
class  DenseBackwardActivityAnnotationAnalysis
 
struct  ForLikeEnzymeOpsRemover
 
class  ForwardActivityAnnotationAnalysis
 
class  ForwardOriginsLattice
 
class  ForwardOriginsMap
 
struct  IfLikeEnzymeOpsRemover
 
class  MapOfSetsLattice
 
class  MDiffeGradientUtils
 
class  MEnzymeLogic
 
class  MFnTypeInfo
 
class  MGradientUtils
 
class  MGradientUtilsReverse
 
class  MTypeAnalysis
 
class  MTypeResults
 
class  OriginalClasses
 Alias classes for freshly created, e.g., allocated values. More...
 
class  PointsToPointerAnalysis
 
class  PointsToSets
 
class  SetLattice
 
class  SparseSetLattice
 
class  Utils
 

Typedefs

using ValueOriginSet = SetLattice<OriginAttr>
 
using AliasClassSet = SetLattice<DistinctAttr>
 A set of alias class identifiers to be treated as a single union.
 
typedef void buildReturnFunction(OpBuilder &, mlir::Block *)
 

Enumerations

enum class  LoopCacheType { TENSOR , MEMREF }
 

Functions

void runActivityAnnotations (FunctionOpInterface callee, ArrayRef< enzyme::Activity > argActivities={}, const ActivityPrinterConfig &config=ActivityPrinterConfig())
 
void runDataFlowActivityAnalysis (FunctionOpInterface callee, ArrayRef< enzyme::Activity > argumentActivity, bool print=false, bool verbose=false, bool annotate=false)
 
bool sortAttributes (Attribute a, Attribute b)
 Used when serializing to ensure a consistent order.
 
bool sortArraysLexicographic (ArrayAttr a, ArrayAttr b)
 
template<typename OpTy >
void registerAutoDiffUsingControlFlowInterface (MLIRContext &context)
 
template<typename OpTy >
void registerAutoDiffUsingBranchInterface (MLIRContext &context)
 
template<typename OpTy >
void registerAutoDiffUsingRegionTerminatorInterface (MLIRContext &context)
 
template<typename OpTy >
void registerAutoDiffUsingReturnInterface (MLIRContext &context)
 
template<typename OpTy , int... storedvals>
void registerAutoDiffUsingMemoryIdentityInterface (MLIRContext &context)
 
template<typename OpTy >
void registerAutoDiffUsingAllocationInterface (MLIRContext &context)
 
void registerAffineDialectAutoDiffInterface (DialectRegistry &registry)
 
void registerArithDialectAutoDiffInterface (DialectRegistry &registry)
 
void registerBuiltinDialectAutoDiffInterface (DialectRegistry &registry)
 
void registerLLVMDialectAutoDiffInterface (DialectRegistry &registry)
 
void registerLLVMExtDialectAutoDiffInterface (DialectRegistry &registry)
 
void registerNVVMDialectAutoDiffInterface (DialectRegistry &registry)
 
void registerMemRefDialectAutoDiffInterface (DialectRegistry &registry)
 
void registerComplexDialectAutoDiffInterface (DialectRegistry &registry)
 
void registerSCFDialectAutoDiffInterface (DialectRegistry &registry)
 
void registerCFDialectAutoDiffInterface (DialectRegistry &registry)
 
void registerLinalgDialectAutoDiffInterface (DialectRegistry &registry)
 
void registerMathDialectAutoDiffInterface (DialectRegistry &registry)
 
void registerFuncDialectAutoDiffInterface (DialectRegistry &registry)
 
void registerTensorDialectAutoDiffInterface (DialectRegistry &registry)
 
void registerEnzymeDialectAutoDiffInterface (DialectRegistry &registry)
 
void registerCoreDialectAutodiffInterfaces (DialectRegistry &registry)
 
mlir::TypedAttr getConstantAttr (mlir::Type type, llvm::StringRef value)
 
bool inlineAutodiffOp (enzyme::AutoDiffOp &op, RewriterBase &rewriter, SymbolTableCollection &symbolTable)
 
void minCutCache (Block *forward, Block *reverse, SmallVector< CacheInfo > &caches, PatternRewriter &rewriter, const IRMapping &fwdrevmap, Operation *lastFwd=nullptr)
 
static LoopCacheType getCacheType (Operation *op)
 
static bool hasMinCut (Operation *op)
 
static bool hasLICM (Operation *op)
 
void localizeGradients (OpBuilder &builder, MGradientUtilsReverse *gutils, Block *fwd)
 
void removalBlockExplore (Block *block, IRMapping &mapping, PatternRewriter &rewriter, llvm::SetVector< Value > &gradients, llvm::MapVector< Value, CacheInfo > &caches)
 
bool blockCmp (mlir::Block *a, mlir::Block *b)
 
bool opCmp (mlir::Operation *a, mlir::Operation *b)
 
bool regionCmp (mlir::Region *a, mlir::Region *b)
 
bool valueCmp (mlir::Value a, mlir::Value b)
 
Type getConcatType (Value val, int64_t width)
 
Value getConcatValue (OpBuilder &builder, Location loc, ArrayRef< Value > argList)
 
Value getExtractValue (OpBuilder &builder, Location loc, Type argTy, Value val, int64_t index)
 
void computeAffineIndices (OpBuilder &builder, Location loc, AffineMap map, ValueRange operands, SmallVectorImpl< Value > &indices)
 

Variables

constexpr llvm::StringLiteral undefinedSetString = "<undefined>"
 
constexpr llvm::StringLiteral unknownSetString = "<unknown>"
 
static constexpr llvm::StringLiteral kPreserveCacheAttrName = "preserve_cache"
 

Typedef Documentation

◆ AliasClassSet

using mlir::enzyme::AliasClassSet = SetLattice<DistinctAttr>

A set of alias class identifiers to be treated as a single union.

May be marked as "unknown", which is a conservative pessimistic state, or as "undefined", which is a "not-yet-analyzed" initial state. Undefined state is different from an empty alias set.

Definition at line 47 of file DataFlowAliasAnalysis.h.

◆ buildReturnFunction

typedef void mlir::enzyme::buildReturnFunction(OpBuilder &, mlir::Block *)

Definition at line 13 of file EnzymeLogic.h.

◆ ValueOriginSet

Definition at line 17 of file ActivityAnnotations.h.

Enumeration Type Documentation

◆ LoopCacheType

enum class mlir::enzyme::LoopCacheType
strong
Enumerator
TENSOR 
MEMREF 

Definition at line 72 of file RemovalUtils.h.

Function Documentation

◆ blockCmp()

bool mlir::enzyme::blockCmp ( mlir::Block * a,
mlir::Block * b )

Referenced by valueCmp().

◆ computeAffineIndices()

void mlir::enzyme::computeAffineIndices ( OpBuilder & builder,
Location loc,
AffineMap map,
ValueRange operands,
SmallVectorImpl< Value > & indices )

Definition at line 171 of file Utils.cpp.

◆ getCacheType()

static LoopCacheType mlir::enzyme::getCacheType ( Operation * op)
static

◆ getConcatType()

Type mlir::enzyme::getConcatType ( Value val,
int64_t width )

Definition at line 133 of file Utils.cpp.

Referenced by getConcatValue().

◆ getConcatValue()

Value mlir::enzyme::getConcatValue ( OpBuilder & builder,
Location loc,
ArrayRef< Value > argList )

Definition at line 155 of file Utils.cpp.

References getConcatType().

Referenced by mlir::enzyme::detail::memoryIdentityForwardHandler().

◆ getConstantAttr()

mlir::TypedAttr mlir::enzyme::getConstantAttr ( mlir::Type type,
llvm::StringRef value )

Definition at line 26 of file CoreDialectsAutoDiffImplementations.cpp.

◆ getExtractValue()

Value mlir::enzyme::getExtractValue ( OpBuilder & builder,
Location loc,
Type argTy,
Value val,
int64_t index )

Definition at line 163 of file Utils.cpp.

Referenced by mlir::enzyme::detail::memoryIdentityForwardHandler().

◆ hasLICM()

static bool mlir::enzyme::hasLICM ( Operation * op)
static

◆ hasMinCut()

static bool mlir::enzyme::hasMinCut ( Operation * op)
static

◆ inlineAutodiffOp()

bool mlir::enzyme::inlineAutodiffOp ( enzyme::AutoDiffOp & op,
RewriterBase & rewriter,
SymbolTableCollection & symbolTable )

Definition at line 380 of file InlineEnzymeRegions.cpp.

◆ localizeGradients()

void mlir::enzyme::localizeGradients ( OpBuilder & builder,
MGradientUtilsReverse * gutils,
Block * fwd )

◆ minCutCache()

void mlir::enzyme::minCutCache ( Block * forward,
Block * reverse,
SmallVector< CacheInfo > & caches,
PatternRewriter & rewriter,
const IRMapping & fwdrevmap,
Operation * lastFwd = nullptr )

◆ opCmp()

bool mlir::enzyme::opCmp ( mlir::Operation * a,
mlir::Operation * b )

Referenced by valueCmp().

◆ regionCmp()

bool mlir::enzyme::regionCmp ( mlir::Region * a,
mlir::Region * b )

◆ registerAffineDialectAutoDiffInterface()

void mlir::enzyme::registerAffineDialectAutoDiffInterface ( DialectRegistry & registry)

◆ registerArithDialectAutoDiffInterface()

void mlir::enzyme::registerArithDialectAutoDiffInterface ( DialectRegistry & registry)

◆ registerAutoDiffUsingAllocationInterface()

template<typename OpTy >
void mlir::enzyme::registerAutoDiffUsingAllocationInterface ( MLIRContext & context)

Definition at line 243 of file CoreDialectsAutoDiffImplementations.h.

◆ registerAutoDiffUsingBranchInterface()

template<typename OpTy >
void mlir::enzyme::registerAutoDiffUsingBranchInterface ( MLIRContext & context)

Definition at line 214 of file CoreDialectsAutoDiffImplementations.h.

◆ registerAutoDiffUsingControlFlowInterface()

template<typename OpTy >
void mlir::enzyme::registerAutoDiffUsingControlFlowInterface ( MLIRContext & context)

Definition at line 208 of file CoreDialectsAutoDiffImplementations.h.

◆ registerAutoDiffUsingMemoryIdentityInterface()

template<typename OpTy , int... storedvals>
void mlir::enzyme::registerAutoDiffUsingMemoryIdentityInterface ( MLIRContext & context)

Definition at line 237 of file CoreDialectsAutoDiffImplementations.h.

◆ registerAutoDiffUsingRegionTerminatorInterface()

template<typename OpTy >
void mlir::enzyme::registerAutoDiffUsingRegionTerminatorInterface ( MLIRContext & context)

Definition at line 221 of file CoreDialectsAutoDiffImplementations.h.

◆ registerAutoDiffUsingReturnInterface()

template<typename OpTy >
void mlir::enzyme::registerAutoDiffUsingReturnInterface ( MLIRContext & context)

Definition at line 229 of file CoreDialectsAutoDiffImplementations.h.

◆ registerBuiltinDialectAutoDiffInterface()

void mlir::enzyme::registerBuiltinDialectAutoDiffInterface ( DialectRegistry & registry)

◆ registerCFDialectAutoDiffInterface()

void mlir::enzyme::registerCFDialectAutoDiffInterface ( DialectRegistry & registry)

Definition at line 36 of file CFAutoDiffOpInterfaceImpl.cpp.

Referenced by registerCoreDialectAutodiffInterfaces().

◆ registerComplexDialectAutoDiffInterface()

void mlir::enzyme::registerComplexDialectAutoDiffInterface ( DialectRegistry & registry)

◆ registerCoreDialectAutodiffInterfaces()

◆ registerEnzymeDialectAutoDiffInterface()

void mlir::enzyme::registerEnzymeDialectAutoDiffInterface ( DialectRegistry & registry)

◆ registerFuncDialectAutoDiffInterface()

void mlir::enzyme::registerFuncDialectAutoDiffInterface ( DialectRegistry & registry)

◆ registerLinalgDialectAutoDiffInterface()

void mlir::enzyme::registerLinalgDialectAutoDiffInterface ( DialectRegistry & registry)

◆ registerLLVMDialectAutoDiffInterface()

void mlir::enzyme::registerLLVMDialectAutoDiffInterface ( DialectRegistry & registry)

◆ registerLLVMExtDialectAutoDiffInterface()

void mlir::enzyme::registerLLVMExtDialectAutoDiffInterface ( DialectRegistry & registry)

◆ registerMathDialectAutoDiffInterface()

void mlir::enzyme::registerMathDialectAutoDiffInterface ( DialectRegistry & registry)

◆ registerMemRefDialectAutoDiffInterface()

void mlir::enzyme::registerMemRefDialectAutoDiffInterface ( DialectRegistry & registry)

◆ registerNVVMDialectAutoDiffInterface()

void mlir::enzyme::registerNVVMDialectAutoDiffInterface ( DialectRegistry & registry)

◆ registerSCFDialectAutoDiffInterface()

void mlir::enzyme::registerSCFDialectAutoDiffInterface ( DialectRegistry & registry)

◆ registerTensorDialectAutoDiffInterface()

void mlir::enzyme::registerTensorDialectAutoDiffInterface ( DialectRegistry & registry)

◆ removalBlockExplore()

void mlir::enzyme::removalBlockExplore ( Block * block,
IRMapping & mapping,
PatternRewriter & rewriter,
llvm::SetVector< Value > & gradients,
llvm::MapVector< Value, CacheInfo > & caches )

◆ runActivityAnnotations()

◆ runDataFlowActivityAnalysis()

void mlir::enzyme::runDataFlowActivityAnalysis ( FunctionOpInterface callee,
ArrayRef< enzyme::Activity > argumentActivity,
bool print = false,
bool verbose = false,
bool annotate = false )

◆ sortArraysLexicographic()

bool mlir::enzyme::sortArraysLexicographic ( ArrayAttr a,
ArrayAttr b )

Definition at line 43 of file DataFlowLattice.cpp.

References sortAttributes().

◆ sortAttributes()

bool mlir::enzyme::sortAttributes ( Attribute a,
Attribute b )

Used when serializing to ensure a consistent order.

Definition at line 35 of file DataFlowLattice.cpp.

Referenced by sortArraysLexicographic().

◆ valueCmp()

bool mlir::enzyme::valueCmp ( mlir::Value a,
mlir::Value b )

Definition at line 104 of file Utils.cpp.

References blockCmp(), and opCmp().

Variable Documentation

◆ kPreserveCacheAttrName

llvm::StringLiteral mlir::enzyme::kPreserveCacheAttrName = "preserve_cache"
staticconstexpr

◆ undefinedSetString

llvm::StringLiteral mlir::enzyme::undefinedSetString = "<undefined>"
constexpr

◆ unknownSetString

llvm::StringLiteral mlir::enzyme::unknownSetString = "<unknown>"
constexpr