From b16d21adf263b8bef7f455e8c2454754431f893c Mon Sep 17 00:00:00 2001 From: Justin Bogner Date: Fri, 1 Aug 2014 22:50:16 +0000 Subject: [PATCH] InstrProf: Update for LLVM API change We've added support for a multiple functions with the same name in LLVM's profile data, so the lookup returning the function hash it found doesn't make sense anymore. Update to pass in the hash we expect. This also adds a test that the version 1 format is still readable, since the new API is expected to handle that. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@214586 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CodeGenPGO.cpp | 16 +++++++++------- test/Profile/Inputs/c-general.profdata.v1 | Bin 0 -> 2000 bytes test/Profile/c-general.c | 3 +++ 3 files changed, 12 insertions(+), 7 deletions(-) create mode 100644 test/Profile/Inputs/c-general.profdata.v1 diff --git a/lib/CodeGen/CodeGenPGO.cpp b/lib/CodeGen/CodeGenPGO.cpp index b233e3c7d7..4def789132 100644 --- a/lib/CodeGen/CodeGenPGO.cpp +++ b/lib/CodeGen/CodeGenPGO.cpp @@ -917,13 +917,15 @@ void CodeGenPGO::loadRegionCounts(llvm::IndexedInstrProfReader *PGOReader, bool IsInMainFile) { CGM.getPGOStats().addVisited(IsInMainFile); RegionCounts.reset(new std::vector); - uint64_t Hash; - if (PGOReader->getFunctionCounts(getFuncName(), Hash, *RegionCounts)) { - CGM.getPGOStats().addMissing(IsInMainFile); - RegionCounts.reset(); - } else if (Hash != FunctionHash || - RegionCounts->size() != NumRegionCounters) { - CGM.getPGOStats().addMismatched(IsInMainFile); + if (std::error_code EC = PGOReader->getFunctionCounts( + getFuncName(), FunctionHash, *RegionCounts)) { + if (EC == llvm::instrprof_error::unknown_function) + CGM.getPGOStats().addMissing(IsInMainFile); + else if (EC == llvm::instrprof_error::hash_mismatch) + CGM.getPGOStats().addMismatched(IsInMainFile); + else if (EC == llvm::instrprof_error::malformed) + // TODO: Consider a more specific warning for this case. + CGM.getPGOStats().addMismatched(IsInMainFile); RegionCounts.reset(); } } diff --git a/test/Profile/Inputs/c-general.profdata.v1 b/test/Profile/Inputs/c-general.profdata.v1 new file mode 100644 index 0000000000000000000000000000000000000000..e7dedcbf97f7b6400a3a65dd5a49222923715ad4 GIT binary patch literal 2000 zcmc(fPe>F|9LL|QT{M$aTFCw!RwEe??LnbK7;ft!%ZeokDynguo!xygJ8#;VB_%qT zfw-_5l?8R^KSWSxA)>${Fo-VEp-V+!(aECAcBr-aeb*XU)=M;(&;0(r_xm&R)3mcP zDTX=o9*{)#I0*g7z2NP+p7C@&nfi&kv=YJ<($Y+4;=Pi;q116?Nsv#6k1ZsFjmSkr zobHo33+#LrP@XzsC0XJ`L(7^&sxc^BC*PsuTNTD|3G!f_^aB0bDl+0Y+kauOJ$QA~ zQR)SoBGa*4#&#|Z@8;)I#q~%FE`;OlZ&vbKMsCZAkP!_%WaRO)4h}@fD@f+-_2^jW z$LA|Gm}seIzaK|rY|~IpDQ#yY>gkXjlL7lYbE(+}Z{_cdUA}psi8Q^$0Vz#Gvs7st zSHyCe98$uaE7xzSmttmS&>9Ib~R-)69sz)p0df z=xQ=&=>an1V047D@W*NKaPII>h&;kbw6NRd`^RYj$U?5=ayUEQKGW59`rM;hGF>A& zCxok~4d-ql(*5;Aa~m@F*+Bj^MA%7W*a#3C0isS2agaf*vp+v)-zT>P`r=1cV>9rT z&CgQW-exqsYn*snDiP5b3qCW*>*#pMmF%1qUlnGzBqrbBe)ub7G-06zoW|LyPqR<# zi(g`^$b{`pNHwXMrkl>nTq->i^~{LF%+Wi{h_miJ8?64(?I+=JmhujWl