diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/ProfileData/InstrProfWriter.cpp | 2 | ||||
| -rw-r--r-- | llvm/test/tools/llvm-profdata/value-prof.proftext | 10 | ||||
| -rw-r--r-- | llvm/unittests/ProfileData/InstrProfTest.cpp | 28 |
3 files changed, 10 insertions, 30 deletions
diff --git a/llvm/lib/ProfileData/InstrProfWriter.cpp b/llvm/lib/ProfileData/InstrProfWriter.cpp index 07667e1221e..f5227248af2 100644 --- a/llvm/lib/ProfileData/InstrProfWriter.cpp +++ b/llvm/lib/ProfileData/InstrProfWriter.cpp @@ -117,6 +117,8 @@ std::error_code InstrProfWriter::addRecord(InstrProfRecord &&I, Result = Dest.merge(I, Weight); } + Dest.sortValueData(); + // We keep track of the max function count as we go for simplicity. // Update this statistic no matter the result of the merge. if (Dest.Counts[0] > MaxFunctionCount) diff --git a/llvm/test/tools/llvm-profdata/value-prof.proftext b/llvm/test/tools/llvm-profdata/value-prof.proftext index ca2b1f82209..a8f6e8641c6 100644 --- a/llvm/test/tools/llvm-profdata/value-prof.proftext +++ b/llvm/test/tools/llvm-profdata/value-prof.proftext @@ -1,4 +1,4 @@ -# RUN: llvm-profdata show -ic-targets -all-functions %s | FileCheck %s --check-prefix=IC +# RUN: llvm-profdata show -ic-targets -all-functions %s | FileCheck %s --check-prefix=ICTXT # RUN: llvm-profdata show -ic-targets -counts -text -all-functions %s | FileCheck %s --check-prefix=ICTEXT # RUN: llvm-profdata merge -o %t.profdata %s # RUN: llvm-profdata show -ic-targets -all-functions %t.profdata | FileCheck %s --check-prefix=IC @@ -45,10 +45,16 @@ foo2:1000 1 foo2:20000 +#ICTXT: Indirect Call Site Count: 3 +#ICTXT-NEXT: Indirect Target Results: +#ICTXT-NEXT: [ 1, foo, 100 ] +#ICTXT-NEXT: [ 1, foo2, 1000 ] +#ICTXT-NEXT: [ 2, foo2, 20000 ] + #IC: Indirect Call Site Count: 3 #IC-NEXT: Indirect Target Results: -#IC-NEXT: [ 1, foo, 100 ] #IC-NEXT: [ 1, foo2, 1000 ] +#IC-NEXT: [ 1, foo, 100 ] #IC-NEXT: [ 2, foo2, 20000 ] #ICTEXT: foo:100 diff --git a/llvm/unittests/ProfileData/InstrProfTest.cpp b/llvm/unittests/ProfileData/InstrProfTest.cpp index a4fadd3d65d..b71712fba7d 100644 --- a/llvm/unittests/ProfileData/InstrProfTest.cpp +++ b/llvm/unittests/ProfileData/InstrProfTest.cpp @@ -159,11 +159,6 @@ TEST_F(InstrProfTest, get_icall_data_read_write) { std::unique_ptr<InstrProfValueData[]> VD = R.get().getValueForSite(IPVK_IndirectCallTarget, 0); - // Now sort the target acording to frequency. - std::sort(&VD[0], &VD[3], - [](const InstrProfValueData &VD1, const InstrProfValueData &VD2) { - return VD1.Count > VD2.Count; - }); ASSERT_EQ(3U, VD[0].Count); ASSERT_EQ(2U, VD[1].Count); @@ -211,11 +206,6 @@ TEST_F(InstrProfTest, get_icall_data_read_write_with_weight) { std::unique_ptr<InstrProfValueData[]> VD = R.get().getValueForSite(IPVK_IndirectCallTarget, 0); - // Now sort the target acording to frequency. - std::sort(&VD[0], &VD[3], - [](const InstrProfValueData &VD1, const InstrProfValueData &VD2) { - return VD1.Count > VD2.Count; - }); ASSERT_EQ(30U, VD[0].Count); ASSERT_EQ(20U, VD[1].Count); ASSERT_EQ(10U, VD[2].Count); @@ -269,11 +259,6 @@ TEST_F(InstrProfTest, get_icall_data_read_write_big_endian) { std::unique_ptr<InstrProfValueData[]> VD = R.get().getValueForSite(IPVK_IndirectCallTarget, 0); - // Now sort the target acording to frequency. - std::sort(&VD[0], &VD[3], - [](const InstrProfValueData &VD1, const InstrProfValueData &VD2) { - return VD1.Count > VD2.Count; - }); ASSERT_EQ(StringRef((const char *)VD[0].Value, 7), StringRef("callee3")); ASSERT_EQ(StringRef((const char *)VD[1].Value, 7), StringRef("callee2")); ASSERT_EQ(StringRef((const char *)VD[2].Value, 7), StringRef("callee1")); @@ -365,11 +350,6 @@ TEST_F(InstrProfTest, get_icall_data_merge1) { std::unique_ptr<InstrProfValueData[]> VD = R.get().getValueForSite(IPVK_IndirectCallTarget, 0); - // Now sort the target acording to frequency. - std::sort(&VD[0], &VD[4], - [](const InstrProfValueData &VD1, const InstrProfValueData &VD2) { - return VD1.Count > VD2.Count; - }); ASSERT_EQ(StringRef((const char *)VD[0].Value, 7), StringRef("callee2")); ASSERT_EQ(7U, VD[0].Count); ASSERT_EQ(StringRef((const char *)VD[1].Value, 7), StringRef("callee3")); @@ -381,10 +361,6 @@ TEST_F(InstrProfTest, get_icall_data_merge1) { std::unique_ptr<InstrProfValueData[]> VD_2( R.get().getValueForSite(IPVK_IndirectCallTarget, 2)); - std::sort(&VD_2[0], &VD_2[4], - [](const InstrProfValueData &VD1, const InstrProfValueData &VD2) { - return VD1.Count > VD2.Count; - }); ASSERT_EQ(StringRef((const char *)VD_2[0].Value, 7), StringRef("callee3")); ASSERT_EQ(6U, VD_2[0].Count); ASSERT_EQ(StringRef((const char *)VD_2[1].Value, 7), StringRef("callee4")); @@ -401,10 +377,6 @@ TEST_F(InstrProfTest, get_icall_data_merge1) { std::unique_ptr<InstrProfValueData[]> VD_4( R.get().getValueForSite(IPVK_IndirectCallTarget, 4)); - std::sort(&VD_4[0], &VD_4[3], - [](const InstrProfValueData &VD1, const InstrProfValueData &VD2) { - return VD1.Count > VD2.Count; - }); ASSERT_EQ(StringRef((const char *)VD_4[0].Value, 7), StringRef("callee3")); ASSERT_EQ(6U, VD_4[0].Count); ASSERT_EQ(StringRef((const char *)VD_4[1].Value, 7), StringRef("callee2")); |

