[llvm] [ProfileData] Use std::array for ValueProfData (PR #96440)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 23 12:00:12 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-pgo
Author: Kazu Hirata (kazutakahirata)
<details>
<summary>Changes</summary>
This patch uses std::array for ValueProfData. Aside from reducing the
line count and code duplication, the use of std::array here makes it
easier to add a new type of value profiling without touching as many
places.
---
Full diff: https://github.com/llvm/llvm-project/pull/96440.diff
1 Files Affected:
- (modified) llvm/include/llvm/ProfileData/InstrProf.h (+8-25)
``````````diff
diff --git a/llvm/include/llvm/ProfileData/InstrProf.h b/llvm/include/llvm/ProfileData/InstrProf.h
index 9bb1d8cbddc5e..7fa6d44990a14 100644
--- a/llvm/include/llvm/ProfileData/InstrProf.h
+++ b/llvm/include/llvm/ProfileData/InstrProf.h
@@ -935,11 +935,8 @@ struct InstrProfRecord {
}
private:
- struct ValueProfData {
- std::vector<InstrProfValueSiteRecord> IndirectCallSites;
- std::vector<InstrProfValueSiteRecord> MemOPSizes;
- std::vector<InstrProfValueSiteRecord> VTableTargets;
- };
+ using ValueProfData = std::array<std::vector<InstrProfValueSiteRecord>,
+ IPVK_Last - IPVK_First + 1>;
std::unique_ptr<ValueProfData> ValueData;
MutableArrayRef<InstrProfValueSiteRecord>
@@ -956,32 +953,18 @@ struct InstrProfRecord {
getValueSitesForKind(uint32_t ValueKind) const {
if (!ValueData)
return std::nullopt;
- switch (ValueKind) {
- case IPVK_IndirectCallTarget:
- return ValueData->IndirectCallSites;
- case IPVK_MemOPSize:
- return ValueData->MemOPSizes;
- case IPVK_VTableTarget:
- return ValueData->VTableTargets;
- default:
- llvm_unreachable("Unknown value kind!");
- }
+ assert(IPVK_First <= ValueKind && ValueKind <= IPVK_Last &&
+ "Unknown value kind!");
+ return (*ValueData)[ValueKind - IPVK_First];
}
std::vector<InstrProfValueSiteRecord> &
getOrCreateValueSitesForKind(uint32_t ValueKind) {
if (!ValueData)
ValueData = std::make_unique<ValueProfData>();
- switch (ValueKind) {
- case IPVK_IndirectCallTarget:
- return ValueData->IndirectCallSites;
- case IPVK_MemOPSize:
- return ValueData->MemOPSizes;
- case IPVK_VTableTarget:
- return ValueData->VTableTargets;
- default:
- llvm_unreachable("Unknown value kind!");
- }
+ assert(IPVK_First <= ValueKind && ValueKind <= IPVK_Last &&
+ "Unknown value kind!");
+ return (*ValueData)[ValueKind - IPVK_First];
}
// Map indirect call target name hash to name string.
``````````
</details>
https://github.com/llvm/llvm-project/pull/96440
More information about the llvm-commits
mailing list