Commit Graph

186260 Commits

Author SHA1 Message Date
Patrick Palka 12bdd39755 libstdc++: Sync __cpp_lib_ranges macro defined in ranges_cmp.h
r12-1606 bumped the value of __cpp_lib_ranges defined in <version>,
but this macro is also defined in <bits/range_cmp.h>, so it needs to
be updated there as well.

libstdc++-v3/ChangeLog:

	* include/bits/ranges_cmp.h (__cpp_lib_ranges): Adjust value.
2021-06-21 09:45:31 -04:00
Tobias Burnus edf0c3ffb5 contrib/mklog.py: Improve PR handling
Co-authored-by: Martin Sebor <msebor@redhat.com>

contrib/ChangeLog:

	* mklog.py (bugzilla_url): Fetch also component.
	(pr_filename_regex): New.
	(get_pr_titles): Update PR string with correct format and component.
	(generate_changelog): Take additional PRs; extract PR from the
	filename.
	(__main__): Add -b/--pr-numbers argument.
	* test_mklog.py (EXPECTED4): Update to expect a PR for the new file.
2021-06-21 15:17:45 +02:00
Richard Biener 0ad9c7087e tree-optimization/101120 - fix compile-time issue with SLP groups
This places two hacks to avoid an old compile-time issue when
vectorizing large permuted SLP groups with gaps where we end up
emitting loads and IV adjustments for the gap as well and those
have quite a high cost until they are eventually cleaned up.

The first hack is to fold the auto-inc style IV updates early
in the vectorizer rather than in the next forwprop pass which
shortens the SSA use-def chains of the used IV.

The second hack is to remove the unused loads after we've picked
all that we possibly use.

2021-06-18  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/101120
	* tree-vect-data-refs.c (bump_vector_ptr): Fold the
	built increment.
	* tree-vect-slp.c (vect_transform_slp_perm_load): Add
	DR chain DCE capability.
	* tree-vectorizer.h (vect_transform_slp_perm_load): Adjust.
	* tree-vect-stmts.c (vectorizable_load): Remove unused
	loads in the DR chain for SLP.
2021-06-21 15:01:52 +02:00
Patrick Palka 21761d2b2b c++: REF_PARENTHESIZED_P wrapper inhibiting NRVO [PR67302]
Here, in C++14 or later, we remember the parentheses around 'a' in the
return statement by using a REF_PARENTHESIZED_P wrapper, which ends up
inhibiting NRVO because we don't look through this wrapper before
checking the conditions for NRVO.  This patch fixes this by calling
maybe_undo_parenthesized_ref sooner in check_return_expr.

	PR c++/67302

gcc/cp/ChangeLog:

	* typeck.c (check_return_expr): Call maybe_undo_parenthesized_ref
	sooner, before the NRVO handling.

gcc/testsuite/ChangeLog:

	* g++.dg/opt/nrv21.C: New test.
2021-06-21 07:54:29 -04:00
Patrick Palka de31f5445b c++: conversion to base of vbase in NSDMI [PR80431]
The delayed processing of conversions to a virtual base in an NSDMI
assumes the target base type is a (possibly indirect) virtual base of
the current class, but the target base type could also be a base of a
virtual base, as in the testcase below.  Since such a base isn't a part
of CLASSTYPE_VBASECLASSES, we end up miscompiling the testcase due to
the call to build_base_path (with binfo=NULL_TREE) silently returning
error_mark_node.  Fix this by using convert_to_base to build the
conversion instead.

	PR c++/80431

gcc/cp/ChangeLog:

	* tree.c (bot_replace): Use convert_to_base to build the
	conversion to the (morally) virtual base.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/nsdmi-virtual1a.C: New test.
2021-06-21 07:54:26 -04:00
Jakub Jelinek 644c2cc5f2 inline-asm: Fix ICE with bitfields in "m" operands [PR100785]
Bitfields, while they live in memory, aren't something inline-asm can easily
operate on.
For C and "=m" or "+m", we were diagnosing bitfields in the past in the
FE, where c_mark_addressable had:
      case COMPONENT_REF:
        if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
          {
            error
              ("cannot take address of bit-field %qD", TREE_OPERAND (x, 1));
            return false;
          }
but that check got moved in GCC 6 to build_unary_op instead and now we
emit an error during expansion and ICE afterwards (i.e. error-recovery).
For "m" it used to be diagnosed in c_mark_addressable too, but since
GCC 6 it is ice-on-invalid.
For C++, this was never diagnosed in the FE, but used to be diagnosed
in the gimplifier and/or during expansion before 4.8.

The following patch does multiple things:
1) diagnoses it in the FEs
2) stops emitting a redundant diagnostic in the gimplifier using the
   usual way, if we already see error_mark_node, we assume error has
   been emitted already and only diagnose if it wasn't error_mark_node;
   this helps diagnosing the same bug with multiple different
   errors
3) simplifies during expansion the inline asm if any errors have been
   reported (similarly how e.g. vregs pass if it detects errors on
   inline-asm either deletes them or simplifies to bare minimum -
   just labels), so that we don't have error-recovery ICEs there

