Go to file
Jakub Jelinek 1160ec9a14 openmp: Initial part of OpenMP 5.0 non-rectangular loop support
OpenMP 5.0 adds support for non-rectangular loop collapses, e.g.
triangular and more complex.

This patch deals just with the diagnostics so that they aren't rejected
immediately as before.  As the spec generally requires as before that the
iteration variable initializer and bound in the comparison as invariant
vs. the outermost loop, and just add some exceptional forms that can violate
that, we need to avoid folding the expressions until we can detect them and
in order to avoid folding it later on, I chose to use a TREE_VEC in those
expressions to hold the var_outer * expr1 + expr2 triplet, the patch adds
pretty-printing of that, gimplification etc. and just sorry_at during
omp expansion for now.

The next step will be to implement the different cases of that one by one.

2020-06-16  Jakub Jelinek  <jakub@redhat.com>

gcc/
	* tree.h (OMP_FOR_NON_RECTANGULAR): Define.
	* gimplify.c (gimplify_omp_for): Diagnose schedule, ordered
	or dist_schedule clause on non-rectangular loops.  Handle
	gimplification of non-rectangular lb/b expressions.  When changing
	iteration variable, adjust also non-rectangular lb/b expressions
	referencing that.
	* omp-general.h (struct omp_for_data_loop): Add m1, m2 and outer
	members.
	(struct omp_for_data): Add non_rect member.
	* omp-general.c (omp_extract_for_data): Handle non-rectangular
	loops.  Fill in non_rect, m1, m2 and outer.
	* omp-low.c (lower_omp_for): Handle non-rectangular lb/b expressions.
	* omp-expand.c (expand_omp_for): Emit sorry_at for unsupported
	non-rectangular loop cases and assert for cases that can't be
	non-rectangular.
	* tree-pretty-print.c (dump_mem_ref): Formatting fix.
	(dump_omp_loop_non_rect_expr): New function.
	(dump_generic_node): Handle non-rectangular OpenMP loops.
	* tree-pretty-print.h (dump_omp_loop_non_rect_expr): Declare.
	* gimple-pretty-print.c (dump_gimple_omp_for): Handle non-rectangular
	OpenMP loops.
gcc/c-family/
	* c-common.h (c_omp_check_loop_iv_exprs): Add an int argument.
	* c-omp.c (struct c_omp_check_loop_iv_data): Add maybe_nonrect and
	idx members.
	(c_omp_is_loop_iterator): New function.
	(c_omp_check_loop_iv_r): Use it.  Add support for silent scanning
	if outer loop iterator is present.  Perform duplicate checking through
	hash_set in the function rather than expecting caller to do that.
	Pass NULL instead of d->ppset to walk_tree_1.
	(c_omp_check_nonrect_loop_iv): New function.
	(c_omp_check_loop_iv): Use it.  Fill in new members, allow
	non-rectangular loop forms, diagnose multiple associated loops with
	the same iterator.  Pass NULL instead of &pset to walk_tree_1.
	(c_omp_check_loop_iv_exprs): Likewise.
gcc/c/
	* c-parser.c (c_parser_expr_no_commas): Save, clear and restore
	c_in_omp_for.
	(c_parser_omp_for_loop): Set c_in_omp_for around some calls to avoid
	premature c_fully_fold.  Defer explicit c_fully_fold calls to after
	c_finish_omp_for.
	* c-tree.h (c_in_omp_for): Declare.
	* c-typeck.c (c_in_omp_for): Define.
	(build_modify_expr): Avoid c_fully_fold if c_in_omp_for.
	(digest_init): Likewise.
	(build_binary_op): Likewise.
gcc/cp/
	* semantics.c (handle_omp_for_class_iterator): Adjust
	c_omp_check_loop_iv_exprs caller.
	(finish_omp_for): Likewise.  Don't call fold_build_cleanup_point_expr
	before calling c_finish_omp_for and c_omp_check_loop_iv, move it
	after those calls.
	* pt.c (tsubst_omp_for_iterator): Handle non-rectangular loops.
gcc/testsuite/
	* c-c++-common/gomp/loop-6.c: New test.
	* gcc.dg/gomp/loop-1.c: Don't expect diagnostics on valid
	non-rectangular loops.
	* gcc.dg/gomp/loop-2.c: New test.
	* g++.dg/gomp/loop-1.C: Don't expect diagnostics on valid
	non-rectangular loops.
	* g++.dg/gomp/loop-2.C: Likewise.
	* g++.dg/gomp/loop-5.C: New test.
	* g++.dg/gomp/loop-6.C: New test.
2020-06-16 16:31:13 +02:00
INSTALL
config
contrib Daily bump. 2020-06-12 00:16:29 +00:00
fixincludes
gcc openmp: Initial part of OpenMP 5.0 non-rectangular loop support 2020-06-16 16:31:13 +02:00
gnattools
gotools
include
intl
libada
libatomic
libbacktrace
libcc1
libcpp
libdecnumber
libffi
libgcc Daily bump. 2020-06-16 00:16:28 +00:00
libgfortran Daily bump. 2020-06-14 00:16:18 +00:00
libgo libgo: update x/sys/cpu to add all GOARCHes supported by gccgo 2020-06-15 14:20:07 -07:00
libgomp Daily bump. 2020-06-09 00:16:47 +00:00
libhsail-rt
libiberty
libitm
libobjc
liboffloadmic
libphobos
libquadmath
libsanitizer Daily bump. 2020-06-10 00:16:47 +00:00
libssp
libstdc++-v3 c++: Improve access checking inside templates [PR41437] 2020-06-16 08:21:33 -04:00
libvtv
lto-plugin
maintainer-scripts
zlib
.dir-locals.el
.gitattributes
.gitignore Add .clang-tidy to git ignored. 2020-06-12 16:03:02 +02:00
ABOUT-NLS
COPYING
COPYING.LIB
COPYING.RUNTIME
COPYING3
COPYING3.LIB
ChangeLog Daily bump. 2020-06-13 00:16:25 +00:00
ChangeLog.jit
ChangeLog.tree-ssa
MAINTAINERS
Makefile.def
Makefile.in
Makefile.tpl
README
ar-lib
compile
config-ml.in
config.guess
config.rpath
config.sub
configure bootstrap: Fix --disable-bootstrap with older g++. 2020-06-08 16:42:35 -04:00
configure.ac bootstrap: Fix --disable-bootstrap with older g++. 2020-06-08 16:42:35 -04:00
depcomp
install-sh
libtool-ldflags
libtool.m4
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
lt~obsolete.m4
missing
mkdep
mkinstalldirs
move-if-change
multilib.am
symlink-tree
test-driver
ylwrap

README

This directory contains the GNU Compiler Collection (GCC).

The GNU Compiler Collection is free software.  See the files whose
names start with COPYING for copying permission.  The manuals, and
some of the runtime libraries, are under different terms; see the
individual source files for details.

The directory INSTALL contains copies of the installation information
as HTML and plain text.  The source of this information is
gcc/doc/install.texi.  The installation information includes details
of what is included in the GCC sources and what files GCC installs.

See the file gcc/doc/gcc.texi (together with other files that it
includes) for usage and porting information.  An online readable
version of the manual is in the files gcc/doc/gcc.info*.

See http://gcc.gnu.org/bugs/ for how to report bugs usefully.

Copyright years on GCC source files may be listed using range
notation, e.g., 1987-2012, indicating that every year in the range,
inclusive, is a copyrightable year that could otherwise be listed
individually.