This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH v4, middle end]: Fix PR 37908, thinko with atomic NAND operation


Hello!

It sounds like the old builtin matched its documentation. It may not be
very useful, but it does something, and breaking code seems
unattractive. That would also get rid of the need for the warning.

No, as explained in my previous message, it only matched wrong example.
+@emph{Note:} GCC 4.4 and later implement @code{__sync_nand_and_fetch}

__sync_fetch_and_nand, right?
We have two types of sync builtins - __sync_op_and_fetch and __sync_fetch_and_op. This one is correct.

Attached patch revision implements suggested once-per-file warning about changed NAND builtin semantics.

2008-11-15 Uros Bizjak <ubizjak@gmail.com>

PR middle-end/37908
* optabs.c (expand_sync_operation): Properly handle NAND case
by calculating ~(t1 & val) instead of (~t1 & val).
* builtins.c (expand_builtin_sync_operation): Warn for changed
semantics in NAND builtins.
* doc/extend.texi (Atomic Builtins) [__sync_fetch_and_nand]: Correct
__sync_fetch_and_nand builtin operation in the example. Add note
about changed semantics in GCC 4.4.
[__sync_nand_and_fetch]: Correct __sync_nand_and_fetch builtin
operation in the example. Add note about changed semantics in GCC 4.4.
testsuite/ChangeLog:


2008-11-15 Uros Bizjak <ubizjak@gmail.com>

   PR middle-end/37908
   * gcc.dg/pr37908.c: New test.
   * gcc.dg/ia64-sync-1.c: Correct __sync_fetch_and_nand and
   __sync_nand_and_fetch results.  Add dg-message to look for the warning
   about changed semantics of NAND builtin.
   (init_si, init_di): Change init value for __sync_fetch_and_nand to -1.
   (test_si, test_di): Change expected result of
   __sync_nand_and_fetch to ~7.
   * gcc.dg/ia64-sync-2.c: Correct __sync_fetch_and_nand and
   __sync_nand_and_fetch results.  Add dg-message to look for the warning
   about changed semantics of NAND builtin.
   (init_noret_si, init_noret_di): Change init value for
   __sync_fetch_and_nand to -1.
   (init_noret_si, init_noret_di): Change expected result of
   __sync_nand_and_fetch to ~7.
   * gcc.dg/sync-2.c: Correct __sync_fetch_and_nand and
   __sync_nand_and_fetch results.  Add dg-message to look for the warning
   about changed semantics of NAND builtin.
   (init_qi, init_qi): Change init value for __sync_fetch_and_nand to -1.
   (init_hi, init_hi): Change expected result of
   __sync_nand_and_fetch to ~7.
   * gcc.dg/sync-3.c: Copy from sync-2.c instead of including
   the c source file.
   * gcc.c-torture/compile/sync-1.c: Add dg-message to look for the
   warning about changed semantics of NAND builtin.
   * gcc.c-torture/compile/sync-2.c: Ditto.
   * gcc.c-torture/compile/sync-3.c: Ditto.

Patch was bootstrapped and regression tested on x86_64-pc-linux-gnu {,-m32}. OK for mainline?

Uros.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]