Enzyme main
Loading...
Searching...
No Matches
Enzyme.cpp File Reference
#include <llvm/Config/llvm-config.h>
#include <memory>
#include "SCEV/ScalarEvolution.h"
#include "SCEV/ScalarEvolutionExpander.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/MapVector.h"
#include <optional>
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Passes/PassBuilder.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/MDBuilder.h"
#include "llvm/IR/Metadata.h"
#include "llvm/Analysis/ScalarEvolution.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Transforms/Scalar.h"
#include "llvm/Analysis/BasicAliasAnalysis.h"
#include "llvm/Analysis/GlobalsModRef.h"
#include "llvm/Analysis/InlineAdvisor.h"
#include "llvm/Analysis/InlineCost.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/IR/AbstractCallSite.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/Cloning.h"
#include "ActivityAnalysis.h"
#include "DiffeGradientUtils.h"
#include "EnzymeLogic.h"
#include "GradientUtils.h"
#include "PassUtils.h"
#include "TraceInterface.h"
#include "TraceUtils.h"
#include "Utils.h"
#include "InstructionBatcher.h"
#include "llvm/Transforms/Utils.h"
#include "llvm/Transforms/IPO/Attributor.h"
#include "llvm/Transforms/IPO/OpenMPOpt.h"
#include "llvm/Transforms/Utils/Mem2Reg.h"
#include "CApi.h"
#include <llvm-c/Core.h>
#include <llvm-c/Types.h>
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/Passes/PassPlugin.h"
#include "ActivityAnalysisPrinter.h"
#include "JLInstSimplify.h"
#include "PreserveNVVM.h"
#include "SimpleGVN.h"
#include "TypeAnalysis/TypeAnalysisPrinter.h"
#include "llvm/Transforms/AggressiveInstCombine/AggressiveInstCombine.h"
#include "llvm/Transforms/IPO/AlwaysInliner.h"
#include "llvm/Transforms/IPO/CalledValuePropagation.h"
#include "llvm/Transforms/IPO/ConstantMerge.h"
#include "llvm/Transforms/IPO/CrossDSOCFI.h"
#include "llvm/Transforms/IPO/DeadArgumentElimination.h"
#include "llvm/Transforms/IPO/FunctionAttrs.h"
#include "llvm/Transforms/IPO/GlobalDCE.h"
#include "llvm/Transforms/IPO/GlobalOpt.h"
#include "llvm/Transforms/IPO/GlobalSplit.h"
#include "llvm/Transforms/IPO/InferFunctionAttrs.h"
#include "llvm/Transforms/IPO/SCCP.h"
#include "llvm/Transforms/InstCombine/InstCombine.h"
#include "llvm/Transforms/Scalar/CallSiteSplitting.h"
#include "llvm/Transforms/Scalar/EarlyCSE.h"
#include "llvm/Transforms/Scalar/Float2Int.h"
#include "llvm/Transforms/Scalar/GVN.h"
#include "llvm/Transforms/Scalar/LoopDeletion.h"
#include "llvm/Transforms/Scalar/LoopRotation.h"
#include "llvm/Transforms/Scalar/LoopUnrollPass.h"
#include "llvm/Transforms/Scalar/SROA.h"
#include "llvm/Transforms/IPO/ArgumentPromotion.h"
#include "llvm/Transforms/Scalar/ConstraintElimination.h"
#include "llvm/Transforms/Scalar/DeadStoreElimination.h"
#include "llvm/Transforms/Scalar/JumpThreading.h"
#include "llvm/Transforms/Scalar/MemCpyOptimizer.h"
#include "llvm/Transforms/Scalar/NewGVN.h"
#include "llvm/Transforms/Scalar/TailRecursionElimination.h"
#include "llvm/Transforms/Scalar/IndVarSimplify.h"
#include "llvm/Transforms/Scalar/LICM.h"
#include "llvm/Transforms/Scalar/LoopFlatten.h"
#include "llvm/Transforms/Scalar/MergedLoadStoreMotion.h"
#include "llvm/Transforms/Scalar/LowerConstantIntrinsics.h"
#include "llvm/Transforms/Scalar/LowerMatrixIntrinsics.h"

