|
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) | |
| 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 | considerRustDebugInfo () |
| Parse the debug info generated by rustc and retrieve useful type info if possible. | |
| 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 235 of file TypeAnalysis.h.
| TypeAnalyzer::TypeAnalyzer | ( | TypeAnalysis & | TA | ) |
| TypeAnalyzer::TypeAnalyzer | ( | const FnTypeInfo & | fn, |
| TypeAnalysis & | TA, | ||
| uint8_t | direction = BOTH ) |
Definition at line 244 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 279 of file TypeAnalysis.cpp.
References fntypeinfo, FnTypeInfo::Function, and FnTypeInfo::KnownValues.
| void TypeAnalyzer::considerRustDebugInfo | ( | ) |
Parse the debug info generated by rustc and retrieve useful type info if possible.
Definition at line 6371 of file TypeAnalysis.cpp.
References fntypeinfo, FnTypeInfo::Function, TypeTree::isKnown(), TypeTree::Only(), parseDIType(), Pointer, and updateAnalysis().
| void TypeAnalyzer::considerTBAA | ( | ) |
Analyze type info given by the TBAA, possibly adding to work queue.
Definition at line 1222 of file TypeAnalysis.cpp.
References 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 2923 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().
| TypeTree TypeAnalyzer::getAnalysis | ( | llvm::Value * | Val | ) |
Get the current results for a given value.
Definition at line 922 of file TypeAnalysis.cpp.
References analysis, 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 5874 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 5766 of file TypeAnalysis.cpp.
References fntypeinfo, FnTypeInfo::Function, and getAnalysis().
Referenced by TypeResults::getReturnAnalysis().
| std::set< int64_t > TypeAnalyzer::knownIntegralValues | ( | llvm::Value * | val | ) |
Definition at line 6500 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 1194 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 1647 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 1564 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(), considerRustDebugInfo(), 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 2446 of file TypeAnalysis.cpp.
References direction, DOWN, getAnalysis(), UP, and updateAnalysis().
| void TypeAnalyzer::visitAllocaInst | ( | llvm::AllocaInst & | I | ) |
Definition at line 1788 of file TypeAnalysis.cpp.
References getAnalysis(), Integer, TypeTree::Lookup(), Pointer, and updateAnalysis().
| void TypeAnalyzer::visitAtomicRMWInst | ( | llvm::AtomicRMWInst & | I | ) |
Definition at line 2939 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 3027 of file TypeAnalysis.cpp.
References Args, TypeTree::binopIn(), TypeTree::checkedOrIn(), containsOnlyAtMostTopBit(), CustomErrorHandler, TypeTree::Data0(), direction, DOWN, DT, dump(), EmitFailure(), fntypeinfo, FnTypeInfo::Function, IllegalTypeAnalysis, Integer, TypeTree::IsAllFloat(), 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 3493 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 2541 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 4535 of file TypeAnalysis.cpp.
References TypeAnalysis::analyzeFunction(), analyzeIntelSubscriptIntrinsic(), FnTypeInfo::Arguments, TypeTree::CanonicalizeInPlace(), CONSIDER, CONSIDER2, Constant, TypeAnalysis::CustomRules, TypeTree::Data0(), direction, dontAnalyze(), DOWN, DT, EnzymePrintType, extractBLAS(), fntypeinfo, FnTypeInfo::Function, getAllocationIndexFromCall(), getAnalysis(), getFuncNameFromCall(), getFunctionFromCall(), getUnqual(), hasMetadata(), TypeTree::insert(), Integer, interprocedural, Invalid, isAllocationFunction(), isDeallocationFunction(), isMemFreeLibMFunction(), FnTypeInfo::knownIntegralValues(), FnTypeInfo::KnownValues, TypeTree::Lookup(), max(), MaxIntOffset(), MST, TypeTree::Only(), TypeTree::orIn(), Pointer, TypeTree::PurgeAnything(), TypeResults::query(), SE, TypeTree::ShiftIndices(), startsWith(), TLI, Unknown, UP, updateAnalysis(), visitIPOCall(), and visitMemTransferCommon().
Referenced by considerTBAA().
| void TypeAnalyzer::visitCmpInst | ( | llvm::CmpInst & | I | ) |
Definition at line 1771 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 1747 of file TypeAnalysis.cpp.
References analysis, direction, DOWN, fntypeinfo, FnTypeInfo::Function, getAnalysis(), UP, updateAnalysis(), visitGEPOperator(), and workList.
Referenced by visitValue().
| void TypeAnalyzer::visitExtractElementInst | ( | llvm::ExtractElementInst & | I | ) |
Definition at line 2606 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 2824 of file TypeAnalysis.cpp.
References direction, DOWN, fntypeinfo, FnTypeInfo::Function, getAnalysis(), getUnqual(), TypeTree::ShiftIndices(), UP, and updateAnalysis().
| void TypeAnalyzer::visitFPExtInst | ( | llvm::FPExtInst & | I | ) |
Definition at line 2453 of file TypeAnalysis.cpp.
References TypeTree::Only(), and updateAnalysis().
| void TypeAnalyzer::visitFPToSIInst | ( | llvm::FPToSIInst & | I | ) |
Definition at line 2487 of file TypeAnalysis.cpp.
References Integer, TypeTree::Only(), and updateAnalysis().
| void TypeAnalyzer::visitFPToUIInst | ( | llvm::FPToUIInst & | I | ) |
Definition at line 2477 of file TypeAnalysis.cpp.
References Integer, TypeTree::Only(), and updateAnalysis().
| void TypeAnalyzer::visitFPTruncInst | ( | llvm::FPTruncInst & | I | ) |
Definition at line 2465 of file TypeAnalysis.cpp.
References TypeTree::Only(), and updateAnalysis().
| void TypeAnalyzer::visitGEPOperator | ( | llvm::GEPOperator & | gep | ) |
Definition at line 1888 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 1884 of file TypeAnalysis.cpp.
References visitGEPOperator().
| void TypeAnalyzer::visitInsertElementInst | ( | llvm::InsertElementInst & | I | ) |
Definition at line 2642 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 2853 of file TypeAnalysis.cpp.
References TypeTree::Clear(), direction, DOWN, fntypeinfo, FnTypeInfo::Function, getAnalysis(), getUnqual(), TypeTree::ShiftIndices(), UP, and updateAnalysis().
| void TypeAnalyzer::visitIntrinsicInst | ( | llvm::IntrinsicInst & | II | ) |
Definition at line 3588 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 2521 of file TypeAnalysis.cpp.
References Anything, direction, DOWN, getAnalysis(), UP, and updateAnalysis().
| void TypeAnalyzer::visitIPOCall | ( | llvm::CallBase & | call, |
| llvm::Function & | fn ) |
Definition at line 5912 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 1805 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 3520 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 3516 of file TypeAnalysis.cpp.
References visitMemTransferCommon().
| void TypeAnalyzer::visitPHINode | ( | llvm::PHINode & | phi | ) |
Definition at line 2152 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 2513 of file TypeAnalysis.cpp.
References direction, DOWN, getAnalysis(), UP, and updateAnalysis().
| void TypeAnalyzer::visitSelectInst | ( | llvm::SelectInst & | I | ) |
Definition at line 2548 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 2438 of file TypeAnalysis.cpp.
References Integer, and updateAnalysis().
| void TypeAnalyzer::visitShuffleVectorInst | ( | llvm::ShuffleVectorInst & | I | ) |
Definition at line 2699 of file TypeAnalysis.cpp.
References Anything, direction, DOWN, fntypeinfo, FnTypeInfo::Function, getAnalysis(), getUnqual(), TypeTree::Only(), TypeTree::ShiftIndices(), UP, and updateAnalysis().
| void TypeAnalyzer::visitSIToFPInst | ( | llvm::SIToFPInst & | I | ) |
Definition at line 2505 of file TypeAnalysis.cpp.
References Integer, TypeTree::Only(), and updateAnalysis().
| void TypeAnalyzer::visitStoreInst | ( | llvm::StoreInst & | I | ) |
Definition at line 1820 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 2395 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 2497 of file TypeAnalysis.cpp.
References Integer, TypeTree::Only(), and updateAnalysis().
| void TypeAnalyzer::visitValue | ( | llvm::Value & | val | ) |
Definition at line 1716 of file TypeAnalysis.cpp.
References updateAnalysis(), and visitConstantExpr().
Referenced by run().
| void TypeAnalyzer::visitZExtInst | ( | llvm::ZExtInst & | I | ) |
Definition at line 2415 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 280 of file TypeAnalysis.h.
Referenced by AdjointGenerator::AdjointGenerator(), dump(), getAnalysis(), TypeResults::intType(), runPHIHypotheses(), visitConstantExpr(), and visitIntrinsicInst().
Definition at line 277 of file TypeAnalysis.h.
| uint8_t TypeAnalyzer::direction |
Directionality of checks.
Definition at line 265 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 276 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 283 of file TypeAnalysis.h.
Referenced by considerTBAA(), getCallInfo(), knownIntegralValues(), visitBinaryOperation(), visitCallBase(), visitGEPOperator(), and visitMemTransferCommon().
| const FnTypeInfo TypeAnalyzer::fntypeinfo |
Calling context.
Definition at line 258 of file TypeAnalysis.h.
Referenced by TypeResults::allFloat(), analyzeIntelSubscriptIntrinsic(), TypeResults::anyFloat(), TypeResults::anyPointer(), considerRustDebugInfo(), 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 262 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 269 of file TypeAnalysis.h.
Referenced by run(), runPHIHypotheses(), and visitCallBase().
| llvm::LoopInfo& TypeAnalyzer::LI |
Definition at line 286 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 239 of file TypeAnalysis.h.
Referenced by considerTBAA(), dump(), visitCallBase(), visitIPOCall(), visitPHINode(), and visitSelectInst().
| const llvm::SmallPtrSet<llvm::BasicBlock *, 4> TypeAnalyzer::notForAnalysis |
Definition at line 244 of file TypeAnalysis.h.
Referenced by considerTBAA(), getConstantAnalysis(), runPHIHypotheses(), and TypeAnalyzer().
| llvm::PostDominatorTree& TypeAnalyzer::PDT |
Definition at line 284 of file TypeAnalysis.h.
| bool TypeAnalyzer::PHIRecur |
Definition at line 271 of file TypeAnalysis.h.
Referenced by runPHIHypotheses().
| llvm::ScalarEvolution& TypeAnalyzer::SE |
Definition at line 287 of file TypeAnalysis.h.
Referenced by considerTBAA(), getCallInfo(), knownIntegralValues(), visitBinaryOperation(), visitCallBase(), visitGEPOperator(), and visitMemTransferCommon().
| llvm::TargetLibraryInfo& TypeAnalyzer::TLI |
Definition at line 282 of file TypeAnalysis.h.
Referenced by visitCallBase().
|
staticconstexpr |
Definition at line 274 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 242 of file TypeAnalysis.h.
Referenced by getConstantAnalysis(), run(), TypeAnalyzer(), and visitConstantExpr().