On Fri, Feb 07, 2014 at 12:58:37PM +0100, Andreas Krebbel wrote:
> 2014-02-07 Andreas Krebbel <[email protected]>
>
> * optabs.c (expand_atomic_compare_and_swap): Allow expander to
> fail.
Ok.
> --- a/gcc/optabs.c
> +++ b/gcc/optabs.c
> @@ -7383,12 +7383,13 @@ expand_atomic_compare_and_swap (rtx *ptarget_bool,
> rtx *ptarget_oval,
> create_integer_operand (&ops[5], is_weak);
> create_integer_operand (&ops[6], succ_model);
> create_integer_operand (&ops[7], fail_model);
> - expand_insn (icode, 8, ops);
> -
> - /* Return success/failure. */
> - target_bool = ops[0].value;
> - target_oval = ops[1].value;
> - goto success;
> + if (maybe_expand_insn (icode, 8, ops))
> + {
> + /* Return success/failure. */
> + target_bool = ops[0].value;
> + target_oval = ops[1].value;
> + goto success;
> + }
> }
>
> /* Otherwise fall back to the original __sync_val_compare_and_swap
Jakub