Skip to content

Commit 89fc422

Browse files
committed
used unique_ptr for Ensembles
1 parent e0e4e97 commit 89fc422

File tree

2 files changed

+23
-22
lines changed

2 files changed

+23
-22
lines changed

llvm/include/llvm/CodeGen/MachineTraceMetrics.h

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,14 @@ class MachineTraceMetrics {
110110
class Ensemble;
111111

112112
// For legacy pass.
113-
MachineTraceMetrics() {
114-
std::fill(std::begin(Ensembles), std::end(Ensembles), nullptr);
113+
MachineTraceMetrics() = default;
114+
115+
explicit MachineTraceMetrics(MachineFunction &MF, const MachineLoopInfo &LI) {
116+
init(MF, LI);
115117
}
116118

117-
explicit MachineTraceMetrics(MachineFunction &MF, const MachineLoopInfo &LI);
119+
MachineTraceMetrics(MachineTraceMetrics &&) = default;
120+
118121
~MachineTraceMetrics();
119122

120123
void init(MachineFunction &Func, const MachineLoopInfo &LI);
@@ -422,8 +425,8 @@ class MachineTraceMetrics {
422425
SmallVector<unsigned, 0> ProcReleaseAtCycles;
423426

424427
// One ensemble per strategy.
425-
Ensemble
426-
*Ensembles[static_cast<size_t>(MachineTraceStrategy::TS_NumStrategies)];
428+
std::unique_ptr<Ensemble>
429+
Ensembles[static_cast<size_t>(MachineTraceStrategy::TS_NumStrategies)];
427430

428431
// Convert scaled resource usage to a cycle count that can be compared with
429432
// latencies.

llvm/lib/CodeGen/MachineTraceMetrics.cpp

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -92,20 +92,14 @@ bool MachineTraceMetricsWrapperPass::runOnMachineFunction(MachineFunction &MF) {
9292
return false;
9393
}
9494

95-
MachineTraceMetrics::MachineTraceMetrics(MachineFunction &MF,
96-
const MachineLoopInfo &LI) {
97-
std::fill(std::begin(Ensembles), std::end(Ensembles), nullptr);
98-
init(MF, LI);
99-
}
100-
10195
MachineTraceMetrics::~MachineTraceMetrics() { clear(); }
10296

10397
void MachineTraceMetrics::clear() {
10498
MF = nullptr;
10599
BlockInfo.clear();
106-
for (Ensemble *&E : Ensembles) {
107-
delete E;
108-
E = nullptr;
100+
for (auto &E : Ensembles) {
101+
if (E)
102+
E.reset();
109103
}
110104
}
111105

@@ -422,27 +416,31 @@ MachineTraceMetrics::Ensemble *
422416
MachineTraceMetrics::getEnsemble(MachineTraceStrategy strategy) {
423417
assert(strategy < MachineTraceStrategy::TS_NumStrategies &&
424418
"Invalid trace strategy enum");
425-
Ensemble *&E = Ensembles[static_cast<size_t>(strategy)];
419+
std::unique_ptr<MachineTraceMetrics::Ensemble> &E =
420+
Ensembles[static_cast<size_t>(strategy)];
426421
if (E)
427-
return E;
422+
return E.get();
428423

429424
// Allocate new Ensemble on demand.
430425
switch (strategy) {
431426
case MachineTraceStrategy::TS_MinInstrCount:
432-
return (E = new MinInstrCountEnsemble(this));
427+
E = std::make_unique<MinInstrCountEnsemble>(MinInstrCountEnsemble(this));
428+
break;
433429
case MachineTraceStrategy::TS_Local:
434-
return (E = new LocalEnsemble(this));
430+
E = std::make_unique<LocalEnsemble>(LocalEnsemble(this));
431+
break;
435432
default: llvm_unreachable("Invalid trace strategy enum");
436433
}
434+
return E.get();
437435
}
438436

439437
void MachineTraceMetrics::invalidate(const MachineBasicBlock *MBB) {
440438
LLVM_DEBUG(dbgs() << "Invalidate traces through " << printMBBReference(*MBB)
441439
<< '\n');
442440
BlockInfo[MBB->getNumber()].invalidate();
443-
for (Ensemble *E : Ensembles)
441+
for (auto &E : Ensembles)
444442
if (E)
445-
E->invalidate(MBB);
443+
E.get()->invalidate(MBB);
446444
}
447445

448446
bool MachineTraceMetrics::invalidate(
@@ -461,9 +459,9 @@ void MachineTraceMetrics::verifyAnalysis() const {
461459
return;
462460
#ifndef NDEBUG
463461
assert(BlockInfo.size() == MF->getNumBlockIDs() && "Outdated BlockInfo size");
464-
for (Ensemble *E : Ensembles)
462+
for (auto &E : Ensembles)
465463
if (E)
466-
E->verify();
464+
E.get()->verify();
467465
#endif
468466
}
469467

0 commit comments

Comments
 (0)