https://gcc.gnu.org/g:10904e051f1b970cd8e030dff7dec8374c946b12

commit r12-10610-g10904e051f1b970cd8e030dff7dec8374c946b12
Author: Uros Bizjak <ubiz...@gmail.com>
Date:   Wed Jul 10 09:27:27 2024 +0200

    middle-end: Fix stalled swapped condition code value [PR115836]
    
    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.
    
    (cherry picked from commit 44933fdeb338e00c972e42224b9a83d3f8f6a757)

Diff:
---
 gcc/expmed.cc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gcc/expmed.cc b/gcc/expmed.cc
index 1bb4da8d094e..39e53faec70e 100644
--- a/gcc/expmed.cc
+++ b/gcc/expmed.cc
@@ -5601,11 +5601,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.  */
@@ -5773,6 +5771,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)

Reply via email to