llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang-codegen

Author: Mircea Trofin (mtrofin)

<details>
<summary>Changes</summary>

There is a relation between CFI and ThinLTO GUIDs that still needs to be 
disentangled first. Note that we leave the `MD_unique_id` in 
`FixedMetadataKinds.def` to avoid needing to re-number it later. Plus the 
metadata string ("guid") itself is used by ctxprof. 

---

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


120 Files Affected:

- (modified) clang/lib/CodeGen/CGCUDANV.cpp (+1-5) 
- (modified) clang/test/CodeGen/cfi-icall-trap-recover-runtime.c (+12-12) 
- (modified) clang/test/CodeGen/lto-newpm-pipeline.c (-3) 
- (modified) clang/test/CodeGenCXX/cfi-vcall-trap-recover-runtime.cpp (+6-6) 
- (modified) lld/test/ELF/lto/devirt_vcall_vis_export_dynamic.ll (+6-6) 
- (modified) lld/test/ELF/lto/devirt_vcall_vis_public.ll (+3-3) 
- (modified) lld/test/ELF/lto/devirt_vcall_vis_shared_def.ll (+6-6) 
- (modified) llvm/include/llvm/Analysis/CtxProfAnalysis.h (+31-5) 
- (modified) llvm/include/llvm/Bitcode/BitcodeReader.h (+1-3) 
- (modified) llvm/include/llvm/Bitcode/LLVMBitCodes.h (-3) 
- (modified) llvm/include/llvm/IR/GlobalObject.h (+1-1) 
- (modified) llvm/include/llvm/IR/GlobalValue.h (+5-42) 
- (modified) llvm/include/llvm/IR/Module.h (+3-28) 
- (modified) llvm/include/llvm/IR/ModuleSummaryIndex.h (+3-11) 
- (modified) llvm/include/llvm/LTO/LTO.h (-20) 
- (removed) llvm/include/llvm/Transforms/Utils/AssignGUID.h (-49) 
- (modified) llvm/lib/Analysis/CtxProfAnalysis.cpp (+39-3) 
- (modified) llvm/lib/AsmParser/LLParser.cpp (+1-5) 
- (modified) llvm/lib/Bitcode/Reader/BitcodeAnalyzer.cpp (-1) 
- (modified) llvm/lib/Bitcode/Reader/BitcodeReader.cpp (+17-61) 
- (modified) llvm/lib/Bitcode/Writer/BitcodeWriter.cpp (+3-49) 
- (modified) llvm/lib/CodeGen/GlobalMerge.cpp (+8-12) 
- (modified) llvm/lib/IR/Globals.cpp (+2-57) 
- (modified) llvm/lib/LTO/LTO.cpp (+30-45) 
- (modified) llvm/lib/LTO/LTOBackend.cpp (+2-8) 
- (modified) llvm/lib/Passes/PassBuilder.cpp (-1) 
- (modified) llvm/lib/Passes/PassBuilderPipelines.cpp (+3-7) 
- (modified) llvm/lib/Transforms/IPO/ConstantMerge.cpp (+4-4) 
- (modified) llvm/lib/Transforms/IPO/FunctionImport.cpp (+9-21) 
- (modified) llvm/lib/Transforms/IPO/ThinLTOBitcodeWriter.cpp (-2) 
- (modified) llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp (-1) 
- (modified) llvm/lib/Transforms/Instrumentation/PGOCtxProfFlattening.cpp 
(+2-2) 
- (modified) llvm/lib/Transforms/Instrumentation/PGOCtxProfLowering.cpp (+2-1) 
- (modified) llvm/lib/Transforms/Scalar/JumpTableToSwitch.cpp (+4-3) 
- (removed) llvm/lib/Transforms/Utils/AssignGUID.cpp (-41) 
- (modified) llvm/lib/Transforms/Utils/CMakeLists.txt (-1) 
- (modified) llvm/lib/Transforms/Utils/CallPromotionUtils.cpp (+3-2) 
- (modified) llvm/lib/Transforms/Utils/CloneModule.cpp (+1-5) 
- (modified) llvm/lib/Transforms/Utils/FunctionImportUtils.cpp (+2-2) 
- (modified) llvm/lib/Transforms/Utils/InlineFunction.cpp (+2-2) 
- (modified) llvm/test/Assembler/index-value-order.ll (+3-6) 
- (modified) llvm/test/Bitcode/thinlto-alias.ll (-1) 
- (modified) 
llvm/test/Bitcode/thinlto-function-summary-callgraph-partial-sample-profile-summary.ll
 (+2-3) 
