[llvm] [compiler-rt] Revert "[PGO][GlobalValue][LTO]In GlobalValues::getGlobalIdentifier, use semicolon as delimiter for local-linkage varibles." (PR #75835)

via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 18 09:40:13 PST 2023


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-pgo

Author: Mingming Liu (minglotus-6)

<details>
<summary>Changes</summary>

Reverts llvm/llvm-project#<!-- -->74008

The compiler-rt test failed due to `llvm-dis` not found (https://lab.llvm.org/buildbot/#/builders/127/builds/59884)
Will revert and investigate how to require the proper dependency.


---

Patch is 43.72 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/75835.diff


17 Files Affected:

- (removed) compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp (-115) 
- (modified) llvm/include/llvm/IR/GlobalValue.h (-4) 
- (modified) llvm/include/llvm/ProfileData/InstrProf.h (+11-15) 
- (modified) llvm/lib/IR/Globals.cpp (+5-7) 
- (modified) llvm/lib/ProfileData/InstrProf.cpp (+10-28) 
- (modified) llvm/lib/ProfileData/InstrProfReader.cpp (+5-6) 
- (modified) llvm/test/Bitcode/thinlto-function-summary-originalnames.ll (+5-5) 
- (modified) llvm/test/ThinLTO/X86/memprof-basic.ll (+13-13) 
- (modified) llvm/test/ThinLTO/X86/memprof-duplicate-context-ids.ll (+5-5) 
- (modified) llvm/test/ThinLTO/X86/memprof-funcassigncloning.ll (+3-3) 
- (modified) llvm/test/ThinLTO/X86/memprof-indirectcall.ll (+16-16) 
- (modified) llvm/test/ThinLTO/X86/memprof-inlined.ll (+7-7) 
- (added) llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.ll (+16) 
- (removed) llvm/test/Transforms/PGOProfile/Inputs/thinlto_indirect_call_promotion.profraw () 
- (removed) llvm/test/Transforms/PGOProfile/Inputs/update_thinlto_indirect_call_promotion_inputs.sh (-62) 
- (modified) llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll (+30-75) 
- (modified) llvm/unittests/ProfileData/InstrProfTest.cpp (+2-2) 


``````````diff
diff --git a/compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp b/compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp
deleted file mode 100644
index 82ca1cd7d0a564..00000000000000
--- a/compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-// This is a regression test for ThinLTO indirect-call-promotion when candidate
-// callees need to be imported from another IR module.  In the C++ test case,
-// `main` calls `global_func` which is defined in another module. `global_func`
-// has two indirect callees, one has external linkage and one has local linkage.
-// All three functions should be imported into the IR module of main.
-
-// What the test does:
-// - Generate raw profiles from executables and convert it to indexed profiles.
-//   During the conversion, a profiled callee address in raw profiles will be
-//   converted to function hash in indexed profiles.
-// - Run IRPGO profile use and ThinTLO prelink pipeline and get LLVM bitcodes
-//   for both cpp files in the C++ test case.
-// - Generate ThinLTO summary file with LLVM bitcodes, and run `function-import` pass.
-// - Run `pgo-icall-prom` pass for the IR module which needs to import callees.
-
-// Use lld as linker for more robust test. We need to REQUIRE LLVMgold.so for
-// LTO if default linker is GNU ld or gold anyway.
-// REQUIRES: lld-available
-
-// Test should fail where linkage-name and mangled-name diverges, see issue https://github.com/llvm/llvm-project/issues/74565).
-// Currently, this name divergence happens on Mach-O object file format, or on
-// many (but not all) 32-bit Windows systems.
-//
-// XFAIL: system-darwin
-//
-// Mark 32-bit Windows as UNSUPPORTED for now as opposed to XFAIL. This test
-// should fail on many (but not all) 32-bit Windows systems and succeed on the
-// rest. The flexibility in triple string parsing makes it tricky to capture
-// both sets accurately. i[3-9]86 specifies arch as Triple::ArchType::x86, (win32|windows)
-// specifies OS as Triple::OS::Win32
-//
-// UNSUPPORTED: target={{i.86.*windows.*}}
-
-// RUN: rm -rf %t && split-file %s %t && cd %t
-
-// Do setup work for all below tests.
-// Generate raw profiles from real programs and convert it into indexed profiles.
-// Use clangxx_pgogen for IR level instrumentation for C++.
-// RUN: %clangxx_pgogen -fuse-ld=lld -O2 lib.cpp main.cpp -o main
-// RUN: env LLVM_PROFILE_FILE=main.profraw %run ./main
-// RUN: llvm-profdata merge main.profraw -o main.profdata
-
-// Use profile on lib and get bitcode, test that local function callee0 has
-// expected !PGOFuncName metadata and external function callee1 doesn't have
-// !PGOFuncName metadata. Explicitly skip ICP pass to test ICP happens as
-// expected in the IR module that imports functions from lib.
-// RUN: %clang -mllvm -disable-icp -fprofile-use=main.profdata -flto=thin -O2 -c lib.cpp -o lib.bc
-// RUN: llvm-dis lib.bc -o - | FileCheck %s --check-prefix=PGOName
-
-// Use profile on main and get bitcode.
-// RUN: %clang -fprofile-use=main.profdata -flto=thin -O2 -c main.cpp -o main.bc
-
-// Run llvm-lto to get summary file.
-// RUN: llvm-lto -thinlto -o summary main.bc lib.bc
-
-// Test the imports of functions. Default import thresholds would work but do
-// explicit override to be more futureproof. Note all functions have one basic
-// block with a function-entry-count of one, so they are actually hot functions
-// per default profile summary hotness cutoff.
-// RUN: opt -passes=function-import -import-instr-limit=100 -import-cold-multiplier=1 -summary-file summary.thinlto.bc main.bc -o main.import.bc -print-imports 2>&1 | FileCheck %s --check-prefix=IMPORTS
-// Test that '_Z11global_funcv' has indirect calls annotated with value profiles.
-// RUN: llvm-dis main.import.bc -o - | FileCheck %s --check-prefix=IR
-
-// Test that both candidates are ICP'ed and there is no `!VP` in the IR.
-// RUN: opt main.import.bc -icp-lto -passes=pgo-icall-prom -S -pass-remarks=pgo-icall-prom 2>&1 | FileCheck %s --check-prefixes=ICP-IR,ICP-REMARK --implicit-check-not="!VP"
-
-// IMPORTS: main.cpp: Import _Z7callee1v
-// IMPORTS: main.cpp: Import _ZL7callee0v.llvm.[[#]]
-// IMPORTS: main.cpp: Import _Z11global_funcv
-
-// PGOName: define {{(dso_local )?}}void @_Z7callee1v() #[[#]] !prof ![[#]] {
-// PGOName: define internal void @_ZL7callee0v() #[[#]] !prof ![[#]] !PGOFuncName ![[#MD:]] {
-// PGOName: ![[#MD]] = !{!"{{.*}}lib.cpp;_ZL7callee0v"}
-
-// IR-LABEL: define available_externally {{.*}} void @_Z11global_funcv() {{.*}} !prof ![[#]] {
-// IR-NEXT: entry:
-// IR-NEXT:  %0 = load ptr, ptr @calleeAddrs
-// IR-NEXT:  tail call void %0(), !prof ![[#PROF1:]]
-// IR-NEXT:  %1 = load ptr, ptr getelementptr inbounds ([2 x ptr], ptr @calleeAddrs,
-// IR-NEXT:  tail call void %1(), !prof ![[#PROF2:]]
-
-// The GUID of indirect callee is the MD5 hash of `/path/to/lib.cpp;_ZL7callee0v`
-// that depends on the directory. Use [[#]] for its MD5 hash.
-// Use {{.*}} for integer types so the test works on 32-bit and 64-bit systems.
-// IR: ![[#PROF1]] = !{!"VP", i32 0, {{.*}} 1, {{.*}} [[#]], {{.*}} 1}
-// IR: ![[#PROF2]] = !{!"VP", i32 0, {{.*}} 1, {{.*}} -3993653843325621743, {{.*}} 1}
-
-// ICP-REMARK: Promote indirect call to _ZL7callee0v.llvm.[[#]] with count 1 out of 1
-// ICP-REMARK: Promote indirect call to _Z7callee1v with count 1 out of 1
-
-// ICP-IR: br i1 %[[#]], label %if.true.direct_targ, label %if.false.orig_indirect, !prof ![[#BRANCH_WEIGHT1:]]
-// ICP-IR: br i1 %[[#]], label %if.true.direct_targ1, label %if.false.orig_indirect2, !prof ![[#BRANCH_WEIGHT1]]
-// ICP-IR: ![[#BRANCH_WEIGHT1]] = !{!"branch_weights", i32 1, i32 0}
-
-//--- lib.h
-void global_func();
-
-//--- lib.cpp
-#include "lib.h"
-static void callee0() {}
-void callee1() {}
-typedef void (*FPT)();
-FPT calleeAddrs[] = {callee0, callee1};
-// `global_func`` might call one of two indirect callees. callee0 has internal
-// linkage and callee1 has external linkage.
-void global_func() {
-  FPT fp = calleeAddrs[0];
-  fp();
-  fp = calleeAddrs[1];
-  fp();
-}
-
-//--- main.cpp
-#include "lib.h"
-int main() { global_func(); }
diff --git a/llvm/include/llvm/IR/GlobalValue.h b/llvm/include/llvm/IR/GlobalValue.h
index e97a7f2b963606..d1891c157099d4 100644
--- a/llvm/include/llvm/IR/GlobalValue.h
+++ b/llvm/include/llvm/IR/GlobalValue.h
@@ -41,10 +41,6 @@ namespace Intrinsic {
 typedef unsigned ID;
 } // end namespace Intrinsic
 
-// Choose ';' as the delimiter. ':' was used once but it doesn't work well for
-// Objective-C functions which commonly have :'s in their names.
-inline constexpr char kGlobalIdentifierDelimiter = ';';
-
 class GlobalValue : public Constant {
 public:
   /// An enumeration for the kinds of linkage for global values.
diff --git a/llvm/include/llvm/ProfileData/InstrProf.h b/llvm/include/llvm/ProfileData/InstrProf.h
index 36be2e7d869e7b..288dc71d756aee 100644
--- a/llvm/include/llvm/ProfileData/InstrProf.h
+++ b/llvm/include/llvm/ProfileData/InstrProf.h
@@ -171,8 +171,6 @@ inline StringRef getInstrProfCounterBiasVarName() {
 /// Return the marker used to separate PGO names during serialization.
 inline StringRef getInstrProfNameSeparator() { return "\01"; }
 
-/// Please use getIRPGOFuncName for LLVM IR instrumentation. This function is
-/// for front-end (Clang, etc) instrumentation.
 /// Return the modified name for function \c F suitable to be
 /// used the key for profile lookup. Variable \c InLTO indicates if this
 /// is called in LTO optimization passes.
@@ -198,22 +196,20 @@ std::string getIRPGOFuncName(const Function &F, bool InLTO = false);
 std::pair<StringRef, StringRef> getParsedIRPGOFuncName(StringRef IRPGOFuncName);
 
 /// Return the name of the global variable used to store a function
-/// name in PGO instrumentation. \c FuncName is the IRPGO function name
-/// (returned by \c getIRPGOFuncName) for LLVM IR instrumentation and PGO
-/// function name (returned by \c getPGOFuncName) for front-end instrumentation.
+/// name in PGO instrumentation. \c FuncName is the name of the function
+/// returned by the \c getPGOFuncName call.
 std::string getPGOFuncNameVarName(StringRef FuncName,
                                   GlobalValue::LinkageTypes Linkage);
 
 /// Create and return the global variable for function name used in PGO
-/// instrumentation. \c FuncName is the IRPGO function name (returned by
-/// \c getIRPGOFuncName) for LLVM IR instrumentation and PGO function name
-/// (returned by \c getPGOFuncName) for front-end instrumentation.
+/// instrumentation. \c FuncName is the name of the function returned
+/// by \c getPGOFuncName call.
 GlobalVariable *createPGOFuncNameVar(Function &F, StringRef PGOFuncName);
 
 /// Create and return the global variable for function name used in PGO
-/// instrumentation. \c FuncName is the IRPGO function name (returned by
-/// \c getIRPGOFuncName) for LLVM IR instrumentation and PGO function name
-/// (returned by \c getPGOFuncName) for front-end instrumentation.
+/// instrumentation.  /// \c FuncName is the name of the function
+/// returned by \c getPGOFuncName call, \c M is the owning module,
+/// and \c Linkage is the linkage of the instrumented function.
 GlobalVariable *createPGOFuncNameVar(Module &M,
                                      GlobalValue::LinkageTypes Linkage,
                                      StringRef PGOFuncName);
@@ -421,11 +417,11 @@ uint64_t ComputeHash(StringRef K);
 
 } // end namespace IndexedInstrProf
 
-/// A symbol table used for function [IR]PGO name look-up with keys
+/// A symbol table used for function PGO name look-up with keys
 /// (such as pointers, md5hash values) to the function. A function's
-/// [IR]PGO name or name's md5hash are used in retrieving the profile
-/// data of the function. See \c getIRPGOFuncName() and \c getPGOFuncName
-/// methods for details how [IR]PGO name is formed.
+/// PGO name or name's md5hash are used in retrieving the profile
+/// data of the function. See \c getPGOFuncName() method for details
+/// on how PGO name is formed.
 class InstrProfSymtab {
 public:
   using AddrHashMap = std::vector<std::pair<uint64_t, uint64_t>>;
diff --git a/llvm/lib/IR/Globals.cpp b/llvm/lib/IR/Globals.cpp
index 239acd2181e854..51bdbeb0abf2c4 100644
--- a/llvm/lib/IR/Globals.cpp
+++ b/llvm/lib/IR/Globals.cpp
@@ -144,27 +144,25 @@ void GlobalObject::copyAttributesFrom(const GlobalObject *Src) {
 std::string GlobalValue::getGlobalIdentifier(StringRef Name,
                                              GlobalValue::LinkageTypes Linkage,
                                              StringRef FileName) {
+
   // Value names may be prefixed with a binary '1' to indicate
   // that the backend should not modify the symbols due to any platform
   // naming convention. Do not include that '1' in the PGO profile name.
   if (Name[0] == '\1')
     Name = Name.substr(1);
 
-  std::string GlobalName;
+  std::string NewName = std::string(Name);
   if (llvm::GlobalValue::isLocalLinkage(Linkage)) {
     // For local symbols, prepend the main file name to distinguish them.
     // Do not include the full path in the file name since there's no guarantee
     // that it will stay the same, e.g., if the files are checked out from
     // version control in different locations.
     if (FileName.empty())
-      GlobalName += "<unknown>";
+      NewName = NewName.insert(0, "<unknown>:");
     else
-      GlobalName += FileName;
-
-    GlobalName += kGlobalIdentifierDelimiter;
+      NewName = NewName.insert(0, FileName.str() + ":");
   }
-  GlobalName += Name;
-  return GlobalName;
+  return NewName;
 }
 
 std::string GlobalValue::getGlobalIdentifier() const {
diff --git a/llvm/lib/ProfileData/InstrProf.cpp b/llvm/lib/ProfileData/InstrProf.cpp
index f5fde84eb6bd06..649d814cfd9de0 100644
--- a/llvm/lib/ProfileData/InstrProf.cpp
+++ b/llvm/lib/ProfileData/InstrProf.cpp
@@ -246,27 +246,11 @@ std::string InstrProfError::message() const {
 
 char InstrProfError::ID = 0;
 
-std::string getPGOFuncName(StringRef Name, GlobalValue::LinkageTypes Linkage,
+std::string getPGOFuncName(StringRef RawFuncName,
+                           GlobalValue::LinkageTypes Linkage,
                            StringRef FileName,
                            uint64_t Version LLVM_ATTRIBUTE_UNUSED) {
-  // Value names may be prefixed with a binary '1' to indicate
-  // that the backend should not modify the symbols due to any platform
-  // naming convention. Do not include that '1' in the PGO profile name.
-  if (Name[0] == '\1')
-    Name = Name.substr(1);
-
-  std::string NewName = std::string(Name);
-  if (llvm::GlobalValue::isLocalLinkage(Linkage)) {
-    // For local symbols, prepend the main file name to distinguish them.
-    // Do not include the full path in the file name since there's no guarantee
-    // that it will stay the same, e.g., if the files are checked out from
-    // version control in different locations.
-    if (FileName.empty())
-      NewName = NewName.insert(0, "<unknown>:");
-    else
-      NewName = NewName.insert(0, FileName.str() + ":");
-  }
-  return NewName;
+  return GlobalValue::getGlobalIdentifier(RawFuncName, Linkage, FileName);
 }
 
 // Strip NumPrefix level of directory name from PathNameStr. If the number of
@@ -316,10 +300,12 @@ getIRPGONameForGlobalObject(const GlobalObject &GO,
                             GlobalValue::LinkageTypes Linkage,
                             StringRef FileName) {
   SmallString<64> Name;
-  // FIXME: Mangler's handling is kept outside of `getGlobalIdentifier` for now.
-  // For more details please check issue #74565.
+  if (llvm::GlobalValue::isLocalLinkage(Linkage)) {
+    Name.append(FileName.empty() ? "<unknown>" : FileName);
+    Name.append(";");
+  }
   Mangler().getNameWithPrefix(Name, &GO, /*CannotUsePrivateLabel=*/true);
-  return GlobalValue::getGlobalIdentifier(Name, Linkage, FileName);
+  return Name.str().str();
 }
 
 static std::optional<std::string> lookupPGONameFromMetadata(MDNode *MD) {
@@ -366,9 +352,6 @@ std::string getIRPGOFuncName(const Function &F, bool InLTO) {
   return getIRPGOObjectName(F, InLTO, getPGOFuncNameMetadata(F));
 }
 
-// Please use getIRPGOFuncName for LLVM IR instrumentation. This function is
-// for front-end (Clang, etc) instrumentation.
-// The implementation is kept for profile matching from older profiles.
 // This is similar to `getIRPGOFuncName` except that this function calls
 // 'getPGOFuncName' to get a name and `getIRPGOFuncName` calls
 // 'getIRPGONameForGlobalObject'. See the difference between two callees in the
@@ -401,9 +384,8 @@ getParsedIRPGOFuncName(StringRef IRPGOFuncName) {
 StringRef getFuncNameWithoutPrefix(StringRef PGOFuncName, StringRef FileName) {
   if (FileName.empty())
     return PGOFuncName;
-  // Drop the file name including ':' or ';'. See getIRPGONameForGlobalObject as
-  // well.
-  if (PGOFuncName.startswith(FileName))
+  // Drop the file name including ':'. See also getPGOFuncName.
+  if (PGOFuncName.starts_with(FileName))
     PGOFuncName = PGOFuncName.drop_front(FileName.size() + 1);
   return PGOFuncName;
 }
diff --git a/llvm/lib/ProfileData/InstrProfReader.cpp b/llvm/lib/ProfileData/InstrProfReader.cpp
index 7f8eb0ce747fe2..068922d421f8b9 100644
--- a/llvm/lib/ProfileData/InstrProfReader.cpp
+++ b/llvm/lib/ProfileData/InstrProfReader.cpp
@@ -1008,14 +1008,13 @@ class llvm::InstrProfReaderItaniumRemapper
 
   /// Extract the original function name from a PGO function name.
   static StringRef extractName(StringRef Name) {
-    // We can have multiple pieces separated by kGlobalIdentifierDelimiter (
-    // semicolon now and colon in older profiles); there can be pieces both
-    // before and after the mangled name. Find the first part that starts with
-    // '_Z'; we'll assume that's the mangled name we want.
+    // We can have multiple :-separated pieces; there can be pieces both
+    // before and after the mangled name. Find the first part that starts
+    // with '_Z'; we'll assume that's the mangled name we want.
     std::pair<StringRef, StringRef> Parts = {StringRef(), Name};
     while (true) {
-      Parts = Parts.second.split(kGlobalIdentifierDelimiter);
-      if (Parts.first.startswith("_Z"))
+      Parts = Parts.second.split(':');
+      if (Parts.first.starts_with("_Z"))
         return Parts.first;
       if (Parts.second.empty())
         return Name;
diff --git a/llvm/test/Bitcode/thinlto-function-summary-originalnames.ll b/llvm/test/Bitcode/thinlto-function-summary-originalnames.ll
index 0139f00b4aa3f4..7cc9654c8c7b12 100644
--- a/llvm/test/Bitcode/thinlto-function-summary-originalnames.ll
+++ b/llvm/test/Bitcode/thinlto-function-summary-originalnames.ll
@@ -6,13 +6,13 @@
 ; COMBINED:       <GLOBALVAL_SUMMARY_BLOCK
 ; COMBINED-NEXT:    <VERSION
 ; COMBINED-NEXT:    <FLAGS
-; COMBINED-NEXT:    <VALUE_GUID {{.*}} op1=686735765308251824/>
-; COMBINED-NEXT:    <VALUE_GUID {{.*}} op1=4507502870619175775/>
-; COMBINED-NEXT:    <VALUE_GUID {{.*}} op1=-8118561185538785069/>
+; COMBINED-NEXT:    <VALUE_GUID {{.*}} op1=4947176790635855146/>
+; COMBINED-NEXT:    <VALUE_GUID {{.*}} op1=-6591587165810580810/>
+; COMBINED-NEXT:    <VALUE_GUID {{.*}} op1=-4377693495213223786/>
 ; COMBINED-DAG:    <COMBINED_PROFILE{{ }}
-; COMBINED-DAG:    <COMBINED_ORIGINAL_NAME op0=-2012135647395072713/>
-; COMBINED-DAG:    <COMBINED_GLOBALVAR_INIT_REFS
 ; COMBINED-DAG:    <COMBINED_ORIGINAL_NAME op0=6699318081062747564/>
+; COMBINED-DAG:    <COMBINED_GLOBALVAR_INIT_REFS
+; COMBINED-DAG:    <COMBINED_ORIGINAL_NAME op0=-2012135647395072713/>
 ; COMBINED-DAG:    <COMBINED_ALIAS
 ; COMBINED-DAG:    <COMBINED_ORIGINAL_NAME op0=-4170563161550796836/>
 ; COMBINED-NEXT:  </GLOBALVAL_SUMMARY_BLOCK>
diff --git a/llvm/test/ThinLTO/X86/memprof-basic.ll b/llvm/test/ThinLTO/X86/memprof-basic.ll
index 54e01e5fcdf955..0d466830ba57d6 100644
--- a/llvm/test/ThinLTO/X86/memprof-basic.ll
+++ b/llvm/test/ThinLTO/X86/memprof-basic.ll
@@ -148,7 +148,7 @@ attributes #0 = { noinline optnone }
 ; DUMP: 		Edge from Callee [[BAR]] to Caller: [[BAZ:0x[a-z0-9]+]] AllocTypes: NotColdCold ContextIds: 1 2
 
 ; DUMP: Node [[BAZ]]
-; DUMP: 	Callee: 11481133863268513686 (_Z3barv) Clones: 0 StackIds: 2	(clone 0)
+; DUMP: 	Callee: 9832687305761716512 (_Z3barv) Clones: 0 StackIds: 2	(clone 0)
 ; DUMP: 	AllocTypes: NotColdCold
 ; DUMP: 	ContextIds: 1 2
 ; DUMP: 	CalleeEdges:
@@ -157,7 +157,7 @@ attributes #0 = { noinline optnone }
 ; DUMP: 		Edge from Callee [[BAZ]] to Caller: [[FOO:0x[a-z0-9]+]] AllocTypes: NotColdCold ContextIds: 1 2
 
 ; DUMP: Node [[FOO]]
-; DUMP: 	Callee: 1807954217441101578 (_Z3bazv) Clones: 0 StackIds: 3	(clone 0)
+; DUMP: 	Callee: 5878270615442837395 (_Z3bazv) Clones: 0 StackIds: 3	(clone 0)
 ; DUMP: 	AllocTypes: NotColdCold
 ; DUMP: 	ContextIds: 1 2
 ; DUMP: 	CalleeEdges:
@@ -167,7 +167,7 @@ attributes #0 = { noinline optnone }
 ; DUMP: 		Edge from Callee [[FOO]] to Caller: [[MAIN2:0x[a-z0-9]+]] AllocTypes: Cold ContextIds: 2
 
 ; DUMP: Node [[MAIN1]]
-; DUMP: 	Callee: 8107868197919466657 (_Z3foov) Clones: 0 StackIds: 0	(clone 0)
+; DUMP: 	Callee: 6731117468105397038 (_Z3foov) Clones: 0 StackIds: 0	(clone 0)
 ; DUMP: 	AllocTypes: NotCold
 ; DUMP: 	ContextIds: 1
 ; DUMP: 	CalleeEdges:
@@ -175,7 +175,7 @@ attributes #0 = { noinline optnone }
 ; DUMP: 	CallerEdges:
 
 ; DUMP: Node [[MAIN2]]
-; DUMP: 	Callee: 8107868197919466657 (_Z3foov) Clones: 0 StackIds: 1	(clone 0)
+; DUMP: 	Callee: 6731117468105397038 (_Z3foov) Clones: 0 StackIds: 1	(clone 0)
 ; DUMP: 	AllocTypes: Cold
 ; DUMP: 	ContextIds: 2
 ; DUMP: 	CalleeEdges:
@@ -197,7 +197,7 @@ attributes #0 = { noinline optnone }
 ; DUMP:		Clones: [[BAR2:0x[a-z0-9]+]]
 
 ; DUMP: Node [[BAZ]]
-; DUMP: 	Callee: 11481133863268513686 (_Z3barv) Clones: 0 StackIds: 2    (clone 0)
+; DUMP: 	Callee: 9832687305761716512 (_Z3barv) Clones: 0 StackIds: 2    (clone 0)
 ; DUMP: 	AllocTypes: NotCold
 ; DUMP: 	ContextIds: 1
 ; DUMP: 	CalleeEdges:
@@ -207,7 +207,7 @@ attributes #0 = { noinline optnone }
 ; DUMP:		Clones: [[BAZ2:0x[a-z0-9]+]]
 
 ; DUMP: Node [[FOO]]
-; DUMP: 	Callee: 1807954217441101578 (_Z3bazv) Clones: 0 StackIds: 3    (clone 0)
+; DUMP: 	Callee: 5878270615442837395 (_Z3bazv) Clones: 0 StackIds: 3    (clone 0)
 ; DUMP: 	AllocTypes: NotCold
 ; DUMP: 	ContextIds: 1
 ; DUMP: 	CalleeEdges:
@@ -217,7 +217,7 @@ attributes #0 = { noinline optnone }
 ; DUMP:		Clones: [[FOO2:0x[a-z0-9]+]]
 
 ; DUMP: Node [[MAIN1...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/75835


More information about the llvm-commits mailing list