From 1988b2c22a3afda962e12ccf22ccd23398dce220 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Tue, 17 May 2016 21:16:49 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/config/nvptx/nvptx.c | 13 +++++++++++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.target/nvptx/abi-vararg-3.c | 13 +++++++++++++ 4 files changed, 35 insertions(+) create mode 100644 gcc/testsuite/gcc.target/nvptx/abi-vararg-3.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cf13477185f..db31f1c15bd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2016-05-17 Nathan Sidwell + + * config/nvptx/nvptx.c (nvptx_function_arg_boundary): New. + (TARGET_FUNCTION_ARG_BOUNDARY): Override. + 2016-05-17 Mikhail Maltsev PR tree-optimization/54579 diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c index e81a450a20c..d4a8f29a21c 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 e5127affb18..5e94e1ebbbe 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2016-05-17 Nathan Sidwell + + * gcc.target/nvptx/abi-vararg-3.c: New. + 2016-05-17 Mikhail Maltsev 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 00000000000..24fd684527d --- /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\\\]," } } */