optabs.c (expand_atomic_load): Do not assume compare_and_swap will succeed for larger than word integers.
* optabs.c (expand_atomic_load): Do not assume compare_and_swap will succeed for larger than word integers. From-SVN: r184009
This commit is contained in:
parent
ea72cc1dca
commit
c51ec0a3d6
2 changed files with 11 additions and 3 deletions
|
@ -1,3 +1,8 @@
|
|||
2012-02-08 Andrew MacLeod <amacleod@redhat.com>
|
||||
|
||||
* optabs.c (expand_atomic_load): Do not assume compare_and_swap will
|
||||
always succeed for integers larger than a native word.
|
||||
|
||||
2012-02-08 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR rtl-optimization/52170
|
||||
|
|
|
@ -7665,9 +7665,12 @@ expand_atomic_load (rtx target, rtx mem, enum memmodel model)
|
|||
/* Issue val = compare_and_swap (mem, 0, 0).
|
||||
This may cause the occasional harmless store of 0 when the value is
|
||||
already 0, but it seems to be OK according to the standards guys. */
|
||||
expand_atomic_compare_and_swap (NULL, &target, mem, const0_rtx,
|
||||
const0_rtx, false, model, model);
|
||||
return target;
|
||||
if (expand_atomic_compare_and_swap (NULL, &target, mem, const0_rtx,
|
||||
const0_rtx, false, model, model))
|
||||
return target;
|
||||
else
|
||||
/* Otherwise there is no atomic load, leave the library call. */
|
||||
return NULL_RTX;
|
||||
}
|
||||
|
||||
/* Otherwise assume loads are atomic, and emit the proper barriers. */
|
||||
|
|
Loading…
Add table
Reference in a new issue