nvptx.c (write_fn_proto): Handle BUILT_IN_ATOMIC_COMPARE_EXCHANGE_n oddity.
gcc/ * config/nvptx/nvptx.c (write_fn_proto): Handle BUILT_IN_ATOMIC_COMPARE_EXCHANGE_n oddity. gcc/testsuite/ * gcc.dg/atomic-noinline-aux.c: Include stddef.h. Fix __atomic_is_lock_free declaration. From-SVN: r236209
This commit is contained in:
parent
7549163c15
commit
ac3d02e247
4 changed files with 38 additions and 4 deletions
|
@ -1,3 +1,8 @@
|
|||
2016-05-13 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
* config/nvptx/nvptx.c (write_fn_proto): Handle
|
||||
BUILT_IN_ATOMIC_COMPARE_EXCHANGE_n oddity.
|
||||
|
||||
2016-05-13 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* tree-ssa-loop-ivopts.c (create_new_ivs): Use HOST_WIDE_INT_PRINT_DEC
|
||||
|
|
|
@ -751,6 +751,26 @@ write_fn_proto (std::stringstream &s, bool is_defn,
|
|||
tree fntype = TREE_TYPE (decl);
|
||||
tree result_type = TREE_TYPE (fntype);
|
||||
|
||||
/* atomic_compare_exchange_$n builtins have an exceptional calling
|
||||
convention. */
|
||||
int not_atomic_weak_arg = -1;
|
||||
if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
|
||||
switch (DECL_FUNCTION_CODE (decl))
|
||||
{
|
||||
case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1:
|
||||
case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_2:
|
||||
case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_4:
|
||||
case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_8:
|
||||
case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_16:
|
||||
/* These atomics skip the 'weak' parm in an actual library
|
||||
call. We must skip it in the prototype too. */
|
||||
not_atomic_weak_arg = 3;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
/* Declare the result. */
|
||||
bool return_in_mem = write_return_type (s, true, result_type);
|
||||
|
||||
|
@ -775,11 +795,14 @@ write_fn_proto (std::stringstream &s, bool is_defn,
|
|||
prototyped = false;
|
||||
}
|
||||
|
||||
for (; args; args = TREE_CHAIN (args))
|
||||
for (; args; args = TREE_CHAIN (args), not_atomic_weak_arg--)
|
||||
{
|
||||
tree type = prototyped ? TREE_VALUE (args) : TREE_TYPE (args);
|
||||
|
||||
argno = write_arg_type (s, -1, argno, type, prototyped);
|
||||
|
||||
if (not_atomic_weak_arg)
|
||||
argno = write_arg_type (s, -1, argno, type, prototyped);
|
||||
else
|
||||
gcc_assert (type == boolean_type_node);
|
||||
}
|
||||
|
||||
if (stdarg_p (fntype))
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2016-05-13 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
* gcc.dg/atomic-noinline-aux.c: Include stddef.h. Fix
|
||||
__atomic_is_lock_free declaration.
|
||||
|
||||
2016-05-13 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/42587
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
the exact entry points the test file will require. All these routines
|
||||
simply set the first parameter to 1, and the caller will test for that. */
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
|
@ -64,7 +65,7 @@ __atomic_fetch_nand_1 (unsigned char *p, unsigned char v, int i)
|
|||
return ret;
|
||||
}
|
||||
|
||||
bool __atomic_is_lock_free (int i, void *p)
|
||||
bool __atomic_is_lock_free (size_t i, void *p)
|
||||
{
|
||||
*(short *)p = 1;
|
||||
return true;
|
||||
|
|
Loading…
Add table
Reference in a new issue