xref: /llvm-project/llvm/lib/CodeGen/MBFIWrapper.cpp (revision 2e26d091060e87629f23163433b5e2fd450b54bf)
12c03c899SHiroshi Yamauchi //===- MBFIWrapper.cpp - MachineBlockFrequencyInfo wrapper ----------------===//
22c03c899SHiroshi Yamauchi //
32c03c899SHiroshi Yamauchi // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42c03c899SHiroshi Yamauchi // See https://llvm.org/LICENSE.txt for license information.
52c03c899SHiroshi Yamauchi // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
62c03c899SHiroshi Yamauchi //
72c03c899SHiroshi Yamauchi //===----------------------------------------------------------------------===//
82c03c899SHiroshi Yamauchi //
92c03c899SHiroshi Yamauchi // This class keeps track of branch frequencies of newly created blocks and
102c03c899SHiroshi Yamauchi // tail-merged blocks. Used by the TailDuplication and MachineBlockPlacement.
112c03c899SHiroshi Yamauchi //
122c03c899SHiroshi Yamauchi //===----------------------------------------------------------------------===//
132c03c899SHiroshi Yamauchi 
142c03c899SHiroshi Yamauchi #include "llvm/CodeGen/MachineBlockFrequencyInfo.h"
15983565a6SNikita Popov #include "llvm/CodeGen/MBFIWrapper.h"
16c589730aSKrzysztof Parzyszek #include <optional>
172c03c899SHiroshi Yamauchi 
182c03c899SHiroshi Yamauchi using namespace llvm;
192c03c899SHiroshi Yamauchi 
getBlockFreq(const MachineBasicBlock * MBB) const202c03c899SHiroshi Yamauchi BlockFrequency MBFIWrapper::getBlockFreq(const MachineBasicBlock *MBB) const {
212c03c899SHiroshi Yamauchi   auto I = MergedBBFreq.find(MBB);
222c03c899SHiroshi Yamauchi 
232c03c899SHiroshi Yamauchi   if (I != MergedBBFreq.end())
242c03c899SHiroshi Yamauchi     return I->second;
252c03c899SHiroshi Yamauchi 
262c03c899SHiroshi Yamauchi   return MBFI.getBlockFreq(MBB);
272c03c899SHiroshi Yamauchi }
282c03c899SHiroshi Yamauchi 
setBlockFreq(const MachineBasicBlock * MBB,BlockFrequency F)292c03c899SHiroshi Yamauchi void MBFIWrapper::setBlockFreq(const MachineBasicBlock *MBB,
302c03c899SHiroshi Yamauchi                                BlockFrequency F) {
312c03c899SHiroshi Yamauchi   MergedBBFreq[MBB] = F;
322c03c899SHiroshi Yamauchi }
332c03c899SHiroshi Yamauchi 
34c589730aSKrzysztof Parzyszek std::optional<uint64_t>
getBlockProfileCount(const MachineBasicBlock * MBB) const35fd75ad86SGuozhi Wei MBFIWrapper::getBlockProfileCount(const MachineBasicBlock *MBB) const {
36fd75ad86SGuozhi Wei   auto I = MergedBBFreq.find(MBB);
37fd75ad86SGuozhi Wei 
38fd75ad86SGuozhi Wei   // Modified block frequency also impacts profile count. So we should compute
39fd75ad86SGuozhi Wei   // profile count from new block frequency if it has been changed.
40fd75ad86SGuozhi Wei   if (I != MergedBBFreq.end())
41*5181156bSMatthias Braun     return MBFI.getProfileCountFromFreq(I->second);
42fd75ad86SGuozhi Wei 
43fd75ad86SGuozhi Wei   return MBFI.getBlockProfileCount(MBB);
44fd75ad86SGuozhi Wei }
45fd75ad86SGuozhi Wei 
view(const Twine & Name,bool isSimple)462c03c899SHiroshi Yamauchi void MBFIWrapper::view(const Twine &Name, bool isSimple) {
472c03c899SHiroshi Yamauchi   MBFI.view(Name, isSimple);
482c03c899SHiroshi Yamauchi }
492c03c899SHiroshi Yamauchi 
getEntryFreq() const50*5181156bSMatthias Braun BlockFrequency MBFIWrapper::getEntryFreq() const { return MBFI.getEntryFreq(); }
51