https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81352
--- Comment #2 from Tom de Vries <vries at gcc dot gnu.org> --- Tentative patch: ... diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c index 69e55da8933..66131cbae7c 100644 --- a/gcc/config/nvptx/nvptx.c +++ b/gcc/config/nvptx/nvptx.c @@ -4057,7 +4057,12 @@ nvptx_single (unsigned mask, basic_block from, basic_block to) if (tail_branch) before = emit_label_before (label, before); else - emit_label_after (label, tail); + { + rtx_insn *label_insn = emit_label_after (label, tail); + if (mode == GOMP_DIM_VECTOR && CALL_P (tail) + && find_reg_note (tail, REG_NORETURN, NULL)) + emit_insn_after (gen_exit(), label_insn); + } } /* Now deal with propagating the branch condition. */ diff --git a/gcc/config/nvptx/nvptx.md b/gcc/config/nvptx/nvptx.md index 909484c329a..6bf7b3b4d29 100644 --- a/gcc/config/nvptx/nvptx.md +++ b/gcc/config/nvptx/nvptx.md @@ -1003,6 +1003,11 @@ mov.u32 %%nop_dst, %%nop_src; }") +(define_insn "exit" + [(const_int 2)] + "" + "exit;") + (define_insn "return" [(return)] "" ...