LLVM 20.0.0git
|
#include "llvm/Analysis/BasicAliasAnalysis.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/ScopeExit.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/Analysis/AssumptionCache.h"
#include "llvm/Analysis/CFG.h"
#include "llvm/Analysis/CaptureTracking.h"
#include "llvm/Analysis/MemoryBuiltins.h"
#include "llvm/Analysis/MemoryLocation.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/IR/Argument.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/Constant.h"
#include "llvm/IR/ConstantRange.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GetElementPtrTypeIterator.h"
#include "llvm/IR/GlobalAlias.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/Operator.h"
#include "llvm/IR/PatternMatch.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/User.h"
#include "llvm/IR/Value.h"
#include "llvm/InitializePasses.h"
#include "llvm/Pass.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/KnownBits.h"
#include "llvm/Support/SaveAndRestore.h"
#include <cassert>
#include <cstdint>
#include <cstdlib>
#include <optional>
#include <utility>
Go to the source code of this file.
Classes | |
struct | llvm::BasicAAResult::DecomposedGEP |
Macros | |
#define | DEBUG_TYPE "basicaa" |
Functions | |
STATISTIC (SearchLimitReached, "Number of times the limit to " "decompose GEPs is reached") | |
SearchLimitReached / SearchTimes shows how often the limit of to decompose GEPs is reached. | |
STATISTIC (SearchTimes, "Number of times a GEP is decomposed") | |
static std::optional< TypeSize > | getObjectSize (const Value *V, const DataLayout &DL, const TargetLibraryInfo &TLI, bool NullIsValidLoc, bool RoundToAlign=false) |
Returns the size of the object specified by V or UnknownSize if unknown. | |
static bool | isObjectSmallerThan (const Value *V, TypeSize Size, const DataLayout &DL, const TargetLibraryInfo &TLI, bool NullIsValidLoc) |
Returns true if we can prove that the object specified by V is smaller than Size. | |
static TypeSize | getMinimalExtentFrom (const Value &V, const LocationSize &LocSize, const DataLayout &DL, bool NullIsValidLoc) |
Return the minimal extent from V to the end of the underlying object, assuming the result is used in an aliasing query. | |
static bool | isObjectSize (const Value *V, TypeSize Size, const DataLayout &DL, const TargetLibraryInfo &TLI, bool NullIsValidLoc) |
Returns true if we can prove that the object specified by V has size Size. | |
static bool | areBothVScale (const Value *V1, const Value *V2) |
Return true if both V1 and V2 are VScale. | |
static bool | isNotInCycle (const Instruction *I, const DominatorTree *DT, const LoopInfo *LI) |
static LinearExpression | GetLinearExpression (const CastedValue &Val, const DataLayout &DL, unsigned Depth, AssumptionCache *AC, DominatorTree *DT) |
Analyzes the specified value as a linear expression: "A*V + B", where A and B are constant integers. | |
static bool | isIntrinsicCall (const CallBase *Call, Intrinsic::ID IID) |
static const Function * | getParent (const Value *V) |
static bool | notDifferentParent (const Value *O1, const Value *O2) |
static AliasResult | MergeAliasResults (AliasResult A, AliasResult B) |
INITIALIZE_PASS_BEGIN (BasicAAWrapperPass, "basic-aa", "Basic Alias Analysis (stateless AA impl)", true, true) INITIALIZE_PASS_END(BasicAAWrapperPass | |
basic Basic Alias | Analysis (stateless AA impl)" |
Variables | |
static cl::opt< bool > | EnableRecPhiAnalysis ("basic-aa-recphi", cl::Hidden, cl::init(true)) |
Enable analysis of recursive PHI nodes. | |
static cl::opt< bool > | EnableSeparateStorageAnalysis ("basic-aa-separate-storage", cl::Hidden, cl::init(true)) |
static const unsigned | MaxLookupSearchDepth = 6 |
basic | aa |
basic Basic Alias | true |
#define DEBUG_TYPE "basicaa" |
Definition at line 64 of file BasicAliasAnalysis.cpp.
basic Basic Alias Analysis | ( | stateless AA | impl | ) |
Return true if both V1 and V2 are VScale.
Definition at line 188 of file BasicAliasAnalysis.cpp.
References llvm::PatternMatch::m_VScale(), and llvm::PatternMatch::match().
|
static |
Analyzes the specified value as a linear expression: "A*V + B", where A and B are constant integers.
Definition at line 401 of file BasicAliasAnalysis.cpp.
References llvm::Depth, DL, GetLinearExpression(), and RHS.
Referenced by GetLinearExpression().
|
static |
Return the minimal extent from V
to the end of the underlying object, assuming the result is used in an aliasing query.
E.g., we do use the query location size and the fact that null pointers cannot alias here.
Definition at line 160 of file BasicAliasAnalysis.cpp.
References DL, llvm::TypeSize::getFixed(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getKnownMinValue(), llvm::LocationSize::getValue(), and llvm::LocationSize::isPrecise().
|
static |
Returns the size of the object specified by V or UnknownSize if unknown.
Definition at line 105 of file BasicAliasAnalysis.cpp.
References DL, llvm::TypeSize::getFixed(), llvm::getObjectSize(), llvm::ObjectSizeOpts::NullIsUnknownSize, llvm::ObjectSizeOpts::RoundToAlign, and Size.
Definition at line 863 of file BasicAliasAnalysis.cpp.
References llvm::GlobalValue::getParent().
Referenced by llvm::CanonicalLoopInfo::assertOK(), llvm::slpvectorizer::BoUpSLP::canVectorizeLoads(), llvm::CloneAndPruneIntoFromInst(), llvm::JumpThreadingPass::computeValueKnownInPredecessorsImpl(), detectPopcountIdiom(), ensureValueAvailableInSuccessor(), llvm::VPBasicBlock::execute(), llvm::CodeExtractor::findAllocas(), llvm::InstCombinerImpl::foldOpIntoPhi(), foldURemOfLoopIncrement(), llvm::RegionBase< Tr >::getDepth(), llvm::VPBasicBlock::getEnclosingLoopRegion(), llvm::getLiveRegMap(), getLocalFunctionMetadata(), llvm::LoopBase< BasicBlock, Loop >::getLoopLatch(), llvm::slpvectorizer::BoUpSLP::getReorderingData(), isBlockValidForExtraction(), llvm::PHINode::isComplete(), llvm::VPBasicBlock::isExiting(), llvm::CodeExtractor::isLegalToShrinkwrapLifetimeMarkers(), isOnlyUsedInEntryBlock(), isUsedOutsideOfDefiningBlock(), LLVMGetBasicBlockParent(), LLVMGetGlobalParent(), LLVMGetInstructionParent(), LLVMGetParamParent(), notDifferentParent(), preparePlanForEpilogueVectorLoop(), llvm::MachineFunction::print(), redirectValuesFromPredecessorsToPhi(), llvm::AssumptionCache::registerAssumption(), llvm::ScheduleDAGMI::schedule(), llvm::ScheduleDAGMILive::schedule(), llvm::VLIWMachineScheduler::schedule(), llvm::SIScheduleDAGMI::schedule(), splitCallSite(), and llvm::GenericCycle< ContextT >::verifyCycle().
INITIALIZE_PASS_BEGIN | ( | BasicAAWrapperPass | , |
"basic-aa" | , | ||
"Basic Alias Analysis (stateless AA impl)" | , | ||
true | , | ||
true | |||
) |
|
static |
Definition at line 809 of file BasicAliasAnalysis.cpp.
References II.
Referenced by llvm::BasicAAResult::getModRefInfo(), isPreserveArrayIndex(), isPreserveStructIndex(), and isPreserveUnionIndex().
|
static |
Definition at line 205 of file BasicAliasAnalysis.cpp.
References llvm::SmallVectorBase< Size_T >::empty(), I, llvm::isPotentiallyReachableFromMany(), and llvm::successors().
Referenced by llvm::EarliestEscapeAnalysis::isNotCapturedBefore().
|
static |
Returns true if we can prove that the object specified by V has size Size.
Definition at line 180 of file BasicAliasAnalysis.cpp.
References DL, llvm::getObjectSize(), and Size.
|
static |
Returns true if we can prove that the object specified by V is smaller than Size.
Bails out early unless the root object is passed as the first parameter.
Definition at line 122 of file BasicAliasAnalysis.cpp.
References DL, llvm::getObjectSize(), llvm::isIdentifiedObject(), llvm::details::FixedOrScalableQuantity< TypeSize, uint64_t >::isKnownLT(), and Size.
|
static |
Definition at line 1376 of file BasicAliasAnalysis.cpp.
References A, B, llvm::AliasResult::MayAlias, llvm::AliasResult::MustAlias, and llvm::AliasResult::PartialAlias.
Definition at line 876 of file BasicAliasAnalysis.cpp.
References getParent().
Referenced by llvm::BasicAAResult::alias(), and llvm::BasicAAResult::getModRefInfo().
STATISTIC | ( | SearchLimitReached | , |
"Number of times the limit to " "decompose GEPs is reached" | |||
) |
SearchLimitReached / SearchTimes shows how often the limit of to decompose GEPs is reached.
It will affect the precision of basic alias analysis.
STATISTIC | ( | SearchTimes | , |
"Number of times a GEP is decomposed" | |||
) |
basic aa |
Definition at line 1980 of file BasicAliasAnalysis.cpp.
|
static |
Enable analysis of recursive PHI nodes.
|
static |
Definition at line 84 of file BasicAliasAnalysis.cpp.
Definition at line 1981 of file BasicAliasAnalysis.cpp.
Referenced by llvm::PotentialValuesState< MemberTy >::contains(), findPrologueEndLoc(), llvm::PPCInstrInfo::getFMAPatterns(), llvm::X86CallLowering::lowerCall(), llvm::MIPatternMatch::GCstAndRegMatch::match(), llvm::MIPatternMatch::GFCstAndRegMatch::match(), matchIntrinsicType(), llvm::ScopedHandle< HandleTraits >::operator bool(), llvm::orc::BlockFreqQuery::operator()(), and llvm::TargetLowering::SimplifyDemandedVectorElts().