summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/ProfileData/InstrProfTest.cpp
diff options
context:
space:
mode:
authorXinliang David Li <davidxl@google.com>2016-01-22 05:48:40 +0000
committerXinliang David Li <davidxl@google.com>2016-01-22 05:48:40 +0000
commit876c2024e2aacedc21c78d74eb5ab6854b3e8d38 (patch)
tree15e58c606c124aa4c100bd724fa90b1342407bfc /llvm/unittests/ProfileData/InstrProfTest.cpp
parentb56e5d231f291fa6075d0c6a898d751167e79edf (diff)
downloadbcm5719-llvm-876c2024e2aacedc21c78d74eb5ab6854b3e8d38.tar.gz
bcm5719-llvm-876c2024e2aacedc21c78d74eb5ab6854b3e8d38.zip
[PGO] eliminate use of static variable
llvm-svn: 258486
Diffstat (limited to 'llvm/unittests/ProfileData/InstrProfTest.cpp')
-rw-r--r--llvm/unittests/ProfileData/InstrProfTest.cpp115
1 files changed, 60 insertions, 55 deletions
diff --git a/llvm/unittests/ProfileData/InstrProfTest.cpp b/llvm/unittests/ProfileData/InstrProfTest.cpp
index ef79d51ede5..bb9f1c7a2f7 100644
--- a/llvm/unittests/ProfileData/InstrProfTest.cpp
+++ b/llvm/unittests/ProfileData/InstrProfTest.cpp
@@ -12,6 +12,7 @@
#include "llvm/IR/Module.h"
#include "llvm/ProfileData/InstrProfReader.h"
#include "llvm/ProfileData/InstrProfWriter.h"
+#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Compression.h"
#include "gtest/gtest.h"
@@ -145,6 +146,7 @@ TEST_F(InstrProfTest, get_icall_data_read_write) {
InstrProfValueData VD3[] = {{(uint64_t) "callee1", 1}};
Record1.addValueData(IPVK_IndirectCallTarget, 3, VD3, 1, nullptr);
+ ASSERT_EQ(support::little, InstrProfWriter::getValueProfDataEndianness());
Writer.addRecord(std::move(Record1));
Writer.addRecord(std::move(Record2));
Writer.addRecord(std::move(Record3));
@@ -192,6 +194,7 @@ TEST_F(InstrProfTest, get_icall_data_read_write_with_weight) {
InstrProfValueData VD3[] = {{(uint64_t) "callee1", 1}};
Record1.addValueData(IPVK_IndirectCallTarget, 3, VD3, 1, nullptr);
+ ASSERT_EQ(support::little, InstrProfWriter::getValueProfDataEndianness());
Writer.addRecord(std::move(Record1), 10);
Writer.addRecord(std::move(Record2));
Writer.addRecord(std::move(Record3));
@@ -218,58 +221,6 @@ TEST_F(InstrProfTest, get_icall_data_read_write_with_weight) {
ASSERT_EQ(StringRef((const char *)VD[2].Value, 7), StringRef("callee1"));
}
-TEST_F(InstrProfTest, get_icall_data_read_write_big_endian) {
- InstrProfRecord Record1("caller", 0x1234, {1, 2});
- InstrProfRecord Record2("callee1", 0x1235, {3, 4});
- InstrProfRecord Record3("callee2", 0x1235, {3, 4});
- InstrProfRecord Record4("callee3", 0x1235, {3, 4});
-
- // 4 value sites.
- Record1.reserveSites(IPVK_IndirectCallTarget, 4);
- InstrProfValueData VD0[] = {{(uint64_t) "callee1", 1},
- {(uint64_t) "callee2", 2},
- {(uint64_t) "callee3", 3}};
- Record1.addValueData(IPVK_IndirectCallTarget, 0, VD0, 3, nullptr);
- // No value profile data at the second site.
- Record1.addValueData(IPVK_IndirectCallTarget, 1, nullptr, 0, nullptr);
- InstrProfValueData VD2[] = {{(uint64_t) "callee1", 1},
- {(uint64_t) "callee2", 2}};
- Record1.addValueData(IPVK_IndirectCallTarget, 2, VD2, 2, nullptr);
- InstrProfValueData VD3[] = {{(uint64_t) "callee1", 1}};
- Record1.addValueData(IPVK_IndirectCallTarget, 3, VD3, 1, nullptr);
-
- Writer.addRecord(std::move(Record1));
- Writer.addRecord(std::move(Record2));
- Writer.addRecord(std::move(Record3));
- Writer.addRecord(std::move(Record4));
-
- // Set big endian output.
- Writer.setValueProfDataEndianness(support::big);
-
- auto Profile = Writer.writeBuffer();
- readProfile(std::move(Profile));
-
- // Set big endian input.
- Reader->setValueProfDataEndianness(support::big);
-
- ErrorOr<InstrProfRecord> R = Reader->getInstrProfRecord("caller", 0x1234);
- ASSERT_TRUE(NoError(R.getError()));
- ASSERT_EQ(4U, R.get().getNumValueSites(IPVK_IndirectCallTarget));
- ASSERT_EQ(3U, R.get().getNumValueDataForSite(IPVK_IndirectCallTarget, 0));
- ASSERT_EQ(0U, R.get().getNumValueDataForSite(IPVK_IndirectCallTarget, 1));
- ASSERT_EQ(2U, R.get().getNumValueDataForSite(IPVK_IndirectCallTarget, 2));
- ASSERT_EQ(1U, R.get().getNumValueDataForSite(IPVK_IndirectCallTarget, 3));
-
- std::unique_ptr<InstrProfValueData[]> VD =
- R.get().getValueForSite(IPVK_IndirectCallTarget, 0);
- 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"));
-
- // Restore little endian default:
- Writer.setValueProfDataEndianness(support::little);
-}
-
TEST_F(InstrProfTest, get_icall_data_merge1) {
static const char caller[] = "caller";
static const char callee1[] = "callee1";
@@ -322,11 +273,11 @@ TEST_F(InstrProfTest, get_icall_data_merge1) {
Record12.addValueData(IPVK_IndirectCallTarget, 3, nullptr, 0, nullptr);
- InstrProfValueData VD42[] = {{uint64_t(callee1), 1},
- {uint64_t(callee2), 2},
- {uint64_t(callee3), 3}};
+ InstrProfValueData VD42[] = {
+ {uint64_t(callee1), 1}, {uint64_t(callee2), 2}, {uint64_t(callee3), 3}};
Record12.addValueData(IPVK_IndirectCallTarget, 4, VD42, 3, nullptr);
+ ASSERT_EQ(support::little, InstrProfWriter::getValueProfDataEndianness());
Writer.addRecord(std::move(Record11));
// Merge profile data.
Writer.addRecord(std::move(Record12));
@@ -418,6 +369,7 @@ TEST_F(InstrProfTest, get_icall_data_merge1_saturation) {
auto Result5 = Writer.addRecord(std::move(Record5));
ASSERT_EQ(Result5, instrprof_error::counter_overflow);
+ ASSERT_EQ(support::little, InstrProfWriter::getValueProfDataEndianness());
auto Profile = Writer.writeBuffer();
readProfile(std::move(Profile));
@@ -466,6 +418,7 @@ TEST_F(InstrProfTest, get_icall_data_merge_site_trunc) {
Record12.addValueData(IPVK_IndirectCallTarget, 0, VD1, 255, nullptr);
Record12.addValueData(IPVK_IndirectCallTarget, 1, nullptr, 0, nullptr);
+ ASSERT_EQ(support::little, InstrProfWriter::getValueProfDataEndianness());
Writer.addRecord(std::move(Record11));
// Merge profile data.
Writer.addRecord(std::move(Record12));
@@ -767,4 +720,56 @@ TEST_F(InstrProfTest, instr_prof_symtab_compression_test) {
}
}
+// Keep this the last test case as it sets the VP data endianness
+TEST_F(InstrProfTest, get_icall_data_read_write_big_endian) {
+ InstrProfRecord Record1("caller", 0x1234, {1, 2});
+ InstrProfRecord Record2("callee1", 0x1235, {3, 4});
+ InstrProfRecord Record3("callee2", 0x1235, {3, 4});
+ InstrProfRecord Record4("callee3", 0x1235, {3, 4});
+
+ // 4 value sites.
+ Record1.reserveSites(IPVK_IndirectCallTarget, 4);
+ InstrProfValueData VD0[] = {{(uint64_t) "callee1", 1},
+ {(uint64_t) "callee2", 2},
+ {(uint64_t) "callee3", 3}};
+ Record1.addValueData(IPVK_IndirectCallTarget, 0, VD0, 3, nullptr);
+ // No value profile data at the second site.
+ Record1.addValueData(IPVK_IndirectCallTarget, 1, nullptr, 0, nullptr);
+ InstrProfValueData VD2[] = {{(uint64_t) "callee1", 1},
+ {(uint64_t) "callee2", 2}};
+ Record1.addValueData(IPVK_IndirectCallTarget, 2, VD2, 2, nullptr);
+ InstrProfValueData VD3[] = {{(uint64_t) "callee1", 1}};
+ Record1.addValueData(IPVK_IndirectCallTarget, 3, VD3, 1, nullptr);
+
+ Writer.addRecord(std::move(Record1));
+ Writer.addRecord(std::move(Record2));
+ Writer.addRecord(std::move(Record3));
+ Writer.addRecord(std::move(Record4));
+
+ // Set big endian output.
+ const char *args[] = {"InstrProfTest", "-write-vp-data-in-big"};
+ cl::ParseCommandLineOptions(sizeof(args) / sizeof(const char *), args);
+ ASSERT_EQ(support::big, InstrProfWriter::getValueProfDataEndianness());
+
+ auto Profile = Writer.writeBuffer();
+ readProfile(std::move(Profile));
+
+ // Set big endian input.
+ Reader->setValueProfDataEndianness(support::big);
+
+ ErrorOr<InstrProfRecord> R = Reader->getInstrProfRecord("caller", 0x1234);
+ ASSERT_TRUE(NoError(R.getError()));
+ ASSERT_EQ(4U, R.get().getNumValueSites(IPVK_IndirectCallTarget));
+ ASSERT_EQ(3U, R.get().getNumValueDataForSite(IPVK_IndirectCallTarget, 0));
+ ASSERT_EQ(0U, R.get().getNumValueDataForSite(IPVK_IndirectCallTarget, 1));
+ ASSERT_EQ(2U, R.get().getNumValueDataForSite(IPVK_IndirectCallTarget, 2));
+ ASSERT_EQ(1U, R.get().getNumValueDataForSite(IPVK_IndirectCallTarget, 3));
+
+ std::unique_ptr<InstrProfValueData[]> VD =
+ R.get().getValueForSite(IPVK_IndirectCallTarget, 0);
+ 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"));
+}
+
} // end anonymous namespace
OpenPOWER on IntegriCloud