mirror of
https://github.com/RPCS3/llvm.git
synced 2025-03-04 00:29:28 +00:00
IR: Avoid mallocs in constructor of ModuleSlotTracker
A ModuleSlotTracker can be created without actually being used (e.g., r266889 added one to the Verifier). Create the SlotTracker within it lazily on the first call to ModuleSlotTracker::getMachine. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@266902 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
19c2c53916
commit
1487a2ee93
@ -30,6 +30,8 @@ class Value;
|
||||
class ModuleSlotTracker {
|
||||
/// Storage for a slot tracker.
|
||||
std::unique_ptr<SlotTracker> MachineStorage;
|
||||
bool ShouldCreateStorage = false;
|
||||
bool ShouldInitializeAllMetadata = false;
|
||||
|
||||
const Module *M = nullptr;
|
||||
const Function *F = nullptr;
|
||||
@ -53,7 +55,9 @@ public:
|
||||
/// Destructor to clean up storage.
|
||||
~ModuleSlotTracker();
|
||||
|
||||
SlotTracker *getMachine() const { return Machine; }
|
||||
/// Lazily creates a slot tracker.
|
||||
SlotTracker *getMachine();
|
||||
|
||||
const Module *getModule() const { return M; }
|
||||
const Function *getCurrentFunction() const { return F; }
|
||||
|
||||
|
@ -697,14 +697,25 @@ ModuleSlotTracker::ModuleSlotTracker(SlotTracker &Machine, const Module *M,
|
||||
|
||||
ModuleSlotTracker::ModuleSlotTracker(const Module *M,
|
||||
bool ShouldInitializeAllMetadata)
|
||||
: MachineStorage(M ? new SlotTracker(M, ShouldInitializeAllMetadata)
|
||||
: nullptr),
|
||||
M(M), Machine(MachineStorage.get()) {}
|
||||
: ShouldCreateStorage(M),
|
||||
ShouldInitializeAllMetadata(ShouldInitializeAllMetadata), M(M) {}
|
||||
|
||||
ModuleSlotTracker::~ModuleSlotTracker() {}
|
||||
|
||||
SlotTracker *ModuleSlotTracker::getMachine() {
|
||||
if (!ShouldCreateStorage)
|
||||
return Machine;
|
||||
|
||||
ShouldCreateStorage = false;
|
||||
MachineStorage =
|
||||
llvm::make_unique<SlotTracker>(M, ShouldInitializeAllMetadata);
|
||||
Machine = MachineStorage.get();
|
||||
return Machine;
|
||||
}
|
||||
|
||||
void ModuleSlotTracker::incorporateFunction(const Function &F) {
|
||||
if (!Machine)
|
||||
// Using getMachine() may lazily create the slot tracker.
|
||||
if (!getMachine())
|
||||
return;
|
||||
|
||||
// Nothing to do if this is the right function already.
|
||||
|
Loading…
x
Reference in New Issue
Block a user