Skip to content

Commit 2dc0b9f

Browse files
wpangfxbot
authored andcommitted
- Track register pressure more accurately when there are
partially-written local variables. - Fixes a crash in liveness Change-Id: I1d1540defc3516a23964f5954cfefef77a1f37df
1 parent 7a522cd commit 2dc0b9f

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

visa/LocalScheduler/G4_Sched.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -303,11 +303,16 @@ struct RegisterPressure
303303
}
304304
}
305305

306+
RegisterPressure(const RegisterPressure& other) = delete;
307+
RegisterPressure& operator=(RegisterPressure& other) = delete;
308+
306309
void init()
307310
{
308311
p2a = new PointsToAnalysis(kernel.Declares, kernel.fg.getNumBB());
309312
p2a->doPointsToAnalysis(kernel.fg);
310313
gra = new GlobalRA(kernel, kernel.fg.builder->phyregpool, *p2a);
314+
// To properly track liveness for partially-written local variables.
315+
gra->markGraphBlockLocalVars(/*doLocalRA*/false);
311316
liveness = new LivenessAnalysis(*gra, G4_GRF | G4_ADDRESS | G4_INPUT | G4_FLAG);
312317
liveness->computeLiveness(true);
313318
rpe = new RPE(*gra, liveness);
@@ -382,11 +387,6 @@ struct RegisterPressure
382387
}
383388
std::cerr << "\n\n";
384389
}
385-
private:
386-
// Private copy ctor, assignment operator to prevent shallow copy that
387-
// could lead to double free.
388-
RegisterPressure(const RegisterPressure& other);
389-
RegisterPressure& operator=(RegisterPressure& other);
390390
};
391391

392392
struct SchedConfig

visa/RPE.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,12 @@ namespace vISA
4242
void RPE::run()
4343
{
4444
startTimer(TIMER_RPE);
45-
for (auto& bb : gra.kernel.fg.BBs)
45+
if (liveAnalysis->getNumSelectedVar() > 0)
4646
{
47-
runBB(bb);
47+
for (auto& bb : gra.kernel.fg.BBs)
48+
{
49+
runBB(bb);
50+
}
4851
}
4952
stopTimer(TIMER_RPE);
5053
}

0 commit comments

Comments
 (0)