Enzyme main
Loading...
Searching...
No Matches
FixupJuliaCallingConvention.cpp File Reference
#include "CApi.h"
#include "FunctionUtils.h"
#include "GradientUtils.h"
#include "Utils.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/IR/Module.h"
#include "llvm/Pass.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/Cloning.h"
#include "llvm/Passes/PassBuilder.h"
#include <string>
Include dependency graph for FixupJuliaCallingConvention.cpp:

Go to the source code of this file.

Classes

class  FixupJuliaCallingConventionNewPM
 
class  FixupBatchedJuliaCallingConventionNewPM
 

Macros

#define addAttribute   addAttributeAtIndex
 
#define removeAttribute   removeAttributeAtIndex
 
#define getAttribute   getAttributeAtIndex
 
#define hasAttribute   hasAttributeAtIndex
 

Functions

bool DetectPointerArgOfFn (llvm::Function &F, llvm::SmallPtrSetImpl< llvm::Function * > &calls_todo)
 
bool needsReRooting (llvm::Argument *arg, bool &anyJLStore, llvm::Type *SRetType=nullptr)
 
bool needsReReturning (llvm::Argument *arg, size_t &sret_idx, std::map< size_t, size_t > &srets_without_stores)
 
static bool isOpaque (llvm::Type *T)
 
static void removeRange (std::vector< std::pair< uint64_t, uint64_t > > &ranges, uint64_t start, uint64_t end)
 
static bool isReadOnlyNoCapture (Function *F, unsigned argNo)
 
static bool isGuaranteedToFullyWrite (Function *F, unsigned argNo, Type *T)
 
void EnzymeFixupJuliaCallingConvention (Function *F, bool sret_jlvalue)
 
void EnzymeFixupBatchedJuliaCallingConvention (Function *F)
 
bool registerFixupJuliaPass (StringRef Name, ModulePassManager &MPM)
 

Macro Definition Documentation

◆ addAttribute

#define addAttribute   addAttributeAtIndex

Definition at line 15 of file FixupJuliaCallingConvention.cpp.

◆ getAttribute

#define getAttribute   getAttributeAtIndex

◆ hasAttribute

#define hasAttribute   hasAttributeAtIndex

Definition at line 18 of file FixupJuliaCallingConvention.cpp.

◆ removeAttribute

#define removeAttribute   removeAttributeAtIndex

Definition at line 16 of file FixupJuliaCallingConvention.cpp.

Function Documentation

◆ DetectPointerArgOfFn()

bool DetectPointerArgOfFn ( llvm::Function & F,
llvm::SmallPtrSetImpl< llvm::Function * > & calls_todo )
extern

◆ EnzymeFixupBatchedJuliaCallingConvention()

void EnzymeFixupBatchedJuliaCallingConvention ( Function * F)

◆ EnzymeFixupJuliaCallingConvention()

◆ isGuaranteedToFullyWrite()

static bool isGuaranteedToFullyWrite ( Function * F,
unsigned argNo,
Type * T )
static

Definition at line 455 of file FixupJuliaCallingConvention.cpp.

References removeRange().

Referenced by EnzymeFixupJuliaCallingConvention().

◆ isOpaque()

static bool isOpaque ( llvm::Type * T)
static

Definition at line 425 of file FixupJuliaCallingConvention.cpp.

Referenced by EnzymeFixupJuliaCallingConvention().

◆ isReadOnlyNoCapture()

static bool isReadOnlyNoCapture ( Function * F,
unsigned argNo )
static

Definition at line 450 of file FixupJuliaCallingConvention.cpp.

Referenced by EnzymeFixupJuliaCallingConvention().

◆ needsReReturning()

bool needsReReturning ( llvm::Argument * arg,
size_t & sret_idx,
std::map< size_t, size_t > & srets_without_stores )

◆ needsReRooting()

bool needsReRooting ( llvm::Argument * arg,
bool & anyJLStore,
llvm::Type * SRetType = nullptr )

◆ registerFixupJuliaPass()

bool registerFixupJuliaPass ( StringRef Name,
ModulePassManager & MPM )

Definition at line 1604 of file FixupJuliaCallingConvention.cpp.

◆ removeRange()

static void removeRange ( std::vector< std::pair< uint64_t, uint64_t > > & ranges,
uint64_t start,
uint64_t end )
static

Definition at line 433 of file FixupJuliaCallingConvention.cpp.

Referenced by isGuaranteedToFullyWrite().