Skip to content

Commit 4295911

Browse files
committed
apply suggestions
1 parent c791eaa commit 4295911

File tree

6 files changed

+42
-33
lines changed

6 files changed

+42
-33
lines changed

llvm/lib/CodeGen/SpillPlacement.h renamed to llvm/include/llvm/CodeGen/SpillPlacement.h

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class SpillPlacement {
5353
const MachineBlockFrequencyInfo *MBFI = nullptr;
5454

5555
static void arrayDeleter(Node *N);
56-
std::unique_ptr<Node, decltype(&arrayDeleter)> nodes;
56+
std::unique_ptr<Node[], decltype(&arrayDeleter)> nodes;
5757

5858
// Nodes that are active in the current computation. Owned by the prepare()
5959
// caller.
@@ -162,10 +162,15 @@ class SpillPlacement {
162162
MachineFunctionAnalysisManager::Invalidator &Inv);
163163

164164
private:
165-
SpillPlacement(EdgeBundles *Bundles, MachineBlockFrequencyInfo *MBFI)
166-
: bundles(Bundles), MBFI(MBFI), nodes(nullptr, &arrayDeleter) {}
165+
SpillPlacement() : nodes(nullptr, &arrayDeleter) {};
167166

168-
void run(MachineFunction &MF);
167+
void releaseMemory() {
168+
nodes.reset();
169+
TodoList.clear();
170+
}
171+
172+
void run(MachineFunction &MF, EdgeBundles *Bundles,
173+
MachineBlockFrequencyInfo *MBFI);
169174
void activate(unsigned n);
170175
void setThreshold(BlockFrequency Entry);
171176

@@ -177,14 +182,14 @@ class SpillPlacementWrapperLegacy : public MachineFunctionPass {
177182
static char ID;
178183
SpillPlacementWrapperLegacy() : MachineFunctionPass(ID) {}
179184

180-
SpillPlacement &getResult() { return *Impl; }
181-
const SpillPlacement &getResult() const { return *Impl; }
185+
SpillPlacement &getResult() { return Impl; }
186+
const SpillPlacement &getResult() const { return Impl; }
182187

183188
private:
184-
std::unique_ptr<SpillPlacement> Impl;
189+
SpillPlacement Impl;
185190
bool runOnMachineFunction(MachineFunction &MF) override;
186191
void getAnalysisUsage(AnalysisUsage &AU) const override;
187-
void releaseMemory() override { Impl.reset(); }
192+
void releaseMemory() override { Impl.releaseMemory(); }
188193
};
189194

190195
class SpillPlacementAnalysis

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ MACHINE_FUNCTION_ANALYSIS("machine-post-dom-tree",
112112
MachinePostDominatorTreeAnalysis())
113113
MACHINE_FUNCTION_ANALYSIS("machine-trace-metrics", MachineTraceMetricsAnalysis())
114114
MACHINE_FUNCTION_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC))
115+
MACHINE_FUNCTION_ANALYSIS("spill-code-placement", SpillPlacementAnalysis())
115116
MACHINE_FUNCTION_ANALYSIS("slot-indexes", SlotIndexesAnalysis())
116117
MACHINE_FUNCTION_ANALYSIS("virtregmap", VirtRegMapAnalysis())
117118
// MACHINE_FUNCTION_ANALYSIS("live-stacks", LiveStacksPass())

llvm/lib/CodeGen/RegAllocGreedy.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
#include "RegAllocBase.h"
1818
#include "RegAllocEvictionAdvisor.h"
1919
#include "RegAllocPriorityAdvisor.h"
20-
#include "SpillPlacement.h"
2120
#include "SplitKit.h"
2221
#include "llvm/ADT/ArrayRef.h"
2322
#include "llvm/ADT/BitVector.h"
@@ -50,6 +49,7 @@
5049
#include "llvm/CodeGen/RegAllocRegistry.h"
5150
#include "llvm/CodeGen/RegisterClassInfo.h"
5251
#include "llvm/CodeGen/SlotIndexes.h"
52+
#include "llvm/CodeGen/SpillPlacement.h"
5353
#include "llvm/CodeGen/Spiller.h"
5454
#include "llvm/CodeGen/TargetInstrInfo.h"
5555
#include "llvm/CodeGen/TargetRegisterInfo.h"