- (modified) llvm/test/Bitcode/thinlto-function-summary-callgraph-pgo.ll (-1) 
- (modified) 
llvm/test/Bitcode/thinlto-function-summary-callgraph-profile-summary.ll (+2-3) 
- (modified) 
llvm/test/Bitcode/thinlto-function-summary-callgraph-sample-profile-summary.ll 
(+2-3) 
- (modified) llvm/test/Bitcode/thinlto-function-summary-callgraph.ll (-1) 
- (modified) llvm/test/Bitcode/thinlto-function-summary-refgraph.ll (-1) 
- (modified) llvm/test/Bitcode/thinlto-function-summary.ll (-1) 
- (modified) llvm/test/CodeGen/X86/fat-lto-section.ll (+1-1) 
- (modified) llvm/test/LTO/Resolution/X86/not-prevailing-alias.ll (+1-1) 
- (modified) llvm/test/LTO/Resolution/X86/not-prevailing-weak-aliasee.ll (+1-1) 
- (modified) llvm/test/Linker/funcimport2.ll (+1-1) 
- (modified) llvm/test/Other/new-pm-O0-defaults.ll (+1-2) 
- (modified) llvm/test/Other/new-pm-defaults.ll (+1-2) 
- (modified) llvm/test/Other/new-pm-thinlto-prelink-defaults.ll (+1-2) 
- (modified) llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll (+1-2) 
- (modified) llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll (-1) 
- (modified) llvm/test/ThinLTO/AArch64/aarch64_inline.ll (+1-1) 
- (modified) llvm/test/ThinLTO/X86/Inputs/cache-typeid-resolutions1.ll (+1-2) 
- (modified) llvm/test/ThinLTO/X86/Inputs/cache-typeid-resolutions2.ll (+2-4) 
- (modified) llvm/test/ThinLTO/X86/Inputs/cache-typeid-resolutions3.ll (+4-8) 
- (modified) llvm/test/ThinLTO/X86/ctor-dtor-alias.ll (+2-2) 
- (modified) llvm/test/ThinLTO/X86/ctor-dtor-alias2.ll (+2-2) 
- (modified) llvm/test/ThinLTO/X86/deadstrip.ll (+4-4) 
- (modified) llvm/test/ThinLTO/X86/devirt_function_alias.ll (+3-3) 
- (modified) llvm/test/ThinLTO/X86/devirt_function_alias2.ll (+3-3) 
- (modified) llvm/test/ThinLTO/X86/devirt_pure_virtual_base.ll (+3-3) 
- (modified) llvm/test/ThinLTO/X86/devirt_vcall_vis_public.ll (+3-3) 
- (modified) llvm/test/ThinLTO/X86/distributed_import.ll (+2-2) 
- (modified) llvm/test/ThinLTO/X86/funcattrs-prop-exported-internal.ll (+2-2) 
- (modified) llvm/test/ThinLTO/X86/funcattrs-prop-unknown.ll (+3-3) 
- (modified) llvm/test/ThinLTO/X86/funcattrs-prop-weak.ll (+1-1) 
- (modified) llvm/test/ThinLTO/X86/globals-import.ll (+2-2) 
- (modified) llvm/test/ThinLTO/X86/hidden-escaped-symbols-alt.ll (+1-1) 
- (modified) llvm/test/ThinLTO/X86/hidden-escaped-symbols.ll (+1-1) 
- (modified) llvm/test/ThinLTO/X86/import-ro-constant.ll (+1-1) 
- (modified) llvm/test/ThinLTO/X86/index-const-prop-alias.ll (+1-1) 
- (modified) llvm/test/ThinLTO/X86/index-const-prop.ll (+3-3) 
- (modified) llvm/test/ThinLTO/X86/linkonce_resolution_comdat.ll (+8-8) 
- (modified) llvm/test/ThinLTO/X86/memprof-dups.ll (+1-1) 
- (modified) llvm/test/ThinLTO/X86/memprof_callee_type_mismatch.ll (+1-1) 
- (modified) llvm/test/ThinLTO/X86/memprof_imported_internal.ll (+1-1) 
- (modified) llvm/test/ThinLTO/X86/memprof_imported_internal2.ll (+1-1) 
- (modified) llvm/test/ThinLTO/X86/prevailing_weak_globals_import.ll (+1-1) 
- (modified) llvm/test/ThinLTO/X86/visibility-elf.ll (+6-6) 
- (modified) llvm/test/ThinLTO/X86/visibility-macho.ll (+3-3) 
- (modified) llvm/test/ThinLTO/X86/weak_resolution.ll (+2-2) 
- (modified) llvm/test/ThinLTO/X86/windows-vftable.ll (+2-2) 
- (modified) llvm/test/ThinLTO/X86/writeonly.ll (+2-2) 
- (removed) llvm/test/Transforms/AssignGUID/assign_guid.ll (-18) 
- (modified) llvm/test/Transforms/ConstantMerge/merge-dbg.ll (-1) 
- (modified) llvm/test/Transforms/EmbedBitcode/embed-wpd.ll (+1-1) 
- (modified) llvm/test/Transforms/EmbedBitcode/embed.ll (+6-7) 
- (modified) 
llvm/test/Transforms/FunctionImport/funcimport-debug-retained-nodes.ll (+1-2) 
- (modified) llvm/test/Transforms/FunctionImport/funcimport.ll (+12-12) 
- (removed) llvm/test/Transforms/GlobalMerge/guid.ll (-38) 
- (modified) llvm/test/Transforms/LowerTypeTests/cfi-icall-alias.ll (+1-1) 
- (modified) llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll 
(+2-2) 
- (modified) 
llvm/test/Transforms/PhaseOrdering/speculative-devirt-then-inliner.ll (+1-1) 
- (modified) llvm/test/Transforms/SampleProfile/ctxsplit.ll (+4-4) 
- (modified) llvm/test/Transforms/ThinLTOBitcodeWriter/split-internal-typeid.ll 
(+1-1) 
- (modified) llvm/test/Transforms/ThinLTOBitcodeWriter/split-internal1.ll 
(+1-1) 
- (modified) llvm/test/Transforms/ThinLTOBitcodeWriter/split-internal2.ll 
(+4-5) 
- (modified) llvm/test/Transforms/ThinLTOBitcodeWriter/split-vfunc-internal.ll 
(+1-1) 
- (modified) llvm/test/Transforms/ThinLTOBitcodeWriter/split-vfunc.ll (+8-8) 
- (modified) llvm/test/Transforms/ThinLTOBitcodeWriter/split.ll (+2-2) 
- (modified) llvm/test/Transforms/ThinLTOBitcodeWriter/unsplittable.ll (+1-1) 
- (modified) llvm/test/Transforms/WholeProgramDevirt/branch-funnel-profile.ll 
(+22-22) 
- (modified) llvm/test/Transforms/WholeProgramDevirt/export-single-impl.ll 
(+2-2) 
- (modified) llvm/test/Transforms/WholeProgramDevirt/export-vcp.ll (+3-3) 
- (modified) llvm/test/tools/gold/X86/devirt_vcall_vis_export_dynamic.ll (+2-2) 
- (modified) llvm/test/tools/gold/X86/devirt_vcall_vis_public.ll (+1-1) 
- (modified) llvm/test/tools/gold/X86/devirt_vcall_vis_shared_def.ll (+2-2) 
- (modified) llvm/test/tools/gold/X86/thinlto_weak_library.ll (+1-1) 
- (modified) llvm/test/tools/gold/X86/thinlto_weak_resolution.ll (+2-2) 
- (modified) llvm/test/tools/gold/X86/v1.16/devirt_vcall_vis_export_dynamic.ll 
(+1-1) 
- (modified) llvm/tools/llvm-link/llvm-link.cpp (+1-2) 
- (modified) llvm/tools/opt/NewPMDriver.cpp (-8) 
- (modified) llvm/tools/opt/optdriver.cpp (-7) 


