From bdfb97b5d3f69a7c8bb45f628c4c0e153197e8e4 Mon Sep 17 00:00:00 2001 From: William Chen Date: Thu, 1 Sep 2022 11:17:39 -0700 Subject: [PATCH] Use temporary MemPool for each iteration of multi-pass coloring RA --- src/mapleall/maple_be/src/cg/reg_alloc.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/mapleall/maple_be/src/cg/reg_alloc.cpp b/src/mapleall/maple_be/src/cg/reg_alloc.cpp index b297d4d7fd..04442defd2 100644 --- a/src/mapleall/maple_be/src/cg/reg_alloc.cpp +++ b/src/mapleall/maple_be/src/cg/reg_alloc.cpp @@ -105,6 +105,7 @@ bool CgRegAlloc::PhaseRun(maplebe::CGFunc &f) { #endif /* create register allocator */ RegAllocator *regAllocator = nullptr; + MemPool *tempMP = nullptr; if (Globals::GetInstance()->GetOptimLevel() == CGOptions::kLevel0) { regAllocator = phaseMp->New(f, *phaseMp); } else if (Globals::GetInstance()->GetOptimLevel() == CGOptions::kLevelLiteCG) { @@ -119,7 +120,8 @@ bool CgRegAlloc::PhaseRun(maplebe::CGFunc &f) { if (f.GetCG()->GetCGOptions().DoLinearScanRegisterAllocation()) { regAllocator = phaseMp->New(f, *phaseMp); } else if (f.GetCG()->GetCGOptions().DoColoringBasedRegisterAllocation()) { - regAllocator = phaseMp->New(f, *phaseMp, *dom); + tempMP = memPoolCtrler.NewMemPool("colrRA", true); + regAllocator = phaseMp->New(f, *tempMP, *dom); } else { maple::LogInfo::MapleLogger(kLlErr) << "Warning: We only support Linear Scan and GraphColor register allocation\n"; @@ -161,6 +163,7 @@ bool CgRegAlloc::PhaseRun(maplebe::CGFunc &f) { end = std::chrono::system_clock::now(); cleanupUS += std::chrono::duration_cast(end - start).count(); #endif + memPoolCtrler.DeleteMemPool(tempMP); } if (Globals::GetInstance()->GetOptimLevel() > CGOptions::kLevel0) { GetAnalysisInfoHook()->ForceEraseAnalysisPhase(f.GetUniqueID(), &CgLoopAnalysis::id); @@ -172,4 +175,4 @@ bool CgRegAlloc::PhaseRun(maplebe::CGFunc &f) { #endif return false; } -} /* namespace maplebe */ \ No newline at end of file +} /* namespace maplebe */ -- Gitee