diff options
author | Xi Ruoyao <xry111@xry111.site> | 2024-05-22 09:29:43 +0800 |
---|---|---|
committer | Xi Ruoyao <xry111@xry111.site> | 2024-05-28 09:34:32 +0800 |
commit | e78980fdd5e82e09e26f524e98ad9cd90a29c1c4 (patch) | |
tree | 8c145f0c34ff31f4d073f55d17ef16792f85ab58 | |
parent | 133da68a4c47f62c1bd9edcd358e31dc8fe1f902 (diff) | |
download | gcc-e78980fdd5e82e09e26f524e98ad9cd90a29c1c4.zip gcc-e78980fdd5e82e09e26f524e98ad9cd90a29c1c4.tar.gz gcc-e78980fdd5e82e09e26f524e98ad9cd90a29c1c4.tar.bz2 |
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.
(cherry picked from commit ded91d857772c0183cc342cdc54d9128f6c57fa2)
-rw-r--r-- | gcc/config/loongarch/loongarch.cc | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index e7835ae..1b6df6a 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -5344,6 +5344,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]); @@ -5351,9 +5352,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; @@ -5395,7 +5402,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 { @@ -5403,7 +5410,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 { |