LLVM 20.0.0git
|
#include "llvm/Analysis/TypeBasedAliasAnalysis.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/Analysis/MemoryLocation.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Metadata.h"
#include "llvm/InitializePasses.h"
#include "llvm/Pass.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/ErrorHandling.h"
#include <cassert>
#include <cstdint>
Go to the source code of this file.
Functions | |
static bool | isStructPathTBAA (const MDNode *MD) |
Check the first operand of the tbaa tag node, if it is a MDNode, we treat it as struct-path aware TBAA format, otherwise, we treat it as scalar TBAA format. | |
static bool | matchAccessTags (const MDNode *A, const MDNode *B, const MDNode **GenericTag) |
matchTags - Return true if the given couple of accesses are allowed to overlap. | |
static const MDNode * | getLeastCommonType (const MDNode *A, const MDNode *B) |
static const MDNode * | createAccessTag (const MDNode *AccessType) |
static bool | hasField (TBAAStructTypeNode BaseType, TBAAStructTypeNode FieldType) |
static bool | mayBeAccessToSubobjectOf (TBAAStructTagNode BaseTag, TBAAStructTagNode SubobjectTag, const MDNode *CommonType, const MDNode **GenericTag, bool &MayAlias) |
Return true if for two given accesses, one of the accessed objects may be a subobject of the other. | |
INITIALIZE_PASS (TypeBasedAAWrapperPass, "tbaa", "Type-Based Alias Analysis", false, true) ImmutablePass *llvm | |
Variables | |
static cl::opt< bool > | EnableTBAA ("enable-tbaa", cl::init(true), cl::Hidden) |
Definition at line 539 of file TypeBasedAliasAnalysis.cpp.
References llvm::ConstantAsMetadata::get(), llvm::IntegerType::get(), llvm::MDNode::get(), llvm::MDNode::getContext(), llvm::MDNode::getNumOperands(), Int64, and UINT64_MAX.
Referenced by matchAccessTags(), and mayBeAccessToSubobjectOf().
Definition at line 483 of file TypeBasedAliasAnalysis.cpp.
References A, B, llvm::SetVector< T, Vector, Set, N >::insert(), llvm::report_fatal_error(), and llvm::SetVector< T, Vector, Set, N >::size().
Referenced by matchAccessTags().
|
static |
Definition at line 566 of file TypeBasedAliasAnalysis.cpp.
References hasField(), and I.
Referenced by hasField(), and mayBeAccessToSubobjectOf().
INITIALIZE_PASS | ( | TypeBasedAAWrapperPass | , |
"tbaa" | , | ||
"Type-Based Alias Analysis" | , | ||
false | , | ||
true | |||
) |
Definition at line 714 of file TypeBasedAliasAnalysis.cpp.
Check the first operand of the tbaa tag node, if it is a MDNode, we treat it as struct-path aware TBAA format, otherwise, we treat it as scalar TBAA format.
Definition at line 369 of file TypeBasedAliasAnalysis.cpp.
References llvm::MDNode::getNumOperands(), and llvm::MDNode::getOperand().
Referenced by llvm::AAMDNodes::extendToTBAA(), llvm::TypeBasedAAResult::getMemoryEffects(), llvm::TypeBasedAAResult::getModRefInfoMask(), llvm::MDNode::isTBAAVtableAccess(), matchAccessTags(), and llvm::AAMDNodes::shiftTBAA().
|
static |
matchTags - Return true if the given couple of accesses are allowed to overlap.
If
Definition at line 654 of file TypeBasedAliasAnalysis.cpp.
References A, assert(), B, createAccessTag(), getLeastCommonType(), isStructPathTBAA(), and mayBeAccessToSubobjectOf().
Referenced by llvm::MDNode::getMostGenericTBAA().
|
static |
Return true if for two given accesses, one of the accessed objects may be a subobject of the other.
The BaseTag
and SubobjectTag
parameters describe the accesses to the base object and the subobject respectively. CommonType
must be the metadata node describing the common type of the accessed objects. On return, MayAlias
is set to true iff these accesses may alias and Generic
, if not null, points to the most generic access tag for the given two.
Definition at line 583 of file TypeBasedAliasAnalysis.cpp.
References assert(), createAccessTag(), and hasField().
Referenced by matchAccessTags().