Commit Graph

285 Commits

Author SHA1 Message Date
Alan Modra
fbf7be801c re PR libgomp/51376 (libgomp taskwait failure)
PR libgomp/51376
	* task.c (GOMP_taskwait): Don't access task->children outside of
	task_lock mutex region.
	(GOMP_task): Likewise.

From-SVN: r182151
2011-12-09 12:51:43 +10:30
Jakub Jelinek
5de62d003b re PR libgomp/51132 (FAIL: libgomp.graphite/force-parallel-[678].c)
PR libgomp/51132
	* testsuite/libgomp.graphite/force-parallel-1.c: Move large arrays
	to file scope.
	* testsuite/libgomp.graphite/force-parallel-3.c: Likewise.
	* testsuite/libgomp.graphite/force-parallel-6.c: Likewise.
	* testsuite/libgomp.graphite/force-parallel-7.c: Likewise.
	* testsuite/libgomp.graphite/force-parallel-8.c: Likewise.
	* testsuite/libgomp.graphite/force-parallel-9.c: Likewise.

From-SVN: r182050
2011-12-06 15:32:54 +01:00
Alan Modra
45608a43c4 affinity.c: Use atomic rather than sync builtin.
* config/linux/affinity.c: Use atomic rather than sync builtin.
	* config/linux/lock.c: Likewise.
	* config/linux/ptrlock.h: Likewise.
	* config/linux/ptrlock.c: Likewise.
	* config/linux/ptrlock.h (gomp_ptrlock_set): Always write here..
	* config/linux/ptrlock.c (gomp_ptrlock_set_slow): ..not here.
	* config/linux/futex.h (atomic_write_barrier): Delete unused function.
	* config/linux/alpha/futex.h (atomic_write_barrier): Likewise.
	* config/linux/ia64/futex.h (atomic_write_barrier): Likewise.
	* config/linux/mips/futex.h (atomic_write_barrier): Likewise.
	* config/linux/powerpc/futex.h (atomic_write_barrier): Likewise.
	* config/linux/s390/futex.h (atomic_write_barrier): Likewise.
	* config/linux/sparc/futex.h (atomic_write_barrier): Likewise.
	* config/linux/x86/futex.h (atomic_write_barrier): Likewise.

From-SVN: r181906
2011-12-02 21:24:02 +10:30
Alan Modra
ab6dd406ba re PR libgomp/51298 (libgomp team_barrier locking failures)
PR libgomp/51298
	* config/linux/bar.h: Use atomic rather than sync builtins.
	* config/linux/bar.c: Likewise.  Add missing acquire
	synchronisation on generation field.
	* task.c (gomp_barrier_handle_tasks): Regain lock so as to not
	double unlock.

From-SVN: r181833
2011-11-30 15:14:13 +10:30
Alan Modra
b40c885f18 ordered.c (gomp_ordered_sync): Add MEMMODEL_ACQ_REL fence.
* ordered.c (gomp_ordered_sync): Add MEMMODEL_ACQ_REL fence.
	* critical.c (GOMP_critical_start): Add MEMMODEL_RELEASE fence.
	* config/linux/mutex.h: Use atomic rather than sync builtins.
	* config/linux/mutex.c: Likewise.  Comment.  Use -1 for waiting state.
	* config/linux/omp-lock.h: Comment fix.
	* config/linux/arm/mutex.h: Delete.
	* config/linux/powerpc/mutex.h: Delete.
	* config/linux/ia64/mutex.h: Delete.
	* config/linux/mips/mutex.h: Delete.

From-SVN: r181832
2011-11-30 14:32:53 +10:30
Alan Modra
3e348fccfa re PR libgomp/51249 (semaphore implemetation for linux leaves threads blocked)
PR libgomp/51249
	* config/linux/sem.h: Rewrite.
	* config/linux/sem.c: Rewrite.

From-SVN: r181831
2011-11-30 14:13:57 +10:30
Richard Henderson
cef86eb288 * libgomp.h (enum memmodel): New.
From-SVN: r181794
2011-11-28 18:19:05 -08:00
Andreas Tobler
c6084f681e Additional fixes for FreeBSD-10 build:
/:			* libtool.m4: Additional FreeBSD 10 fixes.

boehm-gc/:		* configure: Regenerate.
gcc/:			* configure: Regenerate.
libffi/:		* configure: Regenerate.
libgfortran/:		* configure: Regenerate.
libgomp/:		* configure: Regenerate.
libitm/:		* configure: Regenerate.
libjava/:		* configure.ac: Fix some more FreeBSD 10 issues..
			* configure: Regenerate.
libjava/libltdl/:	* acinclude.m4: Additional FreeBSD 10 fixes.
			* configure: Regenerate.
libmudflap/:		* configure: Regenerate.
libobjc/:		* configure: Regenerate.
libquadmath/:		* configure: Regenerate.
libssp/:		* configure: Regenerate.
libstdc++-v3/:		* configure: Regenerate.
lto-plugin/:		* configure: Regenerate.
zlib/:			* configure: Regenerate.

From-SVN: r181593
2011-11-21 20:22:35 +01:00
Matthias Klose
06fe026c0c posix95: Remove empty directory.
2011-10-10  Matthias Klose  <doko@ubuntu.com>

        * config/posix95: Remove empty directory.

From-SVN: r179771
2011-10-10 19:27:31 +00:00
Jakub Jelinek
a6c975bd8e trans-decl.c (get_proc_pointer_decl): Set DECL_TLS_MODEL if threadprivate.
* trans-decl.c (get_proc_pointer_decl): Set DECL_TLS_MODEL
	if threadprivate.
	* symbol.c (check_conflict): Allow threadprivate attribute with
	FL_PROCEDURE if proc_pointer.

	* testsuite/libgomp.fortran/threadprivate4.f90: New test.

From-SVN: r178114
2011-08-26 16:55:05 +02:00
Jakub Jelinek
c26dffff5c re PR fortran/49792 (OpenMP workshare: Wrong result with array assignment)
PR fortran/49792
	* trans-expr.c (gfc_trans_assignment_1): Set OMPWS_SCALARIZER_WS
	bit in ompws_flags only if loop.temp_ss is NULL, and clear it if
	lhs needs reallocation.
	* trans-openmp.c (gfc_trans_omp_workshare): Don't return early if
	code is NULL, emit a barrier if workshare emitted no code at all
	and NOWAIT clause isn't present.

	* testsuite/libgomp.fortran/pr49792-1.f90: New test.
	* testsuite/libgomp.fortran/pr49792-2.f90: New test.

From-SVN: r177898
2011-08-19 15:25:22 +02:00
Rainer Orth
ddaad3c8b1 configure.ac (THREADS): Remove posix95.
boehm-gc:
	* configure.ac (THREADS): Remove posix95.
	* configure: Regenerate.

	gcc:
	* gthr-posix95.h: Remove.
	* gthr.h [_PTHREADS95]: Remove.
	* configure.ac (enable_threads): Remove posix95.
	* configure: Regenerate.
	* doc/install.texi (Configuration, --enable-threads): Remove
	posix95.

	libgomp:
	* config/posix95/lock.c, posix95/omp-lock.h: Remove.

	libjava:
	* configure.ac (THREADS): Remove posix95.
	* configure: Regenerate.

From-SVN: r177568
2011-08-08 15:39:35 +00:00
Rainer Orth
98d0368392 re PR target/49965 (libgomp.c++/reduction-4.C and libgomp.c++/task-8.C FAIL on Solaris 11/SPARC)
PR libgomp/49965
	* testsuite/libgomp.c++/task-8.C: Replaced err by errval.

From-SVN: r177428
2011-08-05 12:22:10 +00:00
Uros Bizjak
e0b23d9fd3 proc.h: New.
* config/linux/proc.h: New.
	* config/linux/proc.c: Include "proc.h".  Do not include <sched.h>.
	(gomp_cpuset_popcount): Rename from cpuset_popcount.  No more static.
	(gomp_init_num_threads): Update call to cpuset_popcount.
	(get_num_procs): Ditto.
	* config/linux/affinity.c (gomp_init_affinity): Call
	gomp_cpuset_popcount.

From-SVN: r177265
2011-08-03 12:46:04 +02:00
Jakub Jelinek
20906c66f2 backport: re PR fortran/46752 (OpenMP - Seg fault for unallocated allocatable array in firstprivate clause)
Merge from gomp-3_1-branch branch:

2011-08-02  Jakub Jelinek  <jakub@redhat.com>

gcc/
	* c-parser.c (enum c_parser_prec): New enum, moved from within
	c_parser_binary_expression.
	(c_parser_binary_expression): Add PREC argument.  Stop parsing
	if operator has lower or equal precedence than PREC.
	(c_parser_conditional_expression, c_parser_omp_for_loop): Adjust
	callers.
	(c_parser_omp_atomic): Handle parsing OpenMP 3.1 atomics.
	Adjust c_finish_omp_atomic caller.
	(c_parser_omp_taskyield): New function.
	(c_parser_pragma): Handle PRAGMA_OMP_TASKYIELD.
	(c_parser_omp_clause_name): Handle final and mergeable clauses.
	(c_parser_omp_clause_final, c_parser_omp_clause_mergeable): New
	functions.
	(c_parser_omp_all_clauses): Handle PRAGMA_OMP_CLAUSE_FINAL
	and PRAGMA_OMP_CLAUSE_MERGEABLE.
	(OMP_TASK_CLAUSE_MASK): Allow final and mergeable clauses.
	(c_parser_omp_clause_reduction): Handle min and max.
	* c-typeck.c (c_finish_omp_clauses): Don't complain about
	const qualified predetermined vars in firstprivate clause.
	andle OMP_CLAUSE_FINAL and OMP_CLAUSE_MERGEABLE.
	Handle MIN_EXPR and MAX_EXPR.
	* tree-pretty-print.c (dump_omp_clause): Handle OMP_CLAUSE_FINAL
	and OMP_CLAUSE_MERGEABLE.
	(dump_generic_node): Handle OMP_ATOMIC_READ, OMP_ATOMIC_CAPTURE_OLD
	and OMP_ATOMIC_CAPTURE_NEW.
	* tree.c (omp_clause_num_ops): Add OMP_CLAUSE_FINAL and
	OMP_CLAUSE_MERGEABLE.
	(omp_clause_code_name): Likewise.
	(walk_tree_1): Handle OMP_CLAUSE_FINAL and OMP_CLAUSE_MERGEABLE.
	* tree.h (enum omp_clause_code): Add OMP_CLAUSE_FINAL
	and OMP_CLAUSE_MERGEABLE.
	(OMP_CLAUSE_FINAL_EXPR): Define.
	* omp-low.c (scan_sharing_clauses): Handle OMP_CLAUSE_FINAL and
	OMP_CLAUSE_MERGEABLE.
	(expand_task_call): Likewise.
	(expand_omp_atomic_load, expand_omp_atomic_store): New functions.
	(expand_omp_atomic_fetch_op): Handle cases where old or new
	value is needed afterwards.
	(expand_omp_atomic): Call expand_omp_atomic_load resp.
	expand_omp_atomic_store.
	* gimplify.c (gimplify_omp_atomic, gimplify_expr): Handle
	OMP_ATOMIC_READ, OMP_ATOMIC_CAPTURE_OLD and OMP_ATOMIC_CAPTURE_NEW.
	(gimplify_scan_omp_clauses, gimplify_adjust_omp_clauses): Handle
	OMP_CLAUSE_FINAL and OMP_CLAUSE_MERGEABLE.
	* tree-nested.c (convert_nonlocal_omp_clauses,
	convert_local_omp_clauses): Likewise.
	* tree.def (OMP_ATOMIC_READ, OMP_ATOMIC_CAPTURE_OLD,
	OMP_ATOMIC_CAPTURE_NEW): New.
	* gimple.h (GF_OMP_ATOMIC_NEED_VALUE): New.
	(gimple_omp_atomic_need_value_p, gimple_omp_atomic_set_need_value):
	New inlines.
	* omp-builtins.def (BUILT_IN_GOMP_TASKYIELD): New builtin.
	* doc/generic.texi: Mention OMP_CLAUSE_COLLAPSE,
	OMP_CLAUSE_UNTIED, OMP_CLAUSE_FINAL and OMP_CLAUSE_MERGEABLE.
gcc/c-family/
	* c-common.h (c_finish_omp_atomic): Adjust prototype.
	(c_finish_omp_taskyield): New prototype.
	* c-omp.c (c_finish_omp_atomic): Add OPCODE, V, LHS1 and RHS1
	arguments. Handle OMP_ATOMIC_READ, OMP_ATOMIC_CAPTURE_OLD and
	OMP_ATOMIC_CAPTURE_NEW in addition to OMP_ATOMIC.  If LHS1
	or RHS1 have side-effects, evaluate those too in the right spot,
	if it is a decl and LHS is also a decl, error out if they
	aren't the same.
	(c_finish_omp_taskyield): New function.
	* c-cppbuiltin.c (c_cpp_builtins): Change _OPENMP to 201107.
	* c-pragma.c (omp_pragmas): Add taskyield.
	* c-pragma.h (enum pragma_kind): Add PRAGMA_OMP_TASKYIELD.
	(enum pragma_omp_clause): Add PRAGMA_OMP_CLAUSE_FINAL and
	PRAGMA_OMP_CLAUSE_MERGEABLE.
gcc/cp/
	* cp-tree.h (finish_omp_atomic): Adjust prototype.
	(cxx_omp_const_qual_no_mutable): New prototype.
	(finish_omp_taskyield): New prototype.
	* parser.c (cp_parser_omp_atomic): (cp_parser_omp_atomic): Handle
	parsing OpenMP 3.1 atomics.  Adjust finish_omp_atomic caller.
	(cp_parser_omp_clause_name): Handle final and mergeable clauses.
	(cp_parser_omp_clause_final, cp_parser_omp_clause_mergeable): New
	functions.
	(cp_parser_omp_all_clauses): Handle PRAGMA_OMP_CLAUSE_FINAL
	and PRAGMA_OMP_CLAUSE_MERGEABLE.
	(OMP_TASK_CLAUSE_MASK): Allow final and mergeable clauses.
	(cp_parser_omp_taskyield): New function.
	(cp_parser_pragma): Handle PRAGMA_OMP_TASKYIELD.
	(cp_parser_omp_clause_reduction): Handle min and max.
	* pt.c (tsubst_expr) <case OMP_ATOMIC>: Handle OpenMP 3.1 atomics.
	(tsubst_omp_clauses): Handle OMP_CLAUSE_FINAL and
	OMP_CLAUSE_MERGEABLE.
	* semantics.c (finish_omp_atomic): Add OPCODE, V, LHS1 and RHS1
	arguments.  Handle OpenMP 3.1 atomics.  Adjust c_finish_omp_atomic
	caller.
	(finish_omp_clauses): Don't complain about const qualified
	predetermined vars and static data members in firstprivate clause.
	Handle OMP_CLAUSE_FINAL and OMP_CLAUSE_MERGEABLE. Handle MIN_EXPR
	and MAX_EXPR.
	(finish_omp_taskyield): New function.
	* cp-gimplify.c (cxx_omp_const_qual_no_mutable): New function.
	(cxx_omp_predetermined_sharing): Use it.
gcc/fortran/
	PR fortran/46752
	* cpp.c (cpp_define_builtins): Change _OPENMP to 201107.
	* openmp.c (gfc_free_omp_clauses): Free also final_expr.
	(OMP_CLAUSE_FINAL, OMP_CLAUSE_MERGEABLE): Define.
	(gfc_match_omp_clauses): Handle parsing final and mergeable
	clauses.
	(OMP_TASK_CLAUSES): Allow final and mergeable clauses.
	(gfc_match_omp_taskyield): New function.
	(resolve_omp_clauses): Resolve final clause.  Allow POINTERs and
	Cray pointers in clauses other than REDUCTION.
	(gfc_match_omp_atomic): Match optional
	read/write/update/capture keywords after !$omp atomic.
	(resolve_omp_atomic): Handle all OpenMP 3.1 atomic forms.
	* dump-parse-tree.c (show_omp_node): Handle EXEC_OMP_TASKYIELD,
	print final and mergeable clauses.
	(show_code_node): Handle EXEC_OMP_TASKYIELD.
	* trans-openmp.c (gfc_trans_omp_clauses): Handle final and
	mergeable clauses.
	(gfc_trans_omp_taskyield): New function.
	(gfc_trans_omp_directive): Handle EXEC_OMP_TASKYIELD.
	(gfc_trans_omp_atomic): Handle all OpenMP 3.1 atomic forms.
	(gfc_omp_clause_copy_ctor): Handle non-allocated allocatable.
	(gfc_omp_predetermined_sharing): Adjust comment.
	* gfortran.h (gfc_statement): Add ST_OMP_TASKYIELD and
	ST_OMP_END_ATOMIC.
	(gfc_omp_clauses): Add final_expr and mergeable fields.
	(gfc_exec_op): Add EXEC_OMP_TASKYIELD.
	(gfc_omp_atomic_op): New enum typedef.
	(struct gfc_code): Add ext.omp_atomic.
	* trans.c (trans_code): Handle EXEC_OMP_TASKYIELD.
	* frontend-passes.c (gfc_code_walker): Also walk final_expr.
	* resolve.c (gfc_resolve_blocks, resolve_code): Handle
	EXEC_OMP_TASKYIELD.
	* st.c (gfc_free_statement): Likewise.
	* match.h (gfc_match_omp_taskyield): New prototype.
	* parse.c (decode_omp_directive): Handle taskyield directive.
	Handle !$omp end atomic.
	(case_executable): Add ST_OMP_TASKYIELD case.
	(gfc_ascii_statement): Handle ST_OMP_TASKYIELD.
	(parse_omp_atomic): Return gfc_statement instead of void.
	For !$omp atomic capture parse two assignments instead of
	just one and require !$omp end atomic afterwards, for
	other !$omp atomic forms just allow !$omp end atomic at the
	end.
	(parse_omp_structured_block, parse_executable): Adjust
	parse_omp_atomic callers.

2011-08-02  Tobias Burnus  <burnus@net-b.de>

	* intrinsic.c (OMP_LIB): Updated openmp_version's
	value to 201107.
	* gfortran.texi (OpenMP): Update ref to OpenMP 3.1.
	* intrinsic.texi (OpenMP Modules): Update ref to OpenMP 3.1;
	remove deleted omp_integer_kind and omp_logical_kind constants.
gcc/testsuite/
	PR fortran/46752
	* gcc.dg/gomp/atomic-5.c: Adjust expected diagnostics.
	* gcc.dg/gomp/atomic-15.c: New test.
	* g++.dg/gomp/atomic-5.C: Adjust expected diagnostics.
	* g++.dg/gomp/atomic-15.C: New test.
	* g++.dg/gomp/private-1.C: New test.
	* g++.dg/gomp/sharing-2.C: New test.
	* gfortran.dg/gomp/crayptr1.f90: Don't expect error
	about Cray pointer in FIRSTPRIVATE/LASTPRIVATE.
	* gfortran.dg/gomp/omp_atomic2.f90: New test.
libgomp/
	PR fortran/42041
	PR fortran/46752
	* omp.h.in (omp_in_final): New prototype.
	* omp_lib.f90.in (omp_in_final): New interface.
	(omp_integer_kind, omp_logical_kind): Remove
	and replace all its uses in the module with 4.
	(openmp_version): Change to 201107.
	* omp_lib.h.in (omp_sched_static, omp_sched_dynamic,
	omp_sched_guided, omp_sched_auto): Use omp_sched_kind
	kind for the parameters.
	(omp_in_final): New external.
	(openmp_version): Change to 201107.
	* task.c (omp_in_final): New function.
	(gomp_init_task): Initialize final_task.
	(GOMP_task): Remove unused attribute from flags.  Handle final
	tasks.
	(GOMP_taskyield): New function.
	(omp_in_final): Return true if if (false) or final (true) task
	or descendant of final (true).
	* fortran.c (omp_in_final_): New function.
	* libgomp.map (OMP_3.1): Export omp_in_final and omp_in_final_.
	(GOMP_3.0): Export GOMP_taskyield.
	* env.c (gomp_nthreads_var_list, gomp_nthreads_var_list_len): New
	variables.
	(parse_unsigned_long_list): New function.
	(initialize_env): Use it for OMP_NUM_THREADS.  Call parse_boolean
	with "OMP_PROC_BIND".  If OMP_PROC_BIND=true, call gomp_init_affinity
	even if parse_affinity returned false.
	* config/linux/affinity.c (gomp_init_affinity): Handle
	gomp_cpu_affinity_len == 0.
	* libgomp_g.h (GOMP_taskyield): New prototype.
	* libgomp.h (struct gomp_task): Add final_task field.
	(gomp_nthreads_var_list, gomp_nthreads_var_list_len): New externs.
	* team.c (gomp_team_start): Override new task's nthreads_var icv
	if list form OMP_NUM_THREADS has been used and it has value for
	the new nesting level.

	* testsuite/libgomp.c/atomic-11.c: New test.
	* testsuite/libgomp.c/atomic-12.c: New test.
	* testsuite/libgomp.c/atomic-13.c: New test.
	* testsuite/libgomp.c/atomic-14.c: New test.
	* testsuite/libgomp.c/reduction-6.c: New test.
	* testsuite/libgomp.c/task-5.c: New test.
	* testsuite/libgomp.c++/atomic-2.C: New test.
	* testsuite/libgomp.c++/atomic-3.C: New test.
	* testsuite/libgomp.c++/atomic-4.C: New test.
	* testsuite/libgomp.c++/atomic-5.C: New test.
	* testsuite/libgomp.c++/atomic-6.C: New test.
	* testsuite/libgomp.c++/atomic-7.C: New test.
	* testsuite/libgomp.c++/atomic-8.C: New test.
	* testsuite/libgomp.c++/atomic-9.C: New test.
	* testsuite/libgomp.c++/task-8.C: New test.
	* testsuite/libgomp.c++/reduction-4.C: New test.
	* testsuite/libgomp.fortran/allocatable7.f90: New test.
	* testsuite/libgomp.fortran/allocatable8.f90: New test.
	* testsuite/libgomp.fortran/crayptr3.f90: New test.
	* testsuite/libgomp.fortran/omp_atomic3.f90: New test.
	* testsuite/libgomp.fortran/omp_atomic4.f90: New test.
	* testsuite/libgomp.fortran/pointer1.f90: New test.
	* testsuite/libgomp.fortran/pointer2.f90: New test.
	* testsuite/libgomp.fortran/task4.f90: New test.

2011-08-02  Tobias Burnus  <burnus@net-b.de>

	* libgomp.texi: Update OpenMP spec references to 3.1.
	(omp_in_final,OMP_PROC_BIND): New sections.
	(OMP_NUM_THREADS): Document that the value can be now a list.
	(GOMP_STACKSIZE,GOMP_CPU_AFFINITY): Update @ref.

From-SVN: r177194
2011-08-02 18:13:29 +02:00
H.J. Lu
c01ecafca3 Check __x86_64__ instead of __LP64__ for x86 futex.
2011-08-02  H.J. Lu  <hongjiu.lu@intel.com>

	* config/linux/x86/futex.h: Check __x86_64__ instead of
	__LP64__.

From-SVN: r177166
2011-08-02 07:44:06 -07:00
Jakub Jelinek
2514265077 re PR middle-end/49897 (nesting lastprivate gives incorrect result)
PR middle-end/49897
	PR middle-end/49898
	* omp-low.c (use_pointer_for_field): If disallowing copy-in/out
	in nested parallel and outer is a gimple_reg, mark it as addressable
	and set its bit in task_shared_vars bitmap too.

	* testsuite/libgomp.c/pr49897-1.c: New test.
	* testsuite/libgomp.c/pr49897-2.c: New test.
	* testsuite/libgomp.c/pr49898-1.c: New test.
	* testsuite/libgomp.c/pr49898-2.c: New test.

From-SVN: r176945
2011-07-29 19:45:42 +02:00
H.J. Lu
f53d712fa9 Check ia32 instead of ilp32 for ia32 tests.
2011-07-28  H.J. Lu  <hongjiu.lu@intel.com>

	* testsuite/lib/libgomp.exp (libgomp_init): Add -march=i486
	for ia32 instead of ilp32.

	* testsuite/libgomp.c/atomic-1.c: Require ia32 instead of ilp32.
	* testsuite/libgomp.c/atomic-6.c: Likewise.

From-SVN: r176893
2011-07-28 13:35:32 -07:00
Sebastian Pop
3689198db0 Fix PR49471: canonicalize_loop_ivs should not generate unsigned types.
2011-07-27  Sebastian Pop  <sebastian.pop@amd.com>

	PR tree-optimization/49471
	* tree-ssa-loop-manip.c (canonicalize_loop_ivs): Build an unsigned
	iv only when the largest type is unsigned.  Do not call
	lang_hooks.types.type_for_size.

	* testsuite/libgomp.graphite/force-parallel-1.c: Un-xfail.
	* testsuite/libgomp.graphite/force-parallel-2.c: Adjust pattern.

From-SVN: r176838
2011-07-27 16:53:09 +00:00
Sebastian Pop
cbc1994b2f Fix PR47653: do not handle loops using wrapping semantics in graphite
2011-07-26  Sebastian Pop  <sebastian.pop@amd.com>

	PR middle-end/47653
	* graphite-scop-detection.c (graphite_can_represent_loop): Discard
	loops using wrapping semantics.

	* gcc.dg/graphite/run-id-pr47653.c: New.
	* gcc.dg/graphite/interchange-3.c: Do not use unsigned types for
	induction variables.
	* gcc.dg/graphite/scop-16.c: Same.
	* gcc.dg/graphite/scop-17.c: Same.
	* gcc.dg/graphite/scop-21.c: Same.

From-SVN: r176802
2011-07-26 18:48:08 +00:00
Rainer Orth
1a79cb7341 re PR libgomp/45351 (many unaligned accesses in libgomp tests)
PR libgomp/45351
	* config/osf/sem.h: New file.
	* configure.tgt (alpha*-dec-osf*): Prepend osf to config_path.

From-SVN: r176755
2011-07-25 15:39:52 +00:00
Rainer Orth
c1f5148401 re PR target/49541 (TLS support partially broken in 64-bit mode)
PR target/49541
	* testsuite/lib/libgomp.exp (libgomp_init): Don't add -lgomp to
	ldflags.

From-SVN: r176393
2011-07-18 12:09:18 +00:00
Jakub Jelinek
bfee0724e0 wait.h (do_spin): New inline...
* config/linux/wait.h (do_spin): New inline, largely copied
	from do_wait, just don't do futex_wait here, instead return true if
	it should be done.
	(do_wait): Implement using do_spin.
	* config/linux/mutex.h (gomp_mutex_lock_slow): Add an int argument
	to prototype.
	(gomp_mutex_lock): Use __sync_val_compare_and_swap instead of
	__sync_bool_compare_and_swap, pass the oldval to
	gomp_mutex_lock_slow.
	* config/linux/mutex.c (gomp_mutex_lock_slow): Add oldval argument.
	If all mutex contenders are just spinning and not sleeping, don't
	change state to 2 unnecessarily.  Optimize the loop when state has
	already become 2 to use just one atomic operation per loop instead
	of two.
	* config/linux/ia64/mutex.h (gomp_mutex_lock_slow): Add an int argument
	to prototype.
	(gomp_mutex_lock): Use __sync_val_compare_and_swap instead of
	__sync_bool_compare_and_swap, pass the oldval to
	gomp_mutex_lock_slow.

From-SVN: r176326
2011-07-15 21:46:11 +02:00
Jakub Jelinek
fb79f500af re PR libgomp/49490 (suboptimal load balancing in loops)
PR libgomp/49490
	* omp-low.c (expand_omp_for_static_nochunk): Only
	use n ceil/ nthreads size for the first
	n % nthreads threads in the team instead of
	all threads except for the last few ones which
	get less work or none at all.

	* iter.c (gomp_iter_static_next): For chunk size 0
	only use n ceil/ nthreads size for the first
	n % nthreads threads in the team instead of
	all threads except for the last few ones which
	get less work or none at all.
	* iter_ull.c (gomp_iter_ull_static_next): Likewise.
	* env.c (parse_schedule): If OMP_SCHEDULE doesn't have
	chunk argument, set run_sched_modifier to 0 for static
	resp. 1 for other kinds.  If chunk argument is 0
	and not static, set value to 1.

From-SVN: r175315
2011-06-22 22:39:25 +02:00
Jakub Jelinek
ea93a47bc8 re PR c++/49043 ([OpenMP & C++0x]: Compiler error when lambda-function within OpenMP loop)
PR c++/49043
	* decl.c (check_omp_return): Stop searching on sk_function_parms.

	* testsuite/libgomp.c++/pr49043.C: New test.

From-SVN: r173907
2011-05-19 15:11:56 +02:00
Jakub Jelinek
4577f7309a re PR c++/48869 (OpenMP task construct fails to instantiate copy constructor(same as Bug 36523))
PR c++/48869
	* method.c (get_dtor, get_copy_ctor): Add COMPLAIN argument,
	pass it down to locate_fn_flags.
	* cp-tree.h (get_dtor, get_copy_ctor): Adjust prototypes.
	* semantics.c (cxx_omp_create_clause_info): Adjust callers.
	* cp-gimplify.c: Include splay-tree.h.
	(splay_tree_compare_decl_uid, omp_var_to_track,
	omp_cxx_notice_variable): New functions.
	(struct cp_genericize_omp_taskreg): New type.
	(struct cp_genericize_data): Add omp_ctx field.
	(cp_genericize_r): Attempt to determine implicitly determined
	firstprivate class type variables.
	(cp_genericize): Clear omp_ctx.
	* Make-lang.in (cp/cp-gimplify.o): Depend on $(SPLAY_TREE_H).

	* testsuite/libgomp.c++/pr48869.C: New test.

From-SVN: r173888
2011-05-19 09:44:31 +02:00
Jakub Jelinek
e7385332a0 re PR fortran/48894 (generic omp_get_ancestor_thread_num(l(i)) produces incorrect output)
PR fortran/48894
	* fortran.c: Include limits.h.
	(TO_INT): Define.
	(omp_set_dynamic_8_, omp_set_num_threads_8_): Use !!*set instead of
	*set.
	(omp_set_num_threads_8_, omp_set_schedule_8_,
	omp_set_max_active_levels_8_, omp_get_ancestor_thread_num_8_,
	omp_get_team_size_8_): Use TO_INT macro.
	* testsuite/libgomp.fortran/pr48894.f90: New test.

From-SVN: r173476
2011-05-06 12:11:07 +02:00
Jakub Jelinek
20790697dd re PR middle-end/48591 (OpenMP ICE with atomics on __float128 in 32-bit only i686 cc1)
PR middle-end/48591
	* omp-low.c (expand_omp_atomic_fetch_op): Return false if decl is
	NULL.
	(expand_omp_atomic_pipeline): Return false if cmpxchg is NULL.

	* gcc.dg/gomp/pr48591.c: New test.

	* testsuite/libgomp.c/pr48591.c: New test.

