]> gcc.gnu.org Git - gcc.git/commitdiff
LoongArch: Guard REGNO with REG_P in loongarch_expand_conditional_move [PR115169]
authorXi Ruoyao <xry111@xry111.site>
Wed, 22 May 2024 01:29:43 +0000 (09:29 +0800)
committerXi Ruoyao <xry111@xry111.site>
Tue, 28 May 2024 01:32:52 +0000 (09:32 +0800)
gcc/ChangeLog:

PR target/115169
* config/loongarch/loongarch.cc
(loongarch_expand_conditional_move): Guard REGNO with REG_P.

gcc/config/loongarch/loongarch.cc

index e7835ae34ae3c4080e9e380c81960e5ca5f9ac80..1b6df6a436503d1be9b93e580ba27ffa9badeef6 100644 (file)
@@ -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
            {
This page took 0.077317 seconds and 5 git commands to generate.