Commit Graph

188831 Commits

Author SHA1 Message Date
Aldy Hernandez 401aaa5983 Add ability to use full resolving path solver in the backward threader.
The path solver runs in two modes: a quick mode which assumes any unknown
SSA names are VARYING, and a fully resolving mode using the ranger.

The backward threader currently uses the quick mode, because the fully
resolving mode was not available initially.  Since we now have the ability
in the solver (used by the hybrid threader), I thought it'd be useful to
have the knob for when the time comes.

Note that enabling the fully resolving mode will require some experimenting,
as enabling it would likely render other jump threading passes irrelevant
(VRP threading comes to mind).

There should be no functional changes as the resolver is set to false.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* tree-ssa-threadbackward.c (class back_threader): Add m_resolve.
	(back_threader::back_threader): Same.
	(back_threader::resolve_phi): Try to solve without looking back if
	possible.
	(back_threader::find_paths_to_names): Same.
	(try_thread_blocks): Pass resolve argument to back threader.
	(pass_early_thread_jumps::execute): Same.
2021-10-14 23:37:59 +02:00
Aldy Hernandez 0bd6879392 Cleanup --params for backward threader.
The new backward threader makes some of the --param knobs used to
control it questionable at best or no longer applicable at worst.

The fsm-maximum-phi-arguments param is unused and can be removed.

The max-fsm-thread-length param is block based which is a bit redundant,
since we already restrict paths based on instruction estimates.

The max-fsm-thread-paths restricts the total number of threadable paths
in a function.  We probably don't need this.  Besides, the forward
threader has no such restriction.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* doc/invoke.texi: Remove max-fsm-thread-length,
	max-fsm-thread-paths, and fsm-maximum-phi-arguments.
	* params.opt: Same.
	* tree-ssa-threadbackward.c (back_threader::back_threader): Remove
	argument.
	(back_threader_registry::back_threader_registry): Same.
	(back_threader_profitability::profitable_path_p): Remove
	param_max_fsm_thread-length.
	(back_threader_registry::register_path): Remove
	m_max_allowable_paths.
2021-10-14 23:37:59 +02:00
Aldy Hernandez d71e1be7c3 Minor cleanups to backward threader.
Tested on x86-64 Linux.

gcc/ChangeLog:

	* tree-ssa-threadbackward.c (class back_threader): Make m_imports
	an auto_bitmap.
	(back_threader::~back_threader): Do not release m_path.
2021-10-14 23:37:58 +02:00
Jonathan Wakely 4f87d4c5ae libstdc++: Simplify variant access functions
libstdc++-v3/ChangeLog:

	* include/std/variant (__variant::__get(in_place_index_t<N>, U&&)):
	Rename to __get_n and remove first argument. Replace pair of
	overloads with a single function using 'if constexpr'.
	(__variant::__get(Variant&&)): Adjust to use __get_n.
2021-10-14 22:19:38 +01:00
Jonathan Wakely 373acac1c8 libstdc++: Make filesystem::path(path&&) always noexcept
Since r12-4065 std::basic_string is always nothrow-move-constructible,
so filesystem::path is too.

That also means that path::_S_convert(T) is noexcept when returning its
argument, because T is either a basci_string or basic_string_view, and
will be moved into the return value.

libstdc++-v3/ChangeLog:

	* include/bits/fs_path.h (path(path&&)): Make unconditionally
	noexcept.
	(path::_S_convert(T)): Add condtional noexcept.
2021-10-14 22:19:38 +01:00
Joseph Myers 04a9b8d2f3 c-family: Support DFP printf/scanf formats for C2X
When I enabled various decimal floating-point features for C2X /
stopped them being diagnosed with -pedantic for C2X, I missed the
format checking support.  The DFP printf and scanf formats are
included in C2X.  Thus, adjust the data for those formats so that they
are no longer diagnosed with -std=c2x -Wformat -pedantic.

Bootstrapped with no regressions for x86_64-pc-linux-gnu.

gcc/c-family/
	* c-format.c (printf_length_specs, scanf_length_specs)
	(print_char_table, scan_char_table): Support DFP formats for C2X.
	* c-format.h (TEX_D32, TEX_D64, TEX_D128): Remove.
	(T2X_D32, T2X_D64, T2X_D128): New macros.

gcc/testsuite/
	* gcc.dg/format/c11-dfp-printf-1.c,
	gcc.dg/format/c11-dfp-scanf-1.c, gcc.dg/format/c2x-dfp-printf-1.c,
	gcc.dg/format/c2x-dfp-scanf-1.c: New tests.
2021-10-14 20:56:29 +00:00
Raphael Moreira Zinsly b7561b5d24 libgcc: Add a backchain fallback to _Unwind_Backtrace() on PowerPC
Without dwarf2 unwind tables available _Unwind_Backtrace() is not
able to return the full backtrace.
This patch adds a fallback function on powerpc to get the backtrace
by doing a backchain, this code was originally at glibc.

libgcc/ChangeLog:

	* config/rs6000/linux-unwind.h (struct rt_sigframe): Move it to
	outside of get_regs() in order to use it in another function, this
	is done twice: for __powerpc64__ and for !__powerpc64__.
	(struct trace_arg): New struct.
	(struct layout): New struct.
	(ppc_backchain_fallback): New function.
	* unwind.inc (_Unwind_Backtrace): Look for _URC_NORMAL_STOP code
	state and call MD_BACKCHAIN_FALLBACK.

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/unwind-backchain.c: New test.
2021-10-14 20:00:44 +00:00
Harald Anlauf b47490c572 Fortran: generate error message for negative elements in SHAPE array
gcc/fortran/ChangeLog:

	PR fortran/102717
	* simplify.c (gfc_simplify_reshape): Replace assert by error
	message for negative elements in SHAPE array.

