Thanks to visit codestin.com
Credit goes to github.com

Skip to content

[MemProf] Fix incorrect VP metadata update during ICP promotion#201658

Merged
teresajohnson merged 1 commit into
llvm:mainfrom
teresajohnson:memprof_vp_md_update
Jun 4, 2026
Merged

[MemProf] Fix incorrect VP metadata update during ICP promotion#201658
teresajohnson merged 1 commit into
llvm:mainfrom
teresajohnson:memprof_vp_md_update

Conversation

@teresajohnson
Copy link
Copy Markdown
Contributor

Track unpromoted candidates explicitly when performing ICP during MemProf
context disambiguation. Previously, the code assumed that the first N
candidates were always the ones promoted, which led to incorrect metadata
on the fallback indirect call if a candidate was skipped (e.g. due to
missing definition or being illegal to promote).

Track unpromoted candidates explicitly when performing ICP during MemProf
context disambiguation. Previously, the code assumed that the first N
candidates were always the ones promoted, which led to incorrect metadata
on the fallback indirect call if a candidate was skipped (e.g. due to
missing definition or being illegal to promote).
@llvmorg-github-actions llvmorg-github-actions Bot added LTO Link time optimization (regular/full LTO or ThinLTO) llvm:transforms labels Jun 4, 2026
@llvmorg-github-actions
Copy link
Copy Markdown

@llvm/pr-subscribers-lto

Author: Teresa Johnson (teresajohnson)

Changes

Track unpromoted candidates explicitly when performing ICP during MemProf
context disambiguation. Previously, the code assumed that the first N
candidates were always the ones promoted, which led to incorrect metadata
on the fallback indirect call if a candidate was skipped (e.g. due to
missing definition or being illegal to promote).


Full diff: https://github.com/llvm/llvm-project/pull/201658.diff

2 Files Affected:

  • (modified) llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp (+6-6)
  • (added) llvm/test/ThinLTO/X86/memprof-icp-metadata.ll (+96)
diff --git a/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp b/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
index d02e67a995ec6..ac93576391aff 100644
--- a/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
+++ b/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
@@ -6208,8 +6208,8 @@ void MemProfContextDisambiguation::performICP(
     auto *CB = Info.CB;
     auto CallsiteIndex = Info.CallsiteInfoStartIndex;
     auto TotalCount = Info.TotalCount;
-    unsigned NumPromoted = 0;
     unsigned NumClones = 0;
+    SmallVector<InstrProfValueData, 8> RemainingCandidates;
 
     for (auto &Candidate : Info.CandidateProfileData) {
       auto &StackNode = AllCallsites[CallsiteIndex++];
@@ -6238,6 +6238,7 @@ void MemProfContextDisambiguation::performICP(
         // FIXME: See if we can use the new declaration importing support to
         // at least get the declarations imported for this case. Hot indirect
         // targets should have been imported normally, however.
+        RemainingCandidates.push_back(Candidate);
         continue;
       }
 
@@ -6251,6 +6252,7 @@ void MemProfContextDisambiguation::performICP(
                  << " with count of " << ore::NV("TotalCount", TotalCount)
                  << ": " << Reason;
         });
+        RemainingCandidates.push_back(Candidate);
         continue;
       }
 
@@ -6304,10 +6306,9 @@ void MemProfContextDisambiguation::performICP(
 
       // Update TotalCount (all clones should get same count above)
       TotalCount -= Candidate.Count;
-      NumPromoted++;
     }
     // Adjust the MD.prof metadata for all clones, now that we have the new
-    // TotalCount and the number promoted.
+    // TotalCount and the remaining candidates.
     CallBase *CBClone = CB;
     for (unsigned J = 0; J < NumClones; J++) {
       // If the VMap is empty, this clone was a duplicate of another and was
@@ -6322,9 +6323,8 @@ void MemProfContextDisambiguation::performICP(
       // If all promoted, we don't need the MD.prof metadata.
       // Otherwise we need update with the un-promoted records back.
       if (TotalCount != 0)
-        annotateValueSite(
-            M, *CBClone, ArrayRef(Info.CandidateProfileData).slice(NumPromoted),
-            TotalCount, IPVK_IndirectCallTarget, Info.NumCandidates);
+        annotateValueSite(M, *CBClone, RemainingCandidates, TotalCount,
+                          IPVK_IndirectCallTarget, Info.NumCandidates);
     }
   }
 }
diff --git a/llvm/test/ThinLTO/X86/memprof-icp-metadata.ll b/llvm/test/ThinLTO/X86/memprof-icp-metadata.ll
new file mode 100644
index 0000000000000..5eb2af0abddc6
--- /dev/null
+++ b/llvm/test/ThinLTO/X86/memprof-icp-metadata.ll
@@ -0,0 +1,96 @@
+;; Test that MemProf ICP correctly updates MD_prof metadata for the fallback
+;; call when some candidates are skipped during promotion.
+
+; REQUIRES: asserts
+
+; RUN: split-file %s %t
+; RUN: opt -thinlto-bc %t/main.ll -o %t/main.o
+; RUN: opt -thinlto-bc %t/foo.ll -o %t/foo.o
+
+;; Perform ThinLTO. We provide the definition for _ZN2B03barEj but not
+;;_ZN1B3barEj. With -memprof-require-definition-for-promotion, _ZN1B3barEj
+;; should be skipped and _ZN2B03barEj should be promoted.
+; RUN: llvm-lto2 run %t/main.o %t/foo.o -enable-memprof-context-disambiguation \
+; RUN:	-enable-memprof-indirect-call-support=true \
+; RUN:  -supports-hot-cold-new \
+; RUN:  -r=%t/foo.o,_Z3fooR2B0j,plx \
+; RUN:  -r=%t/foo.o,_ZN2B03barEj, \
+; RUN:  -r=%t/main.o,main,plx \
+; RUN:  -r=%t/main.o,_Z3fooR2B0j, \
+; RUN:  -r=%t/main.o,_ZN2B03barEj,plx \
+; RUN:  -r=%t/main.o,_Znwm, \
+; RUN:	-thinlto-threads=1 \
+; RUN:  -pass-remarks=memprof-context-disambiguation \
+; RUN:  -save-temps \
+; RUN:  -memprof-require-definition-for-promotion \
+; RUN:  -o %t.out 2>&1 | FileCheck %s --check-prefix=REMARKS
+
+; REMARKS: promoted and assigned to call function clone _ZN2B03barEj
+
+; RUN: llvm-dis %t.out.2.4.opt.bc -o - | FileCheck %s --check-prefix=IR
+
+;; Check that the fallback call has the correct VP metadata for the skipped
+;; candidate (_ZN1B3barEj with MD5 4445083295448962937 and count 2).
+; IR: define {{.*}} @_Z3fooR2B0j
+; IR:   %[[R1:[0-9]+]] = icmp eq ptr %0, @_ZN2B03barEj
+; IR:   br i1 %[[R1]], label %[[LABEL:.*]], label %if.false.orig_indirect
+; IR: if.false.orig_indirect:
+; IR:   tail call i32 %0(ptr null, i32 0), !prof ![[PROF:[0-9]+]]
+; IR: ![[PROF]] = !{!"VP", i32 0, i64 2, i64 4445083295448962937, i64 2}
+
+;--- foo.ll
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+declare i32 @_ZN2B03barEj(ptr, i32)
+
+define i32 @_Z3fooR2B0j(ptr %b) {
+entry:
+  %0 = load ptr, ptr %b, align 8
+  %call = tail call i32 %0(ptr null, i32 0), !prof !1, !callsite !2
+  ret i32 %call
+}
+
+;; VP metadata with two candidates:
+;; 1. MD5 4445083295448962937 (_ZN1B3barEj), count 2
+;; 2. MD5 -2718743882639408571 (_ZN2B03barEj), count 2
+!1 = !{!"VP", i32 0, i64 4, i64 4445083295448962937, i64 2, i64 -2718743882639408571, i64 2}
+!2 = !{i64 -2101080423462424381}
+
+;--- main.ll
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define i32 @main() {
+entry:
+  %call2 = call i32 @_Z3fooR2B0j(ptr null), !callsite !30
+  %call4 = call i32 @_Z3fooR2B0j(ptr null), !callsite !31
+  ret i32 0
+}
+
+declare i32 @_Z3fooR2B0j(ptr)
+
+define i32 @_ZN2B03barEj(ptr %this, i32 %s) {
+entry:
+  %call = tail call ptr @_Znwm(i64 noundef 4) #0, !memprof !33, !callsite !38
+  ret i32 %s
+}
+
+declare ptr @_Znwm(i64)
+
+attributes #0 = { builtin allocsize(0) }
+
+!llvm.module.flags = !{!0}
+!0 = !{i32 1, !"ProfileSummary", !1}
+!1 = !{!2, !3}
+!2 = !{!"ProfileFormat", !"InstrProf"}
+!3 = !{!"TotalCount", i64 4}
+
+!30 = !{i64 -6490791336773930154}
+!31 = !{i64 5188446645037944434}
+!33 = !{!34, !36}
+!34 = !{!35, !"notcold"}
+!35 = !{i64 -852997907418798798, i64 -2101080423462424381, i64 -6490791336773930154}
+!36 = !{!37, !"cold"}
+!37 = !{i64 -852997907418798798, i64 -2101080423462424381, i64 5188446645037944434}
+!38 = !{i64 -852997907418798798}

@llvmorg-github-actions
Copy link
Copy Markdown

@llvm/pr-subscribers-llvm-transforms

Author: Teresa Johnson (teresajohnson)

Changes

Track unpromoted candidates explicitly when performing ICP during MemProf
context disambiguation. Previously, the code assumed that the first N
candidates were always the ones promoted, which led to incorrect metadata
on the fallback indirect call if a candidate was skipped (e.g. due to
missing definition or being illegal to promote).


Full diff: https://github.com/llvm/llvm-project/pull/201658.diff

2 Files Affected:

  • (modified) llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp (+6-6)
  • (added) llvm/test/ThinLTO/X86/memprof-icp-metadata.ll (+96)
diff --git a/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp b/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
index d02e67a995ec6..ac93576391aff 100644
--- a/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
+++ b/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
@@ -6208,8 +6208,8 @@ void MemProfContextDisambiguation::performICP(
     auto *CB = Info.CB;
     auto CallsiteIndex = Info.CallsiteInfoStartIndex;
     auto TotalCount = Info.TotalCount;
-    unsigned NumPromoted = 0;
     unsigned NumClones = 0;
+    SmallVector<InstrProfValueData, 8> RemainingCandidates;
 
     for (auto &Candidate : Info.CandidateProfileData) {
       auto &StackNode = AllCallsites[CallsiteIndex++];
@@ -6238,6 +6238,7 @@ void MemProfContextDisambiguation::performICP(
         // FIXME: See if we can use the new declaration importing support to
         // at least get the declarations imported for this case. Hot indirect
         // targets should have been imported normally, however.
+        RemainingCandidates.push_back(Candidate);
         continue;
       }
 
@@ -6251,6 +6252,7 @@ void MemProfContextDisambiguation::performICP(
                  << " with count of " << ore::NV("TotalCount", TotalCount)
                  << ": " << Reason;
         });
+        RemainingCandidates.push_back(Candidate);
         continue;
       }
 
@@ -6304,10 +6306,9 @@ void MemProfContextDisambiguation::performICP(
 
       // Update TotalCount (all clones should get same count above)
       TotalCount -= Candidate.Count;
-      NumPromoted++;
     }
     // Adjust the MD.prof metadata for all clones, now that we have the new
-    // TotalCount and the number promoted.
+    // TotalCount and the remaining candidates.
     CallBase *CBClone = CB;
     for (unsigned J = 0; J < NumClones; J++) {
       // If the VMap is empty, this clone was a duplicate of another and was
@@ -6322,9 +6323,8 @@ void MemProfContextDisambiguation::performICP(
       // If all promoted, we don't need the MD.prof metadata.
       // Otherwise we need update with the un-promoted records back.
       if (TotalCount != 0)
-        annotateValueSite(
-            M, *CBClone, ArrayRef(Info.CandidateProfileData).slice(NumPromoted),
-            TotalCount, IPVK_IndirectCallTarget, Info.NumCandidates);
+        annotateValueSite(M, *CBClone, RemainingCandidates, TotalCount,
+                          IPVK_IndirectCallTarget, Info.NumCandidates);
     }
   }
 }
diff --git a/llvm/test/ThinLTO/X86/memprof-icp-metadata.ll b/llvm/test/ThinLTO/X86/memprof-icp-metadata.ll
new file mode 100644
index 0000000000000..5eb2af0abddc6
--- /dev/null
+++ b/llvm/test/ThinLTO/X86/memprof-icp-metadata.ll
@@ -0,0 +1,96 @@
+;; Test that MemProf ICP correctly updates MD_prof metadata for the fallback
+;; call when some candidates are skipped during promotion.
+
+; REQUIRES: asserts
+
+; RUN: split-file %s %t
+; RUN: opt -thinlto-bc %t/main.ll -o %t/main.o
+; RUN: opt -thinlto-bc %t/foo.ll -o %t/foo.o
+
+;; Perform ThinLTO. We provide the definition for _ZN2B03barEj but not
+;;_ZN1B3barEj. With -memprof-require-definition-for-promotion, _ZN1B3barEj
+;; should be skipped and _ZN2B03barEj should be promoted.
+; RUN: llvm-lto2 run %t/main.o %t/foo.o -enable-memprof-context-disambiguation \
+; RUN:	-enable-memprof-indirect-call-support=true \
+; RUN:  -supports-hot-cold-new \
+; RUN:  -r=%t/foo.o,_Z3fooR2B0j,plx \
+; RUN:  -r=%t/foo.o,_ZN2B03barEj, \
+; RUN:  -r=%t/main.o,main,plx \
+; RUN:  -r=%t/main.o,_Z3fooR2B0j, \
+; RUN:  -r=%t/main.o,_ZN2B03barEj,plx \
+; RUN:  -r=%t/main.o,_Znwm, \
+; RUN:	-thinlto-threads=1 \
+; RUN:  -pass-remarks=memprof-context-disambiguation \
+; RUN:  -save-temps \
+; RUN:  -memprof-require-definition-for-promotion \
+; RUN:  -o %t.out 2>&1 | FileCheck %s --check-prefix=REMARKS
+
+; REMARKS: promoted and assigned to call function clone _ZN2B03barEj
+
+; RUN: llvm-dis %t.out.2.4.opt.bc -o - | FileCheck %s --check-prefix=IR
+
+;; Check that the fallback call has the correct VP metadata for the skipped
+;; candidate (_ZN1B3barEj with MD5 4445083295448962937 and count 2).
+; IR: define {{.*}} @_Z3fooR2B0j
+; IR:   %[[R1:[0-9]+]] = icmp eq ptr %0, @_ZN2B03barEj
+; IR:   br i1 %[[R1]], label %[[LABEL:.*]], label %if.false.orig_indirect
+; IR: if.false.orig_indirect:
+; IR:   tail call i32 %0(ptr null, i32 0), !prof ![[PROF:[0-9]+]]
+; IR: ![[PROF]] = !{!"VP", i32 0, i64 2, i64 4445083295448962937, i64 2}
+
+;--- foo.ll
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+declare i32 @_ZN2B03barEj(ptr, i32)
+
+define i32 @_Z3fooR2B0j(ptr %b) {
+entry:
+  %0 = load ptr, ptr %b, align 8
+  %call = tail call i32 %0(ptr null, i32 0), !prof !1, !callsite !2
+  ret i32 %call
+}
+
+;; VP metadata with two candidates:
+;; 1. MD5 4445083295448962937 (_ZN1B3barEj), count 2
+;; 2. MD5 -2718743882639408571 (_ZN2B03barEj), count 2
+!1 = !{!"VP", i32 0, i64 4, i64 4445083295448962937, i64 2, i64 -2718743882639408571, i64 2}
+!2 = !{i64 -2101080423462424381}
+
+;--- main.ll
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define i32 @main() {
+entry:
+  %call2 = call i32 @_Z3fooR2B0j(ptr null), !callsite !30
+  %call4 = call i32 @_Z3fooR2B0j(ptr null), !callsite !31
+  ret i32 0
+}
+
+declare i32 @_Z3fooR2B0j(ptr)
+
+define i32 @_ZN2B03barEj(ptr %this, i32 %s) {
+entry:
+  %call = tail call ptr @_Znwm(i64 noundef 4) #0, !memprof !33, !callsite !38
+  ret i32 %s
+}
+
+declare ptr @_Znwm(i64)
+
+attributes #0 = { builtin allocsize(0) }
+
+!llvm.module.flags = !{!0}
+!0 = !{i32 1, !"ProfileSummary", !1}
+!1 = !{!2, !3}
+!2 = !{!"ProfileFormat", !"InstrProf"}
+!3 = !{!"TotalCount", i64 4}
+
+!30 = !{i64 -6490791336773930154}
+!31 = !{i64 5188446645037944434}
+!33 = !{!34, !36}
+!34 = !{!35, !"notcold"}
+!35 = !{i64 -852997907418798798, i64 -2101080423462424381, i64 -6490791336773930154}
+!36 = !{!37, !"cold"}
+!37 = !{i64 -852997907418798798, i64 -2101080423462424381, i64 5188446645037944434}
+!38 = !{i64 -852997907418798798}

Copy link
Copy Markdown
Contributor

