diff --git a/src/mapleall/maple_be/src/cg/reg_alloc.cpp b/src/mapleall/maple_be/src/cg/reg_alloc.cpp index b297d4d7fd511e09ac5a6d94440273933b54760f..04442defd2703e2006aa53484f661da07f1d2d8e 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 */