gcc/testsuite/ChangeLog:

	PR fortran/102717
	* gfortran.dg/reshape_shape_2.f90: New test.
2021-10-14 20:19:50 +02:00
Harald Anlauf 1b115daf62 Fortran: fix order of checks for the SHAPE intrinsic
gcc/fortran/ChangeLog:

	PR fortran/102716
	* check.c (gfc_check_shape): Reorder checks so that invalid KIND
	arguments can be detected.

gcc/testsuite/ChangeLog:

	PR fortran/102716
	* gfortran.dg/shape_10.f90: New test.
2021-10-14 20:18:14 +02:00
Andrew MacLeod f0b7d4cc49 Simplification for right shift.
When the first operand of a signed right shift is zero or negative one, the
RHS doesn't matter and the shift can be converted to a copy.

	PR tree-optimization/102738
	gcc/
	* vr-values.c (simplify_using_ranges::simplify): Handle RSHIFT_EXPR.

	gcc/testsuite
	* gcc.dg/pr102738.c: New.
2021-10-14 13:56:37 -04:00
Kwok Cheung Yeung 2c4666fb06 openmp: Mark declare variant directive in documentation as supported in Fortran
2021-10-14  Kwok Cheung Yeung  <kcy@codesourcery.com>

libgomp/
	* libgomp.texi (OpenMP 5.0): Update entry for declare variant
	directive.
2021-10-14 09:35:33 -07:00
Luís Ferreira e19eea30d6 libiberty: d-demangle: Add test case for function literals
libiberty/ChangeLog:

	* testsuite/d-demangle-expected: Add test case for function literals.
2021-10-14 12:24:51 -04:00
Luís Ferreira 0555b86b5e libiberty: d-demangle: add test cases for simple special mangles
libiberty/ChangeLog:

	* testsuite/d-demangle-expected: Add test cases for simple special
	mangles.
2021-10-14 12:22:57 -04:00
Kwok Cheung Yeung 724ee5a009 openmp, fortran: Add support for OpenMP declare variant directive in Fortran
2021-10-14  Kwok Cheung Yeung  <kcy@codesourcery.com>

gcc/c-family/

	* c-omp.c (c_omp_check_context_selector): Rename to
	omp_check_context_selector and move to omp-general.c.
	(c_omp_mark_declare_variant): Rename to omp_mark_declare_variant and
	move to omp-general.c.

gcc/c/

	* c-parser.c (c_finish_omp_declare_variant): Change call from
	c_omp_check_context_selector to omp_check_context_selector. Change
	call from c_omp_mark_declare_variant to omp_mark_declare_variant.

gcc/cp/

	* decl.c (omp_declare_variant_finalize_one): Change call from
	c_omp_mark_declare_variant to omp_mark_declare_variant.
	* parser.c (cp_finish_omp_declare_variant): Change call from
	c_omp_check_context_selector to omp_check_context_selector.

gcc/fortran/

	* gfortran.h (enum gfc_statement): Add ST_OMP_DECLARE_VARIANT.
	(enum gfc_omp_trait_property_kind): New.
	(struct gfc_omp_trait_property): New.
	(gfc_get_omp_trait_property): New macro.
	(struct gfc_omp_selector): New.
	(gfc_get_omp_selector): New macro.
	(struct gfc_omp_set_selector): New.
	(gfc_get_omp_set_selector): New macro.
	(struct gfc_omp_declare_variant): New.
	(gfc_get_omp_declare_variant): New macro.
	(struct gfc_namespace): Add omp_declare_variant field.
	(gfc_free_omp_declare_variant_list): New prototype.
	* match.h (gfc_match_omp_declare_variant): New prototype.
	* openmp.c (gfc_free_omp_trait_property_list): New.
	(gfc_free_omp_selector_list): New.
	(gfc_free_omp_set_selector_list): New.
	(gfc_free_omp_declare_variant_list): New.
	(gfc_match_omp_clauses): Add extra optional argument.  Handle end of
	clauses for context selectors.
	(omp_construct_selectors, omp_device_selectors,
	omp_implementation_selectors, omp_user_selectors): New.
	(gfc_match_omp_context_selector): New.
	(gfc_match_omp_context_selector_specification): New.
	(gfc_match_omp_declare_variant): New.
	* parse.c: Include tree-core.h and omp-general.h.
	(decode_omp_directive): Handle 'declare variant'.
	(case_omp_decl): Include ST_OMP_DECLARE_VARIANT.
	(gfc_ascii_statement): Handle ST_OMP_DECLARE_VARIANT.
	(gfc_parse_file): Initialize omp_requires_mask.
	* symbol.c (gfc_free_namespace): Call
	gfc_free_omp_declare_variant_list.
	* trans-decl.c (gfc_get_extern_function_decl): Call
	gfc_trans_omp_declare_variant.
	(gfc_create_function_decl): Call gfc_trans_omp_declare_variant.
	* trans-openmp.c (gfc_trans_omp_declare_variant): New.
	* trans-stmt.h (gfc_trans_omp_declare_variant): New prototype.