From-SVN: r172379
2011-04-13 17:50:02 +02:00
Rainer Orth
bf382f5fe4 re PR bootstrap/48135 (build fails on Solaris2.8 due to Glob.pm not found within /usr/perl5)
libgfortran:
	PR bootstrap/48135
	* configure.ac (gfortran_use_symver): Handle --disable-symvers.
	* configure: Regenerate.

	libgomp:
	PR bootstrap/48135
	* acinclude.m4 (enable_symvers): Handle --disable-symvers.
	* configure: Regenerate.

	libjava:
	PR bootstrap/48135
	* configure.ac (libjava_cv_anon_version_script): Handle
	--disable-symvers.
	* configure: Regenerate.

	libquadmath:
	PR bootstrap/48135
	* configure.ac (quadmath_use_symver): Handle --disable-symvers.
	* configure: Regenerate.

	libssp:
	PR bootstrap/48135
	* configure.ac (ssp_use_symver): Handle --disable-symvers.
	* configure: Regenerate.

From-SVN: r171224
2011-03-21 12:24:17 +00:00
Jakub Jelinek
113a53c142 re PR fortran/47886 (ICE: OpenMP !$omp task if(omp_get_num_threads() > 0))
PR fortran/47886
	* gfortran.dg/gomp/task-1.f90: Removed.

	* testsuite/libgomp.fortran/task3.f90: New test.

From-SVN: r170535
2011-02-27 13:05:36 +01:00
Tobias Burnus
0024f1af57 libgomp.texi (GOMP_STACKSIZE): Fix @ref to OMP_STACKSIZE.
2011-02-24  Tobias Burnus  <burnus@net-b.de>

        * libgomp.texi (GOMP_STACKSIZE): Fix @ref to OMP_STACKSIZE.

From-SVN: r170479
2011-02-24 22:58:06 +01:00
Jakub Jelinek
21e1e594a9 re PR libgomp/47854 (omp_get_wtime documentation incorrect)
PR libgomp/47854
	* libgomp.texi (omp_get_wtime): Don't say time in the past
	must be Unix Epoch.