2021-06-11  Jakub Jelinek  <jakub@redhat.com>

	PR inline-asm/100785
gcc/
	* gimplify.c (gimplify_asm_expr): Don't diagnose errors if
	output or input operands were already error_mark_node.
	* cfgexpand.c (expand_asm_stmt): If errors are emitted,
	remove all inputs, outputs and clobbers from the asm and
	set template to "".
gcc/c/
	* c-typeck.c (c_mark_addressable): Diagnose trying to make
	bit-fields addressable.
gcc/cp/
	* typeck.c (cxx_mark_addressable): Diagnose trying to make
	bit-fields addressable.
gcc/testsuite/
	* c-c++-common/pr100785.c: New test.
	* gcc.dg/pr48552-1.c: Don't expect invalid lvalue errors.
	* gcc.dg/pr48552-2.c: Likewise.
2021-06-21 13:32:36 +02:00
Gary Dismukes 62a3799f34 [Ada] Implement fixed-lower-bound consistency checks for qualified_expressions
gcc/ada/

	* checks.adb (Selected_Range_Checks): In the case of a
	qualified_expression where the qualifying subtype is an
	unconstrained array subtype with fixed lower bounds for some of
	its indexes, generate tests to check that those bounds are equal
	to the corresponding lower bounds of the qualified array object.
2021-06-21 06:45:21 -04:00
Bob Duff a61fd32dd1 [Ada] Optimization of System.Value_N
gcc/ada/

	* libgnat/s-valuen.ads (Value_Enumeration,
	Valid_Enumeration_Value): Inline.
	(Value_Enumeration_Pos): Add Pure_Function.
2021-06-21 06:45:20 -04:00
Justin Squirek eba1160fdd [Ada] INOX: prototype "when" constructs
gcc/ada/

	* doc/gnat_rm/implementation_defined_pragmas.rst: Document new
	feature under pragma Extensions_Allowed.
	* gnat_rm.texi: Regenerate.
	* errout.adb, errout.ads (Error_Msg_GNAT_Extension): Created to
	issue errors when parsing extension only constructs.
	* exp_ch11.adb, exp_ch11.ads (Expand_N_Raise_When_Statement):
	Created to expand raise ... when constucts.
	* exp_ch5.adb, exp_ch5.ads (Expand_N_Goto_When_Statement):
	Created to expand goto ... when constructs.
	* exp_ch6.adb, exp_ch6.ads (Expand_N_Return_When_Statement):
	Created to expand return ... when constructs.
	* expander.adb (Expand): Add case entries for "when" constructs.
	* gen_il-gen-gen_nodes.adb, gen_il-types.ads: Add entries for
	"when" constructs.
	* par-ch11.adb (P_Raise_Statement): Add processing for raise ...
	when.
	* par-ch5.adb (Missing_Semicolon_On_Exit): Renamed to
	Missing_Semicolon_On_When and moved to par-util.adb.
	* par-ch6.adb (Get_Return_Kind): Renamed from Is_Simple and
	processing added for "return ... when" return kind.
	(Is_Simple): Renamed to Get_Return_Kind.
	(P_Return_Statement): Add case for return ... when variant of
	return statement.
	* par-util.adb, par.adb (Missing_Semicolon_On_When): Added to
	centeralize parsing of "when" keywords in the context of "when"
	constructs.
	* sem.adb (Analyze): Add case for "when" constructs.
	* sem_ch11.adb, sem_ch11.ads (Analyze_Raise_When_Statement):
	Created to analyze raise ... when constructs.
	* sem_ch5.adb, sem_ch5.ads (Analyzed_Goto_When_Statement):
	Created to analyze goto ... when constructs.
	* sem_ch6.adb, sem_ch6.ads (Analyze_Return_When_Statement):
	Created to analyze return ... when constructs.
	* sprint.adb (Sprint_Node_Actual): Add entries for new "when"
	nodes.
2021-06-21 06:45:19 -04:00
Steve Baird 2092278297 [Ada] Add Ada.Strings.Text_Buffers and replace uses of Ada.Strings.Text_Output
gcc/ada/

	* Make-generated.in (GEN_IL_FLAGS): Keep only GNAT flags.
	(ada/stamp-gen_il): Remove dependencies on libgnat/ sources.  Do not
	copy libgnat/ sources locally and tidy up.
	* Makefile.rtl: Include object files for new Text_Buffer units
	in the GNATRTL_NONTASKING_OBJS list.
	* exp_put_image.ads, exp_put_image.adb: Update Rtsfind calls to
	match new specs. For example, calls to RE_Sink are replaced with
	calls to RE_Root_Buffer_Type. Update comments and change
	subprogram names accordingly (e.g., Preload_Sink is changed to
	Preload_Root_Buffer_Type).
	* impunit.adb: Add 6 new predefined units (Text_Buffers and 5
	child units thereof).
	* rtsfind.ads, rtsfind.adb: Add interfaces for accessing the
	Ada.Strings.Text_Buffers package and declarations
	therein (including the Unbounded child unit). Do not (yet)
	delete interfaces for accessing the old Text_Output package.
	* sem_attr.adb (Check_Put_Image_Attribute): Replace RE_Sink uses
	with RE_Root_Buffer_Type and update comments accordingly.
	* sem_ch10.adb (Analyze_Compilation_Unit): Update call to
	reflect name change of callee (that is, the former Preload_Sink
	is now Preload_Root_Buffer_Type).
	* sem_ch13.adb (Has_Good_Profile): Replace RE_Sink use with
	RE_Root_Buffer_Type.
	(Build_Spec): Update comment describing a parameter type.
	* gen_il.ads: Remove clauses for the old Text_Output package and
	add them for Ada.Streams.Stream_IO.
	(Sink): Declare.
	(Create_File): Likewise.
	(Increase_Indent): Likewise.
	(Decrease_Indent): Likewise.
	(Put): Likewise.
	(LF): Likewise.
	* gen_il.adb: Add clauses for Ada.Streams.Stream_IO.
	(Create_File): New procedure.
	(Increase_Indent): Likewise.
	(Decrease_Indent): Likewise.
	(Put): New procedures.
	* gen_il-gen.adb: Add clauses for Ada.Text_IO.  Replace
	Sink'Class with Sink throughout.  Use string concatenation and
	LF marker instead of formatted strings and "\n" marker.  Update
	Indent/Outdent calls to use new Increase_Indent/Decrease_Indent
	names.
	(Put_Membership_Query_Decl): Remove.
	* gen_il-internals.ads: Replace Sink'Class with Sink throughout.
	(Ptypes): Remove.
	(Pfields): Likewise.
	* gen_il-internals.adb: Remove clauses for GNAT.OS_Lib and
	Ada.Strings.Text_Buffers.Files.  Replace Sink'Class with Sink
	throughout.  Use string concatenation and LF marker instead of
	formatted strings and "\n" marker.
	(Stdout): Remove.
	(Ptypes): Likewise.
	(Pfields): Likewise.
	* libgnarl/s-putaim.ads: Modify context clause, update
	declaration of subtype Sink to refer to
	Text_Buffers.Root_Buffer_Type instead of the old
	Text_Output.Sink type.
	* libgnarl/s-putaim.adb: Modify context clause and add use
	clause to refer to Text_Buffers package.
	* libgnat/a-cbdlli.ads, libgnat/a-cbdlli.adb,
	libgnat/a-cbhama.ads, libgnat/a-cbhama.adb,
	libgnat/a-cbhase.ads, libgnat/a-cbhase.adb,
	libgnat/a-cbmutr.ads, libgnat/a-cbmutr.adb,
	libgnat/a-cborma.ads, libgnat/a-cborma.adb,
	libgnat/a-cborse.ads, libgnat/a-cborse.adb,
	libgnat/a-cdlili.ads, libgnat/a-cdlili.adb,
	libgnat/a-cidlli.ads, libgnat/a-cidlli.adb,
	libgnat/a-cihama.ads, libgnat/a-cihama.adb,
	libgnat/a-cihase.ads, libgnat/a-cihase.adb,
	libgnat/a-cimutr.ads, libgnat/a-cimutr.adb,
	libgnat/a-ciorma.ads, libgnat/a-ciorma.adb,
	libgnat/a-ciormu.ads, libgnat/a-ciormu.adb,
	libgnat/a-ciorse.ads, libgnat/a-ciorse.adb,
	libgnat/a-coboho.ads, libgnat/a-coboho.adb,
	libgnat/a-cobove.ads, libgnat/a-cobove.adb,
	libgnat/a-cohama.ads, libgnat/a-cohama.adb,
	libgnat/a-cohase.ads, libgnat/a-cohase.adb,
	libgnat/a-coinho.ads, libgnat/a-coinho.adb,
	libgnat/a-coinho__shared.ads, libgnat/a-coinho__shared.adb,
	libgnat/a-coinve.ads, libgnat/a-coinve.adb,
	libgnat/a-comutr.ads, libgnat/a-comutr.adb,
	libgnat/a-convec.ads, libgnat/a-convec.adb,
	libgnat/a-coorma.ads, libgnat/a-coorma.adb,
	libgnat/a-coormu.ads, libgnat/a-coormu.adb,
	libgnat/a-coorse.ads, libgnat/a-coorse.adb,
	libgnat/a-nbnbin.ads, libgnat/a-nbnbin.adb,
	libgnat/a-nbnbin__gmp.adb, libgnat/a-nbnbre.ads,
	libgnat/a-nbnbre.adb, libgnat/a-strunb.ads,
	libgnat/a-strunb.adb, libgnat/a-strunb__shared.ads,
	libgnat/a-strunb__shared.adb, libgnat/s-rannum.ads,
	libgnat/s-rannum.adb: Modify Put_Image procedure used in
	Put_Image aspect specification to conform to Ada profile
	rules (in particular, the first parameter shall be of type
	Ada.Strings.Text_Buffers.Root_Buffer_Type'Class).
	* libgnat/a-sttebu.ads, libgnat/a-sttebu.adb,
	libgnat/a-stbubo.ads, libgnat/a-stbubo.adb,
	libgnat/a-stbufi.ads, libgnat/a-stbufi.adb,
	libgnat/a-stbufo.ads, libgnat/a-stbufo.adb,
	libgnat/a-stbuun.ads, libgnat/a-stbuun.adb,
	libgnat/a-stbuut.ads, libgnat/a-stbuut.adb: A new predefined
	unit, Ada.Strings.Text_Buffers, and five child units.  Two of
	the five are RM-defined: Bounded and Unbounded. The remaining
	three are GNAT-defined: Files, Utils, and Formatting. The buffer
	type corresponding to an output file, type Files.File_Buffer, is
	simpler (and perhaps therefore slower) than its predecessor.
	Caching similar to what was being done before could be added
	later if that seems appropriate.
	* libgnat/s-putima.ads: Modify context clause, update
	declaration of subtype Sink to refer to
	Text_Buffers.Root_Buffer_Type instead of the old
	Text_Output.Sink type.
	* libgnat/s-putima.adb: Modify context clause.  Update
	Indent/Outdent calls to use new Increase_Indent/Decrease_Indent
	names; ditto for "Put_String => Put" name change.
	* libgnat/a-stteou__bootstrap.ads: Delete.
2021-06-21 06:45:17 -04:00
Eric Botcazou 88bed4e088 [Ada] Adjust new fast bit-field copy path to big-endian platforms
gcc/ada/

	* exp_ch5.adb (Expand_Assign_Array_Bitfield_Fast): If big-endian
	ordering is in effect for the operands and they are small,
	adjust the unchecked conversions done around them.
2021-06-21 06:45:16 -04:00
Richard Kenner d315f859f8 [Ada] Add Return_Statement field
gcc/ada/

	* einfo.ads (Return_Statement): Add documentation.
	* exp_ch6.adb (Expand_N_Extended_Return_Statement): Set it.
	* gen_il-fields.ads: Add it.
	* gen_il-gen-gen_entities.adb: Add it.
2021-06-21 06:45:15 -04:00
Bob Duff 9418d3d41f [Ada] Improve efficiency of small slice assignments of packed arrays
gcc/ada/

	* rtsfind.ads, libgnat/s-bitfie.ads, libgnat/s-bituti.adb,
	libgnat/s-bituti.ads (Fast_Copy_Bitfield): New run-time library
	function to copy bit fields faster than Copy_Bitfield. Cannot be
	called with zero-size bit fields.  Remove obsolete ??? comments
	from s-bituti.adb; we already do "avoid calling this if
	Forwards_OK is False".
	* exp_ch5.adb (Expand_Assign_Array_Loop_Or_Bitfield,
	Expand_Assign_Array_Bitfield_Fast): Generate calls to
	Fast_Copy_Bitfield when appropriate.
	* sem_util.adb, sem_util.ads (Get_Index_Bounds): Two new
	functions for getting the index bounds. These are more
	convenient than the procedure of the same name, because they can
	be used to initialize constants.
2021-06-21 06:45:14 -04:00
Ed Schonberg c3681eba72 [Ada] Implementation of AI12-205: defaults for formal types
gcc/ada/

	* gen_il-fields.ads: Add Default_Subtype_Mark to enumeration
	type for fields.
	* gen_il-gen-gen_nodes.adb: Add call to create new field for
	Formal_Type_Declaration node.
	* par-ch12.adb (P_Formal_Type_Declaration): in Ada_2022 mode,
	recognize new syntax for default: "or use subtype_mark".
	(P_Formal_Type_Definition): Ditto for the case of a formal
	incomplete type.
	* sinfo.ads: Add field Default_Subtype_Mark to
	N_Formal_Type_Declaration.
	* sem_ch12.adb (Validate_Formal_Type_Default): New procedure, to
	apply legality rules to default subtypes in formal type
	declarations. Some legality rules apply to all defaults, such as
	the requirement that the default for a formal type that depends
	on previous formal entities must itself be a previously declared
	formal of the same unit. Other checks are kind- specific.
	(Analyze_Associations): Use specified default if there is no
	actual provided for a formal type in an instance.
	(Analyze_Formal_Type_Declaration): Call
	Validate_Formal_Type_Default when default subtype is present.
2021-06-21 06:45:13 -04:00
Bob Duff 336438b6d2 [Ada] Implement 'Valid_Value attribute
gcc/ada/

	* libgnat/s-valuen.ads, libgnat/s-valuen.adb
	(Value_Enumeration_Pos): New function to compute the 'Pos of the
	enumeration literal for a given String.  Return a special value
	instead of raising an exception on invalid input. Called by both
	Valid_Enumeration_Image and Value_Enumeration.
	(Valid_Enumeration_Image): Return a Boolean indicating whether
	the String is a valid Image for the given enumeration type.
	(Value_Enumeration): Implement in terms of
	Value_Enumeration_Pos.
	* libgnat/s-vaenu8.ads, libgnat/s-vaen16.ads,
	libgnat/s-vaen32.ads: Rename Valid_Enumeration_Image from the
	instances.
	* libgnat/s-valuti.ads: Correct documentation (it was not true
	for the null string).
	* libgnat/s-valuti.adb (Normalize_String): Do not raise
	Constraint_Error for the null string, nor strings containing
	nothing but blanks, so that Valid_Enumeration_Image can return
	False in these cases, rather than raising an exception.
	* rtsfind.ads (RE_Value_Enumeration_8, RE_Value_Enumeration_16,
	RE_Value_Enumeration_32): New functions.
	(RTE_Available): Improve comment (E doesn't have to be a
	subprogram, although that's the usual case).
	* sem_attr.adb (nalid_Value): Semantic analysis for new
	attribute.
	* exp_attr.adb: Call Expand_Valid_Value_Attribute for new
	attribute.
	* exp_imgv.ads, exp_imgv.adb (Expand_Valid_Value_Attribute): New
	procedure to expand Valid_Value into a call to
	Valid_Enumeration_Image_NN.
	(Expand_Value_Attribute): Misc code cleanups.  Remove two ???
	mark comments. RTE_Available won't work here.  For one thing,
	RTE_Available (X) shouldn't be called until the compiler has
	decided to make use of X (see comments on RTE_Available), and in
	this case we're trying to AVOID calling something.
	* snames.ads-tmpl: New attribute name.
	* doc/gnat_rm/implementation_defined_attributes.rst: Document
	new attribute.
	* gnat_rm.texi: Regenerate.
2021-06-21 06:45:12 -04:00
Eric Botcazou 7f34e744c0 [Ada] Export Opt.Assume_No_Invalid_Values for use in back-end
gcc/ada/

	* fe.h (Assume_No_Invalid_Values): Declare.
	* opt.ads (Assume_No_Invalid_Values): Add warning comment.
2021-06-21 06:45:11 -04:00
Bob Duff 148be92923 [Ada] Zero-size slices
gcc/ada/

	* libgnat/s-bituti.ads (Small_Size): Do not include 0 in this
	type.
	* libgnat/s-bituti.adb (Copy_Bitfield): Do nothing for 0-bit
	bitfields.
2021-06-21 06:45:10 -04:00
Ghjuvan Lacambre c1f1ef1836 [Ada] Address ??? comments
gcc/ada/

	* exp_ch9.adb (Build_Simple_Entry_Call): Add comment.
	* libgnat/s-rannum.adb (Random): Update comment.
	* libgnat/s-rannum.ads (Generator): Update comment.
2021-06-21 06:45:09 -04:00
Piotr Trojanek e171a399ef [Ada] Fix unbalanced parens in documentation of Address clauses
gcc/ada/

	* doc/gnat_rm/representation_clauses_and_pragmas.rst (Address
	Clauses): Fix unbalanced parens.
	* gnat_rm.texi: Regenerate.
2021-06-21 06:45:08 -04:00
Ghjuvan Lacambre 48cf9f9975 [Ada] Minor reformattings
gcc/ada/

	* errout.adb (Handle_Serious_Error): Capitalize comment.
	* exp_dbug.adb (Set_Entity_Name): Capitalize sentence.
	* exp_dist.adb (Expand_All_Calls_Remote_Subprogram_Call): Fix
	typo.
	* sem_ch3.adb (Modular_Type_Declaration): Add space after comma.
2021-06-21 06:45:07 -04:00
Ghjuvan Lacambre 805f081980 [Ada] Make -gnatU and -gnatw.d the default
gcc/ada/

	* debug.adb: Document -gnatd_U as taken.
	* err_vars.ads (Warning_Doc_Switch): Set to True.
	* errout.ads (Errout): Update documentation.
	* gnat1drv.adb (Adjust_Global_Switches): React to -gnatd_U.
	* hostparm.ads (Tag_Errors): Set to True.
	* opt.ads (Unique_Error_Tag): Document -gnatd_U.
2021-06-21 06:45:06 -04:00
Eric Botcazou 08c9ef089f [Ada] Fix invalid JSON real numbers generated with -gnatRj
gcc/ada/

	* urealp.ads (UR_Write_To_JSON): Declare.
	* urealp.adb (Decimal_Exponent_Hi): Treat numbers in base 10
	specially and rewrite handling of numbers in other bases.
	(Decimal_Exponent_Lo): Likewise.
	(Normalize): Minor tweak.
	(UR_Write_To_JSON): New wrapper procedure around UR_Write.
	* repinfo.adb (List_Type_Info): When the output is to JSON, call
	UR_Write_To_JSON instead of UR_Write.
2021-06-21 06:45:05 -04:00
Piotr Trojanek 05447313c9 [Ada] Disable wrong computation of offsets within multidimensional arrays
gcc/ada/

	* sem_util.adb (Indexed_Component_Bit_Offset): Return an unknown
	offset for components within multidimensional arrays; remove
	redundant parens.
2021-06-21 06:45:04 -04:00
Piotr Trojanek b1955e0e6d [Ada] Skip overlay checks on protected components with expansion disabled
gcc/ada/

	* sem_util.adb (Find_Overlaid_Entity): Ignore references to
	components and discriminants.
2021-06-21 06:45:03 -04:00
Doug Rupp 28741e501f [Ada] Compile s-mmap on aarch64-linux
gcc/ada/

	* Makefile.rtl (aarch64-linux) [LIBGNAT_TARGET_PAIRS]: Add
	$(TRASYM_DWARF_UNIX_PAIRS).
	[EXTRA_GNAT_RTL_NONTASKING_OBJS]: Add $(TRASYM_DWARF_UNIX_OBJS)
2021-06-21 06:45:02 -04:00
Gary Dismukes eb077d7047 [Ada] Compiler crash on sliding of fixed-lower-bound object in Loop_Invariant
gcc/ada/

	* exp_util.adb (Expand_Sliding_Conversion): Only perform
	expansion when Expander_Active is True. Add a comment about this
	and refine existing comment regarding string literals.
2021-06-21 06:45:01 -04:00
Piotr Trojanek c9fcf01172 [Ada] Simplify detection of statically overlapping slices
gcc/ada/

	* sem_util.adb (Denotes_Same_Object): Simplify handling of
	slices.
2021-06-21 06:45:00 -04:00
Piotr Trojanek 58484cdf4e [Ada] Fix detection of overlapping actuals with renamings
gcc/ada/

	* sem_util.adb (Is_Object_Renaming): Rename from Is_Renaming;
	simplify; adapt callers.
2021-06-21 06:44:59 -04:00
Frederic Konrad 3045dd3c17 [Ada] powerpc64-wrs-vxworks7r2: build shared libgnat
gcc/ada/

	* Makefile.rtl: Compiles both static and dynamic libgnat for
	powerpc64-wrs-vxworks7r2.
2021-06-21 06:44:58 -04:00
prathamesh.kulkarni 316dd79876 arm/66791: Replace builtins in vceq_* (a, b) with a == b.
gcc/ChangeLog:
	* config/arm/arm_neon.h (vceq_s8): Replace builtin with __a == __b.
	(vceq_s16): Likewise.
	(vceq_s32): Likewise.
	(vceq_u8): Likewise.
	(vceq_u16): Likewise.
	(vceq_u32): Likewise.
	(vceq_p8): Likewise.
	(vceqq_s8): Likewise.
	(vceqq_s16): Likewise.
	(vceqq_s32): Likewise.
	(vceqq_u8): Likewise.
	(vceqq_u16): Likewise.
	(vceqq_u32): Likewise.
	(vceqq_p8): Likewise.
	(vceq_f32): Gate __a == __b on __FAST_MATH__.
	(vceqq_f32): Likewise.
	(vceq_f16): Likewise.
	(vceqq_f16): Likewise.
2021-06-21 14:52:54 +05:30
prathamesh.kulkarni 29a539a675 arm/97906: Adjust neon_vca patterns to use GLTE instead of GTGE iterator.
gcc/ChangeLog:
	PR target/97906
	* config/arm/iterators.md (NEON_VACMP): Remove.
	* config/arm/neon.md (neon_vca<cmp_op><mode>): Use GLTE instead of GTGE
	iterator.
	(neon_vca<cmp_op><mode>_insn): Likewise.
	(neon_vca<cmp_op_unsp><mode>_insn_unspec): Use NEON_VAGLTE instead of
	NEON_VACMP.

gcc/testsuite/ChangeLog:
	PR target/97906
	* gcc.target/arm/simd/pr97906.c: New test.
2021-06-21 14:41:12 +05:30
Richard Biener 90f78d5d86 tree-optimization/101121 - avoid infinite SLP build
The following plugs another hole where we cache a failed SLP build
attempt with an all-success 'matches'.  It also adds checking that
we don't do that.

2021-06-21  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/101121
	* tree-vect-slp.c (vect_build_slp_tree_2): To not fail fatally
	when we just lack a stmt with the desired op when doing permutation.
	(vect_build_slp_tree): When caching a failed SLP build attempt
	assert that at least one lane is marked as not matching.

	* gfortran.dg/pr101121.f: New testcase.
2021-06-21 11:06:27 +02:00
liuhongt 08c85f609a Disparage slightly the mask register alternative for bitwise operations.
The avx512 supports bitwise operations with mask registers, but the
throughput of those instructions is much lower than that of the
corresponding gpr version, so we would additionally disparages
slightly the mask register alternative for bitwise operations in the
LRA.

Also when allocano cost of GENERAL_REGS is same as MASK_REGS, allocate
MASK_REGS first since it has already been disparaged.

gcc/ChangeLog:

	PR target/101142
	* config/i386/i386.md: (*anddi_1): Disparage slightly the mask
	register alternative.
	(*and<mode>_1): Ditto.
	(*andqi_1): Ditto.
	(*andn<mode>_1): Ditto.
	(*<code><mode>_1): Ditto.
	(*<code>qi_1): Ditto.
	(*one_cmpl<mode>2_1): Ditto.
	(*one_cmplsi2_1_zext): Ditto.
	(*one_cmplqi2_1): Ditto.
	* config/i386/i386.c (x86_order_regs_for_local_alloc): Change
	the order of mask registers to be before general registers.

gcc/testsuite/ChangeLog:

	PR target/101142
	* gcc.target/i386/spill_to_mask-1.c: Adjust testcase.
	* gcc.target/i386/spill_to_mask-2.c: Adjust testcase.
	* gcc.target/i386/spill_to_mask-3.c: Adjust testcase.
	* gcc.target/i386/spill_to_mask-4.c: Adjust testcase.
2021-06-21 16:05:35 +08:00
Roger Sayle 9cedbaab8e PR target/11877: Use xor to write zero to memory with -Os
The following patch attempts to resolve PR target/11877 (without
triggering PR/23102).  On x86_64, writing an SImode or DImode zero
to memory uses an instruction encoding that is larger than first
clearing a register (using xor) then writing that to memory.  Hence,
after reload, the peephole2 pass can determine if there's a suitable
free register, and if so, use that to shrink the code size with -Os.

To improve code size, and avoid inserting a large number of xor
instructions (PR target/23102), this patch makes use of peephole2's
efficient pattern matching to use a single temporary for a run of
consecutive writes.  In theory, one could do better still with a
new target-specific pass, gated on -Os, to shrink these instructions
(like stv), but that's probably overkill for the little remaining
space savings.

Evaluating this patch on the CSiBE benchmark (v2.1.1) results in a
0.26% code size improvement (3715273 bytes down to 3705477) on x86_64
with -Os [saving 1 byte every 400].  549 of 894 tests improve, two
tests grow larger.  Analysis of these 2 pathological cases reveals
that although peephole2's match_scratch prefers to use a call-clobbered
register (to avoid requiring a new stack frame), very rarely this
interacts with GCC's shrink wrapping optimization, which may previously
have avoided saving/restoring a call clobbered register, such as %eax,
in the calling function.

2021-06-21  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
	PR target/11877
	* config/i386/i386.md: New define_peephole2s to shrink writing
	1, 2 or 4 consecutive zeros to memory when optimizing for size.

gcc/testsuite/ChangeLog
	PR target/11877
	* gcc.target/i386/pr11877.c: New test case.
2021-06-21 08:54:50 +01:00
liuhongt e24379c789 MAINTAINERS: Add myself as maintainer of the i386 vector extensions.
ChangeLog:

	* MAINTAINERS: Add myself as maintainer of the i386 vector
	extensions.
2021-06-21 10:41:36 +08:00
GCC Administrator 3e42ff7156 Daily bump. 2021-06-21 00:16:25 +00:00
Patrick Palka 69d80f0f2f libstdc++: Implement new views::split as per P2210
This implements the new views::split from P2210R2 "Superior String
Splitting".

libstdc++-v3/ChangeLog:

	* include/std/ranges (__non_propagating_cache::operator bool):
	Define for split_view::begin().
	(split_view): Define as per P2210.
	(views::__detail::__can_split_view): Define.
	(views::_Split, views::split): Define.
	* testsuite/std/ranges/adaptors/100577.cc (test01, test02):
	Test views::split.
	* testsuite/std/ranges/adaptors/split.cc: New test.
	* testsuite/std/ranges/p2325.cc (test08a): New test.
	* testsuite/std/ranges/p2367.cc (test01): Test views::split.
2021-06-20 12:47:18 -04:00
Patrick Palka adbd2c7102 libstdc++: Implement P2210 changes to rename views::split to lazy_split
This mostly mechanical patch renames split to lazy_split throughout.

libstdc++-v3/ChangeLog:

	* include/std/ranges: Rename views::split to views::lazy_split,
	split_view to lazy_split_view, etc. throughout.
	* testsuite/std/ranges/*: Likewise.
2021-06-20 12:41:42 -04:00
Patrick Palka 3f631671f1 libstdc++: Implement P2210 changes to split_view resolving LWG 3478
This implements the part of P2210R2 "Superior String Splitting" that
resolves LWG 3478.

libstdc++-v3/ChangeLog:

	* include/std/ranges (split_view::_OuterIter::__at_end):
	Check _M_trailing_empty.
	(split_view::_OuterIter::_M_trailing_empty): Define this
	data member.
	(split_view::_OuterIter::operator++): Set _M_trailing_empty
	appropriately.
	(split_view::_OuterIter::operator==): Compare
	_M_trailing_empty.
	* testsuite/std/ranges/adaptors/100479.cc (test03): Expect two
	split parts instead of one.
	* testsuite/std/ranges/adaptors/split.cc (test11): New test.
2021-06-20 12:38:43 -04:00
Patrick Palka 85a594f7dc libstdc++: Define split_view::_InnerIter::base as per P2210
libstdc++-v3/ChangeLog:

	* include/std/ranges (split_view::_InnerIter::base): Define as
	per P2210.
2021-06-20 12:38:35 -04:00
GCC Administrator b245d1c3d6 Daily bump. 2021-06-20 00:16:21 +00:00
Patrick Palka bc046a60cf libstdc++: Implement LWG 3555 changes to transform/elements_view
libstdc++-v3/ChangeLog:

	* include/std/ranges (transform_view::_Iterator::_S_iter_concept):
	Consider _Base instead of _Vp as per LWG 3555.
	(elements_view::_Iterator::_S_iter_concept): Likewise.
2021-06-18 20:50:23 -04:00
Patrick Palka 15736576df libstdc++: Implement LWG 3553 changes to split_view
libstdc++-v3/ChangeLog:

	* include/std/ranges (split_view::_OuterIter::value_type::begin):
	Remove the non-const overload, and remove the copyable constraint
	on the const overload as per LWG 3553.
2021-06-18 20:50:22 -04:00
Patrick Palka 4123650bd0 libstdc++: Implement LWG 3546 changes to common_iterator
libstdc++-v3/ChangeLog:

	* include/bits/stl_iterator.h
	(__detail::__common_iter_use_postfix_proxy): Add
	move_constructible constraint as per LWG 3546.
	(common_iterator::__postfix_proxy): Adjust initializer of
	_M_keep as per LWG 3546.
2021-06-18 20:50:13 -04:00
GCC Administrator c5581d4842 Daily bump. 2021-06-19 00:16:33 +00:00
Patrick Palka cc9c94d43d libstdc++: Reduce ranges::minmax/minmax_element comparison complexity
This rewrites ranges::minmax and ranges::minmax_element so that it
performs at most 3*N/2 many comparisons, as required by the standard.
In passing, this also fixes PR100387 by avoiding a premature std::move
in ranges::minmax and in std::shift_right.

	PR libstdc++/100387

libstdc++-v3/ChangeLog:

	* include/bits/ranges_algo.h (__minmax_fn::operator()): Rewrite
	to limit comparison complexity to 3*N/2.
	(__minmax_element_fn::operator()): Likewise.
	(shift_right): Avoid premature std::move of __result.
	* testsuite/25_algorithms/minmax/constrained.cc (test04, test05):
	New tests.
	* testsuite/25_algorithms/minmax_element/constrained.cc (test02):
	Likewise.
2021-06-18 19:33:39 -04:00
Aaron Sawdey a798b3f15c Fix p10 fusion regtests
Update the count of matches for the fusion combine patterns after
the recent changes to them.  At Segher's request, used \m and \M
in the match patterns. Also I have grouped together all alternatives of
each fusion insn, which should hopefully make this test a little less
fragile.

gcc/testsuite/ChangeLog

	* gcc.target/powerpc/fusion-p10-2logical.c: Update pattern
	match counts.
	* gcc.target/powerpc/fusion-p10-addadd.c: Update pattern match
	counts.
	* gcc.target/powerpc/fusion-p10-ldcmpi.c: Update pattern match
	counts.
	* gcc.target/powerpc/fusion-p10-logadd.c: Update pattern match
	counts.
2021-06-18 17:14:39 -05:00
Jeff Law 629cbc682a [committed] More useless code elimination on the H8
gcc/
	* config/h8300/h8300.c (h8300_select_cc_mode): Handle SYMBOL_REF.
	* config/h8300/logical.md (<code><mode>3 logcial expander): Generate
	more efficient code when the source can be trivially simplified.
2021-06-18 18:05:08 -04:00
Andrew MacLeod cb448ade74 Calculate a global definition if one has not been registered.
With poor values gone, Pick up range restrictions from statements
by folding them with global cache values.

	* gimple-range-cache.cc (ranger_cache::range_of_def):  Calculate
	a range if global is not available.
	(ranger_cache::entry_range): Fallback to range_of_def.
	* gimple-range-cache.h (range_of_def): Adjust prototype.
2021-06-18 17:43:28 -04:00
Andrew MacLeod 870b674f72 Remove poor value computations.
Remove the old "poor value" approach which made callbacks into ranger
from the cache.  Use only the best available value for all propagation.

	PR tree-optimization/101014
	* gimple-range-cache.cc (ranger_cache::ranger_cache): Remove poor
	value list.
	(ranger_cache::~ranger_cache): Ditto.
	(ranger_cache::enable_new_values): Delete.
	(ranger_cache::push_poor_value): Delete.
	(ranger_cache::range_of_def): Remove poor value processing.
	(ranger_cache::entry_range): Ditto.
	(ranger_cache::fill_block_cache): Ditto.
	* gimple-range-cache.h (class ranger_cache): Remove poor value members.
	* gimple-range.cc (gimple_ranger::range_of_expr): Remove call.
	* gimple-range.h (class gimple_ranger): Adjust.
2021-06-18 17:43:28 -04:00