aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-10-22Move nested function info out of cgraph_nodeJan Hubicka11-89/+213
this patch moves nested function information out of symbol table (to a summary). This saves memory (especially at WPA time) and also makes nested function support more contained. gcc/ChangeLog: 2020-10-22 Jan Hubicka <hubicka@ucw.cz> * cgraph.c: Include tree-nested.h (cgraph_node::create): Call maybe_record_nested_function. (cgraph_node::remove): Do not remove function from nested function infos. (cgraph_node::dump): Update. (cgraph_node::unnest): Move to tree-nested.c (cgraph_node::verify_node): Update. (cgraph_c_finalize): Call nested_function_info::release. * cgraph.h (struct symtab_node): Remove nested function info. * cgraphclones.c (cgraph_node::create_clone): Do not clone nested function info. * cgraphunit.c (cgraph_node::analyze): Update. (cgraph_node::expand): Do not worry about nested functions; they are lowered. (symbol_table::finalize_compilation_unit): Call nested_function_info::release. * gimplify.c: Include tree-nested.h (unshare_body): Update. (unvisit_body): Update. * omp-offload.c (omp_discover_implicit_declare_target): Update. * tree-nested.c: Include alloc-pool.h, tree-nested.h, symbol-summary.h (nested_function_sum): New static variable. (nested_function_info::get): New member function. (nested_function_info::get_create): New member function. (unnest_function): New function. (nested_function_info::~nested_function_info): New member function. (nested_function_info::release): New function. (maybe_record_nested_function): New function. (lookup_element_for_decl): Update. (check_for_nested_with_variably_modified): Update. (create_nesting_tree): Update. (unnest_nesting_tree_1): Update. (gimplify_all_functions): Update. (lower_nested_functions): Update. * tree-nested.h (class nested_function_info): New class. (maybe_record_nested_function): Declare. (unnest_function): Declare. (first_nested_function): New inline function. (next_nested_function): New inline function. (nested_function_origin): New inline function. gcc/ada/ChangeLog: 2020-10-22 Jan Hubicka <hubicka@ucw.cz> * gcc-interface/trans.c: Include tree-nested.h (walk_nesting_tree): Update for new nested function info. gcc/c-family/ChangeLog: 2020-10-22 Jan Hubicka <hubicka@ucw.cz> * c-gimplify.c: Include tree-nested.h (c_genericize): Update for new nested function info. gcc/d/ChangeLog: 2020-10-22 Jan Hubicka <hubicka@ucw.cz> * decl.cc: Include tree-nested.h (get_symbol_decl): Update for new nested function info.
2020-10-22Simplify vec_select of a subreg of X to just a vec_select of X.liuhongt2-0/+71
gcc/ChangeLog PR rtl-optimization/97249 * simplify-rtx.c (simplify_binary_operation_1): Simplify vec_select of a subreg of X to a vec_select of X. gcc/testsuite/ChangeLog * gcc.target/i386/pr97249-1.c: New test.
2020-10-22Refactor implementation of *_bcst{_1,_2,_3} patterns.liuhongt7-336/+102
Add new predicate bcst_mem_operand and corresponding constraint "Br" to merge "$(pattern)_bcst{_1,_2,_3}" into "$(pattern)", also delete those separate "*_bcst{_1,_2,_3}" patterns. gcc/ChangeLog: PR target/87767 * config/i386/constraints.md ("Br"): New special memory constraint. * config/i386/i386-expand.c (ix86_binary_operator_ok): Both source operand cannot be in memory or bcst_memory_operand. * config/i386/i386.c (ix86_print_operand): Print bcst_mem_operand. * config/i386/i386.h (VALID_BCST_MODE_P): New. * config/i386/predicates.md (bcst_mem_operand): New predicate for AVX512 embedding broadcast memory operand. (bcst_vector_operand): New predicate, vector_operand or bcst_mem_operand. * config/i386/sse.md (*<plusminus_insn><mode>3<mask_name><round_name>): Extend predicate and constraints to handle bcst_mem_operand. (*mul<mode>3<mask_name><round_name>): Ditto. (<sse>_div<mode>3<mask_name><round_name>): Ditto. (<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name><round_name>): Ditto. (<sd_mask_codefor>fma_fmsub_<mode><sd_maskz_name><round_name>): Ditto. (<sd_mask_codefor>fma_fnmadd_<mode><sd_maskz_name><round_name>): Ditto. (<sd_mask_codefor>fma_fnmsub_<mode><sd_maskz_name><round_name>): Ditto. (*<plusminus_insn><mode>3): Ditto. (avx512dq_mul<mode>3<mask_name>): Ditto. (*<sse4_1_avx2>_mul<mode>3<mask_name>): Ditto. (*andnot<mode>3): Ditto. (<mask_codefor><code><mode>3<mask_name>): Ditto. (*sub<mode>3<mask_name>_bcst): Removed. (*add<mode>3<mask_name>_bcst): Ditto. (*mul<mode>3<mask_name>_bcst): Ditto. (*<avx512>_div<mode>3<mask_name>_bcst): Ditto. (*<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name>_bcst_1): Ditto. (*<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name>_bcst_2): Ditto. (*<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name>_bcst_3): Ditto. (*<sd_mask_codefor>fma_fmsub_<mode><sd_maskz_name>_bcst_1): Ditto. (*<sd_mask_codefor>fma_fmsub_<mode><sd_maskz_name>_bcst_2): Ditto. (*<sd_mask_codefor>fma_fmsub_<mode><sd_maskz_name>_bcst_3): Ditto. (*<sd_mask_codefor>fma_fnmadd_<mode><sd_maskz_name>_bcst_1): Ditto. (*<sd_mask_codefor>fma_fnmadd_<mode><sd_maskz_name>_bcst_2): Ditto. (*<sd_mask_codefor>fma_fnmadd_<mode><sd_maskz_name>_bcst_3): Ditto. (*<sd_mask_codefor>fma_fnmsub_<mode><sd_maskz_name>_bcst_1): Ditto. (*<sd_mask_codefor>fma_fnmsub_<mode><sd_maskz_name>_bcst_2): Ditto. (*<sd_mask_codefor>fma_fnmsub_<mode><sd_maskz_name>_bcst_3): Ditto. (*sub<mode>3_bcst): Ditto. (*add<mode>3_bcst): Ditto. (*avx512dq_mul<mode>3<mask_name>_bcst): Ditto. (*avx512f_mul<mode>3<mask_name>_bcst): Ditto. (*andnot<mode>3_bcst): Ditto. (*<code><mode>3_bcst): Ditto. * config/i386/subst.md (bcst_round_constraint): New subst attribute. (bcst_round_nimm_predicate): Ditto. (bcst_mask_prefix3): Ditto. (bcst_mask_prefix4): Ditto.
2020-10-22Extend special_memory_constraint.liuhongt5-13/+37
For operand with special_memory_constraint, there could be a wrapper for memory_operand. Extract mem for operand for conditional judgement like MEM_P, also for record_address_regs. gcc/ChangeLog: PR target/87767 * ira-costs.c (record_operand_costs): Extract memory operand from recog_data.operand[i] for record_address_regs. (record_reg_classes): Extract memory operand from OP for conditional judgement MEM_P. * ira.c (ira_setup_alts): Ditto. * lra-constraints.c (extract_mem_from_operand): New function. (satisfies_memory_constraint_p): Extract memory operand from OP for decompose_mem_address, return false when there's no memory operand inside OP. (process_alt_operands): Remove MEM_P (op) since it would be judged in satisfies_memory_constraint_p. * recog.c (asm_operand_ok): Extract memory operand from OP for judgement of memory_operand (OP, VOIDmode). (constrain_operands): Don't unwrapper unary operator when there's memory operand inside. * rtl.h (extract_mem_from_operand): New decl.
2020-10-22arm: Auto-vectorization for MVE: vmin/vmaxDennis Zhang5-34/+121
This patch enables MVE vmin/vmax instructions for auto-vectorization. MVE target is included in expander smin<mode>3, umin<mode>3, smax<mode>3 and umax<mode>3 for vectorization. Related insns for vmin/vmax in mve.md are modified to use smin, umin, smax and umax expressions instead of unspec to support the expanders. gcc/ChangeLog: 2020-10-22 Dennis Zhang <dennis.zhang@arm.com> * config/arm/mve.md (mve_vmaxq_<supf><mode>): Replace with ... (mve_vmaxq_s<mode>, mve_vmaxq_u<mode>): ... these new insns to use smax/umax instead of VMAXQ. (mve_vminq_<supf><mode>): Replace with ... (mve_vminq_s<mode>, mve_vminq_u<mode>): ... these new insns to use smin/umin instead of VMINQ. (mve_vmaxnmq_f<mode>): Use smax instead of VMAXNMQ_F. (mve_vminnmq_f<mode>): Use smin instead of VMINNMQ_F. * config/arm/vec-common.md (smin<mode>3): Use the new mode macros ARM_HAVE_<MODE>_ARITH. (umin<mode>3, smax<mode>3, umax<mode>3): Likewise. gcc/testsuite/ChangeLog: * gcc.target/arm/simd/mve-vminmax_1.c: New test.
2020-10-21Handle a_2= &b properly in range calculations.Andrew MacLeod2-9/+34
when processing assignments, we were using the type of b instead of type of &b when computing a range. This was usually filtered out by FRE. turning it off exposed it. gcc/ PR tree-optimization/97520 * gimple-range.cc (range_of_non_trivial_assignment): Handle x = &a by returning a non-zero range. gcc/testsuite/ * gcc.dg/pr97520.c: New.
2020-10-22arm: Auto-vectorization for MVE: vmulDennis Zhang6-22/+95
This patch enables MVE vmul instructions for auto-vectorization. It includes MVE in expander mul<mode>3 to enable vectorization for MVE. Related MVE vmul insns are modified to support the expander by using expression 'mult' instead of unspec. The mul<mode>3 for vectorization in vec-common.md uses mode iterator VDQWH instead of VALLW to cover all supported modes. The macros ARM_HAVE_NEON_<MODE>_ARITH are used to select supported modes for different targets. The redundant mul<mode>3 in neon.md is removed. gcc/ChangeLog: 2020-10-22 Dennis Zhang <dennis.zhang@arm.com> * config/arm/mve.md (mve_vmulq<mode>): New entry for vmul instruction using expression 'mult'. (mve_vmulq_f<mode>): Use mult instead of VMULQ_F. * config/arm/neon.md (mul<mode>3): Removed. * config/arm/vec-common.md (mul<mode>3): Use the new mode macros ARM_HAVE_<MODE>_ARITH. Use mode iterator VDQWH instead of VALLW. gcc/testsuite/ChangeLog: * gcc.target/arm/simd/mve-vmul_1.c: New test.
2020-10-21Check for undefined before not returning a constant valueAndrew MacLeod2-4/+40
Don't return UNDEFINED for a range in an unreachable block if the global value evaluates to a constant. Return that constant instead. PR tree-optimization/97515 * value-query.cc (range_query::value_of_expr): If the result is UNDEFINED, check to see if the global value is a constant. (range_query::value_on_edge): Ditto.
2020-10-21syscall: import upstream code for BSD sockets and sysctlsNikhil Benesch4-2/+104
Import some missing upstream code for BSD sockets and sysctls and adapt it for gccgo. Updates golang/go#38538. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261137
2020-10-22Strenghten bound for bulitin_constant_p hint.Jan Hubicka1-24/+47
this patch makes builtin_constant_p hint to combine with other loop hints we already support. gcc/ChangeLog: 2020-10-22 Jan Hubicka <hubicka@ucw.cz> PR ipa/97445 * ipa-inline.c (inline_insns_single): Add hint2 parameter. (inline_insns_auto): Add hint2 parameter. (can_inline_edge_by_limits_p): Update. (want_inline_small_function_p): Update. (wrapper_heuristics_may_apply): Update.
2020-10-21testsuite: Enable p9-lxvx-stxvx testcases and fold-vec-extractDavid Edelsohn6-11/+15
This patch enables the p9-lxvx-stxvx testcases with appropriate requirements. It also adjusts the expected matching instructions in the fold-vec-extract testcases for BE. gcc/testsuite/ChangeLog: * gcc.target/powerpc/fold-vec-extract-float.p9.c: rldicl and subfic only for target LE. * gcc.target/powerpc/fold-vec-extract-longlong.p9.c: xori only for target LE. Adjust mfvsrd and add mfvsrld for BE. * gcc.target/powerpc/fold-vec-extract-short.p9.c: vextuhrx for LE. vextuhlx for BE. * gcc.target/powerpc/p9-lxvx-stxvx-1.c: Remove target. * gcc.target/powerpc/p9-lxvx-stxvx-2.c: Remove target. * gcc.target/powerpc/p9-lxvx-stxvx-3.c: Remove target. Require float128
2020-10-21libstdc++: Simplify std::shared_ptr construction from std::weak_ptrJonathan Wakely2-63/+22
The _M_add_ref_lock() and _M_add_ref_lock_nothrow() members of _Sp_counted_base are very similar, except that the former throws an exception when the use count is zero and the latter returns false. The former (and its callers) can be implemented in terms of the latter. This results in a small reduction in code size, because throwing an exception now only happens in one place. libstdc++-v3/ChangeLog: * include/bits/shared_ptr.h (shared_ptr(const weak_ptr&, nothrow_t)): Add noexcept. * include/bits/shared_ptr_base.h (_Sp_counted_base::_M_add_ref_lock): Remove specializations and just call _M_add_ref_lock_nothrow. (__shared_count, __shared_ptr): Use nullptr for null pointer constants. (__shared_count(const __weak_count&)): Use _M_add_ref_lock_nothrow instead of _M_add_ref_lock. (__shared_count(const __weak_count&, nothrow_t)): Add noexcept. (__shared_ptr::operator bool()): Add noexcept. (__shared_ptr(const __weak_ptr&, nothrow_t)): Add noexcept.
2020-10-21rs6000: MMA type causes an ICE in ranger pass due to incompatible typesRichard Biener2-4/+20
PR97360 shows a problem in how we create our PXI and POI modes that cause an ICE in the ranger pass. The problem seems to be that the extra call to build_distinct_type_copy() also creates new TYPE_{MIN,MAX}_VALUEs that are not compatible/the same as the base type itself. The simple "fix" is to actually remove the unneeded build_distinct_type_copy(), since according to richi, the types returned from make_unsigned_type() are already distinct. gcc/ 2020-10-21 Richard Biener <rguenther@suse.de> PR target/97360 * config/rs6000/rs6000-call.c (rs6000_init_builtins): Remove call to build_distinct_type_copy(). gcc/testsuite/ 2020-10-21 Martin Liska <mliska@suse.cz> PR target/97360 * gcc.target/powerpc/pr97360.c: New test. Co-authored-by: Andrew MacLeod <amacleod@redhat.com> Co-authored-by: Martin Liska <mliska@suse.cz>
2020-10-21Inline functions with builtin_constant_p more agressively.Jan Hubicka4-5/+117
This patch implements heuristics that increases inline limits (by the hints mechanism) for inline functions that use builtin_constant_p on parameter. Those are very likely intended to be always inlined and simplify after inlining. The PR is about a function that we used to inline with --param inline-insns-single=200 but with new default of 70 for -O2 we no longer do so. Hints are currently configured to bump the bound up twice, so we get limit of 140 that is still not enough to inline the particular testcase but it should help in general. I can implement a stronger bump if that seems useful (maybe it is). The example is bit operation written as a decision chain with 64 conditions. This blows up the limit on number of conditions we track per funtion (which is 30) and thus the size/time estimates are not working that well. gcc/ChangeLog: PR ipa/97445 * ipa-fnsummary.c (ipa_dump_hints): Add INLINE_HINT_builtin_constant_p. (ipa_fn_summary::~ipa_fn_summary): Free builtin_constant_p_parms. (ipa_fn_summary_t::duplicate): Duplicate builtin_constant_p_parms. (ipa_dump_fn_summary): Dump builtin_constant_p_parms. (add_builtin_constant_p_parm): New function (set_cond_stmt_execution_predicate): Update builtin_constant_p_parms. (ipa_call_context::estimate_size_and_time): Set INLINE_HINT_builtin_constant_p.. (ipa_merge_fn_summary_after_inlining): Merge builtin_constant_p_parms. (inline_read_section): Read builtin_constant_p_parms. (ipa_fn_summary_write): Write builtin_constant_p_parms. * ipa-fnsummary.h (enum ipa_hints_vals): Add INLINE_HINT_builtin_constant_p. * ipa-inline.c (want_inline_small_function_p): Use INLINE_HINT_builtin_constant_p. (edge_badness): Use INLINE_HINT_builtin_constant_p. gcc/testsuite/ChangeLog: PR ipa/97445 * gcc.dg/ipa/inlinehint-5.c: New test.
2020-10-21Remove interfering default #undefs from vx-common.hDouglas Rupp1-2/+0
undef'ing LIB_SPEC and especially LINK_SPEC here is unneccesary and inteferes with the definition of LINK_SPEC for the bi-arch'd ppc*-vx7r2 target which uses the linux64 LINK_SPEC 2020-10-21 Douglas Rupp <rupp@adacore.com> gcc/ * config/vx-common.h (LINK_SPEC, LIB_SPEC): Remove #undef.
2020-10-21Introduce vxworks7r2 support for ppc and ppc64Douglas Rupp5-85/+194
This change introduces support for the most recent versions of VxWorks on PowerPC targets, for both 32 and 64 bit thanks to a bi-arch setup. The system compilers are essentially configured as Linux toolchains with only a few specificities and we replicate that model here. The most visible specificities are the use of secureplt by default, the pre-definition of some macros that the system headers still rely on (_VX_CPU and _VX_CPU_FAMILY, for example), and of course some variations related to the so VxWorks typical kernel vs RTP mode distinction. In addition to the introduction of config.gcc and libgcc configuration chunks, much inspired by the linux ones, the change - Reworks rs6000/vxworks.h file to feature bits common to the Vx6 and Vx7 port then a separate section for each, where the Vx7 part is very short as we rely on the Linux definitions for most things. - Adjusts the CPU macro predefinitions in CPP_SPEC to resort to "_VX_CPU" instead of "CPU" for Vx7, to better match the more recent system headers expectations, - Adds a cpu definition case for e6500. - Changes to the use SUB3TARGET_OVERRIDE_OPTIONS instead of SUBSUBTARGET_OVERRIDE_OPTIONS for specifics, so we don't override the Linux's version of the latter for vx7. 2020-10-20 Douglas Rupp <rupp@adacore.com> gcc/ * config.gcc (powerpc*-wrs-vxworks7r*): New case. * config/rs6000/vxworks.h: Rework to handle VxWorks7. Refactor as common bits + vx6 vs vx7 ones. For the latter, rely essentially on the Linux configuration and adjust CPU to _VX_CPU in CPP_SPEC. Add a case for e6500. Use SUB3TARGET_OVERRIDE_OPTIONS for specifics to preserve the Linux SUBSUBTARGET_OVERRIDE_OPTIONS for vx7. libgcc/ * config.host (powerpc*-wrs-vxworks7*): New case. * configure.ac: Handle powerpc*-*-vxworks7* as powerpc*-*-linux* for ppc-fp_type. * configure: Regenerate. Co-authored-by: Olivier Hainque <hainque@adacore.com>
2020-10-21testsuite: enable and fix swaps-p8 testcasesDavid Edelsohn60-67/+95
This patch enables swaps-p8 and a few other testcases on non-powerpc64le systems. It also cleans up the target requirements for various testcases. gcc/testsuite/ChangeLog: * gcc.target/powerpc/p9-extract-1.c: Require lp64. * gcc.target/powerpc/p9-extract-2.c: Require lp64. * gcc.target/powerpc/p9-extract-3.c: Require lp64. * gcc.target/powerpc/p9-permute.c: Remove target. * gcc.target/powerpc/pr63335.c: Remove target. * gcc.target/powerpc/pr87507.c: Remove target. * gcc.target/powerpc/swaps-p8-1.c: Require LE and P8. * gcc.target/powerpc/swaps-p8-10.c: Remove target. Require P8. * gcc.target/powerpc/swaps-p8-11.c: Remove target. Require P8. * gcc.target/powerpc/swaps-p8-12.c: Require LE and P8. * gcc.target/powerpc/swaps-p8-13.c: Remove target. Require P8. * gcc.target/powerpc/swaps-p8-14.c: Remove target. Require P8. * gcc.target/powerpc/swaps-p8-15.c: Remove target. Require P8. * gcc.target/powerpc/swaps-p8-16.c: Remove target. Require P8. * gcc.target/powerpc/swaps-p8-17.c: Require P8. * gcc.target/powerpc/swaps-p8-18.c: Remove target. Require P8. * gcc.target/powerpc/swaps-p8-19.c: Remove target. Require P8. * gcc.target/powerpc/swaps-p8-2.c: Require LE and P8. * gcc.target/powerpc/swaps-p8-20.c: Remove target. * gcc.target/powerpc/swaps-p8-21.c: Remove target. Require Altivec. * gcc.target/powerpc/swaps-p8-22.c: Remove target. Require P8. * gcc.target/powerpc/swaps-p8-23.c: Require LE and P8. * gcc.target/powerpc/swaps-p8-24.c: Remove target. Require P8. * gcc.target/powerpc/swaps-p8-25.c: Require LE and P8. * gcc.target/powerpc/swaps-p8-26.c: Remove target. Require P8. * gcc.target/powerpc/swaps-p8-27.c: Remove target. Require P8. * gcc.target/powerpc/swaps-p8-28.c: Remove target. * gcc.target/powerpc/swaps-p8-29.c: Remove target. * gcc.target/powerpc/swaps-p8-3.c: Require LE and P8. * gcc.target/powerpc/swaps-p8-30.c: Remove target. * gcc.target/powerpc/swaps-p8-31.c: Remove target. * gcc.target/powerpc/swaps-p8-32.c: Remove target. * gcc.target/powerpc/swaps-p8-33.c: Remove target. * gcc.target/powerpc/swaps-p8-34.c: Remove target. * gcc.target/powerpc/swaps-p8-35.c: Remove target. * gcc.target/powerpc/swaps-p8-36.c: Remove target. * gcc.target/powerpc/swaps-p8-37.c: Remove target. * gcc.target/powerpc/swaps-p8-38.c: Remove target. * gcc.target/powerpc/swaps-p8-39.c: Remove target. * gcc.target/powerpc/swaps-p8-4.c: Require LE and P8. * gcc.target/powerpc/swaps-p8-40.c: Remove target. * gcc.target/powerpc/swaps-p8-41.c: Remove target. * gcc.target/powerpc/swaps-p8-42.c: Remove target. * gcc.target/powerpc/swaps-p8-43.c: Remove target. * gcc.target/powerpc/swaps-p8-44.c: Remove target. * gcc.target/powerpc/swaps-p8-45.c: Remove target. * gcc.target/powerpc/swaps-p8-46.c: Require LE. * gcc.target/powerpc/swaps-p8-5.c: Require LE and P8. * gcc.target/powerpc/swaps-p8-6.c: Remove target. Require P8. * gcc.target/powerpc/swaps-p8-7.c: Remove target. Require P8. * gcc.target/powerpc/swaps-p8-8.c: Remove target. Require P8. * gcc.target/powerpc/swaps-p8-9.c: Remove target. Require P8. * gcc.target/powerpc/vec-cmp.c: Require LP64. * gcc.target/powerpc/vec-cmpne.c: Remove target. * gcc.target/powerpc/vec-mul.c: Remove target. * gcc.target/powerpc/vec-set-char.c: Require LP64. * gcc.target/powerpc/vec-set-int.c: Require LP64. * gcc.target/powerpc/vec-set-short.c: Require LP64. * gcc.target/powerpc/vec-xxpermdi.c: Remove target. Require VSX. * gcc.target/powerpc/vsxcopy.c: Remove target. Require VSX.
2020-10-21libstdc++: Make structured bindings always work for subranges [PR 97512]Jonathan Wakely3-21/+54
The definition of ranges::subrange was moved to the new <bits/ranges_util.h> header so that it could be used in <algorithm> without including the whole of <ranges>. However, the tuple-like support that enables subrange to be used with structured bindings was left in <ranges>. This is arguably conforming (to use a subrange you should include <ranges>) but it's inconvenient and probably confusing. This change makes the tuple-like support available whenever subrange itself is available. libstdc++-v3/ChangeLog: PR libstdc++/97512 * include/bits/ranges_util.h (tuple_size<subrange>) (tuple_element<I, cv subrange>): Move here from ... * include/std/ranges: ... here. * testsuite/std/ranges/subrange/97512.cc: New test.
2020-10-21libstdc++: Rebase include/pstl to current upstreamThomas Rodgers13-779/+1586
From llvm-project/pstl @ 0b2e0e80d96 libstdc++-v3/ChangeLog: * include/pstl/algorithm_impl.h: Update file. * include/pstl/execution_impl.h: Likewise. * include/pstl/glue_algorithm_impl.h: Likewise. * include/pstl/glue_memory_impl.h: Likewise. * include/pstl/glue_numeric_impl.h: Likewise. * include/pstl/memory_impl.h: Likewise. * include/pstl/numeric_impl.h: Likewise. * include/pstl/parallel_backend.h: Likewise. * include/pstl/parallel_backend_serial.h: Likewise. * include/pstl/parallel_backend_tbb.h: Likewise. * include/pstl/parallel_backend_utils.h: Likewise. * include/pstl/pstl_config.h: Likewise. * include/pstl/unseq_backend_simd.h: Likewise.
2020-10-21Fortran: class.c - update vtable commentTobias Burnus1-0/+2
gcc/fortran/ PR fortran/45516 * class.c: Add _deallocate to the vtable documentation comment.
2020-10-21tree-optimization/97500 - avoid SLP backedges for inductionsRichard Biener2-0/+41
Inductions are not vectorized as cycle but materialized from SCEV data. Filling in backedge SLP nodes confuses this process. 2020-10-21 Richard Biener <rguenther@suse.de> PR tree-optimization/97500 * tree-vect-slp.c (vect_analyze_slp_backedges): Do not fill backedges for inductions. * gfortran.dg/pr97500.f90: New testcase.
2020-10-21Simplify trivial VEC_COND_EXPR in expander.liuhongt2-0/+26
gcc/ChangeLog: PR target/97506 * config/i386/i386-expand.c (ix86_expand_sse_movcc): Move op_true to dest directly when op_true equals op_false. gcc/testsuite/ChangeLog: PR target/97506 * gcc.target/i386/pr97506.c: New test.
2020-10-21phiopt: Optimize x ? __builtin_clz (x) : 32 in GIMPLE [PR97503]Jakub Jelinek2-24/+95
While we have at the RTL level noce_try_ifelse_collapse combined with simplify_cond_clz_ctz, that optimization doesn't always trigger because e.g. on powerpc there is an define_insn to compare a reg against zero and copy that register to another one and so we end up with a different pseudo in the simplify_cond_clz_ctz test and punt. For targets that define C?Z_DEFINED_VALUE_AT_ZERO to 2 for certain modes, we can optimize it already in phiopt though, just need to ensure that we transform the __builtin_c?z* calls into .C?Z ifns because my recent VRP changes codified that the builtin calls are always undefined at zero, while ifns honor C?Z_DEFINED_VALUE_AT_ZERO equal to 2. And, in phiopt we already have popcount handling that does pretty much the same thing, except for always using a zero value rather than the one set by C?Z_DEFINED_VALUE_AT_ZERO. So, this patch extends that function to handle not just popcount, but also clz and ctz. 2020-10-21 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/97503 * tree-ssa-phiopt.c: Include internal-fn.h. (cond_removal_in_popcount_pattern): Rename to ... (cond_removal_in_popcount_clz_ctz_pattern): ... this. Handle not just popcount, but also clz and ctz if it has C?Z_DEFINED_VALUE_AT_ZERO 2. * gcc.dg/tree-ssa/pr97503.c: New test.
2020-10-21Simplify CFG copying tablesRichard Biener1-91/+23
This simplifies the maps between original and new basic blocks and loops as used for CFG copying. Instead of using a pointer hash table to allocated mapping entries use a hash_map with int_hash, removing the indirection and code duplication. We can use -1 and -2 as empty/deleted values as those are not valid basic-block indices or loop numbers. 2020-10-21 Richard Biener <rguenther@suse.de> * cfg.c (htab_bb_copy_original_entry): Remove. (bb_copy_hasher): Likewise. (bb_original, bb_copy, loop_copy): Use hash_map<int_hash<int, -1, -2>, int>. (original_copy_bb_pool): Remove. (initialize_original_copy_tables): Adjust. (reset_original_copy_tables): Likewise. (free_original_copy_tables): Likewise. (original_copy_tables_initialized_p): Likewise. (copy_original_table_clear): Simplify. (copy_original_table_set): Likewise. (get_bb_original): Likewise. (get_bb_copy): Likewise. (get_loop_copy): Likewise.
2020-10-21Separate new_edges compute in copy_bbsRichard Biener1-6/+15
This separates out a loop finding new_edges from edges in copy_bbs, making its complexity cheaper overall from total number of succs in copied bbs times num_edges to num_edges times the complexity of find_edge. 2020-10-21 Richard Biener <rguenther@suse.de> * cfghooks.c (copy_bbs): Split out loop computing new_edges.
2020-10-21Adjust overflow for invariants in bounds_of_var_in_loop.Aldy Hernandez2-3/+4
Invariants returned from SCEV can have TREE_OVERFLOW set. Clear the overflow as we do with the rest of the values returned from this function. gcc/ChangeLog: * gimple-range.cc (gimple_ranger::range_of_ssa_name_with_loop_info): Remove TREE_OVERFLOW special case. * vr-values.c (bounds_of_var_in_loop): Adjust overflow for invariants.
2020-10-21libgomp: Hopefully avoid false positive warnings in env.c on solarisJakub Jelinek1-6/+2
> the patch also breaks bootstrap on both i386-pc-solaris2.11 and > sparc-sun-solaris2.11: > > /vol/gcc/src/hg/master/local/libgomp/env.c: In function 'initialize_env': > /vol/gcc/src/hg/master/local/libgomp/env.c:414:16: error: 'new_offload' may be used uninitialized in this function [-Werror=maybe-uninitialized] > 414 | *offload = new_offload; > | ~~~~~~~~~^~~~~~~~~~~~~ > /vol/gcc/src/hg/master/local/libgomp/env.c:384:30: note: 'new_offload' was declared here > 384 | enum gomp_target_offload_t new_offload; > | ^~~~~~~~~~~ I can't reproduce that, but I fail to see why we need two separate variables, one with actual value and one tracking if the value is valid. So, I'm going with: 2020-10-21 Jakub Jelinek <jakub@redhat.com> * env.c (parse_target_offload): Change new_offload var type to int, preinitialize to -1, remove found var and test new_offload != -1 instead of found.
2020-10-21Move simplify_cond_using_ranges_2 to tree-vrp.cAldy Hernandez3-67/+66
This was slated to be moved last year, as its only use is in tree-vrp.c There are no functional changes. It's just a move and a rename. gcc/ChangeLog: * vr-values.h: Remove simplify_cond_using_ranges_2. (range_fits_type_p): New. * vr-values.c (range_fits_type_p): Remove static qualifier. (vrp_simplify_cond_using_ranges): Move... * tree-vrp.c (vrp_simplify_cond_using_ranges): ...to here.
2020-10-21libsanitizer: add test-caseMartin Liska1-0/+19
gcc/testsuite/ChangeLog: PR sanitizer/97414 * g++.dg/asan/pr97414.C: New test.
2020-10-21ASAN: Support detect_invalid_pointer_pairs=1 with ↵Martin Liska1-1/+3
detect_stack_use_after_return=1 Do not crash when AsanThread::GetStackVariableShadowStart does not find a variable for a pointer on a shadow stack. Cherry-pick from ad2be02a833e56f7fe280797280b219eb3312621. Differential Revision: https://reviews.llvm.org/D89552
2020-10-21[Ada] Support of the Ada.Text_IO hierarchy for 128-bit typesEric Botcazou37-1993/+1865
gcc/ada/ * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add a-llltio, a-lllwti, a-lllzti and remove a-timoau, a-wtmoau and a-ztmoau. (GNATRTL_128BIT_PAIRS): Add a-tiinio.adb, a-timoio.adb, a-wtinio.adb, a-wtmoio.adb, a-ztinio.adb and a-ztmoio.adb. * impunit.adb (Non_Imp_File_Names_95): Add a-llltio, a-lllwti and a-lllzti. * krunch.ads: Document trick for Ada.Long_Long_Long_Integer_*_IO. * krunch.adb (Krunch): Add trick for Ada.Long_Long_Long_Integer_*_IO. * libgnat/a-llltio.ads: Instantiate Ada.Text_IO.Integer_IO. * libgnat/a-lllwti.ads: Instantiate Ada.Wide_Text_IO.Integer_IO. * libgnat/a-lllzti.ads: Instantiate Ada.Wide_Wide_Text_IO.Integer_IO. * libgnat/a-tigeau.ads (Load_Integer): New procedure. * libgnat/a-tigeau.adb (Load_Integer): Likewise. * libgnat/a-tiinau.ads, libgnat/a-tiinau.adb: Change to generic package. * libgnat/a-tiinio.adb: Instantiate it. * libgnat/a-tiinio__128.adb: Likewise. * libgnat/a-timoau.ads, libgnat/a-timoau.adb: Change to generic package. * libgnat/a-timoio.adb: Instantiate it. * libgnat/a-timoio__128.adb: Likewise. * libgnat/a-wtgeau.ads (Load_Integer): New procedure. * libgnat/a-wtgeau.adb (Load_Integer): Likewise. * libgnat/a-wtinau.ads, libgnat/a-wtinau.adb: Change to generic package. * libgnat/a-wtinio.adb: Instantiate it. * libgnat/a-wtinio__128.adb: Likewise. * libgnat/a-wtmoau.ads, libgnat/a-wtmoau.adb: Change to generic package. * libgnat/a-wtmoio.adb: Instantiate it. * libgnat/a-wtmoio__128.adb: Likewise. * libgnat/a-ztgeau.ads (Load_Integer): New procedure. * libgnat/a-ztgeau.adb (Load_Integer): Likewise. * libgnat/a-ztinau.ads, libgnat/a-ztinau.adb: Change to generic package. * libgnat/a-ztinio.adb: Instantiate it. * libgnat/a-ztinio__128.adb: Likewise. * libgnat/a-ztmoau.ads, libgnat/a-ztmoau.adb: Change to generic package. * libgnat/a-ztmoio.adb: Instantiate it. * libgnat/a-ztmoio__128.adb: Likewise.
2020-10-21[Ada] Fix problematic placement of freeze node after instantiationEric Botcazou1-6/+1
gcc/ada/ * sem_ch12.adb (Freeze_Subprogram_Body): Do not move the freeze node of the package body enclosing the instance when its parent is in the same declarative part as the freeze node of the parent.
2020-10-21[Ada] Implement missing function result finalization.Steve Baird1-7/+73
gcc/ada/ * exp_ch6.adb (Insert_Post_Call_Actions): When a function's result type requires finalization and we decide to make copy of a call to the function and subsequently refer only to the copy, then don't forget to finalize the original function result object.
2020-10-21[Ada] Support of attributes Image, Put_Image, Val and Width for 128-bit typesEric Botcazou62-2014/+2516
gcc/ada/ * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add s-widint, s-widthi, s-widuns, s-widuns. (GNATRTL_128BIT_OBJS): Add s-imglllb, s-imgllli, s-imglllu, s-imglllw, s-valllli, s-vallllu, s-widllli, s-widlllu. * exp_imgv.adb (Expand_Image_Attribute): Deal with 128-bit types. (Expand_Value_Attribute): Likewise. (Expand_Width_Attribute): Likewise. * exp_put_image.adb (Build_Elementary_Put_Image_Call): Likewise. * krunch.adb (Krunch): Deal with s-img, s-val and s-wid prefixes. * rtsfind.ads (RTU_Id): Add System_Img_LLLI, System_Img_LLLU, System_Val_LLLI, System_Val_LLL, System_Wid_Int, System_Wid_LLLI, System_Wid_LLLU, System_Wid_Uns). (RE_Id): Add RE_Image_Long_Long_Long_Integer, RE_Image_Long_Long_Long_Unsigned, RE_Put_Image_Long_Long_Long_Integer, RE_Put_Image_Long_Long_Long_Unsigned, RE_Long_Long_Long_Unsigned, RE_Value_Long_Long_Long_Integer, RE_Value_Long_Long_Long_Unsigned, RE_Width_Integer, RE_Width_Long_Long_Long_Integer, RE_Width_Long_Long_Long_Unsigned, RE_Width_Unsigned, RE_Image_Long_Long_Long_Integer, RE_Image_Long_Long_Long_Unsigned, RE_Put_Image_Long_Long_Long_Integer, RE_Put_Image_Long_Long_Long_Unsigned, RE_Long_Long_Long_Unsigned, RE_Value_Long_Long_Long_Integer, RE_Value_Long_Long_Long_Unsigned, RE_Width_Integer, RE_Width_Long_Long_Long_Integer, RE_Width_Long_Long_Long_Unsigned, RE_Width_Unsigned. * libgnat/s-imageb.ads, libgnat/s-imageb.adb: New generic package. * libgnat/s-imagei.ads, libgnat/s-imagei.adb: Likewise. * libgnat/s-imageu.ads, libgnat/s-imageu.adb: Likewise. * libgnat/s-imagew.ads, libgnat/s-imagew.adb: Likewise. * libgnat/s-imgbiu.ads: Instantiate System.Image_B. * libgnat/s-imgbiu.adb: Add pragma No_Body. * libgnat/s-imgint.ads: Instantiate System.Image_I. * libgnat/s-imgint.adb: Add pragma No_Body. * libgnat/s-imgllb.ads: Instantiate System.Image_B. * libgnat/s-imgllb.adb: Add pragma No_Body0 * libgnat/s-imglli.ads: Instantiate System.Image_I. * libgnat/s-imglli.adb: Add pragma No_Body. * libgnat/s-imglllb.ads: Instantiate System.Image_B. * libgnat/s-imgllli.ads: Instantiate System.Image_I. * libgnat/s-imglllu.ads: Instantiate System.Image_U. * libgnat/s-imglllw.ads: Instantiate System.Image_W. * libgnat/s-imgllu.ads: Instantiate System.Image_U. * libgnat/s-imgllu.adb: Add pragma No_Body. * libgnat/s-imgllw.ads: Instantiate System.Image_W. * libgnat/s-imgllw.adb: Add pragma No_Body. * libgnat/s-imgrea.adb: Remove clauses for System.Unsigned_Types. * libgnat/s-imguns.ads: Instantiate System.Image_U. * libgnat/s-imguns.adb: Add pragma No_Body. * libgnat/s-imgwiu.ads: Instantiate System.Image_W. * libgnat/s-imgwiu.adb: Add pragma No_Body. * libgnat/s-putima.ads (Long_Long_Long_Unsigned): New subtype. (Put_Image_Long_Long_Long_Unsigned): New procedure. * libgnat/s-putima.adb (Small): Rename to Integer_Images. (Large): Rename to LL_Integer_Images. (LLL_Integer_Images): New instantiation. (Put_Image_Long_Long_Long_Integer): New renaming. (Put_Image_Long_Long_Long_Unsigned): Likewise. * libgnat/s-valint.ads: Instantiate System.Value_I. * libgnat/s-valint.adb: Add pragma No_Body. * libgnat/s-vallli.ads: Instantiate System.Value_I. * libgnat/s-vallli.adb: Add pragma No_Body. * libgnat/s-valllli.ads: Instantiate System.Value_I. * libgnat/s-vallllu.ads: Instantiate System.Value_U. * libgnat/s-valllu.ads: Instantiate System.Value_U. * libgnat/s-valllu.adb: Add pragma No_Body. * libgnat/s-valuei.ads, libgnat/s-valuei.adb: New generic package. * libgnat/s-valueu.ads, libgnat/s-valueu.adb: Likewise. * libgnat/s-valuns.ads: Instantiate System.Value_U. * libgnat/s-valuns.adb: Add pragma No_Body. * libgnat/s-widint.ads: Instantiate System.Width_I. * libgnat/s-widlli.ads: Likewise. * libgnat/s-widlli.adb: Add pragma No_Body. * libgnat/s-widllli.ads: Instantiate System.Width_I. * libgnat/s-widlllu.ads: Instantiate System.Width_U. * libgnat/s-widllu.ads: Likewise. * libgnat/s-widllu.adb: Add pragma No_Body. * libgnat/s-widthi.ads, libgnat/s-widthi.adb: New generic package. * libgnat/s-widthu.ads, libgnat/s-widthu.adb: Likewise. * libgnat/s-widuns.ads: Instantiate System.Width_U.
2020-10-21[Ada] Work around missing Long_Long_Long_Size entry in .atp fileEric Botcazou1-3/+10
gcc/ada/ * set_targ.adb (DTN): Fix oversight. (Read_Target_Dependent_Values): Do not error out on missing Long_Long_Long_Size entry and reuse Long_Long_Size for it.
2020-10-21[Ada] Fix analysis of iterated component expression with null rangePiotr Trojanek1-1/+25
gcc/ada/ * exp_aggr.adb (Gen_Loop): Analyze copy of the expression in the scope of the implicit loop with name of the index parameter visible.
2020-10-21[Ada] Basic support for 128-bit typesEric Botcazou208-1181/+21014
gcc/ada/ * Makefile.rtl (GNATRTL_128BIT_PAIRS): New variable. (GNATRTL_128BIT_OBJS): Likewise. (Windows): In 64-bit mode, add the former to LIBGNAT_TARGET_PAIRS and the latter to EXTRA_GNATRTL_NONTASKING_OBJS. (x86_64/linux): Likewise, but unconditionally. (GNATRTL_NONTASKING_OBJS): Add s-aridou, s-exponn, s-expont, s-exponu. * ada_get_targ.adb (Get_Long_Long_Long_Size): New function. * checks.adb (Apply_Arithmetic_Overflow_Strict): Use Integer_Type_For to find an appropriate integer type; if it does not exist and the max integer size is larger than 64, use the 128-bit arithmetic routines. * cstand.adb (Create_Standard): Build Standard_Long_Long_Long_Integer and its base type. Use it for Etype of Any_Integer, Any_Modular and Any_Numeric. Use its size for Build Standard_Long_Long_Long_Unsigned and Universal_Integer. (Print_Standard): Print Long_Long_Long_Integer. * exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_Mod>: Adjust comment. * exp_ch3.adb (Simple_Init_Initialize_Scalars_Type): Deal with 128-bit types. * exp_ch4.adb (Expand_Array_Comparison): Likewise. (Expand_N_Op_Expon): Likewise. (Narrow_Large_Operation): Likewise. * exp_dbug.adb (Bounds_Match_Size): Handle 128-bit size. * exp_fixd.adb (Build_Double_Divide_Code): Use RE_Double_Divide64. * exp_intr.adb (Expand_Binary_Operator_Call): Handle 128-bit size. * exp_pakd.ads (E_Array): Extend range to 127. (Bits_Id): Fill in up to 127. (Get_Id): Likewise. (GetU_Id): Likewise. (Set_Id): Likewise. (SetU_Id): Likewise. * exp_pakd.adb (Revert_Storage_Order): Handle 128-bit size. * exp_util.adb (Integer_Type_For): Likewise. (Small_Integer_Type_For): Likewise. * fname.adb (Is_Predefined_File_Name): Do not return False for names larger than 12 characters if they start with "s-". * freeze.adb (Adjust_Esize_For_Alignment): Change the maximum value to System_Max_Integer_Size. (Check_Suspicious_Modulus): Adjust comment. (Freeze_Entity): Likewise. * get_targ.ads (Get_Long_Long_Long_Size): New function. * get_targ.adb (Get_Long_Long_Long_Size): Likewise. (Width_From_Size): Deal with 128-bit size. * gnat1drv.adb (Adjust_Global_Switches): Deal with 128-bit types. * impunit.adb (Get_Kind_Of_File): Bump buffer size. Accept files with 13 characters if they start with 's'. Compare slice of Buffer. (Not_Impl_Defined_Unit): Accept files with 13 characters if they start with 's'. * krunch.ads: Document length for 128-bit support units. * krunch.adb (Krunch): Set length to 9 for 128-bit support units. * layout.adb (Layout_Type): Use System_Max_Integer_Size as alignment limit. * rtsfind.ads (RTU_Id): Add System_Arith_128, System_Compare_Array_Signed_128, System_Compare_Array_Unsigned_128, System_Exn_LLLI, System_Exp_LLLU, System_Pack_[65..127]. (RE_Id): Add RE_Integer_128, RE_Unsigned_128, RE_Add_With_Ovflo_Check128 RE_Multiply_With_Ovflo_Check128, RE_Subtract_With_Ovflo_Check128, RE_Bswap_128, RE_Compare_Array_S128, RE_Compare_Array_U128, RE_Exn_Long_Long_Long_Integer, RE_Exp_Long_Long_Long_Integer, RE_Exp_Long_Long_Long_Unsigned, RE_Bits_[65-127], RE_Get_[65-127], RE_Set_[65-127], RE_IS_Is16, RE_IS_Iu16, RE_Integer_128 and RE_Unsigned_128. Rename RE_Add_With_Ovflo_Check, RE_Double_Divide, RE_Multiply_With_Ovflo_Check, RE_Scaled_Divide and RE_Subtract_With_Ovflo_Check. Remove RE_IS_Iz1, RE_IS_Iz2, RE_IS_Iz4, RE_IS_Iz8, RE_Long_Unsigned, RE_Short_Unsigned, RE_Short_Short_Unsigned (RE_Unit_Table): Likewise. * sem_aux.adb (Corresponding_Unsigned_Type): Deal with a size equal to that of Standard_Long_Long_Long_Integer. (First_Subtype): Deal with Standard_Long_Long_Long_Integer'Base. * sem_ch13.adb (Analyze_Attribute_Definition_Clause) <Attribute_Size>: Check the size against powers of 2 and System_Max_Integer_Size for objects as well. (Set_Enum_Esize): Deal with 128-bit bounds. * sem_ch3.adb (Set_Modular_Size): Handle 128-bit size. (Modular_Type_Declaration): Deal with 128-bit types. (Signed_Integer_Type_Declaration): Support derivation from Standard_Long_Long_Long_Integer. * sem_ch4.adb (Analyze_Mod): Handle 128-bit modulus. * sem_intr.adb: Add with and use clauses for Ttypes. (Check_Shift): Handle 128-bit size and modulus. * sem_prag.adb (Analyze_Pragma) <Pragma_Initialize_Scalars>: Deal with Signed_128 and Unsigned_128. (Analyze_Integer_Value): Handle 128-bit size. * sem_util.ads (Addressable): Adjust description. * sem_util.adb (Addressable): Return true for 128 if the system supports 128 bits. (Set_Invalid_Binder_Values): Deal with Signed_128 and Unsigned_128. * set_targ.ads (Long_Long_Long_Size): New variable. * set_targ.adb (S_Long_Long_Long_Size): New constant. (DTN): Add entry for S_Long_Long_Long_Size. (DTV): Add entry for Long_Long_Long_Size. (Set_Targ): Set Long_Long_Long_Size. * snames.ads-tmpl (Name_Max_Integer_Size): New attribute name. (Name_Signed_128): New scalar name. (Name_Unsigned_128): Likewise. (Scalar_Id): Adjust. (Integer_Scalar_Id): Likewise. (Attribute_Id): Add Attribute_Max_Integer_Size. * stand.ads (Standard_Entity_Type): Add S_Long_Long_Long_Integer. (Standard_Long_Long_Long_Integer): New renaming. (Universal_Integer): Adjust description. (Standard_Long_Long_Long_Unsigned): New variable. * switch-c.adb (Scan_Front_End_Switches): Deal with -gnate128. * ttypes.ads (Standard_Long_Long_Long_Integer_Size): New variable. (Standard_Long_Long_Long_Integer_Width): Likewise. (System_Max_Integer_Size): Turn into variable. (System_Max_Binary_Modulus_Power): Likewise. * uintp.ads (Uint_127): New constant. * uintp.adb (UI_Power_2): Extednd to 128. (UI_Power_10): Likewise. (UI_Expon): Deal with exponent up to 128 specially. * usage.adb (Write_Switch_Char): Print -gnate128 switch. * libgnat/a-tifiio.adb (Put_Scaled): Call Scaled_Divide64. * libgnat/interfac__2020.ads (Integer_128): New integer type. (Unsigned_128): New modular type. (Shift_Left, Shift_Right, Shift_Right_Arithmetic, Rotate_Left, Rotate_Right): New intrinsic functions operating on it. * libgnat/s-aridou.ads, libgnat/s-aridou.adb: New generic package. * libgnat/s-arit64.ads, libgnat/s-arit64.adb: Instantiate System.Arithmetic_Double. * libgnat/s-arit128.ads, libgnat/s-arit128.adb: Likewise. * libgnat/s-bytswa.ads: Add with clause for Interfaces, use subtypes of unsigned types defined in Interfaces and add Bswap_128. * libgnat/s-casi128.ads, libgnat/s-casi128.adb: New package. * libgnat/s-caun128.ads, libgnat/s-caun128.adb: Likewise. * libgnat/s-exnint.ads: Instantiate System.Exponn. * libgnat/s-exnint.adb: Add pragma No_Body. * libgnat/s-exnlli.ads: Instantiate System.Exponn. * libgnat/s-exnlli.adb: Add pragma No_Body. * libgnat/s-exnllli.ads: Instantiate System.Exponn. * libgnat/s-expint.ads: Likewise. * libgnat/s-expint.adb: Add pragma No_Body. * libgnat/s-explli.ads: Instantiate System.Exponn. * libgnat/s-explli.adb: Add pragma No_Body. * libgnat/s-expllli.ads: Instantiate System.Exponn. * libgnat/s-explllu.ads: Instantiate System.Exponu. * libgnat/s-expllu.ads: Likewise. * libgnat/s-expllu.adb: Add pragma No_Body. * libgnat/s-exponn.ads, libgnat/s-exponn.adb: New generic function. * libgnat/s-expont.ads, libgnat/s-expont.adb: Likewise. * libgnat/s-exponu.ads, libgnat/s-exponu.adb: Likewise. * libgnat/s-expuns.ads, libgnat/s-expuns.adb: Likewise. * libgnat/s-pack65.ads, libgnat/s-pack65.adb: New package. * libgnat/s-pack66.ads, libgnat/s-pack66.adb: New package. * libgnat/s-pack67.ads, libgnat/s-pack67.adb: New package. * libgnat/s-pack68.ads, libgnat/s-pack68.adb: New package. * libgnat/s-pack69.ads, libgnat/s-pack69.adb: New package. * libgnat/s-pack70.ads, libgnat/s-pack70.adb: New package. * libgnat/s-pack71.ads, libgnat/s-pack71.adb: New package. * libgnat/s-pack72.ads, libgnat/s-pack72.adb: New package. * libgnat/s-pack73.ads, libgnat/s-pack73.adb: New package. * libgnat/s-pack74.ads, libgnat/s-pack74.adb: New package. * libgnat/s-pack75.ads, libgnat/s-pack75.adb: New package. * libgnat/s-pack76.ads, libgnat/s-pack76.adb: New package. * libgnat/s-pack77.ads, libgnat/s-pack77.adb: New package. * libgnat/s-pack78.ads, libgnat/s-pack78.adb: New package. * libgnat/s-pack79.ads, libgnat/s-pack79.adb: New package. * libgnat/s-pack80.ads, libgnat/s-pack80.adb: New package. * libgnat/s-pack81.ads, libgnat/s-pack81.adb: New package. * libgnat/s-pack82.ads, libgnat/s-pack82.adb: New package. * libgnat/s-pack83.ads, libgnat/s-pack83.adb: New package. * libgnat/s-pack84.ads, libgnat/s-pack84.adb: New package. * libgnat/s-pack85.ads, libgnat/s-pack85.adb: New package. * libgnat/s-pack86.ads, libgnat/s-pack86.adb: New package. * libgnat/s-pack87.ads, libgnat/s-pack87.adb: New package. * libgnat/s-pack88.ads, libgnat/s-pack88.adb: New package. * libgnat/s-pack89.ads, libgnat/s-pack89.adb: New package. * libgnat/s-pack90.ads, libgnat/s-pack90.adb: New package. * libgnat/s-pack91.ads, libgnat/s-pack91.adb: New package. * libgnat/s-pack92.ads, libgnat/s-pack92.adb: New package. * libgnat/s-pack93.ads, libgnat/s-pack93.adb: New package. * libgnat/s-pack94.ads, libgnat/s-pack94.adb: New package. * libgnat/s-pack95.ads, libgnat/s-pack95.adb: New package. * libgnat/s-pack96.ads, libgnat/s-pack96.adb: New package. * libgnat/s-pack97.ads, libgnat/s-pack97.adb: New package. * libgnat/s-pack98.ads, libgnat/s-pack98.adb: New package. * libgnat/s-pack99.ads, libgnat/s-pack99.adb: New package. * libgnat/s-pack100.ads, libgnat/s-pack100.adb: New package. * libgnat/s-pack101.ads, libgnat/s-pack101.adb: New package. * libgnat/s-pack102.ads, libgnat/s-pack102.adb: New package. * libgnat/s-pack103.ads, libgnat/s-pack103.adb: New package. * libgnat/s-pack104.ads, libgnat/s-pack104.adb: New package. * libgnat/s-pack105.ads, libgnat/s-pack105.adb: New package. * libgnat/s-pack106.ads, libgnat/s-pack106.adb: New package. * libgnat/s-pack107.ads, libgnat/s-pack107.adb: New package. * libgnat/s-pack108.ads, libgnat/s-pack108.adb: New package. * libgnat/s-pack109.ads, libgnat/s-pack109.adb: New package. * libgnat/s-pack110.ads, libgnat/s-pack110.adb: New package. * libgnat/s-pack111.ads, libgnat/s-pack111.adb: New package. * libgnat/s-pack112.ads, libgnat/s-pack112.adb: New package. * libgnat/s-pack113.ads, libgnat/s-pack113.adb: New package. * libgnat/s-pack114.ads, libgnat/s-pack114.adb: New package. * libgnat/s-pack115.ads, libgnat/s-pack115.adb: New package. * libgnat/s-pack116.ads, libgnat/s-pack116.adb: New package. * libgnat/s-pack117.ads, libgnat/s-pack117.adb: New package. * libgnat/s-pack118.ads, libgnat/s-pack118.adb: New package. * libgnat/s-pack119.ads, libgnat/s-pack119.adb: New package. * libgnat/s-pack120.ads, libgnat/s-pack120.adb: New package. * libgnat/s-pack121.ads, libgnat/s-pack121.adb: New package. * libgnat/s-pack122.ads, libgnat/s-pack122.adb: New package. * libgnat/s-pack123.ads, libgnat/s-pack123.adb: New package. * libgnat/s-pack124.ads, libgnat/s-pack124.adb: New package. * libgnat/s-pack125.ads, libgnat/s-pack125.adb: New package. * libgnat/s-pack126.ads, libgnat/s-pack126.adb: New package. * libgnat/s-pack127.ads, libgnat/s-pack127.adb: New package. * libgnat/s-rannum.ads (Random): New function returning 128-bit. * libgnat/s-rannum.adb (Random): Implement it. * libgnat/s-scaval.ads: Add with clause for Interfaces, use subtypes of unsigned types defined in Interfaces. * libgnat/s-scaval.adb: Add use clause for Interfaces. * libgnat/s-scaval__128.ads, libgnat/s-scaval__128.adb: New package. * libgnat/s-unstyp.ads (Long_Long_Long_Unsigned): New modular type. (Shift_Left, Shift_Right, Shift_Right_Arithmetic, Rotate_Left, Rotate_Right): New intrinsic functions operating on it. gcc/testsuite/ * gnat.dg/multfixed.adb: Update expected exception message.
2020-10-21[Ada] Document Long_Long_Long_Integer in implementation characteristicsEric Botcazou2-19/+30
gcc/ada/ * doc/gnat_rm/implementation_defined_characteristics.rst: Add Long_Long_Long_Integer to the list of predefined integer types. * gnat_rm.texi: Regenerate.
2020-10-21[Ada] Fix target configuration file used for CodePeer/SPARK for new intsYannick Moy1-23/+24
gcc/ada/ * ada_get_targ.adb (Width_From_Size): Add case for 128 bits. Reorder declarations in the same order as get_targ.adb to facilitate diffs.
2020-10-21[Ada] Refactor repeated calls to Etype in aggregate expansionPiotr Trojanek1-9/+9
gcc/ada/ * exp_aggr.adb (Expand_N_Aggregate): Refactor repeated calls to Etype (N). (Build_Array_Aggr_Code): Fix whitespace.
2020-10-21[Ada] Fix bootstrap with old GCCDmitriy Anisimkov1-1/+11
gcc/ada/ * adaint.c (__gnat_file_time): Use regular arithmetic instead of __builtin_*_overflow routines if GCC version 4 or less and compiler is g++.
2020-10-21[Ada] Fix crash on illegal OTHERS in iterated_component_associationPiotr Trojanek1-1/+1
gcc/ada/ * sem_aggr.adb (Resolve_Array_Aggregate): Use Choice_List, which internally calls either Choice or Discrete_Choices, depending on the context.
2020-10-21[Ada] Use index parameter for iterated_component_associationPiotr Trojanek1-7/+2
gcc/ada/ * sem_aggr.adb (Resolve_Iterated_Component_Association): Use existing defining identifier for index parameter.
2020-10-21[Ada] Wrong detection of potentially blocking call in protected objectJavier Miranda1-0/+12
gcc/ada/ * exp_ch9.adb (Build_Task_Activation_Call): Do not generate a call to activate tasks if we are within the scope of a protected type and pragma Detect_Blocking is active.
2020-10-21[Ada] Codepeer remarks take into accountLiaiss Merzougue14-16/+229
gcc/ada/ * libgnat/s-carsi8.adb (Compare_Array_S8): Add pragma Assert to avoid warning concerning Left_Len and RighLen value regarding Bytes_Compared_As_Words. * libgnat/s-carun8.adb (Compare_Array_U8): Likewise. * libgnat/s-geveop.adb (Binary_Operation, Unary_Operation): Add pragma Assert concerning divide by 0 warning. * libgnat/s-imgcha.adb (Image_Character): Code update to prevent constant operation warning. (Image_Character): Add pragma Assert concerning the unchecked String size. * libgnat/s-imgdec.adb (Round): Upate loop code to prevent warning concerning Digs'First access. (Round): Add pragma assert. (Set): Add pragma Assert for the unchecked string size. (Set_Digits): Add pragma Assert for the input range. (Set_Decimal_Digits): Add pragma Assert. (Set_Blank_And_Sign): Add pragma Assert for the input range. * libgnat/s-arit64.adb (DoubleDivide): Add pragma Assert concerning Du /= 0. (Multiply_With_Ovflo_Check): Add pragma Annotate to avoid warning concerning unsigned -> signed conversion. * libgnat/s-imguns.adb (Set_Image_Unsigned): Add pragma Assert to prevent overflow check warning. Add pragma Assert for controlling S'First = 1. * libgnat/s-imgrea.adb (Image_Floating_Point, Set, Set_Digs, Set_Special_Fill, Convert_Integer): Add pragma Annotate to prevent overflow check warning. (Set_Image_Real): Add pragma Annotate to avoid dead code warning on float check. Add pragma Assert to prevent overflow check warning. * libgnat/s-imgwiu.adb (Set_Digits, Set_Image_Width_Unsigned): Add pragma assert to prevent overflow check warning. * libgnat/s-imgllu.adb (Set_Image_Long_Long_Unsigned): Add pragma assert to prevent overflow check warning. * libgnat/s-imgint.adb (Set_Digits): Add Assert for input constraint and to prevent overflow check warning, create Non_Positive subtype, and change the T parameter as Non_Positive instead Integer. (Set_Image_Integer): Add pragma assert to prevent overflow check warning. * libgnat/s-imglli.adb (Set_Digits): Add Assert for input constraint and to prevent overflow check warning, create Non_Positive subtype, and change the T parameter as Non_Positive instead Integer. (Set_Image_Long_Long_Integer): Add pragma assert to prevent overflow check warning. * libgnat/s-fatgen.adb (Decompose, Pred, Succ): Add pragma Annotate to prevent dead code due to invalid float check. * libgnat/s-imenne.adb (Image_Enumeration_8, Image_Enumeration_16, Image_Enumeration_32): Add pragma Assert to prevent overflow check warning. Add Names_Index subtype for restricting Index_table content.
2020-10-21[Ada] Compiler crash on prefixed call to controlled function with invariant ↵Gary Dismukes1-0/+3
check gcc/ada/ * exp_ch6.adb (Insert_Post_Call_Actions): Test for N_Explicit_Dereference as part of the existing test for function calls.
2020-10-21[Ada] Fix bogus error for bit-packed array with volatile componentEric Botcazou1-1/+4
gcc/ada/ * freeze.adb (Check_Strict_Alignment): Do not set the flag for a bit-packed array type, even if it is a by-reference type.
2020-10-21[Ada] Improve precision of Ada.Directories.Modification_TimeDmitriy Anisimkov2-24/+115
gcc/ada/ * adaint.c (__gnat_file_time): New routine. (__gnat_copy_attribs): Copy timestamps in nanoseconds. * libgnat/a-direct.adb (C_Modification_Time): Bind to __gnat_file_time. (Modification_Time): Call to C_Modification_Time.
2020-10-21[Ada] Fix crash with iterated_component_association and -gnatcPiotr Trojanek1-1/+7
gcc/ada/ * sem_aggr.adb (Resolve_Iterated_Component_Association): Expression's copy and now has the same parent as the original expression. (Resolve_Array_Aggregate): Add ??? comment about a still existing minor issue that led to discovery of the above crash.
2020-10-21[Ada] Spurious error in current instance used as formal packageJavier Miranda1-132/+90
gcc/ada/ * sem_ch12.adb (Install_Parents_Of_Generic_Context): Simplify functionality; collect and install parents of generic child package. (Remove_Parents_Of_Generic_Context): Code cleanup. (Instantiate_Package_Body): Hide parents of generic context from visibility before installing the parent instance; restore their visibility when the instance is analyzed