Commit 641f1ab4 by John David Anglin

re PR middle-end/67401 (Incorrect expand of __atomic_compare_exchange_8 using…

re PR middle-end/67401 (Incorrect expand of __atomic_compare_exchange_8 using __sync_val_compare_and_swap_8)

	PR middle-end/67401
	* optabs.c (expand_atomic_compare_and_swap): Move result of emitting
	sync_compare_and_swap_optab libcall to target_oval.

From-SVN: r227746
parent aa9f4b4c
2015-09-14 John David Anglin <danglin@gcc.gnu.org>
PR middle-end/67401
* optabs.c (expand_atomic_compare_and_swap): Move result of emitting
sync_compare_and_swap_optab libcall to target_oval.
2015-09-14 Marek Polacek <polacek@redhat.com>
* rtlanal.c (split_double): Cast to unsigned when shifting a negative
......
......@@ -7521,9 +7521,10 @@ expand_atomic_compare_and_swap (rtx *ptarget_bool, rtx *ptarget_oval,
if (libfunc != NULL)
{
rtx addr = convert_memory_address (ptr_mode, XEXP (mem, 0));
target_oval = emit_library_call_value (libfunc, NULL_RTX, LCT_NORMAL,
mode, 3, addr, ptr_mode,
expected, mode, desired, mode);
rtx target = emit_library_call_value (libfunc, NULL_RTX, LCT_NORMAL,
mode, 3, addr, ptr_mode,
expected, mode, desired, mode);
emit_move_insn (target_oval, target);
/* Compute the boolean return value only if requested. */
if (ptarget_bool)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment