void getAnalysisUsage(AnalysisUsage &AU) const override {
AU.setPreservesAll();
AU.addRequired<RegAllocEvictionAdvisorAnalysis>();
+ AU.addRequired<RegAllocPriorityAdvisorAnalysis>();
AU.addRequired<MachineBlockFrequencyInfo>();
MachineFunctionPass::getAnalysisUsage(AU);
}
return I->second.get();
}
+ void logRewardIfNeeded(const MachineFunction &MF, float Reward) override {
+ if (auto *Log = this->getLogger(MF))
+ Log->logFloatFinalReward(Reward);
+ }
+
private:
std::vector<TensorSpec> InputFeatures;
std::vector<TensorSpec> TrainingInputFeatures;
}
bool RegAllocScoring::runOnMachineFunction(MachineFunction &MF) {
- if (auto *DevModeAnalysis = dyn_cast<DevelopmentModeEvictionAdvisorAnalysis>(
- &getAnalysis<RegAllocEvictionAdvisorAnalysis>()))
- if (auto *Log = DevModeAnalysis->getLogger(MF))
- Log->logFloatFinalReward(static_cast<float>(
- calculateRegAllocScore(MF, getAnalysis<MachineBlockFrequencyInfo>())
- .getScore()));
+ float Reward = static_cast<float>(
+ calculateRegAllocScore(MF, getAnalysis<MachineBlockFrequencyInfo>())
+ .getScore());
+
+ getAnalysis<RegAllocEvictionAdvisorAnalysis>().logRewardIfNeeded(MF, Reward);
+ getAnalysis<RegAllocPriorityAdvisorAnalysis>().logRewardIfNeeded(MF, Reward);
return false;
}
virtual std::unique_ptr<RegAllocEvictionAdvisor>
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
virtual std::unique_ptr<RegAllocPriorityAdvisor>
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