diff --git a/clang/test/CodeGen/Inputs/thinlto_expect1.proftext b/clang/test/CodeGen/Inputs/thinlto_expect1.proftext --- a/clang/test/CodeGen/Inputs/thinlto_expect1.proftext +++ b/clang/test/CodeGen/Inputs/thinlto_expect1.proftext @@ -2,7 +2,7 @@ :ir foo # Func Hash: -25571299074 +784007059655560962 # Num Counters: 2 # Counter Values: diff --git a/clang/test/CodeGen/Inputs/thinlto_expect2.proftext b/clang/test/CodeGen/Inputs/thinlto_expect2.proftext --- a/clang/test/CodeGen/Inputs/thinlto_expect2.proftext +++ b/clang/test/CodeGen/Inputs/thinlto_expect2.proftext @@ -2,7 +2,7 @@ :csir foo # Func Hash: -25571299074 +784007059655560962 # Num Counters: 2 # Counter Values: @@ -11,7 +11,7 @@ foo # Func Hash: -1152921530178146050 +1936928564262407938 # Num Counters: 2 # Counter Values: diff --git a/clang/test/CodeGenCXX/Inputs/profile-remap.proftext b/clang/test/CodeGenCXX/Inputs/profile-remap.proftext --- a/clang/test/CodeGenCXX/Inputs/profile-remap.proftext +++ b/clang/test/CodeGenCXX/Inputs/profile-remap.proftext @@ -1,6 +1,6 @@ :ir _ZN3Foo8functionENS_1XE -29667547796 +146835647075900052 2 10 90 diff --git a/clang/test/CodeGenCXX/Inputs/profile-remap_entry.proftext b/clang/test/CodeGenCXX/Inputs/profile-remap_entry.proftext --- a/clang/test/CodeGenCXX/Inputs/profile-remap_entry.proftext +++ b/clang/test/CodeGenCXX/Inputs/profile-remap_entry.proftext @@ -1,7 +1,7 @@ :ir :entry_first _ZN3Foo8functionENS_1XE -29667547796 +146835647075900052 2 100 90 diff --git a/clang/test/Profile/Inputs/gcc-flag-compatibility_IR.proftext b/clang/test/Profile/Inputs/gcc-flag-compatibility_IR.proftext --- a/clang/test/Profile/Inputs/gcc-flag-compatibility_IR.proftext +++ b/clang/test/Profile/Inputs/gcc-flag-compatibility_IR.proftext @@ -2,7 +2,7 @@ :ir main # Func Hash: -34137660316 +1063705162469825436 # Num Counters: 2 # Counter Values: diff --git a/clang/test/Profile/Inputs/gcc-flag-compatibility_IR_entry.proftext b/clang/test/Profile/Inputs/gcc-flag-compatibility_IR_entry.proftext --- a/clang/test/Profile/Inputs/gcc-flag-compatibility_IR_entry.proftext +++ b/clang/test/Profile/Inputs/gcc-flag-compatibility_IR_entry.proftext @@ -3,7 +3,7 @@ :entry_first main # Func Hash: -34137660316 +1063705162469825436 # Num Counters: 2 # Counter Values: diff --git a/compiler-rt/test/profile/Linux/instrprof-value-merge.c b/compiler-rt/test/profile/Linux/instrprof-value-merge.c --- a/compiler-rt/test/profile/Linux/instrprof-value-merge.c +++ b/compiler-rt/test/profile/Linux/instrprof-value-merge.c @@ -45,7 +45,7 @@ // CHECK: Counters: // CHECK: main: -// CHECK: Hash: 0x00030012a7ab6e87 +// CHECK: Hash: 0x0a9bd81e87ab6e87 // CHECK: Counters: 6 // CHECK: Indirect Call Site Count: 3 // CHECK: Number of Memory Intrinsics Calls: 3 diff --git a/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp b/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp --- a/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp +++ b/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp @@ -261,6 +261,10 @@ // Defined in Analysis/BlockFrequencyInfo.cpp: -view-bfi-func-name= extern cl::opt ViewBlockFreqFuncName; +static cl::opt + PGOOldCFGHashing("pgo-instr-old-cfg-hashing", cl::init(false), cl::Hidden, + cl::desc("Use the old CFG function hashing")); + // Return a string describing the branch condition that can be // used in static branch probability heuristics: static std::string getBranchCondString(Instruction *TI) { @@ -620,7 +624,8 @@ } // end anonymous namespace // Compute Hash value for the CFG: the lower 32 bits are CRC32 of the index -// value of each BB in the CFG. The higher 32 bits record the number of edges. +// value of each BB in the CFG. The higher 32 bits are the CRC32 of the numbers +// of selects, indirect calls, mem ops and edges. template void FuncPGOInstrumentation::computeCFGHash() { std::vector Indexes; @@ -639,12 +644,32 @@ } JC.update(Indexes); - // Hash format for context sensitive profile. Reserve 4 bits for other - // information. - FunctionHash = (uint64_t)SIVisitor.getNumOfSelectInsts() << 56 | - (uint64_t)ValueSites[IPVK_IndirectCallTarget].size() << 48 | - //(uint64_t)ValueSites[IPVK_MemOPSize].size() << 40 | - (uint64_t)MST.AllEdges.size() << 32 | JC.getCRC(); + JamCRC JCH; + if (PGOOldCFGHashing) { + // Hash format for context sensitive profile. Reserve 4 bits for other + // information. + FunctionHash = (uint64_t)SIVisitor.getNumOfSelectInsts() << 56 | + (uint64_t)ValueSites[IPVK_IndirectCallTarget].size() << 48 | + //(uint64_t)ValueSites[IPVK_MemOPSize].size() << 40 | + (uint64_t)MST.AllEdges.size() << 32 | JC.getCRC(); + } else { + // The higher 32 bits. + auto updateJCH = [&JCH](uint64_t Num) { + std::vector Data; + for (unsigned I = 0; I < 8; ++I) + Data.push_back((uint8_t)(Num >> (I * 8))); + JCH.update(Data); + }; + updateJCH((uint64_t)SIVisitor.getNumOfSelectInsts()); + updateJCH((uint64_t)ValueSites[IPVK_IndirectCallTarget].size()); + updateJCH((uint64_t)ValueSites[IPVK_MemOPSize].size()); + updateJCH((uint64_t)MST.AllEdges.size()); + + // Hash format for context sensitive profile. Reserve 4 bits for other + // information. + FunctionHash = (((uint64_t)JCH.getCRC()) << 28) + JC.getCRC(); + } + // Reserve bit 60-63 for other information purpose. FunctionHash &= 0x0FFFFFFFFFFFFFFF; if (IsCS) @@ -653,8 +678,12 @@ << " CRC = " << JC.getCRC() << ", Selects = " << SIVisitor.getNumOfSelectInsts() << ", Edges = " << MST.AllEdges.size() << ", ICSites = " - << ValueSites[IPVK_IndirectCallTarget].size() - << ", Hash = " << FunctionHash << "\n";); + << ValueSites[IPVK_IndirectCallTarget].size()); + if (!PGOOldCFGHashing) { + LLVM_DEBUG(dbgs() << ", Memops = " << ValueSites[IPVK_MemOPSize].size() + << ", High32 CRC = " << JCH.getCRC()); + } + LLVM_DEBUG(dbgs() << ", Hash = " << FunctionHash << "\n";); } // Check if we can safely rename this Comdat function. diff --git a/llvm/test/Transforms/PGOProfile/Inputs/PR41279.proftext b/llvm/test/Transforms/PGOProfile/Inputs/PR41279.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/PR41279.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/PR41279.proftext @@ -1,6 +1,6 @@ :ir foo -60927483247 +1096621588030135663 4 3 2 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/PR41279_2.proftext b/llvm/test/Transforms/PGOProfile/Inputs/PR41279_2.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/PR41279_2.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/PR41279_2.proftext @@ -1,6 +1,6 @@ :ir f -62077759478 +1096621589180411894 2 3 2 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/branch1.proftext b/llvm/test/Transforms/PGOProfile/Inputs/branch1.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/branch1.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/branch1.proftext @@ -1,7 +1,7 @@ # :ir is the flag to indicate this is IR level profile. :ir test_br_1 -25571299074 +784007059655560962 2 3 2 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/branch1_large_count.proftext b/llvm/test/Transforms/PGOProfile/Inputs/branch1_large_count.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/branch1_large_count.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/branch1_large_count.proftext @@ -1,7 +1,7 @@ # :ir is the flag to indicate this is IR level profile. :ir test_br_1 -25571299074 +784007059655560962 2 12884901888 8589934592 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/branch2.proftext b/llvm/test/Transforms/PGOProfile/Inputs/branch2.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/branch2.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/branch2.proftext @@ -1,7 +1,7 @@ # :ir is the flag to indicate this is IR level profile. :ir test_br_2 -29667547796 +146835647075900052 2 1 1 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/branch2_entry.proftext b/llvm/test/Transforms/PGOProfile/Inputs/branch2_entry.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/branch2_entry.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/branch2_entry.proftext @@ -2,7 +2,7 @@ :ir :entry_first test_br_2 -29667547796 +146835647075900052 2 2 1 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/criticaledge.proftext b/llvm/test/Transforms/PGOProfile/Inputs/criticaledge.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/criticaledge.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/criticaledge.proftext @@ -1,7 +1,7 @@ # :ir is the flag to indicate this is IR level profile. :ir test_criticalEdge -82323253069 +93478046750287693 8 2 1 @@ -13,7 +13,7 @@ 1 :bar -12884901887 +742261418966908927 1 7 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/criticaledge_entry.proftext b/llvm/test/Transforms/PGOProfile/Inputs/criticaledge_entry.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/criticaledge_entry.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/criticaledge_entry.proftext @@ -2,7 +2,7 @@ :ir :entry_first test_criticalEdge -82323253069 +93478046750287693 8 7 2 @@ -14,7 +14,7 @@ 1 :bar -12884901887 +742261418966908927 1 7 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/cspgo.proftext b/llvm/test/Transforms/PGOProfile/Inputs/cspgo.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/cspgo.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/cspgo.proftext @@ -54,7 +54,7 @@ foo # Func Hash: -1152921640672869708 +1456607294772657484 # Num Counters: 10 # Counter Values: @@ -71,7 +71,7 @@ foo # Func Hash: -29212902728 +146835646621254984 # Num Counters: 2 # Counter Values: @@ -80,7 +80,7 @@ bar # Func Hash: -1152921569533132113 +1440408129826749777 # Num Counters: 5 # Counter Values: @@ -92,7 +92,7 @@ bar # Func Hash: -56228292833 +567185239050791137 # Num Counters: 4 # Counter Values: @@ -103,7 +103,7 @@ main # Func Hash: -1152921517491748863 +1895182923573755903 # Num Counters: 1 # Counter Values: @@ -111,7 +111,7 @@ main # Func Hash: -12884901887 +742261418966908927 # Num Counters: 1 # Counter Values: @@ -135,7 +135,7 @@ goo # Func Hash: -1152921517491748863 +1895182923573755903 # Num Counters: 1 # Counter Values: @@ -143,7 +143,7 @@ goo # Func Hash: -12884901887 +742261418966908927 # Num Counters: 1 # Counter Values: diff --git a/llvm/test/Transforms/PGOProfile/Inputs/diag_no_value_sites.proftext b/llvm/test/Transforms/PGOProfile/Inputs/diag_no_value_sites.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/diag_no_value_sites.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/diag_no_value_sites.proftext @@ -1,6 +1,6 @@ # :ir is the flag to indicate this is IR level profile. :ir foo -12884901887 +48277136972185599 1 1 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/fix_entry_count.proftext b/llvm/test/Transforms/PGOProfile/Inputs/fix_entry_count.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/fix_entry_count.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/fix_entry_count.proftext @@ -1,7 +1,7 @@ :ir :entry_first test_simple_for -34137660316 +1063705162469825436 2 0 96 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/func_entry.proftext b/llvm/test/Transforms/PGOProfile/Inputs/func_entry.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/func_entry.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/func_entry.proftext @@ -3,7 +3,7 @@ :entry_first hot # Func Hash: -12884901887 +742261418966908927 # Num Counters: 1 # Counter Values: @@ -11,7 +11,7 @@ cold # Func Hash: -12884901887 +742261418966908927 # Num Counters: 1 # Counter Values: @@ -19,7 +19,7 @@ med # Func Hash: -12884901887 +742261418966908927 # Num Counters: 1 # Counter Values: diff --git a/llvm/test/Transforms/PGOProfile/Inputs/indirect_call.proftext b/llvm/test/Transforms/PGOProfile/Inputs/indirect_call.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/indirect_call.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/indirect_call.proftext @@ -1,7 +1,7 @@ :ir bar # Func Hash: -281487861612543 +170957022131388415 # Num Counters: 1 # Counter Values: @@ -19,7 +19,7 @@ func1 # Func Hash: -12884901887 +742261418966908927 # Num Counters: 1 # Counter Values: @@ -27,7 +27,7 @@ func2 # Func Hash: -12884901887 +742261418966908927 # Num Counters: 1 # Counter Values: @@ -35,7 +35,7 @@ func3 # Func Hash: -12884901887 +742261418966908927 # Num Counters: 1 # Counter Values: diff --git a/llvm/test/Transforms/PGOProfile/Inputs/indirectbr.proftext b/llvm/test/Transforms/PGOProfile/Inputs/indirectbr.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/indirectbr.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/indirectbr.proftext @@ -2,7 +2,7 @@ :ir foo # Func Hash: -47485104005 +844982796158316421 # Num Counters: 4 # Counter Values: diff --git a/llvm/test/Transforms/PGOProfile/Inputs/indirectbr_entry.proftext b/llvm/test/Transforms/PGOProfile/Inputs/indirectbr_entry.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/indirectbr_entry.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/indirectbr_entry.proftext @@ -3,7 +3,7 @@ :entry_first foo # Func Hash: -47485104005 +844982796158316421 # Num Counters: 4 # Counter Values: diff --git a/llvm/test/Transforms/PGOProfile/Inputs/irreducible.proftext b/llvm/test/Transforms/PGOProfile/Inputs/irreducible.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/irreducible.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/irreducible.proftext @@ -1,7 +1,7 @@ :ir _Z11irreducibleii # Func Hash: -64451410787 +287486624745028451 # Num Counters: 6 # Counter Values: @@ -14,7 +14,7 @@ _Z11irreduciblePh # Func Hash: -104649601521 +331779889035882993 # Num Counters: 9 # Counter Values: diff --git a/llvm/test/Transforms/PGOProfile/Inputs/irreducible_entry.proftext b/llvm/test/Transforms/PGOProfile/Inputs/irreducible_entry.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/irreducible_entry.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/irreducible_entry.proftext @@ -2,7 +2,7 @@ :entry_first _Z11irreducibleii # Func Hash: -64451410787 +287486624745028451 # Num Counters: 6 # Counter Values: @@ -15,7 +15,7 @@ _Z11irreduciblePh # Func Hash: -104649601521 +331779889035882993 # Num Counters: 9 # Counter Values: diff --git a/llvm/test/Transforms/PGOProfile/Inputs/landingpad.proftext b/llvm/test/Transforms/PGOProfile/Inputs/landingpad.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/landingpad.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/landingpad.proftext @@ -1,7 +1,7 @@ # :ir is the flag to indicate this is IR level profile. :ir foo -59130013419 +567185241952511723 4 3 1 @@ -9,7 +9,7 @@ 0 bar -24868915205 +784007058953177093 2 3 2 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/landingpad_entry.proftext b/llvm/test/Transforms/PGOProfile/Inputs/landingpad_entry.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/landingpad_entry.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/landingpad_entry.proftext @@ -2,7 +2,7 @@ :ir :entry_first foo -59130013419 +567185241952511723 4 5 1 @@ -10,7 +10,7 @@ 0 bar -24868915205 +784007058953177093 2 3 2 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/large_count_remarks.proftext b/llvm/test/Transforms/PGOProfile/Inputs/large_count_remarks.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/large_count_remarks.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/large_count_remarks.proftext @@ -1,7 +1,7 @@ # :ir is the flag to indicate this is IR level profile. :ir test -25571299074 +784007059655560962 2 40000000000 20000000000 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/loop1.proftext b/llvm/test/Transforms/PGOProfile/Inputs/loop1.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/loop1.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/loop1.proftext @@ -1,7 +1,7 @@ # :ir is the flag to indicate this is IR level profile. :ir test_simple_for -34137660316 +1063705162469825436 2 96 4 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/loop1_entry.proftext b/llvm/test/Transforms/PGOProfile/Inputs/loop1_entry.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/loop1_entry.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/loop1_entry.proftext @@ -2,7 +2,7 @@ :ir :entry_first test_simple_for -34137660316 +1063705162469825436 2 4 96 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/loop2.proftext b/llvm/test/Transforms/PGOProfile/Inputs/loop2.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/loop2.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/loop2.proftext @@ -1,7 +1,7 @@ # :ir is the flag to indicate this is IR level profile. :ir test_nested_for -53929068288 +798733566382720768 3 33 10 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/loop2_entry.proftext b/llvm/test/Transforms/PGOProfile/Inputs/loop2_entry.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/loop2_entry.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/loop2_entry.proftext @@ -2,7 +2,7 @@ :ir :entry_first test_nested_for -53929068288 +798733566382720768 3 6 33 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/memop_size_annotation.proftext b/llvm/test/Transforms/PGOProfile/Inputs/memop_size_annotation.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/memop_size_annotation.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/memop_size_annotation.proftext @@ -2,7 +2,7 @@ :ir foo # Func Hash: -53929068288 +687116424982578944 # Num Counters: 3 # Counter Values: diff --git a/llvm/test/Transforms/PGOProfile/Inputs/misexpect-branch-correct.proftext b/llvm/test/Transforms/PGOProfile/Inputs/misexpect-branch-correct.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/misexpect-branch-correct.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/misexpect-branch-correct.proftext @@ -2,7 +2,7 @@ :ir bar # Func Hash: -29667547796 +146835647075900052 # Num Counters: 2 # Counter Values: diff --git a/llvm/test/Transforms/PGOProfile/Inputs/misexpect-branch.proftext b/llvm/test/Transforms/PGOProfile/Inputs/misexpect-branch.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/misexpect-branch.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/misexpect-branch.proftext @@ -2,7 +2,7 @@ :ir bar # Func Hash: -29667547796 +146835647075900052 # Num Counters: 2 # Counter Values: diff --git a/llvm/test/Transforms/PGOProfile/Inputs/misexpect-branch_entry.proftext b/llvm/test/Transforms/PGOProfile/Inputs/misexpect-branch_entry.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/misexpect-branch_entry.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/misexpect-branch_entry.proftext @@ -3,7 +3,7 @@ :entry_first bar # Func Hash: -29667547796 +146835647075900052 # Num Counters: 2 # Counter Values: diff --git a/llvm/test/Transforms/PGOProfile/Inputs/misexpect-switch-correct.proftext b/llvm/test/Transforms/PGOProfile/Inputs/misexpect-switch-correct.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/misexpect-switch-correct.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/misexpect-switch-correct.proftext @@ -2,7 +2,7 @@ :ir main # Func Hash: -74054140268 +391331300939170156 # Num Counters: 7 # Counter Values: diff --git a/llvm/test/Transforms/PGOProfile/Inputs/misexpect-switch-correct_entry.proftext b/llvm/test/Transforms/PGOProfile/Inputs/misexpect-switch-correct_entry.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/misexpect-switch-correct_entry.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/misexpect-switch-correct_entry.proftext @@ -3,7 +3,7 @@ :entry_first main # Func Hash: -74054140268 +391331300939170156 # Num Counters: 7 # Counter Values: diff --git a/llvm/test/Transforms/PGOProfile/Inputs/misexpect-switch.proftext b/llvm/test/Transforms/PGOProfile/Inputs/misexpect-switch.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/misexpect-switch.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/misexpect-switch.proftext @@ -2,7 +2,7 @@ :ir main # Func Hash: -74054140268 +391331300939170156 # Num Counters: 7 # Counter Values: diff --git a/llvm/test/Transforms/PGOProfile/Inputs/misexpect-switch_entry.proftext b/llvm/test/Transforms/PGOProfile/Inputs/misexpect-switch_entry.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/misexpect-switch_entry.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/misexpect-switch_entry.proftext @@ -3,7 +3,7 @@ :entry_first main # Func Hash: -74054140268 +391331300939170156 # Num Counters: 7 # Counter Values: diff --git a/llvm/test/Transforms/PGOProfile/Inputs/multiple_hash_profile.proftext b/llvm/test/Transforms/PGOProfile/Inputs/multiple_hash_profile.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/multiple_hash_profile.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/multiple_hash_profile.proftext @@ -2,13 +2,23 @@ :ir _Z3fooi # Func Hash: -72057606922829823 +382993475055910911 # Num Counters: 2 # Counter Values: 18 12 +# For -pgo-instr-old-cfg-hashing=true +_Z3fooi +# Func Hash: +72057606922829823 +# Num Counters: +2 +# Counter Values: +18 +6 + _Z3fooi # Func Hash: 12884901887 @@ -17,6 +27,16 @@ # Counter Values: 0 +_Z3bari +# Func Hash: +382993475055910911 +# Num Counters: +2 +# Counter Values: +0 +0 + +# For -pgo-instr-old-cfg-hashing=true _Z3bari # Func Hash: 72057606922829823 @@ -28,9 +48,17 @@ _Z4m2f1v # Func Hash: -12884901887 +742261418966908927 # Num Counters: 1 # Counter Values: 1 +# For -pgo-instr-old-cfg-hashing=true +_Z4m2f1v +# Func Hash: +12884901887 +# Num Counters: +1 +# Counter Values: +1 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/noreturncall.proftext b/llvm/test/Transforms/PGOProfile/Inputs/noreturncall.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/noreturncall.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/noreturncall.proftext @@ -2,7 +2,7 @@ :ir foo # Func Hash: -36496524737 +238984482720105921 # Num Counters: 3 # Counter Values: diff --git a/llvm/test/Transforms/PGOProfile/Inputs/remap.proftext b/llvm/test/Transforms/PGOProfile/Inputs/remap.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/remap.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/remap.proftext @@ -1,7 +1,7 @@ # :ir is the flag to indicate this is IR level profile. :ir _ZN3foo3barERKN1N1XINS_4quuxEEE -25571299074 +784007059655560962 2 3 2 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/select1.proftext b/llvm/test/Transforms/PGOProfile/Inputs/select1.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/select1.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/select1.proftext @@ -1,7 +1,7 @@ :ir :entry_first test_br_2 -72057623705475732 +942389667449461396 3 5 1 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/select2.proftext b/llvm/test/Transforms/PGOProfile/Inputs/select2.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/select2.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/select2.proftext @@ -3,7 +3,7 @@ :entry_first foo # Func Hash: -72057628175588252 +134732432632142748 # Num Counters: 3 # Counter Values: diff --git a/llvm/test/Transforms/PGOProfile/Inputs/suppl-profile.proftext b/llvm/test/Transforms/PGOProfile/Inputs/suppl-profile.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/suppl-profile.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/suppl-profile.proftext @@ -1,7 +1,7 @@ # :ir is the flag to indicate this is IR level profile. :ir test_simple_for -34137660316 +1063705162469825436 2 0 0 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/switch.proftext b/llvm/test/Transforms/PGOProfile/Inputs/switch.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/switch.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/switch.proftext @@ -1,7 +1,7 @@ # :ir is the flag to indicate this is IR level profile. :ir test_switch -46200943743 +536873293052540031 4 0 5 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/switch_entry.proftext b/llvm/test/Transforms/PGOProfile/Inputs/switch_entry.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/switch_entry.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/switch_entry.proftext @@ -2,7 +2,7 @@ :ir :entry_first test_switch -46200943743 +536873293052540031 4 10 5 diff --git a/llvm/test/Transforms/PGOProfile/Inputs/thinlto_cs.proftext b/llvm/test/Transforms/PGOProfile/Inputs/thinlto_cs.proftext --- a/llvm/test/Transforms/PGOProfile/Inputs/thinlto_cs.proftext +++ b/llvm/test/Transforms/PGOProfile/Inputs/thinlto_cs.proftext @@ -10,7 +10,7 @@ foo # Func Hash: -29212902728 +1720106746050921044 # Num Counters: 2 # Counter Values: @@ -19,7 +19,7 @@ bar # Func Hash: -1152921534274394772 +1299757151682747028 # Num Counters: 2 # Counter Values: @@ -45,7 +45,7 @@ main # Func Hash: -12884901887 +1895182923573755903 # Num Counters: 1 # Counter Values: @@ -53,7 +53,7 @@ cspgo.c:foo # Func Hash: -1152921563228422740 +1720106746050921044 # Num Counters: 4 # Counter Values: diff --git a/llvm/test/Transforms/PGOProfile/multiple_hash_profile.ll b/llvm/test/Transforms/PGOProfile/multiple_hash_profile.ll --- a/llvm/test/Transforms/PGOProfile/multiple_hash_profile.ll +++ b/llvm/test/Transforms/PGOProfile/multiple_hash_profile.ll @@ -1,6 +1,8 @@ ; RUN: llvm-profdata merge %S/Inputs/multiple_hash_profile.proftext -o %t.profdata ; RUN: opt < %s -pgo-instr-use -pgo-test-profile-file=%t.profdata -S | FileCheck %s +; RUN: opt < %s -pgo-instr-use -pgo-test-profile-file=%t.profdata -pgo-instr-old-cfg-hashing=true -S | FileCheck -check-prefix=CHECKOLDHASH %s ; RUN: opt < %s -passes=pgo-instr-use -pgo-test-profile-file=%t.profdata -S | FileCheck %s +; RUN: opt < %s -passes=pgo-instr-use -pgo-test-profile-file=%t.profdata -pgo-instr-old-cfg-hashing=true -S | FileCheck -check-prefix=CHECKOLDHASH %s target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" @@ -29,6 +31,9 @@ ; CHECK: %mul.i = select i1 %cmp.i, i32 1, i32 %i ; CHECK-SAME: !prof ![[BW:[0-9]+]] ; CHECK: ![[BW]] = !{!"branch_weights", i32 12, i32 6} +; CHECKOLDHASH: %mul.i = select i1 %cmp.i, i32 1, i32 %i +; CHECKOLDHASH-SAME: !prof ![[BW:[0-9]+]] +; CHECKOLDHASH: ![[BW]] = !{!"branch_weights", i32 6, i32 12} %retval.0.i = mul nsw i32 %mul.i, %i ret i32 %retval.0.i }