gcc/

	* omp-general.c (omp_check_context_selector):  Move from c-omp.c.
	(omp_mark_declare_variant): Move from c-omp.c.
	(omp_context_name_list_prop): Update for Fortran strings.
	* omp-general.h (omp_check_context_selector): New prototype.
	(omp_mark_declare_variant): New prototype.

gcc/testsuite/

	* gfortran.dg/gomp/declare-variant-1.f90: New test.
	* gfortran.dg/gomp/declare-variant-10.f90: New test.
	* gfortran.dg/gomp/declare-variant-11.f90: New test.
	* gfortran.dg/gomp/declare-variant-12.f90: New test.
	* gfortran.dg/gomp/declare-variant-13.f90: New test.
	* gfortran.dg/gomp/declare-variant-14.f90: New test.
	* gfortran.dg/gomp/declare-variant-15.f90: New test.
	* gfortran.dg/gomp/declare-variant-16.f90: New test.
	* gfortran.dg/gomp/declare-variant-17.f90: New test.
	* gfortran.dg/gomp/declare-variant-18.f90: New test.
	* gfortran.dg/gomp/declare-variant-19.f90: New test.
	* gfortran.dg/gomp/declare-variant-2.f90: New test.
	* gfortran.dg/gomp/declare-variant-2a.f90: New test.
	* gfortran.dg/gomp/declare-variant-3.f90: New test.
	* gfortran.dg/gomp/declare-variant-4.f90: New test.
	* gfortran.dg/gomp/declare-variant-5.f90: New test.
	* gfortran.dg/gomp/declare-variant-6.f90: New test.
	* gfortran.dg/gomp/declare-variant-7.f90: New test.
	* gfortran.dg/gomp/declare-variant-8.f90: New test.
	* gfortran.dg/gomp/declare-variant-9.f90: New test.

libgomp/

	* testsuite/libgomp.fortran/declare-variant-1.f90: New test.
2021-10-14 09:16:36 -07:00
Richard Sandiford 73f34f4d02 rs6000: Fix memory leak in rs6000_density_test
rs6000_density_test has an early exit test between a call
to get_loop_body and the corresponding free.  This would
lead to a memory leak if the early exit is taken.

gcc/
	* config/rs6000/rs6000.c (rs6000_density_test): Move early
	exit test further up the function.
2021-10-14 16:35:42 +01:00
Richard Sandiford 1975395021 arm: Remove add_stmt_cost hook
The arm implementation of add_stmt_cost was added alongside
arm_builtin_vectorization_cost.  At that time it was necessary
to override the latter when overriding the former, since
default_add_stmt_cost didn't indirect through the
builtin_vectorization_cost target hook:

      int stmt_cost = default_builtin_vectorization_cost (kind, vectype,
                                                          misalign);

That was fixed by:

| 2014-06-06  Bingfeng Mei  <bmei@broadcom.com>
|
|      * targhooks.c (default_add_stmt_cost): Call target specific
|      hook instead of default one.

so the arm definition of add_stmt_cost is now equivalent
to the default.

gcc/
	* config/arm/arm.c (arm_add_stmt_cost): Delete.
	(TARGET_VECTORIZE_ADD_STMT_COST): Delete.
2021-10-14 16:35:41 +01:00
Martin Jambor aa62b199f1
Add forgotten documentation of param ipa-cp-recursive-freq-factor
Martin Liška has noticed that I forgot to document the recently added
parameter in the invoke.texi documentation.  This patch fixes it.

Tested by running make info and make pdf and examining the output.

gcc/ChangeLog:

2021-10-14  Martin Jambor  <mjambor@suse.cz>

	* doc/invoke.texi (Optimize Options): Add entry for
	ipa-cp-recursive-freq-factor.
2021-10-14 17:01:38 +02:00
Jeff Law 8ececf9b8c Fix mips testsuite fallout from vectorizer changes
gcc/testsuite
	* gcc.target/mips/msa-insert-split.c: Turn off vectorizer.
2021-10-14 10:49:05 -04:00
Jonathan Wakely 5e3f888389 libstdc++: Fix brainwrong in path::_S_convert(T) [PR102743]
This function was supposed to check whether the parameter's value type
is the same as path::value_type, and therefore needs no conversion.
Instead it checks whether the parameter is the same as its own value
type, which is never true. This means we incorrectly return a string
view for the case where T is path::string_type, instead of just
returning the string itself. The only place that happens is
path::_S_convert_loc for Windows, where we call _S_convert with a
std::wstring rvalue.

This fixes the condition in _S_convert(T).

libstdc++-v3/ChangeLog:

	PR libstdc++/102743
	* include/bits/fs_path.h (path::_S_convert(T)): Fix condition
	for returning the same string unchanged.
2021-10-14 15:12:34 +01:00
Jonathan Wakely 3d95867ce6 libstdc++: Use more descriptive feature test macro
The out-of-class definitions of the static constants are redundant if
the __cpp_inline_variables feature is supported, so use that macro to
decide whether to define them or not.

libstdc++-v3/ChangeLog:

	* include/bits/regex.h: Check __cpp_inline_variables instead of
	__cplusplus.
2021-10-14 15:12:33 +01:00
Tamar Christina 62b505a4d5 sve: optimize add reduction patterns
The following loop does a conditional reduction using an add:

#include <stdint.h>

int32_t f (int32_t *restrict array, int len, int min)
{
  int32_t iSum = 0;

  for (int i=0; i<len; i++) {
    if (array[i] >= min)
       iSum += array[i];
  }
  return iSum;
}

