serge-sans-paille updated this revision to Diff 266064. serge-sans-paille added a comment.
Update profile data hash entries due to hash function update, unless the version used is V1, in which case we keep the buggy behavior for backward compatibility. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D79961/new/ https://reviews.llvm.org/D79961 Files: clang/lib/CodeGen/CodeGenPGO.cpp clang/test/Profile/Inputs/c-counter-overflows.proftext clang/test/Profile/Inputs/c-general.profdata.v3 clang/test/Profile/Inputs/c-general.proftext clang/test/Profile/Inputs/c-unprofiled-blocks.proftext clang/test/Profile/Inputs/cxx-rangefor.proftext clang/test/Profile/Inputs/cxx-throws.proftext clang/test/Profile/Inputs/misexpect-switch-default.proftext clang/test/Profile/Inputs/misexpect-switch-nonconst.proftext clang/test/Profile/Inputs/misexpect-switch.proftext clang/test/Profile/c-collision.c
Index: clang/test/Profile/c-collision.c =================================================================== --- /dev/null +++ clang/test/Profile/c-collision.c @@ -0,0 +1,22 @@ +// Test that a slight change in the code leads to a different hash. +// RUN: %clang_cc1 -UEXTRA -triple x86_64-unknown-linux-gnu -main-file-name c-collision.c %s -o - -emit-llvm -fprofile-instrument=clang | FileCheck %s --check-prefix=CHECK-NOEXTRA +// RUN: %clang_cc1 -DEXTRA -triple x86_64-unknown-linux-gnu -main-file-name c-collision.c %s -o - -emit-llvm -fprofile-instrument=clang | FileCheck %s --check-prefix=CHECK-EXTRA + +// CHECK-NOEXTRA: @__profd_foo = private global { {{.*}} } { i64 6699318081062747564, i64 7156072912471487002, +// CHECK-EXTRA: @__profd_foo = private global { {{.*}} } { i64 6699318081062747564, i64 -4383447408116050035, + +extern int bar; +void foo() { + if (bar) { + } + if (bar) { + } + if (bar) { + if (bar) { +#ifdef EXTRA + if (bar) { + } +#endif + } + } +} Index: clang/test/Profile/Inputs/misexpect-switch.proftext =================================================================== --- clang/test/Profile/Inputs/misexpect-switch.proftext +++ clang/test/Profile/Inputs/misexpect-switch.proftext @@ -1,6 +1,6 @@ main # Func Hash: -1965403898329309329 +872687477373597607 # Num Counters: 9 # Counter Values: Index: clang/test/Profile/Inputs/misexpect-switch-nonconst.proftext =================================================================== --- clang/test/Profile/Inputs/misexpect-switch-nonconst.proftext +++ clang/test/Profile/Inputs/misexpect-switch-nonconst.proftext @@ -1,6 +1,6 @@ main # Func Hash: -1965403898329309329 +3721743393642630379 # Num Counters: 10 # Counter Values: Index: clang/test/Profile/Inputs/misexpect-switch-default.proftext =================================================================== --- clang/test/Profile/Inputs/misexpect-switch-default.proftext +++ clang/test/Profile/Inputs/misexpect-switch-default.proftext @@ -1,6 +1,6 @@ main # Func Hash: -8712453512413296413 +8734802134600123338 # Num Counters: 9 # Counter Values: Index: clang/test/Profile/Inputs/cxx-throws.proftext =================================================================== --- clang/test/Profile/Inputs/cxx-throws.proftext +++ clang/test/Profile/Inputs/cxx-throws.proftext @@ -1,5 +1,5 @@ _Z6throwsv -340120998528097520 +18172607911962830854 9 1 100 Index: clang/test/Profile/Inputs/cxx-rangefor.proftext =================================================================== --- clang/test/Profile/Inputs/cxx-rangefor.proftext +++ clang/test/Profile/Inputs/cxx-rangefor.proftext @@ -1,5 +1,5 @@ _Z9range_forv -6169071350249721981 +8789831523895825398 5 1 4 Index: clang/test/Profile/Inputs/c-unprofiled-blocks.proftext =================================================================== --- clang/test/Profile/Inputs/c-unprofiled-blocks.proftext +++ clang/test/Profile/Inputs/c-unprofiled-blocks.proftext @@ -1,5 +1,5 @@ never_called -5644096560937528444 +6820425066224770721 9 0 0 @@ -17,7 +17,7 @@ 1 dead_code -9636018207904213947 +5254464978620792806 10 1 0 Index: clang/test/Profile/Inputs/c-general.proftext =================================================================== --- clang/test/Profile/Inputs/c-general.proftext +++ clang/test/Profile/Inputs/c-general.proftext @@ -7,7 +7,7 @@ 75 conditionals -4190663230902537370 +4904767535850050386 11 1 100 @@ -22,7 +22,7 @@ 100 early_exits -8265526549255474475 +2880354649761471549 9 1 0 @@ -35,7 +35,7 @@ 0 jumps -15872630527555456493 +15051420506203462683 22 1 1 @@ -61,7 +61,7 @@ 9 switches -11892326508727782373 +43242458792028222 19 1 1 @@ -84,7 +84,7 @@ 0 big_switch -16933280399284440835 +13144136522122330070 17 1 32 @@ -117,7 +117,7 @@ 50 boolop_loops -11270260636676715317 +12402604614320574815 9 1 50 @@ -137,7 +137,7 @@ 1 do_fallthrough -6898770640283947069 +8714614136504380050 4 1 10 Index: clang/test/Profile/Inputs/c-counter-overflows.proftext =================================================================== --- clang/test/Profile/Inputs/c-counter-overflows.proftext +++ clang/test/Profile/Inputs/c-counter-overflows.proftext @@ -1,5 +1,5 @@ main -10111551811706059223 +7779561829442898616 8 1 68719476720 Index: clang/lib/CodeGen/CodeGenPGO.cpp =================================================================== --- clang/lib/CodeGen/CodeGenPGO.cpp +++ clang/lib/CodeGen/CodeGenPGO.cpp @@ -747,13 +747,21 @@ return Working; // Check for remaining work in Working. - if (Working) - MD5.update(Working); + if (Working) { + // Keep the buggy behavior from v1 for backward-compatibility. This is buggy + // because it implicitly converts a uint64_t into an array of uint8_t. + if (HashVersion == PGO_HASH_V1) { + MD5.update(Working); + } else { + using namespace llvm::support; + uint64_t Swapped = endian::byte_swap<uint64_t, little>(Working); + MD5.update(llvm::makeArrayRef((uint8_t *)&Swapped, sizeof(Swapped))); + } + } // Finalize the MD5 and return the hash. llvm::MD5::MD5Result Result; MD5.final(Result); - using namespace llvm::support; return Result.low(); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits