mirror of
https://git.yoctoproject.org/poky
synced 2026-02-20 08:29:42 +01:00
gcc: backport patch to fix miscompilation on mips64
Backport a patch to fix miscompilation on mips64. We've observed strange behaviour of `systemctl status <xxx> on qemumips64. The output of the command is like `systemctl show <xxx>', which is incorrect. The problem is due to the miscompilation of gcc for mips64 platform, thus backporting patch from upstream to fix this problem. [YOCTO #12266] (From OE-Core rev: cfa13e5c756849820644d86d1882602649db6a9c) Signed-off-by: Chen Qi <Qi.Chen@windriver.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -79,6 +79,7 @@ SRC_URI = "\
|
||||
"
|
||||
BACKPORTS = "\
|
||||
file://0051-ARM-PR-82445-suppress-32-bit-aligned-ldrd-strd-peeph.patch \
|
||||
file://0001-PR-rtl-optimization-81803.patch \
|
||||
"
|
||||
SRC_URI[md5sum] = "ff370482573133a7fcdd96cd2f552292"
|
||||
SRC_URI[sha256sum] = "1cf7adf8ff4b5aa49041c8734bbcf1ad18cc4c94d0029aae0f4e48841088479a"
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
From 5cbb8e6b1122092b3eaabd4270b2f316aa40407c Mon Sep 17 00:00:00 2001
|
||||
From: ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
|
||||
Date: Tue, 31 Oct 2017 18:27:52 +0000
|
||||
Subject: [PATCH] PR rtl-optimization/81803 * lra-constraints.c
|
||||
(curr_insn_transform): Also reload the whole register for a strict subreg
|
||||
no wider than a word if this is for a WORD_REGISTER_OPERATIONS target.
|
||||
|
||||
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@254275 138bc75d-0d04-0410-961f-82ee72b054a4
|
||||
|
||||
Upstream-Status: Backport
|
||||
|
||||
This patch removes changes to Changelog from the original patch upstream. This is
|
||||
because we are backporting a patch to a stable version, making changes to Changelog,
|
||||
especially up '* GCC 7.2.0 released.', feels a little weird.
|
||||
|
||||
Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
|
||||
---
|
||||
gcc/lra-constraints.c | 11 ++++++++---
|
||||
2 files changed, 16 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
|
||||
index a423f069836..3758409bb9c 100644
|
||||
--- a/gcc/lra-constraints.c
|
||||
+++ b/gcc/lra-constraints.c
|
||||
@@ -4207,8 +4207,9 @@ curr_insn_transform (bool check_only_p)
|
||||
reg = SUBREG_REG (*loc);
|
||||
byte = SUBREG_BYTE (*loc);
|
||||
if (REG_P (reg)
|
||||
- /* Strict_low_part requires reload the register not
|
||||
- the sub-register. */
|
||||
+ /* Strict_low_part requires reloading the register and not
|
||||
+ just the subreg. Likewise for a strict subreg no wider
|
||||
+ than a word for WORD_REGISTER_OPERATIONS targets. */
|
||||
&& (curr_static_id->operand[i].strict_low
|
||||
|| (!paradoxical_subreg_p (mode, GET_MODE (reg))
|
||||
&& (hard_regno
|
||||
@@ -4219,7 +4220,11 @@ curr_insn_transform (bool check_only_p)
|
||||
&& (goal_alt[i] == NO_REGS
|
||||
|| (simplify_subreg_regno
|
||||
(ira_class_hard_regs[goal_alt[i]][0],
|
||||
- GET_MODE (reg), byte, mode) >= 0)))))
|
||||
+ GET_MODE (reg), byte, mode) >= 0)))
|
||||
+ || (GET_MODE_PRECISION (mode)
|
||||
+ < GET_MODE_PRECISION (GET_MODE (reg))
|
||||
+ && GET_MODE_SIZE (GET_MODE (reg)) <= UNITS_PER_WORD
|
||||
+ && WORD_REGISTER_OPERATIONS)))
|
||||
{
|
||||
/* An OP_INOUT is required when reloading a subreg of a
|
||||
mode wider than a word to ensure that data beyond the
|
||||
--
|
||||
2.13.0
|
||||
|
||||
Reference in New Issue
Block a user