From cfda07ebb3e26e56ca2eeba657238a743c3783dc Mon Sep 17 00:00:00 2001 From: Fred Chow Date: Wed, 7 Sep 2022 23:03:33 -0700 Subject: [PATCH 1/3] Add frequency updates in OptimizeCFG::FoldCondBranch() --- src/mapleall/maple_me/src/optimizeCFG.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/mapleall/maple_me/src/optimizeCFG.cpp b/src/mapleall/maple_me/src/optimizeCFG.cpp index 051b59542a..d20f296cda 100644 --- a/src/mapleall/maple_me/src/optimizeCFG.cpp +++ b/src/mapleall/maple_me/src/optimizeCFG.cpp @@ -1570,7 +1570,16 @@ bool OptimizeBB::FoldCondBranch() { stmt1->SetBranchProb(stmt2->GetBranchProb()); succBB->RemoveLastMeStmt(); succBB->SetKind(kBBFallthru); - succBB->RemoveSucc(*succBB->GetSucc(1)); + if (cfg->UpdateCFGFreq()) { + uint64 freqToMove = succBB->GetSuccFreq()[1]; + currBB->SetSuccFreq(0, currBB->GetSuccFreq()[0] - freqToMove); + succBB->SetFrequency(succBB->GetFrequency() - freqToMove); + currBB->SetSuccFreq(1, currBB->GetSuccFreq()[1] + freqToMove); + currBB->GetSucc(1)->SetFrequency(currBB->GetSucc(1)->GetFrequency() + freqToMove); + } + BB *succOfSuccBB = succBB->GetSucc(1); + succBB->RemoveBBFromSucc(*succOfSuccBB); + succOfSuccBB->RemoveBBFromPred(*succBB, true); return true; } return false; @@ -2157,7 +2166,7 @@ bool OptimizeBB::OptimizeUncondBB() { // try to move pred from currBB to newTarget for (size_t i = 0; i < currBB->GetPred().size();) { BB *pred = currBB->GetPred(i); - if (pred == nullptr || pred->GetLastMe() == nullptr) { + if (pred == nullptr || pred->GetLastMe() == nullptr || pred->GetPred().empty()) { ++i; continue; } @@ -2659,11 +2668,8 @@ bool MEOptimizeCFG::PhaseRun(maple::MeFunction &f) { MeSSAUpdate ssaUpdate(f, *f.GetMeSSATab(), *dom, cands); ssaUpdate.Run(); } - if (f.GetCfg()->UpdateCFGFreq()) { - f.GetCfg()->UpdateEdgeFreqWithBBFreq(); - if (f.GetCfg()->DumpIRProfileFile()) { - f.GetCfg()->DumpToFile("after-OptimizeCFG", false, f.GetCfg()->UpdateCFGFreq()); - } + if (f.GetCfg()->DumpIRProfileFile()) { + f.GetCfg()->DumpToFile("after-OptimizeCFG", false, f.GetCfg()->UpdateCFGFreq()); } } return change; -- Gitee From 59b7d66c2f383c3f14f663390b5df9b7adc6f5a3 Mon Sep 17 00:00:00 2001 From: Fred Chow Date: Wed, 7 Sep 2022 23:03:33 -0700 Subject: [PATCH 2/3] Add frequency updates in OptimizeCFG::FoldCondBranch() --- src/mapleall/maple_me/src/optimizeCFG.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/mapleall/maple_me/src/optimizeCFG.cpp b/src/mapleall/maple_me/src/optimizeCFG.cpp index 79b0ba7d01..4e47f5e40f 100644 --- a/src/mapleall/maple_me/src/optimizeCFG.cpp +++ b/src/mapleall/maple_me/src/optimizeCFG.cpp @@ -1570,7 +1570,16 @@ bool OptimizeBB::FoldCondBranch() { stmt1->SetBranchProb(stmt2->GetBranchProb()); succBB->RemoveLastMeStmt(); succBB->SetKind(kBBFallthru); - succBB->RemoveSucc(*succBB->GetSucc(1)); + if (cfg->UpdateCFGFreq()) { + uint64 freqToMove = succBB->GetSuccFreq()[1]; + currBB->SetSuccFreq(0, currBB->GetSuccFreq()[0] - freqToMove); + succBB->SetFrequency(succBB->GetFrequency() - freqToMove); + currBB->SetSuccFreq(1, currBB->GetSuccFreq()[1] + freqToMove); + currBB->GetSucc(1)->SetFrequency(currBB->GetSucc(1)->GetFrequency() + freqToMove); + } + BB *succOfSuccBB = succBB->GetSucc(1); + succBB->RemoveBBFromSucc(*succOfSuccBB); + succOfSuccBB->RemoveBBFromPred(*succBB, true); return true; } return false; @@ -2157,7 +2166,7 @@ bool OptimizeBB::OptimizeUncondBB() { // try to move pred from currBB to newTarget for (size_t i = 0; i < currBB->GetPred().size();) { BB *pred = currBB->GetPred(i); - if (pred == nullptr || pred->GetLastMe() == nullptr) { + if (pred == nullptr || pred->GetLastMe() == nullptr || pred->GetPred().empty()) { ++i; continue; } @@ -2659,11 +2668,8 @@ bool MEOptimizeCFG::PhaseRun(maple::MeFunction &f) { MeSSAUpdate ssaUpdate(f, *f.GetMeSSATab(), *dom, cands); ssaUpdate.Run(); } - if (f.GetCfg()->UpdateCFGFreq()) { - f.GetCfg()->UpdateEdgeFreqWithBBFreq(); - if (f.GetCfg()->DumpIRProfileFile()) { - f.GetCfg()->DumpToFile("after-OptimizeCFG", false, f.GetCfg()->UpdateCFGFreq()); - } + if (f.GetCfg()->DumpIRProfileFile()) { + f.GetCfg()->DumpToFile("after-OptimizeCFG", false, f.GetCfg()->UpdateCFGFreq()); } } return change; -- Gitee From ab69b8e5abc68a69ae2f5ba6df397e67e769bf6b Mon Sep 17 00:00:00 2001 From: Fred Chow Date: Wed, 14 Sep 2022 19:03:12 -0700 Subject: [PATCH 3/3] rebased and added more pgo-related fixes --- src/mapleall/maple_ir/src/mir_nodes.cpp | 1 + src/mapleall/maple_me/src/me_cfg.cpp | 5 ++--- src/mapleall/maple_me/src/optimizeCFG.cpp | 7 ++++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/mapleall/maple_ir/src/mir_nodes.cpp b/src/mapleall/maple_ir/src/mir_nodes.cpp index 7e12b75e3e..cc1a665a4e 100644 --- a/src/mapleall/maple_ir/src/mir_nodes.cpp +++ b/src/mapleall/maple_ir/src/mir_nodes.cpp @@ -335,6 +335,7 @@ BlockNode *BlockNode::CloneTreeWithFreqs(MapleAllocator &allocator, } ASSERT(newStmt != nullptr, "null ptr check"); newStmt->SetSrcPos(stmt.GetSrcPos()); + newStmt->SetMeStmtID(stmt.GetMeStmtID()); newStmt->SetPrev(nullptr); newStmt->SetNext(nullptr); nnode->AddStatement(newStmt); diff --git a/src/mapleall/maple_me/src/me_cfg.cpp b/src/mapleall/maple_me/src/me_cfg.cpp index 533a536123..c7b55558dc 100644 --- a/src/mapleall/maple_me/src/me_cfg.cpp +++ b/src/mapleall/maple_me/src/me_cfg.cpp @@ -2009,11 +2009,10 @@ int MeCFG::VerifyBBFreq(bool checkFatal) { } // check case 1: entry count is zero, internal bb has frequency value > 0 if (entryIsZero && bb->GetFrequency() > 0) { + LogInfo::MapleLogger() << func.GetName() << ": entry freq is 0 but freq of BB " << bb->GetBBId() << " is " << bb->GetFrequency() << std::endl; if (checkFatal) { - LogInfo::MapleLogger() << func.GetName() << "wrong BB " << bb->GetBBId() << std::endl; - CHECK_FATAL(false, "VerifyBBFreq: function entryFreq is zero but internal bb frequency > 0"); + CHECK_FATAL(false, "VerifyBBFreq: verification fails"); } else { - ClearFuncFreqInfo(); return 1; } } diff --git a/src/mapleall/maple_me/src/optimizeCFG.cpp b/src/mapleall/maple_me/src/optimizeCFG.cpp index 4e47f5e40f..0526e05e0c 100644 --- a/src/mapleall/maple_me/src/optimizeCFG.cpp +++ b/src/mapleall/maple_me/src/optimizeCFG.cpp @@ -2110,9 +2110,10 @@ bool OptimizeBB::MergeGotoBBToPred(BB *succ, BB *pred) { } if (cfg->UpdateCFGFreq()) { uint64 succFreq = succ->GetFrequency(); - ASSERT(succFreq >= removedFreq, "sanity check"); - succ->SetFrequency(succFreq - removedFreq); - succ->SetSuccFreq(0, succ->GetFrequency()); + if (succFreq >= removedFreq) { + succ->SetFrequency(succFreq - removedFreq); + succ->SetSuccFreq(0, succ->GetFrequency()); + } } DEBUG_LOG() << "Merge Uncond BB" << LOG_BBID(succ) << " to its pred BB" << LOG_BBID(pred) << ": BB" << LOG_BBID(pred) << "->BB" << LOG_BBID(succ) << "(merged)->BB" << LOG_BBID(newTarget) << "\n"; -- Gitee