mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
1c866d4e4f
This is a followup to D103422. The DenseMapInfo implementations for ArrayRef and StringRef are moved into the ArrayRef.h and StringRef.h headers, which means that these two headers no longer need to be included by DenseMapInfo.h. This required adding a few additional includes, as many files were relying on various things pulled in by ArrayRef.h. Differential Revision: https://reviews.llvm.org/D103491
63 lines
2.0 KiB
C++
63 lines
2.0 KiB
C++
//===- 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/ADT/Optional.h"
|
|
#include "llvm/CodeGen/MachineBlockFrequencyInfo.h"
|
|
#include "llvm/CodeGen/MBFIWrapper.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;
|
|
}
|
|
|
|
Optional<uint64_t>
|
|
MBFIWrapper::getBlockProfileCount(const MachineBasicBlock *MBB) const {
|
|
auto I = MergedBBFreq.find(MBB);
|
|
|
|
// Modified block frequency also impacts profile count. So we should compute
|
|
// profile count from new block frequency if it has been changed.
|
|
if (I != MergedBBFreq.end())
|
|
return MBFI.getProfileCountFromFreq(I->second.getFrequency());
|
|
|
|
return MBFI.getBlockProfileCount(MBB);
|
|
}
|
|
|
|
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();
|
|
}
|