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 YamauchiBlockFrequency 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 Yamauchivoid 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 WeiMBFIWrapper::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 Yamauchivoid MBFIWrapper::view(const Twine &Name, bool isSimple) { 472c03c899SHiroshi Yamauchi MBFI.view(Name, isSimple); 482c03c899SHiroshi Yamauchi } 492c03c899SHiroshi Yamauchi getEntryFreq() const50*5181156bSMatthias BraunBlockFrequency MBFIWrapper::getEntryFreq() const { return MBFI.getEntryFreq(); } 51