LLVM 17.0.0git
|
#include "llvm/Transforms/IPO/Attributor.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMapInfo.h"
#include "llvm/ADT/MapVector.h"
#include "llvm/ADT/SCCIterator.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SetOperations.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/Analysis/AssumeBundleQueries.h"
#include "llvm/Analysis/AssumptionCache.h"
#include "llvm/Analysis/CaptureTracking.h"
#include "llvm/Analysis/CycleAnalysis.h"
#include "llvm/Analysis/InstructionSimplify.h"
#include "llvm/Analysis/LazyValueInfo.h"
#include "llvm/Analysis/MemoryBuiltins.h"
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
#include "llvm/Analysis/ScalarEvolution.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/IR/Argument.h"
#include "llvm/IR/Assumptions.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Constant.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/IntrinsicsAMDGPU.h"
#include "llvm/IR/IntrinsicsNVPTX.h"
#include "llvm/IR/NoFolder.h"
#include "llvm/IR/Value.h"
#include "llvm/IR/ValueHandle.h"
#include "llvm/Support/Alignment.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/GraphWriter.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Transforms/Utils/Local.h"
#include "llvm/Transforms/Utils/ValueMapper.h"
#include <cassert>
#include <numeric>
#include <optional>
Go to the source code of this file.
Classes | |
struct | llvm::DenseMapInfo< AAPointerInfo::Access > |
Helper for AA::PointerInfo::Access DenseMap/Set usage. More... | |
struct | llvm::DenseMapInfo< AA::RangeTy > |
Helper that allows RangeTy as a key in a DenseMap. More... | |
struct | llvm::AccessAsInstructionInfo |
Helper for AA::PointerInfo::Access DenseMap/Set usage ignoring everythign but the instruction. More... | |
struct | llvm::AA::PointerInfo::State |
A type to track pointer/struct usage and accesses for AAPointerInfo. More... | |
struct | ReachabilityQueryInfo< ToTy > |
----------------—AAIntraFnReachability Attribute-----------------------— More... | |
struct | llvm::DenseMapInfo< ReachabilityQueryInfo< ToTy > * > |
Namespaces | |
namespace | llvm |
This is an optimization pass for GlobalISel generic memory operations. | |
namespace | llvm::AA |
Abstract Attribute helper functions. | |
namespace | llvm::AA::PointerInfo |
Functions | |
STATISTIC (NumAAs, "Number of abstract attributes created") | |
template<> | |
ChangeStatus | llvm::clampStateAndIndicateChange< DerefState > (DerefState &S, const DerefState &R) |
static bool | mayBeInCycle (const CycleInfo *CI, const Instruction *I, bool HeaderOnly, Cycle **CPtr=nullptr) |
static bool | isDenselyPacked (Type *Ty, const DataLayout &DL) |
Checks if a type could have padding bytes. | |
static const Value * | getPointerOperand (const Instruction *I, bool AllowVolatile) |
Get pointer operand of memory accessing instruction. | |
static Value * | constructPointer (Type *ResTy, Type *PtrElemTy, Value *Ptr, int64_t Offset, IRBuilder< NoFolder > &IRB, const DataLayout &DL) |
Helper function to create a pointer of type ResTy , based on Ptr , and advanced by Offset bytes. | |
static const Value * | stripAndAccumulateOffsets (Attributor &A, const AbstractAttribute &QueryingAA, const Value *Val, const DataLayout &DL, APInt &Offset, bool GetMinOffset, bool AllowNonInbounds, bool UseAssumed=false) |
static const Value * | getMinimalBaseOfPointer (Attributor &A, const AbstractAttribute &QueryingAA, const Value *Ptr, int64_t &BytesOffset, const DataLayout &DL, bool AllowNonInbounds=false) |
template<typename AAType , typename StateType = typename AAType::StateType> | |
static void | clampReturnedValueStates (Attributor &A, const AAType &QueryingAA, StateType &S, const IRPosition::CallBaseContext *CBContext=nullptr) |
Clamp the information known for all returned values of a function (identified by QueryingAA ) into S . | |
template<typename AAType > | |
static std::optional< Constant * > | askForAssumedConstant (Attributor &A, const AbstractAttribute &QueryingAA, const IRPosition &IRP, Type &Ty) |
Variables | |
static cl::opt< bool > | ManifestInternal ("attributor-manifest-internal", cl::Hidden, cl::desc("Manifest Attributor internal string attributes."), cl::init(false)) |
static cl::opt< int > | MaxHeapToStackSize ("max-heap-to-stack-size", cl::init(128), cl::Hidden) |
static cl::opt< unsigned, true > | MaxPotentialValues ("attributor-max-potential-values", cl::Hidden, cl::desc("Maximum number of potential values to be " "tracked for each position."), cl::location(llvm::PotentialConstantIntValuesState::MaxPotentialValues), cl::init(7)) |
static cl::opt< int > | MaxPotentialValuesIterations ("attributor-max-potential-values-iterations", cl::Hidden, cl::desc("Maximum number of iterations we keep dismantling potential values."), cl::init(64)) |
#define BUILD_STAT_MSG_IR_ATTR | ( | TYPE, | |
NAME | |||
) | ("Number of " #TYPE " marked '" #NAME "'") |
Definition at line 116 of file AttributorAttributes.cpp.
#define BUILD_STAT_NAME | ( | NAME, | |
TYPE | |||
) | NumIR##TYPE##_##NAME |
Definition at line 118 of file AttributorAttributes.cpp.
#define CREATE_ALL_ABSTRACT_ATTRIBUTE_FOR_POSITION | ( | CLASS | ) |
Definition at line 11955 of file AttributorAttributes.cpp.
#define CREATE_FUNCTION_ABSTRACT_ATTRIBUTE_FOR_POSITION | ( | CLASS | ) |
Definition at line 11923 of file AttributorAttributes.cpp.
#define CREATE_FUNCTION_ONLY_ABSTRACT_ATTRIBUTE_FOR_POSITION | ( | CLASS | ) |
Definition at line 11971 of file AttributorAttributes.cpp.
#define CREATE_NON_RET_ABSTRACT_ATTRIBUTE_FOR_POSITION | ( | CLASS | ) |
Definition at line 11987 of file AttributorAttributes.cpp.
#define CREATE_VALUE_ABSTRACT_ATTRIBUTE_FOR_POSITION | ( | CLASS | ) |
Definition at line 11939 of file AttributorAttributes.cpp.
#define DEBUG_TYPE "attributor" |
Definition at line 73 of file AttributorAttributes.cpp.
#define DefineKeys | ( | ToTy | ) |
Definition at line 3530 of file AttributorAttributes.cpp.
#define PIPE_OPERATOR | ( | CLASS | ) |
Definition at line 150 of file AttributorAttributes.cpp.
#define STATS_DECL | ( | NAME, | |
TYPE, | |||
MSG | |||
) | STATS_DECL_(BUILD_STAT_NAME(NAME, TYPE), MSG); |
Definition at line 120 of file AttributorAttributes.cpp.
#define STATS_DECL_ | ( | NAME, | |
MSG | |||
) | STATISTIC(NAME, MSG); |
Definition at line 119 of file AttributorAttributes.cpp.
#define STATS_DECLTRACK | ( | NAME, | |
TYPE, | |||
MSG | |||
) |
Definition at line 123 of file AttributorAttributes.cpp.
#define STATS_DECLTRACK_ARG_ATTR | ( | NAME | ) | STATS_DECLTRACK(NAME, Arguments, BUILD_STAT_MSG_IR_ATTR(arguments, NAME)) |
Definition at line 128 of file AttributorAttributes.cpp.
#define STATS_DECLTRACK_CS_ATTR | ( | NAME | ) | STATS_DECLTRACK(NAME, CS, BUILD_STAT_MSG_IR_ATTR(call site, NAME)) |
Definition at line 135 of file AttributorAttributes.cpp.
#define STATS_DECLTRACK_CSARG_ATTR | ( | NAME | ) |
Definition at line 130 of file AttributorAttributes.cpp.
#define STATS_DECLTRACK_CSRET_ATTR | ( | NAME | ) |
Definition at line 140 of file AttributorAttributes.cpp.
#define STATS_DECLTRACK_FLOATING_ATTR | ( | NAME | ) |
Definition at line 143 of file AttributorAttributes.cpp.
#define STATS_DECLTRACK_FN_ATTR | ( | NAME | ) | STATS_DECLTRACK(NAME, Function, BUILD_STAT_MSG_IR_ATTR(functions, NAME)) |
Definition at line 133 of file AttributorAttributes.cpp.
#define STATS_DECLTRACK_FNRET_ATTR | ( | NAME | ) |
Definition at line 137 of file AttributorAttributes.cpp.
#define STATS_TRACK | ( | NAME, | |
TYPE | |||
) | ++(BUILD_STAT_NAME(NAME, TYPE)); |
Definition at line 122 of file AttributorAttributes.cpp.
#define SWITCH_PK_CREATE | ( | CLASS, | |
IRP, | |||
PK, | |||
SUFFIX | |||
) |
Definition at line 11917 of file AttributorAttributes.cpp.
#define SWITCH_PK_INV | ( | CLASS, | |
PK, | |||
POS_NAME | |||
) |
Definition at line 11913 of file AttributorAttributes.cpp.
|
static |
Definition at line 10706 of file AttributorAttributes.cpp.
References A, llvm::CallingConv::C, llvm::Type::isIntegerTy(), llvm::NONE, and llvm::OPTIONAL.
|
static |
Clamp the information known for all returned values of a function (identified by QueryingAA
) into S
.
Definition at line 374 of file AttributorAttributes.cpp.
References A, assert(), llvm::dbgs(), llvm::IRPosition::IRP_CALL_SITE_RETURNED, llvm::IRPosition::IRP_RETURNED, LLVM_DEBUG, and llvm::IRPosition::value().
|
static |
Helper function to create a pointer of type ResTy
, based on Ptr
, and advanced by Offset
bytes.
To aid later analysis the method tries to build getelement pointer instructions that traverse the natural type of Ptr
if possible. If that fails, the remaining offset is adjusted byte-wise, hence through a cast to i8*.
TODO: This could probably live somewhere more prominantly if it doesn't already exist.
Definition at line 288 of file AttributorAttributes.cpp.
References assert(), llvm::IRBuilderBase::CreateBitCast(), llvm::IRBuilderBase::CreateGEP(), llvm::IRBuilderBase::CreatePointerBitCastOrAddrSpaceCast(), llvm::dbgs(), DL, llvm::IRBuilderBase::getInt(), llvm::IRBuilderBase::getInt8PtrTy(), llvm::IRBuilderBase::getInt8Ty(), llvm::APInt::getZExtValue(), LLVM_DEBUG, llvm::Offset, Ptr, and llvm::SmallVectorTemplateBase< T, bool >::push_back().
|
static |
Definition at line 359 of file AttributorAttributes.cpp.
References A, llvm::sampleprof::Base, DL, llvm::APInt::getSExtValue(), Ptr, and stripAndAccumulateOffsets().
|
static |
Get pointer operand of memory accessing instruction.
If I
is not a memory accessing instruction, return nullptr. If AllowVolatile
, is set to false and the instruction is volatile, return nullptr.
Definition at line 256 of file AttributorAttributes.cpp.
|
static |
Checks if a type could have padding bytes.
Definition at line 215 of file AttributorAttributes.cpp.
References DL, E, llvm::StructLayout::getElementOffsetInBits(), llvm::StructType::getElementType(), llvm::StructType::getNumElements(), I, isDenselyPacked(), and llvm::Type::isSized().
Referenced by isDenselyPacked().
|
static |
Definition at line 201 of file AttributorAttributes.cpp.
References llvm::CallingConv::C, llvm::GenericCycleInfo< ContextT >::getCycle(), and I.
STATISTIC | ( | NumAAs | , |
"Number of abstract attributes created" | |||
) |
|
static |
Definition at line 327 of file AttributorAttributes.cpp.
References A, DL, llvm::IntegerRangeState::getAssumed(), llvm::IntegerRangeState::getKnown(), llvm::Offset, llvm::Value::stripAndAccumulateConstantOffsets(), and llvm::IRPosition::value().
Referenced by getMinimalBaseOfPointer().
|
static |
|
static |
|
static |
|
static |