Go to the source code of this file.

Classes

class  EnzymeNewPM
 

Namespaces

namespace  llvm
 

Macros

#define DEBUG_TYPE   "lower-enzyme-intrinsic"
 
#define addAttribute   addAttributeAtIndex
 
#define getAttribute   getAttributeAtIndex
 
#define EnableLoopFlatten   false
 
#define EagerlyInvalidateAnalyses   false
 
#define RunNewGVN   false
 
#define EnableConstraintElimination   true
 
#define UseInlineAdvisor   InliningAdvisorMode::Default
 
#define EnableMemProfContextDisambiguation   false
 
#define EnableMatrix   false
 
#define EnableModuleInliner   false
 

Functions

llvm::cl::opt< bool > EnzymeEnable ("enzyme-enable", cl::init(true), cl::Hidden, cl::desc("Run the Enzyme pass"))
 
llvm::cl::opt< bool > EnzymePostOpt ("enzyme-postopt", cl::init(false), cl::Hidden, cl::desc("Run enzymepostprocessing optimizations"))
 
llvm::cl::opt< bool > EnzymeAttributor ("enzyme-attributor", cl::init(false), cl::Hidden, cl::desc("Run attributor post Enzyme"))
 
llvm::cl::opt< bool > EnzymeOMPOpt ("enzyme-omp-opt", cl::init(false), cl::Hidden, cl::desc("Whether to enable openmp opt"))
 
llvm::cl::opt< bool > EnzymeDetectReadThrow ("enzyme-detect-readthrow", cl::init(true), cl::Hidden, cl::desc("Run preprocessing detect readonly or throw optimization"))
 
llvm::cl::opt< std::string > EnzymeTruncateAll ("enzyme-truncate-all", cl::init(""), cl::Hidden, cl::desc("Truncate all floating point operations. " "E.g. \"64to32\" or \"64to<exponent_width>-<significand_width>\"."))
 
static RegisterPass< EnzymeOldPM > X ("enzyme", "Enzyme Pass")
 
ModulePasscreateEnzymePass (bool PostOpt)
 
void AddEnzymePass (LLVMPassManagerRef PM)
 
static InlineParams getInlineParamsFromOptLevel (OptimizationLevel Level)
 
void augmentPassBuilder (llvm::PassBuilder &PB)
 
bool registerFixupJuliaPass (llvm::StringRef Name, llvm::ModulePassManager &MPM)
 
void registerEnzymeAndPassPipeline (llvm::PassBuilder &PB, bool augment=false)
 
void registerEnzyme (llvm::PassBuilder &PB)
 
::llvm::PassPluginLibraryInfo LLVM_ATTRIBUTE_WEAK llvmGetPassPluginInfo ()
 

Variables

cl::opt< unsigned > llvm::SetLicmMssaNoAccForPromotionCap
 
cl::opt< unsigned > llvm::SetLicmMssaOptCap
 

Macro Definition Documentation

◆ addAttribute

#define addAttribute   addAttributeAtIndex

Definition at line 124 of file Enzyme.cpp.

◆ DEBUG_TYPE

#define DEBUG_TYPE   "lower-enzyme-intrinsic"

Definition at line 98 of file Enzyme.cpp.

◆ EagerlyInvalidateAnalyses

#define EagerlyInvalidateAnalyses   false

Definition at line 3138 of file Enzyme.cpp.

Referenced by augmentPassBuilder().

◆ EnableConstraintElimination

#define EnableConstraintElimination   true

Definition at line 3140 of file Enzyme.cpp.

Referenced by augmentPassBuilder().

◆ EnableLoopFlatten

#define EnableLoopFlatten   false

Definition at line 3137 of file Enzyme.cpp.

Referenced by augmentPassBuilder().

◆ EnableMatrix

#define EnableMatrix   false

Definition at line 3144 of file Enzyme.cpp.

Referenced by augmentPassBuilder().

◆ EnableMemProfContextDisambiguation

#define EnableMemProfContextDisambiguation   false

