diff --git a/llvm/lib/CodeGen/MLRegallocEvictAdvisor.cpp b/llvm/lib/CodeGen/MLRegallocEvictAdvisor.cpp --- a/llvm/lib/CodeGen/MLRegallocEvictAdvisor.cpp +++ b/llvm/lib/CodeGen/MLRegallocEvictAdvisor.cpp @@ -98,6 +98,7 @@ void getAnalysisUsage(AnalysisUsage &AU) const override { AU.setPreservesAll(); AU.addRequired(); + AU.addRequired(); AU.addRequired(); MachineFunctionPass::getAnalysisUsage(AU); } @@ -460,6 +461,11 @@ return I->second.get(); } + void logRewardIfNeeded(const MachineFunction &MF, float Reward) override { + if (auto *Log = this->getLogger(MF)) + Log->logFloatFinalReward(Reward); + } + private: std::vector InputFeatures; std::vector TrainingInputFeatures; @@ -1061,12 +1067,12 @@ } bool RegAllocScoring::runOnMachineFunction(MachineFunction &MF) { - if (auto *DevModeAnalysis = dyn_cast( - &getAnalysis())) - if (auto *Log = DevModeAnalysis->getLogger(MF)) - Log->logFloatFinalReward(static_cast( - calculateRegAllocScore(MF, getAnalysis()) - .getScore())); + float Reward = static_cast( + calculateRegAllocScore(MF, getAnalysis()) + .getScore()); + + getAnalysis().logRewardIfNeeded(MF, Reward); + getAnalysis().logRewardIfNeeded(MF, Reward); return false; } diff --git a/llvm/lib/CodeGen/RegAllocEvictionAdvisor.h b/llvm/lib/CodeGen/RegAllocEvictionAdvisor.h --- a/llvm/lib/CodeGen/RegAllocEvictionAdvisor.h +++ b/llvm/lib/CodeGen/RegAllocEvictionAdvisor.h @@ -177,6 +177,7 @@ virtual std::unique_ptr getAdvisor(const MachineFunction &MF, const RAGreedy &RA) = 0; AdvisorMode getAdvisorMode() const { return Mode; } + virtual void logRewardIfNeeded(const MachineFunction &MF, float Reward){}; protected: // This analysis preserves everything, and subclasses may have additional diff --git a/llvm/lib/CodeGen/RegAllocPriorityAdvisor.h b/llvm/lib/CodeGen/RegAllocPriorityAdvisor.h --- a/llvm/lib/CodeGen/RegAllocPriorityAdvisor.h +++ b/llvm/lib/CodeGen/RegAllocPriorityAdvisor.h @@ -68,6 +68,7 @@ virtual std::unique_ptr getAdvisor(const MachineFunction &MF, const RAGreedy &RA) = 0; AdvisorMode getAdvisorMode() const { return Mode; } + virtual void logRewardIfNeeded(const MachineFunction &MF, float Reward){}; protected: // This analysis preserves everything, and subclasses may have additional