diff options
author | Nathan Sidwell <nathan@acm.org> | 2016-05-17 21:16:49 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2016-05-17 21:16:49 +0000 |
commit | 1988b2c22a3afda962e12ccf22ccd23398dce220 (patch) | |
tree | 063c4cdcc234ddde611b2a90b2f154c94440d869 | |
parent | ad1d92ab9f65c539bf819ec5eda91789804f4e3f (diff) | |
download | gcc-1988b2c22a3afda962e12ccf22ccd23398dce220.zip gcc-1988b2c22a3afda962e12ccf22ccd23398dce220.tar.gz gcc-1988b2c22a3afda962e12ccf22ccd23398dce220.tar.bz2 |
nvptx.c (nvptx_function_arg_boundary): New.
* config/nvptx/nvptx.c (nvptx_function_arg_boundary): New.
(TARGET_FUNCTION_ARG_BOUNDARY): Override.
testsuite/
* gcc.target/nvptx/abi-vararg-3.c: New.
From-SVN: r236345
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/nvptx/nvptx.c | 13 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/nvptx/abi-vararg-3.c | 13 |
4 files changed, 35 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cf13477..db31f1c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2016-05-17 Nathan Sidwell <nathan@acm.org> + + * config/nvptx/nvptx.c (nvptx_function_arg_boundary): New. + (TARGET_FUNCTION_ARG_BOUNDARY): Override. + 2016-05-17 Mikhail Maltsev <maltsevm@gmail.com> PR tree-optimization/54579 diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c index e81a450..d4a8f29 100644 --- a/gcc/config/nvptx/nvptx.c +++ b/gcc/config/nvptx/nvptx.c @@ -464,6 +464,17 @@ nvptx_function_arg_advance (cumulative_args_t cum_v, cum->count++; } +/* Implement TARGET_FUNCTION_ARG_BOUNDARY. + + For nvptx This is only used for varadic args. The type has already + been promoted and/or converted to invisible reference. */ + +static unsigned +nvptx_function_arg_boundary (machine_mode mode, const_tree ARG_UNUSED (type)) +{ + return GET_MODE_ALIGNMENT (mode); +} + /* Handle the TARGET_STRICT_ARGUMENT_NAMING target hook. For nvptx, we know how to handle functions declared as stdarg: by @@ -4835,6 +4846,8 @@ nvptx_goacc_reduction (gcall *call) #define TARGET_FUNCTION_INCOMING_ARG nvptx_function_incoming_arg #undef TARGET_FUNCTION_ARG_ADVANCE #define TARGET_FUNCTION_ARG_ADVANCE nvptx_function_arg_advance +#undef TARGET_FUNCTION_ARG_BOUNDARY +#define TARGET_FUNCTION_ARG_BOUNDARY nvptx_function_arg_boundary #undef TARGET_PASS_BY_REFERENCE #define TARGET_PASS_BY_REFERENCE nvptx_pass_by_reference #undef TARGET_FUNCTION_VALUE_REGNO_P diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e5127af..5e94e1e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2016-05-17 Nathan Sidwell <nathan@acm.org> + + * gcc.target/nvptx/abi-vararg-3.c: New. + 2016-05-17 Mikhail Maltsev <maltsevm@gmail.com> PR tree-optimization/54579 diff --git a/gcc/testsuite/gcc.target/nvptx/abi-vararg-3.c b/gcc/testsuite/gcc.target/nvptx/abi-vararg-3.c new file mode 100644 index 0000000..24fd684 --- /dev/null +++ b/gcc/testsuite/gcc.target/nvptx/abi-vararg-3.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-Wno-pedantic -Wno-long-long" } */ + +/* 64-bit var args should be aligned to 64 bits. */ + +void Foo (const char *, ...); + +void Baz () +{ + Foo ("", 0, 1ll); +} + +/* { dg-final { scan-assembler "st.u64\t\\\[%stack\\+8\\\]," } } */ |