From 2c03c899d505e264b26ca20237ea455d85e51bed Mon Sep 17 00:00:00 2001 From: Hiroshi Yamauchi Date: Mon, 27 Jan 2020 10:05:54 -0800 Subject: [PATCH] [MBFI] Move BranchFolding::MBFIWrapper to its own files. NFC. Summary: To avoid header file circular dependency issues in passing updated MBFI (in MBFIWrapper) to the interface of profile guided size optimizations. A prep step for (and split off of) D73381. Reviewers: davidxl Subscribers: mgorny, hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D73494 --- llvm/include/llvm/CodeGen/MBFIWrapper.h | 46 ++++++++++++++++++++++++++++ llvm/lib/CodeGen/BranchFolding.cpp | 40 ++---------------------- llvm/lib/CodeGen/BranchFolding.h | 25 +-------------- llvm/lib/CodeGen/CMakeLists.txt | 1 + llvm/lib/CodeGen/IfConversion.cpp | 2 +- llvm/lib/CodeGen/MBFIWrapper.cpp | 49 ++++++++++++++++++++++++++++++ llvm/lib/CodeGen/MachineBlockPlacement.cpp | 4 +-- 7 files changed, 102 insertions(+), 65 deletions(-) create mode 100644 llvm/include/llvm/CodeGen/MBFIWrapper.h create mode 100644 llvm/lib/CodeGen/MBFIWrapper.cpp diff --git a/llvm/include/llvm/CodeGen/MBFIWrapper.h b/llvm/include/llvm/CodeGen/MBFIWrapper.h new file mode 100644 index 0000000..062431a --- /dev/null +++ b/llvm/include/llvm/CodeGen/MBFIWrapper.h @@ -0,0 +1,46 @@ +//===- llvm/CodeGen/MBFIWrapper.h -------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This class keeps track of branch frequencies of newly created blocks and +// tail-merged blocks. Used by the TailDuplication and MachineBlockPlacement. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CODEGEN_MBFIWRAPPER_H +#define LLVM_CODEGEN_MBFIWRAPPER_H + +#include "llvm/ADT/DenseMap.h" +#include "llvm/Support/BlockFrequency.h" + +namespace llvm { + +class MachineBasicBlock; +class MachineBlockFrequencyInfo; + +class MBFIWrapper { + public: + MBFIWrapper(const MachineBlockFrequencyInfo &I) : MBFI(I) {} + + BlockFrequency getBlockFreq(const MachineBasicBlock *MBB) const; + void setBlockFreq(const MachineBasicBlock *MBB, BlockFrequency F); + raw_ostream &printBlockFreq(raw_ostream &OS, + const MachineBasicBlock *MBB) const; + raw_ostream &printBlockFreq(raw_ostream &OS, + const BlockFrequency Freq) const; + void view(const Twine &Name, bool isSimple = true); + uint64_t getEntryFreq() const; + const MachineBlockFrequencyInfo &getMBFI() { return MBFI; } + + private: + const MachineBlockFrequencyInfo &MBFI; + DenseMap MergedBBFreq; +}; + +} // end namespace llvm + +#endif // LLVM_CODEGEN_MBFIWRAPPER_H diff --git a/llvm/lib/CodeGen/BranchFolding.cpp b/llvm/lib/CodeGen/BranchFolding.cpp index a38c4f3..eb4e076 100644 --- a/llvm/lib/CodeGen/BranchFolding.cpp +++ b/llvm/lib/CodeGen/BranchFolding.cpp @@ -129,7 +129,7 @@ bool BranchFolderPass::runOnMachineFunction(MachineFunction &MF) { // HW that requires structurized CFG. bool EnableTailMerge = !MF.getTarget().requiresStructuredCFG() && PassConfig->getEnableTailMerge(); - BranchFolder::MBFIWrapper MBBFreqInfo( + MBFIWrapper MBBFreqInfo( getAnalysis()); BranchFolder Folder(EnableTailMerge, /*CommonHoist=*/true, MBBFreqInfo, getAnalysis(), @@ -501,42 +501,6 @@ BranchFolder::MergePotentialsElt::operator<(const MergePotentialsElt &o) const { #endif } -BlockFrequency -BranchFolder::MBFIWrapper::getBlockFreq(const MachineBasicBlock *MBB) const { - auto I = MergedBBFreq.find(MBB); - - if (I != MergedBBFreq.end()) - return I->second; - - return MBFI.getBlockFreq(MBB); -} - -void BranchFolder::MBFIWrapper::setBlockFreq(const MachineBasicBlock *MBB, - BlockFrequency F) { - MergedBBFreq[MBB] = F; -} - -raw_ostream & -BranchFolder::MBFIWrapper::printBlockFreq(raw_ostream &OS, - const MachineBasicBlock *MBB) const { - return MBFI.printBlockFreq(OS, getBlockFreq(MBB)); -} - -raw_ostream & -BranchFolder::MBFIWrapper::printBlockFreq(raw_ostream &OS, - const BlockFrequency Freq) const { - return MBFI.printBlockFreq(OS, Freq); -} - -void BranchFolder::MBFIWrapper::view(const Twine &Name, bool isSimple) { - MBFI.view(Name, isSimple); -} - -uint64_t -BranchFolder::MBFIWrapper::getEntryFreq() const { - return MBFI.getEntryFreq(); -} - /// CountTerminators - Count the number of terminators in the given /// block and set I to the position of the first non-terminator, if there /// is one, or MBB->end() otherwise. @@ -591,7 +555,7 @@ ProfitableToMerge(MachineBasicBlock *MBB1, MachineBasicBlock *MBB2, MachineBasicBlock *PredBB, DenseMap &EHScopeMembership, bool AfterPlacement, - BranchFolder::MBFIWrapper &MBBFreqInfo, + MBFIWrapper &MBBFreqInfo, ProfileSummaryInfo *PSI) { // It is never profitable to tail-merge blocks from two different EH scopes. if (!EHScopeMembership.empty()) { diff --git a/llvm/lib/CodeGen/BranchFolding.h b/llvm/lib/CodeGen/BranchFolding.h index 7a4c68e..d743949 100644 --- a/llvm/lib/CodeGen/BranchFolding.h +++ b/llvm/lib/CodeGen/BranchFolding.h @@ -13,6 +13,7 @@ #include "llvm/ADT/SmallPtrSet.h" #include "llvm/CodeGen/LivePhysRegs.h" #include "llvm/CodeGen/MachineBasicBlock.h" +#include "llvm/CodeGen/MBFIWrapper.h" #include "llvm/Support/BlockFrequency.h" #include "llvm/Support/Compiler.h" #include @@ -34,8 +35,6 @@ class TargetRegisterInfo; class LLVM_LIBRARY_VISIBILITY BranchFolder { public: - class MBFIWrapper; - explicit BranchFolder(bool defaultEnableTailMerge, bool CommonHoist, MBFIWrapper &FreqInfo, @@ -132,28 +131,6 @@ class TargetRegisterInfo; MachineLoopInfo *MLI; LivePhysRegs LiveRegs; - public: - /// This class keeps track of branch frequencies of newly created - /// blocks and tail-merged blocks. - class MBFIWrapper { - public: - MBFIWrapper(const MachineBlockFrequencyInfo &I) : MBFI(I) {} - - BlockFrequency getBlockFreq(const MachineBasicBlock *MBB) const; - void setBlockFreq(const MachineBasicBlock *MBB, BlockFrequency F); - raw_ostream &printBlockFreq(raw_ostream &OS, - const MachineBasicBlock *MBB) const; - raw_ostream &printBlockFreq(raw_ostream &OS, - const BlockFrequency Freq) const; - void view(const Twine &Name, bool isSimple = true); - uint64_t getEntryFreq() const; - const MachineBlockFrequencyInfo &getMBFI() { return MBFI; } - - private: - const MachineBlockFrequencyInfo &MBFI; - DenseMap MergedBBFreq; - }; - private: MBFIWrapper &MBBFreqInfo; const MachineBranchProbabilityInfo &MBPI; diff --git a/llvm/lib/CodeGen/CMakeLists.txt b/llvm/lib/CodeGen/CMakeLists.txt index 470b027..0a299da 100644 --- a/llvm/lib/CodeGen/CMakeLists.txt +++ b/llvm/lib/CodeGen/CMakeLists.txt @@ -99,6 +99,7 @@ add_llvm_component_library(LLVMCodeGen MachineVerifier.cpp ModuloSchedule.cpp PatchableFunction.cpp + MBFIWrapper.cpp MIRPrinter.cpp MIRPrintingPass.cpp MacroFusion.cpp diff --git a/llvm/lib/CodeGen/IfConversion.cpp b/llvm/lib/CodeGen/IfConversion.cpp index 7d64828..1a42092 100644 --- a/llvm/lib/CodeGen/IfConversion.cpp +++ b/llvm/lib/CodeGen/IfConversion.cpp @@ -447,7 +447,7 @@ bool IfConverter::runOnMachineFunction(MachineFunction &MF) { TLI = ST.getTargetLowering(); TII = ST.getInstrInfo(); TRI = ST.getRegisterInfo(); - BranchFolder::MBFIWrapper MBFI(getAnalysis()); + MBFIWrapper MBFI(getAnalysis()); MBPI = &getAnalysis(); ProfileSummaryInfo *PSI = &getAnalysis().getPSI(); diff --git a/llvm/lib/CodeGen/MBFIWrapper.cpp b/llvm/lib/CodeGen/MBFIWrapper.cpp new file mode 100644 index 0000000..5110f75 --- /dev/null +++ b/llvm/lib/CodeGen/MBFIWrapper.cpp @@ -0,0 +1,49 @@ +//===- MBFIWrapper.cpp - MachineBlockFrequencyInfo wrapper ----------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This class keeps track of branch frequencies of newly created blocks and +// tail-merged blocks. Used by the TailDuplication and MachineBlockPlacement. +// +//===----------------------------------------------------------------------===// + +#include "llvm/CodeGen/MBFIWrapper.h" +#include "llvm/CodeGen/MachineBlockFrequencyInfo.h" + +using namespace llvm; + +BlockFrequency MBFIWrapper::getBlockFreq(const MachineBasicBlock *MBB) const { + auto I = MergedBBFreq.find(MBB); + + if (I != MergedBBFreq.end()) + return I->second; + + return MBFI.getBlockFreq(MBB); +} + +void MBFIWrapper::setBlockFreq(const MachineBasicBlock *MBB, + BlockFrequency F) { + MergedBBFreq[MBB] = F; +} + +raw_ostream & MBFIWrapper::printBlockFreq(raw_ostream &OS, + const MachineBasicBlock *MBB) const { + return MBFI.printBlockFreq(OS, getBlockFreq(MBB)); +} + +raw_ostream & MBFIWrapper::printBlockFreq(raw_ostream &OS, + const BlockFrequency Freq) const { + return MBFI.printBlockFreq(OS, Freq); +} + +void MBFIWrapper::view(const Twine &Name, bool isSimple) { + MBFI.view(Name, isSimple); +} + +uint64_t MBFIWrapper::getEntryFreq() const { + return MBFI.getEntryFreq(); +} diff --git a/llvm/lib/CodeGen/MachineBlockPlacement.cpp b/llvm/lib/CodeGen/MachineBlockPlacement.cpp index fc52bdb..9dfa8d7 100644 --- a/llvm/lib/CodeGen/MachineBlockPlacement.cpp +++ b/llvm/lib/CodeGen/MachineBlockPlacement.cpp @@ -346,7 +346,7 @@ class MachineBlockPlacement : public MachineFunctionPass { const MachineBranchProbabilityInfo *MBPI; /// A handle to the function-wide block frequency pass. - std::unique_ptr MBFI; + std::unique_ptr MBFI; /// A handle to the loop info. MachineLoopInfo *MLI; @@ -3046,7 +3046,7 @@ bool MachineBlockPlacement::runOnMachineFunction(MachineFunction &MF) { F = &MF; MBPI = &getAnalysis(); - MBFI = std::make_unique( + MBFI = std::make_unique( getAnalysis()); MLI = &getAnalysis(); TII = MF.getSubtarget().getInstrInfo(); -- 2.7.4