Skip to content
Snippets Groups Projects
  • Diego Novillo's avatar
    953ff289
    [multiple changes] · 953ff289
    Diego Novillo authored
    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
    953ff289
    History
    [multiple changes]
    Diego Novillo authored
    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
acinclude.m4 11.49 KiB
dnl Check whether the target supports TLS.
AC_DEFUN([LIBGOMP_CHECK_TLS], [
  LIBGOMP_ENABLE(tls, yes, [Use thread-local storage])
  AC_CACHE_CHECK([whether the target supports thread-local storage],
		 have_tls, [
    AC_TRY_COMPILE([__thread int foo;],
		   [], have_tls=$enable_tls, have_tls=no)])
  if test $have_tls = yes; then
    AC_DEFINE(HAVE_TLS, 1,
	      [Define to 1 if the target supports thread-local storage.])
  fi])

dnl ----------------------------------------------------------------------
dnl This whole bit snagged from libgfortran.

dnl Check whether the target supports __sync_*_compare_and_swap.
AC_DEFUN([LIBGOMP_CHECK_SYNC_BUILTINS], [
  AC_CACHE_CHECK([whether the target supports __sync_*_compare_and_swap],
		 have_sync_builtins, [
  AC_TRY_LINK([], [int foo, bar; bar = __sync_val_compare_and_swap(&foo, 0, 1);],
	      have_sync_builtins=yes, have_sync_builtins=no)])
  if test $have_sync_builtins = yes; then
    AC_DEFINE(HAVE_SYNC_BUILTINS, 1,
	      [Define to 1 if the target supports __sync_*_compare_and_swap])
  fi])

dnl Check whether the target supports hidden visibility.
AC_DEFUN([LIBGOMP_CHECK_ATTRIBUTE_VISIBILITY], [
  AC_CACHE_CHECK([whether the target supports hidden visibility],
		 have_attribute_visibility, [
  save_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS -Werror"
  AC_TRY_COMPILE([void __attribute__((visibility("hidden"))) foo(void) { }],
		 [], have_attribute_visibility=yes,
		 have_attribute_visibility=no)
  CFLAGS="$save_CFLAGS"])
  if test $have_attribute_visibility = yes; then
    AC_DEFINE(HAVE_ATTRIBUTE_VISIBILITY, 1,
      [Define to 1 if the target supports __attribute__((visibility(...))).])
  fi])

dnl Check whether the target supports dllexport
AC_DEFUN([LIBGOMP_CHECK_ATTRIBUTE_DLLEXPORT], [
  AC_CACHE_CHECK([whether the target supports dllexport],
		 have_attribute_dllexport, [
  save_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS -Werror"
  AC_TRY_COMPILE([void __attribute__((dllexport)) foo(void) { }],
		 [], have_attribute_dllexport=yes,
		 have_attribute_dllexport=no)
  CFLAGS="$save_CFLAGS"])
  if test $have_attribute_dllexport = yes; then
    AC_DEFINE(HAVE_ATTRIBUTE_DLLEXPORT, 1,
      [Define to 1 if the target supports __attribute__((dllexport)).])
  fi])

dnl Check whether the target supports symbol aliases.
AC_DEFUN([LIBGOMP_CHECK_ATTRIBUTE_ALIAS], [
  AC_CACHE_CHECK([whether the target supports symbol aliases],
		 have_attribute_alias, [
  AC_TRY_LINK([
#define ULP	STR1(__USER_LABEL_PREFIX__)
#define STR1(x)	STR2(x)
#define STR2(x)	#x
void foo(void) { }
extern void bar(void) __attribute__((alias(ULP "foo")));],
    [bar();], have_attribute_alias=yes, have_attribute_alias=no)])
  if test $have_attribute_alias = yes; then
    AC_DEFINE(HAVE_ATTRIBUTE_ALIAS, 1,
      [Define to 1 if the target supports __attribute__((alias(...))).])
  fi])

sinclude(../libtool.m4)
dnl The lines below arrange for aclocal not to bring an installed
dnl libtool.m4 into aclocal.m4, while still arranging for automake to
dnl add a definition of LIBTOOL to Makefile.in.
ifelse(,,,[AC_SUBST(LIBTOOL)
AC_DEFUN([AM_PROG_LIBTOOL])
AC_DEFUN([AC_LIBTOOL_DLOPEN])
AC_DEFUN([AC_PROG_LD])
])

dnl ----------------------------------------------------------------------
dnl This whole bit snagged from libstdc++-v3.

dnl
dnl LIBGOMP_ENABLE
dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING)
dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c)
dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER)
dnl
dnl See docs/html/17_intro/configury.html#enable for documentation.
dnl
m4_define([LIBGOMP_ENABLE],[dnl
m4_define([_g_switch],[--enable-$1])dnl
m4_define([_g_help],[AC_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl
 AC_ARG_ENABLE($1,_g_help,
  m4_bmatch([$5],
   [^permit ],
     [[
      case "$enableval" in
       m4_bpatsubst([$5],[permit ])) ;;
       *) AC_MSG_ERROR(Unknown argument to enable/disable $1) ;;
          dnl Idea for future:  generate a URL pointing to
          dnl "onlinedocs/configopts.html#whatever"
      esac
     ]],
   [^$],
     [[
      case "$enableval" in
       yes|no) ;;
       *) AC_MSG_ERROR(Argument to enable/disable $1 must be yes or no) ;;
      esac
     ]],
   [[$5]]),
  [enable_]m4_bpatsubst([$1],-,_)[=][$2])
m4_undefine([_g_switch])dnl
m4_undefine([_g_help])dnl
])


dnl
dnl If GNU ld is in use, check to see if tricky linker opts can be used.  If
dnl the native linker is in use, all variables will be defined to something
dnl safe (like an empty string).
dnl
dnl Defines:
dnl  SECTION_LDFLAGS='-Wl,--gc-sections' if possible
dnl  OPT_LDFLAGS='-Wl,-O1' if possible
dnl  LD (as a side effect of testing)
dnl Sets:
dnl  with_gnu_ld
dnl  libgomp_gnu_ld_version (possibly)
dnl
dnl The last will be a single integer, e.g., version 1.23.45.0.67.89 will
dnl set libgomp_gnu_ld_version to 12345.  Zeros cause problems.
dnl
AC_DEFUN([LIBGOMP_CHECK_LINKER_FEATURES], [
  # If we're not using GNU ld, then there's no point in even trying these
  # tests.  Check for that first.  We should have already tested for gld
  # by now (in libtool), but require it now just to be safe...
  test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
  test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
  AC_REQUIRE([AC_PROG_LD])
  AC_REQUIRE([AC_PROG_AWK])

  # The name set by libtool depends on the version of libtool.  Shame on us
  # for depending on an impl detail, but c'est la vie.  Older versions used
  # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
  # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
  # makes sense).  We'll test with_gnu_ld everywhere else, so if that isn't
  # set (hence we're using an older libtool), then set it.
  if test x${with_gnu_ld+set} != xset; then
    if test x${ac_cv_prog_gnu_ld+set} != xset; then
      # We got through "ac_require(ac_prog_ld)" and still not set?  Huh?
      with_gnu_ld=no
    else
      with_gnu_ld=$ac_cv_prog_gnu_ld
    fi
  fi

  # Start by getting the version number.  I think the libtool test already
  # does some of this, but throws away the result.
  changequote(,)
  ldver=`$LD --version 2>/dev/null | head -1 | \
         sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
  changequote([,])
  libgomp_gnu_ld_version=`echo $ldver | \
         $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'`

  # Set --gc-sections.
  if test "$with_gnu_ld" = "notbroken"; then
    # GNU ld it is!  Joy and bunny rabbits!

    # All these tests are for C++; save the language and the compiler flags.
    # Need to do this so that g++ won't try to link in libstdc++
    ac_test_CFLAGS="${CFLAGS+set}"
    ac_save_CFLAGS="$CFLAGS"
    CFLAGS='-x c++  -Wl,--gc-sections'

    # Check for -Wl,--gc-sections
    # XXX This test is broken at the moment, as symbols required for linking
    # are now in libsupc++ (not built yet).  In addition, this test has
    # cored on solaris in the past.  In addition, --gc-sections doesn't
    # really work at the moment (keeps on discarding used sections, first
    # .eh_frame and now some of the glibc sections for iconv).
    # Bzzzzt.  Thanks for playing, maybe next time.
    AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
    AC_TRY_RUN([
     int main(void)
     {
       try { throw 1; }
       catch (...) { };
       return 0;
     }
    ], [ac_sectionLDflags=yes],[ac_sectionLDflags=no], [ac_sectionLDflags=yes])
    if test "$ac_test_CFLAGS" = set; then
      CFLAGS="$ac_save_CFLAGS"
    else
      # this is the suspicious part
      CFLAGS=''
    fi
    if test "$ac_sectionLDflags" = "yes"; then
      SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
    fi
    AC_MSG_RESULT($ac_sectionLDflags)
  fi

  # Set linker optimization flags.
  if test x"$with_gnu_ld" = x"yes"; then
    OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
  fi

  AC_SUBST(SECTION_LDFLAGS)
  AC_SUBST(OPT_LDFLAGS)
])


