[nvptx] Assert fork has at most one join in nvptx_find_par
authorTom de Vries <tdevries@suse.de>
Wed, 12 Jun 2019 14:56:18 +0000 (14:56 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Wed, 12 Jun 2019 14:56:18 +0000 (14:56 +0000)
With the test-case of PR90009 we run into a SIGSEGV in nvptx_neuter_pars,
because par->join_insn and par->join_block are NULL.

Detect this problem earlier, by adding an assert in nvptx_find_par that
asserts that a fork cannot be paired with more than one join.

Build and tested on x86_64 with nvptx accelerator enabled.

2019-06-12  Tom de Vries  <tdevries@suse.de>

PR tree-optimization/90009
* config/nvptx/nvptx.c (nvptx_find_par): Assert fork has at most join.

From-SVN: r272189

gcc/ChangeLog
gcc/config/nvptx/nvptx.c

index 214ded4..a47cf26 100644 (file)
@@ -1,3 +1,8 @@
+2019-06-12  Tom de Vries  <tdevries@suse.de>
+
+       PR tree-optimization/90009
+       * config/nvptx/nvptx.c (nvptx_find_par): Assert fork has at most join.
+
 2019-06-12  Martin Liska  <mliska@suse.cz>
 
        * ggc-common.c (ggc_prune_overhead_list): Do not sanitize
index 1986e79..76468f6 100644 (file)
@@ -3258,6 +3258,7 @@ nvptx_find_par (bb_insn_map_t *map, parallel *par, basic_block block)
            unsigned mask = UINTVAL (XVECEXP (PATTERN (end), 0, 0));
 
            gcc_assert (par->mask == mask);
+           gcc_assert (par->join_block == NULL);
            par->join_block = block;
            par->join_insn = end;
            if (nvptx_needs_shared_bcast (mask))