``````````diff
diff --git a/clang/lib/CodeGen/CGCUDANV.cpp b/clang/lib/CodeGen/CGCUDANV.cpp
index a727a006969d8..b74de7e064c35 100644
--- a/clang/lib/CodeGen/CGCUDANV.cpp
+++ b/clang/lib/CodeGen/CGCUDANV.cpp
@@ -25,7 +25,6 @@
 #include "llvm/IR/BasicBlock.h"
 #include "llvm/IR/Constants.h"
 #include "llvm/IR/DerivedTypes.h"
-#include "llvm/IR/GlobalValue.h"
 #include "llvm/IR/ReplaceConstant.h"
 #include "llvm/Support/Format.h"
 #include "llvm/Support/VirtualFileSystem.h"
@@ -1015,10 +1014,7 @@ llvm::Function 
*CGNVCUDARuntime::makeModuleCtorFunction() {
     // Generate a unique module ID.
     SmallString<64> ModuleID;
     llvm::raw_svector_ostream OS(ModuleID);
-    OS << ModuleIDPrefix
-       << llvm::format("%" PRIx64,
-                       llvm::GlobalValue::getGUIDAssumingExternalLinkage(
-                           FatbinWrapper->getName()));
+    OS << ModuleIDPrefix << llvm::format("%" PRIx64, FatbinWrapper->getGUID());
     llvm::Constant *ModuleIDConstant = makeConstantArray(
         std::string(ModuleID), "", ModuleIDSectionName, 32, /*AddNull=*/true);
 
diff --git a/clang/test/CodeGen/cfi-icall-trap-recover-runtime.c 
b/clang/test/CodeGen/cfi-icall-trap-recover-runtime.c
index 5717fc66488af..2c44842f9d28e 100644
--- a/clang/test/CodeGen/cfi-icall-trap-recover-runtime.c
+++ b/clang/test/CodeGen/cfi-icall-trap-recover-runtime.c
@@ -15,32 +15,32 @@
 
 
 // TRAP-LABEL: define hidden void @f(
-// TRAP-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type 
[[META7:![0-9]+]]
+// TRAP-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type 
[[META7:![0-9]+]] {
 // TRAP-NEXT:  [[ENTRY:.*:]]
 // TRAP-NEXT:    ret void
 //
 // ABORT-LABEL: define hidden void @f(
-// ABORT-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type 
[[META7:![0-9]+]]
+// ABORT-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type 
[[META7:![0-9]+]] {
 // ABORT-NEXT:  [[ENTRY:.*:]]
 // ABORT-NEXT:    ret void
 //
 // RECOVER-LABEL: define hidden void @f(
-// RECOVER-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type 
[[META7:![0-9]+]]
+// RECOVER-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type 
[[META7:![0-9]+]] {
 // RECOVER-NEXT:  [[ENTRY:.*:]]
 // RECOVER-NEXT:    ret void
 //
 // ABORT_MIN-LABEL: define hidden void @f(
-// ABORT_MIN-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type 
[[META7:![0-9]+]]
+// ABORT_MIN-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type 
[[META7:![0-9]+]] {
 // ABORT_MIN-NEXT:  [[ENTRY:.*:]]
 // ABORT_MIN-NEXT:    ret void
 //
 // RECOVER_MIN-LABEL: define hidden void @f(
-// RECOVER_MIN-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type 
[[META7:![0-9]+]]
+// RECOVER_MIN-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type 
[[META7:![0-9]+]] {
 // RECOVER_MIN-NEXT:  [[ENTRY:.*:]]
 // RECOVER_MIN-NEXT:    ret void
 //
 // PRESERVE_MIN-LABEL: define hidden void @f(
-// PRESERVE_MIN-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type 
[[META7:![0-9]+]]
+// PRESERVE_MIN-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type 
[[META7:![0-9]+]] {
 // PRESERVE_MIN-NEXT:  [[ENTRY:.*:]]
 // PRESERVE_MIN-NEXT:    ret void
 //
@@ -50,7 +50,7 @@ void f() {
 void xf();
 
 // TRAP-LABEL: define hidden void @g(
-// TRAP-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] !type 
[[META9:![0-9]+]]
+// TRAP-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] !type 
[[META9:![0-9]+]] {
 // TRAP-NEXT:  [[ENTRY:.*:]]
 // TRAP-NEXT:    [[B_ADDR:%.*]] = alloca i32, align 4
 // TRAP-NEXT:    [[FP:%.*]] = alloca ptr, align 8
@@ -71,7 +71,7 @@ void xf();
 // TRAP-NEXT:    ret void
 //
 // ABORT-LABEL: define hidden void @g(
-// ABORT-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] !type 
[[META9:![0-9]+]]
+// ABORT-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] !type 
[[META9:![0-9]+]] {
 // ABORT-NEXT:  [[ENTRY:.*:]]
 // ABORT-NEXT:    [[B_ADDR:%.*]] = alloca i32, align 4
 // ABORT-NEXT:    [[FP:%.*]] = alloca ptr, align 8
@@ -93,7 +93,7 @@ void xf();
 // ABORT-NEXT:    ret void
 //
 // RECOVER-LABEL: define hidden void @g(
-// RECOVER-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] 
!type [[META9:![0-9]+]]
+// RECOVER-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] 
!type [[META9:![0-9]+]] {
 // RECOVER-NEXT:  [[ENTRY:.*:]]
 // RECOVER-NEXT:    [[B_ADDR:%.*]] = alloca i32, align 4
 // RECOVER-NEXT:    [[FP:%.*]] = alloca ptr, align 8
@@ -115,7 +115,7 @@ void xf();
 // RECOVER-NEXT:    ret void
 //
 // ABORT_MIN-LABEL: define hidden void @g(
-// ABORT_MIN-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] 
!type [[META9:![0-9]+]]
+// ABORT_MIN-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] 
!type [[META9:![0-9]+]] {
 // ABORT_MIN-NEXT:  [[ENTRY:.*:]]
 // ABORT_MIN-NEXT:    [[B_ADDR:%.*]] = alloca i32, align 4
 // ABORT_MIN-NEXT:    [[FP:%.*]] = alloca ptr, align 8
@@ -136,7 +136,7 @@ void xf();
 // ABORT_MIN-NEXT:    ret void
 //
 // RECOVER_MIN-LABEL: define hidden void @g(
-// RECOVER_MIN-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] 
!type [[META9:![0-9]+]]
+// RECOVER_MIN-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] 
!type [[META9:![0-9]+]] {
 // RECOVER_MIN-NEXT:  [[ENTRY:.*:]]
 // RECOVER_MIN-NEXT:    [[B_ADDR:%.*]] = alloca i32, align 4
 // RECOVER_MIN-NEXT:    [[FP:%.*]] = alloca ptr, align 8
@@ -157,7 +157,7 @@ void xf();
 // RECOVER_MIN-NEXT:    ret void
 //
 // PRESERVE_MIN-LABEL: define hidden void @g(
-// PRESERVE_MIN-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type 
[[META8:![0-9]+]] !type [[META9:![0-9]+]]
+// PRESERVE_MIN-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type 
[[META8:![0-9]+]] !type [[META9:![0-9]+]] {
 // PRESERVE_MIN-NEXT:  [[ENTRY:.*:]]
 // PRESERVE_MIN-NEXT:    [[B_ADDR:%.*]] = alloca i32, align 4
 // PRESERVE_MIN-NEXT:    [[FP:%.*]] = alloca ptr, align 8
diff --git a/clang/test/CodeGen/lto-newpm-pipeline.c 
b/clang/test/CodeGen/lto-newpm-pipeline.c
index c8ee5e949ae87..ea9784a76f923 100644
--- a/clang/test/CodeGen/lto-newpm-pipeline.c
+++ b/clang/test/CodeGen/lto-newpm-pipeline.c
@@ -34,7 +34,6 @@
 // CHECK-FULL-O0-NEXT: Running pass: CoroConditionalWrapper
 // CHECK-FULL-O0-NEXT: Running pass: CanonicalizeAliasesPass
 // CHECK-FULL-O0-NEXT: Running pass: NameAnonGlobalPass
-// CHECK-FULL-O0-NEXT: Running pass: AssignGUIDPass
 // CHECK-FULL-O0-NEXT: Running pass: AnnotationRemarksPass
 // CHECK-FULL-O0-NEXT: Running analysis: TargetLibraryAnalysis
 // CHECK-FULL-O0-NEXT: Running pass: VerifierPass
@@ -49,7 +48,6 @@
 // CHECK-THIN-O0-NEXT: Running pass: CoroConditionalWrapper
 // CHECK-THIN-O0-NEXT: Running pass: CanonicalizeAliasesPass
 // CHECK-THIN-O0-NEXT: Running pass: NameAnonGlobalPass
-// CHECK-THIN-O0-NEXT: Running pass: AssignGUIDPass
 // CHECK-THIN-O0-NEXT: Running pass: AnnotationRemarksPass
 // CHECK-THIN-O0-NEXT: Running analysis: TargetLibraryAnalysis
 // CHECK-THIN-O0-NEXT: Running pass: VerifierPass
@@ -66,7 +64,6 @@
 // CHECK-THIN-OPTIMIZED-NOT: Running pass: LoopVectorizePass
 // CHECK-THIN-OPTIMIZED: Running pass: CanonicalizeAliasesPass
 // CHECK-THIN-OPTIMIZED: Running pass: NameAnonGlobalPass
-// CHECK-THIN-OPTIMIZED: Running pass: AssignGUIDPass
 // CHECK-THIN-OPTIMIZED: Running pass: ThinLTOBitcodeWriterPass
 
 void Foo(void) {}
diff --git a/clang/test/CodeGenCXX/cfi-vcall-trap-recover-runtime.cpp 
b/clang/test/CodeGenCXX/cfi-vcall-trap-recover-runtime.cpp
index a1e1563a4f38d..2451d31e9a489 100644
--- a/clang/test/CodeGenCXX/cfi-vcall-trap-recover-runtime.cpp
+++ b/clang/test/CodeGenCXX/cfi-vcall-trap-recover-runtime.cpp
@@ -19,7 +19,7 @@ struct S1 {
 };
 
 // TRAP-LABEL: define hidden void @_Z3s1fP2S1(
-// TRAP-SAME: ptr noundef [[S1:%.*]]) #[[ATTR0:[0-9]+]]
+// TRAP-SAME: ptr noundef [[S1:%.*]]) #[[ATTR0:[0-9]+]] {
 // TRAP-NEXT:  [[ENTRY:.*:]]
 // TRAP-NEXT:    [[S1_ADDR:%.*]] = alloca ptr, align 8
 // TRAP-NEXT:    store ptr [[S1]], ptr [[S1_ADDR]], align 8
@@ -37,7 +37,7 @@ struct S1 {
 // TRAP-NEXT:    ret void
 //
 // ABORT-LABEL: define hidden void @_Z3s1fP2S1(
-// ABORT-SAME: ptr noundef [[S1:%.*]]) #[[ATTR0:[0-9]+]]
+// ABORT-SAME: ptr noundef [[S1:%.*]]) #[[ATTR0:[0-9]+]] {
 // ABORT-NEXT:  [[ENTRY:.*:]]
 // ABORT-NEXT:    [[S1_ADDR:%.*]] = alloca ptr, align 8
 // ABORT-NEXT:    store ptr [[S1]], ptr [[S1_ADDR]], align 8
@@ -58,7 +58,7 @@ struct S1 {
 // ABORT-NEXT:    ret void
 //
 // RECOVER-LABEL: define hidden void @_Z3s1fP2S1(
-// RECOVER-SAME: ptr noundef [[S1:%.*]]) #[[ATTR0:[0-9]+]]
+// RECOVER-SAME: ptr noundef [[S1:%.*]]) #[[ATTR0:[0-9]+]] {
 // RECOVER-NEXT:  [[ENTRY:.*:]]
 // RECOVER-NEXT:    [[S1_ADDR:%.*]] = alloca ptr, align 8
 // RECOVER-NEXT:    store ptr [[S1]], ptr [[S1_ADDR]], align 8
@@ -79,7 +79,7 @@ struct S1 {
 // RECOVER-NEXT:    ret void
 //
 // ABORT_MIN-LABEL: define hidden void @_Z3s1fP2S1(
-// ABORT_MIN-SAME: ptr noundef [[S1:%.*]]) #[[ATTR0:[0-9]+]]
+// ABORT_MIN-SAME: ptr noundef [[S1:%.*]]) #[[ATTR0:[0-9]+]] {
 // ABORT_MIN-NEXT:  [[ENTRY:.*:]]
 // ABORT_MIN-NEXT:    [[S1_ADDR:%.*]] = alloca ptr, align 8
 // ABORT_MIN-NEXT:    store ptr [[S1]], ptr [[S1_ADDR]], align 8
@@ -98,7 +98,7 @@ struct S1 {
 // ABORT_MIN-NEXT:    ret void
 //
 // RECOVER_MIN-LABEL: define hidden void @_Z3s1fP2S1(
-// RECOVER_MIN-SAME: ptr noundef [[S1:%.*]]) #[[ATTR0:[0-9]+]]
+// RECOVER_MIN-SAME: ptr noundef [[S1:%.*]]) #[[ATTR0:[0-9]+]] {
 // RECOVER_MIN-NEXT:  [[ENTRY:.*:]]
 // RECOVER_MIN-NEXT:    [[S1_ADDR:%.*]] = alloca ptr, align 8
 // RECOVER_MIN-NEXT:    store ptr [[S1]], ptr [[S1_ADDR]], align 8
@@ -117,7 +117,7 @@ struct S1 {
 // RECOVER_MIN-NEXT:    ret void
 //
 // PRESERVE_MIN-LABEL: define hidden void @_Z3s1fP2S1(
-// PRESERVE_MIN-SAME: ptr noundef [[S1:%.*]]) #[[ATTR0:[0-9]+]]
+// PRESERVE_MIN-SAME: ptr noundef [[S1:%.*]]) #[[ATTR0:[0-9]+]] {
 // PRESERVE_MIN-NEXT:  [[ENTRY:.*:]]
 // PRESERVE_MIN-NEXT:    [[S1_ADDR:%.*]] = alloca ptr, align 8
 // PRESERVE_MIN-NEXT:    store ptr [[S1]], ptr [[S1_ADDR]], align 8
diff --git a/lld/test/ELF/lto/devirt_vcall_vis_export_dynamic.ll 
b/lld/test/ELF/lto/devirt_vcall_vis_export_dynamic.ll
index 9b9c7891a6da6..bcb92a1beb17b 100644
--- a/lld/test/ELF/lto/devirt_vcall_vis_export_dynamic.ll
+++ b/lld/test/ELF/lto/devirt_vcall_vis_export_dynamic.ll
@@ -5,7 +5,7 @@
 
 ;; Index based WPD
 ;; Generate unsplit module with summary for ThinLTO index-based WPD.
-; RUN: opt --passes=assign-guid --thinlto-bc -o %t2.o %s
+; RUN: opt --thinlto-bc -o %t2.o %s
 ; RUN: ld.lld %t2.o -o %t3 -save-temps --lto-whole-program-visibility \
 ; RUN:   -mllvm -pass-remarks=. 2>&1 | FileCheck %s --check-prefix=REMARK
 ; RUN: llvm-dis %t2.o.4.opt.bc -o - | FileCheck %s --check-prefix=CHECK-IR
@@ -16,13 +16,13 @@
 
 ;; Hybrid WPD
 ;; Generate split module with summary for hybrid Thin/Regular LTO WPD.
-; RUN: opt --passes=assign-guid --thinlto-bc --thinlto-split-lto-unit -o %t.o 
%s
+; RUN: opt --thinlto-bc --thinlto-split-lto-unit -o %t.o %s
 ; RUN: ld.lld %t.o -o %t3 -save-temps --lto-whole-program-visibility \
 ; RUN:   -mllvm -pass-remarks=. 2>&1 | FileCheck %s --check-prefix=REMARK
 ; RUN: llvm-dis %t.o.4.opt.bc -o - | FileCheck %s --check-prefix=CHECK-IR
 
 ;; Regular LTO WPD
-; RUN: opt --passes=assign-guid -o %t4.o %s
+; RUN: opt -o %t4.o %s
 ; RUN: ld.lld %t4.o -o %t3 -save-temps --lto-whole-program-visibility \
 ; RUN:   -mllvm -pass-remarks=. 2>&1 | FileCheck %s --check-prefix=REMARK
 ; RUN: llvm-dis %t3.0.4.opt.bc -o - | FileCheck %s --check-prefix=CHECK-IR
@@ -107,19 +107,19 @@
 ;; preemption, even without any options.
 
 ;; Index based WPD
-; RUN: opt --passes=assign-guid -relocation-model=pic --thinlto-bc -o %t5.o %s
+; RUN: opt -relocation-model=pic --thinlto-bc -o %t5.o %s
 ; RUN: ld.lld %t5.o -o %t5.so -shared
 ; RUN: ld.lld %t5.o %t5.so -o %t5 -save-temps --lto-whole-program-visibility \
 ; RUN:   -mllvm -pass-remarks=. 2>&1 | FileCheck /dev/null 
--implicit-check-not single-impl --allow-empty
 
 ;; Hybrid WPD
-; RUN: opt --passes=assign-guid -relocation-model=pic --thinlto-bc 
--thinlto-split-lto-unit -o %t5.o %s
+; RUN: opt -relocation-model=pic --thinlto-bc --thinlto-split-lto-unit -o 
%t5.o %s
 ; RUN: ld.lld %t5.o -o %t5.so -shared
 ; RUN: ld.lld %t5.o %t5.so -o %t5 -save-temps --lto-whole-program-visibility \
 ; RUN:   -mllvm -pass-remarks=. 2>&1 | FileCheck /dev/null 
--implicit-check-not single-impl --allow-empty
 
 ;; Regular LTO WPD
-; RUN: opt --passes=assign-guid -relocation-model=pic -o %t5.o %s
+; RUN: opt -relocation-model=pic -o %t5.o %s
 ; RUN: ld.lld %t5.o -o %t5.so -shared
 ; RUN: ld.lld %t5.o %t5.so -o %t5 -save-temps --lto-whole-program-visibility \
 ; RUN:   -mllvm -pass-remarks=. 2>&1 | FileCheck /dev/null 
--implicit-check-not single-impl --allow-empty
diff --git a/lld/test/ELF/lto/devirt_vcall_vis_public.ll 
b/lld/test/ELF/lto/devirt_vcall_vis_public.ll
index 0030e5804af81..a827fea465fd7 100644
--- a/lld/test/ELF/lto/devirt_vcall_vis_public.ll
+++ b/lld/test/ELF/lto/devirt_vcall_vis_public.ll
@@ -3,20 +3,20 @@
 
 ;; Index based WPD
 ;; Generate unsplit module with summary for ThinLTO index-based WPD.
-; RUN: opt --passes=assign-guid --thinlto-bc -o %t2.o %s
+; RUN: opt --thinlto-bc -o %t2.o %s
 ; RUN: ld.lld %t2.o -o %t3 -save-temps --lto-whole-program-visibility \
 ; RUN:   -mllvm -pass-remarks=. 2>&1 | FileCheck %s --check-prefix=REMARK
 ; RUN: llvm-dis %t2.o.4.opt.bc -o - | FileCheck %s --check-prefix=CHECK-IR
 
 ;; Hybrid WPD
 ;; Generate split module with summary for hybrid Thin/Regular LTO WPD.
-; RUN: opt --passes=assign-guid --thinlto-bc --thinlto-split-lto-unit -o %t.o 
%s
+; RUN: opt --thinlto-bc --thinlto-split-lto-unit -o %t.o %s
 ; RUN: ld.lld %t.o -o %t3 -save-temps --lto-whole-program-visibility \
 ; RUN:   -mllvm -pass-remarks=. 2>&1 | FileCheck %s --check-prefix=REMARK
 ; RUN: llvm-dis %t.o.4.opt.bc -o - | FileCheck %s --check-prefix=CHECK-IR
 
 ;; Regular LTO WPD
-; RUN: opt --passes=assign-guid -o %t4.o %s
+; RUN: opt -o %t4.o %s
 ; RUN: ld.lld %t4.o -o %t3 -save-temps --lto-whole-program-visibility \
 ; RUN:   -mllvm -pass-remarks=. 2>&1 | FileCheck %s --check-prefix=REMARK
 ; RUN: llvm-dis %t3.0.4.opt.bc -o - | FileCheck %s --check-prefix=CHECK-IR
diff --git a/lld/test/ELF/lto/devirt_vcall_vis_shared_def.ll 
b/lld/test/ELF/lto/devirt_vcall_vis_shared_def.ll
index b77dde97a2c05..a61e290bb0eb1 100644
--- a/lld/test/ELF/lto/devirt_vcall_vis_shared_def.ll
+++ b/lld/test/ELF/lto/devirt_vcall_vis_shared_def.ll
@@ -6,23 +6,23 @@
 
 ;; Index based WPD
 ;; Generate unsplit module with summary for ThinLTO index-based WPD.
-; RUN: opt --passes=assign-guid --thinlto-bc -o %t1a.o %s
-; RUN: opt --passes=assign-guid --thinlto-bc -o %t2a.o 
%S/Inputs/devirt_vcall_vis_shared_def.ll
+; RUN: opt --thinlto-bc -o %t1a.o %s
+; RUN: opt --thinlto-bc -o %t2a.o %S/Inputs/devirt_vcall_vis_shared_def.ll
 ; RUN: ld.lld %t1a.o %t2a.o -o %t3a -save-temps --lto-whole-program-visibility 
\
 ; RUN:   -mllvm -pass-remarks=. 2>&1 | FileCheck %s --check-prefix=REMARK
 ; RUN: llvm-dis %t1a.o.4.opt.bc -o - | FileCheck %s --check-prefix=CHECK-IR
 
 ;; Hybrid WPD
 ;; Generate split module with summary for hybrid Thin/Regular LTO WPD.
-; RUN: opt --passes=assign-guid --thinlto-bc --thinlto-split-lto-unit -o 
%t1b.o %s
-; RUN: opt --passes=assign-guid --thinlto-bc --thinlto-split-lto-unit -o 
%t2b.o %S/Inputs/devirt_vcall_vis_shared_def.ll
+; RUN: opt --thinlto-bc --thinlto-split-lto-unit -o %t1b.o %s
+; RUN: opt --thinlto-bc --thinlto-split-lto-unit -o %t2b.o 
%S/Inputs/devirt_vcall_vis_shared_def.ll
 ; RUN: ld.lld %t1b.o %t2b.o -o %t3b -save-temps --lto-whole-program-visibility 
\
 ; RUN:   -mllvm -pass-remarks=. 2>&1 | FileCheck %s --check-prefix=REMARK
 ; RUN: llvm-dis %t1b.o.4.opt.bc -o - | FileCheck %s --check-prefix=CHECK-IR
 
 ;; Regular LTO WPD
-; RUN: opt --passes=assign-guid -o %t1c.o %s
-; RUN: opt --passes=assign-guid -o %t2c.o 
%S/Inputs/devirt_vcall_vis_shared_def.ll
+; RUN: opt -o %t1c.o %s
+; RUN: opt -o %t2c.o %S/Inputs/devirt_vcall_vis_shared_def.ll
 ; RUN: ld.lld %t1c.o %t2c.o -o %t3c -save-temps --lto-whole-program-visibility 
\
 ; RUN:   -mllvm -pass-remarks=. 2>&1 | FileCheck %s --check-prefix=REMARK
 ; RUN: llvm-dis %t3c.0.4.opt.bc -o - | FileCheck %s --check-prefix=CHECK-IR
diff --git a/llvm/include/llvm/Analysis/CtxProfAnalysis.h 
b/llvm/include/llvm/Analysis/CtxProfAnalysis.h
index d2a1c07bd58e4..8260b95026ad2 100644
--- a/llvm/include/llvm/Analysis/CtxProfAnalysis.h
+++ b/llvm/include/llvm/Analysis/CtxProfAnalysis.h
@@ -47,6 +47,9 @@ class PGOContextualProfile {
   // we'll need when we maintain the profiles during IPO transformations.
   std::map<GlobalValue::GUID, FunctionInfo> FuncInfo;
 
+  /// Get the GUID of this Function if it's defined in this module.
+  LLVM_ABI GlobalValue::GUID getDefinedFunctionGUID(const Function &F) const;
+
   // This is meant to be constructed from CtxProfAnalysis, which will also set
   // its state piecemeal.
   PGOContextualProfile() = default;
@@ -65,7 +68,9 @@ class PGOContextualProfile {
 
   LLVM_ABI bool isInSpecializedModule() const;
 
-  bool isFunctionKnown(const Function &F) const { return !F.isDeclaration(); }
+  bool isFunctionKnown(const Function &F) const {
+    return getDefinedFunctionGUID(F) != 0;
+  }
 
   StringRef getFunctionName(GlobalValue::GUID GUID) const {
     auto It = FuncInfo.find(GUID);
@@ -76,22 +81,22 @@ class PGOContextualProfile {
 
   uint32_t getNumCounters(const Function &F) const {
     assert(isFunctionKnown(F));
-    return FuncInfo.find(F.getGUID())->second.NextCounterIndex;
+    return FuncInfo.find(getDefinedFunctionGUID(F))->second.NextCounterIndex;
   }
 
   uint32_t getNumCallsites(const Function &F) const {
     assert(isFunctionKnown(F));
-    return FuncInfo.find(F.getGUID())->second.NextCallsiteIndex;
+    return FuncInfo.find(getDefinedFunctionGUID(F))->second.NextCallsiteIndex;
   }
 
   uint32_t allocateNextCounterIndex(const Function &F) {
     assert(isFunctionKnown(F));
-    return FuncInfo.find(F.getGUID())->second.NextCounterIndex++;
+    return FuncInfo.find(getDefinedFunctionGUID(F))->second.NextCounterIndex++;
   }
 
   uint32_t allocateNextCallsiteIndex(const Function &F) {
     assert(isFunctionKnown(F));
-    return FuncInfo.find(F.getGUID())->second.NextCallsiteIndex++;
+    return 
FuncInfo.find(getDefinedFunctionGUID(F))->second.NextCallsiteIndex++;
   }
 
   using ConstVisitor = function_ref<void(const PGOCtxProfContext &)>;
@@ -182,5 +187,26 @@ class ProfileAnnotator {
   LLVM_ABI ~ProfileAnnotator();
 };
 
+/// Assign a GUID to functions as metadata. GUID calculation takes linkage into
+/// account, which may change especially through and after thinlto. By
+/// pre-computing and assigning as metadata, this mechanism is resilient to 
such
+/// changes (as well as name changes e.g. suffix ".llvm." additions).
+
+// FIXME(mtrofin): we can generalize this mechanism to calculate a GUID early 
in
+// the pass pipeline, associate it with any Global Value, and then use it for
+// PGO and ThinLTO.
+// At that point, this should be moved elsewhere.
+class AssignGUIDPass : public OptionalPassInfoMixin<AssignGUIDPass> {
+public:
+  explicit AssignGUIDPass() = default;
+
+  /// Assign a GUID *if* one is not already assign, as a function metadata 
named
+  /// `GUIDMetadataName`.
+  LLVM_ABI PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
+  LLVM_ABI static const char *GUIDMetadataName;
+  // This should become GlobalValue::getGUID
+  LLVM_ABI static uint64_t getGUID(const Function &F);
+};
+
 } // namespace llvm
 #endif // LLVM_ANALYSIS_CTXPROFANALYSIS_H
diff --git a/llvm/include/llvm/Bitcode/BitcodeReader.h 
b/llvm/include/llvm/Bitcode/BitcodeReader.h
index b7cab51857f0b..772ca82019278 100644
--- a/llvm/include/llvm/Bitcode/BitcodeReader.h
+++ b/llvm/include/llvm/Bitcode/BitcodeReader.h
@@ -17,7 +17,6 @@
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Bitstream/BitCodeEnums.h"
 #include "llvm/IR/GlobalValue.h"
-#include "llvm/IR/ModuleSummaryIndex.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/Endian.h"
 #include "llvm/Support/Error.h"
@@ -166,8 +165,7 @@ struct ParserCallbacks {
     /// into CombinedIndex.
     LLVM_ABI Error
     readSummary(ModuleSummaryIndex &CombinedIndex, StringRef ModulePath,
-                std::function<bool(StringRef)> IsPrevailing = nullptr,
-                std::function<void(ValueInfo)> OnValueInfo = nullptr);
+                std::function<bool(GlobalValue::GUID)> IsPrevailing = nullptr);
   };
 
   struct BitcodeFileContents {
diff --git a/llvm/include/llvm/Bitcode/LL...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/201194
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to