summaryrefslogtreecommitdiff
path: root/0327-Bugfix-Adjust-the-same-gate-to-use-struct-option.patch
diff options
context:
space:
mode:
Diffstat (limited to '0327-Bugfix-Adjust-the-same-gate-to-use-struct-option.patch')
-rw-r--r--0327-Bugfix-Adjust-the-same-gate-to-use-struct-option.patch81
1 files changed, 81 insertions, 0 deletions
diff --git a/0327-Bugfix-Adjust-the-same-gate-to-use-struct-option.patch b/0327-Bugfix-Adjust-the-same-gate-to-use-struct-option.patch
new file mode 100644
index 0000000..6fd98ec
--- /dev/null
+++ b/0327-Bugfix-Adjust-the-same-gate-to-use-struct-option.patch
@@ -0,0 +1,81 @@
+From 861ddfd90d86215a573a7614f49d572f1e03be6f Mon Sep 17 00:00:00 2001
+From: huang-xiaoquan <huangxiaoquan1@huawei.com>
+Date: Mon, 16 Dec 2024 11:34:06 +0800
+Subject: [PATCH] [Bugfix] Adjust the same gate to use struct option
+
+---
+ gcc/gimple-ssa-warn-access.cc | 7 ++++++-
+ gcc/ipa-free-lang-data.cc | 5 +++--
+ gcc/symbol-summary.h | 8 +++++++-
+ 3 files changed, 16 insertions(+), 4 deletions(-)
+
+diff --git a/gcc/gimple-ssa-warn-access.cc b/gcc/gimple-ssa-warn-access.cc
+index a24645783..3d80590ee 100644
+--- a/gcc/gimple-ssa-warn-access.cc
++++ b/gcc/gimple-ssa-warn-access.cc
+@@ -56,6 +56,9 @@
+ #include "attr-fnspec.h"
+ #include "pointer-query.h"
+
++/* Check whether in C language or LTO with only C language. */
++extern bool lang_c_p (void);
++
+ /* Return true if tree node X has an associated location. */
+
+ static inline location_t
+@@ -2198,7 +2201,9 @@ pass_waccess::gate (function *)
+ In pass waccess, it will traverse all SSA and cause ICE
+ when handling these unused SSA. So temporarily disable
+ pass waccess when enable structure optimizations. */
+- if (flag_ipa_struct_reorg)
++ if (optimize >= 3 && flag_ipa_struct_reorg && !seen_error ()
++ && flag_lto_partition == LTO_PARTITION_ONE && lang_c_p ()
++ && (in_lto_p || flag_whole_program))
+ return false;
+
+ return (warn_free_nonheap_object
+diff --git a/gcc/ipa-free-lang-data.cc b/gcc/ipa-free-lang-data.cc
+index 801e95cea..17e3f43b3 100644
+--- a/gcc/ipa-free-lang-data.cc
++++ b/gcc/ipa-free-lang-data.cc
+@@ -108,8 +108,9 @@ fld_simplified_type_name (tree type)
+ /* Simplify type will cause that struct A and struct A within
+ struct B are different type pointers, so skip it in structure
+ optimizations. */
+- if (flag_ipa_struct_reorg && lang_c_p ()
+- && flag_lto_partition == LTO_PARTITION_ONE)
++ if (optimize >= 3 && flag_ipa_struct_reorg && !seen_error ()
++ && flag_lto_partition == LTO_PARTITION_ONE && lang_c_p ()
++ && (in_lto_p || flag_whole_program))
+ return TYPE_NAME (type);
+
+ if (!TYPE_NAME (type) || TREE_CODE (TYPE_NAME (type)) != TYPE_DECL)
+diff --git a/gcc/symbol-summary.h b/gcc/symbol-summary.h
+index 4f896f4e4..06a1c7fff 100644
+--- a/gcc/symbol-summary.h
++++ b/gcc/symbol-summary.h
+@@ -21,6 +21,10 @@ along with GCC; see the file COPYING3. If not see
+ #ifndef GCC_SYMBOL_SUMMARY_H
+ #define GCC_SYMBOL_SUMMARY_H
+
++#include "diagnostic.h"
++/* Check whether in C language or LTO with only C language. */
++extern bool lang_c_p (void);
++
+ /* Base class for function_summary and fast_function_summary classes. */
+
+ template <class T>
+@@ -109,7 +113,9 @@ protected:
+ : m_allocator.allocate ();
+ /* In structure optimizatons, we call memset to ensure that
+ the allocated memory is initialized to 0. */
+- if (flag_ipa_struct_reorg)
++ if (optimize >= 3 && flag_ipa_struct_reorg && !seen_error ()
++ && flag_lto_partition == LTO_PARTITION_ONE && lang_c_p ()
++ && (in_lto_p || flag_whole_program))
+ memset (allocated, 0, sizeof (T));
+ return allocated;
+ }
+--
+2.33.0
+