From-SVN: r170434
2011-02-23 09:58:16 +01:00
Jakub Jelinek
67962076d9 re PR libgomp/47804 (libgomp LD_LIBRARY_PATH doesn't include path to libgfortran)
PR libgomp/47804
	* testsuite/libgomp.fortran/fortran.exp: Check for both
	libquadmath.a and libquadmath.${shlib_ext}.  If neither exists,
	but $blddir != "", still append ${blddir}/${lang_library_path}
	to ld_library_path.

From-SVN: r170285
2011-02-18 21:44:44 +01:00
Tobias Burnus
3808007ca0 re PR libgomp/47758 (729 unexpected failures in the libgomp test suite on powerpc-apple-darwin8)
2011-02-16  Tobias Burnus  <burnus@net-b.de>

        PR libgomp/47758
        * testsuite/libgomp.fortran/fortran.exp: Check for the existence
        of libquadmath.a before adding its libpath to ldflags.

From-SVN: r170216
2011-02-16 18:44:45 +01:00
Jakub Jelinek
53b4d41df8 re PR libgomp/47731 (futex_wait broken on Linux)
PR libgomp/47731
	* config/linux/futex.h (futex_wait): Pass NULL as timeout argument
	to FUTEX_WAIT futex syscall.
	* config/linux/wait.h: Include <futex.h> instead of "futex.h".

From-SVN: r170133
2011-02-14 16:08:23 +01:00
Ralf Wildenhues
029c8f3e77 Remove freebsd1 from libtool.m4 macros and config.rpath.
/:
	Import from Libtool and gnulib:

	2011-01-27  Gerald Pfeifer  <gerald@pfeifer.com>

	Prepare for supporting FreeBSD 10.
	* config.rpath: Remove handling of freebsd1* which soon would
	match FreeBSD 10.0.

	2011-01-20  Gerald Pfeifer  <gerald@pfeifer.com>  (tiny change)

	Remove support for FreeBSD 1.x.
	* libtool.m4 (_LT_LINKER_SHLIBS)
	(_LT_SYS_DYNAMIC_LINKER): Remove handling of freebsd1* which
	soon would incorrectly match FreeBSD 10.0.

boehm-gc/:
	* configure: Regenerate.

gcc/:
	* configure: Regenerate.

libffi/:
	* configure: Regenerate.

libgfortran/:
	* Makefile.in: Regenerate.
	* aclocal.m4: Likewise.
	* configure: Likewise.

libgo/:
	* config/libtool.m4: (_LT_LINKER_SHLIBS)
	(_LT_SYS_DYNAMIC_LINKER): Remove handling of freebsd1* which
	soon would incorrectly match FreeBSD 10.0.
	* configure: Regenerate.

libgomp/:
	* configure: Regenerate.

libjava/:
	* configure: Regenerate.
	* shlibpath.m4 (AC_LIBTOOL_SYS_DYNAMIC_LINKER): Remove handling
	of freebsd1* which soon would incorrectly match FreeBSD 10.0.

libjava/classpath/:
	* config.rpath, ltcf-c.sh, ltcf-gcj.sh, ltconfig: Remove
	handling of freebsd1* which soon would match FreeBSD 10.0.
	* configure: Regenerate.

libjava/libltdl/:
	* acinclude.m4 (AC_LIBTOOL_PROG_LD_SHLIBS)
	(AC_LIBTOOL_SYS_DYNAMIC_LINKER): Remove handling
	of freebsd1* which soon would incorrectly match FreeBSD 10.0.
	* configure: Regenerate.

libmudflap/:
	* configure: Regenerate.

libobjc/:
	* configure: Regenerate.

libquadmath/:
	* Makefile.in: Regenerate.
	* aclocal.m4: Likewise.
	* configure: Likewise.

libssp/:
	* Makefile.in: Regenerate.
	* aclocal.m4: Likewise.
	* configure: Likewise.

libstdc++-v3/:
	* configure: Regenerate.

lto-plugin/:
	* Makefile.in: Regenerate.
	* aclocal.m4: Regenerate.
	* configure: Regenerate.

zlib/:
	* configure: Regenerate.

From-SVN: r170106
2011-02-13 11:45:53 +00:00
Benjamin Kosnik
bddd662631 re PR libstdc++/36104 (gnu-versioned-namespace is broken)
2011-01-20  Benjamin Kosnik  <bkoz@redhat.com>

	PR libstdc++/36104
	* acinclude.m4 (LIBGOMP_ENABLE_SYMVERS): Accept gnu variants.

From-SVN: r169072
2011-01-20 23:41:24 +00:00
Gerald Pfeifer
f1d4ab26bc * configure.tgt (*-*-freebsd*): Add -lpthread to XLDFLAGS.
From-SVN: r168858
2011-01-16 19:38:04 +00:00
Jakub Jelinek
d652f226fc Update Copyright years for files modified in 2010.
From-SVN: r168438
2011-01-03 21:52:22 +01:00
Jakub Jelinek
2b50313607 re PR fortran/46874 ([OpenMP] ICE in gfc_conv_descriptor_data_get, at fortran/trans-array.c:147)
PR fortran/46874
	* trans-openmp.c (gfc_trans_omp_array_reduction): Handle allocatable
	dummy variables.

	* libgomp.fortran/allocatable6.f90: New test.

From-SVN: r167799
2010-12-14 14:59:20 +01:00
Jakub Jelinek
af3fcdb4ac re PR fortran/46874 ([OpenMP] ICE in gfc_conv_descriptor_data_get, at fortran/trans-array.c:147)
PR fortran/46874
	* trans-openmp.c (gfc_trans_omp_array_reduction): Handle allocatable
	dummy variables.

	* libgomp.fortran/allocatable6.f90: New test.

From-SVN: r167798
2010-12-14 14:56:25 +01:00
Rainer Orth
c0f9d583f0 acinclude.m4 (symvers_renaming): Also set if enable_symvers = no.
libgomp:
	* acinclude.m4 (symvers_renaming): Also set if enable_symvers = no.
	* configure: Regenerate.

	libstdc++-v3:
	* acinclude.m4 (symvers_renaming): Also set if enable_symvers = no.
	* configure: Regenerate.

From-SVN: r167505
2010-12-06 17:10:09 +00:00
Dave Korn
7de6ba7a0b re PR target/40125 (libgcc_s DLL installed in wrong directory in cross toolchain)
config/ChangeLog:

2010-12-06  Dave Korn  <dave.korn.cygwin@gmail.com>

	PR target/40125
	PR lto/46695
	* lthostflags.m4: New file.
	(ACX_LT_HOST_FLAGS): Define.

libgfortran/ChangeLog:

2010-12-06  Dave Korn  <dave.korn.cygwin@gmail.com>

	PR target/40125
	PR lto/46695
	* configure.ac: Invoke ACX_LT_HOST_FLAGS.
	* Makefile.am (LTLDFLAGS): Use lt_host_flags.
	* aclocal.m4: Regenerate.
	* configure: Regenerate.
	* Makefile.in: Regenerate.

libgomp/ChangeLog:

2010-12-06  Dave Korn  <dave.korn.cygwin@gmail.com>

	PR target/40125
	PR lto/46695
	* configure.ac: Invoke ACX_LT_HOST_FLAGS.
	* Makefile.am (libgomp_la_LDFLAGS): Use lt_host_flags.
	* aclocal.m4: Regenerate.
	* configure: Regenerate.
	* Makefile.in: Regenerate.
	* testsuite/Makefile.in: Regenerate.

libjava/ChangeLog:

2010-12-06  Dave Korn  <dave.korn.cygwin@gmail.com>

	PR target/40125
	PR lto/46695
	* configure.ac: Invoke ACX_LT_HOST_FLAGS.
	* configure.host (libgcj_sublib_ltflags): Use lt_host_flags.
	* aclocal.m4: Regenerate.
	* configure: Regenerate.
	* Makefile.in: Regenerate.
	* gcj/Makefile.in: Regenerate.
	* include/Makefile.in: Regenerate.
	* testsuite/Makefile.in: Regenerate.

libobjc/ChangeLog:

2010-12-06  Dave Korn  <dave.korn.cygwin@gmail.com>

	PR target/40125
	PR lto/46695
	* configure.ac (extra_ldflags_libobjc): Invoke ACX_LT_HOST_FLAGS.
	* Makefile.in (lt_host_flags): Import AC_SUBST'd value.
	* aclocal.m4: Regenerate.
	* configure: Regenerate.

libquadmath/ChangeLog:

2010-12-06  Dave Korn  <dave.korn.cygwin@gmail.com>

	PR target/40125
	PR lto/46695
	* configure.ac: Invoke ACX_LT_HOST_FLAGS.
	* Makefile.am (libquadmath_la_LDFLAGS): Use lt_host_flags.
	* aclocal.m4: Regenerate.
	* configure: Regenerate.
	* Makefile.in: Regenerate.

libssp/ChangeLog:

2010-12-06  Dave Korn  <dave.korn.cygwin@gmail.com>

	PR target/40125
	PR lto/46695
	* configure.ac: Invoke ACX_LT_HOST_FLAGS.
	* Makefile.am (libssp_la_LDFLAGS): Use lt_host_flags.
	* aclocal.m4: Regenerate.
	* configure: Regenerate.
	* Makefile.in: Regenerate.

libstdc++-v3/ChangeLog:

2010-12-06  Dave Korn  <dave.korn.cygwin@gmail.com>

	PR target/40125
	PR lto/46695
	* configure.ac: Invoke ACX_LT_HOST_FLAGS.
	* configure.host (OPT_LDFLAGS): Use lt_host_flags for cygming.
	* aclocal.m4: Regenerate.
	* configure: Regenerate.
	* Makefile.in: Regenerate.
	* doc/Makefile.in: Regenerate.
	* include/Makefile.in: Regenerate.
	* libsupc++/Makefile.in: Regenerate.
	* po/Makefile.in: Regenerate.
	* python/Makefile.in: Regenerate.
	* src/Makefile.in: Regenerate.
	* testsuite/Makefile.in: Regenerate.

lto-plugin/ChangeLog:

2010-12-06  Dave Korn  <dave.korn.cygwin@gmail.com>

	PR target/40125
	PR lto/46695
	* configure.ac: Invoke ACX_LT_HOST_FLAGS.
	* Makefile.am (liblto_plugin_la_LDFLAGS): Use lt_host_flags but
	override -bindir setting.
	* aclocal.m4: Regenerate.
	* configure: Regenerate.
	* Makefile.in: Regenerate.

From-SVN: r167480
2010-12-06 00:50:04 +00:00
Jakub Jelinek
edaadf74d4 re PR fortran/46753 (ICE: OpenMP - in extract_omp_for_data, at omp-low.c:335)
PR fortran/46753
	* trans-openmp.c (gfc_trans_omp_do): Use build2_loc instead of
	fold_build2_loc for OMP_FOR conditions.

	* libgomp.fortran/pr46753.f90: New test.

From-SVN: r167372
2010-12-02 15:37:20 +01:00
Jakub Jelinek
4c698cf891 re PR libgomp/43706 (scheduling two threads on one core leads to starvation)
PR libgomp/43706
	* env.c (initialize_env): Default to spin count 300000
	instead of 20000000 if neither OMP_WAIT_POLICY nor GOMP_SPINCOUNT
	is specified.

From-SVN: r167371
2010-12-02 15:31:27 +01:00
Jakub Jelinek
b7516041a1 re PR libgomp/45240 (parallel.c: GOMP_parallel_end locks a mutex but fails to unlock it after atomic operation complete)
PR libgomp/45240
	* parallel.c (GOMP_parallel_end): Unlock gomp_remaining_threads_lock
	at the end if sync builtins aren't supported.

From-SVN: r167370
2010-12-02 15:30:37 +01:00
Rainer Orth
6b43a34c3c * configure.tgt (mips-sgi-irix6*): Add -lpthread to XLDFLAGS.
From-SVN: r167333
2010-12-01 14:01:48 +00:00
Rainer Orth
950691fafd * testsuite/libgomp.fortran/vla8.f90: Use dg-timeout-factor 2.0.
From-SVN: r167328
2010-12-01 13:41:59 +00:00
Iain Sandoe
fb9041eab3 fortran.exp: Add paths for libquadmath.
libgomp:

	* testsuite/libgomp.fortran/fortran.exp: Add paths for libquadmath.

From-SVN: r167127
2010-11-24 19:26:27 +00:00
Francois-Xavier Coudert
1ec601bf9f re PR fortran/32049 (Support on x86_64 also kind=16)
/
2010-11-13  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
            Tobias Burnus  <burnus@net-b.de>

        PR fortran/32049
        * Makefile.def: Add libquadmath; build it with language=fortran.
        * configure.ac: Add libquadmath.
        * Makefile.tpl: Handle multiple libs in check-[+language+].
        * Makefile.in: Regenerate.
        * configure: Regenerate.

libquadmath/
2010-11-13  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
            Tobias Burnus  <burnus@net-b.de>

        PR fortran/32049
        Initial implementation and checkin.

gcc/fortran/
2010-11-13  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
            Tobias Burnus  <burnus@net-b.de>

        PR fortran/32049
        * gfortranspec.c (find_spec_file): New function.
        (lang_specific_driver): Try to find .spec file and use it.
        * trans-io.c (iocall): Define
        * IOCALL_X_REAL128/COMPLEX128(,write).
        (gfc_build_io_library_fndecls): Build decl for __float128 I/O.
        (transfer_expr): Call __float128 I/O functions.
        * trans-types.c (gfc_init_kinds): Allow kind-16 belonging
        to __float128.

gcc/testsuite/
2010-11-13  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
            Tobias Burnus  <burnus@net-b.de>

        PR fortran/32049
        * gfortran.dg/quad_1.f90: New.
        * lib/gcc-defs.exp (gcc-set-multilib-library-path): Use also
        compiler arguments.
        * lib/gfortran.exp (gfortran_link_flags): Add libquadmath to
        library search path; call gcc-set-multilib-library-path with
        arguments such that libgfortran.spec is found.
        (gfortran_init): Add path for libgfortran.spec to
GFORTRAN_UNDER_TEST.

libgomp/
2010-11-13  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
            Tobias Burnus  <burnus@net-b.de>

        PR fortran/32049
        * configure.ac: 
        * configure: Regenerate.

libgfortran/
2010-11-13  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
            Tobias Burnus  <burnus@net-b.de>

        PR fortran/32049
        * Makefile.am: Add missing pow_r16_i4.c, add transfer128.c,
        link libquadmath, if used.
        * acinclude.m4 (LIBGFOR_CHECK_FLOAT128): Add.
        * configure.ac: Use it, touch spec file.
        * gfortran.map: Add pow_r16_i4 and
        transfer_(real,complex)128(,write) functions.
        * intrinsics/cshift0.c (cshift0): Handle __float128 type.
        * intrinsics/erfc_scaled_inc.c: Ditto.
        * intrinsics/pack_generic.c (pack): Ditto
        * intrinsics/spread_generic.c (spread): Ditto.
        * intrinsics/unpack_generic.c (unpack1): Ditto.
        * io/read.c (convert_real): Ditto.
        * io/transfer.c: Update comments.
        * io/transfer128.c: New file.
        * io/write_float.def (write_float): Handle __float128 type.
        * libgfortran.h: #include quadmath_weak.h, define __builtin_infq
        and nanq.
        * m4/mtype.m4: Handle __float128 type.
        * runtime/in_pack_generic.c (internal_pack): Ditto.
        * runtime/in_unpack_generic.c (internal_unpack): Ditto.
        * kinds-override.h: New file.
        * libgfortran.spec.in: Ditto.
        * generated/pow_r16_i4.c: Generated.
        * Makefile.in: Regenerate.
        * configure: Regenerate.
        * config.h: Regenerate.
        * bessel_r10.c: Regenerate.
        * bessel_r16.c: Regenerate.
        * bessel_r4.c: Regenerate.
        * bessel_r8.c: Regenerate.
        * exponent_r16.c: Regenerate.
        * fraction_r16.c: Regenerate.
        * nearest_r16.c: Regenerate.
        * norm2_r10.c: Regenerate.
        * norm2_r16.c: Regenerate.
        * norm2_r4.c: Regenerate.
        * norm2_r8.c: Regenerate.
        * rrspacing_r16.c: Regenerate.
        * set_exponent_r16.c: Regenerate.
        * spacing_r16.c: Regenerate.


Co-Authored-By: Tobias Burnus <burnus@net-b.de>

From-SVN: r166825
2010-11-16 22:23:19 +01:00