mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-03 05:56:07 +00:00
59 lines
2.2 KiB
C++
59 lines
2.2 KiB
C++
//===- MachineSizeOpts.cpp - code size optimization related code ----------===//
|
|
//
|
|
// 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 file contains some shared machine IR code size optimization related
|
|
// code.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/CodeGen/MachineSizeOpts.h"
|
|
#include "llvm/CodeGen/MBFIWrapper.h"
|
|
#include "llvm/Analysis/ProfileSummaryInfo.h"
|
|
#include "llvm/CodeGen/MachineBlockFrequencyInfo.h"
|
|
|
|
using namespace llvm;
|
|
|
|
extern cl::opt<bool> EnablePGSO;
|
|
extern cl::opt<bool> PGSOLargeWorkingSetSizeOnly;
|
|
extern cl::opt<bool> ForcePGSO;
|
|
extern cl::opt<int> PgsoCutoffInstrProf;
|
|
extern cl::opt<int> PgsoCutoffSampleProf;
|
|
|
|
bool llvm::shouldOptimizeForSize(const MachineFunction *MF,
|
|
ProfileSummaryInfo *PSI,
|
|
const MachineBlockFrequencyInfo *MBFI,
|
|
PGSOQueryType QueryType) {
|
|
if (MF->getFunction().hasOptSize())
|
|
return true;
|
|
return shouldFuncOptimizeForSizeImpl(MF, PSI, MBFI, QueryType);
|
|
}
|
|
|
|
bool llvm::shouldOptimizeForSize(const MachineBasicBlock *MBB,
|
|
ProfileSummaryInfo *PSI,
|
|
const MachineBlockFrequencyInfo *MBFI,
|
|
PGSOQueryType QueryType) {
|
|
assert(MBB);
|
|
if (MBB->getParent()->getFunction().hasOptSize())
|
|
return true;
|
|
return shouldOptimizeForSizeImpl(MBB, PSI, MBFI, QueryType);
|
|
}
|
|
|
|
bool llvm::shouldOptimizeForSize(const MachineBasicBlock *MBB,
|
|
ProfileSummaryInfo *PSI,
|
|
MBFIWrapper *MBFIW,
|
|
PGSOQueryType QueryType) {
|
|
assert(MBB);
|
|
if (MBB->getParent()->getFunction().hasOptSize())
|
|
return true;
|
|
if (!MBFIW)
|
|
return false;
|
|
BlockFrequency BlockFreq = MBFIW->getBlockFreq(MBB);
|
|
return shouldOptimizeForSizeImpl(BlockFreq, PSI, &MBFIW->getMBFI(),
|
|
QueryType);
|
|
}
|