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.