aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2016-05-17 21:16:49 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2016-05-17 21:16:49 +0000
commit1988b2c22a3afda962e12ccf22ccd23398dce220 (patch)
tree063c4cdcc234ddde611b2a90b2f154c94440d869
parentad1d92ab9f65c539bf819ec5eda91789804f4e3f (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/config/nvptx/nvptx.c13
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/nvptx/abi-vararg-3.c13
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\\\]," } } */