commit:     604daa40f01cb708beafcef226f1b207d576075d
Author:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
AuthorDate: Thu Oct 15 21:35:46 2020 +0000
Commit:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
CommitDate: Thu Oct 15 21:35:46 2020 +0000
URL:        https://gitweb.gentoo.org/proj/gcc-patches.git/commit/?id=604daa40

9.3.0: backport IPA to_frequency() ICE

Reported-by: inasprecali <AT> disroot.org
Bug: https://bugs.gentoo.org/746578
Bug: https://gcc.gnu.org/PR97295
Signed-off-by: Sergei Trofimovich <slyfox <AT> gentoo.org>

 9.3.0/gentoo/31_all_ipa-to_frequency.patch | 48 ++++++++++++++++++++++++++++++
 9.3.0/gentoo/README.history                |  1 +
 2 files changed, 49 insertions(+)

diff --git a/9.3.0/gentoo/31_all_ipa-to_frequency.patch 
b/9.3.0/gentoo/31_all_ipa-to_frequency.patch
new file mode 100644
index 0000000..0849207
--- /dev/null
+++ b/9.3.0/gentoo/31_all_ipa-to_frequency.patch
@@ -0,0 +1,48 @@
+https://bugs.gentoo.org/746578
+https://gcc.gnu.org/PR97295
+
+From 508e2d88a4c512e8b8685cf5ba201ad48e6bb58d Mon Sep 17 00:00:00 2001
+From: Martin Liska <mli...@suse.cz>
+Date: Tue, 13 Oct 2020 16:44:47 +0200
+Subject: [PATCH] IPA: fix profile handling in IRA
+
+gcc/ChangeLog:
+
+       PR ipa/97295
+       * profile-count.c (profile_count::to_frequency): Move part of
+       gcc_assert to STATIC_ASSERT.
+       * regs.h (REG_FREQ_FROM_BB): Do not use count.to_frequency for
+       a function that does not have count_max initialized.
+---
+ gcc/profile-count.c | 4 ++--
+ gcc/regs.h          | 3 ++-
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+--- a/gcc/profile-count.c
++++ b/gcc/profile-count.c
+@@ -270,8 +270,8 @@ profile_count::to_frequency (struct function *fun) const
+     return BB_FREQ_MAX;
+   if (*this == zero ())
+     return 0;
+-  gcc_assert (REG_BR_PROB_BASE == BB_FREQ_MAX
+-            && fun->cfg->count_max.initialized_p ());
++  STATIC_ASSERT (REG_BR_PROB_BASE == BB_FREQ_MAX);
++  gcc_assert (fun->cfg->count_max.initialized_p ());
+   profile_probability prob = probability_in (fun->cfg->count_max);
+   if (!prob.initialized_p ())
+     return REG_BR_PROB_BASE;
+--- a/gcc/regs.h
++++ b/gcc/regs.h
+@@ -128,7 +128,8 @@ extern size_t reg_info_p_size;
+    or profile driven feedback is available and the function is never executed,
+    frequency is always equivalent.  Otherwise rescale the basic block
+    frequency.  */
+-#define REG_FREQ_FROM_BB(bb) (optimize_function_for_size_p (cfun)           \
++#define REG_FREQ_FROM_BB(bb) ((optimize_function_for_size_p (cfun)          \
++                             || !cfun->cfg->count_max.initialized_p ())     \
+                             ? REG_FREQ_MAX                                  \
+                             : ((bb)->count.to_frequency (cfun)              \
+                               * REG_FREQ_MAX / BB_FREQ_MAX)                 \
+-- 
+2.28.0
+

diff --git a/9.3.0/gentoo/README.history b/9.3.0/gentoo/README.history
index 9dbbc19..ff47a81 100644
--- a/9.3.0/gentoo/README.history
+++ b/9.3.0/gentoo/README.history
@@ -1,6 +1,7 @@
 4              TODO
        + 30_all_plugin-objdump.patch
        U 11_all_extra-options.patch
+       + 31_all_ipa-to_frequency.patch
 
 3              29 May 2020
        + 29_all_libcpp-ar.patch

Reply via email to