mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-04-15 12:50:38 +00:00

Make the access to profile data going through virtual file system so the inputs can be remapped. In the context of the caching, it can make sure we capture the inputs and provided an immutable input as profile data. Reviewed By: akyrtzi, benlangmuir Differential Revision: https://reviews.llvm.org/D139052
53 lines
2.3 KiB
C++
53 lines
2.3 KiB
C++
//===------ PGOOptions.cpp -- PGO option tunables --------------*- 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Support/PGOOptions.h"
|
|
#include "llvm/Support/VirtualFileSystem.h"
|
|
|
|
using namespace llvm;
|
|
|
|
PGOOptions::PGOOptions(std::string ProfileFile, std::string CSProfileGenFile,
|
|
std::string ProfileRemappingFile,
|
|
IntrusiveRefCntPtr<vfs::FileSystem> FS, PGOAction Action,
|
|
CSPGOAction CSAction, bool DebugInfoForProfiling,
|
|
bool PseudoProbeForProfiling)
|
|
: ProfileFile(ProfileFile), CSProfileGenFile(CSProfileGenFile),
|
|
ProfileRemappingFile(ProfileRemappingFile), Action(Action),
|
|
CSAction(CSAction),
|
|
DebugInfoForProfiling(DebugInfoForProfiling ||
|
|
(Action == SampleUse && !PseudoProbeForProfiling)),
|
|
PseudoProbeForProfiling(PseudoProbeForProfiling), FS(std::move(FS)) {
|
|
// Note, we do allow ProfileFile.empty() for Action=IRUse LTO can
|
|
// callback with IRUse action without ProfileFile.
|
|
|
|
// If there is a CSAction, PGOAction cannot be IRInstr or SampleUse.
|
|
assert(this->CSAction == NoCSAction ||
|
|
(this->Action != IRInstr && this->Action != SampleUse));
|
|
|
|
// For CSIRInstr, CSProfileGenFile also needs to be nonempty.
|
|
assert(this->CSAction != CSIRInstr || !this->CSProfileGenFile.empty());
|
|
|
|
// If CSAction is CSIRUse, PGOAction needs to be IRUse as they share
|
|
// a profile.
|
|
assert(this->CSAction != CSIRUse || this->Action == IRUse);
|
|
|
|
// If neither Action nor CSAction, DebugInfoForProfiling or
|
|
// PseudoProbeForProfiling needs to be true.
|
|
assert(this->Action != NoAction || this->CSAction != NoCSAction ||
|
|
this->DebugInfoForProfiling || this->PseudoProbeForProfiling);
|
|
|
|
// If we need to use the profile, the VFS cannot be nullptr.
|
|
assert(this->FS || !(this->Action == IRUse || this->CSAction == CSIRUse));
|
|
}
|
|
|
|
PGOOptions::PGOOptions(const PGOOptions &) = default;
|
|
|
|
PGOOptions &PGOOptions::operator=(const PGOOptions &O) = default;
|
|
|
|
PGOOptions::~PGOOptions() = default;
|