|
Enzyme main
|
Helper class that computes the fixed-point type results of a given function. More...
#include "TypeAnalysis/TypeAnalysis.h"


Public Member Functions | |
| FnTypeInfo | getCallInfo (llvm::CallBase &CI, llvm::Function &fn) |
| TypeAnalyzer (TypeAnalysis &TA) | |
| TypeAnalyzer (const FnTypeInfo &fn, TypeAnalysis &TA, uint8_t direction=BOTH) | |
| TypeAnalyzer (const FnTypeInfo &fn, TypeAnalysis &TA, const llvm::SmallPtrSetImpl< llvm::BasicBlock * > ¬ForAnalysis, const TypeAnalyzer &Prev, uint8_t direction=BOTH, bool PHIRecur=false) | |
| const TypeTree & | getAnalysis (llvm::Value *Val) |
| Get the current results for a given value. | |
| void | updateAnalysis (llvm::Value *val, BaseType data, llvm::Value *origin) |
| Add additional information to the Type info of val, readding it to the work queue as necessary. | |
| void | updateAnalysis (llvm::Value *val, ConcreteType data, llvm::Value *origin) |
| void | updateAnalysis (llvm::Value *val, TypeTree data, llvm::Value *origin) |
| void | prepareArgs () |
| Analyze type info given by the arguments, possibly adding to work queue. | |
| void | considerTBAA () |
| Analyze type info given by the TBAA, possibly adding to work queue. | |
| void | run () |
| Run the interprocedural type analysis starting from this function. | |
| void | runPHIHypotheses () |
| Hypothesize that undefined phi's are integers and try to prove that they are really integral. | |
| void | visitValue (llvm::Value &val) |
| void | visitConstantExpr (llvm::ConstantExpr &CE) |
| void | visitCmpInst (llvm::CmpInst &I) |
| void | visitAllocaInst (llvm::AllocaInst &I) |
| void | visitLoadInst (llvm::LoadInst &I) |
| void | visitStoreInst (llvm::StoreInst &I) |
| void | visitGetElementPtrInst (llvm::GetElementPtrInst &gep) |
| void | visitGEPOperator (llvm::GEPOperator &gep) |
| void | visitPHINode (llvm::PHINode &phi) |
| void | visitTruncInst (llvm::TruncInst &I) |
| void | visitZExtInst (llvm::ZExtInst &I) |
| void | visitSExtInst (llvm::SExtInst &I) |
| void | visitAddrSpaceCastInst (llvm::AddrSpaceCastInst &I) |
| void | visitFPExtInst (llvm::FPExtInst &I) |
| void | visitFPTruncInst (llvm::FPTruncInst &I) |
| void | visitFPToUIInst (llvm::FPToUIInst &I) |
| void | visitFPToSIInst (llvm::FPToSIInst &I) |
| void | visitUIToFPInst (llvm::UIToFPInst &I) |
| void | visitSIToFPInst (llvm::SIToFPInst &I) |
| void | visitPtrToIntInst (llvm::PtrToIntInst &I) |
| void | visitIntToPtrInst (llvm::IntToPtrInst &I) |
| void | visitBitCastInst (llvm::BitCastInst &I) |
| void | visitSelectInst (llvm::SelectInst &I) |
| void | visitExtractElementInst (llvm::ExtractElementInst &I) |
| void | visitInsertElementInst (llvm::InsertElementInst &I) |
| void | visitShuffleVectorInst (llvm::ShuffleVectorInst &I) |
| void | visitExtractValueInst (llvm::ExtractValueInst &I) |
| void | visitInsertValueInst (llvm::InsertValueInst &I) |
| void | visitAtomicRMWInst (llvm::AtomicRMWInst &I) |
| void | visitBinaryOperator (llvm::BinaryOperator &I) |
| void | visitBinaryOperation (const llvm::DataLayout &DL, llvm::Type *T, llvm::Instruction::BinaryOps, llvm::Value *Args[2], TypeTree &Ret, TypeTree &LHS, TypeTree &RHS, llvm::Instruction *I) |
| void | visitIPOCall (llvm::CallBase &call, llvm::Function &fn) |
| void | visitCallBase (llvm::CallBase &call) |
| void | visitMemTransferInst (llvm::MemTransferInst &MTI) |
| void | visitMemTransferCommon (llvm::CallBase &MTI) |
| void | visitIntrinsicInst (llvm::IntrinsicInst &II) |
| TypeTree | getReturnAnalysis () |
| void | dump (llvm::raw_ostream &ss=llvm::errs()) |
| std::set< int64_t > | knownIntegralValues (llvm::Value *val) |
Public Attributes | |
| std::shared_ptr< llvm::ModuleSlotTracker > | MST |
| Cache of metadata indices, for faster printing. | |
| llvm::SetVector< llvm::Value *, std::deque< llvm::Value * > > | workList |
| List of value's which should be re-analyzed now with new information. | |
| const llvm::SmallPtrSet< llvm::BasicBlock *, 4 > | notForAnalysis |
| const FnTypeInfo | fntypeinfo |
| Calling context. | |
| TypeAnalysis & | interprocedural |
| Calling TypeAnalysis to be used in the case of calls to other functions. | |
| uint8_t | direction |
| Directionality of checks. | |
| bool | Invalid |
| Whether an inconsistent update has been found This will only be set when direction != Both, erring otherwise. | |
| bool | PHIRecur |
| std::map< llvm::Value *, TypeTree > | analysis |
| Intermediate conservative, but correct Type analysis results. | |
| llvm::TargetLibraryInfo & | TLI |
| llvm::DominatorTree & | DT |
| llvm::PostDominatorTree & | PDT |
| llvm::LoopInfo & | LI |
| llvm::ScalarEvolution & | SE |
Static Public Attributes | |
| static constexpr uint8_t | UP = 1 |
| static constexpr uint8_t | DOWN = 2 |
| static constexpr uint8_t | BOTH = UP | DOWN |
Helper class that computes the fixed-point type results of a given function.
Definition at line 248 of file TypeAnalysis.h.
| TypeAnalyzer::TypeAnalyzer | ( | TypeAnalysis & | TA | ) |
| TypeAnalyzer::TypeAnalyzer | ( | const FnTypeInfo & | fn, |
| TypeAnalysis & | TA, | ||
| uint8_t | direction = BOTH ) |
Definition at line 262 of file TypeAnalysis.cpp.
References fntypeinfo, FnTypeInfo::Function, FnTypeInfo::KnownValues, notForAnalysis, and workList.
| TypeAnalyzer::TypeAnalyzer | ( | const FnTypeInfo & | fn, |
| TypeAnalysis & | TA, | ||
| const llvm::SmallPtrSetImpl< llvm::BasicBlock * > & | notForAnalysis, | ||
| const TypeAnalyzer & | Prev, | ||
| uint8_t | direction = BOTH, | ||
| bool | PHIRecur = false ) |
Definition at line 297 of file TypeAnalysis.cpp.
References fntypeinfo, FnTypeInfo::Function, and FnTypeInfo::KnownValues.
| void TypeAnalyzer::considerTBAA | ( | ) |
Analyze type info given by the TBAA, possibly adding to work queue.
Definition at line 1429 of file TypeAnalysis.cpp.
References checkEnzymeTypeExtent(), DT, fntypeinfo, TypeTree::fromMD(), FnTypeInfo::Function, TypeTree::insert(), Integer, TypeTree::isKnownPastPointer(), FnTypeInfo::knownIntegralValues(), LI, TypeTree::Lookup(), max(), MST, notForAnalysis, TypeTree::Only(), TypeTree::parse(), parseTBAA(), Pointer, TypeTree::PurgeAnything(), SE, TypeTree::ShiftIndices(), TypeTree::str(), updateAnalysis(), and visitCallBase().
| void TypeAnalyzer::dump | ( | llvm::raw_ostream & | ss = llvm::errs() | ) |
Definition at line 3026 of file TypeAnalysis.cpp.
References analysis, fntypeinfo, FnTypeInfo::Function, knownIntegralValues(), MST, and to_string().
Referenced by analyzeIntelSubscriptIntrinsic(), TypeResults::dump(), visitAtomicRMWInst(), visitBinaryOperation(), visitGEPOperator(), visitIntrinsicInst(), visitMemTransferCommon(), and visitPHINode().
| const TypeTree & TypeAnalyzer::getAnalysis | ( | llvm::Value * | Val | ) |
Get the current results for a given value.
Definition at line 1074 of file TypeAnalysis.cpp.
References analysis, AugmentWithJuliaObjectType(), EnzymeJuliaAddrLoad, fntypeinfo, FnTypeInfo::Function, getConstantAnalysis(), Integer, and TypeTree::Only().
Referenced by analyzeIntelSubscriptIntrinsic(), getCallInfo(), getConstantAnalysis(), getReturnAnalysis(), prepareArgs(), TypeResults::query(), runPHIHypotheses(), visitAddrSpaceCastInst(), visitAllocaInst(), visitAtomicRMWInst(), visitBinaryOperator(), visitBitCastInst(), visitCallBase(), visitCmpInst(), visitConstantExpr(), visitExtractElementInst(), visitExtractValueInst(), visitGEPOperator(), visitInsertElementInst(), visitInsertValueInst(), visitIntrinsicInst(), visitIntToPtrInst(), visitIPOCall(), visitLoadInst(), visitMemTransferCommon(), visitPHINode(), visitPtrToIntInst(), visitSelectInst(), visitShuffleVectorInst(), visitStoreInst(), visitTruncInst(), and visitZExtInst().
| FnTypeInfo TypeAnalyzer::getCallInfo | ( | llvm::CallBase & | CI, |
| llvm::Function & | fn ) |
Definition at line 6340 of file TypeAnalysis.cpp.
References Anything, FnTypeInfo::Arguments, DT, fntypeinfo, getAnalysis(), Integer, FnTypeInfo::knownIntegralValues(), FnTypeInfo::KnownValues, MaxIntOffset(), TypeTree::Only(), FnTypeInfo::Return, and SE.
Referenced by TypeResults::getCallInfo(), and visitIPOCall().
| TypeTree TypeAnalyzer::getReturnAnalysis | ( | ) |
Definition at line 6203 of file TypeAnalysis.cpp.
References fntypeinfo, FnTypeInfo::Function, getAnalysis(), TypeTree::getMapping(), TypeTree::insert(), TypeTree::parse(), Pointer, and TypeTree::remove().
Referenced by TypeResults::getReturnAnalysis().
| std::set< int64_t > TypeAnalyzer::knownIntegralValues | ( | llvm::Value * | val | ) |
Definition at line 6862 of file TypeAnalysis.cpp.
References DT, fntypeinfo, FnTypeInfo::knownIntegralValues(), and SE.
Referenced by analyzeIntelSubscriptIntrinsic(), dump(), and TypeResults::knownIntegralValues().
| void TypeAnalyzer::prepareArgs | ( | ) |
Analyze type info given by the arguments, possibly adding to work queue.
Definition at line 1380 of file TypeAnalysis.cpp.
References FnTypeInfo::Arguments, fntypeinfo, FnTypeInfo::Function, getAnalysis(), FnTypeInfo::Return, and updateAnalysis().
| void TypeAnalyzer::run | ( | ) |
Run the interprocedural type analysis starting from this function.
Definition at line 1813 of file TypeAnalysis.cpp.
References TypeAnalysis::CustomRules, fntypeinfo, FnTypeInfo::Function, getFuncNameFromCall(), getFunctionFromCall(), interprocedural, Invalid, runPHIHypotheses(), visitValue(), and workList.
Referenced by runPHIHypotheses().
| void TypeAnalyzer::runPHIHypotheses | ( | ) |
Hypothesize that undefined phi's are integers and try to prove that they are really integral.
Definition at line 1730 of file TypeAnalysis.cpp.
References analysis, Anything, direction, DOWN, fntypeinfo, FnTypeInfo::Function, getAnalysis(), Integer, interprocedural, Invalid, notForAnalysis, TypeTree::Only(), PHIRecur, run(), and updateAnalysis().
Referenced by run().
| void TypeAnalyzer::updateAnalysis | ( | llvm::Value * | val, |
| BaseType | data, | ||
| llvm::Value * | origin ) |
Add additional information to the Type info of val, readding it to the work queue as necessary.
Referenced by analyzeIntelSubscriptIntrinsic(), TypeHandler< double * >::analyzeType(), TypeHandler< double >::analyzeType(), TypeHandler< float * >::analyzeType(), TypeHandler< float >::analyzeType(), TypeHandler< int * >::analyzeType(), TypeHandler< int >::analyzeType(), TypeHandler< long double * >::analyzeType(), TypeHandler< long double >::analyzeType(), TypeHandler< long int * >::analyzeType(), TypeHandler< long int >::analyzeType(), TypeHandler< long long int * >::analyzeType(), TypeHandler< long long int >::analyzeType(), TypeHandler< long long unsigned int * >::analyzeType(), TypeHandler< long long unsigned int >::analyzeType(), TypeHandler< long unsigned int * >::analyzeType(), TypeHandler< long unsigned int >::analyzeType(), TypeHandler< unsigned int * >::analyzeType(), TypeHandler< unsigned int >::analyzeType(), TypeHandler< void * >::analyzeType(), considerTBAA(), prepareArgs(), runPHIHypotheses(), visitAddrSpaceCastInst(), visitAllocaInst(), visitAtomicRMWInst(), visitBinaryOperator(), visitBitCastInst(), visitCallBase(), visitCmpInst(), visitConstantExpr(), visitExtractElementInst(), visitExtractValueInst(), visitFPExtInst(), visitFPToSIInst(), visitFPToUIInst(), visitFPTruncInst(), visitGEPOperator(), visitInsertElementInst(), visitInsertValueInst(), visitIntrinsicInst(), visitIntToPtrInst(), visitIPOCall(), visitLoadInst(), visitMemTransferCommon(), visitPHINode(), visitPtrToIntInst(), visitSelectInst(), visitSExtInst(), visitShuffleVectorInst(), visitSIToFPInst(), visitStoreInst(), visitTruncInst(), visitUIToFPInst(), visitValue(), and visitZExtInst().
| void TypeAnalyzer::updateAnalysis | ( | llvm::Value * | val, |
| ConcreteType | data, | ||
| llvm::Value * | origin ) |
| void TypeAnalyzer::updateAnalysis | ( | llvm::Value * | val, |
| TypeTree | data, | ||
| llvm::Value * | origin ) |
| void TypeAnalyzer::visitAddrSpaceCastInst | ( | llvm::AddrSpaceCastInst & | I | ) |
Definition at line 2612 of file TypeAnalysis.cpp.
References direction, DOWN, getAnalysis(), UP, and updateAnalysis().
| void TypeAnalyzer::visitAllocaInst | ( | llvm::AllocaInst & | I | ) |
Definition at line 1954 of file TypeAnalysis.cpp.
References getAnalysis(), Integer, TypeTree::Lookup(), Pointer, and updateAnalysis().
| void TypeAnalyzer::visitAtomicRMWInst | ( | llvm::AtomicRMWInst & | I | ) |
Definition at line 3046 of file TypeAnalysis.cpp.
References Anything, Args, TypeTree::checkedOrIn(), direction, DOWN, dump(), getAnalysis(), TypeTree::insert(), Integer, TypeTree::Lookup(), TypeTree::Only(), Pointer, TypeTree::PurgeAnything(), TypeTree::ShiftIndices(), TypeTree::str(), UP, updateAnalysis(), and visitBinaryOperation().
| void TypeAnalyzer::visitBinaryOperation | ( | const llvm::DataLayout & | DL, |
| llvm::Type * | T, | ||
| llvm::Instruction::BinaryOps | , | ||
| llvm::Value * | Args[2], | ||
| TypeTree & | Ret, | ||
| TypeTree & | LHS, | ||
| TypeTree & | RHS, | ||
| llvm::Instruction * | I ) |
Definition at line 3134 of file TypeAnalysis.cpp.
References TypeTree::allFloat(), Args, TypeTree::binopIn(), TypeTree::checkedOrIn(), containsOnlyAtMostTopBit(), CustomErrorHandler, TypeTree::Data0(), direction, DOWN, DT, dump(), EmitFailure(), fntypeinfo, FnTypeInfo::Function, IllegalTypeAnalysis, Integer, FnTypeInfo::knownIntegralValues(), TypeTree::Only(), TypeTree::orIn(), Pointer, SE, str(), TypeTree::str(), and UP.
Referenced by visitAtomicRMWInst(), and visitBinaryOperator().
| void TypeAnalyzer::visitBinaryOperator | ( | llvm::BinaryOperator & | I | ) |
Definition at line 3615 of file TypeAnalysis.cpp.
References Anything, Args, direction, DOWN, getAnalysis(), Integer, TypeTree::Only(), UP, updateAnalysis(), and visitBinaryOperation().
| void TypeAnalyzer::visitBitCastInst | ( | llvm::BitCastInst & | I | ) |
Definition at line 2707 of file TypeAnalysis.cpp.
References direction, DOWN, getAnalysis(), UP, and updateAnalysis().
| void TypeAnalyzer::visitCallBase | ( | llvm::CallBase & | call | ) |
GEMM
CUDA
MPI
END MPI
Definition at line 4710 of file TypeAnalysis.cpp.
References TypeAnalysis::analyzeFunction(), analyzeIntelSubscriptIntrinsic(), Anything, FnTypeInfo::Arguments, TypeTree::CanonicalizeInPlace(), canonicalizeMPIName(), TypeTree::checkedOrIn(), CONSIDER, CONSIDER2, TypeAnalysis::CustomRules, TypeTree::Data0(), direction, dontAnalyze(), DOWN, DT, EnzymePrintType, extractBLAS(), fntypeinfo, fortranDescriptorTree(), FnTypeInfo::Function, getAggregateElementOffset(), getAllocationIndexFromCall(), getAnalysis(), getFuncNameFromCall(), getFunctionFromCall(), TypeResults::getReturnAnalysis(), hasMetadata(), TypeTree::Inner0(), TypeTree::insert(), Integer, interprocedural, Invalid, isAllocationFunction(), isCudaDeallocationFunction(), isDeallocationFunction(), isFortranMPICall(), isMemFreeLibMFunction(), FnTypeInfo::knownIntegralValues(), FnTypeInfo::KnownValues, TypeTree::Lookup(), max(), MaxIntOffset(), MST, TypeTree::Only(), TypeTree::orIn(), Pointer, preventTypeAnalysisLoops(), TypeTree::PurgeAnything(), TypeResults::query(), FnTypeInfo::Return, SE, shadowHandlers, TypeTree::ShiftIndices(), startsWith(), TLI, Unknown, UP, updateAnalysis(), visitIPOCall(), and visitMemTransferCommon().
Referenced by considerTBAA().
| void TypeAnalyzer::visitCmpInst | ( | llvm::CmpInst & | I | ) |
Definition at line 1937 of file TypeAnalysis.cpp.
References direction, getAnalysis(), TypeTree::Inner0(), Integer, TypeTree::Only(), ConcreteType::PurgeAnything(), UP, and updateAnalysis().
| void TypeAnalyzer::visitConstantExpr | ( | llvm::ConstantExpr & | CE | ) |
Definition at line 1913 of file TypeAnalysis.cpp.
References analysis, direction, DOWN, fntypeinfo, FnTypeInfo::Function, getAnalysis(), insertBeforeInst(), UP, updateAnalysis(), visitGEPOperator(), and workList.
Referenced by visitValue().
| void TypeAnalyzer::visitExtractElementInst | ( | llvm::ExtractElementInst & | I | ) |
Definition at line 2772 of file TypeAnalysis.cpp.
References direction, DOWN, fntypeinfo, FnTypeInfo::Function, getAnalysis(), Integer, TypeTree::Lookup(), TypeTree::Only(), TypeTree::ShiftIndices(), UP, and updateAnalysis().
| void TypeAnalyzer::visitExtractValueInst | ( | llvm::ExtractValueInst & | I | ) |
Definition at line 2962 of file TypeAnalysis.cpp.
References direction, DOWN, fntypeinfo, FnTypeInfo::Function, getAggregateElementOffset(), getAnalysis(), TypeTree::ShiftIndices(), UP, and updateAnalysis().
| void TypeAnalyzer::visitFPExtInst | ( | llvm::FPExtInst & | I | ) |
Definition at line 2619 of file TypeAnalysis.cpp.
References TypeTree::Only(), and updateAnalysis().
| void TypeAnalyzer::visitFPToSIInst | ( | llvm::FPToSIInst & | I | ) |
Definition at line 2653 of file TypeAnalysis.cpp.
References Integer, TypeTree::Only(), and updateAnalysis().
| void TypeAnalyzer::visitFPToUIInst | ( | llvm::FPToUIInst & | I | ) |
Definition at line 2643 of file TypeAnalysis.cpp.
References Integer, TypeTree::Only(), and updateAnalysis().
| void TypeAnalyzer::visitFPTruncInst | ( | llvm::FPTruncInst & | I | ) |
Definition at line 2631 of file TypeAnalysis.cpp.
References TypeTree::Only(), and updateAnalysis().
| void TypeAnalyzer::visitGEPOperator | ( | llvm::GEPOperator & | gep | ) |
Definition at line 2054 of file TypeAnalysis.cpp.
References Anything, collectOffset(), CustomErrorHandler, TypeTree::Data0(), direction, DOWN, DT, dump(), EnzymeStrictAliasing(), findLoopIndices(), fntypeinfo, FnTypeInfo::Function, getAnalysis(), getSet(), IllegalTypeAnalysis, TypeTree::Inner0(), TypeTree::insert(), Integer, FnTypeInfo::knownIntegralValues(), LI, TypeTree::Only(), Pointer, SE, TypeTree::ShiftIndices(), UP, and updateAnalysis().
Referenced by getConstantAnalysis(), visitConstantExpr(), and visitGetElementPtrInst().
| void TypeAnalyzer::visitGetElementPtrInst | ( | llvm::GetElementPtrInst & | gep | ) |
Definition at line 2050 of file TypeAnalysis.cpp.
References visitGEPOperator().
| void TypeAnalyzer::visitInsertElementInst | ( | llvm::InsertElementInst & | I | ) |
Definition at line 2808 of file TypeAnalysis.cpp.
References TypeTree::Clear(), direction, DOWN, fntypeinfo, FnTypeInfo::Function, getAnalysis(), Integer, TypeTree::ShiftIndices(), UP, and updateAnalysis().
| void TypeAnalyzer::visitInsertValueInst | ( | llvm::InsertValueInst & | I | ) |
Definition at line 2980 of file TypeAnalysis.cpp.
References TypeTree::Clear(), direction, DOWN, fntypeinfo, FnTypeInfo::Function, getAggregateElementOffset(), getAnalysis(), TypeTree::ShiftIndices(), UP, and updateAnalysis().
| void TypeAnalyzer::visitIntrinsicInst | ( | llvm::IntrinsicInst & | II | ) |
Definition at line 3710 of file TypeAnalysis.cpp.
References analysis, Anything, TypeTree::binopIn(), CustomErrorHandler, TypeTree::Data0(), direction, DOWN, dump(), EmitFailure(), fntypeinfo, FnTypeInfo::Function, getAnalysis(), IllegalTypeAnalysis, TypeTree::insert(), Integer, TypeTree::Lookup(), TypeTree::Only(), Pointer, TypeTree::PurgeAnything(), TypeTree::ShiftIndices(), str(), TypeTree::str(), Unknown, UP, and updateAnalysis().
| void TypeAnalyzer::visitIntToPtrInst | ( | llvm::IntToPtrInst & | I | ) |
Definition at line 2687 of file TypeAnalysis.cpp.
References Anything, direction, DOWN, getAnalysis(), UP, and updateAnalysis().
| void TypeAnalyzer::visitIPOCall | ( | llvm::CallBase & | call, |
| llvm::Function & | fn ) |
Definition at line 6378 of file TypeAnalysis.cpp.
References TypeAnalysis::analyzeFunction(), Anything, direction, DOWN, EnzymePrintType, fntypeinfo, FnTypeInfo::Function, getAnalysis(), getCallInfo(), TypeResults::getReturnAnalysis(), TypeTree::Inner0(), Integer, interprocedural, FnTypeInfo::KnownValues, MST, TypeTree::Only(), preventTypeAnalysisLoops(), TypeResults::query(), UP, and updateAnalysis().
Referenced by visitCallBase().
| void TypeAnalyzer::visitLoadInst | ( | llvm::LoadInst & | I | ) |
Definition at line 1971 of file TypeAnalysis.cpp.
References direction, DOWN, getAnalysis(), TypeTree::Lookup(), Pointer, TypeTree::PurgeAnything(), TypeTree::ShiftIndices(), UP, and updateAnalysis().
| void TypeAnalyzer::visitMemTransferCommon | ( | llvm::CallBase & | MTI | ) |
Definition at line 3642 of file TypeAnalysis.cpp.
References TypeTree::checkedOrIn(), CustomErrorHandler, TypeTree::Data0(), direction, DT, dump(), EmitFailure(), fntypeinfo, FnTypeInfo::Function, getAnalysis(), IllegalTypeAnalysis, TypeTree::insert(), Integer, FnTypeInfo::knownIntegralValues(), max(), TypeTree::Only(), Pointer, TypeTree::PurgeAnything(), SE, TypeTree::ShiftIndices(), str(), TypeTree::str(), UP, and updateAnalysis().
Referenced by visitCallBase(), and visitMemTransferInst().
| void TypeAnalyzer::visitMemTransferInst | ( | llvm::MemTransferInst & | MTI | ) |
Definition at line 3638 of file TypeAnalysis.cpp.
References visitMemTransferCommon().
| void TypeAnalyzer::visitPHINode | ( | llvm::PHINode & | phi | ) |
Definition at line 2318 of file TypeAnalysis.cpp.
References Anything, TypeTree::binopIn(), CustomErrorHandler, TypeTree::Data0(), direction, DOWN, dump(), EmitFailure(), EnzymePrintType, EnzymeStrictAliasing(), fntypeinfo, FnTypeInfo::Function, getAnalysis(), IllegalTypeAnalysis, TypeTree::Inner0(), Integer, LI, MST, TypeTree::Only(), TypeTree::PurgeAnything(), str(), TypeTree::str(), UP, and updateAnalysis().
| void TypeAnalyzer::visitPtrToIntInst | ( | llvm::PtrToIntInst & | I | ) |
Definition at line 2679 of file TypeAnalysis.cpp.
References direction, DOWN, getAnalysis(), UP, and updateAnalysis().
| void TypeAnalyzer::visitSelectInst | ( | llvm::SelectInst & | I | ) |
Definition at line 2714 of file TypeAnalysis.cpp.
References direction, DOWN, EnzymePrintType, EnzymeStrictAliasing(), getAnalysis(), TypeTree::Inner0(), TypeTree::JustAnything(), MST, TypeTree::PurgeAnything(), TypeTree::str(), UP, and updateAnalysis().
| void TypeAnalyzer::visitSExtInst | ( | llvm::SExtInst & | I | ) |
Definition at line 2604 of file TypeAnalysis.cpp.
References Integer, and updateAnalysis().
| void TypeAnalyzer::visitShuffleVectorInst | ( | llvm::ShuffleVectorInst & | I | ) |
Definition at line 2865 of file TypeAnalysis.cpp.
References Anything, direction, DOWN, fntypeinfo, FnTypeInfo::Function, getAggregateElementOffset(), getAnalysis(), TypeTree::Only(), TypeTree::ShiftIndices(), UP, and updateAnalysis().
| void TypeAnalyzer::visitSIToFPInst | ( | llvm::SIToFPInst & | I | ) |
Definition at line 2671 of file TypeAnalysis.cpp.
References Integer, TypeTree::Only(), and updateAnalysis().
| void TypeAnalyzer::visitStoreInst | ( | llvm::StoreInst & | I | ) |
Definition at line 1986 of file TypeAnalysis.cpp.
References direction, getAnalysis(), TypeTree::Lookup(), Pointer, TypeTree::PurgeAnything(), TypeTree::ReplaceMinus(), RustTypeRules(), TypeTree::ShiftIndices(), UP, and updateAnalysis().
| void TypeAnalyzer::visitTruncInst | ( | llvm::TruncInst & | I | ) |
Definition at line 2561 of file TypeAnalysis.cpp.
References direction, DOWN, fntypeinfo, FnTypeInfo::Function, getAnalysis(), TypeTree::ShiftIndices(), UP, and updateAnalysis().
| void TypeAnalyzer::visitUIToFPInst | ( | llvm::UIToFPInst & | I | ) |
Definition at line 2663 of file TypeAnalysis.cpp.
References Integer, TypeTree::Only(), and updateAnalysis().
| void TypeAnalyzer::visitValue | ( | llvm::Value & | val | ) |
Definition at line 1882 of file TypeAnalysis.cpp.
References updateAnalysis(), and visitConstantExpr().
Referenced by run().
| void TypeAnalyzer::visitZExtInst | ( | llvm::ZExtInst & | I | ) |
Definition at line 2581 of file TypeAnalysis.cpp.
References Anything, direction, DOWN, getAnalysis(), TypeTree::Inner0(), Integer, TypeTree::Only(), UP, and updateAnalysis().
| std::map<llvm::Value *, TypeTree> TypeAnalyzer::analysis |
Intermediate conservative, but correct Type analysis results.
Definition at line 293 of file TypeAnalysis.h.
Referenced by AdjointGenerator::AdjointGenerator(), dump(), getAnalysis(), runPHIHypotheses(), visitConstantExpr(), and visitIntrinsicInst().
Definition at line 290 of file TypeAnalysis.h.
| uint8_t TypeAnalyzer::direction |
Directionality of checks.
Definition at line 278 of file TypeAnalysis.h.
Referenced by analyzeIntelSubscriptIntrinsic(), runPHIHypotheses(), visitAddrSpaceCastInst(), visitAtomicRMWInst(), visitBinaryOperation(), visitBinaryOperator(), visitBitCastInst(), visitCallBase(), visitCmpInst(), visitConstantExpr(), visitExtractElementInst(), visitExtractValueInst(), visitGEPOperator(), visitInsertElementInst(), visitInsertValueInst(), visitIntrinsicInst(), visitIntToPtrInst(), visitIPOCall(), visitLoadInst(), visitMemTransferCommon(), visitPHINode(), visitPtrToIntInst(), visitSelectInst(), visitShuffleVectorInst(), visitStoreInst(), visitTruncInst(), and visitZExtInst().
|
staticconstexpr |
Definition at line 289 of file TypeAnalysis.h.
Referenced by analyzeIntelSubscriptIntrinsic(), runPHIHypotheses(), visitAddrSpaceCastInst(), visitAtomicRMWInst(), visitBinaryOperation(), visitBinaryOperator(), visitBitCastInst(), visitCallBase(), visitConstantExpr(), visitExtractElementInst(), visitExtractValueInst(), visitGEPOperator(), visitInsertElementInst(), visitInsertValueInst(), visitIntrinsicInst(), visitIntToPtrInst(), visitIPOCall(), visitLoadInst(), visitPHINode(), visitPtrToIntInst(), visitSelectInst(), visitShuffleVectorInst(), visitTruncInst(), and visitZExtInst().
| llvm::DominatorTree& TypeAnalyzer::DT |
Definition at line 296 of file TypeAnalysis.h.
Referenced by considerTBAA(), getCallInfo(), knownIntegralValues(), visitBinaryOperation(), visitCallBase(), visitGEPOperator(), and visitMemTransferCommon().
| const FnTypeInfo TypeAnalyzer::fntypeinfo |
Calling context.
Definition at line 271 of file TypeAnalysis.h.
Referenced by TypeResults::allFloat(), analyzeIntelSubscriptIntrinsic(), TypeResults::anyFloat(), TypeResults::anyPointer(), considerTBAA(), dump(), TypeResults::firstPointer(), getAnalysis(), TypeResults::getAnalyzedTypeInfo(), getCallInfo(), getConstantAnalysis(), TypeResults::getFunction(), getReturnAnalysis(), knownIntegralValues(), prepareArgs(), TypeResults::query(), run(), runPHIHypotheses(), TypeAnalyzer(), TypeAnalyzer(), visitBinaryOperation(), visitCallBase(), visitConstantExpr(), visitExtractElementInst(), visitExtractValueInst(), visitGEPOperator(), visitInsertElementInst(), visitInsertValueInst(), visitIntrinsicInst(), visitIPOCall(), visitMemTransferCommon(), visitPHINode(), visitShuffleVectorInst(), and visitTruncInst().
| TypeAnalysis& TypeAnalyzer::interprocedural |
Calling TypeAnalysis to be used in the case of calls to other functions.
Definition at line 275 of file TypeAnalysis.h.
Referenced by EnzymeGetTypeAnalysisFromTypeAnalyzer(), getConstantAnalysis(), AdjointGenerator::recursivelyHandleSubfunction(), run(), runPHIHypotheses(), visitCallBase(), visitIPOCall(), and AdjointGenerator::visitOMPCall().
| bool TypeAnalyzer::Invalid |
Whether an inconsistent update has been found This will only be set when direction != Both, erring otherwise.
Definition at line 282 of file TypeAnalysis.h.
Referenced by run(), runPHIHypotheses(), and visitCallBase().
| llvm::LoopInfo& TypeAnalyzer::LI |
Definition at line 299 of file TypeAnalysis.h.
Referenced by considerTBAA(), visitGEPOperator(), and visitPHINode().
| std::shared_ptr<llvm::ModuleSlotTracker> TypeAnalyzer::MST |
Cache of metadata indices, for faster printing.
Only initialized if EnzymePrintType is true
Definition at line 252 of file TypeAnalysis.h.
Referenced by considerTBAA(), dump(), visitCallBase(), visitIPOCall(), visitPHINode(), and visitSelectInst().
| const llvm::SmallPtrSet<llvm::BasicBlock *, 4> TypeAnalyzer::notForAnalysis |
Definition at line 257 of file TypeAnalysis.h.
Referenced by considerTBAA(), getConstantAnalysis(), runPHIHypotheses(), and TypeAnalyzer().
| llvm::PostDominatorTree& TypeAnalyzer::PDT |
Definition at line 297 of file TypeAnalysis.h.
| bool TypeAnalyzer::PHIRecur |
Definition at line 284 of file TypeAnalysis.h.
Referenced by runPHIHypotheses().
| llvm::ScalarEvolution& TypeAnalyzer::SE |
Definition at line 300 of file TypeAnalysis.h.
Referenced by considerTBAA(), getCallInfo(), knownIntegralValues(), visitBinaryOperation(), visitCallBase(), visitGEPOperator(), and visitMemTransferCommon().
| llvm::TargetLibraryInfo& TypeAnalyzer::TLI |
Definition at line 295 of file TypeAnalysis.h.
Referenced by visitCallBase().
|
staticconstexpr |
Definition at line 287 of file TypeAnalysis.h.
Referenced by analyzeIntelSubscriptIntrinsic(), visitAddrSpaceCastInst(), visitAtomicRMWInst(), visitBinaryOperation(), visitBinaryOperator(), visitBitCastInst(), visitCallBase(), visitCmpInst(), visitConstantExpr(), visitExtractElementInst(), visitExtractValueInst(), visitGEPOperator(), visitInsertElementInst(), visitInsertValueInst(), visitIntrinsicInst(), visitIntToPtrInst(), visitIPOCall(), visitLoadInst(), visitMemTransferCommon(), visitPHINode(), visitPtrToIntInst(), visitSelectInst(), visitShuffleVectorInst(), visitStoreInst(), visitTruncInst(), and visitZExtInst().
| llvm::SetVector<llvm::Value *, std::deque<llvm::Value *> > TypeAnalyzer::workList |
List of value's which should be re-analyzed now with new information.
Definition at line 255 of file TypeAnalysis.h.
Referenced by getConstantAnalysis(), run(), TypeAnalyzer(), and visitConstantExpr().