Definition at line 3142 of file Enzyme.cpp.

◆ EnableModuleInliner

#define EnableModuleInliner   false

Definition at line 3145 of file Enzyme.cpp.

Referenced by augmentPassBuilder().

◆ getAttribute

#define getAttribute   getAttributeAtIndex

Definition at line 125 of file Enzyme.cpp.

◆ RunNewGVN

#define RunNewGVN   false

Definition at line 3139 of file Enzyme.cpp.

Referenced by augmentPassBuilder().

◆ UseInlineAdvisor

#define UseInlineAdvisor   InliningAdvisorMode::Default

Definition at line 3141 of file Enzyme.cpp.

Referenced by augmentPassBuilder().

Function Documentation

◆ AddEnzymePass()

void AddEnzymePass ( LLVMPassManagerRef PM)

Definition at line 3050 of file Enzyme.cpp.

References createEnzymePass().

◆ augmentPassBuilder()

◆ createEnzymePass()

ModulePass * createEnzymePass ( bool PostOpt)

Definition at line 3043 of file Enzyme.cpp.

Referenced by AddEnzymePass(), and loadPass().

◆ EnzymeAttributor()

llvm::cl::opt< bool > EnzymeAttributor ( "enzyme-attributor" ,
cl::init(false) ,
cl::Hidden ,
cl::desc("Run attributor post Enzyme")  )

◆ EnzymeDetectReadThrow()

llvm::cl::opt< bool > EnzymeDetectReadThrow ( "enzyme-detect-readthrow" ,
cl::init(true) ,
cl::Hidden ,
cl::desc("Run preprocessing detect readonly or throw optimization")  )

◆ EnzymeEnable()

llvm::cl::opt< bool > EnzymeEnable ( "enzyme-enable" ,
cl::init(true) ,
cl::Hidden ,
cl::desc("Run the Enzyme pass")  )

◆ EnzymeOMPOpt()

llvm::cl::opt< bool > EnzymeOMPOpt ( "enzyme-omp-opt" ,
cl::init(false) ,
cl::Hidden ,
cl::desc("Whether to enable openmp opt")  )

◆ EnzymePostOpt()

llvm::cl::opt< bool > EnzymePostOpt ( "enzyme-postopt" ,
cl::init(false) ,
cl::Hidden ,
cl::desc("Run enzymepostprocessing optimizations")  )

◆ EnzymeTruncateAll()

llvm::cl::opt< std::string > EnzymeTruncateAll ( "enzyme-truncate-all" ,
cl::init("") ,
cl::Hidden ,
cl::desc("Truncate all floating point operations. " "E.g. \"64to32\" or \"64to<exponent_width>-<significand_width>\".")  )

◆ getInlineParamsFromOptLevel()

static InlineParams getInlineParamsFromOptLevel ( OptimizationLevel Level)
static

Definition at line 3124 of file Enzyme.cpp.

Referenced by augmentPassBuilder().

◆ llvmGetPassPluginInfo()

::llvm::PassPluginLibraryInfo LLVM_ATTRIBUTE_WEAK llvmGetPassPluginInfo ( )

Definition at line 3548 of file Enzyme.cpp.

References registerEnzyme().

◆ registerEnzyme()

void registerEnzyme ( llvm::PassBuilder & PB)

Definition at line 3539 of file Enzyme.cpp.

References registerEnzymeAndPassPipeline().

Referenced by EnzymePlugin::EnzymePlugin(), llvmGetPassPluginInfo(), and main().

◆ registerEnzymeAndPassPipeline()

void registerEnzymeAndPassPipeline ( llvm::PassBuilder & PB,
bool augment = false )

Definition at line 3491 of file Enzyme.cpp.

References augmentPassBuilder(), and registerFixupJuliaPass().

Referenced by registerEnzyme().

◆ registerFixupJuliaPass()

bool registerFixupJuliaPass ( llvm::StringRef Name,
llvm::ModulePassManager & MPM )

◆ X()

static RegisterPass< EnzymeOldPM > X ( "enzyme" ,
"Enzyme Pass"  )
static