Enzyme main
Loading...
Searching...
No Matches
DataFlowActivityAnalysis.cpp File Reference
#include "DataFlowActivityAnalysis.h"
#include "DataFlowAliasAnalysis.h"
#include "Dialect/Ops.h"
#include "Interfaces/AutoDiffTypeInterface.h"
#include "mlir/Analysis/DataFlow/ConstantPropagationAnalysis.h"
#include "mlir/Analysis/DataFlow/DeadCodeAnalysis.h"
#include "mlir/Analysis/DataFlow/DenseAnalysis.h"
#include "mlir/Analysis/DataFlow/SparseAnalysis.h"
#include "mlir/Analysis/DataFlowFramework.h"
#include "mlir/Interfaces/SideEffectInterfaces.h"
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
#include "mlir/Dialect/Linalg/IR/Linalg.h"
#include "mlir/Dialect/MemRef/IR/MemRef.h"
#include "mlir/Analysis/AliasAnalysis/LocalAliasAnalysis.h"
#include "Interfaces/AutoDiffOpInterface.h"
Include dependency graph for DataFlowActivityAnalysis.cpp:

Go to the source code of this file.

Classes

class  ValueActivity
 
class  ForwardValueActivity
 
class  BackwardValueActivity
 
struct  MemoryActivityState
 This needs to keep track of three things: More...
 
class  MemoryActivity
 
class  ForwardMemoryActivity
 
class  BackwardMemoryActivity
 
class  SparseForwardActivityAnalysis
 Sparse activity analysis reasons about activity by traversing forward down the def-use chains starting from active function arguments. More...
 
class  SparseBackwardActivityAnalysis
 
class  DenseForwardActivityAnalysis
 
class  DenseBackwardActivityAnalysis
 

Enumerations

enum class  ActivityKind { Constant , ActiveVal , Unknown }
 From LLVM Enzyme's activity analysis, there are four activity states. More...
 

Functions

raw_ostream & operator<< (raw_ostream &os, const ValueActivity &val)
 
raw_ostream & operator<< (raw_ostream &os, const CallControlFlowAction &action)
 
std::optional< Value > getStored (Operation *op)
 
std::optional< Value > getCopySource (Operation *op)
 
void forEachAliasedAlloc (const AliasClassLattice *ptrAliasClass, function_ref< void(DistinctAttr)> forEachFn)
 The dense analyses operate using a pointer's "canonical allocation", the Value corresponding to its allocation.
 
void traverseCallGraph (FunctionOpInterface root, SymbolTableCollection *symbolTable, function_ref< void(FunctionOpInterface)> processFunc)
 
void printActivityAnalysisResults (DataFlowSolver &solver, FunctionOpInterface callee, const SmallPtrSet< Operation *, 2 > &returnOps, SymbolTableCollection *symbolTable, bool verbose, bool annotate)
 

Enumeration Type Documentation

◆ ActivityKind

enum class ActivityKind
strong

From LLVM Enzyme's activity analysis, there are four activity states.

Enumerator
Constant 
ActiveVal 
Unknown 

Definition at line 60 of file DataFlowActivityAnalysis.cpp.

Function Documentation

◆ forEachAliasedAlloc()

void forEachAliasedAlloc ( const AliasClassLattice * ptrAliasClass,
function_ref< void(DistinctAttr)> forEachFn )

The dense analyses operate using a pointer's "canonical allocation", the Value corresponding to its allocation.

The callback may receive null allocation when the class alias set is unknown. If the classes are undefined, the callback will not be called at all.

Definition at line 497 of file DataFlowActivityAnalysis.cpp.

Referenced by DenseBackwardActivityAnalysis::visitOperation(), and DenseForwardActivityAnalysis::visitOperation().

◆ getCopySource()

◆ getStored()

◆ operator<<() [1/2]

raw_ostream & operator<< ( raw_ostream & os,
const CallControlFlowAction & action )

Definition at line 167 of file DataFlowActivityAnalysis.cpp.

◆ operator<<() [2/2]

raw_ostream & operator<< ( raw_ostream & os,
const ValueActivity & val )

Definition at line 130 of file DataFlowActivityAnalysis.cpp.

References ValueActivity::print().

◆ printActivityAnalysisResults()

void printActivityAnalysisResults ( DataFlowSolver & solver,
FunctionOpInterface callee,
const SmallPtrSet< Operation *, 2 > & returnOps,
SymbolTableCollection * symbolTable,
bool verbose,
bool annotate )

◆ traverseCallGraph()

void traverseCallGraph ( FunctionOpInterface root,
SymbolTableCollection * symbolTable,
function_ref< void(FunctionOpInterface)> processFunc )

Definition at line 825 of file DataFlowActivityAnalysis.cpp.