[PATCH] D17108: [PGO] Add another interface for annotateValueSite
Rong Xu via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 12 13:40:46 PST 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL260741: [PGO] Add another interface for annotateValueSite (authored by xur).
Changed prior to commit:
http://reviews.llvm.org/D17108?vs=47552&id=47851#toc
Repository:
rL LLVM
http://reviews.llvm.org/D17108
Files:
llvm/trunk/include/llvm/ProfileData/InstrProf.h
llvm/trunk/lib/ProfileData/InstrProf.cpp
llvm/trunk/unittests/ProfileData/InstrProfTest.cpp
Index: llvm/trunk/lib/ProfileData/InstrProf.cpp
===================================================================
--- llvm/trunk/lib/ProfileData/InstrProf.cpp
+++ llvm/trunk/lib/ProfileData/InstrProf.cpp
@@ -599,6 +599,13 @@
std::unique_ptr<InstrProfValueData[]> VD =
InstrProfR.getValueForSite(ValueKind, SiteIdx, &Sum);
+ annotateValueSite(M, Inst, VD.get(), NV, Sum, ValueKind, MaxMDCount);
+}
+
+void annotateValueSite(Module &M, Instruction &Inst,
+ const InstrProfValueData VD[], uint32_t NV,
+ uint64_t Sum, InstrProfValueKind ValueKind,
+ uint32_t MaxMDCount) {
LLVMContext &Ctx = M.getContext();
MDBuilder MDHelper(Ctx);
SmallVector<Metadata *, 3> Vals;
Index: llvm/trunk/unittests/ProfileData/InstrProfTest.cpp
===================================================================
--- llvm/trunk/unittests/ProfileData/InstrProfTest.cpp
+++ llvm/trunk/unittests/ProfileData/InstrProfTest.cpp
@@ -299,6 +299,26 @@
ASSERT_EQ(3U, ValueData[3].Count);
ASSERT_EQ(2000U, ValueData[4].Value);
ASSERT_EQ(2U, ValueData[4].Count);
+
+ // Remove the MD_prof metadata
+ Inst->setMetadata(LLVMContext::MD_prof, 0);
+ // Annotate with 4 records.
+ InstrProfValueData VD0Sorted[] = {{1000, 6}, {2000, 5}, {3000, 4}, {4000, 3},
+ {5000, 2}, {6000, 1}};
+ annotateValueSite(*M, *Inst, &VD0Sorted[2], 4, 10, IPVK_IndirectCallTarget, 5);
+ Res = getValueProfDataFromInst(*Inst, IPVK_IndirectCallTarget, 5,
+ ValueData, N, T);
+ ASSERT_TRUE(Res);
+ ASSERT_EQ(4U, N);
+ ASSERT_EQ(10U, T);
+ ASSERT_EQ(3000U, ValueData[0].Value);
+ ASSERT_EQ(4U, ValueData[0].Count);
+ ASSERT_EQ(4000U, ValueData[1].Value);
+ ASSERT_EQ(3U, ValueData[1].Count);
+ ASSERT_EQ(5000U, ValueData[2].Value);
+ ASSERT_EQ(2U, ValueData[2].Count);
+ ASSERT_EQ(6000U, ValueData[3].Value);
+ ASSERT_EQ(1U, ValueData[3].Count);
}
TEST_P(MaybeSparseInstrProfTest, get_icall_data_read_write_with_weight) {
Index: llvm/trunk/include/llvm/ProfileData/InstrProf.h
===================================================================
--- llvm/trunk/include/llvm/ProfileData/InstrProf.h
+++ llvm/trunk/include/llvm/ProfileData/InstrProf.h
@@ -219,6 +219,13 @@
const InstrProfRecord &InstrProfR,
InstrProfValueKind ValueKind, uint32_t SiteIndx,
uint32_t MaxMDCount = 3);
+/// Same as the above interface but using the ValueData array directly, as
+/// well as \p Sum.
+void annotateValueSite(Module &M, Instruction &Inst,
+ const InstrProfValueData VD[], uint32_t NV,
+ uint64_t Sum, InstrProfValueKind ValueKind,
+ uint32_t MaxMDCount);
+
/// Extract the value profile data from \p Inst which is annotated with
/// value profile meta data. Return false if there is no value data annotated,
/// otherwise return true.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D17108.47851.patch
Type: text/x-patch
Size: 2993 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160212/90feecbe/attachment.bin>
More information about the llvm-commits
mailing list