llvm-capstone/llvm/lib/Support/PGOOptions.cpp
Steven Wu 516e301752 [NFC][Profile] Access profile through VirtualFileSystem
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
2023-02-01 09:25:02 -08:00

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;