1. 27 Mar, 2019 1 commit
  2. 01 Jan, 2019 1 commit
  3. 08 Nov, 2018 1 commit
    • builtin-types.def (BT_FN_VOID_BOOL, [...]): New. · 28567c40
      	* builtin-types.def (BT_FN_VOID_BOOL, BT_FN_VOID_SIZE_SIZE_PTR,
      	BT_FN_UINT_UINT_PTR_PTR, BT_FN_UINT_OMPFN_PTR_UINT_UINT,
      	BT_FN_BOOL_UINT_LONGPTR_LONG_LONG_LONGPTR_LONGPTR_PTR_PTR,
      	BT_FN_BOOL_UINT_ULLPTR_LONG_ULL_ULLPTR_ULLPTR_PTR_PTR,
      	BT_FN_BOOL_LONG_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR_PTR_PTR,
      	BT_FN_BOOL_BOOL_ULL_ULL_ULL_LONG_ULL_ULLPTR_ULLPTR_PTR_PTR): New.
      	* gengtype.c (open_base_files): Add omp-general.h.
      	* gimple.c (gimple_build_omp_critical):
      	(gimple_build_omp_taskgroup): Add CLAUSES argument.  Call
      	gimple_omp_taskgroup_set_clauses.
      	(gimple_build_omp_atomic_load): Add mo argument, call
      	gimple_omp_atomic_set_memory_order.
      	(gimple_build_omp_atomic_store): Likewise.
      	(gimple_copy): Adjust handling of GIMPLE_OMP_TASKGROUP.
      	* gimple.def (GIMPLE_OMP_TASKGROUP): Use GSS_OMP_SINGLE_LAYOUT
      	instead of GSS_OMP.
      	(GIMPLE_OMP_TEAMS): Use GSS_OMP_PARALLEL_LAYOUT instead
      	of GSS_OMP_SINGLE_LAYOUT, adjust comments.
      	* gimple.h (enum gf_mask): Add GF_OMP_TEAMS_HOST, GF_OMP_TASK_TASKWAIT
      	and GF_OMP_ATOMIC_MEMORY_ORDER.  Remove GF_OMP_ATOMIC_SEQ_CST, use
      	different value for GF_OMP_ATOMIC_NEED_VALUE.
      	(struct gimple_statement_omp_taskreg): Add GIMPLE_OMP_TEAMS to
      	comments.
      	(struct gimple_statement_omp_single_layout): And remove here.
      	(struct gomp_teams): Inherit from gimple_statement_omp_taskreg rather
      	than gimple_statement_omp_single_layout.
      	(is_a_helper <gimple_statement_omp_taskreg *>::test): Allow
      	GIMPLE_OMP_TEAMS.
      	(is_a_helper <const gimple_statement_omp_taskreg *>::test): Likewise.
      	(gimple_omp_subcode): Formatting fix.
      	(gimple_omp_teams_child_fn, gimple_omp_teams_child_fn_ptr,
      	gimple_omp_teams_set_child_fn, gimple_omp_teams_data_arg,
      	gimple_omp_teams_data_arg_ptr, gimple_omp_teams_set_data_arg,
      	gimple_omp_teams_host, gimple_omp_teams_set_host,
      	gimple_omp_task_taskwait_p, gimple_omp_task_set_taskwait_p,
      	gimple_omp_taskgroup_clauses, gimple_omp_taskgroup_clauses_ptr,
      	gimple_omp_taskgroup_set_clauses): New inline functions.
      	(gimple_build_omp_atomic_load): Add enum omp_memory_order argument.
      	(gimple_build_omp_atomic_store): Likewise.
      	(gimple_omp_atomic_seq_cst_p): Remove.
      	(gimple_omp_atomic_memory_order): New function.
      	(gimple_omp_atomic_set_seq_cst): Remove.
      	(gimple_omp_atomic_set_memory_order): New function.
      	(gimple_build_omp_taskgroup): Add clauses argument.
      	* gimple-pretty-print.c (dump_gimple_omp_taskgroup): New function.
      	(dump_gimple_omp_task): Print taskwait with depend clauses.
      	(dump_gimple_omp_atomic_load, dump_gimple_omp_atomic_store): Use
      	dump_omp_atomic_memory_order.
      	(pp_gimple_stmt_1): Handle GIMPLE_OMP_TASKGROUP.
      	* gimplify.c (enum gimplify_omp_var_data): Add GOVD_MAP_ALLOC_ONLY,
      	GOVD_MAP_FROM_ONLY and GOVD_NONTEMPORAL.
      	(enum omp_region_type): Reserve bits 1 and 2 for auxiliary flags,
      	renumber values of most of ORT_* enumerators, add ORT_HOST_TEAMS,
      	ORT_COMBINED_HOST_TEAMS, ORT_TASKGROUP, ORT_TASKLOOP and
      	ORT_UNTIED_TASKLOOP enumerators.
      	(enum gimplify_defaultmap_kind): New.
      	(struct gimplify_omp_ctx): Remove target_map_scalars_firstprivate and
      	target_map_pointers_as_0len_arrays members, add defaultmap.
      	(new_omp_context): Initialize defaultmap member.
      	(gimple_add_tmp_var): Handle ORT_TASKGROUP like ORT_WORKSHARE.
      	(maybe_fold_stmt): Don't fold even in host teams regions.
      	(omp_firstprivatize_variable): Handle ORT_TASKGROUP like
      	ORT_WORKSHARE.  Test ctx->defaultmap[GDMK_SCALAR] instead of
      	ctx->omp_firstprivatize_variable.
      	(omp_add_variable): Don't add private/firstprivate for VLAs in
      	ORT_TASKGROUP.
      	(omp_default_clause): Print "taskloop" rather than "task" if
      	ORT_*TASKLOOP.
      	(omp_notice_variable): Handle ORT_TASKGROUP like ORT_WORKSHARE.
      	Handle new defaultmap clause kinds.
      	(omp_is_private): Handle ORT_TASKGROUP like ORT_WORKSHARE.  Allow simd
      	iterator to be lastprivate or private.  Fix up diagnostics if linear
      	is used on collapse>1 simd iterator.
      	(omp_check_private): Handle ORT_TASKGROUP like ORT_WORKSHARE.
      	(gimplify_omp_depend): New function.
      	(gimplify_scan_omp_clauses): Add shared clause on parallel for
      	combined parallel master taskloop{, simd} if taskloop has
      	firstprivate, lastprivate or reduction clause.  Handle
      	OMP_CLAUSE_REDUCTION_TASK diagnostics.  Adjust tests for
      	ORT_COMBINED_TEAMS.  Gimplify depend clauses with iterators.  Handle
      	cancel and simd OMP_CLAUSE_IF_MODIFIERs.  Handle
      	OMP_CLAUSE_NONTEMPORAL.  Handle new defaultmap clause kinds.  Handle
      	OMP_CLAUSE_{TASK,IN}_REDUCTION.  Diagnose invalid conditional
      	lastprivate.
      	(gimplify_adjust_omp_clauses_1): Ignore GOVD_NONTEMPORAL.  Handle
      	GOVD_MAP_ALLOC_ONLY and GOVD_MAP_FROM_ONLY.  
      	(gimplify_adjust_omp_clauses): Handle OMP_CLAUSE_NONTEMPORAL.  Handle
      	OMP_CLAUSE_{TASK,IN}_REDUCTION.
      	(gimplify_omp_task): Handle taskwait with depend clauses.
      	(gimplify_omp_for): Add shared clause on parallel for combined
      	parallel master taskloop{, simd} if taskloop has firstprivate,
      	lastprivate or reduction clause.  Use ORT_TASKLOOP or
      	ORT_UNTIED_TASKLOOP instead of ORT_TASK or ORT_UNTIED_TASK.  Adjust
      	tests for ORT_COMBINED_TEAMS.  Handle C++ range for loops with
      	NULL TREE_PURPOSE in OMP_FOR_ORIG_DECLS.  Firstprivatize
      	__for_end and __for_range temporaries on OMP_PARALLEL for
      	distribute parallel for{, simd}.  Move OMP_CLAUSE_REDUCTION
      	and OMP_CLAUSE_IN_REDUCTION from taskloop to the task construct
      	sandwiched in between two taskloops.
      	(computable_teams_clause): Test ctx->defaultmap[GDMK_SCALAR]
      	instead of ctx->omp_firstprivatize_variable.
      	(gimplify_omp_workshare): Set ort to ORT_HOST_TEAMS or
      	ORT_COMBINED_HOST_TEAMS if not inside of target construct.  If
      	host teams, use gimplify_and_return_first etc. for body like
      	for target or target data constructs, and at the end call
      	gimple_omp_teams_set_host on the GIMPLE_OMP_TEAMS object.
      	(gimplify_omp_atomic): Use OMP_ATOMIC_MEMORY_ORDER instead
      	of OMP_ATOMIC_SEQ_CST, pass it as new argument to
      	gimple_build_omp_atomic_load and gimple_build_omp_atomic_store, remove
      	gimple_omp_atomic_set_seq_cst calls.
      	(gimplify_expr) <case OMP_TASKGROUP>: Move handling into a separate
      	case, handle taskgroup clauses.
      	* lto-streamer-out.c (hash_tree): Handle
      	OMP_CLAUSE_{TASK,IN}_REDUCTION.
      	* Makefile.in (GTFILES): Add omp-general.h.
      	* omp-builtins.def (BUILT_IN_GOMP_TASKWAIT_DEPEND,
      	BUILT_IN_GOMP_LOOP_NONMONOTONIC_RUNTIME_START,
      	BUILT_IN_GOMP_LOOP_MAYBE_NONMONOTONIC_RUNTIME_START,
      	BUILT_IN_GOMP_LOOP_START, BUILT_IN_GOMP_LOOP_ORDERED_START,
      	BUILT_IN_GOMP_LOOP_DOACROSS_START,
      	BUILT_IN_GOMP_LOOP_NONMONOTONIC_RUNTIME_NEXT,
      	BUILT_IN_GOMP_LOOP_MAYBE_NONMONOTONIC_RUNTIME_NEXT,
      	BUILT_IN_GOMP_LOOP_ULL_NONMONOTONIC_RUNTIME_START,
      	BUILT_IN_GOMP_LOOP_ULL_MAYBE_NONMONOTONIC_RUNTIME_START,
      	BUILT_IN_GOMP_LOOP_ULL_START, BUILT_IN_GOMP_LOOP_ULL_ORDERED_START,
      	BUILT_IN_GOMP_LOOP_ULL_DOACROSS_START,
      	BUILT_IN_GOMP_LOOP_ULL_NONMONOTONIC_RUNTIME_NEXT,
      	BUILT_IN_GOMP_LOOP_ULL_MAYBE_NONMONOTONIC_RUNTIME_NEXT,
      	BUILT_IN_GOMP_PARALLEL_LOOP_NONMONOTONIC_RUNTIME,
      	BUILT_IN_GOMP_PARALLEL_LOOP_MAYBE_NONMONOTONIC_RUNTIME,
      	BUILT_IN_GOMP_PARALLEL_REDUCTIONS, BUILT_IN_GOMP_SECTIONS2_START,
      	BUILT_IN_GOMP_TEAMS_REG, BUILT_IN_GOMP_TASKGROUP_REDUCTION_REGISTER,
      	BUILT_IN_GOMP_TASKGROUP_REDUCTION_UNREGISTER,
      	BUILT_IN_GOMP_TASK_REDUCTION_REMAP,
      	BUILT_IN_GOMP_WORKSHARE_TASK_REDUCTION_UNREGISTER): New builtins.
      	* omp-expand.c (workshare_safe_to_combine_p): Return false for
      	non-worksharing loops.
      	(omp_adjust_chunk_size): Don't adjust anything if chunk_size is zero.
      	(determine_parallel_type): Don't combine parallel with worksharing
      	which has _reductemp_ clause.
      	(expand_parallel_call): Emit the GOMP_*nonmonotonic_runtime* or
      	GOMP_*maybe_nonmonotonic_runtime* builtins instead of GOMP_*runtime*
      	if there is nonmonotonic modifier or if there is no modifier and no
      	ordered clause.  For dynamic and guided schedule without monotonic
      	and nonmonotonic modifier, default to nonmonotonic.
      	(expand_omp_for): Likewise.  Adjust expand_omp_for_generic caller, use
      	GOMP_loop{,_ull}{,_ordered,_doacross}_start builtins if there are
      	task reductions.
      	(expand_task_call): Add GOMP_TASK_FLAG_REDUCTION flag to flags if
      	there are any reduction clauses.
      	(expand_taskwait_call): New function.
      	(expand_teams_call): New function.
      	(expand_omp_taskreg): Allow GIMPLE_OMP_TEAMS and call
      	expand_teams_call for it.  Formatting fix.  Handle taskwait with
      	depend clauses.
      	(expand_omp_for_generic): Add SCHED_ARG argument.  Handle expansion
      	of worksharing loops with task reductions.
      	(expand_omp_for_static_nochunk, expand_omp_for_static_chunk): Handle
      	expansion of worksharing loops with task reductions.
      	(expand_omp_sections): Handle expansion of sections with task
      	reductions.
      	(expand_omp_synch): For host teams call expand_omp_taskreg.
      	(omp_memory_order_to_memmodel): New function.
      	(expand_omp_atomic_load, expand_omp_atomic_store,
      	expand_omp_atomic_fetch_op): Use it and gimple_omp_atomic_memory_order
      	instead of gimple_omp_atomic_seq_cst_p.
      	(build_omp_regions_1, omp_make_gimple_edges): Treat taskwait with
      	depend clauses as a standalone directive.
      	* omp-general.c (enum omp_requires): New variable.
      	(omp_extract_for_data): Initialize have_reductemp member.  Allow
      	NE_EXPR even in OpenMP loops, transform them into LT_EXPR or
      	GT_EXPR loops depending on incr sign.  Formatting fixes.
      	* omp-general.h (struct omp_for_data): Add have_reductemp member.
      	(enum omp_requires): New enum.
      	(omp_requires_mask): Declare.
      	* omp-grid.c (grid_eliminate_combined_simd_part): Formatting fix.
      	Fix comment typos.
      	* omp-low.c (struct omp_context): Add task_reductions and
      	task_reduction_map fields.
      	(is_host_teams_ctx): New function.
      	(is_taskreg_ctx): Return true also if is_host_teams_ctx.
      	(use_pointer_for_field): Use is_global_var instead of
      	TREE_STATIC || DECL_EXTERNAL, and apply only if not privatized
      	in outer contexts.
      	(build_outer_var_ref): Ignore taskgroup outer contexts.
      	(delete_omp_context): Release task_reductions and task_reduction_map.
      	(scan_sharing_clauses): Don't add any fields for reduction clause on
      	taskloop.  Handle OMP_CLAUSE__REDUCTEMP_.  Handle
      	OMP_CLAUSE_{IN,TASK}_REDUCTION and OMP_CLAUSE_REDUCTION with task
      	modifier.  Don't ignore shared clauses in is_host_teams_ctx contexts.
      	Handle OMP_CLAUSE_NONTEMPORAL.
      	(add_taskreg_looptemp_clauses): Add OMP_CLAUSE__REDUCTEMP_ clause if
      	needed.
      	(scan_omp_parallel): Add _reductemp_ clause if there are any reduction
      	clauses with task modifier.
      	(scan_omp_task): Handle taskwait with depend clauses.
      	(finish_taskreg_scan): Move field corresponding to _reductemp_ clause
      	first.  Move also OMP_CLAUSE__REDUCTEMP_ clause in front if present.
      	Handle GIMPLE_OMP_TEAMS like GIMPLE_OMP_PARALLEL.
      	(scan_omp_for): Fix comment formatting.
      	(scan_omp_teams): Handle host teams constructs.
      	(check_omp_nesting_restrictions): Allow teams with no outer
      	OpenMP context.  Adjust diagnostics for teams strictly nested into
      	some explicit OpenMP construct other than target.  Allow OpenMP atomics
      	inside of simd regions.
      	(scan_omp_1_stmt): Call scan_sharing_clauses for taskgroups.
      	(scan_omp_1_stmt) <case GIMPLE_OMP_TEAMS>: Temporarily bump
      	taskreg_nesting_level while scanning host teams construct.
      	(task_reduction_read): New function.
      	(lower_rec_input_clauses): Handle OMP_CLAUSE_REDUCTION on taskloop
      	construct.  Handle OMP_CLAUSE_IN_REDUCTION and OMP_CLAUSE__REDUCTEMP_
      	clauses.  Handle OMP_CLAUSE_REDUCTION with task modifier.  Remove
      	second argument create_tmp_var if it is NULL.  Don't ignore shared
      	clauses in is_host_teams_ctx contexts.  Handle
      	OMP_CLAUSE_FIRSTPRIVATE_NO_REFERENCE on OMP_CLAUSE_FIRSTPRIVATE
      	clauses.
      	(lower_reduction_clauses): Ignore reduction clauses with task
      	modifier.  Remove second argument create_tmp_var if it is NULL.
      	Initialize OMP_ATOMIC_MEMORY_ORDER to relaxed.
      	(lower_send_clauses): Ignore reduction clauses with task modifier.
      	Handle OMP_CLAUSE__REDUCTEMP_.  Don't send anything for
      	OMP_CLAUSE_REDUCTION on taskloop.  Handle OMP_CLAUSE_IN_REDUCTION.
      	(maybe_add_implicit_barrier_cancel): Add OMP_RETURN argument, don't
      	rely that it is the last stmt in body so far.  Ignore outer taskgroup
      	contexts.
      	(omp_task_reductions_find_first, omp_task_reduction_iterate,
      	lower_omp_task_reductions): New functions.
      	(lower_omp_sections): Handle reduction clauses with taskgroup
      	modifiers.  Adjust maybe_add_implicit_barrier_cancel caller.
      	(lower_omp_single): Adjust maybe_add_implicit_barrier_cancel caller.
      	(lower_omp_for): Likewise.  Handle reduction clauses with taskgroup
      	modifiers.
      	(lower_omp_taskgroup): Handle taskgroup reductions.
      	(create_task_copyfn): Copy over OMP_CLAUSE__REDUCTEMP_ pointer.
      	Handle OMP_CLAUSE_IN_REDUCTION and OMP_CLAUSE_REDUCTION clauses.
      	(lower_depend_clauses): If there are any
      	OMP_CLAUSE_DEPEND_DEPOBJ or OMP_CLAUSE_DEPEND_MUTEXINOUTSET
      	depend clauses, use a new array format.  If OMP_CLAUSE_DEPEND_LAST is
      	seen, assume lowering is done already and return early.  Set kind
      	on artificial depend clause to OMP_CLAUSE_DEPEND_LAST.
      	(lower_omp_taskreg): Handle reduction clauses with task modifier on
      	parallel construct.  Handle reduction clause on taskloop construct.
      	Handle taskwait with depend clauses.
      	(lower_omp_1): Use lower_omp_taskreg instead of lower_omp_teams
      	for host teams constructs.
      	* tree.c (omp_clause_num_ops): Add in_reduction, task_reduction,
      	nontemporal and _reductemp_ clause entries.
      	(omp_clause_code_name): Likewise.
      	(walk_tree_1): Handle OMP_CLAUSE_{IN,TASK}_REDUCTION,
      	OMP_CLAUSE_NONTEMPORAL and OMP_CLAUSE__REDUCTEMP_.
      	* tree-core.h (enum omp_clause_code): Add
      	OMP_CLAUSE_{{IN,TASK}_REDUCTION,NONTEMPORAL,_REDUCTEMP_}.
      	(enum omp_clause_defaultmap_kind, enum omp_memory_order): New.
      	(struct tree_base): Add omp_atomic_memory_order field into union.
      	Remove OMP_ATOMIC_SEQ_CST comment.
      	(enum omp_clause_depend_kind): Add OMP_CLAUSE_DEPEND_MUTEXINOUTSET
      	and OMP_CLAUSE_DEPEND_DEPOBJ.
      	(struct tree_omp_clause): Add subcode.defaultmap_kind.
      	* tree.def (OMP_TASKGROUP): Add another operand, move next to other
      	OpenMP constructs with body and clauses operands.
      	* tree.h (OMP_BODY): Use OMP_MASTER instead of OMP_TASKGROUP.
      	(OMP_CLAUSES): Use OMP_TASKGROUP instead of OMP_SINGLE.
      	(OMP_TASKGROUP_CLAUSES): Define.
      	(OMP_CLAUSE_DECL): Use OMP_CLAUSE__REDUCTEMP_ instead of
      	OMP_CLAUSE__LOOPTEMP_.
      	(OMP_ATOMIC_SEQ_CST): Remove.
      	(OMP_ATOMIC_MEMORY_ORDER, OMP_CLAUSE_FIRSTPRIVATE_NO_REFERENCE,
      	OMP_CLAUSE_LASTPRIVATE_CONDITIONAL): Define.
      	(OMP_CLAUSE_REDUCTION_CODE, OMP_CLAUSE_REDUCTION_INIT,
      	OMP_CLAUSE_REDUCTION_MERGE, OMP_CLAUSE_REDUCTION_PLACEHOLDER,
      	OMP_CLAUSE_REDUCTION_DECL_PLACEHOLDER,
      	OMP_CLAUSE_REDUCTION_OMP_ORIG_REF): Handle
      	OMP_CLAUSE_{,IN_,TASK_}REDUCTION.
      	(OMP_CLAUSE_REDUCTION_TASK, OMP_CLAUSE_REDUCTION_INSCAN,
      	OMP_CLAUSE_DEFAULTMAP_KIND, OMP_CLAUSE_DEFAULTMAP_CATEGORY,
      	OMP_CLAUSE_DEFAULTMAP_BEHAVIOR, OMP_CLAUSE_DEFAULTMAP_SET_KIND):
      	Define.
      	* tree-inline.c (remap_gimple_stmt): Remap taskgroup clauses.
      	* tree-nested.c (convert_nonlocal_omp_clauses): Handle
      	OMP_CLAUSE__REDUCTEMP_, OMP_CLAUSE_NONTEMPORAL.
      	(convert_local_omp_clauses): Likewise.  Remove useless test.
      	* tree-parloops.c (create_call_for_reduction_1): Pass
      	OMP_MEMORY_ORDER_RELAXED as new argument to
      	dump_gimple_omp_atomic_load and dump_gimple_omp_atomic_store.
      	* tree-pretty-print.c (dump_omp_iterators): New function.
      	(dump_omp_clause): Handle OMP_CLAUSE__REDUCTEMP_,
      	OMP_CLAUSE_NONTEMPORAL, OMP_CLAUSE_{TASK,IN}_REDUCTION.  Print
      	reduction modifiers.  Handle OMP_CLAUSE_DEPEND_DEPOBJ and
      	OMP_CLAUSE_DEPEND_MUTEXINOUTSET.  Print iterators in depend clauses.
      	Print __internal__ for OMP_CLAUSE_DEPEND_LAST.  Handle cancel and
      	simd OMP_CLAUSE_IF_MODIFIERs.  Handle new kinds of
      	OMP_CLAUSE_DEFAULTMAP. Print conditional: for
      	OMP_CLAUSE_LASTPRIVATE_CONDITIONAL.
      	(dump_omp_atomic_memory_order): New function.
      	(dump_generic_node): Use it.  Print taskgroup clauses.  Print
      	taskwait with depend clauses.
      	* tree-pretty-print.h (dump_omp_atomic_memory_order): Declare.
      	* tree-streamer-in.c (unpack_ts_omp_clause_value_fields):
      	Handle OMP_CLAUSE_{TASK,IN}_REDUCTION.
      	* tree-streamer-out.c (pack_ts_omp_clause_value_fields,
      	write_ts_omp_clause_tree_pointers): Likewise.
      gcc/c-family/
      	* c-common.h (c_finish_omp_taskgroup): Add CLAUSES argument.
      	(c_finish_omp_atomic): Replace bool SEQ_CST argument with
      	enum omp_memory_order MEMORY_ORDER.
      	(c_finish_omp_flush): Add MO argument.
      	(c_omp_depend_t_p, c_finish_omp_depobj): Declare.
      	(c_finish_omp_for): Add FINAL_P argument.
      	* c-omp.c: Include memmodel.h.
      	(c_finish_omp_taskgroup): Add CLAUSES argument.  Set
      	OMP_TASKGROUP_CLAUSES to it.
      	(c_finish_omp_atomic): Replace bool SEQ_CST argument with
      	enum omp_memory_order MEMORY_ORDER.  Set OMP_ATOMIC_MEMORY_ORDER
      	instead of OMP_ATOMIC_SEQ_CST.
      	(c_omp_depend_t_p, c_finish_omp_depobj): New functions.
      	(c_finish_omp_flush): Add MO argument, if not MEMMODEL_LAST, emit
      	__atomic_thread_fence call with the given value.
      	(check_omp_for_incr_expr): Formatting fixes.
      	(c_finish_omp_for): Add FINAL_P argument.  Allow NE_EXPR
      	even in OpenMP loops, diagnose if NE_EXPR and incr expression
      	is not constant expression 1 or -1.  Transform NE_EXPR loops
      	with iterators pointers to VLA into LT_EXPR or GT_EXPR loops.
      	(c_omp_check_loop_iv_r): Look for orig decl of C++ range for
      	loops too.
      	(c_omp_split_clauses): Add support for combined
      	#pragma omp parallel master and
      	#pragma omp {,parallel }master taskloop{, simd} constructs.
      	Handle OMP_CLAUSE_IN_REDUCTION.  Handle OMP_CLAUSE_REDUCTION_TASK.
      	Handle OMP_CLAUSE_NONTEMPORAL.  Handle splitting OMP_CLAUSE_IF
      	also to OMP_SIMD.  Copy OMP_CLAUSE_LASTPRIVATE_CONDITIONAL.
      	(c_omp_predetermined_sharing): Don't return
      	OMP_CLAUSE_DEFAULT_SHARED for const qualified decls.
      	* c-pragma.c (omp_pragmas): Add PRAGMA_OMP_DEPOBJ and
      	PRAGMA_OMP_REQUIRES.
      	* c-pragma.h (enum pragma_kind): Likewise.
      	(enum pragma_omp_clause): Add PRAGMA_OMP_CLAUSE_NONTEMPORAL
      	and PRAGMA_OMP_CLAUSE_{IN,TASK}_REDUCTION.
      gcc/c/
      	* c-parser.c: Include memmode.h.
      	(c_parser_omp_depobj, c_parser_omp_requires): New functions.
      	(c_parser_pragma): Handle PRAGMA_OMP_DEPOBJ and PRAGMA_OMP_REQUIRES.
      	(c_parser_omp_clause_name): Handle nontemporal, in_reduction and
      	task_reduction clauses.
      	(c_parser_omp_variable_list): Handle OMP_CLAUSE_{IN,TASK}_REDUCTION.
      	For OMP_CLAUSE_DEPEND, parse clause operands as either an array
      	section, or lvalue assignment expression.
      	(c_parser_omp_clause_if): Handle cancel and simd modifiers.
      	(c_parser_omp_clause_lastprivate): Parse optional
      	conditional: modifier.
      	(c_parser_omp_clause_hint): Require constant integer expression rather
      	than just integer expression.
      	(c_parser_omp_clause_defaultmap): Parse new kinds of defaultmap
      	clause.
      	(c_parser_omp_clause_reduction): Add IS_OMP and KIND arguments.
      	Parse reduction modifiers.  Pass KIND to c_parser_omp_variable_list.
      	(c_parser_omp_clause_nontemporal, c_parser_omp_iterators): New
      	functions.
      	(c_parser_omp_clause_depend): Parse iterator modifier and handle
      	iterators.  Parse mutexinoutset and depobj kinds.
      	(c_parser_oacc_all_clauses): Adjust c_parser_omp_clause_reduction
      	callers.
      	(c_parser_omp_all_clauses): Likewise.  Handle
      	PRAGMA_OMP_CLAUSE_NONTEMPORAL and
      	PRAGMA_OMP_CLAUSE_{IN,TASK}_REDUCTION.
      	(c_parser_omp_atomic): Parse hint and memory order clauses.  Handle
      	default memory order from requires directive if any.  Adjust
      	c_finish_omp_atomic caller.
      	(c_parser_omp_critical): Allow comma in between (name) and hint clause.
      	(c_parser_omp_flush): Parse flush with memory-order-clause.
      	(c_parser_omp_for_loop): Allow NE_EXPR even in
      	OpenMP loops, adjust c_finish_omp_for caller.
      	(OMP_SIMD_CLAUSE_MASK): Add if and nontemporal clauses.
      	(c_parser_omp_master): Add p_name, mask and cclauses arguments.
      	Allow to be called while parsing combined parallel master.
      	Parse combined master taskloop{, simd}.
      	(c_parser_omp_parallel): Parse combined
      	parallel master{, taskloop{, simd}} constructs.
      	(OMP_TASK_CLAUSE_MASK): Add in_reduction clause.
      	(OMP_TASKGROUP_CLAUSE_MASK): Define.
      	(c_parser_omp_taskgroup): Add LOC argument.  Parse taskgroup clauses.
      	(OMP_TASKWAIT_CLAUSE_MASK): Define.
      	(c_parser_omp_taskwait): Handle taskwait with depend clauses.
      	(c_parser_omp_teams): Force a BIND_EXPR with BLOCK
      	around teams body.  Use SET_EXPR_LOCATION.
      	(c_parser_omp_target_data): Allow target data
      	with only use_device_ptr clauses.
      	(c_parser_omp_target): Use SET_EXPR_LOCATION.  Set
      	OMP_REQUIRES_TARGET_USED bit in omp_requires_mask.
      	(c_parser_omp_requires): New function.
      	(c_finish_taskloop_clauses): New function.
      	(OMP_TASKLOOP_CLAUSE_MASK): Add reduction and in_reduction clauses.
      	(c_parser_omp_taskloop): Use c_finish_taskloop_clauses.  Add forward
      	declaration.  Disallow in_reduction clause when combined with parallel
      	master.
      	(c_parser_omp_construct): Adjust c_parser_omp_master and
      	c_parser_omp_taskgroup callers.
      	* c-typeck.c (c_finish_omp_cancel): Diagnose if clause with modifier
      	other than cancel.
      	(handle_omp_array_sections_1): Handle OMP_CLAUSE_{IN,TASK}_REDUCTION
      	like OMP_CLAUSE_REDUCTION.
      	(handle_omp_array_sections): Likewise.  Call save_expr on array
      	reductions before calling build_index_type.  Handle depend clauses
      	with iterators.
      	(struct c_find_omp_var_s): New type.
      	(c_find_omp_var_r, c_omp_finish_iterators): New functions.
      	(c_finish_omp_clauses): Don't diagnose nonmonotonic clause
      	with static, runtime or auto schedule kinds.  Call save_expr for whole
      	array reduction sizes.  Diagnose reductions with zero sized elements
      	or variable length structures.  Diagnose nogroup clause used with
      	reduction clause(s).  Handle depend clause with
      	OMP_CLAUSE_DEPEND_DEPOBJ.  Diagnose bit-fields.  Require
      	omp_depend_t type for OMP_CLAUSE_DEPEND_DEPOBJ kinds and
      	some different type for other kinds.  Use build_unary_op with
      	ADDR_EXPR and build_indirect_ref instead of c_mark_addressable.
      	Handle depend clauses with iterators.  Remove no longer needed special
      	case that predetermined const qualified vars may be specified in
      	firstprivate clause.  Complain if const qualified vars are mentioned
      	in data-sharing clauses other than firstprivate or shared.  Use
      	error_at with OMP_CLAUSE_LOCATION (c) as first argument instead of
      	error.  Formatting fix.  Handle OMP_CLAUSE_NONTEMPORAL and
      	OMP_CLAUSE_{IN,TASK}_REDUCTION.  Allow any lvalue as
      	OMP_CLAUSE_DEPEND operand (besides array section), adjust diagnostics.
      gcc/cp/
      	* constexpr.c (potential_constant_expression_1): Handle OMP_DEPOBJ.
      	* cp-gimplify.c (cp_genericize_r): Handle
      	OMP_CLAUSE_{IN,TASK}_REDUCTION.
      	(cxx_omp_predetermined_sharing_1): Don't return
      	OMP_CLAUSE_DEFAULT_SHARED for const qualified decls with no mutable
      	member.  Return OMP_CLAUSE_DEFAULT_FIRSTPRIVATE for this pointer.
      	* cp-objcp-common.c (cp_common_init_ts): Handle OMP_DEPOBJ.
      	* cp-tree.def (OMP_DEPOBJ): New tree code.
      	* cp-tree.h (OMP_ATOMIC_DEPENDENT_P): Return true also for first
      	argument being OMP_CLAUSE.
      	(OMP_DEPOBJ_DEPOBJ, OMP_DEPOBJ_CLAUSES): Define.
      	(cp_convert_omp_range_for, cp_finish_omp_range_for): Declare.
      	(finish_omp_atomic): Add LOC, CLAUSES and MO arguments.  Remove
      	SEQ_CST argument.
      	(finish_omp_for_block): Declare.
      	(finish_omp_flush): Add MO argument.
      	(finish_omp_depobj): Declare.
      	* cxx-pretty-print.c (cxx_pretty_printer::statement): Handle
      	OMP_DEPOBJ.
      	* dump.c (cp_dump_tree): Likewise.
      	* lex.c (cxx_init): Likewise.
      	* parser.c: Include memmodel.h.
      	(cp_parser_for): Pass false as new is_omp argument to
      	cp_parser_range_for.
      	(cp_parser_range_for): Add IS_OMP argument, return before finalizing
      	if it is true.
      	(cp_parser_omp_clause_name): Handle nontemporal, in_reduction and
      	task_reduction clauses.
              (cp_parser_omp_var_list_no_open): Handle
      	OMP_CLAUSE_{IN,TASK}_REDUCTION.  For OMP_CLAUSE_DEPEND, parse clause
      	operands as either an array section, or lvalue assignment expression.
      	(cp_parser_omp_clause_if): Handle cancel and simd modifiers.
      	(cp_parser_omp_clause_defaultmap): Parse new kinds of defaultmap
      	clause.
      	(cp_parser_omp_clause_reduction): Add IS_OMP and KIND arguments.
      	Parse reduction modifiers.  Pass KIND to c_parser_omp_variable_list.
      	(cp_parser_omp_clause_lastprivate, cp_parser_omp_iterators): New
      	functions.
      	(cp_parser_omp_clause_depend): Parse iterator modifier and handle
      	iterators.  Parse mutexinoutset and depobj kinds.
      	(cp_parser_oacc_all_clauses): Adjust cp_parser_omp_clause_reduction
      	callers.
      	(cp_parser_omp_all_clauses): Likewise.  Handle
      	PRAGMA_OMP_CLAUSE_NONTEMPORAL and
      	PRAGMA_OMP_CLAUSE_{IN,TASK}_REDUCTION.  Call
      	cp_parser_omp_clause_lastprivate for OpenMP lastprivate clause.
      	(cp_parser_omp_atomic): Pass pragma_tok->location as
      	LOC to finish_omp_atomic.  Parse hint and memory order clauses.
      	Handle default memory order from requires directive if any.  Adjust
      	finish_omp_atomic caller.
      	(cp_parser_omp_critical): Allow comma in between (name) and hint
      	clause.
      	(cp_parser_omp_depobj): New function.
      	(cp_parser_omp_flush): Parse flush with memory-order-clause.
      	(cp_parser_omp_for_cond): Allow NE_EXPR even in OpenMP loops.
      	(cp_convert_omp_range_for, cp_finish_omp_range_for): New functions.
      	(cp_parser_omp_for_loop): Parse C++11 range for loops among omp
      	loops.  Handle OMP_CLAUSE_IN_REDUCTION like OMP_CLAUSE_REDUCTION.
      	(OMP_SIMD_CLAUSE_MASK): Add if and nontemporal clauses.
      	(cp_parser_omp_simd, cp_parser_omp_for): Call keep_next_level before
      	begin_omp_structured_block and call finish_omp_for_block on
      	finish_omp_structured_block result.
      	(cp_parser_omp_master): Add p_name, mask and cclauses arguments.
      	Allow to be called while parsing combined parallel master.
      	Parse combined master taskloop{, simd}.
      	(cp_parser_omp_parallel): Parse combined
      	parallel master{, taskloop{, simd}} constructs.
      	(cp_parser_omp_single): Use SET_EXPR_LOCATION.
      	(OMP_TASK_CLAUSE_MASK): Add in_reduction clause.
      	(OMP_TASKWAIT_CLAUSE_MASK): Define.
      	(cp_parser_omp_taskwait): Handle taskwait with depend clauses.
      	(OMP_TASKGROUP_CLAUSE_MASK): Define.
      	(cp_parser_omp_taskgroup): Parse taskgroup clauses, adjust
      	c_finish_omp_taskgroup caller.
      	(cp_parser_omp_distribute): Call keep_next_level before
      	begin_omp_structured_block and call finish_omp_for_block on
      	finish_omp_structured_block result.
      	(cp_parser_omp_teams): Force a BIND_EXPR with BLOCK around teams
      	body.
      	(cp_parser_omp_target_data): Allow target data with only
      	use_device_ptr clauses.
      	(cp_parser_omp_target): Set OMP_REQUIRES_TARGET_USED bit in
      	omp_requires_mask.
      	(cp_parser_omp_requires): New function.
      	(OMP_TASKLOOP_CLAUSE_MASK): Add reduction and in_reduction clauses.
      	(cp_parser_omp_taskloop): Add forward declaration.  Disallow
      	in_reduction clause when combined with parallel master.  Call
      	keep_next_level before begin_omp_structured_block and call
      	finish_omp_for_block on finish_omp_structured_block result.
      	(cp_parser_omp_construct): Adjust cp_parser_omp_master caller.
      	(cp_parser_pragma): Handle PRAGMA_OMP_DEPOBJ and PRAGMA_OMP_REQUIRES.
      	* pt.c (tsubst_omp_clause_decl): Add iterators_cache argument.
      	Adjust recursive calls.  Handle iterators.
      	(tsubst_omp_clauses): Handle OMP_CLAUSE_{IN,TASK}_REDUCTION and
      	OMP_CLAUSE_NONTEMPORAL.  Adjust tsubst_omp_clause_decl callers.
      	(tsubst_decomp_names):
      	(tsubst_omp_for_iterator): Change orig_declv into a reference.
      	Handle range for loops.  Move orig_declv handling after declv/initv
      	handling.
      	(tsubst_expr): Force a BIND_EXPR with BLOCK around teams body.
      	Adjust finish_omp_atomic caller.  Call keep_next_level before
      	begin_omp_structured_block.  Call cp_finish_omp_range_for for range
      	for loops and use {begin,finish}_omp_structured_block instead of
      	{push,pop}_stmt_list if there are any range for loops.  Call
      	finish_omp_for_block on finish_omp_structured_block result.
      	Handle OMP_DEPOBJ.  Handle taskwait with depend clauses.  For
      	OMP_ATOMIC call tsubst_omp_clauses on clauses if any, adjust
      	finish_omp_atomic caller.  Use OMP_ATOMIC_MEMORY_ORDER rather
      	than OMP_ATOMIC_SEQ_CST.  Handle clauses on OMP_TASKGROUP.
      	(dependent_omp_for_p): Always return true for range for loops if
      	processing_template_decl.  Return true if class type iterator
      	does not have INTEGER_CST increment.
      	* semantics.c: Include memmodel.h.
      	(handle_omp_array_sections_1): Handle OMP_CLAUSE_{IN,TASK}_REDUCTION
      	like OMP_CLAUSE_REDUCTION.
      	(handle_omp_array_sections): Likewise.  Call save_expr on array
      	reductions before calling build_index_type.  Handle depend clauses
      	with iterators.
      	(finish_omp_reduction_clause): Call save_expr for whole array
      	reduction sizes.  Don't mark OMP_CLAUSE_DECL addressable if it has
      	reference type.  Do mark decl_placeholder addressable if needed.
      	Use error_at with OMP_CLAUSE_LOCATION (c) as first argument instead
      	of error.
      	(cp_omp_finish_iterators): New function.
      	(finish_omp_clauses): Don't diagnose nonmonotonic clause with static,
      	runtime or auto schedule kinds.  Diagnose nogroup clause used with
      	reduction clause(s).  Handle depend clause with
      	OMP_CLAUSE_DEPEND_DEPOBJ.  Diagnose bit-fields.  Require
      	omp_depend_t type for OMP_CLAUSE_DEPEND_DEPOBJ kinds and
      	some different type for other kinds.  Use cp_build_addr_expr
      	and cp_build_indirect_ref instead of cxx_mark_addressable.
      	Handle depend clauses with iterators.  Only handle static data members
      	in the special case that const qualified vars may be specified in
      	firstprivate clause.  Complain if const qualified vars without mutable
      	members are mentioned in data-sharing clauses other than firstprivate
      	or shared.  Use error_at with OMP_CLAUSE_LOCATION (c) as first
      	argument instead of error.  Diagnose more than one nontemporal clause
      	refering to the same variable.  Use error_at rather than error for
      	priority and hint clause diagnostics.  Fix pasto for hint clause.
      	Diagnose hint expression that doesn't fold into INTEGER_CST.
      	Diagnose if clause with modifier other than cancel.  Handle
      	OMP_CLAUSE_{IN,TASK}_REDUCTION like OMP_CLAUSE_REDUCTION.  Allow any
      	lvalue as OMP_CLAUSE_DEPEND operand (besides array section), adjust
      	diagnostics.
      	(handle_omp_for_class_iterator): Don't create a new TREE_LIST if one
      	has been created already for range for, just fill TREE_PURPOSE and
      	TREE_VALUE.  Call cp_fully_fold on incr.
      	(finish_omp_for): Don't check cond/incr if cond is global_namespace.
      	Pass to c_omp_check_loop_iv_exprs orig_declv if non-NULL.  Don't
      	use IS_EMPTY_STMT on NULL pre_body.  Adjust c_finish_omp_for caller.
      	(finish_omp_for_block): New function.
      	(finish_omp_atomic): Add LOC argument, pass it through
      	to c_finish_omp_atomic and set it as location of OMP_ATOMIC* trees.
      	Remove SEQ_CST argument.  Add CLAUSES and MO arguments.  Adjust
      	c_finish_omp_atomic caller.  Stick clauses if any into first argument
      	of wrapping OMP_ATOMIC.
      	(finish_omp_depobj): New function.
      	(finish_omp_flush): Add MO argument, if not
      	MEMMODEL_LAST, emit __atomic_thread_fence call with the given value.
      	(finish_omp_cancel): Diagnose if clause with modifier other than
      	cancel.
      gcc/fortran/
      	* trans-openmp.c (gfc_trans_omp_clauses): Use
      	OMP_CLAUSE_DEFAULTMAP_SET_KIND.
      	(gfc_trans_omp_atomic): Set OMP_ATOMIC_MEMORY_ORDER
      	rather than OMP_ATOMIC_SEQ_CST.
      	(gfc_trans_omp_taskgroup): Build OMP_TASKGROUP using
      	make_node instead of build1_loc.
      	* types.def (BT_FN_VOID_BOOL, BT_FN_VOID_SIZE_SIZE_PTR,
      	BT_FN_UINT_UINT_PTR_PTR, BT_FN_UINT_OMPFN_PTR_UINT_UINT,
      	BT_FN_BOOL_UINT_LONGPTR_LONG_LONG_LONGPTR_LONGPTR_PTR_PTR,
      	BT_FN_BOOL_UINT_ULLPTR_LONG_ULL_ULLPTR_ULLPTR_PTR_PTR,
      	BT_FN_BOOL_LONG_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR_PTR_PTR,
      	BT_FN_BOOL_BOOL_ULL_ULL_ULL_LONG_ULL_ULLPTR_ULLPTR_PTR_PTR): New.
      	(BT_FN_VOID_INT_OMPFN_SIZE_PTR_PTR_PTR_UINT_PTR_PTR): Formatting fix.
      gcc/testsuite/
      	* c-c++-common/gomp/atomic-17.c: New test.
      	* c-c++-common/gomp/atomic-18.c: New test.
      	* c-c++-common/gomp/atomic-19.c: New test.
      	* c-c++-common/gomp/atomic-20.c: New test.
      	* c-c++-common/gomp/atomic-21.c: New test.
      	* c-c++-common/gomp/atomic-22.c: New test.
      	* c-c++-common/gomp/clauses-1.c (r2): New variable.
      	(foo): Add ntm argument and test if and nontemporal clauses on
      	constructs with simd.
      	(bar): Put taskloop simd inside of taskgroup with task_reduction,
      	use in_reduction clause instead of reduction.  Add another
      	taskloop simd without nogroup clause, but with reduction clause and
      	a new in_reduction.  Add ntm and i3 arguments.  Test if and
      	nontemporal clauses on constructs with simd.  Change if clauses on
      	some constructs from specific to the particular constituents to one
      	without a modifier.  Add new tests for combined host teams and for
      	new parallel master and {,parallel }master taskloop{, simd} combined
      	constructs.
      	(baz): New function with host teams tests.
      	* gcc.dg/gomp/combined-1.c: Moved to ...
      	* c-c++-common/gomp/combined-1.c: ... here.  Adjust expected library
      	call.
      	* c-c++-common/gomp/combined-2.c: New test.
      	* c-c++-common/gomp/combined-3.c: New test.
      	* c-c++-common/gomp/critical-1.c: New test.
      	* c-c++-common/gomp/critical-2.c: New test.
      	* c-c++-common/gomp/default-1.c: New test.
      	* c-c++-common/gomp/defaultmap-1.c: New test.
      	* c-c++-common/gomp/defaultmap-2.c: New test.
      	* c-c++-common/gomp/defaultmap-3.c: New test.
      	* c-c++-common/gomp/depend-5.c: New test.
      	* c-c++-common/gomp/depend-6.c: New test.
      	* c-c++-common/gomp/depend-iterator-1.c: New test.
      	* c-c++-common/gomp/depend-iterator-2.c: New test.
      	* c-c++-common/gomp/depobj-1.c: New test.
      	* c-c++-common/gomp/flush-1.c: New test.
      	* c-c++-common/gomp/flush-2.c: New test.
      	* c-c++-common/gomp/for-1.c: New test.
      	* c-c++-common/gomp/for-2.c: New test.
      	* c-c++-common/gomp/for-3.c: New test.
      	* c-c++-common/gomp/for-4.c: New test.
      	* c-c++-common/gomp/for-5.c: New test.
      	* c-c++-common/gomp/for-6.c: New test.
      	* c-c++-common/gomp/for-7.c: New test.
      	* c-c++-common/gomp/if-1.c (foo): Add some further tests.
      	* c-c++-common/gomp/if-2.c (foo): Likewise.  Expect slightly different
      	diagnostics wording in one case.
      	* c-c++-common/gomp/if-3.c: New test.
      	* c-c++-common/gomp/master-combined-1.c: New test.
      	* c-c++-common/gomp/master-combined-2.c: New test.
      	* c-c++-common/gomp/nontemporal-1.c: New test.
      	* c-c++-common/gomp/nontemporal-2.c: New test.
      	* c-c++-common/gomp/reduction-task-1.c: New test.
      	* c-c++-common/gomp/reduction-task-2.c: New test.
      	* c-c++-common/gomp/requires-1.c: New test.
      	* c-c++-common/gomp/requires-2.c: New test.
      	* c-c++-common/gomp/requires-3.c: New test.
      	* c-c++-common/gomp/requires-4.c: New test.
      	* c-c++-common/gomp/schedule-modifiers-1.c (bar): Don't expect
      	diagnostics for nonmonotonic modifier with static, runtime or auto
      	schedule kinds.
      	* c-c++-common/gomp/simd7.c: New test.
      	* c-c++-common/gomp/target-data-1.c: New test.
      	* c-c++-common/gomp/taskloop-reduction-1.c: New test.
      	* c-c++-common/gomp/taskwait-depend-1.c: New test.
      	* c-c++-common/gomp/teams-1.c: New test.
      	* c-c++-common/gomp/teams-2.c: New test.
      	* gcc.dg/gomp/appendix-a/a.24.1.c: Update from OpenMP examples.  Add
      	shared(c) clause.
      	* gcc.dg/gomp/atomic-5.c (f1): Add another expected error.
      	* gcc.dg/gomp/clause-1.c: Adjust expected diagnostics for const
      	qualified vars without mutable member no longer being predeterined
      	shared.
      	* gcc.dg/gomp/sharing-1.c: Likewise.
      	* g++.dg/gomp/clause-3.C: Likewise.
      	* g++.dg/gomp/member-2.C: Likewise.
      	* g++.dg/gomp/predetermined-1.C: Likewise.
      	* g++.dg/gomp/private-1.C: Likewise.
      	* g++.dg/gomp/sharing-1.C: Likewise.
      	* g++.dg/gomp/sharing-2.C: Likewise.  Add a few tests with aggregate
      	const static data member without mutable elements.
      	* gcc.dg/gomp/for-4.c: Expected nonmonotonic functions in the dumps.
      	* gcc.dg/gomp/for-5.c: Likewise.
      	* gcc.dg/gomp/for-6.c: Change expected library call.
      	* gcc.dg/gomp/pr39495-2.c (foo): Don't expect errors on !=.
      	* gcc.dg/gomp/reduction-2.c: New test.
      	* gcc.dg/gomp/simd-1.c: New test.
      	* gcc.dg/gomp/teams-1.c: Adjust expected diagnostic lines.
      	* g++.dg/gomp/atomic-18.C: New test.
      	* g++.dg/gomp/atomic-19.C: New test.
      	* g++.dg/gomp/atomic-5.C (f1): Adjust expected lines of read-only
      	variable messages.  Add another expected error.
      	* g++.dg/gomp/critical-3.C: New test.
      	* g++.dg/gomp/depend-iterator-1.C: New test.
      	* g++.dg/gomp/depend-iterator-2.C: New test.
      	* g++.dg/gomp/depobj-1.C: New test.
      	* g++.dg/gomp/doacross-1.C: New test.
      	* g++.dg/gomp/for-21.C: New test.
      	* g++.dg/gomp/for-4.C: Expected nonmonotonic functions in the dumps.
      	* g++.dg/gomp/for-5.C: Likewise.
      	* g++.dg/gomp/for-6.C: Change expected library call.
      	* g++.dg/gomp/loop-4.C: New test.
      	* g++.dg/gomp/pr33372-1.C: Adjust location of the expected
      	diagnostics.
      	* g++.dg/gomp/pr33372-3.C: Likewise.
      	* g++.dg/gomp/pr39495-2.C (foo): Don't expect errors on !=.
      	* g++.dg/gomp/simd-2.C: New test.
      	* g++.dg/gomp/tpl-atomic-2.C: Adjust expected diagnostic lines.
      include/
      	* gomp-constants.h (GOMP_TASK_FLAG_REDUCTION,
      	GOMP_DEPEND_IN, GOMP_DEPEND_OUT, GOMP_DEPEND_INOUT,
      	GOMP_DEPEND_MUTEXINOUTSET): Define.
      libgomp/
      	* affinity.c (gomp_display_affinity_place): New function.
      	* affinity-fmt.c: New file.
      	* alloc.c (gomp_aligned_alloc, gomp_aligned_free): New functions.
      	* config/linux/affinity.c (gomp_display_affinity_place): New function.
      	* config/nvptx/icv-device.c (omp_get_num_teams, omp_get_team_num):
      	Move these functions to ...
      	* config/nvptx/teams.c: ... here.  New file.
      	* config/nvptx/target.c (omp_pause_resource, omp_pause_resource_all):
      	New functions.
      	* config/nvptx/team.c (gomp_team_start, gomp_pause_host): New
      	functions.
      	* configure.ac: Check for aligned_alloc, posix_memalign, memalign
      	and _aligned_malloc.
      	(HAVE_UNAME, HAVE_GETHOSTNAME, HAVE_GETPID): Add new tests.
      	* configure.tgt: Add -DUSING_INITIAL_EXEC_TLS to XCFLAGS for Linux.
      	* env.c (gomp_display_affinity_var, gomp_affinity_format_var,
      	gomp_affinity_format_len): New variables.
      	(parse_schedule): Parse monotonic and nonmonotonic modifiers in
      	OMP_SCHEDULE variable.  Set GFS_MONOTONIC for monotonic schedules.
      	(handle_omp_display_env): Display monotonic/nonmonotonic schedule
      	modifiers.  Display (non-default) chunk sizes.  Print
      	OMP_DISPLAY_AFFINITY and OMP_AFFINITY_FORMAT.
      	(initialize_env): Don't call pthread_attr_setdetachstate.  Handle
      	OMP_DISPLAY_AFFINITY and OMP_AFFINITY_FORMAT env vars.
      	* fortran.c: Include stdio.h and string.h.
      	(omp_pause_resource, omp_pause_resource_all): Add ialias_redirect.
      	(omp_get_schedule_, omp_get_schedule_8_): Mask off GFS_MONOTONIC bit.
      	(omp_set_affinity_format_, omp_get_affinity_format_,
      	omp_display_affinity_, omp_capture_affinity_, omp_pause_resource_,
      	omp_pause_resource_all_): New functions.
      	* icv.c (omp_set_schedule): Mask off omp_sched_monotonic bit in
      	switch.
      	* icv-device.c (omp_get_num_teams, omp_get_team_num): Move these
      	functions to ...
      	* teams.c: ... here.  New file.
      	* libgomp_g.h: Include gstdint.h.
      	(GOMP_loop_nonmonotonic_runtime_start,
      	GOMP_loop_maybe_nonmonotonic_runtime_start, GOMP_loop_start,
      	GOMP_loop_ordered_start, GOMP_loop_nonmonotonic_runtime_next,
      	GOMP_loop_maybe_nonmonotonic_runtime_next, GOMP_loop_doacross_start,
      	GOMP_parallel_loop_nonmonotonic_runtime,
      	GOMP_parallel_loop_maybe_nonmonotonic_runtime,
      	GOMP_loop_ull_nonmonotonic_runtime_start,
      	GOMP_loop_ull_maybe_nonmonotonic_runtime_start, GOMP_loop_ull_start,
      	GOMP_loop_ull_ordered_start, GOMP_loop_ull_nonmonotonic_runtime_next,
      	GOMP_loop_ull_maybe_nonmonotonic_runtime_next,
      	GOMP_loop_ull_doacross_start, GOMP_parallel_reductions,
      	GOMP_taskwait_depend, GOMP_taskgroup_reduction_register,
      	GOMP_taskgroup_reduction_unregister, GOMP_task_reduction_remap,
      	GOMP_workshare_task_reduction_unregister, GOMP_sections2_start,
      	GOMP_teams_reg): Declare.
      	* libgomp.h (GOMP_HAVE_EFFICIENT_ALIGNED_ALLOC): Define unless
      	gomp_aligned_alloc uses fallback implementation.
      	(gomp_aligned_alloc, gomp_aligned_free): Declare.
      	(enum gomp_schedule_type): Add GFS_MONOTONIC.
      	(struct gomp_doacross_work_share): Add extra field.
      	(struct gomp_work_share): Add task_reductions field.
      	(struct gomp_taskgroup): Add workshare and reductions fields.
      	(GOMP_NEEDS_THREAD_HANDLE): Define if needed.
      	(gomp_thread_handle): New typedef.
      	(gomp_display_affinity_place, gomp_set_affinity_format,
      	gomp_display_string, gomp_display_affinity,
      	gomp_display_affinity_thread): Declare.
      	(gomp_doacross_init, gomp_doacross_ull_init): Add size_t argument.
      	(gomp_parallel_reduction_register, gomp_workshare_taskgroup_start,
      	gomp_workshare_task_reduction_register): Declare.
      	(gomp_team_start): Add taskgroup argument.
      	(gomp_pause_host): Declare.
      	(gomp_init_work_share, gomp_work_share_start): Change bool argument
      	to size_t.
      	(gomp_thread_self, gomp_thread_to_pthread_t): New inline functions.
      	* libgomp.map (GOMP_5.0): Export GOMP_loop_start,
      	GOMP_loop_ordered_start, GOMP_loop_doacross_start,
      	GOMP_loop_ull_start, GOMP_loop_ull_ordered_start,
      	GOMP_loop_ull_doacross_start,
      	GOMP_workshare_task_reduction_unregister, GOMP_sections2_start,
      	GOMP_loop_maybe_nonmonotonic_runtime_next,
      	GOMP_loop_maybe_nonmonotonic_runtime_start,
      	GOMP_loop_nonmonotonic_runtime_next,
      	GOMP_loop_nonmonotonic_runtime_start,
      	GOMP_loop_ull_maybe_nonmonotonic_runtime_next,
      	GOMP_loop_ull_maybe_nonmonotonic_runtime_start,
      	GOMP_loop_ull_nonmonotonic_runtime_next,
      	GOMP_loop_ull_nonmonotonic_runtime_start,
      	GOMP_parallel_loop_maybe_nonmonotonic_runtime,
      	GOMP_parallel_loop_nonmonotonic_runtime, GOMP_parallel_reductions,
      	GOMP_taskgroup_reduction_register,
      	GOMP_taskgroup_reduction_unregister, GOMP_task_reduction_remap,
      	GOMP_teams_reg and GOMP_taskwait_depend.
      	(OMP_5.0): Export omp_pause_resource{,_all}{,_},
      	omp_{capture,display}_affinity{,_}, and
      	omp_[gs]et_affinity_format{,_}.
      	* loop.c: Include string.h.
      	(GOMP_loop_runtime_next): Add ialias.
      	(GOMP_taskgroup_reduction_register): Add ialias_redirect.
      	(gomp_loop_static_start, gomp_loop_dynamic_start,
      	gomp_loop_guided_start, gomp_loop_ordered_static_start,
      	gomp_loop_ordered_dynamic_start, gomp_loop_ordered_guided_start,
      	gomp_loop_doacross_static_start, gomp_loop_doacross_dynamic_start,
      	gomp_loop_doacross_guided_start): Adjust gomp_work_share_start
      	or gomp_doacross_init callers.
      	(gomp_adjust_sched, GOMP_loop_start, GOMP_loop_ordered_start,
      	GOMP_loop_doacross_start): New functions.
      	(GOMP_loop_runtime_start, GOMP_loop_ordered_runtime_start,
      	GOMP_loop_doacross_runtime_start, GOMP_parallel_loop_runtime_start):
      	Mask off GFS_MONOTONIC bit.
      	(GOMP_loop_maybe_nonmonotonic_runtime_next,
      	GOMP_loop_maybe_nonmonotonic_runtime_start,
      	GOMP_loop_nonmonotonic_runtime_next,
      	GOMP_loop_nonmonotonic_runtime_start,
      	GOMP_parallel_loop_maybe_nonmonotonic_runtime,
      	GOMP_parallel_loop_nonmonotonic_runtime): New aliases or wrapper
      	functions.
      	(gomp_parallel_loop_start): Pass NULL as taskgroup to
      	gomp_team_start.
      	* loop_ull.c: Include string.h.
      	(GOMP_loop_ull_runtime_next): Add ialias.
      	(GOMP_taskgroup_reduction_register): Add ialias_redirect.
      	(gomp_loop_ull_static_start, gomp_loop_ull_dynamic_start,
      	gomp_loop_ull_guided_start, gomp_loop_ull_ordered_static_start,
      	gomp_loop_ull_ordered_dynamic_start,
      	gomp_loop_ull_ordered_guided_start,
      	gomp_loop_ull_doacross_static_start,
      	gomp_loop_ull_doacross_dynamic_start,
      	gomp_loop_ull_doacross_guided_start): Adjust gomp_work_share_start
      	and gomp_doacross_ull_init callers.
      	(gomp_adjust_sched, GOMP_loop_ull_start, GOMP_loop_ull_ordered_start,
      	GOMP_loop_ull_doacross_start): New functions.
      	(GOMP_loop_ull_runtime_start,
      	GOMP_loop_ull_ordered_runtime_start,
      	GOMP_loop_ull_doacross_runtime_start): Mask off GFS_MONOTONIC bit.
      	(GOMP_loop_ull_maybe_nonmonotonic_runtime_next,
      	GOMP_loop_ull_maybe_nonmonotonic_runtime_start,
      	GOMP_loop_ull_nonmonotonic_runtime_next,
      	GOMP_loop_ull_nonmonotonic_runtime_start): Likewise.
      	* Makefile.am (libgomp_la_SOURCES): Add teams.c and affinity-fmt.c.
      	* omp.h.in (enum omp_sched_t): Add omp_sched_monotonic.
      	(omp_pause_resource_t, omp_depend_t): New typedefs.
      	(enum omp_lock_hint_t): Renamed to ...
      	(enum omp_sync_hint_t): ... this.  Define omp_sync_hint_*
      	enumerators using numbers and omp_lock_hint_* as their aliases.
      	(omp_lock_hint_t): New typedef.  Rename to ...
      	(omp_sync_hint_t): ... this.
      	(omp_init_lock_with_hint, omp_init_nest_lock_with_hint): Use
      	omp_sync_hint_t instead of omp_lock_hint_t.
      	(omp_pause_resource, omp_pause_resource_all, omp_set_affinity_format,
      	omp_get_affinity_format, omp_display_affinity, omp_capture_affinity):
      	Declare.
      	(omp_target_is_present, omp_target_disassociate_ptr):
      	Change first argument from void * to const void *.
      	(omp_target_memcpy, omp_target_memcpy_rect): Change second argument
      	from void * to const void *.
      	(omp_target_associate_ptr): Change first and second arguments from
      	void * to const void *.
      	* omp_lib.f90.in (omp_pause_resource_kind, omp_pause_soft,
      	omp_pause_hard): New parameters.
      	(omp_pause_resource, omp_pause_resource_all, omp_set_affinity_format,
      	omp_get_affinity_format, omp_display_affinity, omp_capture_affinity):
      	New interfaces.
      	* omp_lib.h.in (omp_pause_resource_kind, omp_pause_soft,
      	omp_pause_hard): New parameters.
      	(omp_pause_resource, omp_pause_resource_all, omp_set_affinity_format,
      	omp_get_affinity_format, omp_display_affinity, omp_capture_affinity):
      	New externals.
      	* ordered.c (gomp_doacross_init, gomp_doacross_ull_init): Add
      	EXTRA argument.  If not needed to prepare array, if extra is 0,
      	clear ws->doacross, otherwise allocate just doacross structure and
      	extra payload.  If array is needed, allocate also extra payload.
      	(GOMP_doacross_post, GOMP_doacross_wait, GOMP_doacross_ull_post,
      	GOMP_doacross_ull_wait): Handle doacross->array == NULL like
      	doacross == NULL.
      	* parallel.c (GOMP_parallel_start): Pass NULL as taskgroup to
      	gomp_team_start.
      	(GOMP_parallel): Likewise.  Formatting fix.
      	(GOMP_parallel_reductions): New function.
      	(GOMP_cancellation_point): If taskgroup has workshare
      	flag set, check cancelled of prev taskgroup if any.
      	(GOMP_cancel): If taskgroup has workshare flag set, set cancelled
      	on prev taskgroup if any.
      	* sections.c: Include string.h.
      	(GOMP_taskgroup_reduction_register): Add ialias_redirect.
      	(GOMP_sections_start): Adjust gomp_work_share_start caller.
      	(GOMP_sections2_start): New function.
      	(GOMP_parallel_sections_start, GOMP_parallel_sections):
      	Pass NULL as taskgroup to gomp_team_start.
      	* single.c (GOMP_single_start, GOMP_single_copy_start): Adjust
      	gomp_work_share_start callers.
      	* target.c (GOMP_target_update_ext, GOMP_target_enter_exit_data):
      	If taskgroup has workshare flag set, check cancelled on prev
      	taskgroup if any.  Guard all cancellation tests with
      	gomp_cancel_var test.
      	(omp_target_is_present, omp_target_disassociate_ptr):
      	Change ptr argument from void * to const void *.
      	(omp_target_memcpy): Change src argument from void * to const void *.
      	(omp_target_memcpy_rect): Likewise.
      	(omp_target_memcpy_rect_worker): Likewise.  Use const char * casts
      	instead of char * where needed.
      	(omp_target_associate_ptr): Change host_ptr and device_ptr arguments
      	from void * to const void *.
      	(omp_pause_resource, omp_pause_resource_all): New functions.
      	* task.c (gomp_task_handle_depend): Handle new depend array format
      	in addition to the old.  Handle mutexinoutset kinds the same as
      	inout for now, handle unspecified kinds.
      	(gomp_create_target_task): If taskgroup has workshare flag set, check
      	cancelled on prev taskgroup if any.  Guard all cancellation tests with
      	gomp_cancel_var test.  Handle new depend array format count in
      	addition to the old.
      	(GOMP_task): Likewise.  Adjust function comment.
      	(gomp_task_run_pre): If taskgroup has workshare flag set, check
      	cancelled on prev taskgroup if any.  Guard all cancellation tests with
      	gomp_cancel_var test.
      	(GOMP_taskwait_depend): New function.
      	(gomp_task_maybe_wait_for_dependencies): Handle new depend array
      	format in addition to the old.  Handle mutexinoutset kinds the same as
      	inout for now, handle unspecified kinds.  Fix a function comment typo.
      	(gomp_taskgroup_init): New function.
      	(GOMP_taskgroup_start): Use it.
      	(gomp_reduction_register, gomp_create_artificial_team,
      	GOMP_taskgroup_reduction_register,
      	GOMP_taskgroup_reduction_unregister, GOMP_task_reduction_remap,
      	gomp_parallel_reduction_register,
      	gomp_workshare_task_reduction_register,
      	gomp_workshare_taskgroup_start,
      	GOMP_workshare_task_reduction_unregister): New functions.
      	* taskloop.c (GOMP_taskloop): If taskgroup has workshare flag set,
      	check cancelled on prev taskgroup if any.  Guard all cancellation
      	tests with gomp_cancel_var test.  Handle GOMP_TASK_FLAG_REDUCTION flag
      	by calling GOMP_taskgroup_reduction_register.
      	* team.c (gomp_thread_attr): Remove comment.
      	(struct gomp_thread_start_data): Add handle field.
      	(gomp_thread_start): Call pthread_detach.
      	(gomp_new_team): Adjust gomp_init_work_share caller.
      	(gomp_free_pool_helper): Call pthread_detach.
      	(gomp_team_start): Add taskgroup argument, initialize implicit
      	tasks' taskgroup field to that.  Don't call
      	pthread_attr_setdetachstate.  Handle OMP_DISPLAY_AFFINITY env var.
      	(gomp_team_end): Determine nesting by thr->ts.level != 0
      	rather than thr->ts.team != NULL.
      	(gomp_pause_pool_helper, gomp_pause_host): New functions.
      	* work.c (alloc_work_share): Use gomp_aligned_alloc instead of
      	gomp_malloc if GOMP_HAVE_EFFICIENT_ALIGNED_ALLOC is defined.
      	(gomp_init_work_share): Change ORDERED argument from bool to size_t,
      	if more than 1 allocate also extra payload at the end of array.  Never
      	keep ordered_team_ids NULL, set it to inline_ordered_team_ids instead.
      	(gomp_work_share_start): Change ORDERED argument from bool to size_t,
      	return true instead of ws.
      	* Makefile.in: Regenerated.
      	* configure: Regenerated.
      	* config.h.in: Regenerated.
      	* testsuite/libgomp.c/cancel-for-2.c (foo): Use cancel modifier
      	in some cases.
      	* testsuite/libgomp.c-c++-common/cancel-parallel-1.c: New test.
      	* testsuite/libgomp.c-c++-common/cancel-taskgroup-3.c: New test.
      	* testsuite/libgomp.c-c++-common/depend-iterator-1.c: New test.
      	* testsuite/libgomp.c-c++-common/depend-iterator-2.c: New test.
      	* testsuite/libgomp.c-c++-common/depend-mutexinout-1.c: New test.
      	* testsuite/libgomp.c-c++-common/depend-mutexinout-2.c: New test.
      	* testsuite/libgomp.c-c++-common/depobj-1.c: New test.
      	* testsuite/libgomp.c-c++-common/display-affinity-1.c: New test.
      	* testsuite/libgomp.c-c++-common/for-10.c: New test.
      	* testsuite/libgomp.c-c++-common/for-11.c: New test.
      	* testsuite/libgomp.c-c++-common/for-12.c: New test.
      	* testsuite/libgomp.c-c++-common/for-13.c: New test.
      	* testsuite/libgomp.c-c++-common/for-14.c: New test.
      	* testsuite/libgomp.c-c++-common/for-15.c: New test.
      	* testsuite/libgomp.c-c++-common/for-2.h: If CONDNE macro is defined,
      	define a different N(test), don't define N(f0) to N(f14), but instead
      	define N(f20) to N(f34) using != comparisons.
      	* testsuite/libgomp.c-c++-common/for-7.c: New test.
      	* testsuite/libgomp.c-c++-common/for-8.c: New test.
      	* testsuite/libgomp.c-c++-common/for-9.c: New test.
      	* testsuite/libgomp.c-c++-common/master-combined-1.c: New test.
      	* testsuite/libgomp.c-c++-common/pause-1.c: New test.
      	* testsuite/libgomp.c-c++-common/pause-2.c: New test.
      	* testsuite/libgomp.c-c++-common/pr66199-10.c: New test.
      	* testsuite/libgomp.c-c++-common/pr66199-11.c: New test.
      	* testsuite/libgomp.c-c++-common/pr66199-12.c: New test.
      	* testsuite/libgomp.c-c++-common/pr66199-13.c: New test.
      	* testsuite/libgomp.c-c++-common/pr66199-14.c: New test.
      	* testsuite/libgomp.c-c++-common/simd-1.c: New test.
      	* testsuite/libgomp.c-c++-common/taskloop-reduction-1.c: New test.
      	* testsuite/libgomp.c-c++-common/taskloop-reduction-2.c: New test.
      	* testsuite/libgomp.c-c++-common/taskloop-reduction-3.c: New test.
      	* testsuite/libgomp.c-c++-common/taskloop-reduction-4.c: New test.
      	* testsuite/libgomp.c-c++-common/task-reduction-11.c: New test.
      	* testsuite/libgomp.c-c++-common/task-reduction-12.c: New test.
      	* testsuite/libgomp.c-c++-common/task-reduction-1.c: New test.
      	* testsuite/libgomp.c-c++-common/task-reduction-2.c: New test.
      	* testsuite/libgomp.c-c++-common/task-reduction-3.c: New test.
      	* testsuite/libgomp.c-c++-common/task-reduction-4.c: New test.
      	* testsuite/libgomp.c-c++-common/task-reduction-5.c: New test.
      	* testsuite/libgomp.c-c++-common/task-reduction-6.c: New test.
      	* testsuite/libgomp.c-c++-common/task-reduction-7.c: New test.
      	* testsuite/libgomp.c-c++-common/task-reduction-8.c: New test.
      	* testsuite/libgomp.c-c++-common/task-reduction-9.c: New test.
      	* testsuite/libgomp.c-c++-common/taskwait-depend-1.c: New test.
      	* testsuite/libgomp.c++/depend-1.C: New test.
      	* testsuite/libgomp.c++/depend-iterator-1.C: New test.
      	* testsuite/libgomp.c++/depobj-1.C: New test.
      	* testsuite/libgomp.c++/for-16.C: New test.
      	* testsuite/libgomp.c++/for-21.C: New test.
      	* testsuite/libgomp.c++/for-22.C: New test.
      	* testsuite/libgomp.c++/for-23.C: New test.
      	* testsuite/libgomp.c++/for-24.C: New test.
      	* testsuite/libgomp.c++/for-25.C: New test.
      	* testsuite/libgomp.c++/for-26.C: New test.
      	* testsuite/libgomp.c++/taskloop-reduction-1.C: New test.
      	* testsuite/libgomp.c++/taskloop-reduction-2.C: New test.
      	* testsuite/libgomp.c++/taskloop-reduction-3.C: New test.
      	* testsuite/libgomp.c++/taskloop-reduction-4.C: New test.
      	* testsuite/libgomp.c++/task-reduction-10.C: New test.
      	* testsuite/libgomp.c++/task-reduction-11.C: New test.
      	* testsuite/libgomp.c++/task-reduction-12.C: New test.
      	* testsuite/libgomp.c++/task-reduction-13.C: New test.
      	* testsuite/libgomp.c++/task-reduction-14.C: New test.
      	* testsuite/libgomp.c++/task-reduction-15.C: New test.
      	* testsuite/libgomp.c++/task-reduction-16.C: New test.
      	* testsuite/libgomp.c++/task-reduction-17.C: New test.
      	* testsuite/libgomp.c++/task-reduction-18.C: New test.
      	* testsuite/libgomp.c++/task-reduction-19.C: New test.
      	* testsuite/libgomp.c/task-reduction-1.c: New test.
      	* testsuite/libgomp.c++/task-reduction-1.C: New test.
      	* testsuite/libgomp.c/task-reduction-2.c: New test.
      	* testsuite/libgomp.c++/task-reduction-2.C: New test.
      	* testsuite/libgomp.c++/task-reduction-3.C: New test.
      	* testsuite/libgomp.c++/task-reduction-4.C: New test.
      	* testsuite/libgomp.c++/task-reduction-5.C: New test.
      	* testsuite/libgomp.c++/task-reduction-6.C: New test.
      	* testsuite/libgomp.c++/task-reduction-7.C: New test.
      	* testsuite/libgomp.c++/task-reduction-8.C: New test.
      	* testsuite/libgomp.c++/task-reduction-9.C: New test.
      	* testsuite/libgomp.c/teams-1.c: New test.
      	* testsuite/libgomp.c/teams-2.c: New test.
      	* testsuite/libgomp.c/thread-limit-4.c: New test.
      	* testsuite/libgomp.c/thread-limit-5.c: New test.
      	* testsuite/libgomp.fortran/display-affinity-1.f90: New test.
      
      From-SVN: r265930
      Jakub Jelinek committed
  4. 03 Jan, 2018 1 commit
  5. 01 Jan, 2017 1 commit
  6. 23 Nov, 2016 1 commit
    • OpenMP offloading to NVPTX: libgomp changes · 6103184e
      	* Makefile.am (libgomp_la_SOURCES): Add atomic.c, icv.c, icv-device.c.
      	* Makefile.in. Regenerate.
      	* configure.ac [nvptx*-*-*] (libgomp_use_pthreads): Set and use it...
      	(LIBGOMP_USE_PTHREADS): ...here; new define.
      	* configure: Regenerate.
      	* config.h.in: Likewise.
      	* config/posix/affinity.c: Move to...
      	* affinity.c: ...here (new file).  Guard use of Pthreads-specific
      	interface by LIBGOMP_USE_PTHREADS. 
      	* critical.c: Split out GOMP_atomic_{start,end} into...
      	* atomic.c: ...here (new file).
      	* env.c: Split out ICV definitions into...
      	* icv.c: ...here (new file) and...
      	* icv-device.c: ...here. New file.
      	* config/linux/lock.c (gomp_init_lock_30): Move to generic lock.c.
      	(gomp_destroy_lock_30): Ditto.
      	(gomp_set_lock_30): Ditto.
      	(gomp_unset_lock_30): Ditto.
      	(gomp_test_lock_30): Ditto.
      	(gomp_init_nest_lock_30): Ditto.
      	(gomp_destroy_nest_lock_30): Ditto.
      	(gomp_set_nest_lock_30): Ditto.
      	(gomp_unset_nest_lock_30): Ditto.
      	(gomp_test_nest_lock_30): Ditto.
      	* lock.c: New.
      	* config/nvptx/lock.c: New.
      	* config/nvptx/bar.c: New.
      	* config/nvptx/bar.h: New.
      	* config/nvptx/doacross.h: New.
      	* config/nvptx/error.c: New.
      	* config/nvptx/icv-device.c: New.
      	* config/nvptx/mutex.h: New.
      	* config/nvptx/pool.h: New.
      	* config/nvptx/proc.c: New.
      	* config/nvptx/ptrlock.h: New.
      	* config/nvptx/sem.h: New.
      	* config/nvptx/simple-bar.h: New.
      	* config/nvptx/target.c: New.
      	* config/nvptx/task.c: New.
      	* config/nvptx/team.c: New.
      	* config/nvptx/time.c: New.
      	* config/posix/simple-bar.h: New.
      	* libgomp.h: Guard pthread.h inclusion.  Include simple-bar.h.
      	(gomp_num_teams_var): Declare.
      	(struct gomp_thread_pool): Change threads_dock member to
      	gomp_simple_barrier_t.
      	[__nvptx__] (gomp_thread): New implementation.
      	(gomp_thread_attr): Guard by LIBGOMP_USE_PTHREADS.
      	(gomp_thread_destructor): Ditto.
      	(gomp_init_thread_affinity): Ditto.
      	* team.c: Guard uses of Pthreads-specific interfaces by
      	LIBGOMP_USE_PTHREADS.  Adjust all uses of threads_dock.
      	(gomp_free_thread) [__nvptx__]: Do not call 'free'.
      
      	* config/nvptx/alloc.c: Delete.
      	* config/nvptx/barrier.c: Ditto.
      	* config/nvptx/fortran.c: Ditto.
      	* config/nvptx/iter.c: Ditto.
      	* config/nvptx/iter_ull.c: Ditto.
      	* config/nvptx/loop.c: Ditto.
      	* config/nvptx/loop_ull.c: Ditto.
      	* config/nvptx/ordered.c: Ditto.
      	* config/nvptx/parallel.c: Ditto.
      	* config/nvptx/priority_queue.c: Ditto.
      	* config/nvptx/sections.c: Ditto.
      	* config/nvptx/single.c: Ditto.
      	* config/nvptx/splay-tree.c: Ditto.
      	* config/nvptx/work.c: Ditto.
      
      	* testsuite/libgomp.fortran/fortran.exp (lang_link_flags): Pass
      	-foffload=-lgfortran in addition to -lgfortran.
      	* testsuite/libgomp.oacc-fortran/fortran.exp (lang_link_flags): Ditto.
      
      	* plugin/plugin-nvptx.c: Include <limits.h>.
      	(struct targ_fn_descriptor): Add new fields.
      	(struct ptx_device): Ditto.  Set them...
      	(nvptx_open_device): ...here.
      	(nvptx_adjust_launch_bounds): New.
      	(nvptx_host2dev): Allow NULL 'nvthd'.
      	(nvptx_dev2host): Ditto.
      	(GOMP_OFFLOAD_get_caps): Add GOMP_OFFLOAD_CAP_OPENMP_400.
      	(link_ptx): Adjust log sizes.
      	(nvptx_host2dev): Allow NULL 'nvthd'.
      	(nvptx_dev2host): Ditto.
      	(nvptx_set_clocktick): New.  Use it...
      	(GOMP_OFFLOAD_load_image): ...here.  Set new targ_fn_descriptor
      	fields.
      	(GOMP_OFFLOAD_dev2dev): New.
      	(nvptx_adjust_launch_bounds): New.
      	(nvptx_stacks_size): New.
      	(nvptx_stacks_alloc): New.
      	(nvptx_stacks_free): New.
      	(GOMP_OFFLOAD_run): New.
      	(GOMP_OFFLOAD_async_run): New (stub).
      
      Co-Authored-By: Dmitry Melnik <dm@ispras.ru>
      Co-Authored-By: Jakub Jelinek <jakub@redhat.com>
      
      From-SVN: r242789
      Alexander Monakov committed
  7. 04 Jan, 2016 1 commit
  8. 14 Nov, 2015 1 commit
    • omp-low.c (lower_omp_ordered): Add argument to GOMP_SMD_ORDERED_* internal calls - 0 if... · e4606348
      gcc/
      2015-11-14  Jakub Jelinek  <jakub@redhat.com>
      
      	* omp-low.c (lower_omp_ordered): Add argument to GOMP_SMD_ORDERED_*
      	internal calls - 0 if ordered simd and 1 for ordered threads simd.
      	* tree-vectorizer.c (adjust_simduid_builtins): If GOMP_SIMD_ORDERED_*
      	argument is 1, replace it with GOMP_ordered_* call instead of removing
      	it.
      gcc/c/
      2015-11-14  Jakub Jelinek  <jakub@redhat.com>
      
      	* c-typeck.c (c_finish_omp_clauses): Don't mark
      	GOMP_MAP_FIRSTPRIVATE_POINTER decls addressable.
      gcc/cp/
      2015-11-14  Jakub Jelinek  <jakub@redhat.com>
      
      	* semantics.c (finish_omp_clauses): Don't mark
      	GOMP_MAP_FIRSTPRIVATE_POINTER decls addressable.
      libgomp/
      2015-11-14  Jakub Jelinek  <jakub@redhat.com>
      	    Aldy Hernandez  <aldyh@redhat.com>
      	    Ilya Verbin  <ilya.verbin@intel.com>
      
      	* ordered.c (gomp_doacross_init, GOMP_doacross_post,
      	GOMP_doacross_wait, gomp_doacross_ull_init, GOMP_doacross_ull_post,
      	GOMP_doacross_ull_wait): For GFS_GUIDED don't divide number of
      	iterators or IV by chunk size.
      	* parallel.c (gomp_resolve_num_threads): Don't assume that
      	if thr->ts.team is non-NULL, then pool must be non-NULL.
      	* libgomp-plugin.h (GOMP_PLUGIN_target_task_completion): Declare.
      	* libgomp.map (GOMP_PLUGIN_1.1): New symbol version, export
      	GOMP_PLUGIN_target_task_completion.
      	* Makefile.am (libgomp_la_SOURCES): Add priority_queue.c.
      	* Makefile.in: Regenerate.
      	* libgomp.h: Shuffle prototypes and forward definitions around so
      	priority queues can be defined.
      	(enum gomp_task_kind): Add GOMP_TASK_ASYNC_RUNNING.
      	(enum gomp_target_task_state): New enum.
      	(struct gomp_target_task): Add state, tgt, task and team fields.
      	(gomp_create_target_task): Change return type to bool, add
      	state argument.
      	(gomp_target_task_fn): Change return type to bool.
      	(struct gomp_device_descr): Add async_run_func.
      	(struct gomp_task): Remove children, next_child, prev_child,
      	next_queue, prev_queue, next_taskgroup, prev_taskgroup.
      	Add pnode field.
      	(struct gomp_taskgroup): Remove children.
      	Add taskgroup_queue.
      	(struct gomp_team): Change task_queue type to a priority queue.
      	(splay_compare): Define inline.
      	(priority_queue_offset): New.
      	(priority_node_to_task): New.
      	(task_to_priority_node): New.
      	* oacc-mem.c: Do not include splay-tree.h.
      	* priority_queue.c: New file.
      	* priority_queue.h: New file.
      	* splay-tree.c: Do not include splay-tree.h.
      	(splay_tree_foreach_internal): New.
      	(splay_tree_foreach): New.
      	* splay-tree.h: Become re-entrant if splay_tree_prefix is defined.
      	(splay_tree_callback): Define typedef.
      	* target.c (splay_compare): Move to libgomp.h.
      	(GOMP_target): Don't adjust *thr in any way around running offloaded
      	task.
      	(GOMP_target_ext): Likewise.  Handle target nowait.
      	(GOMP_target_update_ext, GOMP_target_enter_exit_data): Check
      	return value from gomp_create_target_task, if false, fallthrough
      	as if no dependencies exist.
      	(gomp_target_task_fn): Change return type to bool, return true
      	if the task should have another part scheduled later.  Handle
      	target nowait.
      	(gomp_load_plugin_for_device): Initialize async_run.
      	* task.c (gomp_init_task): Initialize children_queue.
      	(gomp_clear_parent_in_list): New.
      	(gomp_clear_parent_in_tree): New.
      	(gomp_clear_parent): Handle priorities.
      	(GOMP_task): Likewise.
      	(priority_queue_move_task_first,
      	gomp_target_task_completion, GOMP_PLUGIN_target_task_completion):
      	New functions.
      	(gomp_create_target_task): Use priority queues.  Change return type
      	to bool, add state argument, return false if for async
      	{{enter,exit} data,update} constructs no dependencies need to be
      	waited for, handle target nowait.  Set task->fn to NULL instead of
      	gomp_target_task_fn.
      	(verify_children_queue): Remove.
      	(priority_list_upgrade_task): New.
      	(priority_queue_upgrade_task): New.
      	(verify_task_queue): Remove.
      	(priority_list_downgrade_task): New.
      	(priority_queue_downgrade_task): New.
      	(gomp_task_run_pre): Use priority queues.
      	Abstract code out to priority_queue_downgrade_task.
      	(gomp_task_run_post_handle_dependers): Use priority queues.
      	(gomp_task_run_post_remove_parent): Likewise.
      	(gomp_task_run_post_remove_taskgroup): Likewise.
      	(gomp_barrier_handle_tasks): Likewise.  Handle target nowait target
      	tasks specially.
      	(GOMP_taskwait): Likewise.
      	(gomp_task_maybe_wait_for_dependencies): Likewise.  Abstract code to
      	priority-queue_upgrade_task.
      	(GOMP_taskgroup_start): Use priority queues.
      	(GOMP_taskgroup_end): Likewise.  Handle target nowait target tasks
      	specially.  If taskgroup is NULL, and thr->ts.level is 0, act as a
      	barrier.
      	* taskloop.c (GOMP_taskloop): Handle priorities.
      	* team.c (gomp_new_team): Call priority_queue_init.
      	(free_team): Call priority_queue_free.
      	(gomp_free_thread): Call gomp_team_end if thr->ts.team is artificial
      	team created for target nowait in implicit parallel region.
      	(gomp_team_start): For nested check, test thr->ts.level instead of
      	thr->ts.team != NULL.
      	* testsuite/libgomp.c/doacross-3.c: New test.
      	* testsuite/libgomp.c/ordered-5.c: New test.
      	* testsuite/libgomp.c/priority.c: New test.
      	* testsuite/libgomp.c/target-31.c: New test.
      	* testsuite/libgomp.c/target-32.c: New test.
      	* testsuite/libgomp.c/target-33.c: New test.
      	* testsuite/libgomp.c/target-34.c: New test.
      liboffloadmic/
      2015-11-14  Ilya Verbin  <ilya.verbin@intel.com>
      
      	* runtime/offload_host.cpp (task_completion_callback): New
      	variable.
      	(offload_proxy_task_completed_ooo): Call task_completion_callback.
      	(__offload_register_task_callback): New function.
      	* runtime/offload_host.h (__offload_register_task_callback): New
      	declaration.
      	* plugin/libgomp-plugin-intelmic.cpp (offload): Add async_data
      	argument, handle async offloading.
      	(register_main_image): Call register_main_image.
      	(GOMP_OFFLOAD_init_device, get_target_table, GOMP_OFFLOAD_alloc,
      	GOMP_OFFLOAD_free, GOMP_OFFLOAD_host2dev, GOMP_OFFLOAD_dev2host,
      	GOMP_OFFLOAD_dev2dev) Adjust offload callers.
      	(GOMP_OFFLOAD_async_run): New function.
      	(GOMP_OFFLOAD_run): Implement using GOMP_OFFLOAD_async_run.
      
      From-SVN: r230381
      Jakub Jelinek committed
  9. 03 Sep, 2015 3 commits
    • [gomp] Add thread attribute customization · 06441dd5
      libgomp/ChangeLog
      
      	* config/posix/pool.h (gomp_adjust_thread_attr): New.
      	* config/rtems/pool.h (gomp_adjust_thread_attr): Likewise.
      	(gomp_thread_pool_reservoir): Add priority member.
      	* confi/rtems/proc.c (allocate_thread_pool_reservoir): Add
      	priority.
      	(parse_thread_pools): Likewise.
      	* team.c (gomp_team_start): Call configuration provided
      	gomp_adjust_thread_attr(). Destroy thread attributes if
      	necessary.
      	* libgomp.texi: Document GOMP_RTEMS_THREAD_POOLS.
      
      From-SVN: r227442
      Sebastian Huber committed
    • [gomp] Thread pool management · 66c59f92
      libgomp/ChangeLog
      
      	* config/posix/pool.h: New.
      	* config/rtems/pool.h: Likewise.
      	* config/rtems/proc.c: Likewise.
      	* libgomp.h (gomp_thread_destructor): Declare.
      	* team.c: Include configuration provided "pool.h".
      	(gomp_get_thread_pool): Define in configuration.
      	(gomp_team_end): Call configuration defined
      	gomp_release_thread_pool().
      
      From-SVN: r227441
      Sebastian Huber committed
    • [gomp] Simplify thread pool initialization · 7892ec67
      libgomp/ChangeLog
      
      	* team.c (gomp_new_thread_pool): Delete and move content to ...
      	(gomp_get_thread_pool): ... new function.  Allocate and
      	initialize thread pool on demand.
      	(get_last_team): Use gomp_get_thread_pool().
      	(gomp_team_start): Delete thread pool initialization.
      
      From-SVN: r227439
      Sebastian Huber committed
  10. 15 Jul, 2015 1 commit
    • [gomp] Recycle last non-nested team if possible · 6dba0113
      libgomp/ChangeLog
      2015-07-15  Sebastian Huber  <sebastian.huber@embedded-brains.de>
      
      	* team.c (get_last_team): New.
      	(gomp_new_team): Recycle last non-nested team if possible.
      	(gomp_team_end): Move team work share list free lock destruction
      	to ...
      	(free_team): ... here.
      
      From-SVN: r225811
      Sebastian Huber committed
  11. 10 Jan, 2015 1 commit
    • libgomp: Now known as the GNU Offloading and Multi Processing Runtime Library. · f1f3453e
      	libgomp/
      	* configure.ac: Rename libgomp from "GNU OpenMP Runtime Library"
      	to "GNU Offloading and Multi Processing Runtime Library".  Change
      	all users.
      	* configure: Regenerate.
      	* libgomp.texi: Update.
      	gcc/
      	* doc/install.texi: Update for libgomp being renamed from "GNU
      	OpenMP Runtime Library" to "GNU Offloading and Multi Processing
      	Runtime Library".
      	* doc/sourcebuild.texi: Likewise.
      	gcc/fortran/
      	* gfortran.texi: Update for libgomp being renamed from "GNU OpenMP
      	Runtime Library" to "GNU Offloading and Multi Processing Runtime
      	Library".
      	* intrinsic.texi: Likewise.
      	libstdc++-v3/
      	* doc/xml/manual/parallel_mode.xml: Update for libgomp being
      	renamed from "GNU OpenMP Runtime Library" to "GNU Offloading and
      	Multi Processing Runtime Library".
      
      Co-Authored-By: David Malcolm <dmalcolm@redhat.com>
      Co-Authored-By: Julian Brown <julian@codesourcery.com>
      
      From-SVN: r219425
      Thomas Schwinge committed
  12. 05 Jan, 2015 1 commit
  13. 10 Dec, 2014 1 commit
    • config.h.in: Regenerate. · f50eecba
      libgomp/
              * config.h.in: Regenerate.
              * configure: Regenerate.
              * configure.ac: Add GCC_CHECK_EMUTLS.
              * libgomp.h: Add check for USE_EMUTLS: this case
              is equal to HAVE_TLS.
              * team.c: Likewise.
      
      From-SVN: r218576
      Varvara Rainchik committed
  14. 02 Jan, 2014 1 commit
  15. 12 Oct, 2013 1 commit
    • re PR libgomp/58691 (OpenMP 4: Surprising results with OMP_PLACES=) · f89163fd
      	PR libgomp/58691
      	* config/linux/proc.c (gomp_cpuset_popcount): Add unused attribute
      	to check variable.
      	(gomp_init_num_threads): Move i variable declaration into
      	#ifdef CPU_ALLOC_SIZE block.
      	* config/linux/affinity.c (gomp_affinity_init_level): Test
      	gomp_places_list_len == 0 rather than gomp_places_list == 0
      	when checking for topology reading error.
      	* team.c (gomp_team_start): Don't handle bind == omp_proc_bind_false.
      	* env.c (parse_affinity): Add ignore argument, if true, don't populate
      	gomp_places_list, only parse env var and always return false.
      	(parse_places_var): Likewise.  Don't check gomp_global_icv.bind_var.
      	(initialize_env): Always parse OMP_PLACES and GOMP_CPU_AFFINITY env
      	vars, default to OMP_PROC_BIND=true if OMP_PROC_BIND wasn't specified
      	and either of these variables were parsed correctly into a places
      	list.
      
      From-SVN: r203479
      Jakub Jelinek committed
  16. 11 Oct, 2013 1 commit
    • target.c: New file. · acf0174b
      libgomp/
      	* target.c: New file.
      	* Makefile.am (libgomp_la_SOURCES): Add target.c.
      	* Makefile.in: Regenerated.
      	* libgomp_g.h (GOMP_task): Add depend argument.
      	(GOMP_barrier_cancel, GOMP_loop_end_cancel,
      	GOMP_sections_end_cancel, GOMP_target, GOMP_target_data,
      	GOMP_target_end_data, GOMP_target_update, GOMP_teams,
      	GOMP_parallel_loop_static, GOMP_parallel_loop_dynamic,
      	GOMP_parallel_loop_guided, GOMP_parallel_loop_runtime,
      	GOMP_parallel, GOMP_cancel, GOMP_cancellation_point,
      	GOMP_taskgroup_start, GOMP_taskgroup_end,
      	GOMP_parallel_sections): New prototypes.
      	* fortran.c (omp_is_initial_device): Add ialias_redirect.
      	(omp_is_initial_device_): New function.
      	(ULP, STR1, STR2, ialias_redirect): Removed.
      	(omp_get_cancellation_, omp_get_proc_bind_, omp_set_default_device_,
      	omp_set_default_device_8_, omp_get_default_device_,
      	omp_get_num_devices_, omp_get_num_teams_, omp_get_team_num_): New
      	functions.
      	* libgomp.map (GOMP_barrier_cancel, GOMP_loop_end_cancel,
      	GOMP_sections_end_cancel, GOMP_target, GOMP_target_data,
      	GOMP_target_end_data, GOMP_target_update, GOMP_teams): Export
      	@@GOMP_4.0.
      	(omp_is_initial_device, omp_is_initial_device_, omp_get_cancellation,
      	omp_get_cancellation_, omp_get_proc_bind, omp_get_proc_bind_,
      	omp_set_default_device, omp_set_default_device_,
      	omp_set_default_device_8_, omp_get_default_device,
      	omp_get_default_device_, omp_get_num_devices, omp_get_num_devices_,
      	omp_get_num_teams, omp_get_num_teams_, omp_get_team_num,
      	omp_get_team_num_): Export @@OMP_4.0.
      	* team.c (struct gomp_thread_start_data): Add place field.
      	(gomp_thread_start): Clear thr->thread_pool and
      	thr->task before returning.  Use gomp_team_barrier_wait_final
      	instead of gomp_team_barrier_wait.  Initialize thr->place.
      	(gomp_new_team): Initialize work_shares_to_free, work_share_cancelled,
      	team_cancelled and task_queued_count fields.
      	(gomp_free_pool_helper): Clear thr->thread_pool and thr->task
      	before calling pthread_exit.
      	(gomp_free_thread): No longer static.  Use
      	gomp_managed_threads_lock instead of gomp_remaining_threads_lock.
      	(gomp_team_start): Add flags argument.  Set
      	thr->thread_pool->threads_busy to nthreads immediately after creating
      	new pool.  Use gomp_managed_threads_lock instead of
      	gomp_remaining_threads_lock.  Handle OpenMP 4.0 affinity.
      	(gomp_team_end): Use gomp_managed_threads_lock instead of
      	gomp_remaining_threads_lock.  Use gomp_team_barrier_wait_final instead
      	of gomp_team_barrier_wait.  If team->team_cancelled, call
      	gomp_fini_worshare on ws chain starting at team->work_shares_to_free
      	rather than thr->ts.work_share.
      	(initialize_team): Don't call gomp_sem_init here.
      	* sections.c (GOMP_parallel_sections_start): Adjust gomp_team_start
      	caller.
      	(GOMP_parallel_sections, GOMP_sections_end_cancel): New functions.
      	* env.c (gomp_global_icv): Add default_device_var, target_data and
      	bind_var initializers.
      	(gomp_cpu_affinity, gomp_cpu_affinity_len): Remove.
      	(gomp_bind_var_list, gomp_bind_var_list_len, gomp_places_list,
      	gomp_places_list_len): New variables.
      	(parse_bind_var, parse_one_place, parse_places_var): New functions.
      	(parse_affinity): Rewritten to construct OMP_PLACES list with unit
      	sized places.
      	(gomp_cancel_var): New global variable.
      	(parse_int): New function.
      	(handle_omp_display_env): New function.
      	(initialize_env): Use it.  Initialize default_device_var.
      	Parse OMP_CANCELLATION env var.  Use parse_bind_var to parse
      	OMP_PROC_BIND instead of parse_boolean.  Use parse_places_var for
      	OMP_PLACES parsing.  Don't call parse_affinity if OMP_PLACES has
      	been successfully parsed (and call gomp_init_affinity in that case).
      	(omp_get_cancellation, omp_get_proc_bind, omp_set_default_device,
      	omp_get_default_device, omp_get_num_devices, omp_get_num_teams,
      	omp_get_team_num, omp_is_initial_device): New functions.
      	* libgomp.h: Include stdlib.h.
      	(ialias_ulp, ialias_str1, ialias_str2, ialias_redirect, ialias_call):
      	Define.
      	(struct target_mem_desc): Forward declare.
      	(struct gomp_task_icv): Add default_device_var, target_data, bind_var
      	and thread_limit_var fields.
      	(gomp_get_num_devices): New prototype.
      	(gomp_cancel_var): New extern decl.
      	(struct gomp_team): Add work_shares_to_free, work_share_cancelled,
      	team_cancelled and task_queued_count fields.  Add comments about
      	task_{,queued_,running_}count.
      	(gomp_cancel_kind): New enum.
      	(gomp_work_share_end_cancel): New prototype.
      	(struct gomp_task): Add next_taskgroup, prev_taskgroup, taskgroup,
      	copy_ctors_done, dependers, depend_hash, depend_count, num_dependees
      	and depend fields.
      	(struct gomp_taskgroup): New type.
      	(struct gomp_task_depend_entry,
      	struct gomp_dependers_vec): New types.
      	(gomp_finish_task): Free depend_hash if non-NULL.
      	(struct gomp_team_state): Add place_partition_off
      	and place_partition_len fields.
      	(gomp_bind_var_list, gomp_bind_var_list_len, gomp_places_list,
      	gomp_places_list_len): New extern decls.
      	(struct gomp_thread): Add place field.
      	(gomp_cpu_affinity, gomp_cpu_affinity_len): Remove.
      	(gomp_init_thread_affinity): Add place argument.
      	(gomp_affinity_alloc, gomp_affinity_init_place, gomp_affinity_add_cpus,
      	gomp_affinity_remove_cpu, gomp_affinity_copy_place,
      	gomp_affinity_same_place, gomp_affinity_finalize_place_list,
      	gomp_affinity_init_level, gomp_affinity_print_place): New
      	prototypes.
      	(gomp_team_start): Add flags argument.
      	(gomp_thread_limit_var, gomp_remaining_threads_count,
      	gomp_remaining_threads_lock): Remove.
      	(gomp_managed_threads_lock): New variable.
      	(struct gomp_thread_pool): Add threads_busy field.
      	(gomp_free_thread): New prototype.
      	* task.c: Include hashtab.h.
      	(hash_entry_type): New typedef.
      	(htab_alloc, htab_free, htab_hash, htab_eq): New inlines.
      	(gomp_init_task): Clear dependers, depend_hash, depend_count,
      	copy_ctors_done and taskgroup fields.
      	(GOMP_task): Add depend argument, handle depend clauses.  If
      	gomp_team_barrier_cancelled or if it's taskgroup has been
      	cancelled, don't queue or start new tasks.  Set copy_ctors_done
      	field if needed.  Initialize taskgroup field.  If copy_ctors_done
      	and already cancelled, don't discard the task.  If taskgroup is
      	non-NULL, enqueue the task into taskgroup queue.  Increment
      	num_children field in taskgroup.  Increment task_queued_count.
      	(gomp_task_run_pre, gomp_task_run_post_remove_parent,
      	gomp_task_run_post_remove_taskgroup): New inline functions.
      	(gomp_task_run_post_handle_depend_hash,
      	gomp_task_run_post_handle_dependers,
      	gomp_task_run_post_handle_depend): New functions.
      	(GOMP_taskwait): Use them.  If more than one new tasks
      	have been queued, wake other threads if needed.
      	(gomp_barrier_handle_tasks): Likewise.  If
      	gomp_team_barrier_cancelled, don't start any new tasks, just free
      	all tasks.
      	(GOMP_taskgroup_start, GOMP_taskgroup_end): New functions.
      	* omp_lib.f90.in
      	(omp_proc_bind_kind, omp_proc_bind_false,
      	omp_proc_bind_true, omp_proc_bind_master, omp_proc_bind_close,
      	omp_proc_bind_spread): New params.
      	(omp_get_cancellation, omp_get_proc_bind, omp_set_default_device,
      	omp_get_default_device, omp_get_num_devices, omp_get_num_teams,
      	omp_get_team_num, omp_is_initial_device): New interfaces.
      	(omp_get_dynamic, omp_get_nested, omp_in_parallel,
      	omp_get_max_threads, omp_get_num_procs, omp_get_num_threads,
      	omp_get_thread_num, omp_get_thread_limit, omp_set_max_active_levels,
      	omp_get_max_active_levels, omp_get_level, omp_get_ancestor_thread_num,
      	omp_get_team_size, omp_get_active_level, omp_in_final): Remove
      	useless use omp_lib_kinds.
      	* omp.h.in (omp_proc_bind_t): New typedef.
      	(omp_get_cancellation, omp_get_proc_bind, omp_set_default_device,
      	omp_get_default_device, omp_get_num_devices, omp_get_num_teams,
      	omp_get_team_num, omp_is_initial_device): New prototypes.
      	* loop.c (gomp_parallel_loop_start): Add flags argument, pass it
      	through to gomp_team_start.
      	(GOMP_parallel_loop_static_start, GOMP_parallel_loop_dynamic_start,
      	GOMP_parallel_loop_guided_start, GOMP_parallel_loop_runtime_start):
      	Adjust gomp_parallel_loop_start callers.
      	(GOMP_parallel_loop_static, GOMP_parallel_loop_dynamic,
      	GOMP_parallel_loop_guided, GOMP_parallel_loop_runtime,
      	GOMP_loop_end_cancel): New functions.
      	(GOMP_parallel_end): Add ialias_redirect.
      	* hashtab.h: New file.
      	* libgomp.texi (Environment Variables): Minor cleanup,
      	update section refs to OpenMP 4.0rc2.
      	(OMP_DISPLAY_ENV, GOMP_SPINCOUNT): Document these
      	environment variables.
      	* work.c (gomp_work_share_end, gomp_work_share_end_nowait): Set
      	team->work_shares_to_free to thr->ts.work_share before calling
      	free_work_share.
      	(gomp_work_share_end_cancel): New function.
      	* config/linux/proc.c: Include errno.h.
      	(gomp_get_cpuset_size, gomp_cpuset_size, gomp_cpusetp): New variables.
      	(gomp_cpuset_popcount): Add cpusetsize argument, use it instead of
      	sizeof (cpu_set_t) to determine number of iterations.  Fix up check
      	extern decl.  Use CPU_COUNT_S if available, or CPU_COUNT if
      	gomp_cpuset_size is sizeof (cpu_set_t).
      	(gomp_init_num_threads): Initialize gomp_cpuset_size,
      	gomp_get_cpuset_size and gomp_cpusetp here, use gomp_cpusetp instead
      	of &cpuset and pass gomp_cpuset_size instead of sizeof (cpu_set_t)
      	to pthread_getaffinity_np.  Free and clear gomp_cpusetp if it didn't
      	contain any logical CPUs.
      	(get_num_procs): Don't call pthread_getaffinity_np if gomp_cpusetp
      	is NULL.  Use gomp_cpusetp instead of &cpuset and pass
      	gomp_get_cpuset_size instead of sizeof (cpu_set_t) to
      	pthread_getaffinity_np.  Check gomp_places_list instead of
      	gomp_cpu_affinity.  Adjust gomp_cpuset_popcount caller.
      	* config/linux/bar.c (gomp_barrier_wait_end,
      	gomp_barrier_wait_last): Use BAR_* defines.
      	(gomp_team_barrier_wait_end): Likewise.  Clear BAR_CANCELLED
      	from state where needed.  Set work_share_cancelled to 0 on last
      	thread.
      	(gomp_team_barrier_wait_final, gomp_team_barrier_wait_cancel_end,
      	gomp_team_barrier_wait_cancel, gomp_team_barrier_cancel): New
      	functions.
      	* config/linux/proc.h (gomp_cpuset_popcount): Add attribute_hidden.
      	Add cpusetsize argument.
      	(gomp_cpuset_size, gomp_cpusetp): Declare.
      	* config/linux/affinity.c: Include errno.h, stdio.h and string.h.
      	(affinity_counter): Remove.
      	(CPU_ISSET_S, CPU_ZERO_S, CPU_SET_S, CPU_CLR_S): Define
      	if CPU_ALLOC_SIZE isn't defined.
      	(gomp_init_affinity): Rewritten, if gomp_places_list is NULL, try
      	silently create OMP_PLACES=threads, if it is non-NULL afterwards,
      	bind current thread to the first place.
      	(gomp_init_thread_affinity): Rewritten.  Add place argument, just
      	pthread_setaffinity_np to gomp_places_list[place].
      	(gomp_affinity_alloc, gomp_affinity_init_place, gomp_affinity_add_cpus,
      	gomp_affinity_remove_cpu, gomp_affinity_copy_place,
      	gomp_affinity_same_place, gomp_affinity_finalize_place_list,
      	gomp_affinity_init_level, gomp_affinity_print_place): New functions.
      	* config/linux/bar.h (BAR_TASK_PENDING, BAR_WAS_LAST,
      	BAR_WAITING_FOR_TASK, BAR_INCR, BAR_CANCELLED): Define.
      	(gomp_barrier_t): Add awaited_final field.
      	(gomp_barrier_init): Initialize awaited_final field.
      	(gomp_team_barrier_wait_final, gomp_team_barrier_wait_cancel,
      	gomp_team_barrier_wait_cancel_end, gomp_team_barrier_cancel): New
      	prototypes.
      	(gomp_barrier_wait_start): Preserve BAR_CANCELLED bit.  Use BAR_*
      	defines.
      	(gomp_barrier_wait_cancel_start, gomp_team_barrier_wait_final_start,
      	gomp_team_barrier_cancelled): New inline functions.
      	(gomp_barrier_last_thread,
      	gomp_team_barrier_set_task_pending,
      	gomp_team_barrier_clear_task_pending,
      	gomp_team_barrier_set_waiting_for_tasks,
      	gomp_team_barrier_waiting_for_tasks,
      	gomp_team_barrier_done): Use BAR_* defines.
      	* config/posix/bar.c (gomp_barrier_init): Clear cancellable field.
      	(gomp_barrier_wait_end): Use BAR_* defines.
      	(gomp_team_barrier_wait_end): Clear BAR_CANCELLED from state.
      	Set work_share_cancelled to 0 on last thread, use __atomic_load_n.
      	Use BAR_* defines.
      	(gomp_team_barrier_wait_cancel_end, gomp_team_barrier_wait_cancel,
      	gomp_team_barrier_cancel): New functions.
      	* config/posix/affinity.c (gomp_init_thread_affinity): Add place
      	argument.
      	(gomp_affinity_alloc, gomp_affinity_init_place, gomp_affinity_add_cpus,
      	gomp_affinity_remove_cpu, gomp_affinity_copy_place,
      	gomp_affinity_same_place, gomp_affinity_finalize_place_list,
      	gomp_affinity_init_level, gomp_affinity_print_place): New stubs.
      	* config/posix/bar.h (BAR_TASK_PENDING, BAR_WAS_LAST,
      	BAR_WAITING_FOR_TASK, BAR_INCR, BAR_CANCELLED): Define.
      	(gomp_barrier_t): Add cancellable field.
      	(gomp_team_barrier_wait_cancel, gomp_team_barrier_wait_cancel_end,
      	gomp_team_barrier_cancel): New prototypes.
      	(gomp_barrier_wait_start): Preserve BAR_CANCELLED bit.
      	(gomp_barrier_wait_cancel_start, gomp_team_barrier_wait_final,
      	gomp_team_barrier_cancelled): New inline functions.
      	(gomp_barrier_wait_start, gomp_barrier_last_thread,
      	gomp_team_barrier_set_task_pending,
      	gomp_team_barrier_clear_task_pending,
      	gomp_team_barrier_set_waiting_for_tasks,
      	gomp_team_barrier_waiting_for_tasks,
      	gomp_team_barrier_done): Use BAR_* defines.
      	* barrier.c (GOMP_barrier_cancel): New function.
      	* omp_lib.h.in (omp_proc_bind_kind, omp_proc_bind_false,
      	omp_proc_bind_true, omp_proc_bind_master, omp_proc_bind_close,
      	omp_proc_bind_spread): New params.
      	(omp_get_cancellation, omp_get_proc_bind, omp_set_default_device,
      	omp_get_default_device, omp_get_num_devices, omp_get_num_teams,
      	omp_get_team_num, omp_is_initial_device): New externals.
      	* parallel.c (GOMP_parallel, GOMP_cancel, GOMP_cancellation_point):
      	New functions.
      	(gomp_resolve_num_threads): Adjust for thread_limit now being in
      	icv->thread_limit_var.  Use UINT_MAX instead of ULONG_MAX as
      	infinity.  If not nested, just return minimum of max_num_threads
      	and icv->thread_limit_var and if thr->thread_pool, set threads_busy
      	to the returned value.  Otherwise, don't update atomically
      	gomp_remaining_threads_count, but instead thr->thread_pool->threads_busy.
      	(GOMP_parallel_end): Adjust for thread_limit now being in
      	icv->thread_limit_var.  Use UINT_MAX instead of ULONG_MAX as
      	infinity.  Adjust threads_busy in the pool rather than
      	gomp_remaining_threads_count.  Remember team->nthreads and call
      	gomp_team_end before adjusting threads_busy, if not nested
      	afterwards, just set it to 1 non-atomically.  Add ialias.
      	(GOMP_parallel_start): Adjust gomp_team_start caller.
      	* testsuite/libgomp.c/atomic-14.c: Add parens to make it valid.
      	* testsuite/libgomp.c/affinity-1.c: New test.
      	* testsuite/libgomp.c/atomic-15.c: New test.
      	* testsuite/libgomp.c/atomic-16.c: New test.
      	* testsuite/libgomp.c/atomic-17.c: New test.
      	* testsuite/libgomp.c/cancel-for-1.c: New test.
      	* testsuite/libgomp.c/cancel-for-2.c: New test.
      	* testsuite/libgomp.c/cancel-parallel-1.c: New test.
      	* testsuite/libgomp.c/cancel-parallel-2.c: New test.
      	* testsuite/libgomp.c/cancel-parallel-3.c: New test.
      	* testsuite/libgomp.c/cancel-sections-1.c: New test.
      	* testsuite/libgomp.c/cancel-taskgroup-1.c: New test.
      	* testsuite/libgomp.c/cancel-taskgroup-2.c: New test.
      	* testsuite/libgomp.c/depend-1.c: New test.
      	* testsuite/libgomp.c/depend-2.c: New test.
      	* testsuite/libgomp.c/depend-3.c: New test.
      	* testsuite/libgomp.c/depend-4.c: New test.
      	* testsuite/libgomp.c/for-1.c: New test.
      	* testsuite/libgomp.c/for-1.h: New file.
      	* testsuite/libgomp.c/for-2.c: New test.
      	* testsuite/libgomp.c/for-2.h: New file.
      	* testsuite/libgomp.c/for-3.c: New test.
      	* testsuite/libgomp.c/pr58392.c: New test.
      	* testsuite/libgomp.c/simd-1.c: New test.
      	* testsuite/libgomp.c/simd-2.c: New test.
      	* testsuite/libgomp.c/simd-3.c: New test.
      	* testsuite/libgomp.c/simd-4.c: New test.
      	* testsuite/libgomp.c/simd-5.c: New test.
      	* testsuite/libgomp.c/simd-6.c: New test.
      	* testsuite/libgomp.c/target-1.c: New test.
      	* testsuite/libgomp.c/target-2.c: New test.
      	* testsuite/libgomp.c/target-3.c: New test.
      	* testsuite/libgomp.c/target-4.c: New test.
      	* testsuite/libgomp.c/target-5.c: New test.
      	* testsuite/libgomp.c/target-6.c: New test.
      	* testsuite/libgomp.c/target-7.c: New test.
      	* testsuite/libgomp.c/taskgroup-1.c: New test.
      	* testsuite/libgomp.c/thread-limit-1.c: New test.
      	* testsuite/libgomp.c/thread-limit-2.c: New test.
      	* testsuite/libgomp.c/thread-limit-3.c: New test.
      	* testsuite/libgomp.c/udr-1.c: New test.
      	* testsuite/libgomp.c/udr-2.c: New test.
      	* testsuite/libgomp.c/udr-3.c: New test.
      	* testsuite/libgomp.c++/affinity-1.C: New test.
      	* testsuite/libgomp.c++/atomic-10.C: New test.
      	* 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++/atomic-15.C: New test.
      	* testsuite/libgomp.c++/cancel-for-1.C: New test.
      	* testsuite/libgomp.c++/cancel-for-2.C: New test.
      	* testsuite/libgomp.c++/cancel-parallel-1.C: New test.
      	* testsuite/libgomp.c++/cancel-parallel-2.C: New test.
      	* testsuite/libgomp.c++/cancel-parallel-3.C: New test.
      	* testsuite/libgomp.c++/cancel-sections-1.C: New test.
      	* testsuite/libgomp.c++/cancel-taskgroup-1.C: New test.
      	* testsuite/libgomp.c++/cancel-taskgroup-2.C: New test.
      	* testsuite/libgomp.c++/cancel-taskgroup-3.C: New test.
      	* testsuite/libgomp.c++/cancel-test.h: New file.
      	* testsuite/libgomp.c++/for-9.C: New test.
      	* testsuite/libgomp.c++/for-10.C: New test.
      	* testsuite/libgomp.c++/for-11.C: New test.
      	* testsuite/libgomp.c++/simd-1.C: New test.
      	* testsuite/libgomp.c++/simd-2.C: New test.
      	* testsuite/libgomp.c++/simd-3.C: New test.
      	* testsuite/libgomp.c++/simd-4.C: New test.
      	* testsuite/libgomp.c++/simd-5.C: New test.
      	* testsuite/libgomp.c++/simd-6.C: New test.
      	* testsuite/libgomp.c++/simd-7.C: New test.
      	* testsuite/libgomp.c++/simd-8.C: New test.
      	* testsuite/libgomp.c++/target-1.C: New test.
      	* testsuite/libgomp.c++/target-2.C: New test.
      	* testsuite/libgomp.c++/target-2-aux.cc: New file.
      	* testsuite/libgomp.c++/target-3.C: New test.
      	* testsuite/libgomp.c++/taskgroup-1.C: New test.
      	* testsuite/libgomp.c++/udr-1.C: New test.
      	* testsuite/libgomp.c++/udr-2.C: New test.
      	* testsuite/libgomp.c++/udr-3.C: New test.
      	* testsuite/libgomp.c++/udr-4.C: New test.
      	* testsuite/libgomp.c++/udr-5.C: New test.
      	* testsuite/libgomp.c++/udr-6.C: New test.
      	* testsuite/libgomp.c++/udr-7.C: New test.
      	* testsuite/libgomp.c++/udr-8.C: New test.
      	* testsuite/libgomp.c++/udr-9.C: New test.
      gcc/
      	* tree-pretty-print.c (dump_omp_clause): Handle OMP_CLAUSE__LOOPTEMP_
      	and new OpenMP 4.0 clauses, handle UDR OMP_CLAUSE_REDUCTION,
      	formatting fixes, use pp_colon instead of pp_character (..., ':'),
      	similarly pp_right_paren.
      	(dump_generic_node): Handle OMP_DISTRIBUTE, OMP_TEAMS,
      	OMP_TARGET_DATA, OMP_TARGET, OMP_TARGET_UPDATE, OMP_TASKGROUP,
      	allow OMP_FOR_INIT to be NULL, handle OMP_ATOMIC_SEQ_CST.
      	* tree.c (omp_clause_num_ops, omp_clause_code_name): Add OpenMP 4.0
      	clauses.
      	(omp_declare_simd_clauses_equal,
      	omp_remove_redundant_declare_simd_attrs): New functions.
      	(attribute_value_equal): Use omp_declare_simd_clauses_equal.
      	(walk_tree_1): Handle new OpenMP 4.0 clauses.
      	* tree.h (OMP_LOOP_CHECK): Define.
      	(OMP_FOR_BODY, OMP_FOR_CLAUSES, OMP_FOR_INIT, OMP_FOR_COND,
      	OMP_FOR_INCR, OMP_FOR_PRE_BODY): Use it.
      	(OMP_TASKGROUP_BODY, OMP_TEAMS_BODY, OMP_TEAMS_CLAUSES,
      	OMP_TARGET_DATA_BODY, OMP_TARGET_DATA_CLAUSES, OMP_TARGET_BODY,
      	OMP_TARGET_CLAUSES, OMP_TARGET_UPDATE_CLAUSES, OMP_CLAUSE_SIZE,
      	OMP_ATOMIC_SEQ_CST, OMP_CLAUSE_DEPEND_KIND, OMP_CLAUSE_MAP_KIND,
      	OMP_CLAUSE_MAP_ZERO_BIAS_ARRAY_SECTION, OMP_CLAUSE_PROC_BIND_KIND,
      	OMP_CLAUSE_REDUCTION_OMP_ORIG_REF, OMP_CLAUSE_ALIGNED_ALIGNMENT,
      	OMP_CLAUSE_NUM_TEAMS_EXPR, OMP_CLAUSE_THREAD_LIMIT_EXPR,
      	OMP_CLAUSE_DEVICE_ID, OMP_CLAUSE_DIST_SCHEDULE_CHUNK_EXPR,
      	OMP_CLAUSE_SIMDLEN_EXPR): Define.
      	(OMP_CLAUSE_DECL): Change range up to OMP_CLAUSE__LOOPTEMP_.
      	(omp_remove_redundant_declare_simd_attrs): New prototype.
      	* gimple.def (GIMPLE_OMP_TASKGROUP, GIMPLE_OMP_TARGET,
      	GIMPLE_OMP_TEAMS): New codes.
      	(GIMPLE_OMP_RETURN): Use GSS_OMP_ATOMIC_STORE instead of GSS_BASE.
      	* omp-low.c (struct omp_context): Add cancel_label and cancellable
      	fields.
      	(target_nesting_level): New variable.
      	(extract_omp_for_data): Handle GF_OMP_FOR_KIND_DISTRIBUTE and
      	OMP_CLAUSE_DIST_SCHEDULE.  Don't fallback to library implementation
      	for collapse > 1 static schedule unless ordered.
      	(get_ws_args_for): Add par_stmt argument.  Handle combined loops.
      	(determine_parallel_type): Adjust get_ws_args_for caller.
      	(install_var_field): Handle mask & 4 for double indirection.
      	(scan_sharing_clauses): Ignore shared clause on teams construct.
      	Handle OMP_CLAUSE__LOOPTEMP_ and new OpenMP 4.0 clauses.
      	(create_omp_child_function): If inside target or declare target
      	constructs, set "omp declare target" attribute on the child
      	function.
      	(find_combined_for): New function.
      	(scan_omp_parallel): Handle combined loops.
      	(scan_omp_target, scan_omp_teams): New functions.
      	(check_omp_nesting_restrictions): Check new OpenMP 4.0 nesting
      	restrictions and set ctx->cancellable for cancellable constructs.
      	(scan_omp_1_stmt): Call check_omp_nesting_restrictions also on
      	selected builtin calls.  Handle GIMPLE_OMP_TASKGROUP,
      	GIMPLE_OMP_TARGET, GIMPLE_OMP_TEAMS.
      	(build_omp_barrier): Add lhs argument, return gimple rather than
      	tree.
      	(omp_clause_aligned_alignment): New function.
      	(lower_rec_simd_input_clauses): Only call SET_DECL_VALUE_EXPR
      	on decls.
      	(lower_rec_input_clauses): Add FD argument.  Ignore shared clauses
      	on teams constructs.  Handle user defined reductions and new
      	OpenMP 4.0 clauses.
      	(lower_reduction_clauses): Don't set placeholder to address of ref
      	if it has already the right type.
      	(lower_send_clauses): Handle OMP_CLAUSE__LOOPTEMP_.
      	(expand_parallel_call): Use the new non-_start suffixed builtins,
      	handle OMP_CLAUSE_PROC_BIND, don't call the outlined function
      	and GOMP_parallel_end after the call.
      	(expand_task_call): Handle OMP_CLAUSE_DEPEND.
      	(expand_omp_for_init_counts): Handle combined loops.
      	(expand_omp_for_init_vars): Add inner_stmt argument, handle combined
      	loops.
      	(expand_omp_for_generic): Likewise.  Use GOMP_loop_end_cancel at the
      	end of cancellable loops.
      	(expand_omp_for_static_nochunk, expand_omp_for_static_chunk):
      	Likewise.  Handle collapse > 1 loops.
      	(expand_omp_simd): Handle combined loops.
      	(expand_omp_for): Add inner_stmt argument, adjust callers of
      	expand_omp_for* functions, use expand_omp_for_static*chunk even
      	for collapse > 1 unless ordered.
      	(expand_omp_sections): Use GOMP_sections_end_cancel at the end
      	of cancellable sections.
      	(expand_omp_single): Remove need_barrier variable, just rely on
      	gimple_omp_return_nowait_p.  Adjust build_omp_barrier caller.
      	(expand_omp_synch): Allow GIMPLE_OMP_TASKGROUP and GIMPLE_OMP_TEAMS.
      	(expand_omp_atomic_load, expand_omp_atomic_store,
      	expand_omp_atomic_fetch_op): Handle gimple_omp_atomic_seq_cst_p.
      	(expand_omp_target): New function.
      	(expand_omp): Handle combined loops.  Handle GIMPLE_OMP_TASKGROUP,
      	GIMPLE_OMP_TEAMS, GIMPLE_OMP_TARGET.
      	(build_omp_regions_1): Immediately close region for
      	GF_OMP_TARGET_KIND_UPDATE.
      	(maybe_add_implicit_barrier_cancel): New function.
      	(lower_omp_sections): Adjust lower_rec_input_clauses caller.  Handle
      	cancellation.
      	(lower_omp_single): Likewise.  Add clobber after the barrier.
      	(lower_omp_taskgroup): New function.
      	(lower_omp_for): Handle combined loops.  Adjust
      	lower_rec_input_clauses caller.  Handle cancellation.
      	(lower_depend_clauses): New function.
      	(lower_omp_taskreg): Lower depend clauses.  Adjust
      	lower_rec_input_clauses caller.  Add clobber after the call.  Handle
      	cancellation.
      	(lower_omp_target, lower_omp_teams): New functions.
      	(lower_omp_1): Handle cancellation.  Handle GIMPLE_OMP_TASKGROUP,
      	GIMPLE_OMP_TARGET, GIMPLE_OMP_TEAMS and GOMP_barrier, GOMP_cancel
      	and GOMP_cancellation_point calls.
      	(lower_omp): Fold stmts inside of target region.
      	(diagnose_sb_1, diagnose_sb_2): Handle GIMPLE_OMP_TASKGROUP,
      	GIMPLE_OMP_TARGET and GIMPLE_OMP_TEAMS.
      	* builtin-types.def (DEF_FUNCTION_TYPE_8): Document.
      	(BT_FN_VOID_OMPFN_PTR_UINT,
      	BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG,
      	BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
      	BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT): Remove.
      	(BT_FN_VOID_OMPFN_PTR_UINT_UINT_UINT,
      	BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_UINT,
      	BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT,
      	BT_FN_BOOL_INT, BT_FN_BOOL_INT_BOOL, BT_FN_VOID_UINT_UINT,
      	BT_FN_VOID_INT_PTR_SIZE_PTR_PTR_PTR,
      	BT_FN_VOID_INT_OMPFN_PTR_SIZE_PTR_PTR_PTR,
      	BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT_PTR): New.
      	* tree-ssa-alias.c (ref_maybe_used_by_call_p_1,
      	call_may_clobber_ref_p_1): Handle BUILT_IN_GOMP_BARRIER_CANCEL,
      	BUILT_IN_GOMP_TASKGROUP_END, BUILT_IN_GOMP_LOOP_END_CANCEL,
      	BUILT_IN_GOMP_SECTIONS_END_CANCEL.  Don't handle
      	BUILT_IN_GOMP_PARALLEL_END.
      	* gimple-low.c (lower_stmt): Handle GIMPLE_OMP_TASKGROUP,
      	GIMPLE_OMP_TARGET and GIMPLE_OMP_TEAMS.
      	* gimple-pretty-print.c (dump_gimple_omp_for): Handle
      	GF_OMP_FOR_KIND_DISTRIBUTE.
      	(dump_gimple_omp_target, dump_gimple_omp_teams): New functions.
      	(dump_gimple_omp_block): Handle GIMPLE_OMP_TASKGROUP.
      	(dump_gimple_omp_return): Print lhs if it has any.
      	(dump_gimple_omp_atomic_load, dump_gimple_omp_atomic_store): Handle
      	gimple_omp_atomic_seq_cst_p.
      	(pp_gimple_stmt_1): Handle GIMPLE_OMP_TASKGROUP, GIMPLE_OMP_TARGET
      	and GIMPLE_OMP_TEAMS.
      	* langhooks.c (lhd_omp_mappable_type): New function.
      	* tree-vectorizer.c (struct simd_array_to_simduid): Fix up comment.
      	* langhooks.h (struct lang_hooks_for_types): Add omp_mappable_type
      	hook.
      	* gimplify.c (enum gimplify_omp_var_data): Add GOVD_MAP,
      	GOVD_ALIGNED and GOVD_MAP_TO_ONLY.
      	(enum omp_region_type): Add ORT_TEAMS, ORT_TARGET_DATA and
      	ORT_TARGET.
      	(struct gimplify_omp_ctx): Add combined_loop field.
      	(gimplify_call_expr, gimplify_modify_expr): Don't call fold_stmt
      	on stmts inside of target region.
      	(is_gimple_stmt): Return true for OMP_DISTRIBUTE and OMP_TASKGROUP.
      	(omp_firstprivatize_variable): Handle GOVD_MAP, GOVD_ALIGNED,
      	ORT_TARGET and ORT_TARGET_DATA.
      	(omp_add_variable): Avoid checks on readding var for GOVD_ALIGNED.
      	Handle GOVD_MAP.
      	(omp_notice_threadprivate_variable): Complain about threadprivate
      	variables in target region.
      	(omp_notice_variable): Complain about vars with non-mappable type
      	in target region.  Handle ORT_TEAMS, ORT_TARGET and ORT_TARGET_DATA.
      	(omp_check_private): Ignore ORT_TARGET* regions.
      	(gimplify_scan_omp_clauses, gimplify_adjust_omp_clauses_1,
      	gimplify_adjust_omp_clauses): Handle new OpenMP 4.0 clauses.
      	(find_combined_omp_for): New function.
      	(gimplify_omp_for): Handle gimplification of combined loops.
      	(gimplify_omp_workshare): Gimplify also OMP_TARGET, OMP_TARGET_DATA,
      	OMP_TEAMS.
      	(gimplify_omp_target_update): New function.
      	(gimplify_omp_atomic): Handle OMP_ATOMIC_SEQ_CST.
      	(gimplify_expr): Handle OMP_DISTRIBUTE, OMP_TARGET, OMP_TARGET_DATA,
      	OMP_TARGET_UPDATE, OMP_TEAMS, OMP_TASKGROUP.
      	(gimplify_body): If fndecl has "omp declare target" attribute, add
      	implicit ORT_TARGET context around it.
      	* tree.def (OMP_DISTRIBUTE, OMP_TEAMS, OMP_TARGET_DATA, OMP_TARGET,
      	OMP_TASKGROUP, OMP_TARGET_UPDATE): New tree codes.
      	* tree-nested.c (convert_nonlocal_reference_stmt,
      	convert_local_reference_stmt, convert_gimple_call): Handle
      	GIMPLE_OMP_TARGET, GIMPLE_OMP_TEAMS and GIMPLE_OMP_TASKGROUP.
      	* omp-builtins.def (BUILT_IN_GOMP_TASK): Use
      	BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT_PTR
      	instead of BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT.
      	(BUILT_IN_GOMP_TARGET, BUILT_IN_GOMP_TARGET_DATA,
      	BUILT_IN_GOMP_TARGET_END_DATA, BUILT_IN_GOMP_TARGET_UPDATE,
      	BUILT_IN_GOMP_TEAMS, BUILT_IN_BARRIER_CANCEL,
      	BUILT_IN_GOMP_LOOP_END_CANCEL,
      	BUILT_IN_GOMP_SECTIONS_END_CANCEL, BUILT_IN_OMP_GET_TEAM_NUM,
      	BUILT_IN_OMP_GET_NUM_TEAMS, BUILT_IN_GOMP_TASKGROUP_START,
      	BUILT_IN_GOMP_TASKGROUP_END, BUILT_IN_GOMP_PARALLEL_LOOP_STATIC,
      	BUILT_IN_GOMP_PARALLEL_LOOP_DYNAMIC,
      	BUILT_IN_GOMP_PARALLEL_LOOP_GUIDED,
      	BUILT_IN_GOMP_PARALLEL_LOOP_RUNTIME, BUILT_IN_GOMP_PARALLEL,
      	BUILT_IN_GOMP_PARALLEL_SECTIONS, BUILT_IN_GOMP_CANCEL,
      	BUILT_IN_GOMP_CANCELLATION_POINT): New built-ins.
      	(BUILT_IN_GOMP_PARALLEL_LOOP_STATIC_START,
      	BUILT_IN_GOMP_PARALLEL_LOOP_DYNAMIC_START,
      	BUILT_IN_GOMP_PARALLEL_LOOP_GUIDED_START,
      	BUILT_IN_GOMP_PARALLEL_LOOP_RUNTIME_START,
      	BUILT_IN_GOMP_PARALLEL_START, BUILT_IN_GOMP_PARALLEL_END,
      	BUILT_IN_GOMP_PARALLEL_SECTIONS_START): Remove.
      	* tree-inline.c (remap_gimple_stmt, estimate_num_insns):
      	Handle GIMPLE_OMP_TARGET, GIMPLE_OMP_TEAMS and GIMPLE_OMP_TASKGROUP.
      	* gimple.c (gimple_build_omp_taskgroup, gimple_build_omp_target,
      	gimple_build_omp_teams): New functions.
      	(walk_gimple_op): Handle GIMPLE_OMP_TARGET, GIMPLE_OMP_TEAMS and
      	GIMPLE_OMP_TASKGROUP.  Walk optional lhs on GIMPLE_OMP_RETURN.
      	(walk_gimple_stmt, gimple_copy): Handle GIMPLE_OMP_TARGET,
      	GIMPLE_OMP_TEAMS and GIMPLE_OMP_TASKGROUP.
      	* gimple.h (enum gf_mask): GF_OMP_FOR_KIND_DISTRIBUTE,
      	GF_OMP_FOR_COMBINED, GF_OMP_FOR_COMBINED_INTO,
      	GF_OMP_TARGET_KIND_MASK, GF_OMP_TARGET_KIND_REGION,
      	GF_OMP_TARGET_KIND_DATA, GF_OMP_TARGET_KIND_UPDATE,
      	GF_OMP_ATOMIC_SEQ_CST): New.
      	(gimple_build_omp_taskgroup, gimple_build_omp_target,
      	gimple_build_omp_teams): New prototypes.
      	(gimple_has_substatements): Handle GIMPLE_OMP_TARGET,
      	GIMPLE_OMP_TEAMS and GIMPLE_OMP_TASKGROUP.
      	(gimple_omp_subcode): Use GIMPLE_OMP_TEAMS instead of
      	GIMPLE_OMP_SINGLE as end of range.
      	(gimple_omp_return_set_lhs, gimple_omp_return_lhs,
      	gimple_omp_return_lhs_ptr, gimple_omp_atomic_seq_cst_p,
      	gimple_omp_atomic_set_seq_cst, gimple_omp_for_combined_p,
      	gimple_omp_for_set_combined_p, gimple_omp_for_combined_into_p,
      	gimple_omp_for_set_combined_into_p, gimple_omp_target_clauses,
      	gimple_omp_target_clauses_ptr, gimple_omp_target_set_clauses,
      	gimple_omp_target_kind, gimple_omp_target_set_kind,
      	gimple_omp_target_child_fn, gimple_omp_target_child_fn_ptr,
      	gimple_omp_target_set_child_fn, gimple_omp_target_data_arg,
      	gimple_omp_target_data_arg_ptr, gimple_omp_target_set_data_arg,
      	gimple_omp_teams_clauses, gimple_omp_teams_clauses_ptr,
      	gimple_omp_teams_set_clauses): New inlines.
      	(CASE_GIMPLE_OMP): Add GIMPLE_OMP_TARGET, GIMPLE_OMP_TEAMS
      	and GIMPLE_OMP_TASKGROUP.
      	* tree-core.h (enum omp_clause_code): Add new OpenMP 4.0 clause
      	codes.
      	(enum omp_clause_depend_kind, enum omp_clause_map_kind,
      	enum omp_clause_proc_bind_kind): New.
      	(union omp_clause_subcode): Add depend_kind, map_kind and
      	proc_bind_kind fields.
      	* tree-cfg.c (make_edges): Handle GIMPLE_OMP_TARGET,
      	GIMPLE_OMP_TEAMS and GIMPLE_OMP_TASKGROUP.
      	* langhooks-def.h (lhd_omp_mappable_type): New prototype.
      	(LANG_HOOKS_OMP_MAPPABLE_TYPE): Define.
      	(LANG_HOOKS_FOR_TYPES_INITIALIZER): Add it.
      gcc/c-family/
      	* c-cppbuiltin.c (c_cpp_builtins): Predefine _OPENMP to
      	201307 instead of 201107.
      	* c-common.c (DEF_FUNCTION_TYPE_8): Define.
      	(c_common_attribute_table): Add "omp declare target" and
      	"omp declare simd" attributes.
      	(handle_omp_declare_target_attribute,
      	handle_omp_declare_simd_attribute): New functions.
      	* c-omp.c: Include c-pragma.h.
      	(c_finish_omp_taskgroup): New function.
      	(c_finish_omp_atomic): Add swapped argument, if true,
      	build the operation first with rhs, lhs arguments and use NOP_EXPR
      	build_modify_expr.
      	(c_finish_omp_for): Add code argument, pass it down to make_code.
      	(c_omp_split_clauses): New function.
      	(c_split_parallel_clauses): Removed.
      	(c_omp_declare_simd_clause_cmp, c_omp_declare_simd_clauses_to_numbers,
      	c_omp_declare_simd_clauses_to_decls): New functions.
      	* c-common.h (omp_clause_mask): New type.
      	(OMP_CLAUSE_MASK_1): Define.
      	(omp_clause_mask::omp_clause_mask, omp_clause_mask::operator &=,
      	omp_clause_mask::operator |=, omp_clause_mask::operator ~,
      	omp_clause_mask::operator |, omp_clause_mask::operator &,
      	omp_clause_mask::operator <<, omp_clause_mask::operator >>,
      	omp_clause_mask::operator ==): New methods.
      	(enum c_omp_clause_split): New.
      	(c_finish_omp_taskgroup): New prototype.
      	(c_finish_omp_atomic): Add swapped argument.
      	(c_finish_omp_for): Add code argument.
      	(c_omp_split_clauses): New prototype.
      	(c_split_parallel_clauses): Removed.
      	(c_omp_declare_simd_clauses_to_numbers,
      	c_omp_declare_simd_clauses_to_decls): New prototypes.
      	* c-pragma.c (omp_pragmas): Add new OpenMP 4.0 constructs.
      	* c-pragma.h (enum pragma_kind): Add PRAGMA_OMP_CANCEL,
      	PRAGMA_OMP_CANCELLATION_POINT, PRAGMA_OMP_DECLARE_REDUCTION,
      	PRAGMA_OMP_DISTRIBUTE, PRAGMA_OMP_END_DECLARE_TARGET, PRAGMA_OMP_SIMD,
      	PRAGMA_OMP_TARGET, PRAGMA_OMP_TASKGROUP and PRAGMA_OMP_TEAMS.
      	Remove PRAGMA_OMP_PARALLEL_FOR and PRAGMA_OMP_PARALLEL_SECTIONS.
      	(enum pragma_omp_clause): Add PRAGMA_OMP_CLAUSE_ALIGNED,
      	PRAGMA_OMP_CLAUSE_DEPEND, PRAGMA_OMP_CLAUSE_DEVICE,
      	PRAGMA_OMP_CLAUSE_DIST_SCHEDULE, PRAGMA_OMP_CLAUSE_FOR,
      	PRAGMA_OMP_CLAUSE_FROM, PRAGMA_OMP_CLAUSE_INBRANCH,
      	PRAGMA_OMP_CLAUSE_LINEAR, PRAGMA_OMP_CLAUSE_MAP,
      	PRAGMA_OMP_CLAUSE_NOTINBRANCH, PRAGMA_OMP_CLAUSE_NUM_TEAMS,
      	PRAGMA_OMP_CLAUSE_PARALLEL, PRAGMA_OMP_CLAUSE_PROC_BIND,
      	PRAGMA_OMP_CLAUSE_SAFELEN, PRAGMA_OMP_CLAUSE_SECTIONS,
      	PRAGMA_OMP_CLAUSE_SIMDLEN, PRAGMA_OMP_CLAUSE_TASKGROUP,
      	PRAGMA_OMP_CLAUSE_THREAD_LIMIT, PRAGMA_OMP_CLAUSE_TO and
      	PRAGMA_OMP_CLAUSE_UNIFORM.
      gcc/ada/
      	* gcc-interface/utils.c (DEF_FUNCTION_TYPE_8): Define.
      gcc/fortran/
      	* trans-openmp.c (gfc_omp_clause_default_ctor,
      	gfc_omp_clause_dtor): Return NULL for OMP_CLAUSE_REDUCTION.
      	* f95-lang.c (ATTR_NULL, DEF_FUNCTION_TYPE_8): Define.
      	* types.def (DEF_FUNCTION_TYPE_8): Document.
      	(BT_FN_VOID_OMPFN_PTR_UINT,
      	BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG,
      	BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
      	BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT): Remove.
      	(BT_FN_VOID_OMPFN_PTR_UINT_UINT_UINT,
      	BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_UINT,
      	BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT,
      	BT_FN_BOOL_INT, BT_FN_BOOL_INT_BOOL, BT_FN_VOID_UINT_UINT,
      	BT_FN_VOID_INT_PTR_SIZE_PTR_PTR_PTR,
      	BT_FN_VOID_INT_OMPFN_PTR_SIZE_PTR_PTR_PTR,
      	BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT_PTR): New.
      gcc/lto/
      	* lto-lang.c (DEF_FUNCTION_TYPE_8): Define.
      gcc/c/
      	* c-lang.h (current_omp_declare_target_attribute): New extern
      	decl.
      	* c-parser.c: Include c-lang.h.
      	(struct c_parser): Change tokens to c_token *.
      	Add tokens_buf field.  Change tokens_avail type to unsigned int.
      	(c_parser_consume_token): If parser->tokens isn't
      	&parser->tokens_buf[0], increment parser->tokens.
      	(c_parser_consume_pragma): Likewise.
      	(enum pragma_context): Add pragma_struct and pragma_param.
      	(c_parser_external_declaration): Adjust
      	c_parser_declaration_or_fndef caller.
      	(c_parser_declaration_or_fndef): Add omp_declare_simd_clauses
      	argument, if it is non-vNULL vector, call c_finish_omp_declare_simd.
      	Adjust recursive call.
      	(c_parser_struct_or_union_specifier): Use pragma_struct instead
      	of pragma_external.
      	(c_parser_parameter_declaration): Use pragma_param instead of
      	pragma_external.
      	(c_parser_compound_statement_nostart, c_parser_label,
      	c_parser_for_statement): Adjust
      	c_parser_declaration_or_fndef callers.
      	(c_parser_expr_no_commas): Add omp_atomic_lhs argument, pass
      	it through to c_parser_conditional_expression.
      	(c_parser_conditional_expression): Add omp_atomic_lhs argument,
      	pass it through to c_parser_binary_expression.  Adjust recursive
      	call.
      	(c_parser_binary_expression): Remove prec argument, add
      	omp_atomic_lhs argument instead.  Always start from PREC_NONE, if
      	omp_atomic_lhs is non-NULL and one of the arguments of toplevel
      	binop matches it, use build2 instead of parser_build_binary_op.
      	(c_parser_pragma): Handle PRAGMA_OMP_CANCEL,
      	PRAGMA_OMP_CANCELLATION_POINT, PRAGMA_OMP_TARGET,
      	PRAGMA_OMP_END_DECLARE_TARGET, PRAGMA_OMP_DECLARE_REDUCTION.
      	Handle pragma_struct and pragma_param the same as pragma_external.
      	(c_parser_omp_clause_name): Parse new OpenMP 4.0 clause names.
      	(c_parser_omp_variable_list): Parse array sections for
      	OMP_CLAUSE_{DEPEND,MAP,TO,FROM} clauses.
      	(c_parser_omp_clause_collapse): Fully fold collapse expression.
      	(c_parser_omp_clause_reduction): Handle user defined reductions.
      	(c_parser_omp_clause_branch, c_parser_omp_clause_cancelkind,
      	c_parser_omp_clause_num_teams, c_parser_omp_clause_thread_limit,
      	c_parser_omp_clause_aligned, c_parser_omp_clause_linear,
      	c_parser_omp_clause_safelen, c_parser_omp_clause_simdlen,
      	c_parser_omp_clause_depend, c_parser_omp_clause_map,
      	c_parser_omp_clause_device, c_parser_omp_clause_dist_schedule,
      	c_parser_omp_clause_proc_bind, c_parser_omp_clause_to,
      	c_parser_omp_clause_from, c_parser_omp_clause_uniform): New functions.
      	(c_parser_omp_all_clauses): Add finish_p argument.  Don't call
      	c_finish_omp_clauses if it is false.  Handle new OpenMP 4.0 clauses.
      	(c_parser_omp_atomic): Parse seq_cst clause, pass true if it is
      	present to c_finish_omp_atomic.  Handle OpenMP 4.0 atomic forms.
      	(c_parser_omp_for_loop): Add CODE argument, pass it through
      	to c_finish_omp_for.  Change last argument to cclauses,
      	and adjust uses to grab parallel clauses from the array of all
      	the split clauses.  Adjust c_parser_binary_expression,
      	c_parser_declaration_or_fndef and c_finish_omp_for callers.
      	(omp_split_clauses): New function.
      	(c_parser_omp_simd): New function.
      	(c_parser_omp_for): Add p_name, mask and cclauses arguments.
      	Allow the function to be called also when parsing combined constructs,
      	and call c_parser_omp_simd when parsing for simd.
      	(c_parser_omp_sections_scope): If section-sequence doesn't start with
      	#pragma omp section, require exactly one structured-block instead of
      	sequence of statements.
      	(c_parser_omp_sections): Add p_name, mask and cclauses arguments.
      	Allow the function to be called also when parsing combined constructs.
      	(c_parser_omp_parallel): Add p_name, mask and cclauses arguments.
      	Allow the function to be called also when parsing combined
      	constructs.
      	(c_parser_omp_taskgroup, c_parser_omp_cancel,
      	c_parser_omp_cancellation_point, c_parser_omp_distribute,
      	c_parser_omp_teams, c_parser_omp_target_data,
      	c_parser_omp_target_update, c_parser_omp_target,
      	c_parser_omp_declare_simd, c_finish_omp_declare_simd,
      	c_parser_omp_declare_target, c_parser_omp_end_declare_target,
      	c_parser_omp_declare_reduction, c_parser_omp_declare): New functions.
      	(c_parser_omp_construct): Add p_name and mask vars.  Handle
      	PRAGMA_OMP_DISTRIBUTE, PRAGMA_OMP_SIMD, PRAGMA_OMP_TASKGROUP,
      	PRAGMA_OMP_TEAMS.  Adjust c_parser_omp_for, c_parser_omp_parallel
      	and c_parser_omp_sections callers.
      	(c_parse_file): Initialize tparser.tokens and the_parser->tokens here.
      	(OMP_FOR_CLAUSE_MASK, OMP_SECTIONS_CLAUSE_MASK,
      	OMP_SINGLE_CLAUSE_MASK): Use OMP_CLAUSE_MASK_1 instead of 1.
      	(OMP_PARALLEL_CLAUSE_MASK): Likewise.  Add OMP_CLAUSE_PROC_BIND.
      	(OMP_TASK_CLAUSE_MASK): Use OMP_CLAUSE_MASK_1 instead of 1.  Add
      	OMP_CLAUSE_DEPEND.
      	(OMP_SIMD_CLAUSE_MASK, OMP_CANCEL_CLAUSE_MASK,
      	OMP_CANCELLATION_POINT_CLAUSE_MASK, OMP_DISTRIBUTE_CLAUSE_MASK,
      	OMP_TEAMS_CLAUSE_MASK, OMP_TARGET_DATA_CLAUSE_MASK,
      	OMP_TARGET_UPDATE_CLAUSE_MASK, OMP_TARGET_CLAUSE_MASK,
      	OMP_DECLARE_SIMD_CLAUSE_MASK): Define.
      	* c-typeck.c: Include tree-inline.h.
      	(c_finish_omp_cancel, c_finish_omp_cancellation_point,
      	handle_omp_array_sections_1, handle_omp_array_sections,
      	c_clone_omp_udr, c_find_omp_placeholder_r): New functions.
      	(c_finish_omp_clauses): Handle new OpenMP 4.0 clauses and
      	user defined reductions.
      	(c_tree_equal): New function.
      	* c-tree.h (temp_store_parm_decls, temp_pop_parm_decls,
      	c_finish_omp_cancel, c_finish_omp_cancellation_point, c_tree_equal,
      	c_omp_reduction_id, c_omp_reduction_decl, c_omp_reduction_lookup,
      	c_check_omp_declare_reduction_r): New prototypes.
      	* c-decl.c (current_omp_declare_target_attribute): New variable.
      	(c_decl_attributes): New function.
      	(start_decl, start_function): Use it instead of decl_attributes.
      	(temp_store_parm_decls, temp_pop_parm_decls, c_omp_reduction_id,
      	c_omp_reduction_decl, c_omp_reduction_lookup,
      	c_check_omp_declare_reduction_r): New functions.
      gcc/cp/
      	* decl.c (duplicate_decls): Error out for redeclaration of UDRs.
      	(declare_simd_adjust_this): New function.
      	(grokfndecl): If "omp declare simd" attribute is present,
      	call declare_simd_adjust_this if needed and
      	c_omp_declare_simd_clauses_to_numbers.
      	* cp-array-notation.c (expand_array_notation_exprs): Handle
      	OMP_TASKGROUP.
      	* cp-gimplify.c (cp_gimplify_expr): Handle OMP_SIMD and
      	OMP_DISTRIBUTE.  Handle is_invisiref_parm decls in
      	OMP_CLAUSE_REDUCTION.
      	(cp_genericize_r): Handle OMP_SIMD and OMP_DISTRIBUTE like
      	OMP_FOR.
      	(cxx_omp_privatize_by_reference): Return true for
      	is_invisiref_parm decls.
      	(cxx_omp_finish_clause): Adjust cxx_omp_create_clause_info
      	caller.
      	* pt.c (apply_late_template_attributes): For "omp declare simd"
      	attribute call tsubst_omp_clauses,
      	c_omp_declare_simd_clauses_to_decls, finish_omp_clauses
      	and c_omp_declare_simd_clauses_to_numbers.
      	(instantiate_class_template_1): Call cp_check_omp_declare_reduction
      	for UDRs.
      	(tsubst_decl): Handle UDRs.
      	(tsubst_omp_clauses): Add declare_simd argument, if true don't
      	call finish_omp_clauses.  Handle new OpenMP 4.0 clauses.
      	Handle non-NULL OMP_CLAUSE_REDUCTION_PLACEHOLDER on
      	OMP_CLAUSE_REDUCTION.
      	(tsubst_expr): For UDRs call pushdecl and
      	cp_check_omp_declare_reduction.  Adjust tsubst_omp_clauses
      	callers.  Handle OMP_SIMD, OMP_DISTRIBUTE, OMP_TEAMS,
      	OMP_TARGET_DATA, OMP_TARGET_UPDATE, OMP_TARGET, OMP_TASKGROUP.
      	Adjust finish_omp_atomic caller.
      	(tsubst_omp_udr): New function.
      	(instantiate_decl): For UDRs at block scope, don't call
      	start_preparsed_function/finish_function.  Call tsubst_omp_udr.
      	* semantics.c (cxx_omp_create_clause_info): Add need_dtor argument,
      	use it instead of need_default_ctor || need_copy_ctor.
      	(struct cp_check_omp_declare_reduction_data): New type.
      	(handle_omp_array_sections_1, handle_omp_array_sections,
      	omp_reduction_id, omp_reduction_lookup,
      	cp_remove_omp_priv_cleanup_stmt, cp_check_omp_declare_reduction_r,
      	cp_check_omp_declare_reduction, clone_omp_udr,
      	find_omp_placeholder_r, finish_omp_reduction_clause): New functions.
      	(finish_omp_clauses): Handle new OpenMP 4.0 clauses and user defined
      	reductions.
      	(finish_omp_for): Add CODE argument, use it instead of hardcoded
      	OMP_FOR.  Adjust c_finish_omp_for caller.
      	(finish_omp_atomic): Add seq_cst argument, adjust
      	c_finish_omp_atomic callers, handle seq_cst and new OpenMP 4.0
      	atomic variants.
      	(finish_omp_cancel, finish_omp_cancellation_point): New functions.
      	* decl2.c (mark_used): Force immediate instantiation of
      	DECL_OMP_DECLARE_REDUCTION_P decls.
      	(is_late_template_attribute): Return true for "omp declare simd"
      	attribute.
      	(cp_omp_mappable_type): New function.
      	(cplus_decl_attributes): Add implicit "omp declare target" attribute
      	if requested.
      	* parser.c (cp_debug_parser): Print
      	parser->colon_doesnt_start_class_def_p.
      	(cp_ensure_no_omp_declare_simd, cp_finalize_omp_declare_simd): New
      	functions.
      	(enum pragma_context): Add pragma_member and pragma_objc_icode.
      	(cp_parser_binary_expression): Handle no_toplevel_fold_p
      	even for binary operations other than comparison.
      	(cp_parser_linkage_specification): Call
      	cp_ensure_no_omp_declare_simd if needed.
      	(cp_parser_namespace_definition): Likewise.
      	(cp_parser_init_declarator): Call cp_finalize_omp_declare_simd.
      	(cp_parser_direct_declarator): Pass declarator to
      	cp_parser_late_return_type_opt.
      	(cp_parser_late_return_type_opt): Add declarator argument,
      	call cp_parser_late_parsing_omp_declare_simd for declare simd.
      	(cp_parser_class_specifier_1): Call cp_ensure_no_omp_declare_simd.
      	Parse UDRs before all other methods.
      	(cp_parser_member_specification_opt): Use pragma_member instead of
      	pragma_external.
      	(cp_parser_member_declaration): Call cp_finalize_omp_declare_simd.
      	(cp_parser_function_definition_from_specifiers_and_declarator,
      	cp_parser_save_member_function_body): Likewise.
      	(cp_parser_late_parsing_for_member): Handle UDRs specially.
      	(cp_parser_next_token_starts_class_definition_p): Don't allow
      	CPP_COLON if colon_doesnt_start_class_def_p flag is true.
      	(cp_parser_objc_interstitial_code): Use pragma_objc_icode
      	instead of pragma_external.
      	(cp_parser_omp_clause_name): Parse new OpenMP 4.0 clause names.
      	(cp_parser_omp_var_list_no_open): Parse array sections for
      	OMP_CLAUSE_{DEPEND,MAP,TO,FROM} clauses.  Add COLON argument,
      	if non-NULL, allow parsing to end with a colon rather than close
      	paren.
      	(cp_parser_omp_var_list): Adjust cp_parser_omp_var_list_no_open
      	caller.
      	(cp_parser_omp_clause_reduction): Handle user defined reductions.
      	(cp_parser_omp_clause_branch, cp_parser_omp_clause_cancelkind,
      	cp_parser_omp_clause_num_teams, cp_parser_omp_clause_thread_limit,
      	cp_parser_omp_clause_aligned, cp_parser_omp_clause_linear,
      	cp_parser_omp_clause_safelen, cp_parser_omp_clause_simdlen,
      	cp_parser_omp_clause_depend, cp_parser_omp_clause_map,
      	cp_parser_omp_clause_device, cp_parser_omp_clause_dist_schedule,
      	cp_parser_omp_clause_proc_bind, cp_parser_omp_clause_to,
      	cp_parser_omp_clause_from, cp_parser_omp_clause_uniform): New
      	functions.
      	(cp_parser_omp_all_clauses): Add finish_p argument.  Don't call
      	finish_omp_clauses if it is false.  Handle new OpenMP 4.0 clauses.
      	(cp_parser_omp_atomic): Parse seq_cst clause, pass
      	true if it is present to finish_omp_atomic.  Handle new OpenMP 4.0
      	atomic forms.
      	(cp_parser_omp_for_loop): Add CODE argument, pass it through
      	to finish_omp_for.  Change last argument to cclauses,
      	and adjust uses to grab parallel clauses from the array of all
      	the split clauses.
      	(cp_omp_split_clauses): New function.
      	(cp_parser_omp_simd): New function.
      	(cp_parser_omp_for): Add p_name, mask and cclauses arguments.
      	Allow the function to be called also when parsing combined constructs,
      	and call c_parser_omp_simd when parsing for simd.
      	(cp_parser_omp_sections_scope): If section-sequence doesn't start with
      	#pragma omp section, require exactly one structured-block instead of
      	sequence of statements.
      	(cp_parser_omp_sections): Add p_name, mask and cclauses arguments.
      	Allow the function to be called also when parsing combined constructs.
      	(cp_parser_omp_parallel): Add p_name, mask and cclauses arguments.
      	Allow the function to be called also when parsing combined
      	constructs.
      	(cp_parser_omp_taskgroup, cp_parser_omp_cancel,
      	cp_parser_omp_cancellation_point, cp_parser_omp_distribute,
      	cp_parser_omp_teams, cp_parser_omp_target_data,
      	cp_parser_omp_target_update, cp_parser_omp_target,
      	cp_parser_omp_declare_simd, cp_parser_late_parsing_omp_declare_simd,
      	cp_parser_omp_declare_target, cp_parser_omp_end_declare_target,
      	cp_parser_omp_declare_reduction_exprs, cp_parser_omp_declare_reduction,
      	cp_parser_omp_declare): New functions.
      	(cp_parser_omp_construct): Add p_name and mask vars.  Handle
      	PRAGMA_OMP_DISTRIBUTE, PRAGMA_OMP_SIMD, PRAGMA_OMP_TASKGROUP,
      	PRAGMA_OMP_TEAMS.  Adjust cp_parser_omp_for, cp_parser_omp_parallel
      	and cp_parser_omp_sections callers.
      	(cp_parser_pragma): Handle PRAGMA_OMP_CANCEL,
      	PRAGMA_OMP_CANCELLATION_POINT, PRAGMA_OMP_DECLARE_REDUCTION,
      	PRAGMA_OMP_DISTRIBUTE, PRAGMA_OMP_SIMD, PRAGMA_OMP_TASKGROUP,
      	PRAGMA_OMP_TEAMS, PRAGMA_OMP_TARGET, PRAGMA_OMP_END_DECLARE_TARGET.
      	Handle pragma_member and pragma_objc_icode like pragma_external.
      	(OMP_FOR_CLAUSE_MASK, OMP_SECTIONS_CLAUSE_MASK,
      	OMP_SINGLE_CLAUSE_MASK): Use OMP_CLAUSE_MASK_1 instead of 1.
      	(OMP_PARALLEL_CLAUSE_MASK): Likewise.  Add OMP_CLAUSE_PROC_BIND.
      	(OMP_TASK_CLAUSE_MASK): Use OMP_CLAUSE_MASK_1 instead of 1.  Add
      	OMP_CLAUSE_DEPEND.
      	(OMP_SIMD_CLAUSE_MASK, OMP_CANCEL_CLAUSE_MASK,
      	OMP_CANCELLATION_POINT_CLAUSE_MASK, OMP_DISTRIBUTE_CLAUSE_MASK,
      	OMP_TEAMS_CLAUSE_MASK, OMP_TARGET_DATA_CLAUSE_MASK,
      	OMP_TARGET_UPDATE_CLAUSE_MASK, OMP_TARGET_CLAUSE_MASK,
      	OMP_DECLARE_SIMD_CLAUSE_MASK): Define.
      	* parser.h (struct cp_omp_declare_simd_data): New type.
      	(struct cp_parser): Add colon_doesnt_start_class_def_p and
      	omp_declare_simd fields.
      	* cp-objcp-common.h (LANG_HOOKS_OMP_MAPPABLE_TYPE): Define.
      	* cp-tree.h (struct lang_decl_fn): Add omp_declare_reduction_p
      	bit.
      	(DECL_OMP_DECLARE_REDUCTION_P): Define.
      	(OMP_FOR_GIMPLIFYING_P): Use OMP_LOOP_CHECK macro.
      	(struct saved_scope): Add omp_declare_target_attribute field.
      	(cp_omp_mappable_type, omp_reduction_id,
      	cp_remove_omp_priv_cleanup_stmt, cp_check_omp_declare_reduction,
      	finish_omp_cancel, finish_omp_cancellation_point): New prototypes.
      	(finish_omp_for): Add CODE argument.
      	(finish_omp_atomic): Add seq_cst argument.
      	(cxx_omp_create_clause_info): Add need_dtor argument.
      gcc/testsuite/
      	* c-c++-common/gomp/atomic-15.c: Adjust for C diagnostics.
      	Remove error test that is now valid in OpenMP 4.0.
      	* c-c++-common/gomp/atomic-16.c: New test.
      	* c-c++-common/gomp/cancel-1.c: New test.
      	* c-c++-common/gomp/depend-1.c: New test.
      	* c-c++-common/gomp/depend-2.c: New test.
      	* c-c++-common/gomp/map-1.c: New test.
      	* c-c++-common/gomp/pr58472.c: New test.
      	* c-c++-common/gomp/sections1.c: New test.
      	* c-c++-common/gomp/simd1.c: New test.
      	* c-c++-common/gomp/simd2.c: New test.
      	* c-c++-common/gomp/simd3.c: New test.
      	* c-c++-common/gomp/simd4.c: New test.
      	* c-c++-common/gomp/simd5.c: New test.
      	* c-c++-common/gomp/single1.c: New test.
      	* g++.dg/gomp/block-0.C: Adjust for stricter #pragma omp sections
      	parser.
      	* g++.dg/gomp/block-3.C: Likewise.
      	* g++.dg/gomp/clause-3.C: Adjust error messages.
      	* g++.dg/gomp/declare-simd-1.C: New test.
      	* g++.dg/gomp/declare-simd-2.C: New test.
      	* g++.dg/gomp/depend-1.C: New test.
      	* g++.dg/gomp/depend-2.C: New test.
      	* g++.dg/gomp/target-1.C: New test.
      	* g++.dg/gomp/target-2.C: New test.
      	* g++.dg/gomp/taskgroup-1.C: New test.
      	* g++.dg/gomp/teams-1.C: New test.
      	* g++.dg/gomp/udr-1.C: New test.
      	* g++.dg/gomp/udr-2.C: New test.
      	* g++.dg/gomp/udr-3.C: New test.
      	* g++.dg/gomp/udr-4.C: New test.
      	* g++.dg/gomp/udr-5.C: New test.
      	* g++.dg/gomp/udr-6.C: New test.
      	* gcc.dg/autopar/outer-1.c: Expect 4 instead of 5 loopfn matches.
      	* gcc.dg/autopar/outer-2.c: Likewise.
      	* gcc.dg/autopar/outer-3.c: Likewise.
      	* gcc.dg/autopar/outer-4.c: Likewise.
      	* gcc.dg/autopar/outer-5.c: Likewise.
      	* gcc.dg/autopar/outer-6.c: Likewise.
      	* gcc.dg/autopar/parallelization-1.c: Likewise.
      	* gcc.dg/gomp/block-3.c: Adjust for stricter #pragma omp sections
      	parser.
      	* gcc.dg/gomp/clause-1.c: Adjust error messages.
      	* gcc.dg/gomp/combined-1.c: Look for GOMP_parallel_loop_runtime
      	instead of GOMP_parallel_loop_runtime_start.
      	* gcc.dg/gomp/declare-simd-1.c: New test.
      	* gcc.dg/gomp/declare-simd-2.c: New test.
      	* gcc.dg/gomp/nesting-1.c: Adjust for stricter #pragma omp sections
      	parser.  Add further #pragma omp sections nesting tests.
      	* gcc.dg/gomp/target-1.c: New test.
      	* gcc.dg/gomp/target-2.c: New test.
      	* gcc.dg/gomp/taskgroup-1.c: New test.
      	* gcc.dg/gomp/teams-1.c: New test.
      	* gcc.dg/gomp/udr-1.c: New test.
      	* gcc.dg/gomp/udr-2.c: New test.
      	* gcc.dg/gomp/udr-3.c: New test.
      	* gcc.dg/gomp/udr-4.c: New test.
      	* gfortran.dg/gomp/appendix-a/a.35.5.f90: Add dg-error.
      
      Co-Authored-By: Richard Henderson <rth@redhat.com>
      Co-Authored-By: Tobias Burnus <burnus@net-b.de>
      
      From-SVN: r203408
      Jakub Jelinek committed
  17. 14 Jan, 2013 1 commit
  18. 21 Nov, 2012 1 commit
  19. 02 Aug, 2011 1 commit
    • backport: re PR fortran/46752 (OpenMP - Seg fault for unallocated allocatable… · 20906c66
      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
      Jakub Jelinek committed
  20. 20 May, 2009 1 commit
  21. 09 Apr, 2009 1 commit
  22. 16 Jul, 2008 1 commit
  23. 06 Jun, 2008 1 commit
    • c-cppbuiltin.c (c_cpp_builtins): Change _OPENMP value to 200805. · a68ab351
      	* c-cppbuiltin.c (c_cpp_builtins): Change _OPENMP value to
      	200805.
      	* langhooks.h (struct lang_hooks_for_decls): Add omp_finish_clause.
      	Add omp_private_outer_ref hook, add another argument to
      	omp_clause_default_ctor hook.
      	* langhooks-def.h (LANG_HOOKS_OMP_FINISH_CLAUSE): Define.
      	(LANG_HOOKS_OMP_PRIVATE_OUTER_REF): Define.
      	(LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR): Change to
      	hook_tree_tree_tree_tree_null.
      	(LANG_HOOKS_DECLS): Add LANG_HOOKS_OMP_FINISH_CLAUSE and
      	LANG_HOOKS_OMP_PRIVATE_OUTER_REF.
      	* hooks.c (hook_tree_tree_tree_tree_null): New function.
      	* hooks.h (hook_tree_tree_tree_tree_null): New prototype.
      	* tree.def (OMP_TASK): New tree code.
      	* tree.h (OMP_TASK_COPYFN, OMP_TASK_ARG_SIZE, OMP_TASK_ARG_ALIGN,
      	OMP_CLAUSE_PRIVATE_OUTER_REF, OMP_CLAUSE_LASTPRIVATE_STMT,
      	OMP_CLAUSE_COLLAPSE_ITERVAR, OMP_CLAUSE_COLLAPSE_COUNT,
      	OMP_TASKREG_CHECK, OMP_TASKREG_BODY, OMP_TASKREG_CLAUSES,
      	OMP_TASKREG_FN, OMP_TASKREG_DATA_ARG, OMP_TASK_BODY,
      	OMP_TASK_CLAUSES, OMP_TASK_FN, OMP_TASK_DATA_ARG,
      	OMP_CLAUSE_COLLAPSE_EXPR): Define.
      	(enum omp_clause_default_kind): Add OMP_CLAUSE_DEFAULT_FIRSTPRIVATE.
      	(OMP_DIRECTIVE_P): Add OMP_TASK.
      	(OMP_CLAUSE_COLLAPSE, OMP_CLAUSE_UNTIED): New clause codes.
      	(OMP_CLAUSE_SCHEDULE_AUTO): New schedule kind.
      	* tree.c (omp_clause_code_name): Add OMP_CLAUSE_COLLAPSE
      	and OMP_CLAUSE_UNTIED entries.
      	(omp_clause_num_ops): Likewise.  Increase OMP_CLAUSE_LASTPRIVATE
      	num_ops to 2.
      	(walk_tree_1): Handle OMP_CLAUSE_COLLAPSE and OMP_CLAUSE_UNTIED.
      	Walk OMP_CLAUSE_LASTPRIVATE_STMT.
      	* tree-pretty-print.c (dump_omp_clause): Handle
      	OMP_CLAUSE_SCHEDULE_AUTO, OMP_CLAUSE_UNTIED, OMP_CLAUSE_COLLAPSE,
      	OMP_CLAUSE_DEFAULT_FIRSTPRIVATE.
      	(dump_generic_node): Handle OMP_TASK and collapsed OMP_FOR loops.
      	* c-omp.c (c_finish_omp_for): Allow pointer iterators.  Remove
      	warning about unsigned iterators.  Change decl/init/cond/incr
      	arguments to TREE_VECs, check arguments for all collapsed loops.
      	(c_finish_omp_taskwait): New function.
      	(c_split_parallel_clauses): Put OMP_CLAUSE_COLLAPSE clause to
      	ws_clauses.
      	* c-parser.c (c_parser_omp_for_loop): Parse collapsed loops.  Call
      	default_function_array_conversion on init.  Add par_clauses argument.
      	If decl is present in parallel's lastprivate clause, change it to
      	shared and add lastprivate clause for decl to OMP_FOR_CLAUSES.
      	Add clauses argument, on success set OMP_FOR_CLAUSES to it.  Look up
      	collapse count in clauses.
      	(c_parser_omp_for, c_parser_omp_parallel): Adjust
      	c_parser_omp_for_loop callers.
      	(OMP_FOR_CLAUSE_MASK): Add 1 << PRAGMA_OMP_CLAUSE_COLLAPSE.
      	(c_parser_pragma): Handle PRAGMA_OMP_TASKWAIT.
      	(c_parser_omp_clause_name): Handle collapse and untied clauses.
      	(c_parser_omp_clause_collapse, c_parser_omp_clause_untied): New
      	functions.
      	(c_parser_omp_clause_schedule): Handle schedule(auto).
      	Include correct location in the error message.
      	(c_parser_omp_all_clauses): Handle PRAGMA_OMP_CLAUSE_COLLAPSE
      	and PRAGMA_OMP_CLAUSE_UNTIED.
      	(OMP_TASK_CLAUSE_MASK): Define.
      	(c_parser_omp_task, c_parser_omp_taskwait): New functions.
      	(c_parser_omp_construct): Handle PRAGMA_OMP_TASK.
      	* tree-nested.c (convert_nonlocal_omp_clauses,
      	convert_local_omp_clauses): Handle OMP_CLAUSE_LASTPRIVATE_STMT,
      	OMP_CLAUSE_REDUCTION_INIT, OMP_CLAUSE_REDUCTION_MERGE,
      	OMP_CLAUSE_COLLAPSE and OMP_CLAUSE_UNTIED.
      	Don't handle TREE_STATIC or DECL_EXTERNAL VAR_DECLs in
      	OMP_CLAUSE_DECL.
      	(conver_nonlocal_reference, convert_local_reference,
      	convert_call_expr): Handle OMP_TASK the same as OMP_PARALLEL.  Use
      	OMP_TASKREG_* macros rather than OMP_PARALLEL_*.
      	(walk_omp_for): Adjust for OMP_FOR_{INIT,COND,INCR} changes.
      	* tree-gimple.c (is_gimple_stmt): Handle OMP_TASK.
      	* c-tree.h (c_begin_omp_task, c_finish_omp_task): New prototypes.
      	* c-pragma.h (PRAGMA_OMP_TASK, PRAGMA_OMP_TASKWAIT): New.
      	(PRAGMA_OMP_CLAUSE_COLLAPSE, PRAGMA_OMP_CLAUSE_UNTIED): New.
      	* c-typeck.c (c_begin_omp_task, c_finish_omp_task): New functions.
      	(c_finish_omp_clauses): Handle OMP_CLAUSE_COLLAPSE and
      	OMP_CLAUSE_UNTIED.
      	* c-pragma.c (init_pragma): Init omp task and omp taskwait pragmas.
      	* c-common.h (c_finish_omp_taskwait): New prototype.
      	* gimple-low.c (lower_stmt): Handle OMP_TASK.
      	* tree-parloops.c (create_parallel_loop): Create 1 entry
      	vectors for OMP_FOR_{INIT,COND,INCR}.
      	* tree-cfg.c (remove_useless_stmts_1): Handle OMP_* containers.
      	(make_edges): Handle OMP_TASK.
      	* tree-ssa-operands.c (get_expr_operands): Handle collapsed OMP_FOR
      	loops, adjust for OMP_FOR_{INIT,COND,INCR} changes.
      	* tree-inline.c (estimate_num_insns_1): Handle OMP_TASK.
      	* builtin-types.def (BT_PTR_ULONGLONG, BT_PTR_FN_VOID_PTR_PTR,
      	BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR,
      	BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULLPTR_ULLPTR,
      	BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
      	BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT): New.
      	* omp-builtins.def (BUILT_IN_GOMP_TASK, BUILT_IN_GOMP_TASKWAIT,
      	BUILT_IN_GOMP_LOOP_ULL_STATIC_START,
      	BUILT_IN_GOMP_LOOP_ULL_DYNAMIC_START,
      	BUILT_IN_GOMP_LOOP_ULL_GUIDED_START,
      	BUILT_IN_GOMP_LOOP_ULL_RUNTIME_START,
      	BUILT_IN_GOMP_LOOP_ULL_ORDERED_STATIC_START,
      	BUILT_IN_GOMP_LOOP_ULL_ORDERED_DYNAMIC_START,
      	BUILT_IN_GOMP_LOOP_ULL_ORDERED_GUIDED_START,
      	BUILT_IN_GOMP_LOOP_ULL_ORDERED_RUNTIME_START,
      	BUILT_IN_GOMP_LOOP_ULL_STATIC_NEXT,
      	BUILT_IN_GOMP_LOOP_ULL_DYNAMIC_NEXT,
      	BUILT_IN_GOMP_LOOP_ULL_GUIDED_NEXT,
      	BUILT_IN_GOMP_LOOP_ULL_RUNTIME_NEXT,
      	BUILT_IN_GOMP_LOOP_ULL_ORDERED_STATIC_NEXT,
      	BUILT_IN_GOMP_LOOP_ULL_ORDERED_DYNAMIC_NEXT,
      	BUILT_IN_GOMP_LOOP_ULL_ORDERED_GUIDED_NEXT,
      	BUILT_IN_GOMP_LOOP_ULL_ORDERED_RUNTIME_NEXT): New builtins.
      	* gimplify.c (gimplify_omp_for): Allow pointer type for decl,
      	handle POINTER_PLUS_EXPR.  If loop counter has been replaced and
      	original iterator is present in lastprivate clause or if
      	collapse > 1, set OMP_CLAUSE_LASTPRIVATE_STMT.  Handle collapsed
      	OMP_FOR loops, adjust for OMP_FOR_{INIT,COND,INCR} changes.
      	(gimplify_expr): Handle OMP_SECTIONS_SWITCH and OMP_TASK.
      	(enum gimplify_omp_var_data): Add GOVD_PRIVATE_OUTER_REF.
      	(omp_notice_variable): Set GOVD_PRIVATE_OUTER_REF if needed,
      	if it is set, lookup var in outer contexts too.  Handle
      	OMP_CLAUSE_DEFAULT_FIRSTPRIVATE.  Handle vars that are supposed
      	to be implicitly determined firstprivate for task regions.
      	(gimplify_scan_omp_clauses): Set GOVD_PRIVATE_OUTER_REF if needed,
      	if it is set, lookup var in outer contexts too.  Set
      	OMP_CLAUSE_PRIVATE_OUTER_REF if GOVD_PRIVATE_OUTER_REF is set.
      	Handle OMP_CLAUSE_LASTPRIVATE_STMT, OMP_CLAUSE_COLLAPSE and
      	OMP_CLAUSE_UNTIED.  Take region_type as last argument
      	instead of in_parallel and in_combined_parallel.
      	(gimplify_omp_parallel, gimplify_omp_for, gimplify_omp_workshare):
      	Adjust callers.
      	(gimplify_adjust_omp_clauses_1): Set OMP_CLAUSE_PRIVATE_OUTER_REF if
      	GOVD_PRIVATE_OUTER_REF is set.  Call omp_finish_clause
      	langhook.
      	(new_omp_context): Set default_kind to
      	OMP_CLAUSE_DEFAULT_UNSPECIFIED for OMP_TASK regions.
      	(omp_region_type): New enum.
      	(struct gimplify_omp_ctx): Remove is_parallel and is_combined_parallel
      	fields, add region_type.
      	(new_omp_context): Take region_type as argument instead of is_parallel
      	and is_combined_parallel.
      	(gimple_add_tmp_var, omp_firstprivatize_variable, omp_notice_variable,
      	omp_is_private, omp_check_private): Adjust ctx->is_parallel and
      	ctx->is_combined_parallel checks.
      	(gimplify_omp_task): New function.
      	(gimplify_adjust_omp_clauses): Handle OMP_CLAUSE_COLLAPSE and
      	OMP_CLAUSE_UNTIED.
      	* omp-low.c (extract_omp_for_data): Use schedule(static)
      	for schedule(auto).  Handle pointer and unsigned iterators.
      	Compute fd->iter_type.  Handle POINTER_PLUS_EXPR increments.
      	Add loops argument.  Extract data for collapsed OMP_FOR loops.
      	(expand_parallel_call): Assert sched_kind isn't auto,
      	map runtime schedule to index 3.
      	(struct omp_for_data_loop): New type.
      	(struct omp_for_data): Remove v, n1, n2, step, cond_code fields.
      	Add loop, loops, collapse and iter_type fields.
      	(workshare_safe_to_combine_p): Disallow combined for if
      	iter_type is unsigned long long.  Don't combine collapse > 1 loops
      	unless all bounds and steps are constant.  Adjust extract_omp_for_data
      	caller.
      	(expand_omp_for_generic): Handle pointer, unsigned and long long
      	iterators.  Handle collapsed OMP_FOR loops.  Adjust
      	for struct omp_for_data changes.  If libgomp function doesn't return
      	boolean_type_node, add comparison of the return value with 0.
      	(expand_omp_for_static_nochunk, expand_omp_for_static_chunk): Handle
      	pointer, unsigned and long long iterators.  Adjust for struct
      	omp_for_data changes.
      	(expand_omp_for): Assert sched_kind isn't auto, map runtime schedule
      	to index 3.  Use GOMP_loop_ull*{start,next} if iter_type is
      	unsigned long long.  Allocate loops array, pass it to
      	extract_omp_for_data.  For collapse > 1 loops use always
      	expand_omp_for_generic.
      	(omp_context): Add sfield_map and srecord_type fields.
      	(is_task_ctx, lookup_sfield): New functions.
      	(use_pointer_for_field): Use is_task_ctx helper.  Change first
      	argument's type from const_tree to tree.  Clarify comment.
      	In OMP_TASK disallow copy-in/out sharing.
      	(build_sender_ref): Call lookup_sfield instead of lookup_field.
      	(install_var_field): Add mask argument.  Populate both record_type
      	and srecord_type if needed.
      	(delete_omp_context): Destroy sfield_map, clear DECL_ABSTRACT_ORIGIN
      	in srecord_type.
      	(fixup_child_record_type): Also remap FIELD_DECL's DECL_SIZE{,_UNIT}
      	and DECL_FIELD_OFFSET.
      	(scan_sharing_clauses): Adjust install_var_field callers.  For
      	firstprivate clauses on explicit tasks allocate the var by value in
      	record_type unconditionally, rather than by reference.
      	Handle OMP_CLAUSE_PRIVATE_OUTER_REF.  Scan OMP_CLAUSE_LASTPRIVATE_STMT.
      	Use is_taskreg_ctx instead of is_parallel_ctx.
      	Handle OMP_CLAUSE_COLLAPSE and OMP_CLAUSE_UNTIED.
      	(create_omp_child_function_name): Add task_copy argument, use
      	*_omp_cpyfn* names if it is true.
      	(create_omp_child_function): Add task_copy argument, if true create
      	*_omp_cpyfn* helper function.
      	(scan_omp_parallel): Adjust create_omp_child_function callers.
      	Rename parallel_nesting_level to taskreg_nesting_level.
      	(scan_omp_task): New function.
      	(lower_rec_input_clauses): Don't run constructors for firstprivate
      	explicit task vars which are initialized by *_omp_cpyfn*.  
      	Pass outer var ref to omp_clause_default_ctor hook if
      	OMP_CLAUSE_PRIVATE_OUTER_REF or OMP_CLAUSE_LASTPRIVATE.
      	Replace OMP_CLAUSE_REDUCTION_PLACEHOLDER decls in
      	OMP_CLAUSE_REDUCTION_INIT.
      	(lower_send_clauses): Clear DECL_ABSTRACT_ORIGIN if in task to
      	avoid duplicate setting of fields.  Handle
      	OMP_CLAUSE_PRIVATE_OUTER_REF.
      	(lower_send_shared_vars): Use srecord_type if non-NULL.  Don't
      	copy-out if TREE_READONLY, only copy-in.
      	(expand_task_copyfn): New function.
      	(expand_task_call): New function.
      	(struct omp_taskcopy_context): New type.
      	(task_copyfn_copy_decl, task_copyfn_remap_type, create_task_copyfn):
      	New functions.
      	(lower_omp_parallel): Rename to...
      	(lower_omp_taskreg): ... this.  Use OMP_TASKREG_* macros where needed.
      	Call create_task_copyfn if srecord_type is needed.  Adjust
      	sender_decl type.
      	(task_shared_vars): New variable.
      	(check_omp_nesting_restrictions): Warn if work-sharing,
      	barrier, master or ordered region is closely nested inside OMP_TASK.
      	Add warnings for barrier if closely nested inside of work-sharing,
      	ordered, or master region.
      	(scan_omp_1): Call check_omp_nesting_restrictions even for
      	GOMP_barrier calls.  Rename parallel_nesting_level to
      	taskreg_nesting_level.  Handle OMP_TASK.
      	(lower_lastprivate_clauses): Even if some lastprivate is found on a
      	work-sharing construct, continue looking for them on parent parallel
      	construct.
      	(lower_omp_for_lastprivate): Add lastprivate clauses
      	to the beginning of dlist rather than end.  Adjust for struct
      	omp_for_data changes.
      	(lower_omp_for): Add rec input clauses before OMP_FOR_PRE_BODY,
      	not after it.  Handle collapsed OMP_FOR loops, adjust for
      	OMP_FOR_{INIT,COND,INCR} changes, adjust extract_omp_for_data
      	caller.
      	(get_ws_args_for): Adjust extract_omp_for_data caller.
      	(scan_omp_for): Handle collapsed OMP_FOR
      	loops, adjust for OMP_FOR_{INIT,COND,INCR} changes.
      	(lower_omp_single_simple): If libgomp function doesn't return
      	boolean_type_node, add comparison of the return value with 0.
      	(diagnose_sb_1, diagnose_sb_2): Handle collapsed OMP_FOR
      	loops, adjust for OMP_FOR_{INIT,COND,INCR} changes.  Handle OMP_TASK.
      	(parallel_nesting_level): Rename to...
      	(taskreg_nesting_level): ... this.
      	(is_taskreg_ctx): New function.
      	(build_outer_var_ref, omp_copy_decl): Use is_taskreg_ctx instead
      	of is_parallel_ctx.
      	(execute_lower_omp): Rename parallel_nesting_level to
      	taskreg_nesting_level.
      	(expand_omp_parallel): Rename to...
      	(expand_omp_taskreg): ... this.  Use OMP_TASKREG_* macros where needed.
      	Call omp_task_call for OMP_TASK regions.
      	(expand_omp): Adjust caller, handle OMP_TASK.
      	(lower_omp_1): Adjust lower_omp_taskreg caller, handle OMP_TASK.
      
      	* bitmap.c (bitmap_default_obstack_depth): New variable.
      	(bitmap_obstack_initialize, bitmap_obstack_release): Do nothing
      	if argument is NULL and bitmap_default_obstack is already initialized.
      	* ipa-struct-reorg.c (do_reorg_1): Call bitmap_obstack_release
      	at the end.
      	* matrix-reorg.c (matrix_reorg): Likewise.
      cp/
      	* cp-tree.h (cxx_omp_finish_clause, cxx_omp_create_clause_info,
      	dependent_omp_for_p, begin_omp_task, finish_omp_task,
      	finish_omp_taskwait): New prototypes.
      	(cxx_omp_clause_default_ctor): Add outer argument.
      	(finish_omp_for): Add new clauses argument.
      	* cp-gimplify.c (cxx_omp_finish_clause): New function.
      	(cxx_omp_predetermined_sharing): Moved from semantics.c, rewritten.
      	(cxx_omp_clause_default_ctor): Add outer argument.
      	(cp_genericize_r): Walk OMP_CLAUSE_LASTPRIVATE_STMT.
      	* cp-objcp-common.h (LANG_HOOKS_OMP_FINISH_CLAUSE): Define.
      	* parser.c (cp_parser_omp_for_loop): Parse collapsed for loops.
      	Add par_clauses argument.  If decl is present in parallel's
      	lastprivate clause, change that clause to shared and add
      	a lastprivate clause for decl to OMP_FOR_CLAUSES.
      	Fix wording of error messages.  Adjust finish_omp_for caller.
      	Add clauses argument.  Parse loops with random access iterators.
      	(cp_parser_omp_clause_collapse, cp_parser_omp_clause_untied): New
      	functions.
      	(cp_parser_omp_for, cp_parser_omp_parallel): Adjust
      	cp_parser_omp_for_loop callers.
      	(cp_parser_omp_for_cond, cp_parser_omp_for_incr): New helper
      	functions.
      	(cp_parser_omp_clause_name): Handle collapse and untied
      	clauses.
      	(cp_parser_omp_clause_schedule): Handle auto schedule.
      	(cp_parser_omp_all_clauses): Handle PRAGMA_OMP_CLAUSE_COLLAPSE
      	and PRAGMA_OMP_CLAUSE_UNTIED.
      	(OMP_FOR_CLAUSE_MASK): Add PRAGMA_OMP_CLAUSE_COLLAPSE.
      	(OMP_TASK_CLAUSE_MASK): Define.
      	(cp_parser_omp_task, cp_parser_omp_taskwait): New functions.
      	(cp_parser_omp_construct): Handle PRAGMA_OMP_TASK.
      	(cp_parser_pragma): Handle PRAGMA_OMP_TASK and
      	PRAGMA_OMP_TASKWAIT.
      	* pt.c (tsubst_omp_clauses): Handle OMP_CLAUSE_COLLAPSE and
      	OMP_CLAUSE_UNTIED.  Handle OMP_CLAUSE_LASTPRIVATE_STMT.
      	(tsubst_omp_for_iterator): New function.
      	(dependent_omp_for_p): New function.
      	(tsubst_expr) <case OMP_FOR>: Use it.  Handle collapsed OMP_FOR
      	loops.  Adjust finish_omp_for caller.  Handle loops with random
      	access iterators.  Adjust for OMP_FOR_{INIT,COND,INCR} changes.
      	(tsubst_expr): Handle OMP_TASK.
      	* semantics.c (cxx_omp_create_clause_info): New function.
      	(finish_omp_clauses): Call it.  Handle OMP_CLAUSE_UNTIED and
      	OMP_CLAUSE_COLLAPSE.
      	(cxx_omp_predetermined_sharing): Removed.
      	* semantics.c (finish_omp_for): Allow pointer iterators.  Use
      	handle_omp_for_class_iterator and dependent_omp_for_p.  Handle
      	collapsed for loops.  Adjust c_finish_omp_for caller.  Add new
      	clauses argument.  Fix check for type dependent cond or incr.
      	Set OMP_FOR_CLAUSES to clauses.  Use cp_convert instead of
      	fold_convert to convert incr amount to difference_type.  Only
      	fold if not in template.  If decl is mentioned in lastprivate
      	clause, set OMP_CLAUSE_LASTPRIVATE_STMT.  Handle loops with random
      	access iterators.  Adjust for OMP_FOR_{INIT,COND,INCR}
      	changes.
      	(finish_omp_threadprivate): Allow static class members of the
      	current class.
      	(handle_omp_for_class_iterator, begin_omp_task, finish_omp_task,
      	finish_omp_taskwait): New functions.
      
      	* parser.c (cp_parser_binary_expression): Add prec argument.
      	(cp_parser_assignment_expression): Adjust caller.
      	* cp-tree.h (outer_curly_brace_block): New prototype.
      	* decl.c (outer_curly_brace_block): No longer static.
      fortran/
      	* scanner.c (skip_free_comments, skip_fixed_comments): Handle tabs.
      	* parse.c (next_free): Allow tab after !$omp.
      	(decode_omp_directive): Handle !$omp task, !$omp taskwait
      	and !$omp end task.
      	(case_executable): Add ST_OMP_TASKWAIT.
      	(case_exec_markers): Add ST_OMP_TASK.
      	(gfc_ascii_statement): Handle ST_OMP_TASK, ST_OMP_END_TASK and
      	ST_OMP_TASKWAIT.
      	(parse_omp_structured_block, parse_executable): Handle ST_OMP_TASK.
      	* gfortran.h (gfc_find_sym_in_expr): New prototype.
      	(gfc_statement): Add ST_OMP_TASK, ST_OMP_END_TASK and ST_OMP_TASKWAIT.
      	(gfc_omp_clauses): Add OMP_SCHED_AUTO to sched_kind,
      	OMP_DEFAULT_FIRSTPRIVATE to default_sharing.  Add collapse and
      	untied fields.
      	(gfc_exec_op): Add EXEC_OMP_TASK and EXEC_OMP_TASKWAIT.
      	* f95-lang.c (LANG_HOOKS_OMP_CLAUSE_COPY_CTOR,
      	LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP, LANG_HOOKS_OMP_CLAUSE_DTOR,
      	LANG_HOOKS_OMP_PRIVATE_OUTER_REF): Define.
      	* trans.h (gfc_omp_clause_default_ctor): Add another argument.
      	(gfc_omp_clause_copy_ctor, gfc_omp_clause_assign_op,
      	gfc_omp_clause_dtor, gfc_omp_private_outer_ref): New prototypes.
      	* types.def (BT_ULONGLONG, BT_PTR_ULONGLONG,
      	BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR,
      	BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULLPTR_ULLPTR,
      	BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
      	BT_FN_VOID_PTR_PTR, BT_PTR_FN_VOID_PTR_PTR,
      	BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT): New.
      	(BT_BOOL): Use integer type with BOOL_TYPE_SIZE rather
      	than boolean_type_node.
      	* dump-parse-tree.c (gfc_show_omp_node): Handle EXEC_OMP_TASK,
      	EXEC_OMP_TASKWAIT, OMP_SCHED_AUTO, OMP_DEFAULT_FIRSTPRIVATE,
      	untied and collapse clauses.
      	(gfc_show_code_node): Handle EXEC_OMP_TASK and EXEC_OMP_TASKWAIT.
      	* trans.c (gfc_trans_code): Handle EXEC_OMP_TASK and
      	EXEC_OMP_TASKWAIT.
      	* st.c (gfc_free_statement): Likewise.
      	* resolve.c (gfc_resolve_blocks, resolve_code): Likewise.
      	(find_sym_in_expr): Rename to...
      	(gfc_find_sym_in_expr): ... this.  No longer static.
      	(resolve_allocate_expr, resolve_ordinary_assign): Adjust caller.
      	* match.h (gfc_match_omp_task, gfc_match_omp_taskwait): New
      	prototypes.
      	* openmp.c (resolve_omp_clauses): Allow allocatable arrays in
      	firstprivate, lastprivate, reduction, copyprivate and copyin
      	clauses.
      	(omp_current_do_code): Made static.
      	(omp_current_do_collapse): New variable.
      	(gfc_resolve_omp_do_blocks): Compute omp_current_do_collapse,
      	clear omp_current_do_code and omp_current_do_collapse on return.
      	(gfc_resolve_do_iterator): Handle collapsed do loops.
      	(resolve_omp_do): Likewise, diagnose errorneous collapsed do loops.
      	(OMP_CLAUSE_COLLAPSE, OMP_CLAUSE_UNTIED): Define.
      	(gfc_match_omp_clauses): Handle default (firstprivate),
      	schedule (auto), untied and collapse (n) clauses.
      	(OMP_DO_CLAUSES): Add OMP_CLAUSE_COLLAPSE.
      	(OMP_TASK_CLAUSES): Define.
      	(gfc_match_omp_task, gfc_match_omp_taskwait): New functions.
      	* trans-openmp.c (gfc_omp_private_outer_ref): New function.
      	(gfc_omp_clause_default_ctor): Add outer argument.  For allocatable
      	arrays allocate them with the bounds of the outer var if outer
      	var is allocated.
      	(gfc_omp_clause_copy_ctor, gfc_omp_clause_assign_op,
      	gfc_omp_clause_dtor): New functions.
      	(gfc_trans_omp_array_reduction): If decl is allocatable array,
      	allocate it with outer var's bounds in OMP_CLAUSE_REDUCTION_INIT
      	and deallocate it in OMP_CLAUSE_REDUCTION_MERGE.
      	(gfc_omp_predetermined_sharing): Return OMP_CLAUSE_DEFAULT_SHARED
      	for assumed-size arrays.
      	(gfc_trans_omp_do): Add par_clauses argument.  If dovar is
      	present in lastprivate clause and do loop isn't simple,
      	set OMP_CLAUSE_LASTPRIVATE_STMT.  If dovar is present in
      	parallel's lastprivate clause, change it to shared and add
      	lastprivate clause to OMP_FOR_CLAUSES.  Handle collapsed do loops.
      	(gfc_trans_omp_directive): Adjust gfc_trans_omp_do callers.
      	(gfc_trans_omp_parallel_do): Likewise.  Move collapse clause to
      	OMP_FOR from OMP_PARALLEL.
      	(gfc_trans_omp_clauses): Handle OMP_SCHED_AUTO,
      	OMP_DEFAULT_FIRSTPRIVATE, untied and collapse clauses.
      	(gfc_trans_omp_task, gfc_trans_omp_taskwait): New functions.
      	(gfc_trans_omp_directive): Handle EXEC_OMP_TASK and
      	EXEC_OMP_TASKWAIT.
      gcc/testsuite/
      	* gcc.dg/gomp/collapse-1.c: New test.
      	* gcc.dg/gomp/nesting-1.c: New test.
      	* g++.dg/gomp/task-1.C: New test.
      	* g++.dg/gomp/predetermined-1.C: New test.
      	* g++.dg/gomp/tls-4.C: New test.
      	* gfortran.dg/gomp/collapse1.f90: New test.
      	* gfortran.dg/gomp/sharing-3.f90: New test.
      	* gcc.dg/gomp/pr27499.c (foo): Remove is unsigned dg-warning.
      	* g++.dg/gomp/pr27499.C (foo): Likewise.
      	* g++.dg/gomp/for-16.C (foo): Likewise.
      	* g++.dg/gomp/tls-3.C: Remove dg-error, add S::s definition.
      	* g++.dg/gomp/pr34607.C: Adjust dg-error location.
      	* g++.dg/gomp/for-16.C (foo): Add a new dg-error.
      	* gcc.dg/gomp/appendix-a/a.35.4.c: Add dg-warning.
      	* gcc.dg/gomp/appendix-a/a.35.6.c: Likewise.
      	* gfortran.dg/gomp/appendix-a/a.35.4.f90: Likewise.
      	* gfortran.dg/gomp/appendix-a/a.35.6.f90: Likewise.
      	* gfortran.dg/gomp/omp_parse1.f90: Remove !$omp tab test.
      	* gfortran.dg/gomp/appendix-a/a.33.4.f90: Remove dg-error
      	about allocatable array.
      	* gfortran.dg/gomp/reduction1.f90: Likewise.
      libgomp/
      	* configure.ac (LIBGOMP_GNU_SYMBOL_VERSIONING): New AC_DEFINE.
      	Substitute also OMP_*LOCK_25*.
      	* configure: Regenerated.
      	* config.h.in: Regenerated.
      	* Makefile.am (libgomp_la_SOURCES): Add loop_ull.c, iter_ull.c,
      	ptrlock.c and task.c.
      	* Makefile.in: Regenerated.
      	* testsuite/Makefile.in: Regenerated.
      	* task.c: New file.
      	* loop_ull.c: New file.
      	* iter_ull.c: New file.
      	* libgomp.h: Include ptrlock.h.
      	(enum gomp_task_kind): New type.
      	(struct gomp_team): Add task_lock, task_queue, task_count,
      	task_running_count, single_count fields.  Add
      	work_share_list_free_lock ifndef HAVE_SYNC_BUILTINS.
      	Remove work_share_lock, generation_mask,
      	oldest_live_gen, num_live_gen and init_work_shares fields, add
      	work work_share_list_alloc, work_share_list_free and work_share_chunk
      	fields.  Change work_shares from pointer to pointers into an array.
      	Change ordered_release field into gomp_sem_t ** from flexible array
      	member.  Add implicit_task and initial_work_shares fields.
      	Move close to the end of the struct.
      	(struct gomp_team_state): Add single_count, last_work_share,
      	active_level and level fields, remove work_share_generation.
      	(gomp_barrier_handle_tasks): New prototype.
      	(gomp_finish_task): New inline function.
      	(struct gomp_work_share): Move chunk_size, end, incr into
      	transparent union/struct, add chunk_size_ull, end_ll, incr_ll and
      	next_ll fields.  Reshuffle fields.  Add next_alloc,
      	next_ws, next_free and inline_ordered_team_ids fields, change
      	ordered_team_ids into pointer from flexible array member.
      	Add mode field.  Put lock and next into a different cache line
      	from most of the write-once fields.
      	(gomp_iter_ull_static_next, gomp_iter_ull_dynamic_next_locked,
      	gomp_iter_ull_guided_next_locked, gomp_iter_ull_dynamic_next,
      	gomp_iter_ull_guided_next): New prototypes.
      	(gomp_new_icv): New prototype.
      	(struct gomp_thread): Add thread_pool and task fields.
      	(struct gomp_thread_pool): New type.
      	(gomp_new_team): New prototype.
      	(gomp_team_start): Change type of last argument.
      	(gomp_new_work_share): Removed.
      	(gomp_init_work_share, gomp_fini_work_share): New prototypes.
      	(gomp_work_share_init_done): New static inline.
      	(gomp_throttled_spin_count_var, gomp_available_cpus,
      	gomp_managed_threads): New extern decls.
      	(gomp_init_task): New prototype.
      	(gomp_spin_count_var): New extern var decl.
      	(LIBGOMP_GNU_SYMBOL_VERSIONING): Undef if no visibility
      	or no alias support, or if not PIC.
      	(gomp_init_lock_30, gomp_destroy_lock_30, gomp_set_lock_30,
      	gomp_unset_lock_30, gomp_test_lock_30, gomp_init_nest_lock_30,
      	gomp_destroy_nest_lock_30, gomp_set_nest_lock_30,
      	gomp_unset_nest_lock_30, gomp_test_nest_lock_30, gomp_init_lock_25,
      	gomp_destroy_lock_25, gomp_set_lock_25, gomp_unset_lock_25,
      	gomp_test_lock_25, gomp_init_nest_lock_25, gomp_destroy_nest_lock_25,
      	gomp_set_nest_lock_25, gomp_unset_nest_lock_25,
      	gomp_test_nest_lock_25): New prototypes.
      	(omp_lock_symver, strong_alias): Define.
      	(gomp_remaining_threads_count, gomp_remaining_threads_lock): New
      	decls.
      	(gomp_end_task): New.
      	(struct gomp_task_icv, gomp_global_icv): New.
      	(gomp_thread_limit_var, gomp_max_active_levels_var): New.
      	(struct gomp_task): New.
      	(gomp_nthreads_var, gomp_dyn_var, gomp_nest_var,
      	gomp_run_sched_var, gomp_run_sched_chunk): Remove.
      	(gomp_icv): New.
      	(gomp_schedule_type): Reorder enum to match
      	omp_sched_t.
      	* team.c (struct gomp_thread_start_data): Add thread_pool and task
      	fields.
      	(gomp_thread_start): Add gomp_team_barrier_wait call.
      	For non-nested case remove clearing of docked thread thr fields.
      	Use pool fields instead of global gomp_* variables.  Use
      	gomp_barrier_wait_last when needed.  Initialize ts.active_level.
      	Create tasks for each member thread.
      	(free_team): Only destroy team barrier, task_lock here and free it.
      	(gomp_free_thread): Free last_team if non-NULL.
      	(gomp_team_end): Call gomp_team_barrier_wait instead of
      	gomp_barrier_wait.  For nested case call one extra
      	gomp_barrier_wait.  Move here some destruction from free_team.
      	Call free_team on pool->last_team if any, rather than freeing
      	current team.  Destroy work_share_list_free_lock ifndef
      	HAVE_SYNC_BUILTINS.
      	(gomp_new_icv): New function.
      	(gomp_threads, gomp_threads_size, gomp_threads_used,
      	gomp_threads_dock): Removed.
      	(gomp_thread_destructor): New variable.
      	(gomp_new_thread_pool, gomp_free_pool_helper, gomp_free_thread): New
      	functions.
      	(gomp_team_start): Create new pool if current thread doesn't have
      	one.  Use pool fields instead of global gomp_* variables. 
      	Initialize thread_pool field for new threads.  Clear single_count.
      	Change last argument from ws to team, don't create
      	new team, set ts.work_share to &team->work_shares[0] and clear
      	ts.last_work_share.  Don't clear ts.work_share_generation.
      	If number of threads changed, adjust atomically gomp_managed_threads.
      	Use gomp_init_task instead of gomp_new_task,
      	set thr->task to the corresponding implicit_task array entry.
      	Create tasks for each member thread.  Initialize ts.level.
      	(initialize_team): Call pthread_key_create on
      	gomp_thread_destructor.
      	(team_destructor): New function.
      	(new_team): Removed.
      	(gomp_new_team): New function.
      	(free_team): Free gomp_work_share blocks chained through next_alloc,
      	instead of freeing work_shares and destroying work_share_lock.
      	(gomp_team_end): Call gomp_fini_work_share.  If number of threads
      	changed, adjust atomically gomp_managed_threads.  Use gomp_end_task.
      	* barrier.c (GOMP_barrier): Call gomp_team_barrier_wait instead
      	of gomp_barrier_wait.
      	* single.c (GOMP_single_copy_start): Call gomp_team_barrier_wait
      	instead of gomp_barrier_wait.  Call gomp_work_share_init_done
      	if gomp_work_share_start returned true.  Don't unlock ws->lock.
      	(GOMP_single_copy_end): Call gomp_team_barrier_wait instead
      	of gomp_barrier_wait.
      	(GOMP_single_start): Rewritten if HAVE_SYNC_BUILTINS.  Call
      	gomp_work_share_init_done if gomp_work_share_start returned true.
      	Don't unlock ws->lock.
      	* work.c: Include stddef.h.
      	(free_work_share): Use work_share_list_free_lock instead
      	of atomic chaining ifndef HAVE_SYNC_BUILTINS.  Add team argument.
      	Call gomp_fini_work_share and then either free ws if orphaned, or
      	put it into work_share_list_free list of the current team.
      	(alloc_work_share, gomp_init_work_share, gomp_fini_work_share): New
      	functions.
      	(gomp_work_share_start, gomp_work_share_end,
      	gomp_work_share_end_nowait): Rewritten.
      	* omp_lib.f90.in Change some tabs to spaces to prevent warnings.
      	(openmp_version): Set to 200805.
      	(omp_sched_kind, omp_sched_static, omp_sched_dynamic,
      	omp_sched_guided, omp_sched_auto): New parameters.
      	(omp_set_schedule, omp_get_schedule, omp_get_thread_limit,
      	omp_set_max_active_levels, omp_get_max_active_levels,
      	omp_get_level, omp_get_ancestor_thread_num, omp_get_team_size,
      	omp_get_active_level): New interfaces.
      	* omp_lib.h.in (openmp_version): Set to 200805.
      	(omp_sched_kind, omp_sched_static, omp_sched_dynamic,
      	omp_sched_guided, omp_sched_auto): New parameters.
      	(omp_set_schedule, omp_get_schedule, omp_get_thread_limit,
      	omp_set_max_active_levels, omp_get_max_active_levels,
      	omp_get_level, omp_get_ancestor_thread_num, omp_get_team_size,
      	omp_get_active_level): New externals.
      	* loop.c: Include limits.h.
      	(GOMP_loop_runtime_next, GOMP_loop_ordered_runtime_next): Handle
      	GFS_AUTO.
      	(GOMP_loop_runtime_start, GOMP_loop_ordered_runtime_start):
      	Likewise.  Use gomp_icv.
      	(gomp_loop_static_start, gomp_loop_dynamic_start): Clear
      	ts.static_trip here.
      	(gomp_loop_static_start, gomp_loop_ordered_static_start): Call
      	gomp_work_share_init_done after gomp_loop_init.  Don't unlock ws->lock.
      	(gomp_loop_dynamic_start, gomp_loop_guided_start): Call
      	gomp_work_share_init_done after gomp_loop_init.  If HAVE_SYNC_BUILTINS,
      	don't unlock ws->lock, otherwise lock it.
      	(gomp_loop_ordered_dynamic_start, gomp_loop_ordered_guided_start): Call
      	gomp_work_share_init_done after gomp_loop_init.  Lock ws->lock.
      	(gomp_parallel_loop_start): Call gomp_new_team instead of
      	gomp_new_work_share.  Call gomp_loop_init on &team->work_shares[0].
      	Adjust gomp_team_start caller.  Pass 0 as second argument to
      	gomp_resolve_num_threads.
      	(gomp_loop_init): For GFS_DYNAMIC, multiply ws->chunk_size by incr.
      	If adding ws->chunk_size nthreads + 1 times after end won't
      	overflow, set ws->mode to 1.
      	* libgomp_g.h (GOMP_loop_ull_static_start, GOMP_loop_ull_dynamic_start,
      	GOMP_loop_ull_guided_start, GOMP_loop_ull_runtime_start,
      	GOMP_loop_ull_ordered_static_start,
      	GOMP_loop_ull_ordered_dynamic_start,
      	GOMP_loop_ull_ordered_guided_start,
      	GOMP_loop_ull_ordered_runtime_start, GOMP_loop_ull_static_next,
      	GOMP_loop_ull_dynamic_next, GOMP_loop_ull_guided_next,
      	GOMP_loop_ull_runtime_next, GOMP_loop_ull_ordered_static_next,
      	GOMP_loop_ull_ordered_dynamic_next, GOMP_loop_ull_ordered_guided_next,
      	GOMP_loop_ull_ordered_runtime_next, GOMP_task, GOMP_taskwait): New
      	prototypes.
      	* libgomp.map: Export lock routines also @@OMP_2.0.
      	(GOMP_loop_ordered_dynamic_first,
      	GOMP_loop_ordered_guided_first, GOMP_loop_ordered_runtime_first,
      	GOMP_loop_ordered_static_first): Remove.
      	(GOMP_loop_ull_dynamic_next, GOMP_loop_ull_dynamic_start,
      	GOMP_loop_ull_guided_next, GOMP_loop_ull_guided_start,
      	GOMP_loop_ull_ordered_dynamic_next,
      	GOMP_loop_ull_ordered_dynamic_start,
      	GOMP_loop_ull_ordered_guided_next,
      	GOMP_loop_ull_ordered_guided_start,
      	GOMP_loop_ull_ordered_runtime_next,
      	GOMP_loop_ull_ordered_runtime_start,
      	GOMP_loop_ull_ordered_static_next,
      	GOMP_loop_ull_ordered_static_start,
      	GOMP_loop_ull_runtime_next, GOMP_loop_ull_runtime_start,
      	GOMP_loop_ull_static_next, GOMP_loop_ull_static_start,
      	GOMP_task, GOMP_taskwait): Export @@GOMP_2.0.
      	(omp_set_schedule, omp_get_schedule,
      	omp_get_thread_limit, omp_set_max_active_levels,
      	omp_get_max_active_levels, omp_get_level,
      	omp_get_ancestor_thread_num, omp_get_team_size, omp_get_active_level,
      	omp_set_schedule_, omp_set_schedule_8_,
      	omp_get_schedule_, omp_get_schedule_8_, omp_get_thread_limit_,
      	omp_set_max_active_levels_, omp_set_max_active_levels_8_,
      	omp_get_max_active_levels_, omp_get_level_,
      	omp_get_ancestor_thread_num_, omp_get_ancestor_thread_num_8_,
      	omp_get_team_size_, omp_get_team_size_8_, omp_get_active_level_):
      	New exports @@OMP_3.0.
      	* omp.h.in (omp_sched_t): New type.
      	(omp_set_schedule, omp_get_schedule, omp_get_thread_limit,
      	omp_set_max_active_levels, omp_get_max_active_levels,
      	omp_get_level, omp_get_ancestor_thread_num, omp_get_team_size,
      	omp_get_active_level): New prototypes.
      	* env.c (gomp_spin_count_var, gomp_throttled_spin_count_var,
      	gomp_available_cpus, gomp_managed_threads, gomp_max_active_levels_var,
      	gomp_thread_limit_var, gomp_remaining_threads_count,
      	gomp_remaining_threads_lock): New variables.
      	(parse_spincount): New function.
      	(initialize_env): Call gomp_init_num_threads unconditionally.
      	Initialize gomp_available_cpus.  Call parse_spincount,
      	initialize gomp_{,throttled_}spin_count_var
      	depending on presence and value of OMP_WAIT_POLICY and
      	GOMP_SPINCOUNT env vars.  Handle GOMP_BLOCKTIME env var.
      	Handle OMP_WAIT_POLICY, OMP_MAX_ACTIVE_LEVELS,
      	OMP_THREAD_LIMIT, OMP_STACKSIZE env vars.  Handle unit specification
      	for GOMP_STACKSIZE.  Initialize gomp_remaining_threads_count and
      	gomp_remaining_threads_lock if needed.  Use gomp_global_icv.
      	(gomp_nthreads_var, gomp_dyn_var, gomp_nest_var,
      	gomp_run_sched_var, gomp_run_sched_chunk): Remove.
      	(gomp_global_icv): New.
      	(parse_schedule): Use it.  Parse "auto".
      	(omp_set_num_threads): Use gomp_icv.
      	(omp_set_dynamic, omp_get_dynamic, omp_set_nested, omp_get_nested):
      	Likewise.
      	(omp_get_max_threads): Move from parallel.c.
      	(omp_set_schedule, omp_get_schedule, omp_get_thread_limit,
      	omp_set_max_active_levels, omp_get_max_active_levels): New functions,
      	add ialias.
      	(parse_stacksize, parse_wait_policy): New functions.
      	* fortran.c: Rewrite lock wrappers, if symbol versioning provide
      	both wrappers for compatibility and new locks.
      	(omp_set_schedule, omp_get_schedule,
      	omp_get_thread_limit, omp_set_max_active_levels,
      	omp_get_max_active_levels, omp_get_level,
      	omp_get_ancestor_thread_num, omp_get_team_size,
      	omp_get_active_level): New ialias_redirect.
      	(omp_set_schedule_, omp_set_schedule_8_,
      	omp_get_schedule_, omp_get_schedule_8_, omp_get_thread_limit_,
      	omp_set_max_active_levels_, omp_set_max_active_levels_8_,
      	omp_get_max_active_levels_, omp_get_level_,
      	omp_get_ancestor_thread_num_, omp_get_ancestor_thread_num_8_,
      	omp_get_team_size_, omp_get_team_size_8_, omp_get_active_level_):
      	New functions.
      	* parallel.c: Include limits.h.
      	(gomp_resolve_num_threads): Add count argument.  Rewritten.
      	(GOMP_parallel_start): Call gomp_new_team and pass that as last
      	argument to gomp_team_start.  Pass 0 as second argument to
      	gomp_resolve_num_threads.
      	(GOMP_parallel_end): Decrease gomp_remaining_threads_count
      	if gomp_thread_limit_var != ULONG_MAX.
      	(omp_in_parallel): Implement using ts.active_level.
      	(omp_get_max_threads): Move to env.c.
      	(omp_get_level, omp_get_ancestor_thread_num,
      	omp_get_team_size, omp_get_active_level): New functions,
      	add ialias.
      	* sections.c (GOMP_sections_start): Call gomp_work_share_init_done
      	after gomp_sections_init.  If HAVE_SYNC_BUILTINS, call
      	gomp_iter_dynamic_next instead of the _locked variant and don't take
      	lock around it, otherwise acquire it before calling
      	gomp_iter_dynamic_next_locked.
      	(GOMP_sections_next): If HAVE_SYNC_BUILTINS, call
      	gomp_iter_dynamic_next instead of the _locked variant and don't take
      	lock around it.
      	(GOMP_parallel_sections_start): Call gomp_new_team instead of
      	gomp_new_work_share.  Call gomp_sections_init on &team->work_shares[0].
      	Adjust gomp_team_start caller.  Pass count as second argument to
      	gomp_resolve_num_threads, don't adjust num_threads after the call.
      	Use gomp_icv.
      	* iter.c (gomp_iter_dynamic_next_locked): Don't multiply
      	ws->chunk_size by incr.
      	(gomp_iter_dynamic_next): Likewise.  If ws->mode, use more efficient
      	code.
      	* libgomp_f.h.in (omp_lock_25_arg_t, omp_nest_lock_25_arg_t): New
      	types.
      	(omp_lock_25_arg, omp_nest_lock_25_arg): New macros.
      	(omp_check_defines): Check even the compat defines.
      	* config/linux/ptrlock.c: New file.
      	* config/linux/ptrlock.h: New file.
      	* config/linux/wait.h: New file.
      	* config/posix/ptrlock.c: New file.
      	* config/posix/ptrlock.h: New file.
      	* config/linux/bar.h (gomp_team_barrier_wait,
      	gomp_team_barrier_wait_end, gomp_team_barrier_wake): New prototypes.
      	(gomp_team_barrier_set_task_pending,
      	gomp_team_barrier_clear_task_pending,
      	gomp_team_barrier_set_waiting_for_tasks,
      	gomp_team_barrier_waiting_for_tasks,
      	gomp_team_barrier_done): New inlines.
      	(gomp_barrier_t): Rewritten.
      	(gomp_barrier_state_t): New typedef.
      	(gomp_barrier_init, gomp_barrier_reinit, gomp_barrier_destroy,
      	gomp_barrier_wait_start): Rewritten.
      	(gomp_barrier_wait_end): Change second argument to
      	gomp_barrier_state_t.
      	(gomp_barrier_last_thread, gomp_barrier_wait_last): New static
      	inlines.
      	* config/linux/bar.c: Include wait.h instead of libgomp.h and
      	futex.h.
      	(gomp_barrier_wait_end): Rewritten.
      	(gomp_team_barrier_wait, gomp_team_barrier_wait_end,
      	gomp_team_barrier_wake, gomp_barrier_wait_last): New functions.
      	* config/posix/bar.h (gomp_barrier_t): Add generation field.
      	(gomp_barrier_state_t): New typedef.
      	(gomp_team_barrier_wait,
      	gomp_team_barrier_wait_end, gomp_team_barrier_wake): New prototypes.
      	(gomp_barrier_wait_start): Or all but low 2 bits from generation
      	into the return value.  Return gomp_barrier_state_t.
      	(gomp_team_barrier_set_task_pending,
      	gomp_team_barrier_clear_task_pending,
      	gomp_team_barrier_set_waiting_for_tasks,
      	gomp_team_barrier_waiting_for_tasks,
      	gomp_team_barrier_done): New inlines.
      	(gomp_barrier_wait_end): Change second argument to
      	gomp_barrier_state_t.
      	(gomp_barrier_last_thread, gomp_barrier_wait_last): New static
      	inlines.
      	* config/posix/bar.c (gomp_barrier_init): Clear generation field.
      	(gomp_barrier_wait_end): Change second argument to
      	gomp_barrier_state_t. 
      	(gomp_team_barrier_wait, gomp_team_barrier_wait_end,
      	gomp_team_barrier_wake): New functions.
      	* config/linux/mutex.c: Include wait.h instead of libgomp.h and
      	futex.h.
      	(gomp_futex_wake, gomp_futex_wait): New variables.
      	(gomp_mutex_lock_slow): Call do_wait instead of futex_wait.
      	* config/linux/lock.c: Rewrite to make locks task owned,
      	for backwards compatibility provide the old entrypoints
      	if symbol versioning.  Include wait.h instead of libgomp.h and
      	futex.h.
      	(gomp_set_nest_lock_25): Call do_wait instead of futex_wait.
      	* config/posix95/lock.c: Rewrite to make locks task owned,
      	for backwards compatibility provide the old entrypoints
      	if symbol versioning.
      	* config/posix/lock.c: Rewrite to make locks task owned,
      	for backwards compatibility provide the old entrypoints
      	if symbol versioning.
      	* config/linux/proc.c (gomp_init_num_threads): Use gomp_global_icv.
      	(get_num_procs, gomp_dynamic_max_threads): Use gomp_icv.
      	* config/posix/proc.c, config/mingw32/proc.c: Similarly.
      	* config/linux/powerpc/futex.h (FUTEX_WAIT, FUTEX_WAKE): Remove.
      	(sys_futex0): Return error code.
      	(futex_wake, futex_wait): If ENOSYS was returned, clear
      	FUTEX_PRIVATE_FLAG in gomp_futex_wa{ke,it} and retry.
      	(cpu_relax, atomic_write_barrier): New static inlines.
      	* config/linux/alpha/futex.h (FUTEX_WAIT, FUTEX_WAKE): Remove.
      	(futex_wake, futex_wait): If ENOSYS was returned, clear
      	FUTEX_PRIVATE_FLAG in gomp_futex_wa{ke,it} and retry.
      	(cpu_relax, atomic_write_barrier): New static inlines.
      	* config/linux/x86/futex.h (FUTEX_WAIT, FUTEX_WAKE): Remove.
      	(sys_futex0): Return error code.
      	(futex_wake, futex_wait): If ENOSYS was returned, clear
      	FUTEX_PRIVATE_FLAG in gomp_futex_wa{ke,it} and retry.
      	(cpu_relax, atomic_write_barrier): New static inlines.
      	* config/linux/s390/futex.h (FUTEX_WAIT, FUTEX_WAKE): Remove.
      	(sys_futex0): Return error code.
      	(futex_wake, futex_wait): If ENOSYS was returned, clear
      	FUTEX_PRIVATE_FLAG in gomp_futex_wa{ke,it} and retry.
      	(cpu_relax, atomic_write_barrier): New static inlines.
      	* config/linux/ia64/futex.h (FUTEX_WAIT, FUTEX_WAKE): Remove.
      	(sys_futex0): Return error code.
      	(futex_wake, futex_wait): If ENOSYS was returned, clear
      	FUTEX_PRIVATE_FLAG in gomp_futex_wa{ke,it} and retry.
      	(cpu_relax, atomic_write_barrier): New static inlines.
      	* config/linux/sparc/futex.h (FUTEX_WAIT, FUTEX_WAKE): Remove.
      	(sys_futex0): Return error code.
      	(futex_wake, futex_wait): If ENOSYS was returned, clear
      	FUTEX_PRIVATE_FLAG in gomp_futex_wa{ke,it} and retry.
      	(cpu_relax, atomic_write_barrier): New static inlines.
      	* config/linux/sem.c: Include wait.h instead of libgomp.h and
      	futex.h.
      	(gomp_sem_wait_slow): Call do_wait instead of futex_wait.
      	* config/linux/affinity.c: Assume HAVE_SYNC_BUILTINS.
      	* config/linux/omp-lock.h (omp_lock_25_t, omp_nest_lock_25_t): New
      	types.
      	(omp_nest_lock_t): Change owner into void *, add lock field.
      	* config/posix95/omp-lock.h: Include semaphore.h.
      	(omp_lock_25_t, omp_nest_lock_25_t): New types.
      	(omp_lock_t): Use sem_t instead of mutex if semaphores
      	aren't broken.
      	(omp_nest_lock_t): Likewise.  Change owner to void *.
      	* config/posix/omp-lock.h: Include semaphore.h.
      	(omp_lock_25_t, omp_nest_lock_25_t): New types.
      	(omp_lock_t): Use sem_t instead of mutex if semaphores
      	aren't broken.
      	(omp_nest_lock_t): Likewise.  Add owner field.
      
      	* testsuite/libgomp.c/collapse-1.c: New test.
      	* testsuite/libgomp.c/collapse-2.c: New test.
      	* testsuite/libgomp.c/collapse-3.c: New test.
      	* testsuite/libgomp.c/icv-1.c: New test.
      	* testsuite/libgomp.c/icv-2.c: New test.
      	* testsuite/libgomp.c/lib-2.c: New test.
      	* testsuite/libgomp.c/lock-1.c: New test.
      	* testsuite/libgomp.c/lock-2.c: New test.
      	* testsuite/libgomp.c/lock-3.c: New test.
      	* testsuite/libgomp.c/loop-4.c: New test.
      	* testsuite/libgomp.c/loop-5.c: New test.
      	* testsuite/libgomp.c/loop-6.c: New test.
      	* testsuite/libgomp.c/loop-7.c: New test.
      	* testsuite/libgomp.c/loop-8.c: New test.
      	* testsuite/libgomp.c/loop-9.c: New test.
      	* testsuite/libgomp.c/nested-3.c: New test.
      	* testsuite/libgomp.c/nestedfn-6.c: New test.
      	* testsuite/libgomp.c/sort-1.c: New test.
      	* testsuite/libgomp.c/task-1.c: New test.
      	* testsuite/libgomp.c/task-2.c: New test.
      	* testsuite/libgomp.c/task-3.c: New test.
      	* testsuite/libgomp.c/task-4.c: New test.
      	* testsuite/libgomp.c++/c++.exp: Add libstdc++-v3 build includes
      	to C++ testsuite default compiler options.
      	* testsuite/libgomp.c++/collapse-1.C: New test.
      	* testsuite/libgomp.c++/collapse-2.C: New test.
      	* testsuite/libgomp.c++/ctor-10.C: New test.
      	* testsuite/libgomp.c++/for-1.C: New test.
      	* testsuite/libgomp.c++/for-2.C: New test.
      	* testsuite/libgomp.c++/for-3.C: New test.
      	* testsuite/libgomp.c++/for-4.C: New test.
      	* testsuite/libgomp.c++/for-5.C: New test.
      	* testsuite/libgomp.c++/loop-8.C: New test.
      	* testsuite/libgomp.c++/loop-9.C: New test.
      	* testsuite/libgomp.c++/loop-10.C: New test.
      	* testsuite/libgomp.c++/task-1.C: New test.
      	* testsuite/libgomp.c++/task-2.C: New test.
      	* testsuite/libgomp.c++/task-3.C: New test.
      	* testsuite/libgomp.c++/task-4.C: New test.
      	* testsuite/libgomp.c++/task-5.C: New test.
      	* testsuite/libgomp.c++/task-6.C: New test.
      	* testsuite/libgomp.fortran/allocatable1.f90: New test.
      	* testsuite/libgomp.fortran/allocatable2.f90: New test.
      	* testsuite/libgomp.fortran/allocatable3.f90: New test.
      	* testsuite/libgomp.fortran/allocatable4.f90: New test.
      	* testsuite/libgomp.fortran/collapse1.f90: New test.
      	* testsuite/libgomp.fortran/collapse2.f90: New test.
      	* testsuite/libgomp.fortran/collapse3.f90: New test.
      	* testsuite/libgomp.fortran/collapse4.f90: New test.
      	* testsuite/libgomp.fortran/lastprivate1.f90: New test.
      	* testsuite/libgomp.fortran/lastprivate2.f90: New test.
      	* testsuite/libgomp.fortran/lib4.f90: New test.
      	* testsuite/libgomp.fortran/lock-1.f90: New test.
      	* testsuite/libgomp.fortran/lock-2.f90: New test.
      	* testsuite/libgomp.fortran/nested1.f90: New test.
      	* testsuite/libgomp.fortran/nestedfn4.f90: New test.
      	* testsuite/libgomp.fortran/strassen.f90: New test.
      	* testsuite/libgomp.fortran/tabs1.f90: New test.
      	* testsuite/libgomp.fortran/tabs2.f: New test.
      	* testsuite/libgomp.fortran/task1.f90: New test.
      	* testsuite/libgomp.fortran/task2.f90: New test.
      	* testsuite/libgomp.fortran/vla4.f90: Add dg-warning.
      	* testsuite/libgomp.fortran/vla5.f90: Likewise.
      	* testsuite/libgomp.c/pr26943-2.c: Likewise.
      	* testsuite/libgomp.c/pr26943-3.c: Likewise.
      	* testsuite/libgomp.c/pr26943-4.c: Likewise.
      
      Co-Authored-By: Jakob Blomer <jakob.blomer@ira.uka.de>
      Co-Authored-By: Richard Henderson <rth@redhat.com>
      Co-Authored-By: Ulrich Drepper <drepper@redhat.com>
      
      From-SVN: r136433
      Jakub Jelinek committed
  24. 07 Jun, 2007 1 commit
  25. 04 Apr, 2007 1 commit
    • libgomp.h (gomp_cpu_affinity, [...]): New extern decls. · a0884cf0
      	* libgomp.h (gomp_cpu_affinity, gomp_cpu_affinity_len): New extern
      	decls.
      	(gomp_init_affinity, gomp_init_thread_affinity): New prototypes.
      	* env.c (gomp_cpu_affinity, gomp_cpu_affinity_len): New variables.
      	(parse_affinity): New function.
      	(initialize_env): Call it and gomp_init_affinity.
      	* team.c (gomp_team_start): If gomp_cpu_affinity != NULL,
      	create new pthread_attr_t and call gomp_init_thread_affinity
      	on it for each thread before passing the attribute to pthread_create.
      	* config/linux/affinity.c: New file.
      	* config/posix/affinity.c: New file.
      	* configure.ac (HAVE_PTHREAD_AFFINITY_NP): New test.
      	* configure: Rebuilt.
      	* config.h.in: Rebuilt.
      	* Makefile.am (libgomp_la_SOURCES): Add affinity.c.
      	* Makefile.in: Rebuilt.
      
      From-SVN: r123494
      Jakub Jelinek committed
  26. 09 Jun, 2006 1 commit
    • env.c (gomp_nthreads_var): Change to unsigned long. · d0d1b24d
              * env.c (gomp_nthreads_var): Change to unsigned long.
              (gomp_run_sched_chunk): Likewise.
              (parse_unsigned_long): Rename from parse_num_threads and generalize.
              (initialize_env): Initialize gomp_thread_attr.
              * libgomp.h (gomp_nthreads_var): Update decl.
              (gomp_run_sched_chunk): Likewise.
              (gomp_thread_attr): Declare.
              * team.c (gomp_thread_attr): Export.
              (initialize_team): Don't initialize it.
      
      From-SVN: r114525
      Richard Henderson committed
  27. 21 Jan, 2006 1 commit
  28. 20 Jan, 2006 1 commit
  29. 18 Jan, 2006 1 commit
    • [multiple changes] · 953ff289
      2006-01-18  Richard Henderson  <rth@redhat.com>
      	    Jakub Jelinek  <jakub@redhat.com>
                  Diego Novillo  <dnovillo@redhat.com>
      
      	* libgomp: New directory.
      	* Makefile.def: Add target_module libgomp.
      	* Makefile.in: Regenerate.
      	* configure.in (target_libraries): Add target-libgomp.
      	* configure: Regenerate.
      
      
      contrib/
      
      2006-01-18  Richard Henderson  <rth@redhat.com>
                  Diego Novillo  <dnovillo@redhat.com>
      
      	* gcc_update (files_and_dependencies): Add libgomp files.
      
      
      gcc/
      
      2006-01-18  Richard Henderson  <rth@redhat.com>
                  Aldy Hernandez  <aldyh@redhat.com>
      	    Jakub Jelinek  <jakub@redhat.com>
                  Diego Novillo  <dnovillo@redhat.com>
      
      	* omp-low.c: New file.
      	* c-omp.c: New file.
      
      2006-01-18  Richard Henderson  <rth@redhat.com>
      	    Jakub Jelinek  <jakub@redhat.com>
                  Diego Novillo  <dnovillo@redhat.com>
      
      	* doc/invoke.texi: Document -fopenmp.
      	* tree-dump.h (debug_function): Declare.
      
      	* hooks.c (hook_bool_tree_bool_false): New function.
      	(hook_tree_tree_null): Remove.
      	(hook_tree_tree_tree_null): New.
      	* hooks.h: Update to match.
      
      	* tree-pretty-print.c (debug_tree_chain): New.
      	(print_generic_expr): Handle TDF_CHAIN.
      	(dump_generic_node): Handle BLOCK.
      	Do not abort with incomplete SWITCH_EXPRs.
      	Do not dump body of an OpenMP directive if TDF_SLIM is given.
      	<case OMP_PARALLEL, OMP_FOR, OMP_SECTIONS>: Don't
      	print space after directive name.
      	<OMP_FOR>: Handle printing OMP_FOR_PRE_BODY.
      	Handle OMP_MASTER and OMP_ORDERED.
      	Handle printing of OMP_BODY just in one place, goto
      	dump_omp_body in the rest of OMP_* nodes that have
      	OMP_BODY.
      	Don't handle clause nodes here.  Update omp statements to
      	use dump_omp_clauses.
      	Handle OMP_SINGLE, OMP_SECTIONS, OMP_SECTION,
      	OMP_CLAUSE_ORDERED, OMP_CLAUSE_SCHEDULE, OMP_ATOMIC,
      	OMP_CRITICAL, OMP_CLAUSE_NOWAIT, GOMP_CLAUSE_IF,
      	GOMP_CLAUSE_NUM_THREADS, GOMP_FOR, GOMP_CLAUSE_SHARED,
      	GOMP_CLAUSE_FIRSTPRIVATE, GOMP_CLAUSE_LASTPRIVATE,
      	GOMP_CLAUSE_COPYIN and GOMP_CLAUSE_COPYPRIVATE.
      	Adjust output for GOMP_PARALLEL.
      	(dump_omp_clauses): New.
      	(print_declaration): Dump DECL_VALUE_EXPR.
      	(op_symbol_1): Split out of op_symbol.
      	(dumping_stmts): Remove.  Update all users.
      
      	* cgraph.c (cgraph_analyze_queue): New.
      	(cgraph_add_new_function): New.
      	* cgraph.h (cgraph_analyze_queue): Declare.
      	(cgraph_add_new_function): Declare.
      	(cgraph_lower_function): Remove.
      
      	* tree.c (walk_tree): Walk OMP_CLAUSE_CHAIN of OMP_CLAUSE_*
      	nodes.  Use switch for all nodes, handle most of IS_EXPR_CODE_CLASS
      	and TYPE_P nodes in its default clause.
      	(empty_body_p): New.
      	(tree_range_check_failed): New.
      	(build5_stat): New.
      
      	* tree.h (OMP_CLAUSE_REDUCTION_INIT,
      	OMP_CLAUSE_REDUCTION_MERGE,
      	OMP_CLAUSE_REDUCTION_PLACEHOLDER,
      	OMP_CLAUSE_PRIVATE_DEBUG,
      	OMP_CLAUSE_LASTPRIVATE_FIRSTPRIVATE, OMP_FOR_PRE_BODY,
      	OMP_MASTER_BODY, OMP_ORDERED_BODY OMP_BODY,
      	OMP_CLAUSES, OMP_CLAUSE_DECL, OMP_CLAUSE_DEFAULT_KIND,
      	OMP_CLAUSE_CHAIN, OMP_CLAUSE_OUTER_DECL,
      	OMP_CLAUSE_INNER_DECL, OMP_CLAUSE_NUM_THREADS_EXPR,
      	OMP_CLAUSE_IF_EXPR, OMP_CLAUSE_SCHEDULE_CHUNK_EXPR,
      	OMP_CLAUSE_SCHEDULE_CHUNK_SIZE. OMP_PARALLEL_VAR_INIT,
      	OMP_PARALLEL_VAR_REDUC, OMP_FOR_VAR_INIT,
      	OMP_FOR_VAR_LAST, OMP_FOR_VAR_REDUC,
      	OMP_SECTIONS_VAR_INIT, OMP_SECTIONS_VAR_LAST,
      	OMP_SECTIONS_VAR_REDUC, OMP_CLAUSE_REDUCTION_CODE
      	OMP_SINGLE_CLAUSES, OMP_SINGLE_BODY,
      	OMP_CLAUSE_SCHEDULE_CHUNK_SIZE, OMP_SECTION_BODY,
      	OMP_CRITICAL_NAME, OMP_CRITICAL_BODY): New.
      	(TREE_RANGE_CHECK): New.
      	(empty_body_p): Declare.
      	(enum omp_clause_default_kind): New.
      	(build_string_literal): Declare.
      	(enum omp_clause_schedule_kind, OMP_CLAUSE_SCHEDULE_KIND): New.
      	(build5_stat, build5): Declare.
      
      	* tree-pass.h (TDF_CHAIN): Define.
      	* tree-pass.h (PROP_gimple_lomp): Define.
      	(pass_lower_omp): Declare.
      
      	* diagnostic.h (debug_tree_chain): Declare.
      
      	* builtins.c (get_builtin_sync_mode): Use 0 as last argument to
      	mode_for_size.
      	(expand_builtin): Handle sync BUILT_IN_*_16 builtins.
      	* builtins.c (build_string_literal): Make extern.
      
      	* gcc.c (include_spec_function): New.
      	(static_spec_functions): Add it.
      	(main): Move load of libgomp.spec ...
      	(LINK_COMMAND_SPEC): ... here.
      	(link_gomp_spec): New.
      	(static_specs): Include it.
      	(LINK_COMMAND_SPEC): Add link_gomp.
      	(GOMP_SELF_SPECS): New.
      	(driver_self_specs): Include it.
      	(switch_matches): Don't mark inline.
      	(main): Load libgomp.spec.
      
      	* tree-gimple.c (is_gimple_stmt): True for OMP_MASTER,
      	OMP_ORDERED, OMP_CRITICAL, OMP_SECTIONS, OMP_SECTION,
      	and OMP_SINGLE, OMP_FOR and OMP_PARALLEL.
      
      	* tree-gimple.h (enum omp_parallel): Declare.
      	(determine_parallel_type): Declare.
      	(omp_firstprivatize_variable): Declare.
      	(omp_reduction_init): Declare.
      	(diagnose_omp_structured_block_errors): Declare.
      	(struct walk_stmt_info): Add want_return_expr.
      	(struct walk_stmt_info): Add want_bind_expr, want_locations.
      	(find_omp_clause): Declare.
      	(insert_field_into_struct): Declare.
      	(struct walk_stmt_info): Move from tree-nested.c
      	(walk_stmts): Declare.
      
      	* c-cppbuiltin.c (c_cpp_builtins): If -fopenmp, #define _OPENMP
      	to 200505.
      
      	* cgraphunit.c (cgraph_lower_function): Make static.
      	(cgraph_finalize_pending_functions): New.
      	(cgraph_finalize_function): Call it.
      	(cgraph_finalize_compilation_unit): Likewise.
      
      	* builtin-types.def (BT_I16, BT_FN_I16_VPTR_I16,
      	BT_FN_BOOL_VPTR_I16_I16, BT_FN_I16_VPTR_I16_I16): Add.
      	(BT_FN_UINT_UINT): New.
      	(DEF_FUNCTION_TYPE_6, DEF_FUNCTION_TYPE_7,
      	DEF_FUNCTION_TYPE_VAR_4): Document.
      	(BT_PTR_LONG, BT_PTR_PTR, BT_FN_BOOL, BT_FN_INT,
      	BT_FN_VOID_PTRPTR, BT_PTR_FN_VOID_PTR,
      	BT_FN_BOOL_LONGPTR_LONGPTR, BT_FN_VOID_OMPFN_PTR_UINT,
      	BT_FN_VOID_OMPFN_PTR_UINT_UINT,
      	BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
      	BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
      	BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG,
      	BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG): New.
      
      	* builtins.def: Update DEF_BUILTIN comment to include COND argument.
      	Move all DEF_SYNC_BUILTIN () and DEF_GOMP_BUILTIN () builtins
      	into separate files.
      	(DEF_GOMP_BUILTIN): New.
      	(BUILT_IN_OMP_GET_THREAD_NUM, BUILT_IN_GOMP_BARRIER,
      	BUILT_IN_GOMP_CRITICAL_START, BUILT_IN_GOMP_CRITICAL_END,
      	BUILT_IN_GOMP_CRITICAL_NAME_START, BUILT_IN_GOMP_CRITICAL_NAME_END,
      	BUILT_IN_GOMP_LOOP_STATIC_START, BUILT_IN_GOMP_LOOP_DYNAMIC_START,
      	BUILT_IN_GOMP_LOOP_GUIDED_START, BUILT_IN_GOMP_LOOP_RUNTIME_START,
      	BUILT_IN_GOMP_LOOP_ORDERED_STATIC_START,
      	BUILT_IN_GOMP_LOOP_ORDERED_DYNAMIC_START,
      	BUILT_IN_GOMP_LOOP_ORDERED_GUIDED_START,
      	BUILT_IN_GOMP_LOOP_ORDERED_RUNTIME_START,
      	BUILT_IN_GOMP_LOOP_STATIC_NEXT, BUILT_IN_GOMP_LOOP_DYNAMIC_NEXT,
      	BUILT_IN_GOMP_LOOP_GUIDED_NEXT, BUILT_IN_GOMP_LOOP_RUNTIME_NEXT,
      	BUILT_IN_GOMP_LOOP_ORDERED_STATIC_NEXT,
      	BUILT_IN_GOMP_LOOP_ORDERED_DYNAMIC_NEXT,
      	BUILT_IN_GOMP_LOOP_ORDERED_GUIDED_NEXT,
      	BUILT_IN_GOMP_LOOP_ORDERED_RUNTIME_NEXT,
      	BUILT_IN_GOMP_PARALLEL_LOOP_STATIC_START,
      	BUILT_IN_GOMP_PARALLEL_LOOP_DYNAMIC_START,
      	BUILT_IN_GOMP_PARALLEL_LOOP_GUIDED_START,
      	BUILT_IN_GOMP_PARALLEL_LOOP_RUNTIME_START,
      	BUILT_IN_GOMP_LOOP_END, BUILT_IN_GOMP_LOOP_END_NOWAIT,
      	BUILT_IN_GOMP_ORDERED_START, BUILT_IN_GOMP_ORDERED_END,
      	BUILT_IN_GOMP_PARALLEL_START, BUILT_IN_GOMP_PARALLEL_END,
      	BUILT_IN_GOMP_SECTIONS_START, BUILT_IN_GOMP_SECTIONS_NEXT,
      	BUILT_IN_GOMP_PARALLEL_SECTIONS_START, BUILT_IN_GOMP_SECTIONS_END,
      	BUILT_IN_GOMP_SECTIONS_END_NOWAIT, BUILT_IN_GOMP_SINGLE_START,
      	BUILT_IN_GOMP_SINGLE_COPY_START, BUILT_IN_GOMP_SINGLE_COPY_END): New.
      	* sync-builtins.def: New file, moved from builtins.def.
      	* omp-builtins.def: New file, moved from builtins.def.
      
      	* c-objc-common.h (LANG_HOOKS_OMP_PREDETERMINED_SHARING): Redefine.
      
      	* gimple-low.c (lower_function_body): Clear data.
      	(lower_stmt): Do not handle COMPOUND_EXPR.
      	Remove call to print_node_brief.
      
      	* c-tree.h (c_finish_omp_clauses): New prototype.
      	(C_DECL_THREADPRIVATE_P): Define.
      	(lookup_name_no_remap, c_omp_remap_private): Remove
      	(c_begin_omp_parallel, c_finish_omp_parallel): Update.
      	(check_for_loop_decls): Update decl.
      	(lookup_name_no_remap, c_omp_remap_private): Declare.
      	(build_indirect_ref, build_modify_expr, pushdecl,
      	pushdecl_top_level): Move to c-common.h.
      
      	* dwarf2out.c (loc_descriptor_from_tree_1): Don't set unsignedp
      	before the switch, but just in the 2 places that need it.
      
      	* c-decl.c (diagnose_mismatched_decls): Do not check for
      	mismatched thread-local attributes when OLDDECL is marked
      	threadprivate and NEWDECL has no thread-local attributes.
      	(merge_decls): Merge C_DECL_THREADPRIVATE_P.
      	(c_gimple_diagnostics_recursively): Rename from
      	c_warn_unused_result_recursively.  Invoke
      	diagnose_omp_structured_block_errors.
      	(check_for_loop_decls): Return a singular decl found.
      
      	* langhooks.c (lhd_omp_predetermined_sharing): Return
      	OMP_CLAUSE_DEFAULT_SHARED for DECL_ARTIFICIAL decls.
      	(lhd_omp_firstprivatize_type_sizes): New.
      	(lhd_omp_assignment): New.
      	(lhd_omp_predetermined_sharing): New.
      
      	* langhooks.h (struct gimplify_omp_ctx): Forward declare.
      	(struct lang_hooks_for_types): Add
      	omp_firstprivatize_type_sizes, omp_privatize_by_reference,
      	omp_predetermined_sharing, omp_disregard_value_expr,
      	omp_private_debug_clause, omp_clause_default_ctor,
      	omp_clause_copy_ctor, omp_clause_assign_op, omp_clause_dtor.
      
      	(c_finish_omp_clauses): New.
      	(c_finish_bc_stmt): Diagnose break within omp for.
      	(c_begin_omp_parallel, c_finish_omp_parallel): New.
      	(build_unary_op): Return error_mark after reporting
      	a readonly_error.
      	(build_modify_expr): Likewise.
      
      	* gimplify.c: Include optabs.h and pointer-set.h.
      	(enum gimplify_omp_var_data): Declare.
      	(struct gimplify_omp_ctx): Declare.
      	(struct gimplify_ctx): Add fields prev_context, combined_pre_p
      	and combined_ctxp.
      	(gimplify_ctxp, gimplify_omp_ctxp): New local variables.
      	(push_gimplify_context, pop_gimplify_context): Allow nesting.
      	(splay_tree_compare_decl_uid): New.
      	(new_omp_context): New.
      	(delete_omp_context): New.
      	(gimple_add_tmp_var): Call omp_add_variable.
      	(gimplify_bind_expr): Likewise.
      	(gimplify_var_or_parm_decl): If omp_notice_variable returned
      	true, disregard DECL_VALUE_EXPR on the decl if any.
      	(gimplify_expr_in_ctx): New.
      	(omp_firstprivatize_variable, omp_firstprivatize_type_sizes
      	omp_add_variable, omp_notice_variable, omp_is_private
      	gimplify_scan_omp_clauses, gimplify_adjust_omp_clauses_1
      	gimplify_adjust_omp_clauses, gimplify_omp_parallel
      	gimplify_omp_for, gimplify_omp_workshare, goa_lhs_expr_p
      	gimplify_omp_atomic_fetch_op, goa_stabilize_expr
      	gimplify_omp_atomic_pipeline, gimplify_omp_atomic_mutex
      	gimplify_omp_atomic): New.
      	(gimplify_expr): Handle OMP_PARALLEL, OMP_FOR, OMP_SECTIONS,
      	OMP_SINGLE, OMP_SECTION, OMP_MASTER, OMP_ORDERED,
      	OMP_CRITICAL and OMP_ATOMIC.
      	(gimplify_body): Verify gimplify_ctxp is empty after gimplification.
      
      	* c-pragma.h (enum pragma_kind): Add
      	PRAGMA_OMP_ATOMIC, PRAGMA_OMP_BARRIER,
      	PRAGMA_OMP_CRITICAL, PRAGMA_OMP_FLUSH, PRAGMA_OMP_FOR,
      	PRAGMA_OMP_MASTER, PRAGMA_OMP_ORDERED,
      	PRAGMA_OMP_PARALLEL, PRAGMA_OMP_PARALLEL_FOR,
      	PRAGMA_OMP_PARALLEL_SECTIONS, PRAGMA_OMP_SECTION,
      	PRAGMA_OMP_SECTIONS, PRAGMA_OMP_SINGLE,
      	PRAGMA_OMP_THREADPRIVATE.
      
      	* tree.def (OMP_PARALLEL, OMP_FOR, OMP_SECTIONS,
      	OMP_SINGLE, OMP_SECTION, OMP_MASTER, OMP_ORDERED,
      	OMP_CRITICAL, OMP_ATOMIC, OMP_CLAUSE_PRIVATE,
      	OMP_CLAUSE_SHARED, OMP_CLAUSE_FIRSTPRIVATE,
      	OMP_CLAUSE_LASTPRIVATE, OMP_CLAUSE_REDUCTION,
      	OMP_CLAUSE_COPYIN, OMP_CLAUSE_COPYPRIVATE,
      	OMP_CLAUSE_IF, OMP_CLAUSE_NUM_THREADS,
      	OMP_CLAUSE_SCHEDULE, OMP_CLAUSE_NOWAIT,
      	OMP_CLAUSE_ORDERED, OMP_CLAUSE_DEFAULT): Define.
      
      	* print-tree.c (print_node): Dump DECL_VALUE_EXPR.
      
      	* tree-ssa-dce.c (find_control_dependence): Do not assume that
      	ENTRY_BLOCK_PTR->next_bb == single_succ (ENTRY_BLOCK_PTR).
      
      	* tree-nested.c (convert_call_expr): Call walk_body on OMP_BODY for
      	OpenMP directives.
      	(struct nesting_info): Add field_map,
      	suppress_expansion, debug_var_chain.
      	(create_nesting_tree): Initialize them.
      	(lookup_field_for_decl): Use field_map.
      	(get_nonlocal_debug_decl, get_local_debug_decl): New.
      	(convert_local_omp_clauses): New.
      	(finalize_nesting_tree_1): Add debug_var_chain to toplevel block.
      	(walk_body): Split out of walk_function.
      	(convert_nonlocal_omp_clauses, convert_local_omp_clauses): New.
      	(convert_nonlocal_reference): Handle omp statements.
      	(convert_local_reference): Likewise.
      	(unnest_nesting_tree_1): Split out of finalize_nesting_tree_1.
      	(unnest_nesting_tree): New.
      	(lower_nested_functions): Call it.
      	(insert_field_into_struct): Make extern.
      	(struct walk_stmt_info): Move to tree-gimple.h.
      	(walk_stmts): Make extern.
      
      	* omp-builtins.def: New file.
      
      	* tree-iterator.c (expr_only): Clarify comment.
      
      	* c-common.h (pushdecl_top_level, pushdecl,
      	build_modify_expr, build_indirect_ref,
      	c_finish_omp_master, c_finish_omp_critical,
      	c_finish_omp_ordered, c_finish_omp_barrier,
      	c_finish_omp_atomic, c_finish_omp_flush,
      	c_finish_omp_for, c_split_parallel_clauses,
      	omp_clause_default_kind, c_omp_sharing_predetermined,
      	c_omp_remap_decl): Declare.
      
      	* Makefile.in (BUILTINS_DEF): Add omp-builtins.def.
      	(OBJS-common): Add omp-low.o.
      	(c-omp.o, omp-low.o): Add.
      	(gimplify.o): Add dependency on $(OPTABS_H).
      	(GTFILES): Add omp-low.c.
      	(gt-stringpool.h): Add.
      
      	* tree-cfg.c (set_bb_for_stmt): Do not update the
      	block-to-labels map if we are currently expanding to RTL.
      	(tree_node_can_be_shared): Remove unnecessary CONSTANT_CLASS_P
      	checks.
      	Handle IDENTIFIER_NODE.
      	(tree_verify_flow_info): Do not ICE when emitting error
      	messages about invalid labels.
      	(dump_function_to_file): Reset CFUN before emitting the body
      	of the function.
      	(debug_function): New.
      
      	* passes.c (init_optimization_passes): Schedule
      	pass_lower_omp.
      
      	* langhooks-def.h (lhd_omp_predetermined_sharing,
      	lhd_omp_assignment, lhd_omp_firstprivatize_type_sizes):
      	Declare.
      	(LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES): Define.
      	(LANG_HOOKS_FOR_TYPES_INITIALIZER): Use it.
      	(LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE,
      	LANG_HOOKS_OMP_PREDETERMINED_SHARING,
      	LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR,
      	LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE,
      	LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR,
      	LANG_HOOKS_OMP_CLAUSE_COPY_CTOR,
      	LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP,
      	LANG_HOOKS_OMP_CLAUSE_DTOR): Define.
      	(LANG_HOOK_DECLS): Use them.
      
      
      2006-01-18  Dmitry Kurochkin <dmitry.kurochkin@gmail.com>
      	    Richard Henderson  <rth@redhat.com>
      	    Jakub Jelinek  <jakub@redhat.com>
                  Diego Novillo  <dnovillo@redhat.com>
      
      	* c-parser.c (pragma_omp_clause): Define.
      	(c_parser_declaration_or_fndef): Document OpenMP syntax.
      	(c_parser_compound_statement): Likewise.
      	(c_parser_statement): Likewise.
      	(c_parser_pragma): Handle omp pragmas.
      	(OMP_FOR_CLAUSE_MASK, OMP_SECTIONS_CLAUSE_MASK,
      	OMP_PARALLEL_CLAUSE_MASK, OMP_SINGLE_CLAUSE_MASK): Define.
      	(c_parser_omp_clause_name, check_no_duplicate_clause,
      	c_parser_omp_variable_list,
      	c_parser_omp_var_list_parens, c_parser_omp_clause_copyin,
      	c_parser_omp_clause_copyprivate,
      	c_parser_omp_clause_default,
      	c_parser_omp_clause_firstprivate, c_parser_omp_clause_if,
      	c_parser_omp_clause_lastprivate,
      	c_parser_omp_clause_nowait,
      	c_parser_omp_clause_num_threads,
      	c_parser_omp_clause_ordered, c_parser_omp_clause_private,
      	c_parser_omp_clause_reduction,
      	c_parser_omp_clause_schedule, c_parser_omp_clause_shared,
      	c_parser_omp_all_clauses, c_parser_omp_structured_block,
      	c_parser_omp_atomic, c_parser_omp_barrier,
      	c_parser_omp_critical, c_parser_omp_flush,
      	c_parser_omp_for_loop, c_parser_omp_for,
      	c_parser_omp_master, c_parser_omp_ordered,
      	c_parser_omp_sections_scope, c_parser_omp_sections,
      	c_parser_omp_parallel, c_parser_omp_single,
      	c_parser_omp_construct, c_parser_omp_threadprivate): New.
      	* c-pragma.c (init_pragma): Do omp pragma registration here.
      	* c.opt (fopenmp): New flag.
      
      
      2006-01-18  Eric Christopher  <echristo@apple.com>
      
      	* gcc.c (GOMP_SELF_SPECS): Bracket in #ifndef/#endif.
      	* config/darwin.h (GOMP_SELF_SPECS): Define.
      
      
      testsuite/
      
      2006-01-18  Richard Henderson  <rth@redhat.com>
                  Aldy Hernandez  <aldyh@redhat.com>
      	    Jakub Jelinek  <jakub@redhat.com>
                  Diego Novillo  <dnovillo@redhat.com>
                  Uros Bizjak  <uros@kss-loka.si>
      
      	* testsuite/gcc.dg/gomp: New directory.
      
      From-SVN: r109902
      Diego Novillo committed