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)]
   ""
...

Reply via email to