@david-xl david-xl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is in backend compilation. Why is there a need to update the fall back path's vp meta data ?

@teresajohnson
Copy link
Copy Markdown
Contributor Author

this is in backend compilation. Why is there a need to update the fall back path's vp meta data ?

Normal ICP happens later. So the VP metadata should be accurate or I suppose in theory we could do a promotion to the same target again.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 4, 2026

🐧 Linux x64 Test Results

  • 175121 tests passed
  • 3436 tests skipped
  • 1 test failed

Failed Tests

(click on a test name to see its output)

Clang

Clang.Modules/rebuild.m
Exit Code: 1

Command Output (stdout):
--
# RUN: at line 1
rm -rf /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp
# executed command: rm -rf /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp
# note: command had no output on stdout or stderr
# RUN: at line 4
echo '@import Module;' | /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/clang -cc1 -internal-isystem /home/gha/actions-runner/_work/llvm-project/llvm-project/build/lib/clang/23/include -nostdsysteminc -fmodules -fimplicit-module-maps -fmodules-cache-path=/home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp -fdisable-module-hash -fsyntax-only -F /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs -x objective-c -
# executed command: echo '@import Module;'
# note: command had no output on stdout or stderr
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/clang -cc1 -internal-isystem /home/gha/actions-runner/_work/llvm-project/llvm-project/build/lib/clang/23/include -nostdsysteminc -fmodules -fimplicit-module-maps -fmodules-cache-path=/home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp -fdisable-module-hash -fsyntax-only -F /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs -x objective-c -
# .---command stderr------------
# | While building module 'Module' imported from <stdin>:1:
# | In file included from <module-includes>:1:
# | /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs/Module.framework/Headers/Module.h:38:1: warning: umbrella header for module 'Module' does not include header 'NotInModule.h' [-Wincomplete-umbrella]
# | 1 warning generated.
# `-----------------------------
# RUN: at line 5
touch -m -a -t 201101010000 /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm
# executed command: touch -m -a -t 201101010000 /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm
# note: command had no output on stdout or stderr
# RUN: at line 6
cp /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm.saved
# executed command: cp /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm.saved
# note: command had no output on stdout or stderr
# RUN: at line 7
wc -c /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm > /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.size.saved
# executed command: wc -c /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm
# note: command had no output on stdout or stderr
# RUN: at line 10
/home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/clang -cc1 -internal-isystem /home/gha/actions-runner/_work/llvm-project/llvm-project/build/lib/clang/23/include -nostdsysteminc -fmodules -fimplicit-module-maps -fmodules-cache-path=/home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp -fdisable-module-hash -fsyntax-only -F /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/rebuild.m
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/clang -cc1 -internal-isystem /home/gha/actions-runner/_work/llvm-project/llvm-project/build/lib/clang/23/include -nostdsysteminc -fmodules -fimplicit-module-maps -fmodules-cache-path=/home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp -fdisable-module-hash -fsyntax-only -F /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/rebuild.m
# .---command stderr------------
# | /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs/DependsOnModule.framework/Modules/module.private.modulemap:1:33: warning: private submodule 'DependsOnModule.Private' in private module map, expected top-level module [-Wprivate-module]
# |     1 | explicit module DependsOnModule.Private {
# |       |                                 ^
# | /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs/DependsOnModule.framework/Modules/module.private.modulemap:1:33: note: rename 'DependsOnModule.Private' to ensure it can be found by name
# |     1 | explicit module DependsOnModule.Private {
# |       | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
# |       | framework module DependsOnModule_Private
# | /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs/DependsOnModule.framework/Modules/module.private.modulemap:1:33: warning: private submodule 'DependsOnModule.Private' in private module map, expected top-level module [-Wprivate-module]
# |     1 | explicit module DependsOnModule.Private {
# |       |                                 ^
# | /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs/DependsOnModule.framework/Modules/module.private.modulemap:1:33: note: rename 'DependsOnModule.Private' to ensure it can be found by name
# |     1 | explicit module DependsOnModule.Private {
# |       | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
# |       | framework module DependsOnModule_Private
# | 2 warnings generated.
# `-----------------------------
# RUN: at line 11
diff /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm.saved
# executed command: diff /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm.saved
# note: command had no output on stdout or stderr
# RUN: at line 12
cp /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/DependsOnModule.pcm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/DependsOnModule.pcm.saved
# executed command: cp /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/DependsOnModule.pcm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/DependsOnModule.pcm.saved
# note: command had no output on stdout or stderr
# RUN: at line 15
rm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm
# executed command: rm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm
# note: command had no output on stdout or stderr
# RUN: at line 16
echo '@import Module;' | /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/clang -cc1 -internal-isystem /home/gha/actions-runner/_work/llvm-project/llvm-project/build/lib/clang/23/include -nostdsysteminc -fmodules -fimplicit-module-maps -fmodules-cache-path=/home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp -fdisable-module-hash -fsyntax-only -F /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs -x objective-c -
# executed command: echo '@import Module;'
# note: command had no output on stdout or stderr
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/clang -cc1 -internal-isystem /home/gha/actions-runner/_work/llvm-project/llvm-project/build/lib/clang/23/include -nostdsysteminc -fmodules -fimplicit-module-maps -fmodules-cache-path=/home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp -fdisable-module-hash -fsyntax-only -F /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs -x objective-c -
# .---command stderr------------
# | While building module 'Module' imported from <stdin>:1:
# | In file included from <module-includes>:1:
# | /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs/Module.framework/Headers/Module.h:38:1: warning: umbrella header for module 'Module' does not include header 'NotInModule.h' [-Wincomplete-umbrella]
# | 1 warning generated.
# `-----------------------------
# RUN: at line 17
touch -m -a -t 201101010000 /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm
# executed command: touch -m -a -t 201101010000 /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm
# note: command had no output on stdout or stderr
# RUN: at line 18
wc -c /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm > /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.size
# executed command: wc -c /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm
# note: command had no output on stdout or stderr
# RUN: at line 19
diff /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.size /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.size.saved
# executed command: diff /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.size /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.size.saved
# note: command had no output on stdout or stderr
# RUN: at line 20
cp /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm.saved.2
# executed command: cp /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm.saved.2
# note: command had no output on stdout or stderr
# RUN: at line 23
/home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/clang -cc1 -internal-isystem /home/gha/actions-runner/_work/llvm-project/llvm-project/build/lib/clang/23/include -nostdsysteminc -fmodules -fimplicit-module-maps -fmodules-cache-path=/home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp -fdisable-module-hash -fsyntax-only -F /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/rebuild.m
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/clang -cc1 -internal-isystem /home/gha/actions-runner/_work/llvm-project/llvm-project/build/lib/clang/23/include -nostdsysteminc -fmodules -fimplicit-module-maps -fmodules-cache-path=/home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp -fdisable-module-hash -fsyntax-only -F /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/rebuild.m
# .---command stderr------------
# | /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs/DependsOnModule.framework/Modules/module.private.modulemap:1:33: warning: private submodule 'DependsOnModule.Private' in private module map, expected top-level module [-Wprivate-module]
# |     1 | explicit module DependsOnModule.Private {
# |       |                                 ^
# | /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs/DependsOnModule.framework/Modules/module.private.modulemap:1:33: note: rename 'DependsOnModule.Private' to ensure it can be found by name
# |     1 | explicit module DependsOnModule.Private {
# |       | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
# |       | framework module DependsOnModule_Private
# | 1 warning generated.
# `-----------------------------
# RUN: at line 24
diff /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm.saved.2
# executed command: diff /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm.saved.2
# note: command had no output on stdout or stderr
# RUN: at line 25
diff /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/DependsOnModule.pcm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/DependsOnModule.pcm.saved
# executed command: diff /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/DependsOnModule.pcm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/DependsOnModule.pcm.saved
# note: command had no output on stdout or stderr
# RUN: at line 28
rm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm
# executed command: rm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm
# note: command had no output on stdout or stderr
# RUN: at line 29
echo '@import Module;' | /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/clang -cc1 -internal-isystem /home/gha/actions-runner/_work/llvm-project/llvm-project/build/lib/clang/23/include -nostdsysteminc -fmodules -fimplicit-module-maps -fmodules-cache-path=/home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp -fdisable-module-hash -fsyntax-only -F /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs -x objective-c -
# executed command: echo '@import Module;'
# note: command had no output on stdout or stderr
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/clang -cc1 -internal-isystem /home/gha/actions-runner/_work/llvm-project/llvm-project/build/lib/clang/23/include -nostdsysteminc -fmodules -fimplicit-module-maps -fmodules-cache-path=/home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp -fdisable-module-hash -fsyntax-only -F /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs -x objective-c -
# .---command stderr------------
# | While building module 'Module' imported from <stdin>:1:
# | In file included from <module-includes>:1:
# | /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs/Module.framework/Headers/Module.h:38:1: warning: umbrella header for module 'Module' does not include header 'NotInModule.h' [-Wincomplete-umbrella]
# | 1 warning generated.
# `-----------------------------
# RUN: at line 30
touch -m -a -t 201101010000 /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm
# executed command: touch -m -a -t 201101010000 /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm
# note: command had no output on stdout or stderr
# RUN: at line 31
wc -c /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm > /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.size
# executed command: wc -c /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm
# note: command had no output on stdout or stderr
# RUN: at line 32
diff /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.size /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.size.saved
# executed command: diff /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.size /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.size.saved
# note: command had no output on stdout or stderr
# RUN: at line 33
cp /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm.saved.2
# executed command: cp /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm.saved.2
# note: command had no output on stdout or stderr
# RUN: at line 36
/home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/clang -cc1 -internal-isystem /home/gha/actions-runner/_work/llvm-project/llvm-project/build/lib/clang/23/include -nostdsysteminc -fmodules -fimplicit-module-maps -fmodules-cache-path=/home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp -fdisable-module-hash -fsyntax-only -F /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/rebuild.m
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/clang -cc1 -internal-isystem /home/gha/actions-runner/_work/llvm-project/llvm-project/build/lib/clang/23/include -nostdsysteminc -fmodules -fimplicit-module-maps -fmodules-cache-path=/home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp -fdisable-module-hash -fsyntax-only -F /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/rebuild.m
# .---command stderr------------
# | /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs/DependsOnModule.framework/Modules/module.private.modulemap:1:33: warning: private submodule 'DependsOnModule.Private' in private module map, expected top-level module [-Wprivate-module]
# |     1 | explicit module DependsOnModule.Private {
# |       |                                 ^
# | /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs/DependsOnModule.framework/Modules/module.private.modulemap:1:33: note: rename 'DependsOnModule.Private' to ensure it can be found by name
# |     1 | explicit module DependsOnModule.Private {
# |       | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
# |       | framework module DependsOnModule_Private
# | /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs/DependsOnModule.framework/Modules/module.private.modulemap:1:33: warning: private submodule 'DependsOnModule.Private' in private module map, expected top-level module [-Wprivate-module]
# |     1 | explicit module DependsOnModule.Private {
# |       |                                 ^
# | /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs/DependsOnModule.framework/Modules/module.private.modulemap:1:33: note: rename 'DependsOnModule.Private' to ensure it can be found by name
# |     1 | explicit module DependsOnModule.Private {
# |       | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
# |       | framework module DependsOnModule_Private
# | 2 warnings generated.
# `-----------------------------
# RUN: at line 37
diff /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm.saved.2
# executed command: diff /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm.saved.2
# note: command had no output on stdout or stderr
# RUN: at line 38
diff /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/DependsOnModule.pcm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/DependsOnModule.pcm.saved
# executed command: diff /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/DependsOnModule.pcm /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/DependsOnModule.pcm.saved
# .---command stdout------------
# | --- /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/DependsOnModule.pcm
# | +++ /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/DependsOnModule.pcm.saved
# | @@ -983,9 +983,9 @@
# |  \xa7P
# |  \xcaa
# | \xa60
# | \xbfP
# | \xb3
# |  \xa7P
# | -MaBPBU\x9e\x84\xb0\x81O\x9b\xfeƾ\x86\xc1\xa4OZ\xf3^.\xc7B
# | \xd0Bu\x9c	\xc4ƭq遒d\x97\xa8\x8eN\xa56ݒ\xe1c0\x80   \x80
# | E\x91(@\x82,\xbc:\xbcC;\x94\xc3\x9c:\x84\xc3\x84\xc38\xd0C:\xbc\x83;\xccC\xc8C=\xb8\x83;\x94\x83<\xbc\xc1/\xdc\xc3;\xc8\xc3:\xbc;\xb0\x83=\xb4C\xc0\x83<\xbc\x83:\x94\xc38\xd0\xc3\xb0;\xd8C;\xb4<\xc8\xc3;\xa8C9\x8c=\xbc\xc18\xb0C8\xb8\xc39\xbc=\x94\xc3<\xd0\xc3\xb4\xc2;\x90C=\xb0C9\xcc\xc3\xa4\x82;\xc0C=\xd0\xc3<A0
# | o\x80\xef\xd0\xe5\xf0\xe7\x80\xe1\xf0\xe10\xf4\x90\xef\xe0\xf3\xd0\xf2P\xee\xe0\xe5 o\xf0
# | \xf7\xf0\xf2\xb0o\xc0\xec`\xed\xd0\xf0 \xef\xa0\xe50\xf4\xf0\xec\xc0\xf6\xd0m\xf2\xf0\xeaP\xe3@o \xf5\x90\xec@o\xc0\xe9 o0\xec\xeepo s\xf0\xe9\xe0\xe3\xc0\xf5@\xe5 \x8c\xe2\x80\xa3\x81@\xa1F b<(\xf4=\xf5B
# | \x81A`\x90 A\x82%&\xf4
# | +MaBPBou\xe9\xdf{\x8aCys\x92\xba\x84DSx\xc2\xcbB
# | \xd0BP\xadd\xbcGE\x8b\xffp\x89h\x91\x93(�\x8e\x8f=c0\x80   \x80
# | E\x91(@\x82,\xbc:\xbcC;\x94\xc3\x9c:\x84\xc3\x84\xc38\xd0C:\xbc\x83;\xccC\xc8C=\xb8\x83;\x94\x83<\xbc\xc1/\xdc\xc3;\xc8\xc3:\xbc;\xb0\x83=\xb4C\xc0\x83<\xbc\x83:\x94\xc38\xd0\xc3\xb0;\xd8C;\xb4<\xc8\xc3;\xa8C9\x8c=\xbc\xc18\xb0C8\xb8\xc39\xbc=\x94\xc3<\xd0\xc3\xb4\xc2;\x90C=\xb0C9\xcc\xc3\xa4\x82;\xc0C=\xd0\xc3<A0
# | o\x80\xef\xd0\xe5\xf0\xe7\x80\xe1\xf0\xe10\xf4\x90\xef\xe0\xf3\xd0\xf2P\xee\xe0\xe5 o\xf0
# | \xf7\xf0\xf2\xb0o\xc0\xec`\xed\xd0\xf0 \xef\xa0\xe50\xf4\xf0\xec\xc0\xf6\xd0m\xf2\xf0\xeaP\xe3@o \xf5\x90\xec@o\xc0\xe9 o0\xec\xeepo s\xf0\xe9\xe0\xe3\xc0\xf5@\xe5 \x8c\xe2\x80\xa3\x81@\xa1F b<(\xf4=\xf5B
# | \x81A`\x90 A\x82%&\xf4
# |  (https://github.com/llvm/llvm-project 8a683a19995a7163d767ef18e3b1169d4cd93b0b)B4\xd0\xf2DependsOnModuleBDP\xc3/home/gha/actions-runner/_work/llvm-project/llvm-project/clang/test/Modules/Inputs/DependsOnModule.framework\xe3\xd8\xacށ
# | \xea\x81
# | \xcaa
# | ޠ
# | ށ
# | \xea\x81
# | \xca\xc1
# | \xda\xe1
# | ȡ
# | ء
# | \xda!
# | \xe0!\x83Vxr\xa8v(\x87yx\x83vxr\xa8v(7\x80yH{z(7h\x87w \x87z`\x87rh\x87p\x80\xa1
# | -\xc8 CF2d\xc8\xe8	\x97\x81\x96{\x88	Module\xdb\xc9\xd2#\x82\xb9
# | \xe1\xd2\xc676\x8cC܁j;/home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm!\x82\xbe\xc8MAA@@@ \xc3B  \x82\x81 \x88@8\xf0\xff\xff )\x94<\x94\x83;\x90\xc3<\xbc\x82;\xb4\xc2;\x90C=\xb0C9\x8cA \x8c\x80>\xe0\x81
# | \xfc\x82
# | \xd0Aԃ;\xac\x83;\xbc\xc3=\xb8C\xb0C:\xb8C=\xe0C\x9c\x83;\xd4@A\xac\xc18\xe0
# | k\xd0\xed\x80\xc4\xcc\xc3<\x94C\xb1\xf30\xe5 \xc4\xe0
# | \xdc\xc1
# | 0\x84lo\xb0
# | +\xc8 CF2d\xc8\xe8	\x97\x81\x96{\x88	ModuleՎ\xef\xfe)\xa8&$\xb4X2豋\xb7
# | \xd3E/home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/test/Modules/Output/rebuild.m.tmp/Module.pcm!\x82\xbe\xc8MAA@@@ \xc3B  \x82\x81 \x88@8\xf0\xff\xff )\x94<\x94\x83;\x90\xc3<\xbc\x82;\xb4\xc2;\x90C=\xb0C9\x8cA \x8c\x80>\xe0\x81
# | \xfc\x82
# | \xd0Aԃ;\xac\x83;\xbc\xc3=\xb8C\xb0C:\xb8C=\xe0C\x9c\x83;\xd4@A\xac\xc18\xe0
# | k\xd0\xed\x80\xc4\xcc\xc3<\x94C\xb1\xf30\xe5 \xc4\xe0
# | \xdc\xc1
# | 0\x84lo\xb0
# |  o\x80\xef\xd0\xe5\xf0\xe7\x80\xe1\xf0\xe10\xf4\x90\xef\xe0\xf3\xd0\xf2P\xee\xe0\xe5 o\xf0
# | \xf7\xf0\xf2\xb0o\xc0\xec`\xed\xd0\xf0 \xef\xa0\xe50\xf4\xf0\xec\xc0\xf6\xd0m\xf2\xf0\xeaP\xe3@o \xf5\x90\xec@o\xc0\xe9 o0\xec\xeepo s\xc0o\x80\xef\xd0\xe5\xf0\xe7\x80\xe1\xf0\xe10\xf4\x90\xef\xe0\xf3\xd0\xf2P\xee\xe0\xe5 o\xf0
# | \xf7\xf0\xf2\xb0o\xc0\xec`\xed\xd0\xf0 \xef\xa0\xe50\xf4\xf0\xec\xc0\xf6\xd0m\xf2\xf0\xeaP\xe3@o \xf5\x90\xec@o@\xef\xf0\xec0o0\xec\xeepo@\xe50\xf4\xf0\xad\xf0\xe4P\xecP\xf3\xf0\xafP\xf4\xf5@o \xe5 \xf5\x90\xec@n\xd0n@\xed@@@3u@
# |  \xaf\x90
# | w 
# |  \xb9p
# | @@ -1015,7 +1015,7 @@
# |  Z\xe5\xe5BA\xe9\xebD?\x9f\xa8L\xf4
# | Q\x95\xe8\xa2"\xd135\xc2(\xdeU\xc2(\xde@}\xe8qAy\xa0e^J@\x94\xe0
# | š\x9fRPz\x82\xa04\xf4Ae\xe8	pa\xf0\xae\xa9
# | \xde˂7P\xbc\xa1\xa2\xd0D5\xd0=\xe4\x91V\x84^\x83\xa8 \xf4
# | Q=\xe8\xa2r\xd03\xa0\xbbM\x82\xbf\x80r
# | \xdc _\xc4.w\xf7
# | #\xb4 da7\x8e\xd1?\x99W\xf8i\xa4[\xe3Q\xe0\xe7\x92\xe4\xf7f\xb3\xc9�\xa7\x96\xc6\xd9$\xf5\xbf\xb9իU\xdaO\x98Q}\x95\xc6Q\xde\xc5\xeb[1z?\xd7\xf9[\xb1<\xecoo\xe0o\xee.\x90\xb9\xb1o\xc8\x88\x93\xc0	\xbb\xb7\xad\xd57YA4\xf9\x92{\xb1K�\xa5J\xf1\xaaw\xc0W\xf2p\xbd\x96\x8b7\xfd5\xdc\xf6\xa3\x8c+\xa8\xf5W!W\xab#\xc30\xad\xf9Be\x98w-\xb1}
# | 
# | SQ\xb8\xf9a\x80?6\xe5_\x80\xc5δ
# |  T\x92O?v\x87\x9e\xc5\xe4_e\xf1\xdf\xf3\xfd\xe5\xfe\xe5\x9fe\xbe\xff\xb5+\xc7\xf5\xe6\xfdS\xc8o7\xf3\xfcx:\xe0
# | p\xb9[M\xa2;\xe7\xd3\xfePn\xcb\xe2\xb8\xecOq\xe9aP\xf2)~\x94\xe8ס<\x9c\x85.\xb5\xdb\xefJz7\xf0k\xe2m\xe2$sdUg\x96GY\xba\xc8҄\xa1,\xf7\xab2�C?\xb6\xf9\xf1\xad\xd8n\xb8x[q>VmT\xcbo\xcb\xc8\xc1&\xa6g\xe2\xce\xf2Y\xc25ytӱ|\xcd_\x8f\xec\xf2\x8b\xd5\xeaP
# | \x8f\xf9\xf1\xbdX\x96\xb7\x8an0\xeeC\x9d~
# | v2\xe9N\xb1;\xf3
# | \xa4\x97\x92c
# | \xa7\x8c\xea\xc4e?K\xae\x9a\xaa\;\xd0\xe7\xf3g\xc0}\x8f\xcen\xdfC\x9c\xef\xe6
# | 'vs'\x9c\xe6ɓ\xb3\xc8叐\x95\x8f\x90\xb5\x8f\x90-zq\xc4v\xdcwb\xe7\xdd\xe67\xc5(+l7\xbb3M\xb40\xb6{ݝ\xc1vR);\x9dN\xa0\xa6\xc7\xc5\xfb>\xa8B\xfa\xe2I\x96e\xeaUTE\xc8R/GE\xe8\x8a\x95\x8b\x8c\xb8\xf34[\xa1\xb2
# | eᔩ\xb9\xa5\x85#\xb8\xf3E\xf5&\x91\xfa{
# | \xfc	xգ\xfa#\xa4\xe5\xfe\xed\xadح\xb0\x81˿n\xbaf\xe2o\x93\x94?\xfe\xb3R\xe4\xdb%j<scratch space>\xc7\xfd\xc1x\x9c\xedɫ
# |  
# | Qt\xd7*
# | \xc1@\xc2O`\xba\xff
# |  \xee\xc9;qO\xaa
# | \xad\x8f6u\xe4e\xde\xf3\xb6 \xb7k-\xcf_9@d\xf4_ i\x83\x80\x91^
# | @\xeb\xdf\xdaPP"x\x80\xe3\xf4	
# | `|G\x80@\xa5\x830b"p @\xa0\xe1\xe8\xc1\x90$\x90ox\x80d(
# | \xa2t \x82BY8\x9cE
# | F\x94*\xaaajd\xc8d
# | e|e\xdae8f\x96f\xfcf
# | \xd8@\xe1q\xa8\x87t`zh\x83tp?p\xf8`
# | ޡ
# | \xda!
# | ܁
# | \xc0\x80
# | \xd2\xc1
# | \xca\xc1b N\xb2	\xc0$\x9fl\x82\xc3\xa3\x80\xa00#
# | 2/\xd0\xed2\x82\x86\xa1\xdbe\xe0\xdfe\xc1\x86¿\xcb\xe0\x82|(
# |  m\xc0\x9b\xb7\xa2(
# | -\x81B
# | \xa5\x80\xb7o /\xf6\x98)
# | I\xc3!jHeaders/not_coroutines.h`H\xc0!9\x86"
# | \xc3!jHeaders/not_cxx.h`@s\xb6l\xe98
# |  \xc3!jPrivateHeaders/DependsOnModulePrivate.h``&\xfb\xcc$
# | 7\xc3!jHeaders/cxx_other.hhV"\xb7C%
# | F\xc3!jHeaders/coroutines.hpZT\xb2\x87#
# | \xc3!jHeaders/not_objc.hx\xfb	0*
# | \xa4\xc3!jHeaders/DependsOnModule.h`8l\xe3\xb9\xcaI
# | 6\xc3!jFrameworks/SubFramework.framework/Headers/SubFramework.h`X\xaf\x84\xe9B
# | 
# | \xc3!jFrameworks/SubFramework.framework/Headers/Other.h@P\xaf\x84\xe9 
# | 
# | \xc3!jHeaders/other.h`8
# | +\x81B
# | \xa5\x80\xb7o /\xf6\x98)
# | I\xc3!jHeaders/not_coroutines.h`H\xc0!9\x86"
# | \xc3!jHeaders/not_cxx.h`@s\xb6l\xe98
# |  \xc3!jPrivateHeaders/DependsOnModulePrivate.h``&\xfb\xcc$
# | 7\xc3!jHeaders/cxx_other.hhV"\xb7C%
# | F\xc3!jHeaders/coroutines.hpZT\xb2\x87#
# | \xc3!jHeaders/not_objc.hx\xfb	0*
# | \xa4\xc3!jHeaders/DependsOnModule.h`8l\xe3\xb9\xcaI
# | 6\xc3!jFrameworks/SubFramework.framework/Headers/SubFramework.h`X\xaf\x84\xe9 
# | 
# | \xc3!jHeaders/other.h`8\xaf\x84\xe9B
# | 
# | \xc3!jFrameworks/SubFramework.framework/Headers/Other.h@P
# |  w\xc45m\xac
# |  b,(\xf4\x81\xa0a\xa2\xab\xee	template
# | \xfe\xffb\xabi\xb0module_subframework%\xfe\xff
# | \xe3\xa9}#depends_on_module_private\xfe\xff!$\xfc\xb15
# | 
# | __VA_ARGS__\xfe\xff\xa5\xb2\x84|FILE
# | 
# |  \x85\xe8\xfb\xe4__NSConstantString\xfe\xff\xc6뤯
# | Module_Sub2
# | \xfe\xff)
# | \x88
# | SEL\xfe\xffɑP\xe7DEPENDS_ON_MODULE
# | \xfe\xff`jȭ]Buried_Treasure\xfe\xff\xeaiPEdepends_on_module_other\xfe\xff\xcaK\xd39__builtin_ms_va_list\xfe\xff
# | J\x8e˼
# | 
# | __VA_OPT__\xfe\xffk\xac\xf6|__builtin_va_list\xfe\xff	qvL2
# | __uint128_t\xfe\xff2xYid#\xfe\xff\xc9+j
# | Module_Sub	\xfe\xff\xd6\xe1~z__sFILE
# | \xfe\xff	w(\xa3	Protocol
# | \xfe\xff\xbbN\xf8
# | Class\xfe\xff\x9c\x94w\xfc
# | __int128_t\xfe\xff
# | }\xaf\xd0sub_framework\xfe\xff\x9d\xf9\xab\xd8sub_framework_other	\xfe\xff
# |  )Y\x8f\xaf\xfd%mEm\x8c\xb3\xd7\xfc
# | mb
# | (`\x9d_Is
# `-----------------------------
# error: command failed with exit status: 1

--

If these failures are unrelated to your changes (for example tests are broken or flaky at HEAD), please open an issue at https://github.com/llvm/llvm-project/issues and add the infrastructure label.

@david-xl
Copy link
Copy Markdown
Contributor

david-xl commented Jun 4, 2026

this is in backend compilation. Why is there a need to update the fall back path's vp meta data ?

Normal ICP happens later. So the VP metadata should be accurate or I suppose in theory we could do a promotion to the same target again.

Looks good.

With this promotion ordering, does it mean it is possible that a cold target can be promoted first?

@teresajohnson
Copy link
Copy Markdown
Contributor Author

this is in backend compilation. Why is there a need to update the fall back path's vp meta data ?

Normal ICP happens later. So the VP metadata should be accurate or I suppose in theory we could do a promotion to the same target again.

Looks good.

With this promotion ordering, does it mean it is possible that a cold target can be promoted first?

During Memprof ICP we will promote only those that need to invoke a clone, but from hottest to least hottest. But then, yes presumably regular ICP may come along later and promote a hotter target which would then fall later in the comparison sequence. We could consider refining that

Copy link
Copy Markdown
Contributor

@david-xl david-xl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM.

@teresajohnson teresajohnson merged commit f76f26d into llvm:main Jun 4, 2026
12 of 13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

llvm:transforms LTO Link time optimization (regular/full LTO or ThinLTO)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants