aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2024-07-10 09:27:27 +0200
committerUros Bizjak <ubizjak@gmail.com>2024-07-10 20:33:07 +0200
commitcc47ad09e571016f498710fbd8a19f302c9004de (patch)
tree0ac824cc929356edc0a982e0d2462ecbe5210a1d
parent4f6f63f2cfcc62d6d893f301ea6aa4f6365624ba (diff)
downloadgcc-cc47ad09e571016f498710fbd8a19f302c9004de.zip
gcc-cc47ad09e571016f498710fbd8a19f302c9004de.tar.gz
gcc-cc47ad09e571016f498710fbd8a19f302c9004de.tar.bz2
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)
-rw-r--r--gcc/expmed.cc4
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/expmed.cc b/gcc/expmed.cc
index 1553ea8..e06cdd4 100644
--- a/gcc/expmed.cc
+++ b/gcc/expmed.cc
@@ -5607,11 +5607,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. */
@@ -5726,6 +5724,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)