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.
This commit is contained in:
parent
73faaaa5a3
commit
44933fdeb3
1 changed files with 2 additions and 2 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue