This is the mail archive of the gcc-bugs@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]

[Bug middle-end/37908] atomic NAND op generate wrong code; __sync_nand_and_fetch, __sync_fetch_and_nand



------- Comment #11 from uros at gcc dot gnu dot org  2008-11-17 11:20 -------
Subject: Bug 37908

Author: uros
Date: Mon Nov 17 11:19:06 2008
New Revision: 141942

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=141942
Log:
        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.
        * c.opt (Wsync-nand): New warning option.  Describe -Wsync-nand.

        * doc/invoke.texi (Warning options): Add Wsync-nand.
        * doc/extend.texi (Atomic Builtins) [__sync_fetch_and_nand]: Correct
        __sync_fetch_and_nand builtin operation in the example.  Add a note
        about changed semantics in GCC 4.4.
        [__sync_nand_and_fetch]: Correct __sync_nand_and_fetch builtin
        operation in the example.  Add a note about changed semantics in
        GCC 4.4.

testsuite/ChangeLog:

        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.


Added:
    trunk/gcc/testsuite/gcc.dg/pr37908.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/builtins.c
    trunk/gcc/c.opt
    trunk/gcc/doc/extend.texi
    trunk/gcc/doc/invoke.texi
    trunk/gcc/optabs.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gcc.c-torture/compile/sync-1.c
    trunk/gcc/testsuite/gcc.c-torture/compile/sync-2.c
    trunk/gcc/testsuite/gcc.c-torture/compile/sync-3.c
    trunk/gcc/testsuite/gcc.dg/ia64-sync-1.c
    trunk/gcc/testsuite/gcc.dg/ia64-sync-2.c
    trunk/gcc/testsuite/gcc.dg/sync-2.c
    trunk/gcc/testsuite/gcc.dg/sync-3.c


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37908


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