llvm/lib/CodeGen/RegAllocGreedy.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
#include "RegAllocBase.h"
1717
#include "RegAllocEvictionAdvisor.h"
1818
#include "RegAllocPriorityAdvisor.h"
19-
#include "SpillPlacement.h"
2019
#include "SplitKit.h"
2120
#include "llvm/ADT/ArrayRef.h"
2221
#include "llvm/ADT/BitVector.h"
@@ -30,6 +29,7 @@
3029
#include "llvm/CodeGen/MachineFunction.h"
3130
#include "llvm/CodeGen/MachineFunctionPass.h"
3231
#include "llvm/CodeGen/RegisterClassInfo.h"
32+
#include "llvm/CodeGen/SpillPlacement.h"
3333
#include "llvm/CodeGen/Spiller.h"
3434
#include "llvm/CodeGen/TargetRegisterInfo.h"
3535
#include <algorithm>

llvm/lib/CodeGen/SpillPlacement.cpp

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
//
2727
//===----------------------------------------------------------------------===//
2828

29-
#include "SpillPlacement.h"
29+
#include "llvm/CodeGen/SpillPlacement.h"
3030
#include "llvm/ADT/BitVector.h"
3131
#include "llvm/CodeGen/EdgeBundles.h"
3232
#include "llvm/CodeGen/MachineBasicBlock.h"
@@ -193,8 +193,7 @@ bool SpillPlacementWrapperLegacy::runOnMachineFunction(MachineFunction &MF) {
193193
auto *Bundles = &getAnalysis<EdgeBundlesWrapperLegacy>().getEdgeBundles();
194194
auto *MBFI = &getAnalysis<MachineBlockFrequencyInfoWrapperPass>().getMBFI();
195195

196-
Impl.reset(new SpillPlacement(Bundles, MBFI));
197-
Impl->run(MF);
196+
Impl.run(MF, Bundles, MBFI);
198197
return false;
199198
}
200199

@@ -205,17 +204,17 @@ SpillPlacementAnalysis::run(MachineFunction &MF,
205204
MachineFunctionAnalysisManager &MFAM) {
206205
auto *Bundles = &MFAM.getResult<EdgeBundlesAnalysis>(MF);
207206
auto *MBFI = &MFAM.getResult<MachineBlockFrequencyAnalysis>(MF);
208-
SpillPlacement Impl(Bundles, MBFI);
209-
Impl.run(MF);
207+
SpillPlacement Impl;
208+
Impl.run(MF, Bundles, MBFI);
210209
return Impl;
211210
}
212211

213212
bool SpillPlacementAnalysis::Result::invalidate(
214213
MachineFunction &MF, const PreservedAnalyses &PA,
215214
MachineFunctionAnalysisManager::Invalidator &Inv) {
216215
auto PAC = PA.getChecker<SpillPlacementAnalysis>();
217-
return !(PAC.preserved() ||
218-
PAC.preservedSet<AllAnalysesOn<MachineFunction>>()) ||
216+
return (!PAC.preserved() &&
217+
!PAC.preservedSet<AllAnalysesOn<MachineFunction>>()) ||
219218
Inv.invalidate<EdgeBundlesAnalysis>(MF, PA) ||
220219
Inv.invalidate<MachineBlockFrequencyAnalysis>(MF, PA);
221220
}
@@ -225,8 +224,11 @@ void SpillPlacement::arrayDeleter(Node *N) {
225224
delete[] N;
226225
}
227226