for this we currently generate:

        mov     z1.b, #0
        mov     z2.s, w2
        mov     z3.d, z1.d
        ptrue   p2.b, all
        ld1w    z0.s, p0/z, [x0, x3, lsl 2]
        cmpge   p1.s, p2/z, z0.s, z2.s
        add     x3, x3, x4
        sel     z0.s, p1, z0.s, z3.s
        add     z1.s, p0/m, z1.s, z0.s
        whilelo p0.s, w3, w1

where the SEL is unneeded as it's selecting between 0 or a value.  This can be
optimized to just doing the conditional add on p1 instead of p0.  After this
patch we generate:

        mov     z2.s, w2
        mov     z0.b, #0
        ptrue   p1.b, all
        ld1w    z1.s, p0/z, [x0, x3, lsl 2]
        cmpge   p0.s, p0/z, z1.s, z2.s
        add     x3, x3, x4
        add     z0.s, p0/m, z0.s, z1.s
        whilelo p0.s, w3, w1

and so we drop the SEL and the 0 move.

gcc/ChangeLog:

	* match.pd: New rule.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/sve/pred-cond-reduc.c: New test.
2021-10-14 15:07:14 +01:00
Jan Hubicka fecd145359 Fix ICE in insert_access.
gcc/ChangeLog:

	PR ipa/102557
	* ipa-modref-tree.h (modref_access_node::update2):
	Also check that parm_offset is unchanged.
	(modref_ref_node::insert_access): Fix updating of
	parameter.
2021-10-14 15:48:01 +02:00
Aldy Hernandez 27dea0b42c Add FIXME note to backward threader.
There's a limitation in the path discovery bits in the backward
threader that I ran into recently and I'd like to document it so we
don't lose track of it.

Basically we stop looking if we find a threadable path through a PHI,
without taking into account that there could be multiple
paths through a PHI that resolve the path.  For example:

	x_5 = PHI <10(4), 20(5), ...>
	if (x_5 > 5)

I don't remember how we ended up skipping this, but it could existing
behavior from the old bits.  It probably skipped multiple threads
through a PHI since the generic copier couldn't re-using existing
threading paths anyhow.

Documenting for later fixing.

gcc/ChangeLog:

	* tree-ssa-threadbackward.c (back_threader::resolve_phi): Add
	FIXME note.
2021-10-14 15:43:41 +02:00
Jeff Law ebdf180e15 Fix predcom-3.c on arc-elf after vectorizer changes
gcc/testsuite
	* gcc.dg/tree-ssa/predcom-3.c: Disable vectorizer.
2021-10-14 09:41:57 -04:00
Richard Biener 9b2ad21ab3 tree-optimization/102659 - really avoid undef overflow in if-conversion
This plugs the remaining hole of POINTER_PLUS_EXPR with undefined
overflow.  Unfortunately we have to go through some lengths to
not put invariant conversions into the loop body since that confuses
the vectorizers gather/scatter discovery which relies on identifying
an invariant component of plus and minus expressions.  We can
emit those in the loop preheader but then we have to accept that
being non-empty when looking for the LOOP_VECTORIZED internal
function call in the vectorizer.

2021-10-14  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/102659
	* tree-if-conv.c (if_convertible_gimple_assign_stmt_p): Also
	rewrite pointer typed undefined overflow operations.
	(predicate_statements): Likewise.  Make sure to emit invariant
	conversions in the preheader.
	* tree-vectorizer.c (vect_loop_vectorized_call): Look through
	non-empty preheaders.
	* tree-data-ref.c (dr_analyze_indices): Strip useless
	conversions to the MEM_REF base type.
2021-10-14 14:58:40 +02:00
Martin Liska 4cb52980e5 Eliminate AUTODETECT_VALUE usage in options.
gcc/ChangeLog:

	* common.opt: Stop using AUTODETECT_VALUE
	and use EnabledBy where possible.
	* opts.c: Enable OPT_fvar_tracking with optimize >= 1.
	* toplev.c (AUTODETECT_VALUE): Remove macro.
	(process_options): Simplify by using EnabledBy and
	OPT_fvar_tracking.  Use OPTION_SET_P macro instead of
	AUTODETECT_VALUE.
2021-10-14 14:47:01 +02:00
Jonathan Wright 6779e9ba2c aarch64: Fix pointer parameter type in LD1 Neon intrinsics
The pointer parameter to load a vector of signed values should itself
be a signed type. This patch fixes two instances of this unsigned-
signed implicit conversion in arm_neon.h.

gcc/ChangeLog:

2021-10-14  Jonathan Wright  <jonathan.wright@arm.com>

	* config/aarch64/arm_neon.h (vld1_s8_x3): Use signed type for
	pointer parameter.
	(vld1_s32_x3): Likewise.
2021-10-14 13:45:15 +01:00
Aldy Hernandez a311163fd8 Do not call range_on_path_entry for SSAs defined within the path
In the path solver, when requesting the range of an SSA for which we
know nothing, we ask the ranger for the range incoming to the path.
We do this by asking for all the incoming ranges to the path entry
block and unioning them.

The problem here is that we're asking for a range on path entry for an
SSA which *is* defined in the path, but for which we know nothing
about:

	some_global.1_2 = some_global;
	_3 = (char) some_global.1_2;

This request is causing us to ask for range_on_edge of _3 on the
incoming edges to the path.  This is a bit of nonsensical request
because _3 isn't live on entry to the path, so ranger correctly
returns UNDEFINED.  The proper thing is to avoid asking this in the
first place.

