1. 15 Aug, 2019 11 commits
    • [aarch64] Use neoversen1 tuning struct for -mcpu=cortex-a76 · 42418c1f
      The neoversen1 tuning struct gives better performance on the Cortex-A76, so use that.
      The only difference from the current tuning is the function and label alignment settings.
      
      This gives about 1.3% improvement on SPEC2006 int and 0.3% on SPEC2006 fp. 
      
              * config/aarch64/aarch64-cores.def (cortex-a76): Use neoversen1 tuning
              struct.
      
      From-SVN: r274511
      Kyrylo Tkachov committed
    • [AArch64] Add a commutativity marker to the SVE [SU]ABD patterns · 9a8d9b3f
      This will be tested by the ACLE patches, but it's really an
      independent improvement.
      
      2019-08-15  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* config/aarch64/aarch64-sve.md (aarch64_<su>abd<mode>_3): Add
      	a commutativity marker.
      
      From-SVN: r274510
      Richard Sandiford committed
    • [AArch64] Use SVE MLA, MLS, MAD and MSB for conditional arithmetic · b6c3aea1
      This patch uses predicated MLA, MLS, MAD and MSB to implement
      conditional "FMA"s on integers.  This also requires providing
      the unpredicated optabs (fma and fnma) since otherwise
      tree-ssa-math-opts.c won't try to use the conditional forms.
      
      We still want to use shifts and adds in preference to multiplications,
      so the patch makes the optab expanders check for that.
      
      The tests cover floating-point types too, which are already handled,
      and which were already tested to some extent by gcc.dg/vect.
      
      2019-08-15  Richard Sandiford  <richard.sandiford@arm.com>
      	    Kugan Vivekanandarajah  <kugan.vivekanandarajah@linaro.org>
      
      gcc/
      	* config/aarch64/aarch64-protos.h (aarch64_prepare_sve_int_fma)
      	(aarch64_prepare_sve_cond_int_fma): Declare.
      	* config/aarch64/aarch64.c (aarch64_convert_mult_to_shift)
      	(aarch64_prepare_sve_int_fma): New functions.
      	(aarch64_prepare_sve_cond_int_fma): Likewise.
      	* config/aarch64/aarch64-sve.md
      	(cond_<SVE_INT_BINARY:optab><SVE_I:mode>): Add a "@" marker.
      	(fma<SVE_I:mode>4, cond_fma<SVE_I:mode>, *cond_fma<SVE_I:mode>_2)
      	(*cond_fma<SVE_I:mode>_4, *cond_fma<SVE_I:mode>_any, fnma<SVE_I:mode>4)
      	(cond_fnma<SVE_I:mode>, *cond_fnma<SVE_I:mode>_2)
      	(*cond_fnma<SVE_I:mode>_4, *cond_fnma<SVE_I:mode>_any): New patterns.
      	(*madd<mode>): Rename to...
      	(*fma<mode>4): ...this.
      	(*msub<mode>): Rename to...
      	(*fnma<mode>4): ...this.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/cond_mla_1.c: New test.
      	* gcc.target/aarch64/sve/cond_mla_1_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_mla_2.c: Likewise.
      	* gcc.target/aarch64/sve/cond_mla_2_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_mla_3.c: Likewise.
      	* gcc.target/aarch64/sve/cond_mla_3_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_mla_4.c: Likewise.
      	* gcc.target/aarch64/sve/cond_mla_4_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_mla_5.c: Likewise.
      	* gcc.target/aarch64/sve/cond_mla_5_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_mla_6.c: Likewise.
      	* gcc.target/aarch64/sve/cond_mla_6_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_mla_7.c: Likewise.
      	* gcc.target/aarch64/sve/cond_mla_7_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_mla_8.c: Likewise.
      	* gcc.target/aarch64/sve/cond_mla_8_run.c: Likewise.
      
      Co-Authored-By: Kugan Vivekanandarajah <kuganv@linaro.org>
      
      From-SVN: r274509
      Richard Sandiford committed
    • [AArch64] Use SVE binary immediate instructions for conditional arithmetic · a19ba9e1
      This patch lets us use the immediate forms of FADD, FSUB, FSUBR,
      FMUL, FMAXNM and FMINNM for conditional arithmetic.  (We already
      use them for normal unconditional arithmetic.)
      
      2019-08-15  Richard Sandiford  <richard.sandiford@arm.com>
      	    Kugan Vivekanandarajah  <kugan.vivekanandarajah@linaro.org>
      
      gcc/
      	* config/aarch64/aarch64.c (aarch64_print_vector_float_operand):
      	Print 2.0 naturally.
      	(aarch64_sve_float_mul_immediate_p): Return true for 2.0.
      	* config/aarch64/predicates.md
      	(aarch64_sve_float_negated_arith_immediate): New predicate,
      	renamed from aarch64_sve_float_arith_with_sub_immediate.
      	(aarch64_sve_float_arith_with_sub_immediate): Test for both
      	positive and negative constants.
      	(aarch64_sve_float_arith_with_sub_operand): Redefine as a register
      	or an aarch64_sve_float_arith_with_sub_immediate.
      	* config/aarch64/constraints.md (vsN): Use
      	aarch64_sve_float_negated_arith_immediate.
      	* config/aarch64/iterators.md (SVE_COND_FP_BINARY_I1): New int
      	iterator.
      	(sve_pred_fp_rhs2_immediate): New int attribute.
      	* config/aarch64/aarch64-sve.md
      	(cond_<SVE_COND_FP_BINARY:optab><SVE_F:mode>): Use
      	sve_pred_fp_rhs1_operand and sve_pred_fp_rhs2_operand.
      	(*cond_<SVE_COND_FP_BINARY_I1:optab><SVE_F:mode>_2_const)
      	(*cond_<SVE_COND_FP_BINARY_I1:optab><SVE_F:mode>_any_const)
      	(*cond_add<SVE_F:mode>_2_const, *cond_add<SVE_F:mode>_any_const)
      	(*cond_sub<mode>_3_const, *cond_sub<mode>_any_const): New patterns.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/cond_fadd_1.c: New test.
      	* gcc.target/aarch64/sve/cond_fadd_1_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fadd_2.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fadd_2_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fadd_3.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fadd_3_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fadd_4.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fadd_4_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fsubr_1.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fsubr_1_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fsubr_2.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fsubr_2_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fsubr_3.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fsubr_3_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fsubr_4.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fsubr_4_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fmaxnm_1.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fmaxnm_1_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fmaxnm_2.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fmaxnm_2_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fmaxnm_3.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fmaxnm_3_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fmaxnm_4.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fmaxnm_4_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fminnm_1.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fminnm_1_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fminnm_2.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fminnm_2_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fminnm_3.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fminnm_3_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fminnm_4.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fminnm_4_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fmul_1.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fmul_1_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fmul_2.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fmul_2_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fmul_3.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fmul_3_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fmul_4.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fmul_4_run.c: Likewise.
      
      Co-Authored-By: Kugan Vivekanandarajah <kuganv@linaro.org>
      
      From-SVN: r274508
      Richard Sandiford committed
    • [AArch64] Use SVE FABD in conditional arithmetic · bf30864e
      This patch extends the FABD support so that it handles conditional
      arithmetic.  We're relying on combine for this, since there's no
      associated IFN_COND_* (yet?).
      
      2019-08-15  Richard Sandiford  <richard.sandiford@arm.com>
      	    Kugan Vivekanandarajah  <kugan.vivekanandarajah@linaro.org>
      
      gcc/
      	* config/aarch64/aarch64-sve.md (*aarch64_cond_abd<SVE_F:mode>_2)
      	(*aarch64_cond_abd<SVE_F:mode>_3)
      	(*aarch64_cond_abd<SVE_F:mode>_any): New patterns.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/cond_fabd_1.c: New test.
      	* gcc.target/aarch64/sve/cond_fabd_1_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fabd_2.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fabd_2_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fabd_3.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fabd_3_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fabd_4.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fabd_4_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fabd_5.c: Likewise.
      	* gcc.target/aarch64/sve/cond_fabd_5_run.c: Likewise.
      
      Co-Authored-By: Kugan Vivekanandarajah <kuganv@linaro.org>
      
      From-SVN: r274507
      Richard Sandiford committed
    • [AArch64] Use SVE [SU]ABD in conditional arithmetic · 9730c5cc
      This patch extends the [SU]ABD support so that it handles
      conditional arithmetic.  We're relying on combine for this,
      since there's no associated IFN_COND_* (yet?).
      
      2019-08-15  Richard Sandiford  <richard.sandiford@arm.com>
      	    Kugan Vivekanandarajah  <kugan.vivekanandarajah@linaro.org>
      
      gcc/
      	* config/aarch64/aarch64-sve.md (*aarch64_cond_<su>abd<mode>_2)
      	(*aarch64_cond_<su>abd<mode>_any): New patterns.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/cond_abd_1.c: New test.
      	* gcc.target/aarch64/sve/cond_abd_1_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_abd_2.c: Likewise.
      	* gcc.target/aarch64/sve/cond_abd_2_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_abd_3.c: Likewise.
      	* gcc.target/aarch64/sve/cond_abd_3_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_abd_4.c: Likewise.
      	* gcc.target/aarch64/sve/cond_abd_4_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_abd_5.c: Likewise.
      	* gcc.target/aarch64/sve/cond_abd_5_run.c: Likewise.
      
      Co-Authored-By: Kugan Vivekanandarajah <kuganv@linaro.org>
      
      From-SVN: r274506
      Richard Sandiford committed
    • Add support for conditional shifts · 20103c0e
      This patch adds support for IFN_COND shifts left and shifts right.
      This is mostly mechanical, but since we try to handle conditional
      operations in the same way as unconditional operations in match.pd,
      we need to support IFN_COND shifts by scalars as well as vectors.
      E.g.:
      
         IFN_COND_SHL (cond, a, { 1, 1, ... }, fallback)
      
      and:
      
         IFN_COND_SHL (cond, a, 1, fallback)
      
      are the same operation, with:
      
         (for shiftrotate (lrotate rrotate lshift rshift)
          ...
          /* Prefer vector1 << scalar to vector1 << vector2
             if vector2 is uniform.  */
          (for vec (VECTOR_CST CONSTRUCTOR)
           (simplify
            (shiftrotate @0 vec@1)
            (with { tree tem = uniform_vector_p (@1); }
             (if (tem)
      	(shiftrotate @0 { tem; }))))))
      
      preferring the latter.  The patch copes with this by extending
      create_convert_operand_from to handle scalar-to-vector conversions.
      
      2019-08-15  Richard Sandiford  <richard.sandiford@arm.com>
      	    Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
      
      gcc/
      	* internal-fn.def (IFN_COND_SHL, IFN_COND_SHR): New internal functions.
      	* internal-fn.c (FOR_EACH_CODE_MAPPING): Handle shifts.
      	* match.pd (UNCOND_BINARY, COND_BINARY): Likewise.
      	* optabs.def (cond_ashl_optab, cond_ashr_optab, cond_lshr_optab): New
      	optabs.
      	* optabs.h (create_convert_operand_from): Expand comment.
      	* optabs.c (maybe_legitimize_operand): Allow implicit broadcasts
      	when mapping scalar rtxes to vector operands.
      	* config/aarch64/iterators.md (SVE_INT_BINARY): Add ashift,
      	ashiftrt and lshiftrt.
      	(sve_int_op, sve_int_op_rev, sve_pred_int_rhs2_operand): Handle them.
      	* config/aarch64/aarch64-sve.md (*cond_<optab><mode>_2_const)
      	(*cond_<optab><mode>_any_const): New patterns.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/cond_shift_1.c: New test.
      	* gcc.target/aarch64/sve/cond_shift_1_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_shift_2.c: Likewise.
      	* gcc.target/aarch64/sve/cond_shift_2_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_shift_3.c: Likewise.
      	* gcc.target/aarch64/sve/cond_shift_3_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_shift_4.c: Likewise.
      	* gcc.target/aarch64/sve/cond_shift_4_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_shift_5.c: Likewise.
      	* gcc.target/aarch64/sve/cond_shift_5_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_shift_6.c: Likewise.
      	* gcc.target/aarch64/sve/cond_shift_6_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_shift_7.c: Likewise.
      	* gcc.target/aarch64/sve/cond_shift_7_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_shift_8.c: Likewise.
      	* gcc.target/aarch64/sve/cond_shift_8_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_shift_9.c: Likewise.
      	* gcc.target/aarch64/sve/cond_shift_9_run.c: Likewise.
      
      Co-Authored-By: Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
      
      From-SVN: r274505
      Richard Sandiford committed
    • Clean next_nested properly. · cc849505
      2019-08-15  Martin Liska  <mliska@suse.cz>
      
      	PR ipa/91438
      	* cgraph.c (cgraph_node::remove): When setting
      	n->origin = NULL for all nested functions, reset
      	also next_nested.
      
      From-SVN: r274504
      Martin Liska committed
    • Add ::verify for cgraph_node::origin/nested/next_nested. · b275fd98
      2019-08-15  Martin Liska  <mliska@suse.cz>
      
      	* cgraph.c (cgraph_node::verify_node): Verify origin, nested
      	and next_nested.
      
      From-SVN: r274503
      Martin Liska committed
    • Properly register dead cgraph_nodes in passes.c. · 0c04043e
      2019-08-15  Martin Liska  <mliska@suse.cz>
      
      	PR ipa/91404
      	* passes.c (order): Remove.
      	(uid_hash_t): Likewise).
      	(remove_cgraph_node_from_order): Remove from set
      	of pointers (cgraph_node *).
      	(insert_cgraph_node_to_order): New.
      	(duplicate_cgraph_node_to_order): New.
      	(do_per_function_toporder): Register all 3 cgraph hooks.
      	Skip removed_nodes now as we know about all of them.
      
      From-SVN: r274502
      Martin Liska committed
    • Daily bump. · 304e8bcb
      From-SVN: r274501
      GCC Administrator committed
  2. 14 Aug, 2019 29 commits
    • PR testsuite/91449 - new test case gcc.dg/strlenopt-73.c fails on powerpc64 · 173275c5
      gcc/testsuite/ChangeLog:
      	* gcc.dg/strlenopt-73.c: Restrict 128-bit tests to i386.
      
      From-SVN: r274495
      Martin Sebor committed
    • PR c++/91436 fix C++ dialect for std::make_unique fix-it hint · 07ee5924
      The std::make_unique function wasn't added until C++14, and neither was
      the std::complex_literals namespace.
      
      gcc/cp:
      
      	PR c++/91436
      	* name-lookup.c (get_std_name_hint): Fix min_dialect field for
      	complex_literals and make_unique entries.
      
      gcc/testsuite:
      
      	PR c++/91436
      	* g++.dg/lookup/missing-std-include-5.C: Limit test to C++14 and up.
      	* g++.dg/lookup/missing-std-include-6.C: Don't check make_unique in
      	test that runs for C++11.
      	* g++.dg/lookup/missing-std-include-8.C: Check make_unique here.
      
      From-SVN: r274492
      Jonathan Wakely committed
    • Deprecate std::__is_nullptr_t type trait · 07fd852f
      This non-standard extension is redundant and unused by the library.
      
      	* include/std/type_traits (__is_nullptr_t): Add deprecated attribute.
      
      From-SVN: r274491
      Jonathan Wakely committed
    • i386-expand.c (ix86_expand_vector_init_one_nonzero): Use vector_set path for… · 8a0eb0cd
      i386-expand.c (ix86_expand_vector_init_one_nonzero): Use vector_set path for TARGET_MMX_WITH_SSE && TARGET_SSE4_1.
      
      	* config/i386/i386-expand.c (ix86_expand_vector_init_one_nonzero)
      	<case E_V8QImode>: Use vector_set path for
      	TARGET_MMX_WITH_SSE && TARGET_SSE4_1.
      	(ix86_expand_vector_init_one_nonzero) <case E_V8QImode>:
      	Do not widen for TARGET_MMX_WITH_SSE && TARGET_SSE4_1.
      
      From-SVN: r274490
      Uros Bizjak committed
    • noinit-attribute.c: Fix typo. · 8069cc6b
      2019-08-14  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* gcc.c-torture/execute/noinit-attribute.c: Fix typo.
      
      From-SVN: r274489
      Christophe Lyon committed
    • Implement C++20 p0879 - Constexpr for swap and swap related functions. · 7a91c710
      2019-08-14  Edward Smith-Rowland  <3dw4rd@verizon.net>
      
      	Implement C++20 p0879 - Constexpr for swap and swap related functions.
      	* include/std/version (__cpp_lib_constexpr_swap_algorithms): New macro.
      	* include/bits/algorithmfwd.h (__cpp_lib_constexpr_swap_algorithms):
      	New macro.
      	(iter_swap, make_heap, next_permutation, partial_sort_copy, pop_heap)
      	(prev_permutation, push_heap, reverse, rotate, sort_heap, swap)
      	(swap_ranges, nth_element, partial_sort, sort): Add constexpr.
      	* include/bits/move.h (swap): Add constexpr.
      	* include/bits/stl_algo.h (__move_median_to_first, __reverse, reverse)
      	(__gcd, __rotate, rotate, __partition, __heap_select)
      	(__partial_sort_copy, partial_sort_copy, __unguarded_partition)
      	(__unguarded_partition_pivot, __partial_sort, __introsort_loop, __sort)
      	(__introselect, __chunk_insertion_sort, next_permutation)
      	(prev_permutation, partition, partial_sort, nth_element, sort)
      	(__iter_swap::iter_swap, iter_swap, swap_ranges): Add constexpr.
      	* include/bits/stl_algobase.h (__iter_swap::iter_swap, iter_swap)
      	(swap_ranges): Add constexpr.
      	* include/bits/stl_heap.h (__push_heap, push_heap, __adjust_heap,
      	__pop_heap, pop_heap, __make_heap, make_heap, __sort_heap, sort_heap):
      	Add constexpr.
      	* include/std/type_traits (swap): Add constexpr.
      	* testsuite/25_algorithms/headers/algorithm/synopsis.cc: Add constexpr.
      	* testsuite/25_algorithms/iter_swap/constexpr.cc: New test.
      	* testsuite/25_algorithms/make_heap/constexpr.cc: New test.
      	* testsuite/25_algorithms/next_permutation/constexpr.cc: New test.
      	* testsuite/25_algorithms/nth_element/constexpr.cc: New test.
      	* testsuite/25_algorithms/partial_sort/constexpr.cc: New test.
      	* testsuite/25_algorithms/partial_sort_copy/constexpr.cc: New test.
      	* testsuite/25_algorithms/partition/constexpr.cc: New test.
      	* testsuite/25_algorithms/pop_heap/constexpr.cc: New test.
      	* testsuite/25_algorithms/prev_permutation/constexpr.cc: New test.
      	* testsuite/25_algorithms/push_heap/constexpr.cc: New test.
      	* testsuite/25_algorithms/reverse/constexpr.cc: New test.
      	* testsuite/25_algorithms/rotate/constexpr.cc: New test.
      	* testsuite/25_algorithms/sort/constexpr.cc: New test.
      	* testsuite/25_algorithms/sort_heap/constexpr.cc: New test.
      	* testsuite/25_algorithms/swap/constexpr.cc: New test.
      	* testsuite/25_algorithms/swap_ranges/constexpr.cc: New test.
      
      From-SVN: r274488
      Edward Smith-Rowland committed
    • builtins.c (expand_builtin_init_descriptor): Set memory alignment. · 0bdf9f92
      2019-08-14  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              * builtins.c (expand_builtin_init_descriptor): Set memory alignment.
      
      From-SVN: r274487
      Bernd Edlinger committed
    • PR tree-optimization/91294 - [10 Regression] wrong strlen result of a conditional with an offset · 34fcf41e
      gcc/testsuite/ChangeLog:
      
      	PR tree-optimization/91294
      	* gcc.dg/strlenopt-44.c: Adjust tested result.
      	* gcc.dg/strlenopt-70.c: Avoid exercising unimplemnted optimization.
      	* gcc.dg/strlenopt-73.c: New test.
      	* gcc.dg/strlenopt-74.c: New test.
      	* gcc.dg/strlenopt-75.c: New test.
      	* gcc.dg/strlenopt-76.c: New test.
      	* gcc.dg/strlenopt-77.c: New test.
      
      gcc/ChangeLog:
      
      	PR tree-optimization/91294
      	* tree-ssa-strlen.c (handle_store): Avoid treating lower bound of
      	source length as exact.
      
      From-SVN: r274486
      Martin Sebor committed
    • PR c++/91391 - bogus -Wcomma-subscript warning. · b1c0d185
      	* parser.c (cp_parser_postfix_open_square_expression): Don't warn about
      	a deprecated comma here.  Pass warn_comma_subscript down to
      	cp_parser_expression.
      	(cp_parser_expression): New bool parameter.  Warn about uses of a comma
      	operator within a subscripting expression.
      	(cp_parser_skip_to_closing_square_bracket): Revert to pre-r274121 state.
      	(cp_parser_skip_to_closing_square_bracket_1): Remove.
      
      	* g++.dg/cpp2a/comma5.C: New test.
      
      Co-Authored-By: Marek Polacek <polacek@redhat.com>
      
      From-SVN: r274483
      Jakub Jelinek committed
    • Add generic support for noinit attribute. · f0033821
          Similar to what already exists for TI msp430 or in TI compilers for
          arm, this patch adds support for the "noinit" attribute.
      
          It is convenient for embedded targets where the user wants to keep the
          value of some data when the program is restarted: such variables are
          not zero-initialized. It is mostly a helper/shortcut to placing
          variables in a dedicated section.
      
          It's probably desirable to add the following chunk to the GNU linker:
          diff --git a/ld/emulparams/armelf.sh b/ld/emulparams/armelf.sh
          index 272a8bc..9555cec 100644
          --- a/ld/emulparams/armelf.sh
          +++ b/ld/emulparams/armelf.sh
          @@ -10,7 +10,19 @@ OTHER_TEXT_SECTIONS='*(.glue_7t) *(.glue_7)
          *(.vfp11_veneer) *(.v4_bx)'
           OTHER_BSS_SYMBOLS="${CREATE_SHLIB+PROVIDE (}__bss_start__ =
          .${CREATE_SHLIB+)};"
           OTHER_BSS_END_SYMBOLS="${CREATE_SHLIB+PROVIDE (}_bss_end__ =
          .${CREATE_SHLIB+)}; ${CREATE_SHLIB+PROVIDE (}__bss_end__ =
          .${CREATE_SHLIB+)};"
           OTHER_END_SYMBOLS="${CREATE_SHLIB+PROVIDE (}__end__ = .${CREATE_SHLIB+)};"
           -OTHER_SECTIONS='.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }'
           +OTHER_SECTIONS='
           +.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
           +  /* This section contains data that is not initialised during load
           +     *or* application reset.  */
           +   .noinit (NOLOAD) :
           +   {
           +     . = ALIGN(2);
           +     PROVIDE (__noinit_start = .);
           +     *(.noinit)
           +     . = ALIGN(2);
           +     PROVIDE (__noinit_end = .);
           +   }
           +'
      
          so that the noinit section has the "NOLOAD" flag.
      
          I added a testcase if gcc.c-torture/execute, gated by the new noinit
          effective-target.
      
          Finally, I tested on arm-eabi, but not on msp430 for which I do not
          have the environment.
      
      gcc/ChangeLog:
      
      2019-08-14  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* doc/extend.texi: Add "noinit" attribute documentation.
      	* doc/sourcebuild.texi: Add noinit effective target documentation.
      	* varasm.c (default_section_type_flags): Add support for "noinit" section.
      	(default_elf_select_section): Add support for "noinit" attribute.
      	* config/msp430/msp430.c (msp430_attribute_table): Remove "noinit" entry.
      
      gcc/c-family/ChangeLog:
      
      2019-08-14  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* c-attribs.c (c_common_attribute_table): Add "noinit" entry. Add
      	exclusion with "section" attribute.
      	(attr_noinit_exclusions): New table.
      	(handle_noinit_attribute): New function.
      
      gcc/testsuite/ChangeLog:
      
      2019-08-14  Christophe Lyon  <christophe.lyon@linaro.org>
      
      	* lib/target-supports.exp (check_effective_target_noinit): New
      	proc.
      	* gcc.c-torture/execute/noinit-attribute.c: New test.
      
      From-SVN: r274482
      Christophe Lyon committed
    • re PR rtl-optimization/91154 (456.hmmer regression on Haswell caused by r272922) · 93cf5515
      2019-08-14  Richard Biener  <rguenther@suse.de>
              Uroš Bizjak  <ubizjak@gmail.com>
      
      	PR target/91154
      	* config/i386/i386-features.h (scalar_chain::scalar_chain): Add
      	mode arguments.
      	(scalar_chain::smode): New member.
      	(scalar_chain::vmode): Likewise.
      	(dimode_scalar_chain): Rename to...
      	(general_scalar_chain): ... this.
      	(general_scalar_chain::general_scalar_chain): Take mode arguments.
      	(timode_scalar_chain::timode_scalar_chain): Initialize scalar_chain
      	base with TImode and V1TImode.
      	* config/i386/i386-features.c (scalar_chain::scalar_chain): Adjust.
      	(general_scalar_chain::vector_const_cost): Adjust for SImode
      	chains.
      	(general_scalar_chain::compute_convert_gain): Likewise.  Add
      	{S,U}{MIN,MAX} support.
      	(general_scalar_chain::replace_with_subreg): Use vmode/smode.
      	(general_scalar_chain::make_vector_copies): Likewise.  Handle
      	non-DImode chains appropriately.
      	(general_scalar_chain::convert_reg): Likewise.
      	(general_scalar_chain::convert_op): Likewise.
      	(general_scalar_chain::convert_insn): Likewise.  Add
      	fatal_insn_not_found if the result is not recognized.
      	(convertible_comparison_p): Pass in the scalar mode and use that.
      	(general_scalar_to_vector_candidate_p): Likewise.  Rename from
      	dimode_scalar_to_vector_candidate_p.  Add {S,U}{MIN,MAX} support.
      	(scalar_to_vector_candidate_p): Remove by inlining into single
      	caller.
      	(general_remove_non_convertible_regs): Rename from
      	dimode_remove_non_convertible_regs.
      	(remove_non_convertible_regs): Remove by inlining into single caller.
      	(convert_scalars_to_vector): Handle SImode and DImode chains
      	in addition to TImode chains.
      	* config/i386/i386.md (<maxmin><MAXMIN_IMODE>3): New expander.
      	(*<maxmin><MAXMIN_IMODE>3_1): New insn-and-split.
      	(*<maxmin>di3_doubleword): Likewise.
      
      	* gcc.target/i386/pr91154.c: New testcase.
      	* gcc.target/i386/minmax-3.c: Likewise.
      	* gcc.target/i386/minmax-4.c: Likewise.
      	* gcc.target/i386/minmax-5.c: Likewise.
      	* gcc.target/i386/minmax-6.c: Likewise.
      	* gcc.target/i386/minmax-1.c: Add -mno-stv.
      	* gcc.target/i386/minmax-2.c: Likewise.
      
      Co-Authored-By: Uros Bizjak <ubizjak@gmail.com>
      
      From-SVN: r274481
      Richard Biener committed
    • [AArch64] Use SVE BIC for conditional arithmetic · 1b187f36
      This patch uses BIC to pattern-match conditional AND with an inverted
      third input.  It also adds extra tests for AND, ORR and EOR.
      
      2019-08-14  Richard Sandiford  <richard.sandiford@arm.com>
      	    Kugan Vivekanandarajah  <kugan.vivekanandarajah@linaro.org>
      
      gcc/
      	* config/aarch64/aarch64-sve.md (*cond_bic<mode>_2)
      	(*cond_bic<mode>_any): New patterns.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/cond_logical_1.c: New test.
      	* gcc.target/aarch64/sve/cond_logical_1_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_logical_2.c: Likewise.
      	* gcc.target/aarch64/sve/cond_logical_2_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_logical_3.c: Likewise.
      	* gcc.target/aarch64/sve/cond_logical_3_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_logical_4.c: Likewise.
      	* gcc.target/aarch64/sve/cond_logical_4_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_logical_5.c: Likewise.
      	* gcc.target/aarch64/sve/cond_logical_5_run.c: Likewise.
      
      Co-Authored-By: Kugan Vivekanandarajah <kuganv@linaro.org>
      
      From-SVN: r274480
      Richard Sandiford committed
    • [AArch64] Use SVE UXT[BHW] as a form of predicated AND · d113ece6
      UXTB, UXTH and UXTW are equivalent to predicated ANDs with the constants
      0xff, 0xffff and 0xffffffff respectively.  This patch uses them in the
      patterns for IFN_COND_AND.
      
      2019-08-14  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* config/aarch64/aarch64.c (aarch64_print_operand): Allow %e to
      	take the equivalent mask, as well as a bit count.
      	* config/aarch64/predicates.md (aarch64_sve_uxtb_immediate)
      	(aarch64_sve_uxth_immediate, aarch64_sve_uxt_immediate)
      	(aarch64_sve_pred_and_operand): New predicates.
      	* config/aarch64/iterators.md (sve_pred_int_rhs2_operand): New
      	code attribute.
      	* config/aarch64/aarch64-sve.md
      	(cond_<SVE_INT_BINARY:optab><SVE_I:mode>): Use it.
      	(*cond_uxt<mode>_2, *cond_uxt<mode>_any): New patterns.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/cond_uxt_1.c: New test.
      	* gcc.target/aarch64/sve/cond_uxt_1_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_uxt_2.c: Likewise.
      	* gcc.target/aarch64/sve/cond_uxt_2_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_uxt_3.c: Likewise.
      	* gcc.target/aarch64/sve/cond_uxt_3_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_uxt_4.c: Likewise.
      	* gcc.target/aarch64/sve/cond_uxt_4_run.c: Likewise.
      
      From-SVN: r274479
      Richard Sandiford committed
    • [AArch64] Add SVE conditional conversion patterns · c5e16983
      This patch adds patterns to match conditional conversions between
      integers and like-sized floats.  The patterns are actually more
      general than that, but the other combinations can only be tested
      via the ACLE.
      
      2019-08-14  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* config/aarch64/aarch64-sve.md
      	(*cond_<SVE_COND_FCVTI:optab>_nontrunc<SVE_F:mode><SVE_HSDI:mode>)
      	(*cond_<SVE_COND_ICVTF:optab>_nonextend<SVE_HSDI:mode><SVE_F:mode>):
      	New patterns.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/cond_convert_1.c: New test.
      	* gcc.target/aarch64/sve/cond_convert_1_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_2.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_2_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_3.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_3_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_4.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_4_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_5.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_5_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_6.c: Likewise.
      	* gcc.target/aarch64/sve/cond_convert_6_run.c: Likewise.
      
      From-SVN: r274478
      Richard Sandiford committed
    • [AArch64] Add SVE conditional floating-point unary patterns · b21f7d53
      This patch adds patterns to match conditional unary operations
      on floating-point modes.  At the moment we rely on combine to merge
      separate arithmetic and vcond_mask operations, and since the latter
      doesn't accept zero operands, we miss out on the opportunity to use
      the movprfx /z alternative.  (This alternative is tested by the ACLE
      patches though.)
      
      2019-08-14  Richard Sandiford  <richard.sandiford@arm.com>
      	    Kugan Vivekanandarajah  <kugan.vivekanandarajah@linaro.org>
      
      gcc/
      	* config/aarch64/aarch64-sve.md
      	(*cond_<SVE_COND_FP_UNARY:optab><SVE_F:mode>_2): New pattern.
      	(*cond_<SVE_COND_FP_UNARY:optab><SVE_F:mode>_any): Likewise.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/cond_unary_1.c: Add tests for
      	floating-point types.
      	* gcc.target/aarch64/sve/cond_unary_2.c: Likewise.
      	* gcc.target/aarch64/sve/cond_unary_3.c: Likewise.
      	* gcc.target/aarch64/sve/cond_unary_4.c: Likewise.
      
      Co-Authored-By: Kugan Vivekanandarajah <kuganv@linaro.org>
      
      From-SVN: r274477
      Richard Sandiford committed
    • [AArch64] Add SVE conditional integer unary patterns · 3c9f4963
      This patch adds patterns to match conditional unary operations
      on integers.  At the moment we rely on combine to merge separate
      arithmetic and vcond_mask operations, and since the latter doesn't
      accept zero operands, we miss out on the opportunity to use the
      movprfx /z alternative.  (This alternative is tested by the ACLE
      patches though.)
      
      2019-08-14  Richard Sandiford  <richard.sandiford@arm.com>
      	    Kugan Vivekanandarajah  <kugan.vivekanandarajah@linaro.org>
      
      gcc/
      	* config/aarch64/aarch64-sve.md
      	(*cond_<SVE_INT_UNARY:optab><SVE_I:mode>_2): New pattern.
      	(*cond_<SVE_INT_UNARY:optab><SVE_I:mode>_any): Likewise.
      
      gcc/testsuite/
      	* gcc.target/aarch64/sve/cond_unary_1.c: New test.
      	* gcc.target/aarch64/sve/cond_unary_1_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_unary_2.c: Likewise.
      	* gcc.target/aarch64/sve/cond_unary_2_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_unary_3.c: Likewise.
      	* gcc.target/aarch64/sve/cond_unary_3_run.c: Likewise.
      	* gcc.target/aarch64/sve/cond_unary_4.c: Likewise.
      	* gcc.target/aarch64/sve/cond_unary_4_run.c: Likewise.
      
      Co-Authored-By: Kugan Vivekanandarajah <kuganv@linaro.org>
      
      From-SVN: r274476
      Richard Sandiford committed
    • Add more entries to the C++ get_std_name_hint array · 7eeb5982
      	* name-lookup.c (get_std_name_hint): Add more entries.
      
      From-SVN: r274475
      Jonathan Wakely committed
    • [Ada] Improve performance of Containers.Functional_Base · 4b0f6ee8
      This patch modifies the implementation of Functional_Base to damp the
      cost of its subprograms at runtime in specific cases. Instead of copying
      the entire underlying array to create a new container, containers can
      share the same Array_Base attribute. Performance on common use cases of
      formal and functional containers is improved with this patch.
      
      2019-08-14  Joffrey Huguet  <huguet@adacore.com>
      
      gcc/ada/
      
      	* libgnat/a-cofuba.ads: Add a Length attribute to type
      	Container. Add a type Array_Base which replaces the previous
      	Elements attribute of Container.
      	(Content_Init): New subprogram. It is used to initialize the
      	Base attribute of Container.
      	* libgnat/a-cofuba.adb (Resize): New subprogram. It is used to
      	resize the underlying array of a container if necessary.
      	(=, <=, Find, Get, Intersection, Length, Num_Overlaps, Set,
      	Union): Update to match changes in type declarations.
      	(Add): Modify body to damp the time and space cost in a specific
      	case.
      	(Content_Init): New subprogram. It is used to initialize the
      	Base attribute of Container.
      	(Remove): Modify body to damp the time and space cost in a
      	specific case.
      
      From-SVN: r274474
      Joffrey Huguet committed
    • [Ada] Alignment may be specified as zero · ff0889eb
      An Alignment clause or an aspect_specification for Alignment may be
      specified as 0, which is treated the same as 1.
      
      2019-08-14  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Get_Alignment_Value): Return 1 for Alignment 0,
      	and do not give an error.
      	* doc/gnat_rm/representation_clauses_and_pragmas.rst: Update the
      	corresponding documentation.
      	* gnat_rm.texi: Regenerate.
      
      gcc/testsuite/
      
      	* gnat.dg/alignment15.adb: New testcase.
      
      From-SVN: r274473
      Bob Duff committed
    • [Ada] Further cleanup in inlining machinery · f0539a79
      This is visible if you pass a very small number by means of -gnateinn.
      
      2019-08-14  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* inline.adb (Add_Pending_Instantiation): Fix off-by-one error
      	in the comparison against the maximum number of instantiations.
      
      From-SVN: r274472
      Eric Botcazou committed
    • [Ada] Further cleanup in inlining machinery · 0cc1d9ad
      No practical functional changes.
      
      2019-08-14  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* inline.adb (Add_Pending_Instantiation): Use greater-or-equal
      	in the comparison against the maximum number of instantiations.
      
      From-SVN: r274471
      Eric Botcazou committed
    • [Ada] Do not crash with -gnatR3 on Ghost aspects · 022c9dfe
      2019-08-14  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_aux.adb (Next_Rep_Item): If a node in the rep chain
      	involves a Ghost aspect it may have been replaced by a null
      	statement; use the original node to find next Rep_Item.
      	* repinfo.adb (List_Entities): Do not list an Ignored
      	Ghost_Entity, for which information may have been deleted.
      
      From-SVN: r274470
      Ed Schonberg committed
    • [Ada] Warn about unknown condition in Compile_Time_Warning · 0246fe44
      The compiler now warns if the condition in a pragma Compile_Time_Warning
      or Compile_Time_Error does not have a compile-time-known value. The
      warning is not given for pragmas in a generic template, but is given for
      pragmas in an instance.
      
      The -gnatw_c and -gnatw_C switches turn the warning on and off. The
      default is on.
      
      2019-08-14  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.ads, sem_prag.adb
      	(Process_Compile_Time_Warning_Or_Error): In parameterless
      	version, improve detection of whether we are in a generic unit
      	to cover the case of an instance within a generic unit.
      	(Process_Compile_Time_Warning_Or_Error): Rename the
      	two-parameter version to be
      	Validate_Compile_Time_Warning_Or_Error, and do not export it.
      	Issue a warning if the condition is not known at compile time.
      	The key point is that the warning must be given only for pragmas
      	deferred to the back end, because the back end discovers
      	additional values that are known at compile time.  Previous
      	changes in this ticket have enabled this by deferring to the
      	back end without checking for special cases such as 'Size.
      	(Validate_Compile_Time_Warning_Or_Error): Rename to be
      	Defer_Compile_Time_Warning_Error_To_BE.
      	* warnsw.ads, warnsw.adb (Warn_On_Unknown_Compile_Time_Warning):
      	Add new switches -gnatw_c and -gnatw_C to control the above
      	warning.
      	* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
      	Document new switches.
      	* gnat_ugn.texi: Regenerate.
      
      gcc/testsuite/
      
      	* gnat.dg/warn27.adb: New testcase.
      
      From-SVN: r274469
      Bob Duff committed
    • [Ada] Further cleanup in the inlining machinery · ebf7f0ab
      2019-08-14  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_ch12.adb (Might_Inline_Subp): Rework comment and restrict
      	the shortcut based on Is_Inlined to the back-end inlining case.
      
      From-SVN: r274468
      Eric Botcazou committed
    • [Ada] Incorrect error on inline protected function · dba246bf
      This patch fixes a bug where if a protected function has a pragma
      Inline, and has no local variables, and the body consists of a single
      extended_return_statement, and the result type is an indefinite
      composite subtype, and inlining is enabled, the compiler gives an error,
      even though the program is legal.
      
      2019-08-14  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* inline.adb (Check_And_Split_Unconstrained_Function): Ignore
      	protected functions to get rid of spurious error. The
      	transformation done by this procedure triggers legality errors
      	in the generated code in this case.
      
      gcc/testsuite/
      
      	* gnat.dg/inline19.adb, gnat.dg/inline19.ads: New testcase.
      
      From-SVN: r274467
      Bob Duff committed
    • [Ada] Defer processing of unknown CTW/E conditions to the back end · 2d1439c7
      2019-08-14  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.adb (Process_Compile_Time_Warning_Or_Error): Defer
      	processing to the back end in all cases where the pragma's
      	condition is not known at compile time during the front end
      	(except in generics), as opposed to detecting 'Size attributes
      	and the like. This ensures that we take advantage of whatever
      	can be compile-time known after running the back end, as opposed
      	to having the front end guess what the back end can do.  Remove
      	a little duplicated code at the call site.
      	* gnat1drv.adb (Post_Compilation_Validation_Checks): Unlock the
      	Elists while in Validate_Compile_Time_Warning_Errors, because it
      	does analysis and name resolution, which sometimes involves
      	adding Elists.
      
      From-SVN: r274466
      Bob Duff committed
    • [Ada] Compiler speedup with inlining across units · 4b96d386
      This change is aimed at speeding up the inlining across units done by
      the Ada compiler when -gnatn is specified and in the presence of units
      instantiating a lot of generic packages.
      
      The current implementation is as follows: when a generic package is
      being instantiated, the compiler scans its spec for the presence of
      subprograms with an aspect/pragma Inline and, upon finding one,
      schedules the instantiation of its body.  That's not very efficient
      because the compiler doesn't know yet if one of those inlined
      subprograms will eventually be called from the main unit.
      
      The new implementation arranges for the compiler to instantiate the body
      on demand, i.e. when it encounters a call to one of the inlined
      subprograms.  That's still not optimal because, at this point, the
      compiler has not yet computed whether the call itself is reachable from
      the main unit (it will do this computation at the very end of the
      processing, just before sending the inlined units to the code generator)
      but that's nevertheless a net progress.
      
      The patch also enhances the -gnatd.j option to make it output the list
      of instances "inlined" this way.  The following package is a simple
      example:
      
      with Q;
      
      procedure P is
      begin
        Q.Proc;
      end;
      
      package Q is
      
        procedure Proc;
        pragma Inline (Proc);
      
      end Q;
      
      with G;
      
      package body Q is
      
        package My_G is new G (1);
      
        procedure Proc is
          Val : constant Integer := My_G.Func;
        begin
          if Val /= 1 then
            raise Program_Error;
          end if;
        end;
      
      end Q;
      
      generic
      
        Value : Integer;
      
      package G is
      
        function Func return Integer;
        pragma Inline (Func);
      
      end G;
      
      package body G is
      
        function Func return Integer is
        begin
          return Value;
        end;
      
      end G;
      
      2019-08-14  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* einfo.ads (Is_Called): Document new usage on E_Package
      	entities.
      	* einfo.adb (Is_Called): Accept E_Package entities.
      	(Set_Is_Called): Likewise.
      	* exp_ch6.adb (Expand_Call_Helper): Move code dealing with
      	instances for back-end inlining to Add_Inlined_Body.
      	* inline.ads: Remove with clauses for Alloc and Table.
      	(Pending_Instantiations): Move to...
      	* inline.adb: Add with clauses for Alloc, Uintp, Table and
      	GNAT.HTable.
      	(Backend_Instances): New variable.
      	(Pending_Instantiations): ...here.
      	(Called_Pending_Instantiations): New table.
      	(Node_Table_Size): New constant.
      	(Node_Header_Num): New subtype.
      	(Node_Hash): New function.
      	(To_Pending_Instantiations): New hash table.
      	(Add_Inlined_Body): Bail out early for subprograms in the main
      	unit or subunit.  Likewise if the Is_Called flag is set.  If the
      	subprogram is an instance, invoke Add_Inlined_Instance.  Call
      	Set_Is_Called earlier.  If the subrogram is within an instance,
      	invoke Add_Inlined_Instance.  Also deal with the case where the
      	call itself is within an instance.
      	(Add_Inlined_Instance): New procedure.
      	(Add_Inlined_Subprogram): Remove conditions always fulfilled.
      	(Add_Pending_Instantiation): Move the defence against ludicruous
      	number of instantiations to here. When back-end inlining is
      	enabled, associate an instantiation with its index in table and
      	mark a few selected kinds of instantiations as always needed.
      	(Initialize): Set Backend_Instances to No_Elist.
      	(Instantiate_Body): New procedure doing the work extracted
      	from...
      	(Instantiate_Bodies): ...here.  When back-end inlining is
      	enabled, loop over Called_Pending_Instantiations instead of
      	Pending_Instantiations.
      	(Is_Nested): Minor tweak.
      	(List_Inlining_Info): Also list the contents of
      	Backend_Instances.
      	* sem_ch12.adb (Might_Inline_Subp): Return early if Is_Inlined
      	is set and otherwise set it before returning true.
      	(Analyze_Package_Instantiation): Remove the defence against
      	ludicruous number of instantiations.  Invoke
      	Remove_Dead_Instance instead of doing the removal manually if
      	there is a guaranteed ABE.
      
      From-SVN: r274465
      Eric Botcazou committed
    • [Ada] Equality for nonabstract type derived from interface treated as abstract · 72e324b6
      The compiler was creating an abstract function for the equality
      operation of a (nonlimited) interface type, and that could result in
      errors on generic instantiations that are passed nonabstract types
      derived from the interface type along with the derived type's inherited
      equality operation (complaining about an abstract subprogram being
      passed to a nonabstract formal). The "=" operation of an interface is
      supposed to be nonabstract (a direct consequence of the rule in RM
      4.5.2(6-7)), so we now create an expression function rather than an
      abstract function. The function returns False, but the result is
      unimportant since a function of an abstract type can never actually be
      invoked (its arguments must generally be class-wide, since there can be
      no objects of the type, and calling it will dispatch).
      
      2019-08-14  Gary Dismukes  <dismukes@adacore.com>
      
      gcc/ada/
      
      	* exp_ch3.adb (Predef_Spec_Or_Body): For an equality operation
      	of an interface type, create an expression function (that
      	returns False) rather than declaring an abstract function.
      	* freeze.adb (Check_Inherited_Conditions): Set Needs_Wrapper to
      	False unconditionally at the start of the loop creating wrappers
      	for inherited operations.
      
      gcc/testsuite/
      
      	* gnat.dg/equal11.adb, gnat.dg/equal11_interface.ads,
      	gnat.dg/equal11_record.adb, gnat.dg/equal11_record.ads: New
      	testcase.
      
      From-SVN: r274464
      Gary Dismukes committed
    • [Ada] Strengthen Locked flag · ae3a2b54
      This patch strengthens the Locked flag, by Asserting that it is False on
      operations that might cause reallocation.
      
      No change in behavior (except in the presence of compiler bugs), so no
      test.
      
      2019-08-14  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* table.adb: Assert that the table is not locked when increasing
      	Last, even if it doesn't cause reallocation.  In other words,
      	assert that on operations that MIGHT cause reallocation.
      	* table.ads: Fix comment accordingly.
      
      From-SVN: r274463
      Bob Duff committed