Patchwork small bug fix for atomic compare and swap

login
register
mail settings
Submitter Mike Stump
Date Jan. 23, 2013, 9:10 p.m.
Message ID <DBB9399C-977F-4B8D-A3C7-0DDB7D0EE0F2@comcast.net>
Download mbox | patch
Permalink /patch/215038/
State New
Headers show

Comments

Mike Stump - Jan. 23, 2013, 9:10 p.m.
The problem is that expansion can use const0_rtx as an indicator that we are not interested in the value.  This is an invalid as a target of a move, so, we must always have a valid target.  This dummies up a target, just like in the NULL_RTX case.

Ok?

Patch

diff --git a/gcc/optabs.c b/gcc/optabs.c
index 353727f..a091deb 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -7174,6 +7174,8 @@  expand_atomic_test_and_set (rtx target, rtx mem, enum memmodel model)
     {
       trueval = const1_rtx;
       subtarget = target ? target : gen_reg_rtx (mode);
+      if (subtarget == const0_rtx)
+       subtarget = gen_reg_rtx (mode);
     }
   else
     {