dnl
dnl Add version tags to symbols in shared library (or not), additionally
dnl marking other symbols as private/local (or not).
dnl
dnl --enable-symvers=style adds a version script to the linker call when
dnl       creating the shared library.  The choice of version script is
dnl       controlled by 'style'.
dnl --disable-symvers does not.
dnl  +  Usage:  LIBGOMP_ENABLE_SYMVERS[(DEFAULT)]
dnl       Where DEFAULT is either 'yes' or 'no'.  Passing `yes' tries to
dnl       choose a default style based on linker characteristics.  Passing
dnl       'no' disables versioning.
dnl
AC_DEFUN([LIBGOMP_ENABLE_SYMVERS], [

LIBGOMP_ENABLE(symvers,yes,[=STYLE],
  [enables symbol versioning of the shared library],
  [permit yes|no|gnu])

# If we never went through the LIBGOMP_CHECK_LINKER_FEATURES macro, then we
# don't know enough about $LD to do tricks...
AC_REQUIRE([LIBGOMP_CHECK_LINKER_FEATURES])
# FIXME  The following test is too strict, in theory.
if test $enable_shared = no ||
        test "x$LD" = x ||
        test x$libgomp_gnu_ld_version = x; then
  enable_symvers=no
fi

# Check to see if libgcc_s exists, indicating that shared libgcc is possible.
if test $enable_symvers != no; then
  AC_MSG_CHECKING([for shared libgcc])
  ac_save_CFLAGS="$CFLAGS"
  CFLAGS=' -lgcc_s'
  AC_TRY_LINK(, [return 0;], libgomp_shared_libgcc=yes, libgomp_shared_libgcc=no)
  CFLAGS="$ac_save_CFLAGS"
  if test $libgomp_shared_libgcc = no; then
    cat > conftest.c <<EOF
int main (void) { return 0; }
EOF
changequote(,)dnl
    libgomp_libgcc_s_suffix=`${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
			     -shared -shared-libgcc -o conftest.so \
			     conftest.c -v 2>&1 >/dev/null \
			     | sed -n 's/^.* -lgcc_s\([^ ]*\) .*$/\1/p'`
changequote([,])dnl
    rm -f conftest.c conftest.so
    if test x${libgomp_libgcc_s_suffix+set} = xset; then
      CFLAGS=" -lgcc_s$libgomp_libgcc_s_suffix"
      AC_TRY_LINK(, [return 0;], libgomp_shared_libgcc=yes)
      CFLAGS="$ac_save_CFLAGS"
    fi
  fi
  AC_MSG_RESULT($libgomp_shared_libgcc)
fi

# For GNU ld, we need at least this version.  The format is described in
# LIBGOMP_CHECK_LINKER_FEATURES above.
libgomp_min_gnu_ld_version=21400
# XXXXXXXXXXX libgomp_gnu_ld_version=21390

# Check to see if unspecified "yes" value can win, given results above.
# Change "yes" into either "no" or a style name.
if test $enable_symvers = yes; then
  if test $with_gnu_ld = yes &&
     test $libgomp_shared_libgcc = yes;
  then
    if test $libgomp_gnu_ld_version -ge $libgomp_min_gnu_ld_version ; then
      enable_symvers=gnu
    else
      # The right tools, the right setup, but too old.  Fallbacks?
      AC_MSG_WARN(=== Linker version $libgomp_gnu_ld_version is too old for)
      AC_MSG_WARN(=== full symbol versioning support in this release of GCC.)
      AC_MSG_WARN(=== You would need to upgrade your binutils to version)
      AC_MSG_WARN(=== $libgomp_min_gnu_ld_version or later and rebuild GCC.)
      if test $libgomp_gnu_ld_version -ge 21200 ; then
        # Globbing fix is present, proper block support is not.
        dnl AC_MSG_WARN([=== Dude, you are soooo close.  Maybe we can fake it.])
        dnl enable_symvers=???
        AC_MSG_WARN([=== Symbol versioning will be disabled.])
        enable_symvers=no
      else
        # 2.11 or older.
        AC_MSG_WARN([=== Symbol versioning will be disabled.])
        enable_symvers=no
      fi
    fi
  else
    # just fail for now
    AC_MSG_WARN([=== You have requested some kind of symbol versioning, but])
    AC_MSG_WARN([=== either you are not using a supported linker, or you are])
    AC_MSG_WARN([=== not building a shared libgcc_s (which is required).])
    AC_MSG_WARN([=== Symbol versioning will be disabled.])
    enable_symvers=no
  fi
fi

AM_CONDITIONAL(LIBGOMP_BUILD_VERSIONED_SHLIB, test $enable_symvers != no)
AC_MSG_NOTICE(versioning on shared library symbols is $enable_symvers)
])