* lto-partition.c: Include of symbol-summary.h is added.
* lto-symtab.c: Likewise.
* lto.c: Likewise.
* auto-profile.c: Include of symbol-summary.h is added.
* cgraph.c: Likewise.
* cgraphbuild.c: Likewise.
* cgraphclones.c: Likewise.
* cgraphunit.c: Likewise.
* ipa-cp.c: Likewise.
* ipa-devirt.c: Likewise.
* ipa-icf.c: Likewise.
* ipa-inline-analysis.c (evaluate_properties_for_edge): New
ipa_node_params_sum data structure is used.
(inline_node_duplication_hook): Likewise.
(estimate_function_body_sizes): Likewise.
(remap_edge_change_prob): Likewise.
(inline_merge_summary): Likewise.
* ipa-inline-transform.c: Include of symbol-summary.h is added.
* ipa-inline.c (early_inliner): New ipa_node_params_sum data structure
is used.
* ipa-polymorphic-call.c: Include of symbol-summary.h is added.
* ipa-profile.c: Include of symbol-summary.h is added.
* ipa-prop.c (ipa_propagate_indirect_call_infos): New ipa_node_params_sum
data structure is used.
(ipa_node_params::~ipa_node_params): New function.
(ipa_free_all_node_params): Destruction is simplified.
(ipa_node_removal_hook): Removed.
(ipa_add_new_function): Renamed from ipa_node_duplication_hook.
(ipa_node_params_t::duplicate): New function.
(ipa_register_cgraph_hooks): Few hooks are removed.
(ipa_unregister_cgraph_hooks): Likewise.
(ipa_prop_write_jump_functions): New ipa_node_params_sum is used.
* ipa-prop.h (struct ipa_node_params): Destructor introduced for
the structure.
(ipa_check_create_node_params): Vector for ipa_node_params is replaced
with function_summary.
* ipa-split.c: Include of symbol-summary.h is added.
* ipa-utils.c: Include of symbol-summary.h is added.
* ipa.c: Include of symbol-summary.h is added.
* omp-low.c: Include of symbol-summary.h is added.
* tree-inline.c: Include of symbol-summary.h is added.
* tree-sra.c: Include of symbol-summary.h is added.
* tree-ssa-pre.c: Include of symbol-summary.h is added.
From-SVN: r219005
gcc/
* cgraph.c: Include context.h.
(cgraph_node::create): Set node->offloadable and g->have_offload if
decl have "omp declare target" attribute.
* cgraph.h (symtab_node): Add need_lto_streaming and offloadable flags.
* cgraphunit.c: Include lto-section-names.h.
(ipa_passes): Call ipa_write_summaries if there is something to write to
OFFLOAD_SECTION_NAME_PREFIX sections.
(symbol_table::compile): Set flag_generate_lto if there is something to
offload.
Replace flag_lto with flag_generate_lto before lto_streamer_hooks_init.
* context.c (gcc::context::context): Initialize have_offload with false.
* context.h (class context): Add have_offload flag.
* ipa-inline-analysis.c (inline_generate_summary): Do not exit under
flag_generate_lto.
(inline_free_summary): Always remove hooks.
* lto-cgraph.c (referenced_from_other_partition_p): Ignore references
from non-offloadable nodes while streaming a node into offload section.
(reachable_from_other_partition_p): Likewise.
(select_what_to_stream): New function.
(compute_ltrans_boundary): Do not call
lto_set_symtab_encoder_in_partition if the node should not be streamed.
* lto-section-names.h (OFFLOAD_SECTION_NAME_PREFIX): Define.
(section_name_prefix): Declare.
* lto-streamer.c (section_name_prefix): New variable.
(lto_get_section_name): Use section_name_prefix instead of
LTO_SECTION_NAME_PREFIX.
* lto-streamer.h (select_what_to_stream): Declare.
* omp-low.c: Include context.h.
(is_targetreg_ctx): New function.
(scan_sharing_clauses): Use offloadable flag, instead of an attribute.
(create_omp_child_function, check_omp_nesting_restrictions): Use new
is_targetreg_ctx function. Replace usage of "omp declare target"
attribute with a cgraph_node flag offloadable.
(expand_omp_target): Set mark_force_output for offloadable functions.
(lower_omp_critical): Set offloadable flag for omp critical symbol.
* passes.c (ipa_write_summaries): New argument offload_lto_mode. Call
select_what_to_stream. Do not call lto_set_symtab_encoder_in_partition
if the node should not be streamed out.
* tree-pass.h (ipa_write_summaries): New bool argument.
* varpool.c: Include context.h.
(varpool_node::get_create): Set node->offloadable and g->have_offload if
decl have "omp declare target" attribute.
gcc/lto/
* lto-object.c (lto_obj_add_section): Use section_name_prefix instead of
LTO_SECTION_NAME_PREFIX.
* lto-partition.c (lto_promote_cross_file_statics): Call
select_what_to_stream.
* lto.c (lto_section_with_id): Use section_name_prefix instead of
LTO_SECTION_NAME_PREFIX.
(read_cgraph_and_symbols): Read OFFLOAD_SECTION_NAME_PREFIX sections, if
being built as an offload compiler.
Co-Authored-By: Andrey Turetskiy <andrey.turetskiy@intel.com>
Co-Authored-By: Bernd Schmidt <bernds@codesourcery.com>
Co-Authored-By: Michael Zolotukhin <michael.v.zolotukhin@intel.com>
From-SVN: r217486
* lto-object.c (lto_obj_begin_section): In the event that pointer
sizes aren't powers of two, choose a more suitable alignment
than (unsigned)(-1).
From-SVN: r216350
* machmode.h (int_n_data_t): New.
(int_n_enabled_p): New.
(int_n_data): New.
* tree.c (int_n_enabled_p): New.
(int_n_trees): New.
(make_or_reuse_type): Check for all __intN types, not just
__int128.
(build_common_tree_nodes): Likewise. Also fill in integer_typs[]
entries.
* tree.h (int128_integer_type_node): Remove.
(int128_unsigned_type_node): Remove.
(int_n_trees_t): New.
(int_n_enabled_p): New.
(int_n_trees): New.
* toplev.c (standard_type_bitsize): New.
(do_compile): Check which __intN types are enabled for the current
run.
* builtin-types.def (BT_INT128): Remove.
(BT_UINT128): Remove.
* machmode.def: Add macro to create __int128 for all targets.
* stor-layout.c (mode_for_size): Support __intN types.
(smallest_mode_for_size): Likewise.
(initialize_sizetypes): Support __intN types.
* genmodes.c (struct mode_data): Add int_n field.
(blank_mode): Likewise.
(INT_N): New.
(make_int_n): New.
(emit_insn_modes_h): Count __intN entries and define
NUM_INT_N_ENTS.
(emit_mode_int_n): New.
(emit_insn_modes_c): Call it.
* gimple.c (gimple_signed_or_unsigned_type): Check for all __intN
types, not just __int128.
* tree-core.h (integer_type_kind): Remove __int128-specific
entries, reserve spots for __intN entries.
libstdc++-v3/
* src/c++11/limits.cc: Add support for __intN types.
* include/std/type_traits: Likewise.
* include/std/limits: Likewise.
* include/c_std/cstdlib: Likewise.
* include/bits/cpp_type_traits.h: Likewise.
* include/c_global/cstdlib: Likewise.
c-family/
* c-pretty-print.c (pp_c_integer_constant): Check for all __intN
types, not just __int128.
* c-cppbuiltin.c (c_cpp_builtins): Add builtins for all __intN
types, not just __int128.
(cpp_atomic_builtins): Round pointer sizes up.
(type_suffix): Use type precision, not specific types.
* c-common.c (c_common_reswords): Remove __int128 special case.
(c_common_type_for_size): Check for all __intN types, not just
__int128.
(c_common_type_for_mode): Likewise.
(c_common_signed_or_unsigned_type): Likewise.
(c_build_bitfield_integer_type): Likewise.
(c_common_nodes_and_builtins): Likewise.
(keyword_begins_type_specifier): Likewise.
* c-common.h (rid): Remove RID_INT128 and add RID_INT_N_* for all
__intN variants.
c/
* c-parser.c (c_parse_init): Add RID entries for each __intN.
(c_token_starts_typename): Check all __intN, not just __int128.
(c_token_starts_declspecs): Likewise.
(c_parser_declspecs): Likewise.
(c_parser_attribute_any_word): Likewise.
(c_parser_objc_selector): Likewise.
* c-tree.h (c_typespec_keyword): cts_int128 -> cts_int_n.
(struct c_declspecs): Add int_n_idx field to record *which* __intN
is specified.
* c-decl.c (declspecs_add_type): Check for all __intN, not just
__int128.
(finish_declspecs): Likewise.
testsuite/
* g++.dg/abi/mangle64.C: New.
cp/
* typeck.c (cp_common_type): Check for all __intN types, not just
__int128.
* decl.c (grokdeclarator): Likewise.
* rtti.c (emit_support_tinfos): Check for all __intN types, not just
__int128.
* parser.c (cp_lexer_next_token_is_decl_specifier_keyword): Check
for all __intN types, not just __int128.
(cp_parser_simple_type_specifier): Likewise.
* mangle.c (integer_type_codes): Remove int128-specific codes.
* cp-tree.h (cp_decl_specifier_seq): Add int_n_idx to store which
__intN was specified.
* lex.c (init_reswords): Reserve all __intN keywords.
lto/
* lto-lang.c (lto_build_c_type_nodes): Check intN types for
size-type as well.
(lto_init): Initialize all intN types, not just int128.
From-SVN: r216220
Some projects need to prevent reordering of specific top level
declarations with LTO, in particular declarations defining init calls.
The only way to do that with LTO was to use -fno-toplevel-reorder,
which stops reordering for all declarations and makes LTO partitioning
less efficient.
This patch adds a new no_reorder attribute that stops reordering only
for the marked declaration. The program can then only mark e.g. the
initcalls and leave all the other declarations alone.
The patch does:
- Adds the new no_reorder attribute for the C family.
- Initializes a new no_reorder flag in the symtab_nodes in the
function visibility flag.
- Maintains the no_reorder flag when creating new nodes.
- Changes the partition code to always keep a separate
sorted queue of ordered nodes and flush them in order with the other
nodes. This is used by all nodes with -fno-toplevel-reorder,
and only the marked ones without it.
Parts of the old -fno-toplevel-reorder code paths are reused.
- Adds various checks throughout the tree to make no_reorder
marked functions behave the same as with -fno-toplevel-reorder
- Changes the LTO streamer to serialize the no_reorder attribute.
gcc/c-family/:
2014-09-23 Andi Kleen <ak@linux.intel.com>
* c-common.c (handle_no_reorder_attribute): New function.
(c_common_attribute_table): Add no_reorder attribute.
gcc/:
2014-09-23 Andi Kleen <ak@linux.intel.com>
* cgraph.h (symtab_node): Add no_reorder attribute.
(symbol_table::output_asm_statements): Remove.
* cgraphclones.c (cgraph_node::create_clone): Copy no_reorder.
(cgraph_node::create_version_clone): Dito.
(symbol_table::output_asm_statements): Remove.
* trans-mem.c (ipa_tm_create_version_alias): Dito.
* cgraphunit.c (varpool_node::finalize_decl): Check no_reorder.
(output_in_order): Add no_reorder flag. Only handle no_reorder
nodes when set.
(symbol_table::compile): Add separate pass for no_reorder nodes.
(process_common_attributes): Set no_reorder flag in symtab node.
Add node argument.
(process_function_and_variable_attributes): Pass symtab nodes to
process_common_attributes.
* doc/extend.texi (no_reorder): Document no_reorder attribute.
* lto-cgraph.c (lto_output_node): Serialize no_reorder.
(lto_output_varpool_node): Dito.
(input_overwrite_node): Dito.
(input_varpool_node): Dito.
* varpool.c (varpool_node::add): Set no_reorder attribute.
(symbol_table::remove_unreferenced_decls): Handle no_reorder.
(symbol_table::output_variables): Dito.
* symtab.c (symtab_node::dump_base): Print no_reorder.
gcc/lto/:
2014-09-23 Andi Kleen <ak@linux.intel.com>
* lto-partition.c (node_cmp): Update comment.
(varpool_node_cmp): Use symtab_node for comparison.
(add_sorted_nodes): New function.
(lto_balanced_map): Change to keep ordered queue
of ordered node. Handle no_reorder attribute.
From-SVN: r215537
* common.opt (flto-odr-type-merging): New flag.
* ipa-deivrt.c (hash_type_name): Use ODR names for hasing if availale.
(types_same_for_odr): Likewise.
(odr_subtypes_equivalent_p): Likewise.
(add_type_duplicate): Do not walk type variants.
(register_odr_type): New function.
* ipa-utils.h (register_odr_type): Declare.
(odr_type_p): New function.
* langhooks.c (lhd_set_decl_assembler_name): Do not compute
TYPE_DECLs
* doc/invoke.texi (-flto-odr-type-merging): Document.
* tree.c (need_assembler_name_p): Compute ODR names when asked
for it.
* tree.h (DECL_ASSEMBLER_NAME): Update comment.
* lto.c (lto_read_decls): Register ODR types.
From-SVN: r215196
Change class inchash to move into a inchash namespace as requested.
The class is now inchash::hash
Rename iterative_hstate_expr to inchash::add_expr
... and convert existing users. It wasn't possible to use hash::,
because that lead to name space conflicts with cp and objc.
So class inchash is now inchash::hash and iterative_hstate_expr
is now inchash::add_expr.
gcc/:
2014-07-31 Andi Kleen <ak@linux.intel.com>
* inchash.h (inchash): Change inchash class to namespace.
(class hash): ... Rename from inchash.
(add_object): Move from macro to class template.
* lto-streamer-out.c (hash_tree): Change inchash
to inchash::hash.
* tree.c (build_type_attribute_qual_variant): Dito.
(type_hash_list): Dito.
(attribute_hash_list): Dito.
(iterative_hstate_expr): Rename to inchash::add_expr
(build_range_type_1): Change inchash to inchash::hash
and use hash::add_expr.
(build_array_type_1): Dito.
(build_function_type): Dito
(build_method_type_directly): Dito.
(build_offset_type): Dito.
(build_complex_type): Dito.
(make_vector_type): Dito.
* tree.h (iterative_hash_expr): Dito.
gcc/lto/:
2014-07-31 Andi Kleen <ak@linux.intel.com>
* lto.c (hash_canonical_type): Use inchash::hash
and use inchash::add_expr.
(iterative_hash_canonical_type): Dito.
From-SVN: r213394
2014-07-30 Richard Biener <rguenther@suse.de>
* lto-streamer.h (lto_write_data): New function.
* langhooks.c (lhd_append_data): Do not free block.
* lto-section-out.c (lto_write_data): New function writing
raw data to the current section.
(lto_write_stream): Adjust for langhook semantic change.
(lto_destroy_simple_output_block): Write header directly.
* lto-opts.c (lto_write_options): Write options directly.
* lto-streamer-out.c (produce_asm): Write heaeder directly.
(lto_output_toplevel_asms): Likewise.
(copy_function_or_variable): Copy data directly.
(write_global_references): Output index table directly.
(lto_output_decl_state_refs): Likewise.
(write_symbol): Write data directly.
(produce_symtab): Adjust.
(produce_asm_for_decls): Output header and refs directly.
lto/
* lto-object.c (lto_obj_append_data): Do not free block.
From-SVN: r213253
Should not really change any behavior, it's just a more abstract
interface, but uses the same underlying hash functions.
gcc/lto/:
2014-07-25 Andi Kleen <ak@linux.intel.com>
* lto.c (hash_canonical_type): Convert to inchash.
(iterative_hash_canonical_type): Dito.
From-SVN: r213055
Some files in gcc, like lto or tree, do large scale incremential hashing.
The current jhash implementation of this could be likely improved
by using an incremential hash that does not do a full rehashing
for every new value added.
This patch adds a new "inchash" class that abstracts the internal
state of the hash. This makes it easier to plug in new hashes
and also cleans up the code a bit.
Right now it is just implemented in the same way as the old
iterative hash in tree.c. The previous iterative hash code
from tree.c moved into a new separate file. Also I fixed up all
users to include the new header.
It should not really significantly change any hashing by itself,
it's mostly a cleanup at this point.
v2: Remove begin. Add commutative interface.
Add merge hash interface. Add add_flag.
gcc/:
2014-07-25 Andi Kleen <ak@linux.intel.com>
* Makefile.in (OBJS): Add inchash.o.
(PLUGIN_HEADERS): Add inchash.h.
* ipa-devirt.c: Include inchash.h.
* lto-streamer-out.c: Dito.
* tree-ssa-dom.c: Dito.
* tree-ssa-pre.c: Dito.
* tree-ssa-sccvn.c: Dito.
* tree-ssa-tail-merge.c: Dito.
* asan.c: Dito.
* tree.c (iterative_hash_hashval_t): Move to ...
(iterative_hash_host_wide_int): Move to ...
* inchash.c: Here. New file.
* tree.h (iterative_hash_hashval_t): Move to ...
(iterative_hash_host_wide_int): Move to ...
* inchash.h: Here. New file.
gcc/lto/:
2014-07-25 Andi Kleen <ak@linux.intel.com>
* lto.c: Include inchash.h
From-SVN: r213054
* vapool.c: Include tree-ssa-alias.h, gimple.h and lto-streamer.h
(varpool_get_constructor): New function.
(varpool_ctor_useable_for_folding_p): Break out from ...
(ctor_for_folding): ... here; use varpool_get_constructor.
(varpool_assemble_decl): Likewise.
* lto-streamer.h (struct output_block): Turn cgraph_node
to symbol filed.
(lto_input_variable_constructor): Declare.
* ipa-visibility.c (function_and_variable_visibility): Use
varpool_get_constructor.
* cgraph.h (varpool_get_constructor): Declare.
(varpool_ctor_useable_for_folding_p): New function.
* lto-streamer-out.c (get_symbol_initial_value): Take encoder
parameter; return error_mark_node for non-trivial constructors.
(lto_write_tree_1, DFS_write_tree): UPdate use of
get_symbol_initial_value.
(output_function): Update initialization of symbol.
(output_constructor): New function.
(copy_function): Rename to ..
(copy_function_or_variable): ... this one; handle vars too.
(lto_output): Output variable sections.
* lto-streamer-in.c (input_constructor): New function.
(lto_read_body): Rename from ...
(lto_read_body_or_constructor): ... this one; handle vars
too.
(lto_input_variable_constructor): New function.
* ipa-prop.c (ipa_prop_write_jump_functions,
ipa_prop_write_all_agg_replacement): Update.
* lto-cgraph.c (compute_ltrans_boundary): Use it.
(output_cgraph_opt_summary): Set symbol to NULL.
* lto-partition.c (add_references_to_partition): Use
varpool_ctor_useable_for_folding_p.
* lto.c (lto_read_in_decl_state): Update sanity check.
From-SVN: r212467
* cgraph.h (iterate_direct_aliases): New function.
(FOR_EACH_ALIAS): New macro iterates all direct aliases for a node.
* cgraph.c (cgraph_for_node_thunks_and_aliases): Usage of
FOR_EACH_ALIAS added.
(cgraph_for_node_and_aliases): Likewise.
* cgraphunit.c (assemble_thunks_and_aliases): Likewise.
* ipa-inline.c (reset_edge_caches): Likewise.
(update_caller_keys): Likewise.
* trans-mem.c (ipa_tm_execute): Likewise.
*varpool.c (varpool_analyze_node): Likewise.
(varpool_for_node_and_aliases): Likewise.
* ipa-ref.h (first_alias): New function.
(last_alias): Likewise.
(has_aliases_p): Likewise.
* ipa-ref.c (ipa_ref::remove_reference): Removal function
is sensitive to IPA_REF_ALIASes.
* symtab.c (symtab_node::add_reference): Node of IPA_REF_ALIAS type
are put at the beginning of the list.
(symtab_node::iterate_direct_aliases): New function.
* lto-partition.c (add_symbol_to_partition_1): Usage of
FOR_EACH_ALIAS added.
From-SVN: r212191
Revert:
* tree-streamer-out.c (pack_ts_type_common_value_fields): Stream if type
is complete.
(write_ts_type_common_tree_pointers): Do not stream fields not set for incomplete
types; do not stream duplicated fields for variants; sanity check that variant
and type match.
(write_ts_type_non_common_tree_pointers): Likewise.
* tree-streamer-in.c (unpack_ts_type_common_value_fields): Mark in TYPE_SIZE whether
type is complete.
(lto_input_ts_type_common_tree_pointers): Do same changes as in
write_ts_type_common_tree_pointers
(lto_input_ts_type_non_common_tree_pointers): Likewise.
* lto.c (lto_copy_fields_not_streamed): New function.
(compare_tree_sccs_1): Do not compare fields shared in between type
and variant.
(lto_read_decls): Fixup types first before inserting into hash.
From-SVN: r212179
* tree-streamer-out.c (pack_ts_type_common_value_fields): Stream if type
is complete.
(write_ts_type_common_tree_pointers): Do not stream fields not set for incomplete
types; do not stream duplicated fields for variants; sanity check that variant
and type match.
(write_ts_type_non_common_tree_pointers): Likewise.
* tree-streamer-in.c (unpack_ts_type_common_value_fields): Mark in TYPE_SIZE whether
type is complete.
(lto_input_ts_type_common_tree_pointers): Do same changes as in
write_ts_type_common_tree_pointers
(lto_input_ts_type_non_common_tree_pointers): Likewise.
* lto.c (lto_copy_fields_not_streamed): New function.
(compare_tree_sccs_1): Do not compare fields shared in between type
and variant.
(lto_read_decls): Fixup types first before inserting into hash.
From-SVN: r212114
* varasm.c (set_implicit_section): New function.
(resolve_unique_section): Use it to set implicit section
for aliases, too.
(get_named_text_section): Use symtab_get_node (decl)->implicit_section
(default_function_section): Likewise.
(decl_binds_to_current_def_p): Constify argument.
* varasm.h (decl_binds_to_current_def_p): Update prototype.
* asan.c (asan_protect_global): Use symtab_get_node (decl)->implicit_section.
* symtab.c (dump_symtab_base): Dump implicit sections.
(verify_symtab_base): Verify sanity of sectoins and comdats.
(symtab_resolve_alias): Alias share the section of its target.
(set_section_1): New function.
(symtab_node::set_section): Move here, recurse to aliases.
(verify_symtab): Check for duplicated symtab lists.
* tree-core.h (implicit_section_name_p): Remove.
* tree-vect-data-refs.c: Include varasm.h.
(vect_can_force_dr_alignment_p): Fix conditional on when
decl bints to current definition; use
symtab_get_node (decl)->implicit_section.
* cgraph.c (cgraph_make_node_local_1): Fix section set.
* cgraph.h (struct symtab_node): Add implicit_section.
(set_section): Rename to ...
(set_section_for_node): ... this one.
(set_section): Declare.
* tree.h (DECL_HAS_IMPLICIT_SECTION_NAME_P): Remove.
* lto-cgraph.c (lto_output_node, lto_output_varpool_node,
input_overwrite_node, input_varpool_node): Stream implicit_section.
* ipa.c (symtab_remove_unreachable_nodes): Do not check symtab before
removal; it will fail in LTO.
* vtable-class-hierarchy.c: Use symtab_get_node (var_decl)->implicit_section.
* optimize.c (cdtor_comdat_group): Fix handling of aliases.
(maybe_clone_body): Move symbol across comdat groups.
* method.c (use_thunk): Copy implicit section flag.
* go/go-gcc.cc (Gcc_backend::global_variable_set_init): Use
symtab_get_node(var_decl)->implicit_section.
* lto.c (read_cgraph_and_symbols): Remove unreachable symbols.
(do_whole_program_analysis): Use verify_symtab.
From-SVN: r211434
2014-04-15 Richard Biener <rguenther@suse.de>
* common.opt (lto_partition_model): New enum.
(flto-partition=): Merge separate options with a single with argument,
add -flto-partition=one support.
* flag-types.h (enum lto_partition_model): Declare.
* opts.c (finish_options): Remove duplicate -flto-partition=
option check.
* lto-wrapper.c (run_gcc): Adjust.
lto/
* lto.c: Include params.h.
(do_whole_program_analysis): Switch on flag_lto_partition value,
add support for LTO_PARTITION_ONE.
* lto-partition.h (lto_balanced_map): Adjust.
* lto-partition.c (lto_balanced_map): Get number of desired
partitions as argument to support -flto-partition=one.
From-SVN: r209416
2014-03-19 Richard Biener <rguenther@suse.de>
PR middle-end/60553
* tree-core.h (tree_type_common): Re-order pointer members
to reduce recursion depth during GC walks.
lto/
* lto-tree.h (lang_tree_node): For types use TYPE_NEXT_VARIANT
instead of TREE_CHAIN as chain_next.
From-SVN: r208682
2014-03-19 Richard Biener <rguenther@suse.de>
* lto.c (lto_wpa_write_files): Move call to
lto_promote_cross_file_statics ...
(do_whole_program_analysis): ... here, into the partitioning
block. Do not ggc_collect after lto_wpa_write_files but
for a last time before it.
From-SVN: r208679
2014-03-08 Paulo Matos <paulo@matos-sorge.com>
Richard Biener <rguenther@suse.de>
* lto-wrapper.c (merge_and_complain): Ensure -fshort-double is used
consistently accross all TUs.
(run_gcc): Enable -fshort-double automatically at link at link-time
and disallow override.
2014-03-08 Paulo Matos <paulo@matos-sorge.com>
* c.opt: Enable LTO FE for fshort-double.
2014-03-08 Paulo Matos <paulo@matos-sorge.com>
* gcc.dg/lto/pr55113_0.c: New testcase.
2014-03-08 Paulo Matos <paulo@matos-sorge.com>
* lto-lang.c (lto_init): Pass flag_short_double to
build_common_tree_nodes.
Co-Authored-By: Richard Biener <rguenther@suse.de>
From-SVN: r208428
* lto-partition.c (add_symbol_to_partition_1,
undo_partition, lto_balanced_map): Aliases have no
defined size.
(lto_balanced_map): Do not follow refering variables
if they can be optimized out.
From-SVN: r207967
2014-02-14 Richard Biener <rguenther@suse.de>
PR lto/60179
* lto-streamer-out.c (DFS_write_tree_body): Do not follow
DECL_FUNCTION_SPECIFIC_TARGET.
(hash_tree): Do not hash DECL_FUNCTION_SPECIFIC_TARGET.
* tree-streamer-out.c (pack_ts_target_option): Remove.
(streamer_pack_tree_bitfields): Do not stream
TS_TARGET_OPTION.
(write_ts_function_decl_tree_pointers): Do not stream
DECL_FUNCTION_SPECIFIC_TARGET.
* tree-streamer-in.c (unpack_ts_target_option): Remove.
(unpack_value_fields): Do not stream TS_TARGET_OPTION.
(lto_input_ts_function_decl_tree_pointers): Do not stream
DECL_FUNCTION_SPECIFIC_TARGET.
lto/
* lto.c (compare_tree_sccs_1): Do not compare
DECL_FUNCTION_SPECIFIC_TARGET.
(lto_read_decls): Re-build DECL_FUNCTION_SPECIFIC_TARGET.
From-SVN: r207783
2014-02-12 Richard Biener <rguenther@suse.de>
PR lto/60060
* lto-lang.c (lto_write_globals): Do not call
wrapup_global_declarations or emit_debug_global_declarations
but emit debug info for non-function scope variables
directly.
From-SVN: r207715
2014-02-05 Richard Biener <rguenther@suse.de>
lto/
* lto.h (lto_global_var_decls): Remove.
* lto-lang.c (lto_init): Do not allocate lto_global_var_decls.
(lto_write_globals): Do nothing in WPA stage, gather globals from
the varpool here ...
* lto.c (lto_main): ... not here.
(materialize_cgraph): Do not call rest_of_decl_compilation
on the empty lto_global_var_decls vector.
(lto_global_var_decls): Remove.
From-SVN: r207510
* ipa.c (function_and_variable_visibility): Decompose DECL_ONE_ONLY
groups when we know they are controlled by LTO.
* varasm.c (default_binds_local_p_1): If object is in other partition,
it will be resolved locally.
* lto-partition.c (get_symbol_class): Only unforced DECL_ONE_ONLY
needs duplicating, not generic COMDAT.
From-SVN: r207489
2014-02-04 Richard Biener <rguenther@suse.de>
PR lto/59723
* lto-streamer-out.c (tree_is_indexable): Force NAMELIST_DECLs
in function context local.
(lto_output_tree_ref): Do not write trees from lto_output_tree_ref.
* lto-streamer-in.c (lto_input_tree_ref): Handle LTO_namelist_decl_ref
similar to LTO_imported_decl_ref.
lto/
* lto.c (mentions_vars_p): Handle NAMELIST_DECL.
(lto_fixup_prevailing_decls): Handle fixing up CONSTRUCTOR values.
From-SVN: r207471
2014-01-09 Richard Biener <rguenther@suse.de>
PR lto/45586
* lto.c (hash_canonical_type): Do not hash TREE_ADDRESSABLE,
TYPE_ALIGN, TYPE_RESTRICT or TYPE_REF_CAN_ALIAS_ALL.
(gimple_canonical_types_compatible_p): Do not compare them either.
From-SVN: r206461
This patch applies the rule that functions defined in FOO.c must be
declared in FOO.h. One of the worst offenders in the code base is
tree.h, unsurprisingly.
The patch creates several new headers: attribs.h calls.h fold-const.h
gcc-symtab.h print-rtl.h print-tree.h stmt.h stor-layout.h stringpool.h
tree-nested.h tree-object-size.h varasm.h.
Functions in each corresponding .c file got moved to those headers and
others that already existed. I wanted to make this patch as mechanical
as possible, so I made no attempt to fix problems like having
build_addr defined in tree-inline.c. I left that for later.
There were some declarations that I could not move out of tree.h
because of header poisoning or the use of target macros. We forbid the
inclusion of things like expr.h from FE files. While that's a
reasonable idea, the FE file *still* manage to at expr.c functionality
because the declarations they want to use were defined in tree.h.
The affected files are builtins.h, emit-rtl.h and expr.h.
If that functionality is allowed to be accessed from the FEs,
then I will later move those functions out of expr.c into tree.c.
I have moved these declarations to the bottom of tree.h so they
are easy to identify later.
There is a namespace collision with libcpp. The file gcc/symtab.c
cannot use gcc/symtab.h because the #include command picks up
libcpp/include/symtab.h first. So I named this file gcc-symtab.h
for now.
Finally, I added a new header to PLUGIN_HEADERS to account for the
tree.h refactoring. I did not add all headers factored out of tree.h
because it is unclear (and impossible to tell) what plugins need.
This adds the one header used by the plugins in the testsuite.
This will be changing quite dramatically as we progress with the header
refactoring.
This patch should offer some minimal incremental build advantages
by reducing the size of tree.h. Changes that would otherwise
affected tree.h, will now go to other headers which are less
frequently included.
* tree.h: Include fold-const.h.
(aggregate_value_p): Moved to function.h.
(alloca_call_p): Moved to calls.h.
(allocate_struct_function): Moved to function.h.
(apply_tm_attr): Moved to attribs.h.
(array_at_struct_end_p): Moved to expr.h.
(array_ref_element_size): Moved to tree-dfa.h.
(array_ref_low_bound): Moved to tree-dfa.h.
(array_ref_up_bound): Moved to tree.h.
(assemble_alias): Moved to cgraph.h.
(bit_from_pos): Moved to stor-layout.h.
(build_addr): Moved to tree-nested.h.
(build_duplicate_type): Moved to tree-inline.h.
(build_fold_addr_expr): Moved to fold-const.h.
(build_fold_addr_expr_with_type): Moved to fold-const.h.
(build_fold_addr_expr_with_type_loc): Moved to fold-const.h.
(build_fold_indirect_ref): Moved to fold-const.h.
(build_fold_indirect_ref_loc): Moved to fold-const.h.
(build_personality_function): Moved to tree.h.
(build_range_check): Moved to fold-const.h.
(build_simple_mem_ref): Moved to fold-const.h.
(build_simple_mem_ref_loc): Moved to fold-const.h.
(build_tm_abort_call): Moved to trans-mem.h.
(byte_from_pos): Moved to stor-layout.h.
(call_expr_flags): Moved to calls.h.
(can_move_by_pieces): Moved to expr.h.
(categorize_ctor_elements): Moved to expr.h.
(change_decl_assembler_name): Moved to gcc-symtab.h.
(combine_comparisons): Moved to fold-const.h.
(complete_ctor_at_level_p): Moved to tree.h.
(component_ref_field_offset): Moved to tree-dfa.h.
(compute_builtin_object_size): Moved to tree-object-size.h.
(compute_record_mode): Moved to stor-layout.h.
(constant_boolean_node): Moved to fold-const.h.
(constructor_static_from_elts_p): Moved to varasm.h.
(cxx11_attribute_p): Moved to attribs.h.
(debug_body): Moved to print-tree.h.
(debug_find_tree): Moved to tree-inline.h.
(debug_fold_checksum): Moved to fold-const.h.
(debug_head): Moved to print-tree.h.
(debug_head): Moved to print-tree.h.
(debug_raw): Moved to print-tree.h.
(debug_tree): Moved to print-tree.h.
(debug_vec_tree): Moved to print-tree.h.
(debug_verbose): Moved to print-tree.h.
(debug_verbose): Moved to print-tree.h.
(decl_attributes): Moved to attribs.h.
(decl_binds_to_current_def_p): Moved to varasm.h.
(decl_default_tls_model): Moved to varasm.h.
(decl_replaceable_p): Moved to varasm.h.
(div_if_zero_remainder): Moved to fold-const.h.
(double_int mem_ref_offset): Moved to fold-const.h.
(dump_addr): Moved to print-tree.h.
(element_precision): Moved to machmode.h.
(expand_dummy_function_end): Moved to function.h.
(expand_function_end): Moved to function.h.
(expand_function_start): Moved to function.h.
(expand_label): Moved to stmt.h.
(expr_first): Moved to tree-iterator.h.
(expr_last): Moved to tree-iterator.h.
(finalize_size_functions): Moved to stor-layout.h.
(finish_builtin_struct): Moved to stor-layout.h.
(finish_record_layout): Moved to stor-layout.h.
(fixup_signed_type): Moved to stor-layout.h.
(fixup_unsigned_type): Moved to stor-layout.h.
(flags_from_decl_or_type): Moved to calls.h.
(fold): Moved to fold-const.h.
(fold_abs_const): Moved to fold-const.h.
(fold_binary): Moved to fold-const.h.
(fold_binary_loc): Moved to fold-const.h.
(fold_binary_to_constant): Moved to fold-const.h.
(fold_build1): Moved to fold-const.h.
(fold_build1_initializer_loc): Moved to fold-const.h.
(fold_build1_loc): Moved to fold-const.h.
(fold_build1_stat_loc): Moved to fold-const.h.
(fold_build2): Moved to fold-const.h.
(fold_build2_initializer_loc): Moved to fold-const.h.
(fold_build2_loc): Moved to fold-const.h.
(fold_build2_stat_loc): Moved to fold-const.h.
(fold_build3): Moved to fold-const.h.
(fold_build3_loc): Moved to fold-const.h.
(fold_build3_stat_loc): Moved to fold-const.h.
(fold_build_call_array): Moved to fold-const.h.
(fold_build_call_array_initializer): Moved to fold-const.h.
(fold_build_call_array_initializer_loc): Moved to fold-const.h.
(fold_build_call_array_loc): Moved to fold-const.h.
(fold_build_cleanup_point_expr): Moved to fold-const.h.
(fold_convert): Moved to fold-const.h.
(fold_convert_loc): Moved to fold-const.h.
(fold_convertible_p): Moved to fold-const.h.
(fold_defer_overflow_warnings): Moved to fold-const.h.
(fold_deferring_overflow_warnings_p): Moved to fold-const.h.
(fold_fma): Moved to fold-const.h.
(fold_ignored_result): Moved to fold-const.h.
(fold_indirect_ref): Moved to fold-const.h.
(fold_indirect_ref_1): Moved to fold-const.h.
(fold_indirect_ref_loc): Moved to fold-const.h.
(fold_read_from_constant_string): Moved to fold-const.h.
(fold_real_zero_addition_p): Moved to fold-const.h.
(fold_single_bit_test): Moved to fold-const.h.
(fold_strip_sign_ops): Moved to fold-const.h.
(fold_ternary): Moved to fold-const.h.
(fold_ternary_loc): Moved to fold-const.h.
(fold_unary): Moved to tree-data-ref.h.
(fold_unary_ignore_overflow): Moved to fold-const.h.
(fold_unary_ignore_overflow_loc): Moved to fold-const.h.
(fold_unary_loc): Moved to fold-const.h.
(fold_unary_to_constant): Moved to fold-const.h.
(fold_undefer_and_ignore_overflow_warnings): Moved to fold-const.h.
(fold_undefer_overflow_warnings): Moved to fold-const.h.
(folding_initializer): Moved to fold-const.h.
(free_temp_slots): Moved to function.h.
(generate_setjmp_warnings): Moved to function.h.
(get_attribute_name): Moved to attribs.h.
(get_identifier): Moved to stringpool.h.
(get_identifier_with_length): Moved to stringpool.h.
(get_inner_reference): Moved to tree.h.
(gimple_alloca_call_p): Moved to calls.h.
(gimplify_parameters): Moved to function.h.
(highest_pow2_factor): Moved to expr.h.
(indent_to): Moved to print-tree.h.
(init_attributes): Moved to attribs.h.
(init_dummy_function_start): Moved to function.h.
(init_function_start): Moved to function.h.
(init_inline_once): Moved to tree-inline.h.
(init_object_sizes): Moved to tree-object-size.h.
(init_temp_slots): Moved to function.h.
(init_tree_optimization_optabs): Moved to optabs.h.
(initialize_sizetypes): Moved to stor-layout.h.
(initializer_constant_valid_for_bitfield_p): Moved to varasm.h.
(initializer_constant_valid_p): Moved to varasm.h.
(int_const_binop): Moved to fold-const.h.
(internal_reference_types): Moved to stor-layout.h.
(invert_tree_comparison): Moved to fold-const.h.
(invert_truthvalue): Moved to fold-const.h.
(invert_truthvalue_loc): Moved to fold-const.h.
(is_tm_ending_fndecl): Moved to trans-mem.h.
(is_tm_may_cancel_outer): Moved to trans-mem.h.
(is_tm_pure): Moved to trans-mem.h.
(is_tm_safe): Moved to trans-mem.h.
(layout_decl): Moved to stor-layout.h.
(layout_type): Moved to stor-layout.h.
(lookup_attribute_spec): Moved to attribs.h.
(make_accum_type): Moved to stor-layout.h.
(make_decl_one_only): Moved to varasm.h.
(make_decl_rtl): Moved to tree.h.
(make_decl_rtl_for_debug): Moved to varasm.h.
(make_fract_type): Moved to stor-layout.h.
(make_or_reuse_sat_signed_accum_type): Moved to stor-layout.h.
(make_or_reuse_sat_signed_fract_type): Moved to stor-layout.h.
(make_or_reuse_sat_unsigned_accum_type): Moved to stor-layout.h.
(make_or_reuse_sat_unsigned_fract_type): Moved to stor-layout.h.
(make_or_reuse_signed_accum_type): Moved to stor-layout.h.
(make_or_reuse_signed_fract_type): Moved to stor-layout.h.
(make_or_reuse_unsigned_accum_type): Moved to stor-layout.h.
(make_or_reuse_unsigned_fract_type): Moved to stor-layout.h.
(make_range): Moved to fold-const.h.
(make_range_step): Moved to fold-const.h.
(make_sat_signed_accum_type): Moved to stor-layout.h.
(make_sat_signed_fract_type): Moved to stor-layout.h.
(make_sat_unsigned_accum_type): Moved to stor-layout.h.
(make_sat_unsigned_fract_type): Moved to stor-layout.h.
(make_signed_accum_type): Moved to stor-layout.h.
(make_signed_fract_type): Moved to stor-layout.h.
(make_signed_type): Moved to stor-layout.h.
(make_unsigned_accum_type): Moved to stor-layout.h.
(make_unsigned_fract_type): Moved to stor-layout.h.
(make_unsigned_type): Moved to stor-layout.h.
(mark_decl_referenced): Moved to varasm.h.
(mark_referenced): Moved to varasm.h.
(may_negate_without_overflow_p): Moved to fold-const.h.
(maybe_get_identifier): Moved to stringpool.h.
(merge_ranges): Moved to fold-const.h.
(merge_weak): Moved to varasm.h.
(mode_for_size_tree): Moved to stor-layout.h.
(multiple_of_p): Moved to fold-const.h.
(must_pass_in_stack_var_size): Moved to calls.h.
(must_pass_in_stack_var_size_or_pad): Moved to calls.h.
(native_encode_expr): Moved to fold-const.h.
(native_interpret_expr): Moved to fold-const.h.
(non_lvalue): Moved to fold-const.h.
(non_lvalue_loc): Moved to fold-const.h.
(normalize_offset): Moved to stor-layout.h.
(normalize_rli): Moved to stor-layout.h.
(notice_global_symbol): Moved to varasm.h.
(omit_one_operand): Moved to fold-const.h.
(omit_one_operand_loc): Moved to fold-const.h.
(omit_two_operands): Moved to fold-const.h.
(omit_two_operands_loc): Moved to fold-const.h.
(operand_equal_p): Moved to tree-data-ref.h.
(parse_input_constraint): Moved to stmt.h.
(parse_output_constraint): Moved to stmt.h.
(place_field): Moved to stor-layout.h.
(pop_function_context): Moved to function.h.
(pop_temp_slots): Moved to function.h.
(pos_from_bit): Moved to stor-layout.h.
(preserve_temp_slots): Moved to function.h.
(print_node): Moved to print-tree.h.
(print_node_brief): Moved to print-tree.h.
(print_rtl): Moved to rtl.h.
(process_pending_assemble_externals): Moved to varasm.h.
(ptr_difference_const): Moved to fold-const.h.
(push_function_context): Moved to function.h.
(push_struct_function): Moved to function.h.
(push_temp_slots): Moved to function.h.
(record_tm_replacement): Moved to trans-mem.h.
(relayout_decl): Moved to stor-layout.h.
(resolve_asm_operand_names): Moved to stmt.h.
(resolve_unique_section): Moved to varasm.h.
(rli_size_so_far): Moved to stor-layout.h.
(rli_size_unit_so_far): Moved to stor-layout.h.
(round_down): Moved to fold-const.h.
(round_down_loc): Moved to fold-const.h.
(round_up): Moved to fold-const.h.
(round_up_loc): Moved to fold-const.h.
(set_decl_incoming_rtl): Moved to emit-rtl.h.
(set_decl_rtl): Moved to tree.h.
(set_min_and_max_values_for_integral_type): Moved to stor-layout.h.
(set_user_assembler_name): Moved to varasm.h.
(setjmp_call_p): Moved to calls.h.
(size_binop): Moved to fold-const.h.
(size_binop_loc): Moved to fold-const.h.
(size_diffop): Moved to fold-const.h.
(size_diffop_loc): Moved to fold-const.h.
(size_int_kind): Moved to fold-const.h.
(stack_protect_epilogue): Moved to function.h.
(start_record_layout): Moved to stor-layout.h.
(supports_one_only): Moved to varasm.h.
(swap_tree_comparison): Moved to fold-const.h.
(tm_malloc_replacement): Moved to trans-mem.h.
(tree build_fold_addr_expr_loc): Moved to fold-const.h.
(tree build_invariant_address): Moved to fold-const.h.
(tree_binary_nonnegative_warnv_p): Moved to fold-const.h.
(tree_binary_nonzero_warnv_p): Moved to fold-const.h.
(tree_call_nonnegative_warnv_p): Moved to fold-const.h.
(tree_expr_nonnegative_p): Moved to fold-const.h.
(tree_expr_nonnegative_warnv_p): Moved to fold-const.h.
(tree_output_constant_def): Moved to varasm.h.
(tree_overlaps_hard_reg_set): Moved to stmt.h.
(tree_single_nonnegative_warnv_p): Moved to fold-const.h.
(tree_single_nonzero_warnv_p): Moved to fold-const.h.
(tree_swap_operands_p): Moved to fold-const.h.
(tree_unary_nonnegative_warnv_p): Moved to fold-const.h.
(tree_unary_nonzero_warnv_p): Moved to fold-const.h.
(update_alignment_for_field): Moved to stor-layout.h.
(use_register_for_decl): Moved to function.h.
(variable_size): Moved to rtl.h.
(vector_type_mode): Moved to stor-layout.h.
* cgraph.h: Corresponding changes.
* emit-rtl.h: Corresponding changes.
* expr.h: Corresponding changes.
* function.h: Corresponding changes.
* optabs.h: Corresponding changes.
* trans-mem.h: Corresponding changes.
Protect against multiple inclusion.
* tree-inline.h: Corresponding changes.
* tree-iterator.h: Corresponding changes.
* tree-dfa.h: Include expr.h.
* tree-ssanames.h: Include stringpool.h.
* attribs.h: New file.
* calls.h: New file.
* fold-const.h: New file.
* gcc-symtab.h: New file.
* print-rtl.h: New file.
* print-tree.h: New file.
* stmt.h: New file.
* stor-layout.h: New file.
* strinpool.h: New file.
* tree-nested.h: New file
* tree-object-size.h: New file.
* varasm.h: New file.
* Makefile.in (PLUGIN_HEADERS): Add stringpool.h.
* alias.c: Include varasm.h.
Include expr.h.
* asan.c: Include calls.h.
Include stor-layout.h.
Include varasm.h.
* attribs.c: Include stringpool.h.
Include attribs.h.
Include stor-layout.h.
* builtins.c: Include stringpool.h.
Include stor-layout.h.
Include calls.h.
Include varasm.h.
Include tree-object-size.h.
* calls.c: Include stor-layout.h.
Include varasm.h.
Include stringpool.h.
Include attribs.h.
* cfgexpand.c: Include stringpool.h.
Include varasm.h.
Include stor-layout.h.
Include stmt.h.
Include print-tree.h.
* cgraph.c: Include varasm.h.
Include calls.h.
Include print-tree.h.
* cgraphclones.c: Include stringpool.h.
Include function.h.
Include emit-rtl.h.
Move inclusion of rtl.h earlier in the file.
* cgraphunit.c: Include varasm.h.
Include stor-layout.h.
Include stringpool.h.
* cilk-common.c: Include stringpool.h.
Include stor-layout.h.
* combine.c: Include stor-layout.h.
* config/aarch64/aarch64-builtins.c: Include stor-layout.h.
Include stringpool.h.
Include calls.h.
* config/aarch64/aarch64.c: Include stringpool.h.
Include stor-layout.h.
Include calls.h.
Include varasm.h.
* config/alpha/alpha.c: Include stor-layout.h.
Include calls.h.
Include varasm.h.
* config/arc/arc.c: Include varasm.h.
Include stor-layout.h.
Include stringpool.h.
Include calls.h.
* config/arm/arm.c: Include stringpool.h.
Include stor-layout.h.
Include calls.h.
Include varasm.h.
* config/avr/avr-c.c: Include stor-layout.h.
* config/avr/avr-log.c: Include print-tree.h.
* config/avr/avr.c: Include print-tree.h.
Include calls.h.
Include stor-layout.h.
Include stringpool.h.
* config/bfin/bfin.c: Include varasm.h.
Include calls.h.
* config/c6x/c6x.c: Include stor-layout.h.
Include varasm.h.
Include calls.h.
Include stringpool.h.
* config/cr16/cr16.c: Include stor-layout.h.
Include calls.h.
* config/cris/cris.c: Include varasm.h.
Include stor-layout.h.
Include calls.h.
Include stmt.h.
* config/darwin.c: Include stringpool.h.
Include varasm.h.
Include stor-layout.h.
* config/epiphany/epiphany.c: Include stor-layout.h.
Include varasm.h.
Include calls.h.
Include stringpool.h.
* config/fr30/fr30.c: Include stor-layout.h.
Include varasm.h.
* config/frv/frv.c: Include varasm.h.
Include stor-layout.h.
Include stringpool.h.
* config/h8300/h8300.c: Include stor-layout.h.
Include varasm.h.
Include calls.h.
Include stringpool.h.
* config/i386/i386.c: Include stringpool.h.
Include attribs.h.
Include calls.h.
Include stor-layout.h.
Include varasm.h.
* config/i386/winnt-cxx.c: Include stringpool.h.
Include attribs.h.
* config/i386/winnt.c: Include stringpool.h.
Include varasm.h.
* config/ia64/ia64-c.c: Include stringpool.h.
* config/ia64/ia64.c: Include stringpool.h.
Include stor-layout.h.
Include calls.h.
Include varasm.h.
* config/iq2000/iq2000.c: Include stor-layout.h.
Include calls.h.
Include varasm.h.
* config/lm32/lm32.c: Include calls.h.
* config/m32c/m32c.c: Include stor-layout.h.
Include varasm.h.
Include calls.h.
* config/m32r/m32r.c: Include stor-layout.h.
Include varasm.h.
Include stringpool.h.
Include calls.h.
* config/m68k/m68k.c: Include calls.h.
Include stor-layout.h.
Include varasm.h.
* config/mcore/mcore.c: Include stor-layout.h.
Include varasm.h.
Include stringpool.h.
Include calls.h.
* config/mep/mep.c: Include varasm.h.
Include calls.h.
Include stringpool.h.
Include stor-layout.h.
* config/microblaze/microblaze.c: Include varasm.h.
Include stor-layout.h.
Include calls.h.
* config/mips/mips.c: Include varasm.h.
Include stringpool.h.
Include stor-layout.h.
Include calls.h.
* config/mmix/mmix.c: Include varasm.h.
Include stor-layout.h.
Include calls.h.
* config/mn10300/mn10300.c: Include stor-layout.h.
Include varasm.h.
Include calls.h.
* config/moxie/moxie.c: Include stor-layout.h.
Include varasm.h.
Include calls.h.
* config/msp430/msp430.c: Include stor-layout.h.
Include calls.h.
* config/nds32/nds32.c: Include stor-layout.h.
Include varasm.h.
Include calls.h.
* config/pa/pa.c: Include stor-layout.h.
Include stringpool.h.
Include varasm.h.
Include calls.h.
* config/pdp11/pdp11.c: Include stor-layout.h.
Include varasm.h.
Include calls.h.
* config/picochip/picochip.c: Include calls.h.
Include stor-layout.h.
Include stringpool.h.
Include varasm.h.
* config/rl78/rl78.c: Include varasm.h.
Include stor-layout.h.
Include calls.h.
* config/rs6000/rs6000-c.c: Include stor-layout.h.
Include stringpool.h.
* config/rs6000/rs6000.c: Include stringpool.h.
Include stor-layout.h.
Include calls.h.
Include print-tree.h.
Include varasm.h.
* config/rx/rx.c: Include varasm.h.
Include stor-layout.h.
Include calls.h.
* config/s390/s390.c: Include print-tree.h.
Include stringpool.h.
Include stor-layout.h.
Include varasm.h.
Include calls.h.
* config/score/score.c: Include stringpool.h.
Include calls.h.
Include varasm.h.
Include stor-layout.h.
* config/sh/sh-c.c: Include stringpool.h.
Include attribs.h.h.
* config/sh/sh.c: Include stringpool.h.
Include stor-layout.h.
Include calls.h.
Include varasm.h.
* config/sol2-c.c: Include stringpool.h.
Include attribs.h.
* config/sol2-cxx.c: Include stringpool.h.
* config/sol2.c: Include stringpool.h.
Include varasm.h.
* config/sparc/sparc.c: Include stringpool.h.
Include stor-layout.h.
Include calls.h.
Include varasm.h.
* config/spu/spu-c.c: Include stringpool.h.
* config/spu/spu.c: Include stringpool.h.
Include stor-layout.h.
Include calls.h.
Include varasm.h.
* config/stormy16/stormy16.c: Include stringpool.h.
Include stor-layout.h.
Include varasm.h.
Include calls.h.
* config/tilegx/tilegx.c: Include stringpool.h.
Include stor-layout.h.
Include varasm.h.
Include calls.h.
* config/tilepro/tilepro.c: Include stringpool.h.
Include stor-layout.h.
Include varasm.h.
Include calls.h.
* config/v850/v850-c.c: Include stringpool.h.
Include attribs.h.
* config/v850/v850.c: Include stringpool.h.
Include stor-layout.h.
Include varasm.h.
Include calls.h.
* config/vax/vax.c: Include calls.h.
Include varasm.h.
* config/vms/vms.c: Include stringpool.h.
* config/vxworks.c: Include stringpool.h.
* config/xtensa/xtensa.c: Include stringpool.h.
Include stor-layout.h.
Include calls.h.
Include varasm.h.
* convert.c: Include stor-layout.h.
* coverage.c: Include stringpool.h.
Include stor-layout.h.
* dbxout.c: Include varasm.h.
Include stor-layout.h.
* dojump.c: Include stor-layout.h.
* dse.c: Include stor-layout.h.
* dwarf2asm.c: Include stringpool.h.
Include varasm.h.
* dwarf2cfi.c: Include stor-layout.h.
* dwarf2out.c: Include rtl.h.
Include stringpool.h.
Include stor-layout.h.
Include varasm.h.
Include function.h.
Include emit-rtl.h.
Move inclusion of rtl.h earlier in the file.
* emit-rtl.c: Include varasm.h.
* except.c: Include stringpool.h.
Include stor-layout.h.
* explow.c: Include stor-layout.h.
* expmed.c: Include stor-layout.h.
* expr.c: Include stringpool.h.
Include stor-layout.h.
Include attribs.h.
Include varasm.h.
* final.c: Include varasm.h.
* fold-const.c: Include stor-layout.h.
Include calls.h.
Include tree-iterator.h.
* function.c: Include stor-layout.h.
Include varasm.h.
Include stringpool.h.
* genattrtab.c (write_header): Emit includes for varasm.h,
stor-layout.h and calls.h.
* genautomata.c (main): Likewise.
* genemit.c: Likewise.
* genopinit.c: Likewise.
* genoutput.c (output_prologue): Likewise.
* genpeep.c: Likewise.
* genpreds.c (write_insn_preds_c): Likewise.
* gengtype.c (open_base_files): Add stringpool.h.
* gimple-expr.c: Include stringpool.h.
Include stor-layout.h.
* gimple-fold.c: Include stringpool.h.
Include expr.h.
Include stmt.h.
Include stor-layout.h.
* gimple-low.c: Include tree-nested.h.
Include calls.h.
* gimple-pretty-print.c: Include stringpool.h.
* gimple-ssa-strength-reduction.c: Include stor-layout.h.
Include expr.h.
* gimple-walk.c: Include stmt.h.
* gimple.c: Include calls.h.
Include stmt.h.
Include stor-layout.h.
* gimplify.c: Include stringpool.h.
Include calls.h.
Include varasm.h.
Include stor-layout.h.
Include stmt.h.
Include print-tree.h.
Include expr.h.
* gimplify-me.c: Include stmt.h
Include stor-layout.h
* internal-fn.c: Include stor-layout.h.
* ipa-devirt.c: Include print-tree.h.
Include calls.h.
* ipa-inline-analysis.c: Include stor-layout.h.
Include stringpool.h.
Include print-tree.h.
* ipa-inline.c: Include trans-mem.h.
Include calls.h.
* ipa-prop.c: Include expr.h.
Include stor-layout.h.
Include print-tree.h.
* ipa-pure-const.c: Include print-tree.h.
Include calls.h.
* ipa-reference.c: Include calls.h.
* ipa-split.c: Include stringpool.h.
Include expr.h.
Include calls.h.
* ipa.c: Include calls.h.
Include stringpool.h.
* langhooks.c: Include stringpool.h.
Include attribs.h.
* lto-cgraph.c: Include stringpool.h.
* lto-streamer-in.c: Include stringpool.h.
* lto-streamer-out.c: Include stor-layout.h.
Include stringpool.h.
* omp-low.c: Include stringpool.h.
Include stor-layout.h.
Include expr.h.
* optabs.c: Include stor-layout.h.
Include stringpool.h.
Include varasm.h.
* passes.c: Include varasm.h.
* predict.c: Include calls.h.
* print-rtl.c: Include print-tree.h.
* print-tree.c: Include varasm.h.
Include print-rtl.h.
Include stor-layout.h.
* realmpfr.c: Include stor-layout.h.
* reg-stack.c: Include varasm.h.
* sdbout.c: Include varasm.h.
Include stor-layout.h.
* simplify-rtx.c: Include varasm.h.
* stmt.c: Include varasm.h.
Include stor-layout.h.
* stor-layout.c: Include stor-layout.h.
Include stringpool.h.
Include varasm.h.
Include print-tree.h.
* symtab.c: Include rtl.h.
Include print-tree.h.
Include varasm.h.
Include function.h.
Include emit-rtl.h.
* targhooks.c: Include stor-layout.h.
Include varasm.h.
* toplev.c: Include varasm.h.
Include tree-inline.h.
* trans-mem.c: Include calls.h.
Include function.h.
Include rtl.h.
Include emit-rtl.h.
* tree-affine.c: Include expr.h.
* tree-browser.c: Include print-tree.h.
* tree-call-cdce.c: Include stor-layout.h.
* tree-cfg.c: Include trans-mem.h.
Include stor-layout.h.
Include print-tree.h.
* tree-complex.c: Include stor-layout.h.
* tree-data-ref.c: Include expr.h.
* tree-dfa.c: Include stor-layout.h.
* tree-eh.c: Include expr.h.
Include calls.h.
* tree-emutls.c: Include stor-layout.h.
Include varasm.h.
* tree-if-conv.c: Include stor-layout.h.
* tree-inline.c: Include stor-layout.h.
Include calls.h.
* tree-loop-distribution.c: Include stor-layout.h.
* tree-nested.c: Include stringpool.h.
Include stor-layout.h.
* tree-object-size.c: Include tree-object-size.h.
* tree-outof-ssa.c: Include stor-layout.h.
* tree-parloops.c: Include stor-layout.h.
Include tree-nested.h.
* tree-pretty-print.c: Include stor-layout.h.
Include expr.h.
* tree-profile.c: Include varasm.h.
Include tree-nested.h.
* tree-scalar-evolution.c: Include expr.h.
* tree-sra.c: Include stor-layout.h.
* tree-ssa-address.c: Include stor-layout.h.
* tree-ssa-ccp.c: Include stor-layout.h.
* tree-ssa-dce.c: Include calls.h.
* tree-ssa-dom.c: Include stor-layout.h.
* tree-ssa-forwprop.c: Include stor-layout.h.
* tree-ssa-ifcombine.c: Include stor-layout.h.
* tree-ssa-loop-ivopts.c: Include stor-layout.h.
* tree-ssa-loop-niter.c: Include calls.h.
Include expr.h.
* tree-ssa-loop-prefetch.c: Include stor-layout.h.
* tree-ssa-math-opts.c: Include stor-layout.h.
* tree-ssa-operands.c: Include stmt.h.
Include print-tree.h.
* tree-ssa-phiopt.c: Include stor-layout.h.
* tree-ssa-reassoc.c: Include stor-layout.h.
* tree-ssa-sccvn.c: Include stor-layout.h.
* tree-ssa-sink.c: Include stor-layout.h.
* tree-ssa-strlen.c: Include stor-layout.h.
* tree-ssa-structalias.c: Include stor-layout.h.
Include stmt.h.
* tree-ssa-tail-merge.c: Include stor-layout.h.
Include trans-mem.h.
* tree-ssa-uncprop.c: Include stor-layout.h.
* tree-ssa.c: Include stor-layout.h.
* tree-ssanames.c: Include stor-layout.h.
* tree-streamer-in.c: Include stringpool.h.
* tree-streamer-out.c: Include stor-layout.h.
* tree-switch-conversion.c: Include varasm.h.
Include stor-layout.h.
* tree-tailcall.c: Include stor-layout.h.
* tree-vect-data-refs.c: Include stor-layout.h.
* tree-vect-generic.c: Include stor-layout.h.
* tree-vect-loop.c: Include stor-layout.h.
* tree-vect-patterns.c: Include stor-layout.h.
* tree-vect-slp.c: Include stor-layout.h.
* tree-vect-stmts.c: Include stor-layout.h.
* tree-vectorizer.c: Include stor-layout.h.
* tree-vrp.c: Include stor-layout.h.
Include calls.h.
* tree.c: Include stor-layout.h.
Include calls.h.
Include attribs.h.
Include varasm.h.
* tsan.c: Include expr.h.
* ubsan.c: Include stor-layout.h.
Include stringpool.h.
* value-prof.c: Include tree-nested.h.
Include calls.h.
* var-tracking.c: Include varasm.h.
Include stor-layout.h.
* varasm.c: Include stor-layout.h.
Include stringpool.h.
Include gcc-symtab.h.
Include varasm.h.
* varpool.c: Include varasm.h.
* vmsdbgout.c: Include varasm.h.
* xcoffout.c: Include varasm.h.
ada/ChangeLog
* gcc-interface/decl.c: Include stringpool.h
Include stor-layout.h
* gcc-interface/misc.c: Include stor-layout.h
Include print-tree.h
* gcc-interface/trans.c: Include stringpool.h
Include stor-layout.h
Include stmt.h
Include varasm.h
* gcc-interface/utils.c: Include stringpool.h
Include stor-layout.h
Include attribs.h
Include varasm.h
* gcc-interface/utils2.c: Include stringpool.h
Include stor-layout.h
Include attribs.h
Include varasm.h
c-family/ChangeLog
* c-common.c: Include fold-const.h.
Include stor-layout.h.
Include calls.h.
Include stringpool.h.
Include attribs.h.
Include varasm.h.
Include trans-mem.h.
* c-cppbuiltin.c: Include stor-layout.h.
Include stringpool.h.
* c-format.c: Include stringpool.h.
* c-lex.c: Include stringpool.h.
Include stor-layout.h.
* c-pragma.c: Include stringpool.h.
Include attribs.h.
Include varasm.h.
Include gcc-symtab.h.
* c-pretty-print.c: Include stor-layout.h.
Include attribs.h.
* cilk.c: Include stringpool.h.
Include calls.h.
c/ChangeLog
* c-decl.c: Include print-tree.h.
Include stor-layout.h.
Include varasm.h.
Include attribs.h.
Include stringpool.h.
* c-lang.c: Include fold-const.h.
* c-parser.c: Include stringpool.h.
Include attribs.h.
Include stor-layout.h.
Include varasm.h.
Include trans-mem.h.
* c-typeck.c: Include stor-layout.h.
Include trans-mem.h.
Include varasm.h.
Include stmt.h.
cp/ChangeLog
* call.c: Include stor-layout.h.
Include trans-mem.h.
Include stringpool.h.
* class.c: Include stringpool.h.
Include stor-layout.h.
Include attribs.h.
* cp-gimplify.c: Include stor-layout.h.
* cvt.c: Include stor-layout.h.
* decl.c: Include stringpool.h.
Include stor-layout.h.
Include varasm.h.
Include attribs.h.
Include calls.h.
* decl2.c: Include stringpool.h.
Include varasm.h.
Include attribs.h.
Include stor-layout.h.
Include calls.h.
* error.c: Include stringpool.h.
* except.c: Include stringpool.h.
Include trans-mem.h.
Include attribs.h.
* init.c: Include stringpool.h.
Include varasm.h.
* lambda.c: Include stringpool.h.
* lex.c: Include stringpool.h.
* mangle.c: Include stor-layout.h.
Include stringpool.h.
* method.c: Include stringpool.h.
Include varasm.h.
* name-lookup.c: Include stringpool.h.
Include print-tree.h.
Include attribs.h.
* optimize.c: Include stringpool.h.
* parser.c: Include print-tree.h.
Include stringpool.h.
Include attribs.h.
Include trans-mem.h.
* pt.c: Include stringpool.h.
Include varasm.h.
Include attribs.h.
Include stor-layout.h.
* ptree.c: Include print-tree.h.
* repo.c: Include stringpool.h.
* rtti.c: Include stringpool.h.
Include stor-layout.h.
* semantics.c: Include stmt.h.
Include varasm.h.
Include stor-layout.h.
Include stringpool.h.
* tree.c: Include stor-layout.h.
Include print-tree.h.
Include tree-iterator.h.
* typeck.c: Include stor-layout.h.
Include varasm.h.
* typeck2.c: Include stor-layout.h.
Include varasm.h.
* vtable-class-hierarchy.c: Include stringpool.h.
Include stor-layout.h.
fortran/ChangeLog
* decl.c: Include stringpool.h.
* iresolve.c: Include stringpool.h.
* match.c: Include stringpool.h.
* module.c: Include stringpool.h.
* target-memory.c: Include stor-layout.h.
* trans-common.c: Include stringpool.h.
Include stor-layout.h.
Include varasm.h.
* trans-const.c: Include stor-layout.h.
* trans-decl.c: Include stringpool.h.
Include stor-layout.h.
Include varasm.h.
Include attribs.h.
* trans-expr.c: Include stringpool.h.
* trans-intrinsic.c: Include stringpool.h.
Include tree-nested.h.
Include stor-layout.h.
* trans-io.c: Include stringpool.h.
Include stor-layout.h.
* trans-openmp.c: Include stringpool.h.
* trans-stmt.c: Include stringpool.h.
* trans-types.c: Include stor-layout.h.
Include stringpool.h.
* trans.c: Include stringpool.h.
go/ChangeLog
* go-backend.c: Include stor-layout.h.
* go-gcc.cc: Include stringpool.h.
Include stor-layout.h.
Include varasm.h.
* go-lang.c: Include stor-layout.h.
java/ChangeLog
* builtins.c: Include stor-layout.h.
Include stringpool.h.
* class.c: Include stringpool.h.
Include stor-layout.h.
Include varasm.h.
* constants.c: Include stringpool.h.
Include stor-layout.h.
* decl.c: Include stor-layout.h.
Include stringpool.h.
Include varasm.h.
* except.c: Include stringpool.h.
Include stor-layout.h.
* expr.c: Include stringpool.h.
Include stor-layout.h.
* jcf-parse.c: Include stringpool.h.
* mangle.c: Include stringpool.h.
* resource.c: Include stringpool.h.
Include stor-layout.h.
* typeck.c: Include stor-layout.h.
Include stringpool.h.
* verify-glue.c: Include stringpool.h.
lto/ChangeLog
* lto-lang.c: Include stringpool.h.
Include stor-layout.h.
* lto-partition.c: Include gcc-symtab.h.
* lto.c: Include stor-layout.h.
objc/ChangeLog
* objc-act.c: Include stringpool.h.
Include stor-layout.h.
Include attribs.h.
* objc-encoding.c: Include stringpool.h.
Include stor-layout.h.
* objc-gnu-runtime-abi-01.c: Include stringpool.h.
* objc-next-runtime-abi-01.c:
Include stringpool.h.
* objc-next-runtime-abi-02.c: Include stringpool.h.
* objc-runtime-shared-support.c: Include stringpool.h.
testsuite/ChangeLog
* gcc.dg/plugin/selfassign.c: Include stringpool.h.
* gcc.dg/plugin/start_unit_plugin.c: Likewise.
From-SVN: r205023
gcc/ChangeLog:
2013-10-29 Balaji V. Iyer <balaji.v.iyer@intel.com>
* builtins.c (is_builtin_name): Added a check for __cilkrts_detach and
__cilkrts_pop_frame. If matched, then return true for built-in
function name.
(expand_builtin): Added BUILT_IN_CILK_DETACH and
BUILT_IN_CILK_POP_FRAME case.
* langhooks-def.h (lhd_install_body_with_frame_cleanup): New prototype.
(lhs_cilk_detect_spawn): Likewise.
(LANG_HOOKS_DECLS): Added LANG_HOOKS_CILKPLUS.
(LANG_HOOKS_CILKPLUS_DETECT_SPAWN_AND_UNWRAP): New #define.
(LANG_HOOKS_CILKPLUS_FRAME_CLEANUP): Likewise.
(LANG_HOOKS_CILKPLUS_GIMPLIFY_SPAWN): Likewise.
(LANG_HOOKS_CILKPLUS): Likewise.
* tree.h (CILK_SPAWN_FN): Likewise.
* builtin.def (DEF_CILK_BUILTIN_STUB): Likewise.
* Makefile.in (C_COMMON_OBJS): Added c-family/cilk.o.
(OBJS): Added cilk-common.o.
(CILK_H): Added a new define.
(gimplify.o): Added CILK_H into dependency list.
(builtins.o): Likewise.
(ipa-inline.o): Likewise.
(ipa-inline-analysis.o): Likewise.
(BUILTINS_DEF): Added cilk-builtins.def.
* langhooks.c (lhd_install_body_with_frame_cleanup): New function.
(lhd_cilk_detect_spawn): Likewise.
* langhooks.h (lang_hooks_for_cilkplus): New struct.
(struct lang_hooks): Added new field called "cilkplus."
* cilk-common.c: New file.
* cilk.h: Likewise.
* cilk-builtins.def: Likewise.
* cppbuiltin.c (define_builtin_macros_for_compilation_flags): Added
"__cilk" macro and set it to 200.
* function.h (struct function::cilk_frame_decl): New field.
(struct function::is_cilk_function): Likewise.
(struct function::calls_cilk_spawn): Likewise.
* gimplify.c (gimplify_call_expr): Added a check if the function call
being gimplified is a spawn detach point. If so, then add pop_frame
and detach function calls.
(gimplify_expr): Added a CILK_SPAWN_STMT and CILK_SYNC_STMT case
for gimplifying _Cilk_spawn and _Cilk_sync statements.
(gimplify_return_expr): Added a check for _Cilk_spawn usage in
function. If so, added a _Cilk_sync and gimplified it.
(gimplify_modify_expr): Added a check for _Cilk_spawn in MODIFY and
INIT_EXPRs. If so, then call gimplify_cilk_spawn.
* ipa-inline-analysis (initialize_inline_failed): Prevent inlining of
spawner function.
(can_inline_edge_p): Prevent inling of spawnee function.
* ira.c (ira_setup_eliminable_regset): Force usage of frame pointer
for functions that use Cilk keywords.
* tree-inline.h (struct copy_body_data::remap_var_for_cilk): New field.
* tree-pretty-print.c (dump_generic_node): Added CILK_SPAWN_STMT and
CILK_SYNC_STMT cases.
* tree.def (DEFTREECODE): Added CILK_SPAWN_STMT and CILK_SYNC_STMT
trees.
* generic.texi (CILK_SPAWN_STMT): Added documentation for _Cilk_spawn.
(CILK_SYNC_STMT): Added documentation for _Cilk_sync.
* passes.texi (Cilk Keywords): New section that describes the compiler
code changes for handling Cilk Keywords.
gcc/c/ChangeLog:
2013-10-29 Balaji V. Iyer <balaji.v.iyer@intel.com>
* c-decl.c (finish_function): Added a call for insert_cilk_frame when
a spawning function is found.
* c-objc-common.h (LANG_HOOKS_CILKPLUS_GIMPLIFY_SPAWN): New #define.
(LANG_HOOKS_CILKPLUS_FRAME_CLEANUP): Likewise.
(LANG_HOOKS_CILKPLUS_DETECT_SPAWN_AND_UNWRAP): Likewise.
* c-parser.c (c_parser_statement_after_labels): Added RID_CILK_SYNC
case.
(c_parser_postfix_expression): Added RID_CILK_SPAWN case.
* c-typeck.c (build_compound_expr): Reject _Cilk_spawn in a comma
expr.
(c_finish_return): Added a check to reject _Cilk_spawn in return
expression.
(build_cilk_spawn): New function.
(build_cilk_sync): Likewise.
* Makefile.in (c-decl.o): Added cilk.h in dependency list.
gcc/c-family/ChangeLog
2013-10-29 Balaji V. Iyer <balaji.v.iyer@intel.com>
* c-common.c (c_common_reswords[]): Added _Cilk_spawn and _Cilk_sync
fields.
(c_define_builtins): Called cilk_init_builtins if Cilk Plus is
enabled.
* c-common.h (enum rid): Added RID_CILK_SPAWN and RID_CILK_SYNC.
(insert_cilk_frame): New prototype.
(cilk_init_builtins): Likewise.
(gimplify_cilk_spawn): Likewise.
(c_cilk_install_body_w_frame_cleanup): Likewise.
(cilk_detect_spawn_and_unwrap): Likewise.
(cilk_set_spawn_marker): Likewise.
(build_cilk_sync): Likewise.
(build_cilk_spawn): Likewise.
* cilk.c: New file.
gcc/lto/ChangeLog
2013-10-29 Balaji V. Iyer <balaji.v.iyer@intel.com>
* Make-lang.in (lto/lto-lang.o): Added cilk.h in dependency list.
* lto-lang.c (lto_init): Added a call to cilk_init_builtins if Cilk
Plus is enabled.
gcc/testsuite/ChangeLog
2013-10-29 Balaji V. Iyer <balaji.v.iyer@intel.com>
* c-c++-common/cilk-plus/CK/compound_cilk_spawn.c: New test.
* c-c++-common/cilk-plus/CK/concec_cilk_spawn.c: Likewise.
* c-c++-common/cilk-plus/CK/fib.c: Likewise.
* c-c++-common/cilk-plus/CK/no_args_error.c: Likewise.
* c-c++-common/cilk-plus/CK/spawnee_inline.c: Likewise.
* c-c++-common/cilk-plus/CK/spawner_inline.c: Likewise.
* c-c++-common/cilk-plus/CK/spawning_arg.c: Likewise.
* c-c++-common/cilk-plus/CK/steal_check.c: Likewise.
* c-c++-common/cilk-plus/CK/test__cilk.c: Likewise.
* c-c++-common/cilk-plus/CK/varargs_test.c: Likewise.
* c-c++-common/cilk-plus/CK/sync_wo_spawn.c: Likewise.
* c-c++-common/cilk-plus/CK/invalid_spawn.c: Likewise.
* c-c++-common/cilk-plus/CK/spawn_in_return.c: Likewise.
* c-c++-common/cilk-plus/CK/fib_init_expr_xy.c: Likewise.
* c-c++-common/cilk-plus/CK/fib_no_sync.c: Likewise.
* c-c++-common/cilk-plus/CK/fib_no_return.c: Likewise.
* gcc.dg/cilk-plus/cilk-plus.exp: Added support to run Cilk Keywords
test stored in c-c++-common. Also, added the Cilk runtime's library
to the ld_library_path.
From-SVN: r204172
2013-10-15 Richard Biener <rguenther@suse.de>
lto/
* lto.c (hash_canonical_type): Split out from ...
(iterative_hash_canonical_type): ... here. Register types
we recurse to.
(gimple_canonical_type_hash): Adjust.
(gimple_register_canonical_type_1): Split out from ...
(gimple_register_canonical_type): ... here. Cache computed
hash value.
(lto_register_canonical_types): Split into two modes,
clearing and computing TYPE_CANONICAL.
(lto_read_decls): Adjust.
(read_cgraph_and_symbols): Do two passes over global trees,
first clearing then computing TYPE_CANONICAL.
From-SVN: r203600
2013-10-14 Richard Biener <rguenther@suse.de>
lto/
* lto.c (gimple_types, type_hash_cache, struct type_pair_d,
type_pair_cache, lookup_type_pair, struct sccs, next_dfs_num,
gtc_next_dfs_num, compare_type_names_p, gtc_visit,
gimple_types_compatible_p_1, gimple_types_compatible_p,
visit, iterative_hash_name, struct type_hash_pair,
type_hash_pair_compare, iterative_hash_gimple_type, gimple_type_hash,
gimple_type_eq, gimple_register_type, num_not_merged_types,
num_not_merged_types_in_same_scc, num_not_merged_types_trees,
num_not_merged_types_in_same_scc_trees): Remove old merging code
and statistics.
(lto_read_decls): Do not run old merging code in parallel.
(read_cgraph_and_symbols): Do not init/free old merging
data structures.
(print_lto_report_1): Do not report differences of old vs. new
merging code.
From-SVN: r203533
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
* lto.c (tree_with_vars): Turn into vector.
(MAYBE_REMEMBER_WITH_VARS): Change to...
(CHECK_VAR): ... this one.
(CHECK_NO_VAR): New macro.
(maybe_remember_with_vars_typed): Turn to ...
(mentions_vars_p_typed): ... this one.
(maybe_remember_with_vars_common): Turn to ...
(mentions_vars_p_comon): ... this one.
(maybe_remember_with_vars_decl_minimal): Turn to ...
(mentions_vars_p_decl_minmal): ... this one.
(maybe_remember_with_vars_decl_common): Turn to ...
(mentions_vars_p_decl_common): ... this one.
(maybe_remember_with_vars_decl_with_vis): Turn to ...
(mentions_vars_p_decl_with_vis): ... this one.
(maybe_remember_with_vars_decl_non_common): Turn to ...
(mentions_vars_p_decl_non_common): ... this one.
(maybe_remember_with_vars_function): Turn to ...
(mentions_vars_p_function): ... this one.
(maybe_remember_with_vars_field_decl): Turn to ...
(mentions_vars_p_field_decl): ... this one.
(maybe_remember_with_vars_type): Turn to ...
(mentions_vars_p_type): ... this one.
(maybe_remember_with_vars_binfo): Turn to ...
(mentions_vars_p_binfo): ... this one.
(maybe_remember_with_vars_constructor): Turn to ...
(mentions_vars_p_constructor): ... this one.
(maybe_remember_with_vars_expr): Turn to ...
(mentions_vars_p_expr): ... this one.
(maybe_remember_with_vars): Turn to ...
(mentions_vars_p): ... this one.
(lto_read_decls): Update.
(LTO_SET_PREVAIL): Do not call function for internal decls.
(lto_fixup_prevailing_decls): Update to match mentions_vars_p;
check that something was updated.
(lto_fixup_state): Do not care about internal decls.
(lto_fixup_decls): Update.
(read_cgraph_and_symbols): Update.
From-SVN: r202143
* lto.c (compare_tree_sccs_1): Drop DECL_ERROR_ISSUED,
DECL_DEFER_OUTPUT and DECL_IN_TEXT_SECTION.
(unify_scc): Do checking assert.
* lto-streamer-out.c (DFS_write_tree_body): Drop
BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX and BINFO_VPTR_INDEX.
(hash_tree): Do not hash DECL_DEFER_OUTPUT, BINFO_INHERITANCE_CHAIN,
BINFO_SUBVTT_INDEX, BINFO_VPTR_INDEX, DECL_IN_TEXT_SECTION.
* tree-streamer-in.c (unpack_ts_decl_common_value_fields):
Do not read DECL_ERROR_ISSUED.
(unpack_ts_decl_with_vis_value_fields): Do not read
DECL_DEFER_OUTPUT.
(lto_input_ts_binfo_tree_pointers): Do not read BINFO_INHERITANCE_CHAIN,
BINFO_SUBVTT_INDEX, BINFO_VPTR_INDEX
* tree-streamer-out.c (pack_ts_decl_common_value_fields): Do not
write DECL_ERROR_ISSUED..
(pack_ts_decl_with_vis_value_fields): Do not write
DECL_DEFER_OUTPUT.
(write_ts_binfo_tree_pointers): Do not read BINFO_INHERITANCE_CHAIN,
BINFO_SUBVTT_INDEX, BINFO_VPTR_INDEX
* print-tree.c (print_node): Do not print DECL_ERROR_ISSUED.
* tree.h (tree_decl_common): Update comment.
(DECL_ERROR_ISSUED): Remove.
From-SVN: r202052
* cgraph.c (cgraph_get_body): New function based on lto.c
implementation.
* cgraph.h (cgraph_get_body): Declare.
* cgraphclones.c (cgraph_create_virtual_clone): Commonize WPA and LTO paths.
* cgraphunit.c (expand_function): Get body prior expanding.
* ipa.c (function_and_variable_visibility): Use gimple_has_body_p test.
* lto-cgraph.c (lto_output_node): Do not stream bodies we don't really need.
* passes.c (do_per_function_toporder): Get body.
* tree-inline.c (expand_call_inline): Get body prior inlining it.
* tree-ssa-structalias.c (ipa_pta_execute): Get body; skip clones.
* lto.c (lto_materialize_function): Do not read body anymore.
From-SVN: r201537
* lto-cgraph.c (compute_ltrans_boundary): Add abstract origins into
boundaries.
* lto-streamer-out.c (tree_is_indexable): Results decls and
parm decls are not indexable.
(DFS_write_tree_body): Do not follow args and results.
(hash_tree): Likewise.
(output_functions): Rearrange so struct function is needed
only when real body is output; be able to also ouptut abstract
functions; output DECL_ARGUMENTS and DECL_RESULT.
(lto_output): When not in WPA, ale store abstract functions.
(write_symbol): Do not care about RESULT_DECL.
(output_symbol_p): Handle correctly sbtract decls.
* lto-streamer-in.c (input_function): Rearrange so struct
function can be NULL at entry; allow streaming of
functions w/o body; store DECL_ARGUMENTS and DECL_RESULT.
* ipa.c (symtab_remove_unreachable_nodes): Silence confused
sanity check during LTO.
* tree-streamer-out.c (write_ts_decl_non_common_tree_pointers): Skip
RESULT_DECl and DECL_ARGUMENTS.
* tree-streamer-in.c (lto_input_ts_decl_non_common_tree_pointers):
Likewise.
* lto.c (lto_materialize_function): Do not push struct function.
* lto-partition.c (get_symbol_class): Handle abstracts correctly.
(may_need_named_section_p): Even abstract origins may need
named section.
From-SVN: r201468
This patch introduces a gcc::pass_manager class and moves various non-GTY
globals relating to pass management into it. The gcc::context gains its
first field: a pointer to the gcc::pass_manager instance.
gcc/
* Makefile.in (PASS_MANAGER_H): New.
(lto-cgraph.o): Depend on CONTEXT_H and PASS_MANAGER_H.
(passes.o): Likewise.
(statistics.o): Likewise.
(cgraphunit.o): Likewise.
(context.o): Depend on PASS_MANAGER_H.
* pass_manager.h: New.
* cgraphunit.c (cgraph_add_new_function): Update for moves
of globals to fields of pass_manager.
(analyze_function): Likewise.
(expand_function): Likewise.
(ipa_passes): Likewise.
(compile): Likewise.
* context.c (context::context): New.
* context.h (context::context): New.
(context::get_passes): New.
(context::passes_): New.
* lto-cgraph.c (input_node): Update for moves of globals to
fields of pass_manager.
* passes.c (all_passes): Remove, in favor of a field of the
same name within the new class pass_manager.
(all_small_ipa_passes): Likewise.
(all_lowering_passes): Likewise.
(all_regular_ipa_passes): Likewise.
(all_late_ipa_passes): Likewise.
(all_lto_gen_passes): Likewise.
(passes_by_id): Likewise.
(passes_by_id_size): Likewise.
(gcc_pass_lists): Remove, in favor of "pass_lists" field within
the new class pass_manager.
(set_pass_for_id): Convert to...
(pass_manager::set_pass_for_id): ...method.
(get_pass_for_id): Convert to...
(pass_manager::get_pass_for_id): ...method.
(register_one_dump_file): Move body of implementation into...
(pass_manager::register_one_dump_file): ...here.
(register_dump_files_1): Convert to...
(pass_manager::register_dump_files_1): ...method.
(register_dump_files): Convert to...
(pass_manager::register_dump_files): ...method.
(create_pass_tab): Update for moves of globals to fields of
pass_manager.
(dump_passes): Move body of implementation into...
(pass_manager::dump_passes): ...here.
(register_pass): Move body of implementation into...
(pass_manager::register_pass): ...here.
(init_optimization_passes): Convert into...
(pass_manager::pass_manager): ...constructor for new
pass_manager class, and initialize the pass_lists array.
(check_profile_consistency): Update for moves of globals to
fields of pass_manager.
(dump_profile_report): Move body of implementation into...
(pass_manager::dump_profile_report): ...here.
(ipa_write_summaries_1): Update for moves of pass lists from
being globals to fields of pass_manager.
(ipa_write_optimization_summaries): Likewise.
(ipa_read_summaries): Likewise.
(ipa_read_optimization_summaries): Likewise.
(execute_all_ipa_stmt_fixups): Likewise.
* statistics.c (statistics_fini): Update for moves of globals to
fields of pass_manager.
* toplev.c (general_init): Replace call to
init_optimization_passes with construction of the pass_manager
instance.
* tree-pass.h (all_passes): Remove, in favor of a field of the
same name within the new class pass_manager.
(all_small_ipa_passes): Likewise.
(all_lowering_passes): Likewise.
(all_regular_ipa_passes): Likewise.
(all_lto_gen_passes): Likewise.
(all_late_ipa_passes): Likewise.
(passes_by_id): Likewise.
(passes_by_id_size): Likewise.
(gcc_pass_lists): Remove, in favor of "pass_lists" field within
the new class pass_manager.
(get_pass_for_id): Remove.
gcc/lto/
* Make-lang.in (lto/lto.o:): Depend on CONTEXT_H and
PASS_MANAGER_H.
* lto.c (do_whole_program_analysis): Update for move of
all_regular_ipa_passes from a global to a field of class
pass_manager.
From-SVN: r201351
2013-06-18 Richard Biener <rguenther@suse.de>
* tree-streamer.h (streamer_tree_cache_create): Adjust prototype.
* tree-streamer.c (streamer_tree_cache_create): Make maintaining
the map from cache entry to cache index optional.
(streamer_tree_cache_replace_tree): Adjust accordingly.
(streamer_tree_cache_append): Likewise.
(streamer_tree_cache_delete): Likewise.
* lto-streamer-in.c (lto_data_in_create): Do not maintain the
streamer cache map from cache entry to cache index.
* lto-streamer-out.c (create_output_block): Adjust.
lto/
* lto.c (lto_register_var_decl_in_symtab): Pass in cache index
and use it.
(lto_register_function_decl_in_symtab): Likewise.
(cmp_tree): New function.
(unify_scc): Instead of using the streamer cache map from entry
to cache index match up the two maps we have by sorting them.
Adjust calls to lto_register_var_decl_in_symtab and
lto_register_function_decl_in_symtab.
From-SVN: r200168
2013-06-17 Richard Biener <rguenther@suse.de>
* lto-streamer.h (enum LTO_tags): Add LTO_tree_scc.
(lto_input_scc): Declare.
(lto_input_tree_1): Likewise.
(struct lto_stats_d): Add num_tree_bodies_output and
num_pickle_refs_output.
* lto-streamer-in.c (lto_read_body): Use streamer_tree_cache_get_tree.
(lto_read_tree_1): Split out from ...
(lto_read_tree): ... this.
(lto_input_scc): New function.
(lto_input_tree_1): Split out from ...
(lto_input_tree): ... this. Handle LTO_tree_scc.
(lto_data_in_create): Create the streamer cache without hashes.
* lto-streamer-out.c (create_output_block): Create the streamer
cache with hashes when not doing WPA.
(lto_write_tree_1): Split out from ...
(lto_write_tree): ... this.
(get_symbol_initial_value): New function.
(lto_output_tree_1): Split out from ...
(lto_output_tree): ... this. Write trees as series of SCCs
using a DFS walk via DFS_write_tree.
(struct sccs, struct scc_entry): New types.
(next_dfs_num, sccstack, sccstate, sccstate_obstack): New globals.
(DFS_write_tree_body): New function.
(DFS_write_tree): Likewise.
(hash_tree): Likewise.
(scc_entry_compare): Likewise.
(hash_scc): Likewise.
(tree_is_indexable): DEBUG_EXPR_DECLs are local entities.
* tree-streamer-in.c (lto_input_ts_list_tree_pointers): Stream
TREE_CHAIN as regular reference.
(streamer_read_integer_cst): Remove.
(streamer_get_pickled_tree): Adjust.
* tree-streamer-out.c (streamer_write_chain): Disable streaming
of DECL_EXTERNALs in BLOCK_VARS for now.
(write_ts_list_tree_pointers): Stream TREE_CHAIN as regular
reference.
* tree-streamer.c (streamer_tree_cache_add_to_node_array):
Add hash value argument and record that if hashes are recorded
in the cache.
(streamer_tree_cache_insert_1): Adjust.
(streamer_tree_cache_insert): Likewise.
(streamer_tree_cache_insert_at): Rename to ...
(streamer_tree_cache_replace_tree): ... this and adjust.
(streamer_tree_cache_append): Adjust.
(record_common_node): Likewise.
(streamer_tree_cache_create): Add argument whether to
record hash values together with trees.
(streamer_tree_cache_delete): Adjust.
* tree-streamer.h (struct streamer_tree_cache_d): Add
vector of hashes.
(streamer_read_integer_cst): Remove.
(streamer_tree_cache_insert): Adjust.
(streamer_tree_cache_append): Likewise.
(streamer_tree_cache_insert_at): Rename to ...
(streamer_tree_cache_replace_tree): ... this and adjust.
(streamer_tree_cache_create): Add argument whether to record hashes.
(streamer_tree_cache_get): Rename to ...
(streamer_tree_cache_get_tree): ... this.
(streamer_tree_cache_get_hash): New function.
* tree.c (cache_integer_cst): New function.
* tree.h (cache_integer_cst): Declare.
(ANON_AGGRNAME_FORMAT, ANON_AGGRNAME_P): Move here from cp/cp-tree.h.
* lto-symtab.c (lto_varpool_replace_node): Only release
DECL_INITIAL of non-prevailing decls.
* varpool.c (varpool_remove_initializer): Do not release
DECL_INITIAL when we are still in CGRAPH_LTO_STREAMING.
cp/
* cp-tree.h (ANON_AGGRNAME_FORMAT, ANON_AGGRNAME_P): Move to tree.h.
lto/
* Make-lang.in (lto.o): Add $(DATA_STREAMER_H) dependency.
* lto.c: Include data-streamer.h.
(lto_read_in_decl_state): Use streamer_tree_cache_get_tree.
(gimple_type_leader_entry_s, gimple_type_leader,
gimple_lookup_type_leader): Remove.
(gtc_visit): Simplify.
(gimple_types_compatible_p): Likewise.
(gimple_register_type_1): Likewise. Merge into ...
(gimple_register_type): ... this. Keep it as legacy for
statistics purposes for now.
(fixup_integer_cst): Remove.
(LTO_FIXUP_TREE, lto_fixup_types, lto_ft_*): Simplify and
rename to ...
(MAYBE_REMEMBER_WITH_VARS, maybe_remember_with_vars,
maybe_remember_with_vars_*): ... these.
(uniquify_nodes): Remove.
(lto_fixup_prevailing_type): New function.
(struct tree_scc, struct tree_scc_hasher): New type and hasher.
(tree_scc_hash, tree_scc_hash_obstack): New globals.
(num_merged_types, num_prevailing_types, num_not_merged_types,
num_not_merged_types_in_same_scc, total_scc_size, num_sccs_read,
total_scc_size_merged, num_sccs_merged, num_scc_compares,
num_scc_compare_collisions): New global counters.
(compare_tree_sccs_1): New function.
(compare_tree_sccs): Likewise.
(unify_scc): Likewise.
(lto_read_decls): Stream in tree SCCs and unify them on the
way in. Finalize prevailing SCC tree members.
(read_cgraph_and_symbols): Do not initialize or free gimple_type_leader.
Allocate and free tree_scc_hash_obstack and tree_scc_hash, do not bother
to ggc-collect during merging.
(print_lto_report_1): Adjust for new merging code.
From-SVN: r200151
* cgraph.c (verify_edge_corresponds_to_fndecl): Be lax about
decl has when in streaming stage.
* lto-symtab.c (lto_symtab_merge_symbols): Likewise.
* cgraph.h (cgraph_state): Add CGRAPH_LTO_STREAMING.
* lto.c (read_cgraph_and_symbols): Set cgraph into streaming state.
From-SVN: r200018
* c-family/c-common.c (handle_alias_ifunc_attribute): Do not set
DECL_EXTERNAL for weakref variables.
* c-family/c-pragma.c (handle_pragma_weak): Make sure aliases
are not declared as external.
* cgraph.c (cgraph_create_function_alias): Set weakref flag.
* cgraph.h (symtab_node_base): Add weakref flag.
* cgraphunit.c (cgraph_reset_node): Clear weakref flag.
(handle_alias_pairs): Set weakref flag, do not set DECL_EXTERNAL.
(output_weakrefs): Use weakref flag.
* fold-const.c (simple_operand_p): Handle WEAK.
* gimple-fold.c (can_refer_decl_in_current_unit_p): Drop weakref.
* ipa.c (varpool_externally_visible_p): Drop weakref.
(function_and_variable_visibility): Update comment; fix weakref
sanity checks; do not clear DECL_WEAK on them.
* lto-cgraph.c (lto_output_node): update.
(lto_output_varpool_node): Update.
(input_overwrite_node): Update.
(input_node): Update.
(input_varpool_node): Update.
* lto-symtab.c (lto_symtab_symbol_p): Do not special case weakrefs.
(lto_symtab_merge_symbols): Add sanity check.
(lto_symtab_prevailing_decl): Do not special case weakrefs.
* passes.c (rest_of_decl_compilation): Set static flag, too.
* symtab.c (dump_symtab_base): Dump weakref.
(verify_symtab_base): Sanity check weakrefs.
(symtab_make_decl_local): Remove duplicated code.
(symtab_alias_ultimate_target): Simplify.
* varpool.c (varpool_create_variable_alias): Set weakref flag.
* lto-partition.c (get_symbol_class): Simplify weakref handling.
(add_symbol_to_partition_1): Likewise.
(contained_in_symbol): Likewise.
(lto_balanced_map): Likewise.
(rename_statics): Drop weakref.
From-SVN: r199971
2013-06-05 Richard Biener <rguenther@suse.de>
* tree-streamer.c (streamer_tree_cache_insert_1): Update the
index associated with the tree we are supposed to replace.
* tree-streamer-out.c (pack_ts_base_value_fields): Output
TREE_ASM_WRITTEN as zero for everything but SSA names.
lto/
* lto.c (num_merged_types): New global variable.
(uniquify_nodes): Increase num_merged_types when merging a type.
(print_lto_report_1): Output the number of merged types.
From-SVN: r199683
* lto-partition.c (privatize_symbol_name): Return true when
privatizing happened.
(rename_statics): Do not go into infinite loop when privatizing
is not needed.
From-SVN: r199040
2013-05-15 Martin Jambor <mjambor@suse.cz>
* ipa-prop.c (ipa_print_node_jump_functions): Print symbol order in
header, print symbol order instead of node uid, print more information
about indirect edge targets.
(ipa_make_edge_direct_to_target): Print symbol order instead of node
uids.
(ipa_make_edge_direct_to_target): Likewise.
(remove_described_reference): Likewise.
(propagate_controlled_uses): Likewise.
(ipa_print_node_params): Also print symbol order.
(ipcp_transform_function): Print symbol order instead of node uids.
* cgraph.c (cgraph_redirect_edge_call_stmt_to_callee): Likewise.
(cgraph_get_create_real_symbol_node): Likewise.
* ipa-cp.c (print_lattice): Likewise.
(print_all_lattices): Likewise.
(determine_versionability): Likewise.
(initialize_node_lattices): Likewise.
(estimate_local_effects): Likewise.
(update_profiling_info): Likewise.
(create_specialized_node): Likewise.
(perhaps_add_new_callers): Likewise.
(decide_about_value): Likewise.
(decide_whether_version_node): Likewise.
(identify_dead_nodes): Likewise.
* ipa-inline-analysis.c (dump_inline_edge_summary): Likewise.
(dump_inline_summary): Likewise.
(estimate_node_size_and_time): Likewise.
(inline_analyze_function): Likewise.
* ipa-inline.c (report_inline_failed_reason): Likewise.
(want_early_inline_function_p): Likewise.
(edge_badness): Likewise.
(update_edge_key): Likewise.
(inline_small_functions): Likewise. Add dumping of order to two other
dumps.
* ipa-pure-const.c (pure_const_read_summary): Print symbol order
instead of node uids.
(propagate_pure_const): Likewise.
(propagate_pure_const): Likewise.
* ipa-utils.c (dump_cgraph_node_set): Likewise.
* lto-cgraph.c (input_node): Explicitly specify we dump uid.
* lto-symtab.c (lto_cgraph_replace_node): Print symbol order instead
of node uids.
* tree-pretty-print.c (dump_function_header): Likewise.
* tree-sra.c (convert_callers_for_node): Dump in traditional format.
Print symbol order instead of node uids.
lto/
* lto-partition.c (lto_balanced_map): Print symbol order instead
of node uids.
From-SVN: r198925
Richard Biener <rguenther@suse.de>
PR lto/54095
* symtab.c (symtab_make_decl_local): Do not add private names.
* lto.c (lto_register_var_decl_in_symtab): Don't do renaming.
(lto_register_var_decl_in_symtab): Likewise.
(lto_main): Promote statics.
* lto-partition.c (privatize_symbol_name): New function.
(promote_symbol): Use it.
(may_need_named_section_p): New predicate.
(rename_statics): New functions.
(lto_promote_cross_file_statics): Simplify; do renaming.
(lto_promote_statics_nonwpa): New function.
* lto-partition.h (lto_promote_statics_nonwpa): New function.
Co-Authored-By: Richard Biener <rguenther@suse.de>
From-SVN: r198741
2013-02-08 Richard Biener <rguenther@suse.de>
PR lto/56231
* lto-streamer.h (struct data_in): Remove current_file, current_line
and current_col members.
* lto-streamer-out.c (lto_output_location): Stream changed bits
en-block for efficiency.
* lto-streamer-in.c (clear_line_info): Remove.
(lto_input_location): Cache current file, line and column
globally via local statics. Read changed bits en-block.
(input_function): Do not call clear_line_info.
(lto_read_body): Likewise.
(lto_input_toplevel_asms): Likewise.
lto/
* lto-lang.c (lto_init): Do not enter a dummy file.
From-SVN: r195884
PR bootstrap/56227
* ggc-page.c (ggc_print_statistics): Use HOST_LONG_LONG_FORMAT
instead of "ll".
* config/i386/i386.c (ix86_print_operand): Ditto.
lto/ChangeLog:
PR bootstrap/56227
* lto.c (lto_resolution_ready): Use %wx instead of
HOST_WIDE_INT_PRINT_HEX_PURE in the argument to internal_error.
From-SVN: r195860
2013-02-04 Richard Guenther <rguenther@suse.de>
PR lto/56168
* lto-symtab.c (lto_symtab_merge_decls_1): Make non-builtin
node prevail as last resort.
(lto_symtab_merge_decls): Remove guard on LTRANS here.
(lto_symtab_prevailing_decl): Builtins are their own prevailing
decl.
lto/
* lto.c (read_cgraph_and_symbols): Do not call lto_symtab_merge_decls
or lto_fixup_decls at LTRANS time.
* gcc.dg/lto/pr56168_0.c: New testcase.
* gcc.dg/lto/pr56168_1.c: Likewise.
From-SVN: r195709
* lto/lto.c (remember_with_vars): Also fixup INTEGER_CST.
(fixup_integer_cst): New functoin.
(lto_ft_type): Fixup BASETYPE of methods and offsets.
From-SVN: r192214
PR lto/54790
* lto.c (resolution_map): New static var.
(register_resolution): New function.
(lto_register_var_decl_in_symtab): Use it.
(read_cgraph_and_symbols): Copy resolutions into the symtab.
* lto-streamer.h (lto_symtab_register_decl, lto_symtab_get_resolution,
lto_mark_nothrow_fndecl, lto_fixup_nothrow_decls): Remove.
* lto-symtab.c (lto_symtab_register_decl): Remove.
From-SVN: r192159
2012-09-20 Martin Jambor <mjambor@suse.cz>
* function.c (push_cfun): Check old current_function_decl matches
old cfun, set new current_function_decl to the decl of the new
cfun.
(push_struct_function): Likewise.
(pop_cfun): Likewise.
(allocate_struct_function): Move call to
invoke_set_current_function_hook to the end of the function.
* cfgexpand.c (estimated_stack_frame_size): Do not set and restore
current_function_decl.
* cgraph.c (cgraph_release_function_body): Likewise.
* cgraphunit.c (cgraph_process_new_functions): Likewise.
(cgraph_add_new_function): Likewise.
(cgraph_analyze_function): Likewise.
(assemble_thunk): Set cfun to NULL at the end.
(expand_function): Move call to set_cfun downwards.
* gimple-low.c (record_vars_into): Only check current_function_decl
before possibly doing push_cfun.
* gimplify.c (gimplify_function_tree): Do not set and restore
current_function_decl.
* ipa-inline-analysis.c (compute_inline_parameters): Likewise.
(inline_analyze_function): Likewise.
* ipa-prop.c (ipa_analyze_node): Likewise.
* ipa-pure-const.c (analyze_function): Likewise.
* lto-streamer-in.c (lto_input_function_body): Do not set
current_function_decl.
* lto-streamer-out.c (output_function): Do not set and restore
current_function_decl.
* omp-low.c (finalize_task_copyfn): Likewise.
(expand_omp_taskreg): Likewise.
(create_task_copyfn): Likewise, move push_cfun up quite a bit.
* passes.c (dump_passes): Do not set and restore current_function_decl.
(do_per_function): Likewise.
(do_per_function_toporder): Likewise.
* trans-mem.c (ipa_tm_scan_irr_function): Likewise.
(ipa_tm_transform_transaction): Likewise.
(ipa_tm_transform_clone): Likewise.
(ipa_tm_execute): Likewise.
* tree-emutls.c (lower_emutls_function_body): Likewise.
* tree-inline.c (initialize_cfun): Do not call pop_cfun.
(tree_function_versioning): Do not call push_cfun, do not set and
restore current_function_decl. Remove assert checking consistency of
cfun and current_function_decl.
* tree-profile.c (tree_profiling): Do not set and restore
current_function_decl.
* tree-sra.c (convert_callers_for_node): Do not set
current_function_decl.
(convert_callers): Do not restore current_function_decl.
(modify_function): Do not set current_function_decl.
* tree-ssa-structalias.c (ipa_pta_execute): Do not set and restore
current_function_decl.
fortran/
* trans-decl.c (gfc_get_extern_function_decl): Push NULL cfun. Do not
set and restore current_function_decl.
(gfc_init_coarray_decl): Do not set and restore current_function_decl.
lto/
* lto.c (lto_materialize_function): Call push_struct_function and
pop_cfun.
From-SVN: r191577
* symtab.c (insert_to_assembler_name_hash): Do not insert
register vars.
(unlink_from_assembler_name_hash): NULL out pointers of unlinked
var.
(symtab_prevail_in_asm_name_hash): New.
(symtab_initialize_asm_name_hash): Break out from ...
(symtab_node_for_asm): ... here.
(dump_symtab_base): Dump LTO file data.
(verify_symtab_base): Register vars are not in symtab.
* cgraph.h (symtab_initialize_asm_name_hash,
symtab_prevail_in_asm_name_hash): New functions.
(symtab_real_symbol_p): New inline.
* lto-symtab.c: Do not include gt-lto-symtab.h.
(lto_symtab_entry_def): Remove.
(lto_symtab_entry_t): Remove.
(lto_symtab_identifiers): Remove.
(lto_symtab_free): Remove.
(lto_symtab_entry_hash): Remove.
(lto_symtab_entry_eq): Remove.
(lto_symtab_entry_marked_p): Remove.
(lto_symtab_maybe_init_hash_table): Remove.
(resolution_guessed_p, set_resolution_guessed): New functions.
(lto_symtab_register_decl): Only set resolution info.
(lto_symtab_get, lto_symtab_get_resolution): Remove.
(lto_symtab_merge): Reorg to work across symtab; do nothing if decls
are same.
(lto_symtab_resolve_replaceable_p): Reorg to work on symtab.
(lto_symtab_resolve_can_prevail_p): Likewise; only real symbols can
prevail.
(lto_symtab_resolve_symbols): Reorg to work on symtab.
(lto_symtab_merge_decls_2): Likewise.
(lto_symtab_merge_decls_1): Likewise; add debug dumps.
(lto_symtab_merge_decls): Likewise; do not merge at ltrans stage.
(lto_symtab_merge_cgraph_nodes_1): Reorg to work on symtab.
(lto_symtab_merge_cgraph_nodes): Likewise; do not merge at ltrans stage.
(lto_symtab_prevailing_decl): Rewrite to lookup into symtab.
* lto-streaer.h (lto_symtab_free): Remove.
* lto-cgraph.c (add_references): Cleanup.
* varpool.c (varpool_assemble_decl): Skip hard regs.
* lto.c (lto_materialize_function): Update confused comment.
(read_cgraph_and_symbols): Do not free symtab.
From-SVN: r191466
* lto-cgraph.c (compute_ltrans_boundary): Do not care about aliases.
* lto-partition.c (partition_symbol_p): Forward declare.
(add_references_to_partition): Reimplement using partition_symbol_p.
(add_aliases_to_partition): Break out from add_references_to_partition;
reimplement using partition_symbol_p.
(add_cgraph_node_to_partition_1): Handle callees using partition_symbol_p;
add sanity checks.
(add_varpool_node_to_partition): Use add_aliases_to_partition.
(partition_varpool_node_p): Do not special case aliases.
From-SVN: r191129
* passes.c (ipa_write_summaries_1): Set state;
do not call compute_ltrans_boundary.
(ipa_write_optimization_summaries): Likewise.
(ipa_write_summaries): compute_ltrans_boundary here.
* lto-streamer.h (lto_symtab_encoder_d): NODES are allocated in heap.
(compute_ltrans_boundary): Update prototype.
* lto.c (lto_wpa_write_files): Do not delete partition encoder;
it is deleted after streaming.
* lto-partition.c (partition_symbol_p): New function.
(promote_var, promote_fn): Remove.
(promote_symbol): New function.
(lto_promote_cross_file_statics): First compute boundaries; rewrite
to lookup the actual boundaries instead of computing them ad-hoc.
From-SVN: r191113