OSDN Git Service

Fix expand_atomic_fetch_op wrt unused_result.
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 27 Nov 2011 00:10:18 +0000 (00:10 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 27 Nov 2011 00:10:18 +0000 (00:10 +0000)
        * optabs.c (expand_atomic_fetch_op): Always return result.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@181750 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/optabs.c

index 41b3b9b..c16f1d8 100644 (file)
@@ -1,5 +1,7 @@
 2011-11-26  Richard Henderson  <rth@redhat.com>
 
+       * optabs.c (expand_atomic_fetch_op): Always return result.
+
        * optabs.c (init_sync_libfuncs_1): Include max in iteration.
 
        * omp-low.c (expand_omp_atomic): Assume anything aligned to
index 0ce21e9..a1917cc 100644 (file)
@@ -8068,7 +8068,7 @@ expand_atomic_fetch_op (rtx target, rtx mem, rtx val, enum rtx_code code,
        {
          /* If the result isn't used, no need to do compensation code.  */
          if (unused_result)
-           return target;
+           return result;
 
          /* Issue compensation code.  Fetch_after  == fetch_before OP val.
             Fetch_before == after REVERSE_OP val.  */
@@ -8110,9 +8110,7 @@ expand_atomic_fetch_op (rtx target, rtx mem, rtx val, enum rtx_code code,
          result = emit_library_call_value (libfunc, NULL, LCT_NORMAL, mode,
                                            2, addr, ptr_mode, val, mode);
 
-         if (unused_result)
-           return target;
-         if (fixup)
+         if (!unused_result && fixup)
            result = expand_simple_binop (mode, code, result, val, target,
                                          true, OPTAB_LIB_WIDEN);
          return result;