I have added a relevant assert, since it doesn't make sense to call
range_on_path_entry for SSAs defined within the path.

Tested on x86-64 Linux.

	PR tree-optimization/102736

gcc/ChangeLog:

	PR tree-optimization/102736
	* gimple-range-path.cc (path_range_query::range_on_path_entry):
	Assert that the requested range is defined outside the path.
	(path_range_query::ssa_range_in_phi): Do not call
	range_on_path_entry for SSA names that are defined within the
	path.

gcc/testsuite/ChangeLog:

	* gcc.dg/tree-ssa/pr102736.c: New test.
2021-10-14 14:23:00 +02:00
Iain Sandoe d67b22e731 Darwin: Update quotes in driver warning messages.
This adds some missing quotes around options and option argument
terms in warning messages.  Avoid contractions in warning
messages.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>

gcc/ChangeLog:

	* config/darwin-driver.c (darwin_find_version_from_kernel):
	Quote internal identifiers and avoid contractions in
	warnings.
	(darwin_default_min_version): Likewise.
	(darwin_driver_init): Likewise.
2021-10-14 13:19:46 +01:00
Martin Jambor ff2b92de13
ipa-cp: Propagation boost for recursion generated values
Recursive call graph edges, even when they are hot and important for
the compiled program, can never have frequency bigger than one, even
when the actual time savings in the next recursion call are not
realized just once but depend on the depth of recursion.  The current
IPA-CP effect propagation code did not take that into account and just
used the frequency, thus severely underestimating the effect.

This patch artificially boosts values taking part in such calls.  If a
value feeds into itself through a recursive call, the frequency of the
edge is multiplied by a parameter with default value of 6, basically
assuming that the recursion will take place 6 times.  This value can
of course be subject to change.

Moreover, values which do not feed into themselves but which were
generated for a self-recursive call with an arithmetic
pass-function (aka the 548.exchange "hack" which however is generally
applicable for recursive functions which count the recursion depth in
a parameter) have the edge frequency multiplied as many times as there
are generated values in the chain.  In essence, we will assume they
are all useful.

This patch partially fixes the current situation when we fail to
optimize 548.exchange with PGO.  In the benchmark one recursive edge
count overwhelmingly dominates all other counts in the program and so
we fail to perform the first cloning (for the nonrecursive entry call)
because it looks totally insignificant.

gcc/ChangeLog:

2021-07-16  Martin Jambor  <mjambor@suse.cz>

	* params.opt (ipa-cp-recursive-freq-factor): New.
	* ipa-cp.c (ipcp_value): Switch to inline initialization.  New members
	scc_no, self_recursion_generated_level, same_scc and
	self_recursion_generated_p.
	(ipcp_lattice::add_value): Replaced parameter unlimited with
	same_lat_gen_level, usit it determine limit of values and store it to
	the value.
	(ipcp_lattice<valtype>::print): Dump the new fileds.
	(allocate_and_init_ipcp_value): Take same_lat_gen_level as a new
	parameter and store it to the new value.
	(self_recursively_generated_p): Removed.
	(propagate_vals_across_arith_jfunc): Use self_recursion_generated_p
	instead of self_recursively_generated_p, store self generation level
	to such values.
	(value_topo_info<valtype>::add_val): Set scc_no.
	(value_topo_info<valtype>::propagate_effects): Multiply frequencies of
	recursively feeding values and self generated values by appropriate
	new factors.
2021-10-14 14:03:06 +02:00
Richard Sandiford f837785cc4 aarch64: Remove redundant flag_vect_cost_model test
The aarch64 version of add_stmt_cost has a redundant test
of flag_vect_cost_model.  The current structure was based
on the contemporaneous definition of default_add_stmt_cost,
but g:d6d1127249564146429009e0682f25bd58d7a791 later removed
the flag_vect_cost_model test from the default version.

gcc/
	* config/aarch64/aarch64.c (aarch64_add_stmt_cost): Remove
	redundant test for flag_vect_cost_model.
2021-10-14 11:57:51 +01:00
Aldy Hernandez 3d0a7271b3 Add debug helpers for auto_bitmap.
Using debug() on an auto_bitmap from gdb doesn't work because the
implicit conversion from auto_bitmap to bitmap_head doesn't work
from within a debugging session.  This patch adds the convenience
functions for auto_bitmap.

gcc/ChangeLog:

	* bitmap.c (debug): New overloaded function for auto_bitmaps.
	* bitmap.h (debug): Same.
2021-10-14 11:04:13 +02:00
Jonathan Wakely 6e3bfd60e8 libstdc++: Fix test for feature test macro
libstdc++-v3/ChangeLog:

	* testsuite/20_util/is_layout_compatible/version.cc: Check
	correct macro.
2021-10-14 09:08:01 +01:00
Jonathan Wakely 476f305b6c libstdc++: Add missing constexpr to std::optional (P2231R1)
This implements the changes in P2231R1 which make std::optional fully
constexpr in C++20.

libstdc++-v3/ChangeLog:

	* include/bits/stl_construct.h (_Construct): Use
	std::construct_at when constant evaluated.
	* include/std/optional (_Storage, _Optional_payload, optional):
	Add constexpr as specified by P2231R1.
	* include/std/version (__cpp_lib_optional): Update value for
	C++20.
	* testsuite/20_util/optional/requirements.cc: Check feature test
	macro.
	* testsuite/20_util/optional/constexpr/assign.cc: New test.
	* testsuite/20_util/optional/constexpr/cons/conv.cc: New test.
	* testsuite/20_util/optional/constexpr/modifiers.cc: New test.
	* testsuite/20_util/optional/constexpr/swap.cc: New test.
	* testsuite/20_util/optional/version.cc: New test.
2021-10-14 09:08:01 +01:00
Alexandre Oliva ee9fa8a579 [Ada] reenable ada83 library unit renaming error
for  gcc/ada/ChangeLog

	* par-ch10.adb (P_Compilation_Unit): Reenable ada83 library
	unit renaming test and error.
2021-10-14 01:49:44 -03:00
Hongyu Wang 2f9529fc62 AVX512FP16: Adjust builtin for mask complex fma
Current mask/mask3 implementation for complex fma contains
duplicated parameter in macro, which may cause error at -O0.
Refactor macro implementation to builtins to avoid potential
error.

For round intrinsic with NO_ROUND as input, ix86_erase_embedded_rounding
erases embedded_rounding upspec but could break other emit_insn in
expanders. Skip those expanders with multiple emit_insn for this
function and check rounding in expander with subst.

gcc/ChangeLog:

	* config/i386/avx512fp16intrin.h (_mm512_mask_fcmadd_pch):
	Adjust builtin call.
	(_mm512_mask3_fcmadd_pch): Likewise.
	(_mm512_mask_fmadd_pch): Likewise
	(_mm512_mask3_fmadd_pch): Likewise
	(_mm512_mask_fcmadd_round_pch): Likewise
	(_mm512_mask3_fcmadd_round_pch): Likewise
	(_mm512_mask_fmadd_round_pch): Likewise
	(_mm512_mask3_fmadd_round_pch): Likewise
	(_mm_mask_fcmadd_sch): Likewise
	(_mm_mask3_fcmadd_sch): Likewise
	(_mm_mask_fmadd_sch): Likewise
	(_mm_mask3_fmadd_sch): Likewise
	(_mm_mask_fcmadd_round_sch): Likewise
	(_mm_mask3_fcmadd_round_sch): Likewise
	(_mm_mask_fmadd_round_sch): Likewise
	(_mm_mask3_fmadd_round_sch): Likewise
	(_mm_fcmadd_round_sch): Likewise
	* config/i386/avx512fp16vlintrin.h (_mm_mask_fmadd_pch):
	Adjust builtin call.
	(_mm_mask3_fmadd_pch): Likewise
	(_mm256_mask_fmadd_pch): Likewise
	(_mm256_mask3_fmadd_pch): Likewise
	(_mm_mask_fcmadd_pch): Likewise
	(_mm_mask3_fcmadd_pch): Likewise
	(_mm256_mask_fcmadd_pch): Likewise
	(_mm256_mask3_fcmadd_pch): Likewise
	* config/i386/i386-builtin.def: Add mask3 builtin for complex
	fma, and adjust mask_builtin to corresponding expander.
	* config/i386/i386-expand.c (ix86_expand_round_builtin):
	Skip eraseing embedded rounding for expanders that emits
	multiple insns.
	* config/i386/sse.md (complexmove): New mode_attr.
	(<avx512>_fmaddc_<mode>_mask1<round_expand_name>): New expander.
	(<avx512>_fcmaddc_<mode>_mask1<round_expand_name>): Likewise.
	(avx512fp16_fmaddcsh_v8hf_mask1<round_expand_name>): Likewise.
	(avx512fp16_fcmaddcsh_v8hf_mask1<round_expand_name>): Likewise.
	(avx512fp16_fcmaddcsh_v8hf_mask3<round_expand_name>): Likewise.
	(avx512fp16_fmaddcsh_v8hf_mask3<round_expand_name>): Likewise.
	* config/i386/subst.md (round_embedded_complex): New subst.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx-1.c: Add new mask3 builtins.
	* gcc.target/i386/sse-13.c: Ditto.
	* gcc.target/i386/sse-23.c: Ditto.
	* gcc.target/i386/avx512fp16-vfcmaddcsh-1a.c: Add scanning for
	mask/mask3 intrinsic.
	* gcc.target/i386/avx512fp16-vfmaddcsh-1a.c: Ditto.
	* gcc.target/i386/avx512fp16-vfcmaddcsh-1c.c: New test for
	-mavx512vl.
	* gcc.target/i386/avx512fp16-vfmaddcsh-1c.c: Ditto.
2021-10-14 09:56:00 +08:00
liuhongt bd440a8c1c Adjust testcase for O2 vectorization[Wuninitialized]
It looks like it's just the the location of the warning that's off,
the warning itself is still issued but it's swallowed by the
dg-prune-output directive.

Since the test was added to verify the fix for an ICE without
vectorization I think disabling vectorization should be fine.
Ideally, we would understand why the location is wrong so let's keep
this bug open and add a comment to the test referencing this bug.

gcc/testsuite/ChangeLog:

	* g++.dg/warn/Wuninitialized-13.C: Add -fno-tree-vectorize.
2021-10-14 09:33:47 +08:00
John David Anglin 4728afb989 Fix TARGET_SOFT_FLOAT patterns in pa.md
2021-10-13  John David Anglin  <danglin@gcc.gnu.org>

gcc/ChangeLog:

	* config/pa/pa.md (cbranchsf4): Disable if TARGET_SOFT_FLOAT.
	(cbranchdf4): Likewise.
	Add missing move patterns for TARGET_SOFT_FLOAT.
