Commit 18c05628 by Nathan Sidwell Committed by Nathan Sidwell

nvptx.md (allocate_stack): Emit sorry during expansion.

	* config/nvptx/nvptx.md (allocate_stack): Emit sorry during
	expansion.
	* config/nvptx/nvptx.c (nvptx_declare_function_name): Look at
	crtl->stack_alignment_needed to determine alignment.
	(nvptx_get_drap_rtx): New.
	(TARGET_GET_DRAP_RTX): Override.
	* config/nvptx/nvptx.h (MAX_STACK_ALIGNMENT): Set.

From-SVN: r227084
parent 7717e0f1
2015-08-21 Nathan Sidwell <nathan@acm.org>
* config/nvptx/nvptx.md (allocate_stack): Emit sorry during
expansion.
* config/nvptx/nvptx.c (nvptx_declare_function_name): Look at
crtl->stack_alignment_needed to determine alignment.
(nvptx_get_drap_rtx): New.
(TARGET_GET_DRAP_RTX): Override.
* config/nvptx/nvptx.h (MAX_STACK_ALIGNMENT): Set.
2015-08-21 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> 2015-08-21 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
* config.build: Remove case for m68000-hp-hpux* | m68k-hp-hpux*. * config.build: Remove case for m68000-hp-hpux* | m68k-hp-hpux*.
......
...@@ -598,9 +598,11 @@ nvptx_declare_function_name (FILE *file, const char *name, const_tree decl) ...@@ -598,9 +598,11 @@ nvptx_declare_function_name (FILE *file, const char *name, const_tree decl)
sz = get_frame_size (); sz = get_frame_size ();
if (sz > 0 || cfun->machine->has_call_with_sc) if (sz > 0 || cfun->machine->has_call_with_sc)
{ {
int alignment = crtl->stack_alignment_needed / BITS_PER_UNIT;
fprintf (file, "\t.reg.u%d %%frame;\n" fprintf (file, "\t.reg.u%d %%frame;\n"
"\t.local.align 8 .b8 %%farray[" HOST_WIDE_INT_PRINT_DEC"];\n", "\t.local.align %d .b8 %%farray[" HOST_WIDE_INT_PRINT_DEC"];\n",
BITS_PER_WORD, sz == 0 ? 1 : sz); BITS_PER_WORD, alignment, sz == 0 ? 1 : sz);
fprintf (file, "\tcvta.local.u%d %%frame, %%farray;\n", fprintf (file, "\tcvta.local.u%d %%frame, %%farray;\n",
BITS_PER_WORD); BITS_PER_WORD);
} }
...@@ -726,6 +728,14 @@ nvptx_function_ok_for_sibcall (tree, tree) ...@@ -726,6 +728,14 @@ nvptx_function_ok_for_sibcall (tree, tree)
return false; return false;
} }
/* Return Dynamic ReAlignment Pointer RTX. For PTX there isn't any. */
static rtx
nvptx_get_drap_rtx (void)
{
return NULL_RTX;
}
/* Implement the TARGET_CALL_ARGS hook. Record information about one /* Implement the TARGET_CALL_ARGS hook. Record information about one
argument to the next call. */ argument to the next call. */
...@@ -2118,6 +2128,8 @@ nvptx_file_end (void) ...@@ -2118,6 +2128,8 @@ nvptx_file_end (void)
#define TARGET_LIBCALL_VALUE nvptx_libcall_value #define TARGET_LIBCALL_VALUE nvptx_libcall_value
#undef TARGET_FUNCTION_OK_FOR_SIBCALL #undef TARGET_FUNCTION_OK_FOR_SIBCALL
#define TARGET_FUNCTION_OK_FOR_SIBCALL nvptx_function_ok_for_sibcall #define TARGET_FUNCTION_OK_FOR_SIBCALL nvptx_function_ok_for_sibcall
#undef TARGET_GET_DRAP_RTX
#define TARGET_GET_DRAP_RTX nvptx_get_drap_rtx
#undef TARGET_SPLIT_COMPLEX_ARG #undef TARGET_SPLIT_COMPLEX_ARG
#define TARGET_SPLIT_COMPLEX_ARG hook_bool_const_tree_true #define TARGET_SPLIT_COMPLEX_ARG hook_bool_const_tree_true
#undef TARGET_RETURN_IN_MEMORY #undef TARGET_RETURN_IN_MEMORY
......
...@@ -52,6 +52,8 @@ ...@@ -52,6 +52,8 @@
#define BIGGEST_ALIGNMENT 64 #define BIGGEST_ALIGNMENT 64
#define STRICT_ALIGNMENT 1 #define STRICT_ALIGNMENT 1
#define MAX_STACK_ALIGNMENT (1024 * 8)
/* Copied from elf.h and other places. We'd otherwise use /* Copied from elf.h and other places. We'd otherwise use
BIGGEST_ALIGNMENT and fail a number of testcases. */ BIGGEST_ALIGNMENT and fail a number of testcases. */
#define MAX_OFILE_ALIGNMENT (32768 * 8) #define MAX_OFILE_ALIGNMENT (32768 * 8)
......
...@@ -1241,6 +1241,12 @@ ...@@ -1241,6 +1241,12 @@
(match_operand 1 "nvptx_register_operand")] (match_operand 1 "nvptx_register_operand")]
"" ""
{ {
/* The ptx documentation specifies an alloca intrinsic (for 32 bit
only) but notes it is not implemented. The assembler emits a
confused error message. Issue a blunt one now instead. */
sorry ("target cannot support alloca.");
emit_insn (gen_nop ());
DONE;
if (TARGET_ABI64) if (TARGET_ABI64)
emit_insn (gen_allocate_stack_di (operands[0], operands[1])); emit_insn (gen_allocate_stack_di (operands[0], operands[1]));
else else
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment