Projects
openEuler:24.03:SP1:Everything
gcc
_service:tar_scm:0167-LoongArch-Guard-REGNO-wit...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:0167-LoongArch-Guard-REGNO-with-REG_P-in-loongarch_expand.patch of Package gcc
From be1397b598a436d562e6a35a13ed2ae695531255 Mon Sep 17 00:00:00 2001 From: Xi Ruoyao <xry111@xry111.site> Date: Wed, 22 May 2024 09:29:43 +0800 Subject: [PATCH 167/188] LoongArch: Guard REGNO with REG_P in loongarch_expand_conditional_move [PR115169] gcc/ChangeLog: PR target/115169 * config/loongarch/loongarch.cc (loongarch_expand_conditional_move): Guard REGNO with REG_P. --- gcc/config/loongarch/loongarch.cc | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index c86a0856b..0c2c38f6f 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -5341,6 +5341,7 @@ loongarch_expand_conditional_move (rtx *operands) rtx op1_extend = op1; /* Record whether operands[2] and operands[3] modes are promoted to word_mode. */ + bool promote_op[2] = {false, false}; bool promote_p = false; machine_mode mode = GET_MODE (operands[0]); @@ -5348,9 +5349,15 @@ loongarch_expand_conditional_move (rtx *operands) loongarch_emit_float_compare (&code, &op0, &op1); else { - if ((REGNO (op0) == REGNO (operands[2]) - || (REGNO (op1) == REGNO (operands[3]) && (op1 != const0_rtx))) - && (GET_MODE_SIZE (GET_MODE (op0)) < word_mode)) + if (GET_MODE_SIZE (GET_MODE (op0)) < word_mode) + { + promote_op[0] = (REG_P (op0) && REG_P (operands[2]) && + REGNO (op0) == REGNO (operands[2])); + promote_op[1] = (REG_P (op1) && REG_P (operands[3]) && + REGNO (op1) == REGNO (operands[3])); + } + + if (promote_op[0] || promote_op[1]) { mode = word_mode; promote_p = true; @@ -5392,7 +5399,7 @@ loongarch_expand_conditional_move (rtx *operands) if (promote_p) { - if (REGNO (XEXP (operands[1], 0)) == REGNO (operands[2])) + if (promote_op[0]) op2 = op0_extend; else { @@ -5400,7 +5407,7 @@ loongarch_expand_conditional_move (rtx *operands) op2 = force_reg (mode, op2); } - if (REGNO (XEXP (operands[1], 1)) == REGNO (operands[3])) + if (promote_op[1]) op3 = op1_extend; else { -- 2.43.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2