228-
void SpillPlacement::run(MachineFunction &mf) {
227+
void SpillPlacement::run(MachineFunction &mf, EdgeBundles *Bundles,
228+
MachineBlockFrequencyInfo *MBFI) {
229229
MF = &mf;
230+
this->bundles = Bundles;
231+
this->MBFI = MBFI;
230232

231233
assert(!nodes && "Leaking node array");
232234
nodes.reset(new Node[bundles->getNumBundles()]);
@@ -248,7 +250,7 @@ void SpillPlacement::activate(unsigned n) {
248250
if (ActiveNodes->test(n))
249251
return;
250252
ActiveNodes->set(n);
251-
nodes.get()[n].clear(Threshold);
253+
nodes[n].clear(Threshold);
252254

253255
// Very large bundles usually come from big switches, indirect branches,
254256
// landing pads, or loops with many 'continue' statements. It is difficult to
@@ -260,10 +262,10 @@ void SpillPlacement::activate(unsigned n) {
260262
// limiting the number of blocks visited and the number of links in the
261263
// Hopfield network.
262264
if (bundles->getBlocks(n).size() > 100) {
263-
nodes.get()[n].BiasP = BlockFrequency(0);
265+
nodes[n].BiasP = BlockFrequency(0);
264266
BlockFrequency BiasN = MBFI->getEntryFreq();
265267
BiasN >>= 4;
266-
nodes.get()[n].BiasN = BiasN;
268+
nodes[n].BiasN = BiasN;
267269
}
268270
}
269271

@@ -290,14 +292,14 @@ void SpillPlacement::addConstraints(ArrayRef<BlockConstraint> LiveBlocks) {
290292
if (LB.Entry != DontCare) {
291293
unsigned ib = bundles->getBundle(LB.Number, false);
292294
activate(ib);
293-
nodes.get()[ib].addBias(Freq, LB.Entry);
295+
nodes[ib].addBias(Freq, LB.Entry);
294296
}
295297

296298
// Live-out from block?
297299
if (LB.Exit != DontCare) {
298300
unsigned ob = bundles->getBundle(LB.Number, true);
299301
activate(ob);
300-
nodes.get()[ob].addBias(Freq, LB.Exit);
302+
nodes[ob].addBias(Freq, LB.Exit);
301303
}
302304
}
303305
}
@@ -312,8 +314,8 @@ void SpillPlacement::addPrefSpill(ArrayRef<unsigned> Blocks, bool Strong) {
312314
unsigned ob = bundles->getBundle(B, true);
313315
activate(ib);
314316
activate(ob);
315-
nodes.get()[ib].addBias(Freq, PrefSpill);
316-
nodes.get()[ob].addBias(Freq, PrefSpill);
317+
nodes[ib].addBias(Freq, PrefSpill);
318+
nodes[ob].addBias(Freq, PrefSpill);
317319
}
318320
}
319321

@@ -328,8 +330,8 @@ void SpillPlacement::addLinks(ArrayRef<unsigned> Links) {
328330
activate(ib);
329331
activate(ob);
330332
BlockFrequency Freq = BlockFrequencies[Number];
331-
nodes.get()[ib].addLink(ob, Freq);
332-
nodes.get()[ob].addLink(ib, Freq);
333+
nodes[ib].addLink(ob, Freq);
334+
nodes[ob].addLink(ib, Freq);
333335
}
334336
}
335337

@@ -339,18 +341,18 @@ bool SpillPlacement::scanActiveBundles() {
339341
update(n);
340342
// A node that must spill, or a node without any links is not going to
341343
// change its value ever again, so exclude it from iterations.
342-
if (nodes.get()[n].mustSpill())
344+
if (nodes[n].mustSpill())
343345
continue;
344-
if (nodes.get()[n].preferReg())
346+
if (nodes[n].preferReg())
345347
RecentPositive.push_back(n);
346348
}
347349
return !RecentPositive.empty();
348350
}
349351

350352
bool SpillPlacement::update(unsigned n) {
351-
if (!nodes.get()[n].update(nodes.get(), Threshold))
353+
if (!nodes[n].update(nodes.get(), Threshold))
352354
return false;
353-
nodes.get()[n].getDissentingNeighbors(TodoList, nodes.get());
355+
nodes[n].getDissentingNeighbors(TodoList, nodes.get());
354356
return true;
355357
}
356358

@@ -370,7 +372,7 @@ void SpillPlacement::iterate() {
370372
unsigned n = TodoList.pop_back_val();
371373
if (!update(n))
372374
continue;
373-
if (nodes.get()[n].preferReg())
375+
if (nodes[n].preferReg())
374376
RecentPositive.push_back(n);
375377
}
376378
}
@@ -391,7 +393,7 @@ SpillPlacement::finish() {
391393
// Write preferences back to ActiveNodes.
392394
bool Perfect = true;
393395
for (unsigned n : ActiveNodes->set_bits())
394-
if (!nodes.get()[n].preferReg()) {
396+
if (!nodes[n].preferReg()) {
395397
ActiveNodes->reset(n);
396398
Perfect = false;
397399
}

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@
129129
#include "llvm/CodeGen/ShadowStackGCLowering.h"
130130
#include "llvm/CodeGen/SjLjEHPrepare.h"
131131
#include "llvm/CodeGen/SlotIndexes.h"
132+
#include "llvm/CodeGen/SpillPlacement.h"
132133
#include "llvm/CodeGen/StackColoring.h"
133134
#include "llvm/CodeGen/StackProtector.h"
134135
#include "llvm/CodeGen/TailDuplication.h"

0 commit comments

Comments
 (0)