This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/80995] New: Fortran OpenACC kernels "Unhandled stmt in entry/exit: _14 = BUILTIN_EXPECT ([...])" after "Introduce fortran loop preheader"
- From: "tschwinge at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 07 Jun 2017 08:07:50 +0000
- Subject: [Bug middle-end/80995] New: Fortran OpenACC kernels "Unhandled stmt in entry/exit: _14 = BUILTIN_EXPECT ([...])" after "Introduce fortran loop preheader"
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80995
Bug ID: 80995
Summary: Fortran OpenACC kernels "Unhandled stmt in entry/exit:
_14 = BUILTIN_EXPECT ([...])" after "Introduce fortran
loop preheader"
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Keywords: openacc
Severity: normal
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: tschwinge at gcc dot gnu.org
CC: vries at gcc dot gnu.org
Target Milestone: ---
Merging trunk r237533 "Introduce fortran loop preheader" into gomp-4-branch
r240825, there are two regressions in Fortran OpenACC kernels parallelization:
PASS: gfortran.dg/goacc/kernels-loop-n.f95 -O scan-tree-dump-not
parloops1 "FAILED:"
PASS: gfortran.dg/goacc/kernels-loop-n.f95 -O scan-tree-dump-times
optimized "(?n);; Function __test_MOD_foo._omp_fn.0 " 1
[-PASS:-]{+FAIL:+} gfortran.dg/goacc/kernels-loop-n.f95 -O
scan-tree-dump-times parloops1 "(?n)oacc function \\(0," 1
PASS: gfortran.dg/goacc/kernels-loop-n.f95 -O scan-tree-dump-times
parloops1 "SUCCESS: may be parallelized" 1
PASS: gfortran.dg/goacc/kernels-loop-n.f95 -O (test for excess errors)
PASS: libgomp.oacc-fortran/non-scalar-data.f90 -DACC_DEVICE_TYPE_nvidia=1
-DACC_
PASS: libgomp.oacc-fortran/non-scalar-data.f90 -DACC_DEVICE_TYPE_nvidia=1
-DACC_MEM_SHARED=0 -foffload=nvptx-none -O0 execution test
PASS: libgomp.oacc-fortran/non-scalar-data.f90 -DACC_DEVICE_TYPE_nvidia=1
-DACC_MEM_SHARED=0 -foffload=nvptx-none -O1 (test for excess errors)
PASS: libgomp.oacc-fortran/non-scalar-data.f90 -DACC_DEVICE_TYPE_nvidia=1
-DACC_MEM_SHARED=0 -foffload=nvptx-none -O1 execution test
[-PASS:-]{+FAIL:+} libgomp.oacc-fortran/non-scalar-data.f90
-DACC_DEVICE_TYPE_nvidia=1 -DACC_MEM_SHARED=0 -foffload=nvptx-none -O2 (test
for excess errors)
PASS: libgomp.oacc-fortran/non-scalar-data.f90 -DACC_DEVICE_TYPE_nvidia=1
-DACC_MEM_SHARED=0 -foffload=nvptx-none -O2 execution test
[-PASS:-]{+FAIL:+} libgomp.oacc-fortran/non-scalar-data.f90
-DACC_DEVICE_TYPE_nvidia=1 -DACC_MEM_SHARED=0 -foffload=nvptx-none -O3
-fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions
(test for excess errors)
PASS: libgomp.oacc-fortran/non-scalar-data.f90 -DACC_DEVICE_TYPE_nvidia=1
-DACC_MEM_SHARED=0 -foffload=nvptx-none -O3 -fomit-frame-pointer
-funroll-loops -fpeel-loops -ftracer -finline-functions execution test
[-PASS:-]{+FAIL:+} libgomp.oacc-fortran/non-scalar-data.f90
-DACC_DEVICE_TYPE_nvidia=1 -DACC_MEM_SHARED=0 -foffload=nvptx-none -O3 -g
(test for excess errors)
PASS: libgomp.oacc-fortran/non-scalar-data.f90 -DACC_DEVICE_TYPE_nvidia=1
-DACC_MEM_SHARED=0 -foffload=nvptx-none -O3 -g execution test
[-PASS:-]{+FAIL:+} libgomp.oacc-fortran/non-scalar-data.f90
-DACC_DEVICE_TYPE_nvidia=1 -DACC_MEM_SHARED=0 -foffload=nvptx-none -Os (test
for excess errors)
PASS: libgomp.oacc-fortran/non-scalar-data.f90 -DACC_DEVICE_TYPE_nvidia=1
-DACC_MEM_SHARED=0 -foffload=nvptx-none -Os execution test
[...]/source-gcc/libgomp/testsuite/libgomp.oacc-fortran/non-scalar-data.f90: In
function 'kernels_._omp_fn.1':
[...]/source-gcc/libgomp/testsuite/libgomp.oacc-fortran/non-scalar-data.f90:35:0:
warning: OpenACC kernels construct will be executed sequentially; will by
default avoid offloading to prevent data copy penalty
For both these (I looked at "-O2" only), the issue is: "Unhandled stmt in
entry/exit: _14 = BUILTIN_EXPECT (_13, 1, 41);". I'm not sure whether
"BUILTIN_EXPECT" should simply be added to be handled in
"gcc/tree-parloops.c:oacc_entry_exit_ok_1", or if it should already have been
accepted by one of the existing cases in there, or if it in fact shouldn't
appear there, should have been folded away earlier on.