diff options
author | Tom de Vries <tom@codesourcery.com> | 2018-01-24 11:27:10 +0000 |
---|---|---|
committer | Tom de Vries <vries@gcc.gnu.org> | 2018-01-24 11:27:10 +0000 |
commit | be606483c9fc0c79ffb671238404203e01288b00 (patch) | |
tree | 3d9c63f4ff1840ebbb4488c1600f69f076b6afcd /gcc | |
parent | 6acfd18c395cca3d0c5acf9d62a3c1556ea58d90 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/nvptx/nvptx.c | 7 | ||||
-rw-r--r-- | gcc/config/nvptx/nvptx.md | 5 |
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)] "" |