forked from OSchip/llvm-project
[Attributor][NFC] Use a BumpPtrAllocator to allocate `AbstractAttribute`s
We create a lot of AbstractAttributes and they live as long as the Attributor does. It seems reasonable to allocate them via a BumpPtrAllocator owned by the Attributor. Reviewed By: baziotis Differential Revision: https://reviews.llvm.org/D76589
This commit is contained in:
parent
6cd673345c
commit
41f2a57d0b
|
@ -112,6 +112,7 @@
|
|||
#include "llvm/IR/ConstantRange.h"
|
||||
#include "llvm/IR/KnowledgeRetention.h"
|
||||
#include "llvm/IR/PassManager.h"
|
||||
#include "llvm/Support/Allocator.h"
|
||||
#include "llvm/Transforms/Utils/CallGraphUpdater.h"
|
||||
|
||||
namespace llvm {
|
||||
|
@ -700,11 +701,7 @@ struct Attributor {
|
|||
: Functions(Functions), InfoCache(InfoCache), CGUpdater(CGUpdater),
|
||||
DepRecomputeInterval(DepRecomputeInterval), Whitelist(Whitelist) {}
|
||||
|
||||
~Attributor() {
|
||||
DeleteContainerPointers(AllAbstractAttributes);
|
||||
for (auto &It : ArgumentReplacementMap)
|
||||
DeleteContainerPointers(It.second);
|
||||
}
|
||||
~Attributor();
|
||||
|
||||
/// Run the analyses until a fixpoint is reached or enforced (timeout).
|
||||
///
|
||||
|
@ -1070,6 +1067,9 @@ struct Attributor {
|
|||
/// Return the data layout associated with the anchor scope.
|
||||
const DataLayout &getDataLayout() const { return InfoCache.DL; }
|
||||
|
||||
/// The allocator used to allocate memory, e.g. for `AbstractAttribute`s.
|
||||
BumpPtrAllocator Allocator;
|
||||
|
||||
private:
|
||||
/// Check \p Pred on all call sites of \p Fn.
|
||||
///
|
||||
|
|
|
@ -7309,6 +7309,16 @@ struct AAValueConstantRangeCallSiteArgument : AAValueConstantRangeFloating {
|
|||
/// Attributor
|
||||
/// ----------------------------------------------------------------------------
|
||||
|
||||
Attributor::~Attributor() {
|
||||
// The abstract attributes are allocated via the BumpPtrAllocator Allocator,
|
||||
// thus we cannot delete them. We can, and want to, destruct them though.
|
||||
for (AbstractAttribute *AA : AllAbstractAttributes)
|
||||
AA->~AbstractAttribute();
|
||||
|
||||
for (auto &It : ArgumentReplacementMap)
|
||||
DeleteContainerPointers(It.second);
|
||||
}
|
||||
|
||||
bool Attributor::isAssumedDead(const AbstractAttribute &AA,
|
||||
const AAIsDead *FnLivenessAA,
|
||||
bool CheckBBLivenessOnly, DepClassTy DepClass) {
|
||||
|
@ -8891,7 +8901,7 @@ const char AAValueConstantRange::ID = 0;
|
|||
|
||||
#define SWITCH_PK_CREATE(CLASS, IRP, PK, SUFFIX) \
|
||||
case IRPosition::PK: \
|
||||
AA = new CLASS##SUFFIX(IRP); \
|
||||
AA = new (A.Allocator) CLASS##SUFFIX(IRP); \
|
||||
break;
|
||||
|
||||
#define CREATE_FUNCTION_ABSTRACT_ATTRIBUTE_FOR_POSITION(CLASS) \
|
||||
|
|
Loading…
Reference in New Issue