2021-10-14 00:57:32 +00:00
GCC Administrator 9eb28a0f19 Daily bump. 2021-10-14 00:16:31 +00:00
Jonathan Wakely f874a13ca3 libstdc++: Fix regression in memory use when constructing paths
The changes in r12-4381 were intended to reduce memory usage, but
replacing the __contiguous constant in __string_from_range with the new
__is_contiguous variable template caused a regression. The old code
checked is_pointer_v<decltype(std::__niter_base(__first))> but he new
code just checks is_pointer_v<_InputIterator>. This means that we no
longer recognise basic_string::iterator and vector::iterator as
contiguous, and so return a temporary basic_string instead of a
basic_string_view. This only affects C++17 mode, because the
std::contiguous_iterator concept is used in C++20 which gives the right
answer for __normal_iterator (and more types as well).

The fix is to specialize the new __is_contiguous variable template so it
is true for __normal_iterator<T*, C> specializations. The new partial
specializations are defined for C++20 too, because it should be cheaper
to match the partial specialization than to check whether the
std::contiguous_iterator concept is satisfied.

libstdc++-v3/ChangeLog:

	* include/bits/fs_path.h (__detail::__is_contiguous): Add
	partial specializations for pointers and __normal_iterator.
2021-10-13 22:35:32 +01:00
Jonathan Wakely ce55693604 libstdc++: Rename files with the wrong extensions
libstdc++-v3/ChangeLog:

	* testsuite/27_io/filesystem/path/construct/102592.C: Moved to...
	* testsuite/27_io/filesystem/path/construct/102592.cc: ...here.
	* testsuite/28_regex/match_results/102667.C: Moved to...
	* testsuite/28_regex/match_results/102667.cc: ...here.
2021-10-13 22:35:14 +01:00
Jonathan Wakely b83b810ac4 libstdc++: Refactor filesystem::path encoding conversions
Adjust the __detail::__effective_range overloads so they always return a
string or string view using std::char_traits, because we don't care
about the traits of an incoming string.

Use std::contiguous_iterator in the __effective_range(const Source&)
overload, to allow returning a basic_string_view in more cases. For the
non-contiguous casecl in both __effective_range and __string_from_range,
return a std::string instead of std::u8string when the value type of the
range is char8_t.  These changes avoid unnecessary basic_string
temporaries.

Also simplify __string_from_range(Iter, Iter) to not need
std::__to_address for the contiguous case.

Combine the _S_convert(string_type) and _S_convert(const T&) overloads
into a single _S_convert(T) function which also avoids the dangling
view problem of PR 102592 (should that recur somehow).

libstdc++-v3/ChangeLog:

	* include/bits/fs_path.h (__detail::__is_contiguous): New
	variable template to identify contiguous iterators.
	(__detail::__unified_char8_t): New alias template to decide when
	to treat char8_t as char without encoding conversion.
	(__detail::__effective_range(const basic_string<C,T>&)): Use
	std::char_traits<C> for returned string view.
	(__detail::__effective_range(const basic_string_view<C,T>&)):
	Likewise.
	(__detail::__effective_range(const Source&)): Use
	__is_contiguous to detect mode cases of contiguous iterators.
	Use __unified_char8_t to return a std::string instead of
	std::u8string.
2021-10-13 20:36:51 +01:00
Jonathan Wakely 85b24e32dc libstdc++: Fix dangling string_view in filesystem::path [PR102592]
When creating a path from a pair of non-contiguous iterators we pass the
iterators to _S_convert(Iter, Iter). That function passes the iterators
to __string_from_range to get a contiguous sequence of characters, and
then calls _S_convert(const C*, const C*) to perform the encoding
conversions. If the value type, C, is char8_t, then no conversion is
needed and the _S_convert<char8_t>(const char8_t*, const char8_t*)
specialization casts the pointer to const char* and returns a
std::string_view that refs to the char8_t sequence. However, that
sequence is owned by the std::u8string rvalue returned by
__string_from_range, which goes out of scope when _S_convert(Iter, Iter)
returns. That means the std::string_view is dangling and we get
undefined behaviour when parsing it as a path.

The same problem does not exist for the path members taking a "Source"
argument, because those functions all convert a non-contiguous range
into a basic_string<C> immediately, using __effective_range(__source).
That means that the rvalue string returned by that function is still in
scope for the full expression, so the string_view does not dangle.

The solution for the buggy functions is to do the same thing, and call
__string_from_range immediately, so that the returned rvalue is still in
scope for the lifetime of the string_view returned by _S_convert. To
avoid reintroducing the same problem, remove the _S_convert(Iter, Iter)
overload that calls __string_from_range and returns a dangling view.

libstdc++-v3/ChangeLog:

	PR libstdc++/102592
	* include/bits/fs_path.h (path::path(Iter, Iter, format))
	(path::append(Iter, Iter), path::concat(Iter, Iter)): Call
	__string_from_range directly, instead of two-argument overload
	of _S_convert.
	(path::_S_convert(Iter, Iter)): Remove.
	* testsuite/27_io/filesystem/path/construct/102592.C: New test.
2021-10-13 20:36:51 +01:00
Roger Sayle 97c3200166 x86_64: Some SUBREG related optimization tweaks to i386 backend.
This patch contains two SUBREG-related optimization enabling tweaks to
the x86 backend.

The first change, to ix86_expand_vector_extract, cures the strange
-march=cascadelake related non-determinism that affected my new test
cases last week.  Extracting a QImode or HImode element from an SSE
vector performs a zero-extension to SImode, which is currently
represented as:

(set (subreg:SI (reg:QI target)) (zero_extend:SI (...))

Unfortunately, the semantics of this RTL doesn't quite match what was
intended.  A set of a paradoxical subreg allows the high-bits to take
an arbitrary value (hence the non-determinism).  A more correct
representation should be:

(set (reg:SI temp) (zero_extend:SI (...))
(set (reg:QI target) (subreg:QI (reg:SI temp))

Optionally with the SUBREG rtx annotated as SUBREG_PROMOTED_VAR_P to
indicate that value is already zero-extended in the SUBREG_REG.

The second change is very similar, which is why I've included it in
this patch, where currently the early RTL optimizers can produce:

(set (reg:V?? hardreg) (subreg ...))

where this instruction may require a spill/reload from memory when
the modes aren't tieable.  Alas the presence of the hard register
prevents combine/gcse etc. optimizing this away, or reusing the result
which would increase the lifetime of the hard register before reload.

The solution is to treat vector hard registers the same way as the
x86 backend handles scalar hard registers, and only allow sets from
pseudos before register allocation, which is achieved by checking
ix86_hardreg_mov_ok.  Hence the above instruction is expanded and
maintained as:

(set (reg:V?? pseudo) (subreg ...))
(set (reg:V?? hardreg) (reg:V?? pseudo))

which allows the RTL optimizers freedom to optimize the SUBREG.

2021-10-13  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
	* config/i386/i386-expand.c (ix86_expand_vector_move):  Use a
	pseudo intermediate when moving a SUBREG into a hard register,
	by checking ix86_hardreg_mov_ok.
	(ix86_expand_vector_extract): Store zero-extended SImode
	intermediate in a pseudo, then set target using a SUBREG_PROMOTED
	annotated subreg.
	* config/i386/sse.md (mov<VMOVE>_internal): Prevent CSE creating
	complex (SUBREG) sets of (vector) hard registers before reload, by
	checking ix86_hardreg_mov_ok.
2021-10-13 19:49:47 +01:00
Indu Bhagat 90582eb6c5 ctfc: remove redundant comma in enumerator list
This also helps get rid of warning

ctfc.h:215:18: warning: comma at end of enumerator list [-Wpedantic]
   CTF_DTU_D_SLICE,

gcc/ChangeLog:

	* ctfc.h (enum ctf_dtu_d_union_enum): Remove redundant comma.
2021-10-13 10:05:18 -07:00
Indu Bhagat 1456bd4720 dwarf2ctf: fix typo in comment
gcc/ChangeLog:

	* dwarf2ctf.c (gen_ctf_array_type): Fix typo in comment.
2021-10-13 09:58:46 -07:00
Martin Sebor 54fa5567a2 Check to see if null pointer is dereferenceable [PR102630].
Resolves:
PR middle-end/102630 - Spurious -Warray-bounds with named address space

gcc/ChangeLog:

	PR middle-end/102630
	* pointer-query.cc (compute_objsize_r): Handle named address spaces.

gcc/testsuite/ChangeLog:

	PR middle-end/102630
	* gcc.target/i386/addr-space-2.c: Add -Wall.
	* gcc.target/i386/addr-space-3.c: New test.
2021-10-13 10:31:37 -06:00
Iain Sandoe 43ae43f654 collect2: Fix missing cleanups.
The code that checks to see if objects have LTO content via
simple-object was not releasing resources, fixed thus.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>

gcc/ChangeLog:

	* collect2.c (is_lto_object_file): Release simple-object
	resources, close files.
2021-10-13 17:06:36 +01:00
Andre Vieira 5efeaa0d29 [arm] Fix MVE addressing modes for VLDR[BHW] and VSTR[BHW]
The way we were previously dealing with addressing modes for MVE was preventing
the use of pre, post and offset addressing modes for the normal loads and
stores, including widening and narrowing.  This patch fixes that and
adds tests to ensure we are capable of using all the available addressing
modes.

gcc/ChangeLog:
2021-10-12  Andre Vieira  <andre.simoesdiasvieira@arm.com>

	* config/arm/arm.c (thumb2_legitimate_address_p): Use VALID_MVE_MODE
	when checking mve addressing modes.
	(mve_vector_mem_operand): Fix the way we handle pre, post and offset
	addressing modes.
	(arm_print_operand): Fix printing of POST_ and PRE_MODIFY.
	* config/arm/mve.md: Use mve_memory_operand predicate everywhere where
	there is a single Ux constraint.

gcc/testsuite/ChangeLog:
2021-10-12  Andre Vieira  <andre.simoesdiasvieira@arm.com>

	* gcc.target/arm/mve/mve.exp: Make it test main directory.
	* gcc.target/arm/mve/mve_load_memory_modes.c: New test.
	* gcc.target/arm/mve/mve_store_memory_modes.c: New test.
2021-10-13 16:44:03 +01:00
John David Anglin 20995e68c2 Add support for 32-bit hppa targets in muldi3 expander
2021-10-13  John David Anglin  <danglin@gcc.gnu.org>

gcc/ChangeLog:

	* config/pa/pa.md (muldi3): Add support for inlining 64-bit
	multiplication on 32-bit PA 1.1 and 2.0 targets.
2021-10-13 15:36:45 +00:00