]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
middle-end: Fix stalled swapped condition code value [PR115836]
authorUros Bizjak <ubizjak@gmail.com>
Wed, 10 Jul 2024 07:27:27 +0000 (09:27 +0200)
committerUros Bizjak <ubizjak@gmail.com>
Wed, 10 Jul 2024 13:12:23 +0000 (15:12 +0200)
emit_store_flag_1 calculates scode (swapped condition code) at the
beginning of the function from the value of code variable.  However,
code variable may change before scode usage site, resulting in
invalid stalled scode value.

Move calculation of scode value just before its only usage site to
avoid stalled scode value.

PR middle-end/115836

gcc/ChangeLog:

* expmed.cc (emit_store_flag_1): Move calculation of
scode just before its only usage site.

gcc/expmed.cc

index 8bbbc94a98cb81a34950dfed53eef0f0ca2133bd..154964bd0687aaccccd9d0485bae8dbd81b614f2 100644 (file)
@@ -5632,11 +5632,9 @@ emit_store_flag_1 (rtx target, enum rtx_code code, rtx op0, rtx op1,
   enum insn_code icode;
   machine_mode compare_mode;
   enum mode_class mclass;
-  enum rtx_code scode;
 
   if (unsignedp)
     code = unsigned_condition (code);
-  scode = swap_condition (code);
 
   /* If one operand is constant, make it the second one.  Only do this
      if the other operand is not constant as well.  */
@@ -5751,6 +5749,8 @@ emit_store_flag_1 (rtx target, enum rtx_code code, rtx op0, rtx op1,
 
          if (GET_MODE_CLASS (mode) == MODE_FLOAT)
            {
+             enum rtx_code scode = swap_condition (code);
+
              tem = emit_cstore (target, icode, scode, mode, compare_mode,
                                 unsignedp, op1, op0, normalizep, target_mode);
              if (tem)