mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-24 11:35:31 +08:00
i386: Fix infinite loop under -mrelax-cmpxchg-loop [PR 103069]
For -mrelax-cmpxchg-loop which relaxes atomic_fetch_<logic> loops, there is a missing set to %eax when compare fails, which would result in infinite loop in some benchmark. Add set to %eax to avoid it. gcc/ChangeLog: PR target/103069 * config/i386/i386-expand.cc (ix86_expand_cmpxchg_loop): Add missing set to target_val at pause label.
This commit is contained in:
parent
41f8f8b8a4
commit
522f25e90c
@ -23405,6 +23405,7 @@ ix86_expand_cmpxchg_loop (rtx *ptarget_bool, rtx target_val,
|
|||||||
|
|
||||||
/* If mem is not expected, pause and loop back. */
|
/* If mem is not expected, pause and loop back. */
|
||||||
emit_label (cmp_label);
|
emit_label (cmp_label);
|
||||||
|
emit_move_insn (target_val, new_mem);
|
||||||
emit_insn (gen_pause ());
|
emit_insn (gen_pause ());
|
||||||
emit_jump_insn (gen_jump (loop_label));
|
emit_jump_insn (gen_jump (loop_label));
|
||||||
emit_barrier ();
|
emit_barrier ();
|
||||||
|
Loading…
Reference in New Issue
Block a user