aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTom de Vries <tom@codesourcery.com>2018-01-24 11:27:10 +0000
committerTom de Vries <vries@gcc.gnu.org>2018-01-24 11:27:10 +0000
commitbe606483c9fc0c79ffb671238404203e01288b00 (patch)
tree3d9c63f4ff1840ebbb4488c1600f69f076b6afcd /gcc
parent6acfd18c395cca3d0c5acf9d62a3c1556ea58d90 (diff)
downloadgcc-be606483c9fc0c79ffb671238404203e01288b00.zip
gcc-be606483c9fc0c79ffb671238404203e01288b00.tar.gz
gcc-be606483c9fc0c79ffb671238404203e01288b00.tar.bz2
[nvptx, PR81352] Add exit insn after noreturn call for neutered threads in warp
2018-01-24 Tom de Vries <tom@codesourcery.com> PR target/81352 * config/nvptx/nvptx.c (nvptx_single): Add exit insn after noreturn call for neutered threads in warp. * config/nvptx/nvptx.md (define_insn "exit"): New insn. * testsuite/libgomp.oacc-fortran/pr81352.f90: New test. From-SVN: r257014
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/nvptx/nvptx.c7
-rw-r--r--gcc/config/nvptx/nvptx.md5
3 files changed, 18 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0e48b86..e4eba86 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2018-01-24 Tom de Vries <tom@codesourcery.com>
+
+ PR target/81352
+ * config/nvptx/nvptx.c (nvptx_single): Add exit insn after noreturn call
+ for neutered threads in warp.
+ * config/nvptx/nvptx.md (define_insn "exit"): New insn.
+
2018-01-24 Richard Biener <rguenther@suse.de>
PR tree-optimization/83176
diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c
index f5bb438..3516740 100644
--- a/gcc/config/nvptx/nvptx.c
+++ b/gcc/config/nvptx/nvptx.c
@@ -4062,7 +4062,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 f9c087b..135479b 100644
--- a/gcc/config/nvptx/nvptx.md
+++ b/gcc/config/nvptx/nvptx.md
@@ -994,6 +994,11 @@
""
"")
+(define_insn "exit"
+ [(const_int 1)]
+ ""
+ "exit;")
+
(define_insn "return"
[(return)]
""