Hi, the two following patches implement a new handling of the loops in OpenACC "kernels" regions which is based on Graphite and which is meant to replace the current handling based on the "parloops" pass. This extends the class of OpenACC codes using "kernels" regions that can be analysed by GCC's OpenACC implementation considerably.
We would like to incorporate this work into master soon, but further work will be necessary in the next weeks to resolve some open questions, clean up the code etc. In particular, the patches cannot be applied on master currently because they rely on other patches which have not been committed to master yet, e.g. the re-ordering of the OpenACC passes to run device lowering after Graphite which has recently been submitted (subject "Move pass_oacc_device_lower after pass_graphite"), the transformation pass which converts OpenACC kernels regions to parallel regions from OG10 (commit 809ea59722263eb6c2d48402e1eed80727134038). Best regards, Frederik Frederik Harwath (2): [WIP] OpenACC: Add Graphite-based handling of "auto" loops OpenACC: Add Graphite-based "kernels" handling to pass_convert_oacc_kernels gcc/c-family/c.opt | 5 +- gcc/common.opt | 8 + gcc/doc/invoke.texi | 10 +- gcc/doc/passes.texi | 6 +- gcc/flag-types.h | 1 + gcc/gimple-pretty-print.c | 3 + gcc/gimple.h | 9 +- gcc/gimplify.c | 1 + gcc/graphite-dependences.c | 12 +- gcc/graphite-isl-ast-to-gimple.c | 77 +- gcc/graphite-oacc.h | 90 ++ gcc/graphite-scop-detection.c | 828 ++++++++++++++---- gcc/graphite-sese-to-poly.c | 26 +- gcc/graphite.c | 403 ++++++++- gcc/graphite.h | 11 +- gcc/internal-fn.h | 7 +- gcc/omp-expand.c | 89 +- gcc/omp-general.c | 19 +- gcc/omp-general.h | 1 + gcc/omp-low.c | 76 +- gcc/omp-oacc-kernels.c | 59 +- gcc/omp-offload.c | 223 ++++- gcc/predict.c | 2 +- .../goacc/kernels-conversion-parloops.c | 61 ++ .../c-c++-common/goacc/kernels-conversion.c | 12 +- .../graphite/alias-0-no-runtime-check.c | 20 + .../gcc.dg/graphite/alias-0-runtime-check.c | 21 + gcc/testsuite/gcc.dg/graphite/alias-1.c | 22 + .../gfortran.dg/goacc/kernels-reductions.f90 | 37 + gcc/tree-chrec-oacc.h | 45 + gcc/tree-chrec.c | 16 +- gcc/tree-data-ref.c | 112 ++- gcc/tree-data-ref.h | 8 +- gcc/tree-loop-distribution.c | 17 +- gcc/tree-parloops.c | 16 +- gcc/tree-scalar-evolution.c | 257 +++++- gcc/tree-ssa-loop-ivcanon.c | 9 +- gcc/tree-ssa-loop-niter.c | 13 + gcc/tree-ssa-loop.c | 10 + 39 files changed, 2265 insertions(+), 377 deletions(-) create mode 100644 gcc/graphite-oacc.h create mode 100644 gcc/testsuite/c-c++-common/goacc/kernels-conversion-parloops.c create mode 100644 gcc/testsuite/gcc.dg/graphite/alias-0-no-runtime-check.c create mode 100644 gcc/testsuite/gcc.dg/graphite/alias-0-runtime-check.c create mode 100644 gcc/testsuite/gcc.dg/graphite/alias-1.c create mode 100644 gcc/testsuite/gfortran.dg/goacc/kernels-reductions.f90 create mode 100644 gcc/tree-chrec-oacc.h -- 2.17.1 ----------------- Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander Walter