1. 20 Sep, 2019 4 commits
  2. 19 Sep, 2019 36 commits
    • New IPA-SRA · ff6686d2
      2019-09-20  Martin Jambor  <mjambor@suse.cz>
      
              * coretypes.h (cgraph_edge): Declare.
              * ipa-param-manipulation.c: Rewrite.
              * ipa-param-manipulation.h: Likewise.
              * Makefile.in (GTFILES): Added ipa-param-manipulation.h and ipa-sra.c.
              (OBJS): Added ipa-sra.o.
              * cgraph.h (ipa_replace_map): Removed fields old_tree, replace_p
              and ref_p, added fields param_adjustments and performed_splits.
              (struct cgraph_clone_info): Remove ags_to_skip and
              combined_args_to_skip, new field param_adjustments.
              (cgraph_node::create_clone): Changed parameters to use
              ipa_param_adjustments.
              (cgraph_node::create_virtual_clone): Likewise.
              (cgraph_node::create_virtual_clone_with_body): Likewise.
              (tree_function_versioning): Likewise.
              (cgraph_build_function_type_skip_args): Removed.
              * cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): Convert to
              using ipa_param_adjustments.
              (clone_of_p): Likewise.
              * cgraphclones.c (cgraph_build_function_type_skip_args): Removed.
              (build_function_decl_skip_args): Likewise.
              (duplicate_thunk_for_node): Adjust parameters using
              ipa_param_body_adjustments, copy param_adjustments instead of
              args_to_skip.
              (cgraph_node::create_clone): Convert to using ipa_param_adjustments.
              (cgraph_node::create_virtual_clone): Likewise.
              (cgraph_node::create_version_clone_with_body): Likewise.
              (cgraph_materialize_clone): Likewise.
              (symbol_table::materialize_all_clones): Likewise.
              * ipa-fnsummary.c (ipa_fn_summary_t::duplicate): Simplify
              ipa_replace_map check.
              * ipa-cp.c (get_replacement_map): Do not initialize removed fields.
              (initialize_node_lattices): Make aware that some parameters might have
              already been removed.
              (want_remove_some_param_p): New function.
              (create_specialized_node): Convert to using ipa_param_adjustments and
              deal with possibly pre-existing adjustments.
              * lto-cgraph.c (output_cgraph_opt_summary_p): Likewise.
              (output_node_opt_summary): Do not stream removed fields.  Stream
              parameter adjustments instead of argumetns to skip.
              (input_node_opt_summary): Likewise.
              (input_node_opt_summary): Likewise.
              * lto-section-in.c (lto_section_name): Added ipa-sra section.
              * lto-streamer.h (lto_section_type): Likewise.
              * tree-inline.h (copy_body_data): New fields killed_new_ssa_names and
      	param_body_adjs.
              (copy_decl_to_var): Declare.
              * tree-inline.c (update_clone_info): Do not remap old_tree.
              (remap_gimple_stmt): Use ipa_param_body_adjustments to modify gimple
              statements, walk all extra generated statements and remap their
              operands.
              (redirect_all_calls): Add killed SSA names to a hash set.
              (remap_ssa_name): Do not remap killed SSA names.
              (copy_arguments_for_versioning): Renames to copy_arguments_nochange,
              half of functionality moved to ipa_param_body_adjustments.
              (copy_decl_to_var): Make exported.
              (copy_body): Destroy killed_new_ssa_names hash set.
              (expand_call_inline): Remap performed splits.
              (update_clone_info): Likewise.
              (tree_function_versioning): Simplify tree_map processing.  Updated to
              accept ipa_param_adjustments and use ipa_param_body_adjustments.
              * omp-simd-clone.c (simd_clone_vector_of_formal_parm_types): Adjust
              for the new interface.
              (simd_clone_clauses_extract): Likewise, make args an auto_vec.
              (simd_clone_compute_base_data_type): Likewise.
              (simd_clone_init_simd_arrays): Adjust for the new interface.
              (simd_clone_adjust_argument_types): Likewise.
              (struct modify_stmt_info): Likewise.
              (ipa_simd_modify_stmt_ops): Likewise.
              (ipa_simd_modify_function_body): Likewise.
              (simd_clone_adjust): Likewise.
              * tree-sra.c: Removed IPA-SRA.  Include tree-sra.h.
              (type_internals_preclude_sra_p): Make public.
              * tree-sra.h: New file.
              * ipa-inline-transform.c (save_inline_function_body): Update to
              refelct new tree_function_versioning signature.
              * ipa-prop.c (adjust_agg_replacement_values): Use a helper from
              ipa_param_adjustments to get current parameter indices.
              (ipcp_modif_dom_walker::before_dom_children): Likewise.
              (ipcp_update_bits): Likewise.
              (ipcp_update_vr): Likewise.
              * ipa-split.c (split_function): Convert to using ipa_param_adjustments.
              * ipa-sra.c: New file.
              * multiple_target.c (create_target_clone): Update to reflet new type
              of create_version_clone_with_body.
              * trans-mem.c (ipa_tm_create_version): Update to reflect new type of
              tree_function_versioning.
      	(modify_function): Update to reflect new type of
      	tree_function_versioning.
              * params.def (PARAM_IPA_SRA_MAX_REPLACEMENTS): New.
              * passes.def: Remove old IPA-SRA and add new one.
              * tree-pass.h (make_pass_early_ipa_sra): Remove declaration.
              (make_pass_ipa_sra): Declare.
      	* dbgcnt.def: Remove eipa_sra.  Added ipa_sra_params and
      	ipa_sra_retvalues.
      	* doc/invoke.texi (ipa-sra-max-replacements): New.
      
              testsuite/
              * g++.dg/ipa/pr81248.C: Adjust dg-options and dump-scan.
              * gcc.dg/ipa/ipa-sra-1.c: Likewise.
              * gcc.dg/ipa/ipa-sra-10.c: Likewise.
              * gcc.dg/ipa/ipa-sra-11.c: Likewise.
              * gcc.dg/ipa/ipa-sra-3.c: Likewise.
              * gcc.dg/ipa/ipa-sra-4.c: Likewise.
              * gcc.dg/ipa/ipa-sra-5.c: Likewise.
              * gcc.dg/ipa/ipacost-2.c: Disable ipa-sra.
              * gcc.dg/ipa/ipcp-agg-9.c: Likewise.
              * gcc.dg/ipa/pr78121.c: Adjust scan pattern.
              * gcc.dg/ipa/vrp1.c: Likewise.
              * gcc.dg/ipa/vrp2.c: Likewise.
              * gcc.dg/ipa/vrp3.c: Likewise.
              * gcc.dg/ipa/vrp7.c: Likewise.
              * gcc.dg/ipa/vrp8.c: Likewise.
              * gcc.dg/noreorder.c: use noipa attribute instead of noinline.
              * gcc.dg/ipa/20040703-wpa.c: New test.
      	* gcc.dg/ipa/ipa-sra-12.c: New test.
      	* gcc.dg/ipa/ipa-sra-13.c: Likewise.
      	* gcc.dg/ipa/ipa-sra-14.c: Likewise.
      	* gcc.dg/ipa/ipa-sra-15.c: Likewise.
      	* gcc.dg/ipa/ipa-sra-16.c: Likewise.
      	* gcc.dg/ipa/ipa-sra-17.c: Likewise.
      	* gcc.dg/ipa/ipa-sra-18.c: Likewise.
      	* gcc.dg/ipa/ipa-sra-19.c: Likewise.
      	* gcc.dg/ipa/ipa-sra-20.c: Likewise.
      	* gcc.dg/ipa/ipa-sra-21.c: Likewise.
      	* gcc.dg/ipa/ipa-sra-22.c: Likewise.
      	* gcc.dg/sso/ipa-sra-1.c: Likewise.
      	* g++.dg/ipa/ipa-sra-2.C: Likewise.
      	* g++.dg/ipa/ipa-sra-3.C: Likewise.
      	* gcc.dg/tree-ssa/ipa-cp-1.c: Make return value used.
      	* g++.dg/ipa/devirt-19.C: Add missing return, add -fipa-cp-clone
      	option.
      	* g++.dg/lto/devirt-19_0.C: Add -fipa-cp-clone option.
      	* gcc.dg/ipa/ipa-sra-2.c: Removed.
      	* gcc.dg/ipa/ipa-sra-6.c: Likewise.
      
      From-SVN: r275982
      Martin Jambor committed
    • PR middle-end/91631 - buffer overflow into an array member of a declared object not detected · 6889a3ac
      gcc/ChangeLog:
      
      	PR middle-end/91631
      	* builtins.c (component_size): Correct trailing array computation,
      	rename to component_ref_size and move...
      	(compute_objsize): Adjust.
      	* gimple-ssa-warn-restrict.c (builtin_memref::refsize): New member.
      	(builtin_access::strict): Do not consider mememmove.
      	(builtin_access::write_off): New function.
      	(builtin_memref::builtin_memref): Initialize refsize.
      	(builtin_memref::set_base_and_offset): Adjust refoff and compute
      	refsize.
      	(builtin_memref::offset_out_of_bounds): Use ooboff input values.
      	Handle refsize.
      	(builtin_access::builtin_access): Intialize dstoff to destination
      	refeence offset here instead of in maybe_diag_overlap.  Adjust
      	referencess even to unrelated objects.	Adjust sizrange of bounded
      	string functions to reflect bound.  For strcat, adjust destination
      	sizrange by that of source.
      	(builtin_access::strcat_overlap):  Adjust offsets and sizes
      	to reflect the increase in destination sizrange above.
      	(builtin_access::overlap): Do not set dstoff here but instead
      	in builtin_access::builtin_access.
      	(check_bounds_or_overlap): Use builtin_access::write_off.
      	(maybe_diag_access_bounds): Add argument.  Add informational notes.
      	(dump_builtin_memref, dump_builtin_access): New functions.
      	* tree.c (component_ref_size): ...to here.
      	* tree.h (component_ref_size): Declare.
      	* tree-ssa-strlen (handle_builtin_strcat): Include the terminating
      	nul in the size of the source string.
      
      gcc/testsuite/ChangeLog:
      
      	PR middle-end/91631
      	* /c-c++-common/Warray-bounds-3.c: Correct expected offsets.
      	* /c-c++-common/Warray-bounds-4.c: Same.
      	* gcc.dg/Warray-bounds-39.c: Remove xfails.
      	* gcc.dg/Warray-bounds-45.c: New test.
      	* gcc.dg/Warray-bounds-46.c: New test.
      
      From-SVN: r275981
      Martin Sebor committed
    • Support extended characters in C/C++ identifiers (PR c/67224) · 7d112d66
      libcpp/ChangeLog
      2019-09-19  Lewis Hyatt  <lhyatt@gmail.com>
      
      	PR c/67224
      	* charset.c (_cpp_valid_utf8): New function to help lex UTF-8 tokens.
      	* internal.h (_cpp_valid_utf8): Declare.
      	* lex.c (forms_identifier_p): Use it to recognize UTF-8 identifiers.
      	(_cpp_lex_direct): Handle UTF-8 in identifiers and CPP_OTHER tokens.
      	Do all work in "default" case to avoid slowing down typical code paths.
      	Also handle $ and UCN in the default case for consistency.
      
      gcc/Changelog
      2019-09-19  Lewis Hyatt  <lhyatt@gmail.com>
      
      	PR c/67224
      	* doc/cpp.texi: Document support for extended characters in
      	identifiers.
      	* doc/cppopts.texi: Likewise.
      
      gcc/testsuite/ChangeLog
      2019-09-19  Lewis Hyatt  <lhyatt@gmail.com>
      
      	PR c/67224
      	* c-c++-common/cpp/ucnid-2011-1-utf8.c: New test.
      	* g++.dg/cpp/ucnid-1-utf8.C: New test.
      	* g++.dg/cpp/ucnid-2-utf8.C: New test.
      	* g++.dg/cpp/ucnid-3-utf8.C: New test.
      	* g++.dg/cpp/ucnid-4-utf8.C: New test.
      	* g++.dg/other/ucnid-1-utf8.C: New test.
      	* gcc.dg/cpp/ucnid-1-utf8.c: New test.
      	* gcc.dg/cpp/ucnid-10-utf8.c: New test.
      	* gcc.dg/cpp/ucnid-11-utf8.c: New test.
      	* gcc.dg/cpp/ucnid-12-utf8.c: New test.
      	* gcc.dg/cpp/ucnid-13-utf8.c: New test.
      	* gcc.dg/cpp/ucnid-14-utf8.c: New test.
      	* gcc.dg/cpp/ucnid-15-utf8.c: New test.
      	* gcc.dg/cpp/ucnid-2-utf8.c: New test.
      	* gcc.dg/cpp/ucnid-3-utf8.c: New test.
      	* gcc.dg/cpp/ucnid-4-utf8.c: New test.
      	* gcc.dg/cpp/ucnid-6-utf8.c: New test.
      	* gcc.dg/cpp/ucnid-7-utf8.c: New test.
      	* gcc.dg/cpp/ucnid-9-utf8.c: New test.
      	* gcc.dg/ucnid-1-utf8.c: New test.
      	* gcc.dg/ucnid-10-utf8.c: New test.
      	* gcc.dg/ucnid-11-utf8.c: New test.
      	* gcc.dg/ucnid-12-utf8.c: New test.
      	* gcc.dg/ucnid-13-utf8.c: New test.
      	* gcc.dg/ucnid-14-utf8.c: New test.
      	* gcc.dg/ucnid-15-utf8.c: New test.
      	* gcc.dg/ucnid-16-utf8.c: New test.
      	* gcc.dg/ucnid-2-utf8.c: New test.
      	* gcc.dg/ucnid-3-utf8.c: New test.
      	* gcc.dg/ucnid-4-utf8.c: New test.
      	* gcc.dg/ucnid-5-utf8.c: New test.
      	* gcc.dg/ucnid-6-utf8.c: New test.
      	* gcc.dg/ucnid-7-utf8.c: New test.
      	* gcc.dg/ucnid-8-utf8.c: New test.
      	* gcc.dg/ucnid-9-utf8.c: New test.
      
      From-SVN: r275979
      Lewis Hyatt committed
    • Handle [[likely]] on compound-statement. · e0710fcf
      I overlooked this case when adding [[likely]] handling to
      cp_parser_statement.
      
      	* parser.c (cp_parser_statement): Handle [[likely]] on
      	compound-statement.
      
      From-SVN: r275978
      Jason Merrill committed
    • [Darwin, PPC, testsuite] Fix pr89313.c fail. · a519efbe
      Darwin defines '__POWERPC__' rather than '__powerpc__' so check for
      the upper case version too in order to select the correct register
      name.
      
      gcc/testsuite:
      
      2019-09-19  Iain Sandoe  <iain@sandoe.co.uk>
      
      	* gcc.dg/pr89313.c: Test for __POWERPC__ in addition to
      	__powerpc__ in register name selection.
      
      From-SVN: r275977
      Iain Sandoe committed
    • Revert "Fix conversions for built-in operator overloading candidates." · e564cf98
      This reverts commit 948d5b831affef14a49f56804b01e3f1ba00cdb3.
      
      From-SVN: r275976
      Jason Merrill committed
    • tree-vect-loop.c (vect_is_slp_reduction): Remove. · b3c4d0dd
      2019-09-19  Richard Biener  <rguenther@suse.de>
      
      	* tree-vect-loop.c (vect_is_slp_reduction): Remove.
      	(check_reduction_path): New overload having the path as result.
      	(vect_is_simple_reduction): From the detected reduction
      	path build a SLP reduction chain if possible.
      
      From-SVN: r275972
      Richard Biener committed
    • re PR target/91814 (ICE in elimination_costs_in_insn, at reload1.c:3549 since r274926) · 54dc8577
      2019-09-19  Richard Biener  <rguenther@suse.de>
      
      	PR target/91814
      	* config/i386/i386-features.c (gen_gpr_to_xmm_move_src):
      	Force operand to a register if it isn't nonimmediate_operand.
      
      From-SVN: r275971
      Richard Biener committed
    • [ARM] Simplify logical DImode iterators · 40858b9d
      Further simplify the logical DImode expander using code iterator and
      obtab attributes.  This avoids adding unnecessary code_attr entries.
      
          gcc/
      	* config/arm/arm.md (<logical_op>di3): Use <optab> and <CODE>.
      	* config/arm/iterators.md (optab): Add and, ior, xor entries.
      	(logical_op): Remove code attribute.
      	(logical_OP): Likewise.
      
      From-SVN: r275970
      Wilco Dijkstra committed
    • Fix cast in sort_congruence_class_groups_by_decl_uid. · 9f576d30
      2019-09-19  Martin Liska  <mliska@suse.cz>
      
      	* ipa-icf.c (sort_congruence_class_groups_by_decl_uid):
      	Use proper casting.
      
      From-SVN: r275969
      Martin Liska committed
    • aarch64: Implement -moutline-atomics · 3950b229
      	* config/aarch64/aarch64.opt (-moutline-atomics): New.
      	* config/aarch64/aarch64.c (aarch64_atomic_ool_func): New.
      	(aarch64_ool_cas_names, aarch64_ool_swp_names): New.
      	(aarch64_ool_ldadd_names, aarch64_ool_ldset_names): New.
      	(aarch64_ool_ldclr_names, aarch64_ool_ldeor_names): New.
      	(aarch64_expand_compare_and_swap): Honor TARGET_OUTLINE_ATOMICS.
      	* config/aarch64/atomics.md (atomic_exchange<ALLI>): Likewise.
      	(atomic_<atomic_op><ALLI>): Likewise.
      	(atomic_fetch_<atomic_op><ALLI>): Likewise.
      	(atomic_<atomic_op>_fetch<ALLI>): Likewise.
      	* doc/invoke.texi: Document -moutline-atomics.
      testsuite/
      	* gcc.target/aarch64/atomic-op-acq_rel.c: Use -mno-outline-atomics.
      	* gcc.target/aarch64/atomic-comp-swap-release-acquire.c: Likewise.
      	* gcc.target/aarch64/atomic-op-acquire.c: Likewise.
      	* gcc.target/aarch64/atomic-op-char.c: Likewise.
      	* gcc.target/aarch64/atomic-op-consume.c: Likewise.
      	* gcc.target/aarch64/atomic-op-imm.c: Likewise.
      	* gcc.target/aarch64/atomic-op-int.c: Likewise.
      	* gcc.target/aarch64/atomic-op-long.c: Likewise.
      	* gcc.target/aarch64/atomic-op-relaxed.c: Likewise.
      	* gcc.target/aarch64/atomic-op-release.c: Likewise.
      	* gcc.target/aarch64/atomic-op-seq_cst.c: Likewise.
      	* gcc.target/aarch64/atomic-op-short.c: Likewise.
      	* gcc.target/aarch64/atomic_cmp_exchange_zero_reg_1.c: Likewise.
      	* gcc.target/aarch64/atomic_cmp_exchange_zero_strong_1.c: Likewise.
      	* gcc.target/aarch64/sync-comp-swap.c: Likewise.
      	* gcc.target/aarch64/sync-op-acquire.c: Likewise.
      	* gcc.target/aarch64/sync-op-full.c: Likewise.
      
      From-SVN: r275968
      Richard Henderson committed
    • aarch64: Add out-of-line functions for LSE atomics · 33befddc
      This is the libgcc part of the interface -- providing the functions.
      Rationale is provided at the top of libgcc/config/aarch64/lse.S.
      
      	* config/aarch64/lse-init.c: New file.
      	* config/aarch64/lse.S: New file.
      	* config/aarch64/t-lse: New file.
      	* config.host: Add t-lse to all aarch64 tuples.
      
      From-SVN: r275967
      Richard Henderson committed
    • aarch64: Tidy aarch64_split_compare_and_swap · b7e560de
      With aarch64_track_speculation, we had extra code to do exactly what the
      !strong_zero_p path already did.  The rest is reducing code duplication.
      
      	* config/aarch64/aarch64 (aarch64_split_compare_and_swap): Disable
      	strong_zero_p for aarch64_track_speculation; unify some code paths;
      	use aarch64_gen_compare_reg instead of open-coding.
      
      From-SVN: r275966
      Richard Henderson committed
    • aarch64: Implement TImode compare-and-swap · 4a2095eb
      This pattern will only be used with the __sync functions, because
      we do not yet have a bare TImode atomic load.
      
      	* config/aarch64/aarch64.c (aarch64_gen_compare_reg): Add support
      	for NE comparison of TImode values.
      	(aarch64_emit_load_exclusive): Add support for TImode.
      	(aarch64_emit_store_exclusive): Likewise.
      	(aarch64_split_compare_and_swap): Disable strong_zero_p for TImode.
      	* config/aarch64/atomics.md (@atomic_compare_and_swap<ALLI_TI>):
      	Change iterator from ALLI to ALLI_TI.
      	(@atomic_compare_and_swap<JUST_TI>): New.
      	(@atomic_compare_and_swap<JUST_TI>_lse): New.
      	(aarch64_load_exclusive_pair): New.
      	(aarch64_store_exclusive_pair): New.
      	* config/aarch64/iterators.md (JUST_TI): New.
      
      From-SVN: r275965
      Richard Henderson committed
    • aarch64: Extend %R for integer registers · e3f15286
      	* config/aarch64/aarch64.c (aarch64_print_operand): Allow integer
      	registers with %R.
      
      From-SVN: r275964
      Richard Henderson committed
    • Use post-dom info to update if/switch predicate · efe12656
      2019-09-19  Feng Xue  <fxue@os.amperecomputing.com>
      
              * ipa-fnsummary.c (set_cond_stmt_execution_predicate): Do not compute
              trivial predicate for condition branch.
              (set_switch_stmt_execution_predicate): Do not compute trivial predicate
              for switch case.
              (compute_bb_predicates): Update predicate based on post-dominating
              relationship.
              (analyze_function_body): Calculate post-dominating information.
      
      2019-09-19  Feng Xue  <fxue@os.amperecomputing.com>
      
              * gcc.dg/ipa/pr91089.c: Add a new function and pattern.
      
      From-SVN: r275963
      Feng Xue committed
    • Enforce correct COND_EXPR order for EXTRACT_LAST_REDUCTION · c449d3ae
      For conditional reductions, the "then" value needs to be the candidate
      value calculated by this iteration while the "else" value needs to be
      the result carried over from previous iterations.  If the COND_EXPR
      is the other way around, we need to swap it.
      
      2019-09-19  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* tree-vectorizer.h (vectorizable_condition): Take an int
      	reduction index instead of a boolean flag.
      	* tree-vect-stmts.c (vectorizable_condition): Likewise.
      	Swap the "then" and "else" values for EXTRACT_LAST_REDUCTION
      	reductions if the reduction accumulator is the "then" rather
      	than the "else" value.
      	(vect_analyze_stmt): Update call accordingly.
      	(vect_transform_stmt): Likewise.
      	* tree-vect-loop.c (vectorizable_reduction): Likewise,
      	asserting that the index is > 0.
      
      From-SVN: r275962
      Richard Sandiford committed
    • Speed up qsort in IPA ICF. · 37bc3aa0
      2019-09-19  Martin Liska  <mliska@suse.cz>
      
      	* ipa-icf.c (sort_sem_items_by_decl_uid): Simplify comparator.
      	(sort_congruence_classes_by_decl_uid): Likewise.
      	(sort_congruence_class_groups_by_decl_uid): Use std::pair for
      	easier sorting.
      	(sem_item_optimizer::merge_classes): Likewise.
      
      From-SVN: r275961
      Martin Liska committed
    • re PR tree-optimization/91812 (GCC ignores volatile modifier) · d9e736e7
      2019-09-19  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/91812
      	* tree-ssa-phiprop.c (propagate_with_phi): Do not replace
      	volatile loads.
      
      	* gcc.dg/torture/pr91812.c: New testcase.
      
      From-SVN: r275960
      Richard Biener committed
    • Rework constant subreg folds and handle more variable-length cases · f24f4c15
      This patch rewrites the way simplify_subreg handles constants.
      It uses similar native_encode/native_decode routines to the
      tree-level handling of VIEW_CONVERT_EXPR, meaning that we can
      move between rtx constants and the target memory image of them.
      
      The main point of this patch is to support subregs of constant-length
      vectors for VLA vectors, beyond the very simple cases that were already
      handled.  Many of the new tests failed before the patch for variable-
      length vectors.
      
      The boolean side is tested more by the upcoming SVE ACLE work.
      
      2019-09-19  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* defaults.h (TARGET_UNIT): New macro.
      	(target_unit): New type.
      	* rtl.h (native_encode_rtx, native_decode_rtx)
      	(native_decode_vector_rtx, subreg_size_lsb): Declare.
      	(subreg_lsb_1): Turn into an inline wrapper around subreg_size_lsb.
      	* rtlanal.c (subreg_lsb_1): Delete.
      	(subreg_size_lsb): New function.
      	* simplify-rtx.c: Include rtx-vector-builder.h
      	(simplify_immed_subreg): Delete.
      	(native_encode_rtx, native_decode_vector_rtx, native_decode_rtx)
      	(simplify_const_vector_byte_offset, simplify_const_vector_subreg): New
      	functions.
      	(simplify_subreg): Use them.
      	(test_vector_subregs_modes, test_vector_subregs_repeating)
      	(test_vector_subregs_fore_back, test_vector_subregs_stepped)
      	(test_vector_subregs): New functions.
      	(test_vector_ops): Call test_vector_subregs for integer vector
      	modes with at least 2 elements.
      
      From-SVN: r275959
      Richard Sandiford committed
    • [Ada] Emit DW_AT_GNU_bias with -fgnat-encodings=gdb · 4736041b
      Emit DW_AT_GNU_bias with -fgnat-encodings=gdb.  gdb implements this,
      but not the encoded variant.
      
      2019-09-19  Tom Tromey  <tromey@adacore.com>
      
      gcc/ada/
      
      	* gcc-interface/misc.c (gnat_get_type_bias): Return the bias
      	when -fgnat-encodings=gdb.
      
      gcc/testsuite/
      
      	* gnat.dg/bias1.adb: New testcase.
      
      From-SVN: r275958
      Tom Tromey committed
    • [Ada] Accept concatentation arguments to pragma Annotate · 0c27222c
      In cases where pragma Annotate accepts a string literal as an argument,
      we now also accept a concatenation of string literals.
      
      2019-09-19  Steve Baird  <baird@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.adb (Preferred_String_Type): A new function. Given an
      	expression, determines whether the preference rules defined for
      	the third-and-later arguments of pragma Annotate suffice to
      	determine the type of the expression. If so, then the preferred
      	type is returned; if not then Empty is returned. Handles
      	concatenations.
      	(Analyze_Pragma): Replace previous code, which dealt only with
      	string literals, with calls to the new Preferred_String_Type
      	function, which also handles concatenations.
      	* doc/gnat_rm/implementation_defined_pragmas.rst: Update
      	documentation for pragma Annotate.
      	* gnat_rm.texi: Regenerate.
      
      gcc/testsuite/
      
      	* gnat.dg/annotation1.adb: New testcase.
      
      From-SVN: r275957
      Steve Baird committed
    • [Ada] Get rid of useless temporary for slice in overaligned record type · c3a75a09
      This fixes a recent code quality regression for targets that do not
      require the strict alignment of memory accesses: the compiler would
      generate a useless temporary for a slice of an array component in an
      overaligned record type.
      
      Running these commands:
      
        gcc -c p.adb -gnatws -gnatD
        grep loop p.adb.dg
      
      On the following sources:
      
      procedure P (N : Positive) is
      
        type Rec1 is record
          I : Integer;
        end record;
      
        type Arr is array (Positive range <>) of Rec1;
      
        type Rec2 is record
          A : Arr (1 .. 128);
        end record;
        for Rec2'Alignment use 8;
      
        procedure Proc (A : Arr) is
        begin
          null;
        end;
      
        R : Rec2;
      
      begin
        Proc (R.A (1 .. N));
      end;
      
      Should execute silently.
      
      2019-09-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* exp_util.adb (Is_Possibly_Unaligned_Slice): Do not return true
      	on pure alignment considerations if the target does not require
      	the strict alignment of memory accesses.
      
      From-SVN: r275956
      Eric Botcazou committed
    • [Ada] Sem_Ch12: add a comment to indicate future work · 87cd385f
      2019-09-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_ch12.adb (Check_Private_View): Add a comment to indicate
      	future work.
      
      From-SVN: r275955
      Eric Botcazou committed
    • [Ada] Fix copy operation with private discriminated record type · bee475e2
      This prevents the object code from reading too many bytes from the
      source for a copy operation involving a private discriminated record
      type with default discriminants and generated for the assignment of an
      aggregate to a variable or the initialization of a constant.
      
      The front-end already knows that it needs to convert the operation
      involving the aggregate into individual assignments if the type of the
      aggregate has mutable components, but it would not do so if this type is
      private, which does not change anything for code generation.
      
      Running these commands:
      
        gnatmake -q p -g -fsanitize=address
        p
      
      On the following sources:
      
      with Q; use Q;
      
      procedure P is
      
         type Rec is record
            A : T;
         end record;
      
         C : constant Rec := Rec'(A => Default_T);
      
      begin
         null;
      end;
      
      package Q is
      
         type T is private;
      
         Default_T : constant T;
      
      private
      
         A : constant := 170;
         B : constant := 8192;
      
         type A_Index is range 1 .. A;
         type B_Index is range 1 .. B;
      
         type A_Array is array (A_Index) of Boolean;
         type B_Array is array (B_Index) of Boolean;
      
         type Data_Type is (A_Type, B_Type);
      
         type T (Discriminant : Data_Type := A_Type) is record
            case Discriminant is
               when A_Type =>
                  Field_A : A_Array;
               when B_Type =>
                  Field_B : B_Array;
            end case;
         end record;
      
         Default_T : constant T :=
           T'(Discriminant => A_Type, Field_A => (others => True));
      
      end Q;
      
      Should execute silently.
      
      2019-09-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* exp_aggr.adb (Has_Mutable_Components): Look at the underlying
      	type of components to find out whether they are mutable.
      
      From-SVN: r275954
      Eric Botcazou committed
    • [Ada] Fix bogus "too late" error with nested generics and inlining · d53301c9
      This prevents the compiler from issuing a bogus error about a constant
      whose full declaration appears too late, if it is declared in a nested
      generic package and instantiated in another nested instantiation, when
      the instantiations are done in a unit withed from the main unit and
      containing an inlined subprogram, and cross-unit inlining is enabled.
      
      It turns out that, under these very peculiar conditions, the compiler
      ends up instantiating the body of the generic package twice, which leads
      to various semantic errors, in particular for declarations of constants.
      
      2019-09-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_ch12.adb (Instantiate_Package_Body): Check that the body
      	has not already been instantiated when the body of the parent
      	was being loaded.
      
      gcc/testsuite/
      
      	* gnat.dg/inline21.adb, gnat.dg/inline21_g.ads,
      	gnat.dg/inline21_h.adb, gnat.dg/inline21_h.ads,
      	gnat.dg/inline21_q.ads: New testcase.
      
      From-SVN: r275953
      Eric Botcazou committed
    • [Ada] Fix bogus visibility error with nested generics and inlining · 9e0746fc
      This prevents the compiler from issuing a bogus error about the
      visibility of an operator in an instantiation of a nested generic
      package which is itself used as an actual of an instantiation of another
      generic package, when the instantiations are done in a unit withed from
      the main unit and containing an inlined subprogram, and cross-unit
      inlining is enabled.
      
      In most cases, the compiler does not check the visibility of operators
      in an instantiation context because this has already been done when the
      generic package has been analyzed. However, there are exceptions like
      the actuals of an instantiation of a generic child unit which is done
      as a compilation unit and the In_Instance predicate has a special check
      for these cases.
      
      This check would incorrectly trigger here and needs to be tightened.
      
      2019-09-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_util.adb (In_Instance): Test whether the current unit has
      	been analyzed instead of being on the scope stack to detect the
      	case of actuals of an instantiation of a generic child unit done
      	as a compilation unit.
      
      gcc/testsuite/
      
      	* gnat.dg/inline20.adb, gnat.dg/inline20_g.adb,
      	gnat.dg/inline20_g.ads, gnat.dg/inline20_h.ads,
      	gnat.dg/inline20_i.ads, gnat.dg/inline20_q-io.ads,
      	gnat.dg/inline20_q.ads, gnat.dg/inline20_r.ads: New testcase.
      
      From-SVN: r275952
      Eric Botcazou committed
    • [Ada] New routine GNAT.Sockets.Create_Socket_Pair · fd0d7b4e
      New routine to create 2 connected sockets. This routine is analog of the
      UNIX system call socketpair. On UNIX platforms it is implemented on the
      base of socketpair. On other platforms it is implemented by conecting
      network sockets over loopback interface.
      
      2019-09-19  Dmitriy Anisimkov  <anisimko@adacore.com>
      
      gcc/ada/
      
      	* libgnat/g-socket.ads, libgnat/g-socket.adb
      	(Create_Socket_Pair): New routine.
      	* libgnat/g-socthi.ads (OS_Has_Socketpair): Boolean constant.
      	(C_Socketpair): New imported routine.
      	* libgnat/g-socthi__mingw.ads, libgnat/g-socthi__vxworks.ads
      	(Default_Socket_Pair_Family): New constant.
      	(C_Socketpair): New routine.
      	* libgnat/g-socthi__mingw.adb, libgnat/g-socthi__vxworks.adb
      	(C_Socketpair): Is separated in anouther file.
      	* libgnat/g-sthcso.adb (C_Socketpair): Non UNIX implementation.
      	* libgnat/g-stsifd__sockets.adb: Reuse C_Socketpair.
      
      From-SVN: r275951
      Dmitriy Anisimkov committed
    • [Ada] Use declared type for deciding on SPARK pointer rules · 4fe56329
      A constant of pointer type is considered as mutable in SPARK, according
      to SPARK RM 3.10, but this should be based on the declared type of the
      constant instead of its underlying type.
      
      There is no impact on compilation hence no test.
      
      2019-09-19  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.adb (Analyze_Depends_In_Decl_Part): Simplify previous
      	test.
      
      From-SVN: r275950
      Yannick Moy committed
    • [Ada] Spurious visibility error in generic child unit · 46fa6b05
      2019-09-19  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch7.adb (Install_Parent_Private_Declarations): If a
      	generic child unit is instantiated within a sibling child unit,
      	the analysis of its private part requires that the private part
      	of the ancestor be available, as is done when the context
      	includes an instance of the ancestor.
      
      gcc/testsuite/
      
      	* gnat.dg/generic2-child.ads, gnat.dg/generic2-io_any.adb,
      	gnat.dg/generic2-io_any.ads, gnat.dg/generic2.ads: New testcase.
      
      From-SVN: r275949
      Ed Schonberg committed
    • [Ada] Disable inlining of traversal function in GNATprove · 231ef54b
      Traversal functions as defined in SPARK RM 3.10 should not be inlined
      for analysis in GNATprove, as this changes the ownership behavior.
      Disable the inlining performed in GNATprove on functions which could be
      interpreted as such.
      
      There is no impact on compilation and thus no test.
      
      2019-09-19  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* inline.adb (Can_Be_Inlined_In_GNATprove_Mode): Add special
      	case for traversal functions.
      
      From-SVN: r275948
      Yannick Moy committed
    • [Ada] Allow constants of access type in Global contracts · 09709b47
      Now that SPARK supports access types, global constants of access type
      may appear as outputs of a subprogram, with the meaning that the
      underlying memory can be modified (see SPARK RM 3.10).
      
      2019-09-19  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.adb (Analyze_Global_In_Decl_Part): Do not issue an
      	error when a constant of an access type is used as output in a
      	Global contract.
      	(Analyze_Depends_In_Decl_Part): Do not issue an error when a
      	constant of an access type is used as output in a Depends
      	contract.
      
      gcc/testsuite/
      
      	* gnat.dg/global2.adb, gnat.dg/global2.ads: New testcase.
      
      From-SVN: r275947
      Yannick Moy committed
    • [Ada] Exp_Attr: remove obsolete comment · 7005758c
      2019-09-19  Arnaud Charlet  <charlet@adacore.com>
      
      gcc/ada/
      
      	* exp_attr.adb: Remove obsolete comment.
      
      From-SVN: r275946
      Arnaud Charlet committed
    • [Ada] Fix run-time segfault with derived access-to-subprogram type · 46a500a5
      This fixes a segfault at run time for the call to a local subprogram
      through an access value if the type of this access value is derived
      from an initial access-to-subprogram type and the access value was
      originally obtained with the initial type.
      
      2019-09-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_ch3.adb (Build_Derived_Access_Type): If this is an access-
      	to-subprogram type, copy Can_Use_Internal_Rep from the parent.
      
      gcc/testsuite/
      
      	* gnat.dg/access9.adb: New testcase.
      
      From-SVN: r275945
      Eric Botcazou committed
    • [Ada] Move SPARK borrow-checker to gnat2why codebase · f5766e3b
      Unit sem_spark was implementing the borrow-checker for the support of
      ownership pointers in SPARK. It has been moved to gnat2why codebase to
      facilitate its evolution and allow the more powerful flow analysis to
      provide its results for better analysis on pointers.
      
      2019-09-19  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* gcc-interface/Make-lang.in: Remove references to sem_spark.
      	* sem_spark.adb, sem_spark.ads: Remove unit.
      
      From-SVN: r275944
      Yannick Moy committed
    • [Ada] Implement Machine_Rounding attribute in line when possible · d8ec2787
      GNAT implements Machine_Rounding as an alias for Rounding but, whereas
      the implementation of the latter is in line when possible, that of the
      former is always out of line, which is not aligned with the intent of
      the Ada RM.
      
      This changes the compiler to using for Machine_Rounding the same in line
      implementation as Rounding when possible.
      
      Running these commands:
      
        gcc -c f.adb -gnatD
        grep system f.adb.dg
      
      On the following sources:
      
      function F (Val : Float) return Integer is
      begin
        return Integer (Float'Machine_Rounding (Val));
      end;
      
      Should execute silently.
      
      2019-09-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* exp_attr.adb (Is_Inline_Floating_Point_Attribute): Treat
      	Machine_Rounding as an alias for Rounding.
      	* sem_res.adb (Simplify_Type_Conversion): Likewise.
      
      From-SVN: r275943
      Eric Botcazou committed