Fix expand_atomic_fetch_op wrt unused_result.
authorRichard Henderson <rth@redhat.com>
Sun, 27 Nov 2011 00:10:18 +0000 (16:10 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Sun, 27 Nov 2011 00:10:18 +0000 (16:10 -0800)
        * optabs.c (expand_atomic_fetch_op): Always return result.

From-SVN: r181750

gcc/ChangeLog
gcc/optabs.c

index 41b3b9b4d4099b737cdcf012a02f191af11b4f23..c16f1d8db5838c285a9c490912c22b59ab9deaf0 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 0ce21e9b548550a32c82f606df5a4fec4c807d49..a1917cc322046130750769a764f278c6af968c08 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;