LLVM 20.0.0git
|
#include "llvm/Analysis/Loads.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/Analysis/AssumeBundleQueries.h"
#include "llvm/Analysis/LoopAccessAnalysis.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/MemoryBuiltins.h"
#include "llvm/Analysis/MemoryLocation.h"
#include "llvm/Analysis/ScalarEvolution.h"
#include "llvm/Analysis/ScalarEvolutionExpressions.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Operator.h"
Go to the source code of this file.
Variables | |
cl::opt< bool > | UseDerefAtPointSemantics |
Test if A and B will obviously have the same value.
This includes recognizing that t0 and t1 will have the same value in code like this:
Definition at line 258 of file Loads.cpp.
Referenced by getAvailableLoadStore(), and llvm::isSafeToLoadUnconditionally().
|
static |
Definition at line 517 of file Loads.cpp.
References DL, llvm::Value::getType(), llvm::ConstantRange::intersectWith(), llvm::ConstantRange::isEmptySet(), llvm::LocationSize::precise(), and llvm::Value::stripAndAccumulateConstantOffsets().
Referenced by llvm::findAvailablePtrLoadStore().
|
static |
Definition at line 539 of file Loads.cpp.
References AreEquivalentAddressValues(), llvm::CallingConv::C, llvm::ConstantFoldLoadFromConst(), DL, llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getFixedValue(), llvm::APInt::getSplat(), llvm::Value::getType(), llvm::CastInst::isBitOrNoopPointerCastable(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::isScalable(), Ptr, llvm::Splat, and llvm::Value::stripPointerCasts().
Referenced by llvm::FindAvailableLoadedValue(), and llvm::findAvailablePtrLoadStore().
Definition at line 31 of file Loads.cpp.
References llvm::sampleprof::Base, and DL.
Referenced by isDereferenceableAndAlignedPointer().
|
static |
Test if V is always a pointer to allocated and suitably aligned memory for a simple load or store.
TODO refactor this function to be able to search independently for Dereferencability and Alignment requirements.
Look through assumes to see if both dereferencability and alignment can be proven by an assume if needed.
Definition at line 38 of file Loads.cpp.
References llvm::RetainedKnowledge::ArgValue, assert(), llvm::sampleprof::Base, DL, GEP, llvm::getArgumentAliasingToReturnedPointer(), llvm::APInt::getBoolValue(), llvm::getKnowledgeForValue(), llvm::getObjectSize(), I, if(), llvm::SmallPtrSetImpl< PtrType >::insert(), isAligned(), isDereferenceableAndAlignedPointer(), llvm::isKnownNonZero(), llvm::isValidAssumeForContext(), llvm::ObjectSizeOpts::NullIsUnknownSize, llvm::Offset, llvm::ObjectSizeOpts::RoundToAlign, Size, llvm::APInt::uge(), UseDerefAtPointSemantics, and llvm::Align::value().
Referenced by llvm::isDereferenceableAndAlignedInLoop(), isDereferenceableAndAlignedPointer(), llvm::isDereferenceableAndAlignedPointer(), llvm::isDereferenceablePointer(), and llvm::isSafeToLoadUnconditionally().
|
static |
Definition at line 782 of file Loads.cpp.
References DL, From, llvm::Value::getContext(), llvm::Type::getInt8Ty(), llvm::getUnderlyingObjectAggressive(), and llvm::isDereferenceablePointer().
Referenced by llvm::canReplacePointersIfEqual(), and llvm::canReplacePointersInUseIfEqual().
Definition at line 760 of file Loads.cpp.
References llvm::SmallVectorImpl< T >::insert(), llvm::Value::user_begin(), and llvm::Value::user_end().
Referenced by llvm::canReplacePointersInUseIfEqual().
|
static |
Definition at line 369 of file Loads.cpp.
References F, and llvm::Instruction::getFunction().
Referenced by llvm::isSafeToLoadUnconditionally(), and llvm::mustSuppressSpeculation().
Referenced by isDereferenceableAndAlignedPointer().