Age | Commit message (Collapse) | Author | Files | Lines |
|
gcc/analyzer/ChangeLog:
PR analyzer/97489
* engine.cc (exploded_graph::add_function_entry): Assert that we
have a function body.
(exploded_graph::on_escaped_function): Reject fndecls that don't
have a function body.
gcc/testsuite/ChangeLog:
PR analyzer/97489
* g++.dg/analyzer/pr97489.C: New test.
|
|
|
|
gcc/ChangeLog:
2020-05-18 Martin Liska <mliska@suse.cz>
PR c/94722
* cfgexpand.c (stack_protect_decl_phase):
Guard with lookup_attribute("no_stack_protector") at
various places.
(expand_used_vars): Likewise here.
* doc/extend.texi: Document no_stack_protector attribute.
gcc/ada/ChangeLog:
2020-05-18 Martin Liska <mliska@suse.cz>
PR c/94722
* gcc-interface/utils.c (handle_no_stack_protect_attribute):
New.
(handle_stack_protect_attribute): Add error message for a
no_stack_protector function.
gcc/c-family/ChangeLog:
2020-05-18 Martin Liska <mliska@suse.cz>
PR c/94722
* c-attribs.c (handle_no_stack_protect_function_attribute): New.
(handle_stack_protect_attribute): Add error message for a
no_stack_protector function.
gcc/testsuite/ChangeLog:
2020-05-18 Martin Liska <mliska@suse.cz>
PR c/94722
* g++.dg/no-stack-protector-attr-2.C: New test.
* g++.dg/no-stack-protector-attr-3.C: New test.
* g++.dg/no-stack-protector-attr.C: New test.
|
|
gcc/ChangeLog:
2020-05-15 Martin Liska <mliska@suse.cz>
* cfgexpand.c: Move the enum to ...
* coretypes.h (enum stack_protector): ... here.
* function.c (assign_parm_adjust_stack_rtl): Use the stack_protector
enum.
gcc/c-family/ChangeLog:
2020-05-15 Martin Liska <mliska@suse.cz>
* c-cppbuiltin.c (c_cpp_builtins): Use the stack_protector enum.
|
|
- Support expansion operator (*) in the multilib config string.
- Motivation of this patch is reduce the complexity when we deal multilib with
sub-extension, expand the combinations by hand would be very painful and
error prone, no one deserve to experience this[1] again!
[1] https://github.com/sifive/freedom-tools/blob/f4d7facafb27d16125768c90ff1790c674e4be7a/Makefile#L348
gcc/ChangeLog:
* config/riscv/multilib-generator: Add TODO, import itertools
and functools.reduce.
Handle expantion operator.
(LONG_EXT_PREFIXES): New.
(arch_canonicalize): Update comment and improve python3
debuggability/compatibility.
(add_underline_prefix): New.
(_expand_combination): Ditto.
(unique): Ditto.
(expand_combination): Ditto.
|
|
> this broke sparc-sun-solaris2.11 bootstrap
>
> /vol/gcc/src/hg/master/local/gcc/tree-ssa-phiopt.c: In function 'bool cond_removal_in_popcount_clz_ctz_pattern(basic_block, basic_block, edge, edge, gimple*, tree, tree)':
> /vol/gcc/src/hg/master/local/gcc/tree-ssa-phiopt.c:1858:27: error: variable 'mode' set but not used [-Werror=unused-but-set-variable]
> 1858 | scalar_int_mode mode = SCALAR_INT_TYPE_MODE (TREE_TYPE (arg));
> | ^~~~
>
>
> and doubtlessly several other targets that use the defaults.h definition of
>
> #define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) 0
Ugh, seems many of those macros do not evaluate the first argument.
This got broken by the change to direct_internal_fn_supported_p, previously
it used mode also in the optab test.
2020-10-22 Jakub Jelinek <jakub@redhat.com>
* tree-ssa-phiopt.c (cond_removal_in_popcount_clz_ctz_pattern):
For CLZ and CTZ tests, use type temporary instead of mode.
|
|
> + {"x86-64", PROCESSOR_K8, CPU_K8, PTA_X86_64_BASELINE, 0, P_NONE},
> + {"x86-64-v2", PROCESSOR_K8, CPU_GENERIC, PTA_X86_64_V2 | PTA_NO_TUNE,
> + 0, P_NONE},
> + {"x86-64-v3", PROCESSOR_K8, CPU_GENERIC, PTA_X86_64_V3 | PTA_NO_TUNE,
> + 0, P_NONE},
> + {"x86-64-v4", PROCESSOR_K8, CPU_GENERIC, PTA_X86_64_V4 | PTA_NO_TUNE,
> + 0, P_NONE},
> {"eden-x2", PROCESSOR_K8, CPU_K8,
> PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_FXSR,
> 0, P_NONE},
I have noticed that one can't configure gcc to default to these.
I've also found various other 32-bit or 64-bit -march= arguments for which
it wasn't possible to configure gcc to default to those.
The x86-64-v* the patch only allows in --with-arch_64=, because otherwise
it fails build miserably - as
./xgcc -B ./ -S -march=x86-64-v2 -m32 test.c
cc1: error: ‘x86-64-v2’ architecture level is only defined for the x86-64 psABI
when building 32-bit multilibs. Even if multilibs are disallowed, I think
the compiler still supports -m32 and so --with-arch_64= seems to be the only
option in which we can support that.
2020-10-22 Jakub Jelinek <jakub@redhat.com>
* config.gcc (x86_archs): Add samuel-2, nehemiah, c7 and esther.
(x86_64_archs): Add eden-x2, nano, nano-1000, nano-2000, nano-3000,
nano-x2, eden-x4, nano-x4, x86-64-v2, x86-64-v3 and x86-64-v4.
(i[34567]86-*-* | x86_64-*-*): Only allow x86-64-v* as argument
to --with-arch_64=.
|
|
Its libc does not offer *f or *l elementary functions, so rely on the
C double ones only.
for gcc/ada/ChangeLog
* Makefile.rtl (LIBGNAT_TARGET_PAIRS) <lynxos178>: Rely on
Aux_Long_Float for all real types.
|
|
Some acats-4 tests that check the precision of Float elementary
functions fail with vxworks 7.2's implementations of single-precision
math functions.
This patch arranges for us to bypass the single-precision functions,
and use the Aux_Long_Float implementation, based on the double-typed
calls from the C library, for Float and Short_Float.
for gcc/ada/ChangeLog
* Makefile.rtl (LIBGNAT_TARGET_PAIRS): Use Long Float-based
variant of Aux_Short_Float and Aux_Float on vxworks targets.
* libgnat/a-nashfl__wraplf.ads: New.
* libgnat/a-nuaufl__wraplf.ads: New.
|
|
Like aarch64-* and ppc*-linux-gnu, sparc*-sun-solaris has
Long_Long_Float mapped to double rather than long double, so the
intrinsics in the default version of a-nallfl.ads have mismatching
types. Adopt the wraplf workaround for it as well.
for gcc/ada/ChangeLog
* Makefile.rtl (LIBGNAT_TARGET_PAIRS) <sparc*-sun-solaris>:
Use wraplf version of a-nallfl.
|
|
Some platforms have failed to build because long long float is mapped
to double rather than long double, and then the attempts to import
intrinsics for long double in Aux_Long_Long_Float raise warnings
turned into errors.
This patch is a work around for the mismatch, arranging for
Aux_Long_Long_Float to map to Aux_Long_Float.
for gcc/ada/ChangeLog
* Makefile.rtl (LIBGNAT_TARGET_PAIRS): Use
a-nallfl__wraplf.ads on aarch64-* and ppc*-linux-gnu targets.
* libgnat/a-nallfl__wraplf.ads: New.
|
|
Only compile the __go_ptrace varargs shim on Linux to avoid compilation
failures on some other platforms. The C ptrace function is not entirely
portable (e.g., NetBSD has `int data` instead of `void* data`), and so
far Linux is the only platform that needs the varargs shim.
Additionally, make the types in the ptrace and raw_ptrace function
declarations match. This makes it more clear that the only difference
between the two is that calls via the former are allowed to block while
calls via the latter are not.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/263517
|
|
* ipa-pure-const.c (funct_state_summary_t::insert): Free stale
summaries.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
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
|
|
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>
|
|
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.
|
|
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.
|
|
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>
|
|
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.
|
|
gcc/fortran/
PR fortran/45516
* class.c: Add _deallocate to the vtable documentation
comment.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
gcc/testsuite/ChangeLog:
PR sanitizer/97414
* g++.dg/asan/pr97414.C: New test.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
gcc/ada/
* exp_aggr.adb (Expand_N_Aggregate): Refactor repeated calls to
Etype (N).
(Build_Array_Aggr_Code): Fix whitespace.
|
|
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++.
|
|
gcc/ada/
* sem_aggr.adb (Resolve_Array_Aggregate): Use Choice_List, which
internally calls either Choice or Discrete_Choices, depending on
the context.
|