1 //===------ PGOOptions.cpp -- PGO option tunables --------------*- C++ -*--===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "llvm/Support/PGOOptions.h"
10 #include "llvm/Support/VirtualFileSystem.h"
14 PGOOptions::PGOOptions(std::string ProfileFile
, std::string CSProfileGenFile
,
15 std::string ProfileRemappingFile
,
16 std::string MemoryProfile
,
17 IntrusiveRefCntPtr
<vfs::FileSystem
> FS
, PGOAction Action
,
18 CSPGOAction CSAction
, bool DebugInfoForProfiling
,
19 bool PseudoProbeForProfiling
, bool AtomicCounterUpdate
)
20 : ProfileFile(ProfileFile
), CSProfileGenFile(CSProfileGenFile
),
21 ProfileRemappingFile(ProfileRemappingFile
), MemoryProfile(MemoryProfile
),
22 Action(Action
), CSAction(CSAction
),
23 DebugInfoForProfiling(DebugInfoForProfiling
||
24 (Action
== SampleUse
&& !PseudoProbeForProfiling
)),
25 PseudoProbeForProfiling(PseudoProbeForProfiling
),
26 AtomicCounterUpdate(AtomicCounterUpdate
), FS(std::move(FS
)) {
27 // Note, we do allow ProfileFile.empty() for Action=IRUse LTO can
28 // callback with IRUse action without ProfileFile.
30 // If there is a CSAction, PGOAction cannot be IRInstr or SampleUse.
31 assert(this->CSAction
== NoCSAction
||
32 (this->Action
!= IRInstr
&& this->Action
!= SampleUse
));
34 // For CSIRInstr, CSProfileGenFile also needs to be nonempty.
35 assert(this->CSAction
!= CSIRInstr
|| !this->CSProfileGenFile
.empty());
37 // If CSAction is CSIRUse, PGOAction needs to be IRUse as they share
39 assert(this->CSAction
!= CSIRUse
|| this->Action
== IRUse
);
41 // Cannot optimize with MemProf profile during IR instrumentation.
42 assert(this->MemoryProfile
.empty() || this->Action
!= PGOOptions::IRInstr
);
44 // If neither Action nor CSAction nor MemoryProfile are set,
45 // DebugInfoForProfiling or PseudoProbeForProfiling needs to be true.
46 assert(this->Action
!= NoAction
|| this->CSAction
!= NoCSAction
||
47 !this->MemoryProfile
.empty() || this->DebugInfoForProfiling
||
48 this->PseudoProbeForProfiling
);
50 // If we need to use the profile, the VFS cannot be nullptr.
51 assert(this->FS
|| !(this->Action
== IRUse
|| this->CSAction
== CSIRUse
||
52 !this->MemoryProfile
.empty()));
55 PGOOptions::PGOOptions(const PGOOptions
&) = default;
57 PGOOptions
&PGOOptions::operator=(const PGOOptions
&O
) = default;
59 PGOOptions::~PGOOptions() = default;