From 8f5f365977a7d0cbce875d1efa3af67d32a85165 Mon Sep 17 00:00:00 2001 From: Peng Fan Date: Thu, 20 Nov 2025 17:02:43 +0800 Subject: [PATCH] LoongArch: avoid wrong if-conversions from cmove --- ...void-wrong-if-conversions-from-cmove.patch | 34 +++++++++++++++++++ gcc.spec | 8 ++++- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 LoongArch-avoid-wrong-if-conversions-from-cmove.patch diff --git a/LoongArch-avoid-wrong-if-conversions-from-cmove.patch b/LoongArch-avoid-wrong-if-conversions-from-cmove.patch new file mode 100644 index 0000000..2416665 --- /dev/null +++ b/LoongArch-avoid-wrong-if-conversions-from-cmove.patch @@ -0,0 +1,34 @@ +From 56ffe2e24f693b4e52fb23f090995af9107569ac Mon Sep 17 00:00:00 2001 +From: Peng Fan +Date: Thu, 20 Nov 2025 08:58:47 +0000 +Subject: [PATCH] LoongArch: avoid wrong if-conversions from cmove + +--- + gcc/config/loongarch/loongarch.cc | 9 +++------ + 1 file changed, 3 insertions(+), 6 deletions(-) + +diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc +index a6c1cf1bd..3b926af1e 100644 +--- a/gcc/config/loongarch/loongarch.cc ++++ b/gcc/config/loongarch/loongarch.cc +@@ -11198,14 +11198,11 @@ loongarch_c_mode_for_suffix (char suffix) + static bool + loongarch_noce_conversion_profitable_p (rtx_insn *seq, struct noce_if_info *if_info) + { +- rtx src, dst; +- enum rtx_code code; ++ enum rtx_class cls; + for (rtx_insn *insn = seq; insn; insn = NEXT_INSN (insn)) + { +- src = SET_SRC (single_set (insn)); +- dst = SET_DEST (single_set (insn)); +- code = GET_CODE (src); +- if (REG_P (dst) && (code == LTU || code == LEU || code == GEU || code == GTU)) ++ cls = GET_RTX_CLASS (GET_CODE (SET_SRC (single_set (insn)))); ++ if ( cls == RTX_COMPARE || cls == RTX_COMM_COMPARE) + return false; + } + +-- +2.43.0 + diff --git a/gcc.spec b/gcc.spec index 3e016cf..0b28a55 100644 --- a/gcc.spec +++ b/gcc.spec @@ -2,7 +2,7 @@ %global gcc_major 12 # Note, gcc_release must be integer, if you want to add suffixes to # %%{release}, append them after %%{gcc_release} on Release: line. -%global gcc_release 101 +%global gcc_release 102 %global _unpackaged_files_terminate_build 0 %global _performance_build 1 @@ -922,6 +922,7 @@ Patch3381: 0058-LoongArch-Prevent-subreg-of-subreg-in-CRC.patch Patch3382: 0059-LoongArch-Fix-errors-due-to-version-differences.patch Patch3383: 0060-LoongArch-Implement-NOCE_CONVERSION_PROFITABLE_P-to-.patch Patch3384: 0061-LoongArch-Only-allow-valid-binary-op-when-optimize-c.patch +Patch3385: LoongArch-avoid-wrong-if-conversions-from-cmove.patch %endif # On ARM EABI systems, we do want -gnueabi to be part of the @@ -2170,6 +2171,7 @@ not stable, so plugins must be rebuilt any time GCC is updated. %patch -P3382 -p1 %patch -P3383 -p1 %patch -P3384 -p1 +%patch -P3385 -p1 %endif echo '%{_vendor} %{version}-%{release}' > gcc/DEV-PHASE @@ -4452,6 +4454,10 @@ end %doc rpm.doc/changelogs/libcc1/ChangeLog* %changelog +* Thu Nov 20 2025 Peng Fan - 12.3.1-102 +- Type: Bugfix +- DESC: LoongArch: avoid wrong if-conversions from cmove + * Mon Nov 17 2025 linhouzhong - 12.3.1-101 - Type: Sync - DESC: Sync patch from openeuler/gcc. -- Gitee