Commit 77e0a97a by Tom de Vries Committed by Tom de Vries

[nvptx] Ignore c++ exceptions

The nvptx port can't support exceptions using sjlj, because ptx does not
support sjlj.  However, default_except_unwind_info still returns UI_SJLJ, even
even if we configure with --disable-sjlj-exceptions, because UI_SJLJ is the
fallback option.

The reason default_except_unwind_info doesn't return UI_DWARF2 is because
DWARF2_UNWIND_INFO is not defined in defaults.h, because
INCOMING_RETURN_ADDR_RTX is not defined, because there's no ptx equivalent.

Testcase libgomp.c++/for-15.C currently doesn't compile unless fno-exceptions
is added because:
- it tries to generate sjlj exception handling code, and
- it tries to generate exception tables using label-addressed .byte sequence.
  Ptx doesn't support generating random data at a label, nor being able to
  load/write data relative to a label.

This patch fixes the first problem by using UI_TARGET for nvptx.

The second problem is worked around by generating all .byte sequences commented
out.  It would be better to have a narrower workaround, and define
TARGET_ASM_BYTE_OP to "error: .byte unsupported " or some such.

This patch does not enable exceptions for nvptx, it merely allows c++ programs
to run correctly if they do no use exception handling.

Build and reg-tested on x86_64 with nvptx accelerator.

2018-08-02  Tom de Vries  <tdevries@suse.de>

	PR target/86660
	* common/config/nvptx/nvptx-common.c (nvptx_except_unwind_info): New
	function.  Return UI_TARGET unconditionally.
	(TARGET_EXCEPT_UNWIND_INFO): Redefine to nvptx_except_unwind_info.
	* config/nvptx/nvptx.c (TARGET_ASM_BYTE_OP): Emit commented out '.byte'.

	* testsuite/libgomp.oacc-c++/routine-1-auto.C: Remove -fno-exceptions.
	* testsuite/libgomp.oacc-c++/routine-1-template-auto.C: Same.
	* testsuite/libgomp.oacc-c++/routine-1-template-trailing-return-type.C:
	Same.
	* testsuite/libgomp.oacc-c++/routine-1-template.C: Same.
	* testsuite/libgomp.oacc-c++/routine-1-trailing-return-type.C: Same.
	* testsuite/libgomp.oacc-c-c++-common/routine-1.c: Same.

From-SVN: r263265
parent 007b11a5
2018-08-02 Tom de Vries <tdevries@suse.de>
PR target/86660
* common/config/nvptx/nvptx-common.c (nvptx_except_unwind_info): New
function. Return UI_TARGET unconditionally.
(TARGET_EXCEPT_UNWIND_INFO): Redefine to nvptx_except_unwind_info.
* config/nvptx/nvptx.c (TARGET_ASM_BYTE_OP): Emit commented out '.byte'.
2018-08-02 Richard Sandiford <richard.sandiford@arm.com>
* genemit.c (print_overload_test): Fix typo.
......
......@@ -30,10 +30,19 @@ along with GCC; see the file COPYING3. If not see
#include "opts.h"
#include "flags.h"
enum unwind_info_type
nvptx_except_unwind_info (struct gcc_options *opts ATTRIBUTE_UNUSED)
{
return UI_TARGET;
}
#undef TARGET_HAVE_NAMED_SECTIONS
#define TARGET_HAVE_NAMED_SECTIONS false
#undef TARGET_DEFAULT_TARGET_FLAGS
#define TARGET_DEFAULT_TARGET_FLAGS MASK_ABI64
#undef TARGET_EXCEPT_UNWIND_INFO
#define TARGET_EXCEPT_UNWIND_INFO nvptx_except_unwind_info
struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;
......@@ -6051,6 +6051,9 @@ nvptx_can_change_mode_class (machine_mode, machine_mode, reg_class_t)
#undef TARGET_HAVE_SPECULATION_SAFE_VALUE
#define TARGET_HAVE_SPECULATION_SAFE_VALUE speculation_safe_value_not_needed
#undef TARGET_ASM_BYTE_OP
#define TARGET_ASM_BYTE_OP "// .byte "
struct gcc_target targetm = TARGET_INITIALIZER;
#include "gt-nvptx.h"
2018-08-02 Tom de Vries <tdevries@suse.de>
PR target/86660
* testsuite/libgomp.oacc-c++/routine-1-auto.C: Remove -fno-exceptions.
* testsuite/libgomp.oacc-c++/routine-1-template-auto.C: Same.
* testsuite/libgomp.oacc-c++/routine-1-template-trailing-return-type.C:
Same.
* testsuite/libgomp.oacc-c++/routine-1-template.C: Same.
* testsuite/libgomp.oacc-c++/routine-1-trailing-return-type.C: Same.
* testsuite/libgomp.oacc-c-c++-common/routine-1.c: Same.
2018-08-01 Cesar Philippidis <cesar@codesourcery.com>
Thomas Schwinge <thomas@codesourcery.com>
......
// Routine with "auto" return type.
// { dg-additional-options "-fno-exceptions" }
#define TEMPLATE
#define TYPE int
#define RETURN_1 auto
......
// Templated routine with "auto" return type.
// { dg-additional-options "-fno-exceptions" }
#define TEMPLATE template<typename TYPE>
#define RETURN_1 auto
#define RETURN_2
......
// Templated routine using trailing return type syntax.
// { dg-additional-options "-fno-exceptions" }
#define TEMPLATE template<typename TYPE>
#define RETURN_1 auto
#define RETURN_2 -> TYPE
......
// Templated routine.
// { dg-additional-options "-fno-exceptions" }
#define TEMPLATE template<typename TYPE>
#define RETURN_1 TYPE
#define RETURN_2
......
// Routine using trailing return type syntax.
// { dg-additional-options "-fno-exceptions" }
#define TEMPLATE
#define TYPE int
#define RETURN_1 auto
......
// { dg-additional-options "-fno-exceptions" }
// Defaults, if not "#include"d from ../libgomp.oacc-c++/routine-1-*.C.
#ifndef TEMPLATE
# define TEMPLATE
......
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