commit:     bfea74af847d52c85e100a54fcaf4a90c5f35008
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Fri Mar  6 12:14:55 2026 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Mar  6 12:14:55 2026 +0000
URL:        https://gitweb.gentoo.org/proj/gcc-patches.git/commit/?id=bfea74af

16.0.0: add patch context for FF

Signed-off-by: Sam James <sam <AT> gentoo.org>

 16.0.0/gentoo/88_all_PR124291-firefox.patch | 78 ++++++++++++++++++++++++++++-
 1 file changed, 77 insertions(+), 1 deletion(-)

diff --git a/16.0.0/gentoo/88_all_PR124291-firefox.patch 
b/16.0.0/gentoo/88_all_PR124291-firefox.patch
index 56debcd..f4a7c8c 100644
--- a/16.0.0/gentoo/88_all_PR124291-firefox.patch
+++ b/16.0.0/gentoo/88_all_PR124291-firefox.patch
@@ -1,4 +1,75 @@
-https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124291#c12
+From 82ef5f5e7d240747cad2eb697f97b95323f76c74 Mon Sep 17 00:00:00 2001
+Message-ID: 
<82ef5f5e7d240747cad2eb697f97b95323f76c74.1772799281.git....@gentoo.org>
+From: Martin Jambor <[email protected]>
+Date: Fri, 6 Mar 2026 13:09:01 +0100
+Subject: [PATCH] ipa-cp: Allow more precise contexts in the verifier
+ (PR124291)
+
+Hi,
+
+similarly to PR123629, the issue again stems from that when propagating
+polymorphic contexts, when there are no known "values" in the corresponding
+lattice of the caller we use just the information on the edge and when
+there are some we combine them with the information, and from the fact that
+we iterate the propagation in strongly connected components of the call
+graph (SCCs).
+
+In the first iteration over such SCC, we process the edge from
+unmark/1097720 to onChild/1097719 before we determined the lattices of the
+caller.  In the second iteration, we already know what context there will
+be in the first unmarks's parameter and so can add a more precise value to
+the corresponding lattice of onChild.  Because we always add values to the
+lattices and never "improve" them, we get two values for the call.
+
+In PR123629, that actually described reality well because the caller's
+lattice had the variable flag set, without cloning the caller we could not
+assume we could use the caller's lattice value and so both values were
+possible (and in fact both cases happened, the problem was that their meet
+failed).
+
+In this case however, one could argue that the lattices contain wrong info
+or at least information that is misleading because the caller's lattice
+contains just that single "constant" and the variable flag is not set.  We
+know that regardless of cloning decisions for the caller the more precise
+derived value will be the case.  And indeed since I changed the cloning
+code to re-gather all constants for the given set of callers, that code
+arrives at the more precise context.  For the record they only differ in
+the fact that the more precise one has the dynamic flag cleared.
+
+I have thought about how to fix up the lattices in one way or another but
+so far it has always turned ugly.  Therefore this patch simply changes the
+verification to simply allow this situation because even though the final
+result is just a bit more precise than what was expected, it is however
+correct.  There will not be any attempt to clone for the more precise
+context because all the call graph edges will have been redirected away.
+The only "issue" is that the less precise contexts take up place in the
+lattice, which has a limited length.  That should not be a problem in
+practice.
+
+I do not have a simple testcase, the issue was discovered by Sam when
+building Firefox with both LTO and PGO.  However Sam has reported in
+Bugzilla that with this patch the build succeeds.  Needless to say, I
+have bootstrapped, tested and LTOprofieldbootstrapped the patch.
+
+OK for master?
+
+Thanks,
+
+Martin
+
+gcc/ChangeLog:
+
+2026-03-06  Martin Jambor  <[email protected]>
+
+PR ipa/124291
+       * ipa-cp.cc (ipcp_val_replacement_ok_p): Allow more precise
+       contexts that what the clone was originally intended for.
+---
+ gcc/ipa-cp.cc | 16 ++++++++++++----
+ 1 file changed, 12 insertions(+), 4 deletions(-)
+
+diff --git a/gcc/ipa-cp.cc b/gcc/ipa-cp.cc
+index b4e01a92344e..4765ef972b9d 100644
 --- a/gcc/ipa-cp.cc
 +++ b/gcc/ipa-cp.cc
 @@ -5920,11 +5920,19 @@ ipcp_val_replacement_ok_p (vec<tree> &,
@@ -25,3 +96,8 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124291#c12
  }
  
  /* Decide whether to create a special version of NODE for value VAL of
+
+base-commit: e1077ad5753148892871fa146f3948b55c46f7e3
+-- 
+2.53.0
+

Reply via email to