Commit Graph

186260 Commits

Author SHA1 Message Date
Jason Merrill
58e3b17f4c mklog: add subject line skeleton
In the recent gcc-commit-mklog thread on gcc@ it occurred to me that the
command could also fill in part of the subject line.  If the first PR is
foo/1234, and the commit does not yet have a subject line, this will add

foo: [PR1234]

contrib/ChangeLog:

	* mklog.py: Add an initial component: [PRnnnnn] line when
	we have a PR.
2021-06-17 13:15:57 -04:00
Aaron Sawdey
00f730ec3a Add needed earlyclobber to fusion patterns
The add-logical and add-add fusion patterns all have constraint
alternatives "=0,1,&r,r" for the output (3). The inputs 0 and 1
are used in the first fusion instruction and then either may be
reused as a temp for the output of the first insn which is
input to the second. However, if input 2 is the same as 0 or 1,
it gets clobbered unexpectedly. So the first 2 alts need to be
"=&0,&1,&r,r" instead to indicate that in alts 0 and 1, the
register used for 3 is earlyclobber, hence can't be the same as
input 2.

This was actually encountered in the backport of the add-logical
fusion patch to gcc-11. Some code in go hit this case:

   <runtime.fillAligned+520>:        andc r30,r30,r9
r30 now (~(x|((x&c)+c)))&(~c) --> this is new x
   <runtime.fillAligned+524>:        b <runtime.fillAligned+288>
   <runtime.fillAligned+288>:        addi r31,r31,-1
r31 now m-1
   <runtime.fillAligned+292>:        srd r31,r30,r31
r31 now x>>(m-1)
   <runtime.fillAligned+296>:        subf r30,r31,r30
r30 now x-(x>>(m-1))
   <runtime.fillAligned+300>:        or r30,r30,r30   # mdoom
nop
   <runtime.fillAligned+304>:        not     r3,r30
r3 now ~(x-(x>>(m-1))) -- WHOOPS

The or r30,r30,r30 was meant to be or-ing in the earlier value
of r30 which was overwritten by the output of the subf.

gcc/ChangeLog

	* config/rs6000/genfusion.pl (gen_logical_addsubf): Add
	earlyclobber to alts 0/1.
	(gen_addadd): Add earlyclobber to alts 0/1.
	* config/rs6000/fusion.md: Regenerate file.
2021-06-17 10:48:17 -05:00
Trevor Saunders
caeb8892a5 fix get-loop_hot_path with gcc 4.8.5
gcc/ChangeLog:

	* cfgloopanal.c (get_loop_hot_path): Make path an auto_vec.
2021-06-17 11:12:30 -04:00
Arnaud Charlet
7ba8725fc3 [Ada] Crash on overriding of an abstract primitive on an incomplete type
gcc/ada/

	* sem_ch3.adb (Check_Ops_From_Incomplete_Type): Protect against
	no Primitive_Operations.
2021-06-17 10:32:17 -04:00
Vadim Godunko
59d5d8cdb9 [Ada] Fix operations on Unbounded_String...
gcc/ada/

	* libgnat/a-strunb__shared.ads (Allocate): Additional parameter
	to provide additional amount of space to be allocated.
	* libgnat/a-strunb__shared.adb (Aligned_Max_Length): Limit
	length to Natural'Last when requested length is larger than it.
	(Allocate): Merge two slightly different implementations into
	one.
2021-06-17 10:32:16 -04:00
Gary Dismukes
d32db3a763 [Ada] Implementation of Inox feature of fixed lower bounds on array types/subtypes
gcc/ada/

	* checks.adb (Discrete_Range_Cond): For an index subtype that
	has a fixed lower bound, require that the range's lower bound
	match that of the subtype.
	(Selected_Range_Checks): Warn about the case where a static
	lower bound does not equal an index subtype's fixed lower bound.
	* einfo.ads (Is_Fixed_Lower_Bound_Array_Subtype,
	Is_Fixed_Lower_Bound_Index_Subtype): Document new entity flag.
	* exp_ch4.adb (Expand_N_Type_Conversion): If the operand is of
	an unconstrained array subtype with fixed lower bound, then
	Expand_Sliding_Conversion is applied to the operand.
	* exp_ch6.adb (Expand_Simple_Function_Return): If the result
	subtype is an unconstrained array subtype with fixed lower
	bound, then Expand_Sliding_Conversion is applied to the return
	object.
	* exp_util.ads (Expand_Sliding_Conversion): New procedure for
	applying a sliding subtype conversion to an array object of a
	fixed-lower-bound subtype when needed.
	* exp_util.adb: Add with_clause for Freeze.
	(Expand_Sliding_Conversion): New procedure for applying a
	sliding subtype conversion to an array object of a
	fixed-lower-bound subtype when needed.  It traverses the indexes
	of the unconstrained array type/subtype to create a target
	constrained subtype and rewrites the array object to be a
	conversion to that subtype, when there's at least one index
	whose lower bound does not statically match the fixed-lower
	bound of the target subtype.
	* gen_il-fields.ads (type Opt_Field_Enum): Add literals
	Is_Fixed_Lower_Bound_Array_Subtype and
	Is_Fixed_Lower_Bound_Index_Subtype for new flags on type
	entities.
	* gen_il-gen-gen_entities.adb: Add calls to
	Create_Semantic_Field for the new fixed-lower-bound flags on
	type entities.
	* par-ch3.adb (P_Array_Type_Definition): Add handling for
	parsing of fixed-lower-bound index ranges in unconstrained array
	types. Report an error if such an index is encountered and GNAT
	language extensions are not enabled.
	(P_Index_Subtype_Def_With_Fixed_Lower_Bound): Support procedure
	for parsing unconstrained index ranges.
	(P_Index_Or_Discriminant_Constraint): Add handling for parsing
	of index constraints that specify ranges with fixed lower
	bounds. Report an error if such an index is encountered and GNAT
	language extensions are not enabled.
	* sem_ch3.adb (Analyze_Object_Declaration): If the object's
	nominal subtype is an array subtype with fixed lower bound, then
	Expand_Sliding_Conversion is applied to the object.
	(Array_Type_Declaration): Mark the array type and the subtypes
	of any indexes that specify a fixed lower bound as being
	fixed-lower-bound subtypes, and set the High_bound of the range
	of such an index to the upper bound of the named subtype.
	(Constrain_Array): For an array subtype with one or more index
	ranges specifying a fixed lower bound, set Is_Constrained to
	False and set the array subtype's
	Is_Fixed_Lower_Bound_Array_Subtype flag to True.
	(Constrain_Index): Mark the subtypes of an index that specifies
	a fixed lower bound as being a fixed-lower-bound index subtype,
	and set the High_bound of the range of such an index to the
	upper bound of the base type of the array type's corresponding
	index.
	* sem_res.adb (Resolve_Actuals): If a formal is of an
	unconstrained array subtype with fixed lower bound, then
	Expand_Sliding_Conversion is applied to the actual.
	* sem_util.adb (Build_Actual_Subtype): If the actual subtype
	corresponds to an unconstrained array subtype having any indexes
	with fixed lower bounds, then set the lower bounds of any such
	indexes of the actual subtype to the appropriate fixed lower
	bound of the formal subtype (rather than taking it from the
	formal itself).
	* sprint.adb (Sprint_Node_Actual, case N_Range): If a range's
	Etype has a fixed lower bound, then print "<>" rather than the
	High_Bound of the range.
2021-06-17 10:32:16 -04:00
Bob Duff
4892e31dac [Ada] Warn on 'in out' param containing access in predefined private type
gcc/ada/

	* sem_util.adb, sem_util.ads (Has_Access_Values): New formal
	Include_Internal to indicate whether internal types should be
	included.
	* sem_warn.adb (Check_References): Change E_Out_Parameter to
	Formal_Kind, to match the comment about Spec_Entity.  Pass
	Include_Internal => False to Has_Access_Values, so that we warn
	on types with access values that happen to be in internal types,
	such as Unbounded_String.
	* sem_attr.adb (Attribute_Has_Access_Values): Pass
	Include_Internal => True to Has_Access_Values, to preserve
	existing behavior.
	* libgnat/g-rewdat.adb (Do_Output): Change B from 'in out' to
	'in', to avoid warning enabled by the change to sem_warn.adb.
	* libgnat/s-objrea.adb (Check_Read_Offset): Change S from 'in
	out' to 'in', to avoid warning enabled by the change to
	sem_warn.adb.
2021-06-17 10:32:16 -04:00
Steve Baird
e1dfbb03f9 [Ada] Casing on composite values
gcc/ada/

	* exp_ch5.adb
	(Expand_N_Case_Statement.Expand_General_Case_Statement): New
	subprogram.
	(Expand_N_Case_Statement): If extensions are allowed and the
	case selector is not of a discrete type, then call
	Expand_General_Case_Statement to generate expansion instead of
	flagging the non-discrete selector as an error.
	* sem_case.ads (Is_Case_Choice_Pattern): New Boolean-valued
	function for testing whether a given expression occurs as part
	of a case choice pattern.
	* sem_case.adb (Composite_Case_Ops): New package providing
	support routines for the new form of case statements. This
	includes a nested package, Composite_Case_Ops.Value_Sets, which
	encapsulates the "representative values" implementation of
	composite value sets.
	(Check_Choices.Check_Case_Pattern_Choices): New procedure for
	semantic checking of non-discrete case choices. This includes
	the checks pertaining to coverage and overlapping.
	(Check_Choices.Check_Composite_Case_Selector): New procedure for
	semantic checking of non-discrete case selectors.
	(Check_Choices): If extensions are allowed then a non-discrete
	selector type no longer implies that an error must have been
	flagged earlier.  Instead of simply returning, call
	Check_Composite_Case_Selector and Check_Case_Pattern_Choices.
	(Is_Case_Choice_Pattern): Body of new function declared in
	sem_case.ads .
	* sem_ch5.adb (Analyze_Case_Statement): If extensions are
	allowed, then we can't use RM 5.4's "The selecting_expression is
	expected to be of any discrete type" name resolution rule.
	Handle the case where the type of the selecting expression is
	not discrete, as well as the new ambiguous-name-resolution error
	cases made possible by this change.
	* sem_res.adb (Resolve_Entity_Name): It is ok to treat the name
	of a type or subtype as an expression if it is part of a case
	choice pattern, as in "(Field1 => Positive, Field2 => <>)".
	* exp_aggr.adb (Expand_Record_Aggregate): Do not expand case
	choice aggregates.
	* gen_il-fields.ads: Define two new node attributes,
	Binding_Chars and Multidefined_Bindings.
	* gen_il-gen-gen_nodes.adb: The new Multidefined_Bindings
	attribute is Boolean-valued and may be set on
	N_Case_Statement_Alternative nodes. The new Binding_Chars
	attribute is Name_Id-valued and may be set on
	N_Component_Association nodes.
	* par-ch4.adb (P_Record_Or_Array_Component_Association): When
	parsing a component association, check for both new syntax forms
	used to specify a bound value in a case-choice aggregate.  In
	the case of a box value, an identifier may occur within the box,
	as in "Foo => <Abc>" instead of "Foo => <>". In the more general
	case, an expression (or a box) may be followed by "is
	<identifier>", as in
	"Foo => Bar is Abc" instead of just "Foo => Bar".
	* sem_aggr.adb (Resolve_Record_Aggregate): Do not transform box
	component values in a case-choice aggregate.
	* sinfo.ads: Provide comments for the new attributes added in
	gen_il-fields.ads.
	* doc/gnat_rm/implementation_defined_pragmas.rst: Describe this
	new feature in documentation for pragma Extensions_Allowed.
	* gnat_rm.texi: Regenerate.
2021-06-17 10:32:15 -04:00
Arnaud Charlet
5f900b589c [Ada] Missing finalization on nested expression with action
gcc/ada/

	* exp_ch4.adb (Expand_N_Expression_With_Actions.Process_Action):
	Do not abandon processing on a nested N_Expression_With_Actions
	or N_Loop_Statement, otherwise we may miss some transient
	declarations.
2021-06-17 10:32:15 -04:00
Arnaud Charlet
b4d46ee9a1 [Ada] Crash on a nested aggregate containing controlled objects
gcc/ada/

	* exp_util.adb (Find_Hook_Context): Do not stop on an aggregate
	node.
2021-06-17 10:32:15 -04:00
Piotr Trojanek
aeafd222d4 [Ada] Fix detection of valid renamings for overlapping checks
gcc/ada/

	* sem_util.adb (Is_Valid_Renaming): Check not only indexed
	components, but slices too.
2021-06-17 10:32:15 -04:00
Piotr Trojanek
fc473ce74c [Ada] Don't check No_Wide_Characters restriction for illegal types
gcc/ada/

	* sem_ch3.adb (Analyze_Private_Extension_Declaration): Check
	No_Wide_Characters restriction after rejecting illegal parent
	types.
	(Derived_Type_Declaration): Likewise.
	(Find_Type_Of_Subtype_Indic): Remove check for
	No_Wide_Characters restriction, which was done too early.
2021-06-17 10:32:14 -04:00
Piotr Trojanek
4476d93455 [Ada] Remove dubious wrapper of a recursive function
gcc/ada/

	* sem_util.adb (Is_Valid_Renaming): Body moved from its nested
	routine.
2021-06-17 10:32:14 -04:00
Gary Dismukes
83a5b1df3d [Ada] Error in instance on incomplete actual passed to formal incomplete type
gcc/ada/

	* sem_ch12.adb (Instantiate_Type): If the actual type for an
	incomplete formal type is also incomplete, but has a Full_View,
	use the Full_View of the actual type rather than the incomplete
	view.
2021-06-17 10:32:14 -04:00
Piotr Trojanek
cad7431bd6 [Ada] Fix punctuation in documentation of warnings for aliasing actuals
gcc/ada/

	* doc/gnat_ugn/building_executable_programs_with_gnat.rst
	(-gnatw.I): Remove double period at the end of sentence.
	* gnat_ugn.texi: Regenerate.
2021-06-17 10:32:13 -04:00
Piotr Trojanek
3447d9e49e [Ada] Fix detection of slices that denote the same object
gcc/ada/

	* sem_util.adb (Denotes_Same_Object): Call Get_Index_Bounds with
	the range of a slice object, not its type.
2021-06-17 10:32:13 -04:00
Piotr Trojanek
a6d844cd86 [Ada] Check all pairs of actuals for overlapping
gcc/ada/

	* sem_warn.adb (Warn_On_Overlapping_Actuals): Fix style;
	refactor repeated calls to Nkind; remove early RETURN.
2021-06-17 10:32:13 -04:00
Piotr Trojanek
679124db5b [Ada] Fix handling of generic types in check for overlapping actuals
gcc/ada/

	* sem_warn.adb (Warn_On_Overlapping_Actuals): Ignore formal of
	generic types, but keep examining other parameters.
2021-06-17 10:32:12 -04:00
Piotr Trojanek
e50d50f0c2 [Ada] Remove dead code for overlapping actuals and prefix notation
gcc/ada/

	* sem_warn.adb (Warn_On_Overlapping_Actuals): Remove dead code.
2021-06-17 10:32:12 -04:00
Piotr Trojanek
f0cc08566e [Ada] Cleanup redundant conditions in checks for overlapping actuals
gcc/ada/

	* sem_warn.adb (Warn_On_Overlapping_Actuals): Remove repeated
	code.
2021-06-17 10:32:12 -04:00
Piotr Trojanek
f59ca9eee8 [Ada] Use source casing in messages for aliasing checks
gcc/ada/

	* checks.adb (Overlap_Check): Replace Set_Casing with
	Adjust_Name_Case and adapt surrounding code as needed.
2021-06-17 10:32:12 -04:00
Arnaud Charlet
54f039c934 [Ada] Move runtime units for Put_Image attribute to libgnarl
gcc/ada/

	* libgnat/s-putaim.ads, libgnat/s-putaim.adb: Move...
	* libgnarl/s-putaim.ads, libgnarl/s-putaim.adb: ... here.
2021-06-17 10:32:11 -04:00
Arnaud Charlet
2be63603c6 [Ada] Provide new function Uintp.UI_To_Unsigned_64
gcc/ada/

	* uintp.ads, uintp.adb (UI_To_Unsigned_64): New.
2021-06-17 10:32:11 -04:00
Piotr Trojanek
a76825d6c1 [Ada] Clarify error for unsupported ELIMINATED overflow mode
gcc/ada/

	* sem_prag.adb (Get_Overflow_Mode): Reword error message.
	* switch-c.adb (Get_Overflow_Mode): Likewise.
2021-06-17 10:32:11 -04:00
Richard Kenner
24c554da57 [Ada] Look at Others_Discrete_Choices for N_Others_Choice
gcc/ada/

	* exp_util.adb (Expand_Static_Predicates_In_Choices): Handle
	Others_Discrete_Choices in N_Others_Choice.
2021-06-17 10:32:11 -04:00
Arnaud Charlet
79495262f3 [Ada] Minor comment cleanup
gcc/ada/

	* atree.adb: Remove redundant comment with spec.
	* sem_warn.adb: Fix typo in comment.
2021-06-17 10:32:10 -04:00
Arnaud Charlet
419ad27a77 [Ada] Do not systematically suppress checks on atree.adb
gcc/ada/

	* atree.adb: Do not suppress checks.
2021-06-17 10:32:10 -04:00
Justin Squirek
1326b0e896 [Ada] Removal of technical debt
gcc/ada/

	* exp_ch3.adb (Check_Missing_Others): Add comment.
	(Build_Initialization_Call): Remove inaccurate accessibility
	comment.
	* sem_ch12.adb (Analyze_Generic_Subprogram_Declaration): Remove
	test for Ada2012.
	(Analyze_Package_Instantiation): Remove speculative comment.
	(Inline_Instance_Body): Add comments for loops.
	(Build_Subprogram_Renaming): Remove comment about fix being
	partial and "ugly."
	(Instantiate_Subprogram_Body): Remove comment referencing DEC
	related internal issue.
	(Subtypes_Match): Add comment and simplify anonymous access
	test.
	(Is_Global): Add test for when E is an expanded name, and
	calculate the scope accordingly.
	* sem_ch6.adb (Analyze_Function_Return): Update comment
	regarding accessibility, and add check for
	Warn_On_Ada_2012_Compatibility.
	(Mask_Type_Refs): Add comments.
	(Analyze_Subprogram_Declaration): Remove mysterious suppression
	of elaboration checks.
	* sem_ch7.adb (Preserve_Full_Attributes): Preserve Is_Atomic
	value.
	* sem_ch8.adb (Most_Descendant_Use_Clause): Remove comment.
	(Note_Redundant_Use): Fix calls to Find_First_Use to be
	Find_Most_Prev.
	(Get_Object_Name): Modify error message to be more descriptive.
	(Known_But_Visible): Remove mysterious special case for
	GNAT_Mode.
	(Find_First_Use): Removed.
	(Find_Most_Prev): Renamed from Find_First_Use.
	* sem_prag.adb (Check_Static_Constraint): Add comments to
	routine.
2021-06-17 10:32:10 -04:00
Bob Duff
8863c3aa86 [Ada] Display Entity in debugging printouts
gcc/ada/

	* treepr.adb (Print_Node): Display the Entity or Associated_Node
	fields if appropriate.
	* sinfo-utils.ads (F_Associated_Node, F_Entity): Remove. These
	are no longer needed.
2021-06-17 10:32:09 -04:00
Piotr Trojanek
9e1ca4e3ab [Ada] Apply aliasing checks only to names and not to objects as actuals
gcc/ada/

	* checks.adb (Apply_Parameter_Aliasing_Checks): Replace calls to
	Is_Object_Reference with calls to Is_Name_Reference; remove
	asymmetric condition that only detected an aggregate as the
	first actual (aggregate objects were just a special case of an
	object reference that was not a name).
2021-06-17 10:32:09 -04:00
Bob Duff
f54fb769ec [Ada] Fix varsize node name conflict
gcc/ada/

	* gen_il-gen.adb, gen_il-internals.ads: Generate field
	enumeration literals with "F_" prefix.  Update all generated
	references accordingly.
	* atree.adb, einfo-utils.adb, sem_ch3.adb, sem_ch5.adb,
	sem_ch6.adb, sem_ch8.adb, sinfo-cn.adb, sinfo-utils.adb,
	sinfo-utils.ads, treepr.adb: Add "F_" prefix to all uses of the
	field enumeration literals.
2021-06-17 10:32:09 -04:00
Arnaud Charlet
1b96f017cd [Ada] AI12-0411 Add "bool" to Interfaces.C
gcc/ada/

	* libgnat/i-c.ads, libgnat/i-cexten.ads,
	libgnat/i-cexten__128.ads: bool renamed C_bool.
2021-06-17 10:32:09 -04:00
Piotr Trojanek
02e9e5fb97 [Ada] Reject allocators in contexts restricted by SPARK
gcc/ada/

	* sem_ch4.adb (Analyze_Allocator): Reject allocators in
	restricted contexts.
2021-06-17 10:32:08 -04:00
Andrew MacLeod
8cbaa09333 Fix spacing and typos in comments.
* gimple-range-cache.cc: Comment cleanups.
	* gimple-range-gori.cc: Comment cleanups.
	* gimple-range.cc: Comment/spacing cleanups
	* value-range.h: Comment cleanups.
2021-06-17 10:12:38 -04:00
Patrick Palka
2b87f3318c libstdc++: Non-triv-copyable extra args aren't simple [PR100940]
This force-enables perfect forwarding call wrapper semantics whenever
the extra arguments of a partially applied range adaptor aren't all
trivially copyable, so as to avoid incurring unnecessary copies of
potentially expensive-to-copy objects (such as std::function objects)
when invoking the adaptor.

	PR libstdc++/100940

libstdc++-v3/ChangeLog:

	* include/std/ranges (__adaptor::_Partial): For the "simple"
	forwarding partial specializations, also require that
	the extra arguments are trivially copyable.
	* testsuite/std/ranges/adaptors/100577.cc (test04): New test.
2021-06-17 09:46:07 -04:00
Patrick Palka
0f4a2fb44d libstdc++: Refine range adaptors' "simple extra args" mechanism [PR100940]
The _S_has_simple_extra_args mechanism is used to simplify forwarding
of range adaptor's extra arguments when perfect forwarding call wrapper
semantics isn't required for correctness, on a per-adaptor basis.
Both views::take and views::drop are flagged as such, but it turns out
perfect forwarding semantics are needed for these adaptors in some
contrived cases, e.g. when their extra argument is a move-only class
that's implicitly convertible to an integral type.

To fix this, we could just clear the flag for views::take/drop as with
views::split, but that'd come at the cost of acceptable diagnostics
for ill-formed uses of these adaptors (see PR100577).

This patch instead allows adaptors to parameterize their
_S_has_simple_extra_args flag according the types of the captured extra
arguments, so that we could conditionally disable perfect forwarding
semantics only when the types of the extra arguments permit it.  We
then use this finer-grained mechanism to safely disable perfect
forwarding semantics for views::take/drop when the extra argument is
integer-like, rather than incorrectly always disabling it.  Similarly,
for views::split, rather than always enabling perfect forwarding
semantics we now safely disable it when the extra argument is a scalar
or a view, and recover good diagnostics for these common cases.

	PR libstdc++/100940

libstdc++-v3/ChangeLog:

	* include/std/ranges (__adaptor::_RangeAdaptor): Document the
	template form of _S_has_simple_extra_args.
	(__adaptor::__adaptor_has_simple_extra_args): Add _Args template
	parameter pack.  Try to treat _S_has_simple_extra_args as a
	variable template parameterized by _Args.
	(__adaptor::_Partial): Pass _Arg/_Args to the constraint
	__adaptor_has_simple_extra_args.
	(views::_Take::_S_has_simple_extra_args): Templatize according
	to the type of the extra argument.
	(views::_Drop::_S_has_simple_extra_args): Likewise.
	(views::_Split::_S_has_simple_extra_args): Define.
	* testsuite/std/ranges/adaptors/100577.cc (test01, test02):
	Adjust after changes to _S_has_simple_extra_args mechanism.
	(test03): Define.
2021-06-17 09:46:04 -04:00
Chung-Lin Tang
275c736e73 libgomp: Structure element mapping for OpenMP 5.0
This patch implement OpenMP 5.0 requirements of incrementing/decrementing
the reference count of a mapped structure at most once (across all elements)
on a construct.

This is implemented by pulling in libgomp/hashtab.h and using htab_t as a
pointer set. Structure element list siblings also have pointers-to-refcounts
linked together, to naturally achieve uniform increment/decrement without
repeating.

There are still some questions on whether using such a htab_t based set is
faster/slower than using a sorted pointer array based implementation. This
is to be researched on later.

libgomp/ChangeLog:

	* hashtab.h (htab_clear): New function with initialization code
	factored out from...
	(htab_create): ...here, adjust to use htab_clear function.

	* libgomp.h (REFCOUNT_SPECIAL): New symbol to denote range of
	special refcount values, add comments.
	(REFCOUNT_INFINITY): Adjust definition to use REFCOUNT_SPECIAL.
	(REFCOUNT_LINK): Likewise.
	(REFCOUNT_STRUCTELEM): New special refcount range for structure
	element siblings.
	(REFCOUNT_STRUCTELEM_P): Macro for testing for structure element
	sibling maps.
	(REFCOUNT_STRUCTELEM_FLAG_FIRST): Flag to indicate first sibling.
	(REFCOUNT_STRUCTELEM_FLAG_LAST):  Flag to indicate last sibling.
	(REFCOUNT_STRUCTELEM_FIRST_P): Macro to test _FIRST flag.
	(REFCOUNT_STRUCTELEM_LAST_P): Macro to test _LAST flag.
	(struct splay_tree_key_s): Add structelem_refcount and
	structelem_refcount_ptr fields into a union with dynamic_refcount.
	Add comments.
	(gomp_map_vars): Delete declaration.
	(gomp_map_vars_async): Likewise.
	(gomp_unmap_vars): Likewise.
	(gomp_unmap_vars_async): Likewise.
	(goacc_map_vars): New declaration.
	(goacc_unmap_vars): Likewise.

	* oacc-mem.c (acc_map_data): Adjust to use goacc_map_vars.
	(goacc_enter_datum): Likewise.
	(goacc_enter_data_internal): Likewise.
	* oacc-parallel.c (GOACC_parallel_keyed): Adjust to use goacc_map_vars
	and goacc_unmap_vars.
	(GOACC_data_start): Adjust to use goacc_map_vars.
	(GOACC_data_end): Adjust to use goacc_unmap_vars.

	* target.c (hash_entry_type): New typedef.
	(htab_alloc): New function hook for hashtab.h.
	(htab_free): Likewise.
	(htab_hash): Likewise.
	(htab_eq): Likewise.
	(hashtab.h): Add file include.
	(gomp_increment_refcount): New function.
	(gomp_decrement_refcount): Likewise.
	(gomp_map_vars_existing): Add refcount_set parameter, adjust to use
	gomp_increment_refcount.
	(gomp_map_fields_existing): Add refcount_set parameter, adjust calls
	to gomp_map_vars_existing.

	(gomp_map_vars_internal): Add refcount_set parameter, add local openmp_p
	variable to guard OpenMP specific paths, adjust calls to
	gomp_map_vars_existing, add structure element sibling splay_tree_key
	sequence creation code, adjust Fortran map case to avoid increment
	under OpenMP.
	(gomp_map_vars): Adjust to static, add refcount_set parameter, manage
	local refcount_set if caller passed in NULL, adjust call to
	gomp_map_vars_internal.
	(gomp_map_vars_async): Adjust and rename into...
	(goacc_map_vars): ...this new function, adjust call to
	gomp_map_vars_internal.

	(gomp_remove_splay_tree_key): New function with code factored out from
	gomp_remove_var_internal.
	(gomp_remove_var_internal): Add code to handle removing multiple
	splay_tree_key sequence for structure elements, adjust code to use
	gomp_remove_splay_tree_key for splay-tree key removal.
	(gomp_unmap_vars_internal): Add refcount_set parameter, adjust to use
	gomp_decrement_refcount.
	(gomp_unmap_vars): Adjust to static, add refcount_set parameter, manage
	local refcount_set if caller passed in NULL, adjust call to
	gomp_unmap_vars_internal.
	(gomp_unmap_vars_async): Adjust and rename into...
	(goacc_unmap_vars): ...this new function, adjust call to
	gomp_unmap_vars_internal.
	(GOMP_target): Manage refcount_set and adjust calls to gomp_map_vars and
	gomp_unmap_vars.
	(GOMP_target_ext): Likewise.
	(gomp_target_data_fallback): Adjust call to gomp_map_vars.
	(GOMP_target_data): Likewise.
	(GOMP_target_data_ext): Likewise.
	(GOMP_target_end_data): Adjust call to gomp_unmap_vars.
	(gomp_exit_data): Add refcount_set parameter, adjust to use
	gomp_decrement_refcount, adjust to queue splay-tree keys for removal
	after main loop.
	(GOMP_target_enter_exit_data): Manage refcount_set and adjust calls to
	gomp_map_vars and gomp_exit_data.
	(gomp_target_task_fn): Likewise.

	* testsuite/libgomp.c-c++-common/refcount-1.c: New testcase.
	* testsuite/libgomp.c-c++-common/struct-elem-1.c: New testcase.
	* testsuite/libgomp.c-c++-common/struct-elem-2.c: New testcase.
	* testsuite/libgomp.c-c++-common/struct-elem-3.c: New testcase.
	* testsuite/libgomp.c-c++-common/struct-elem-4.c: New testcase.
	* testsuite/libgomp.c-c++-common/struct-elem-5.c: New testcase.
2021-06-17 21:34:59 +08:00
H.J. Lu
967b465302 Add a target calls hook: TARGET_PUSH_ARGUMENT
1. Replace PUSH_ARGS with a target calls hook, TARGET_PUSH_ARGUMENT, which
takes an integer argument.  When it returns true, push instructions will
be used to pass outgoing arguments.  If the argument is nonzero, it is
the number of bytes to push and indicates the PUSH instruction usage is
optional so that the backend can decide if PUSH instructions should be
generated.  Otherwise, the argument is zero.
2. Implement x86 target hook which returns false when the number of bytes
to push is no less than 16 (8 for 32-bit targets) if vector load and store
can be used.
3. Remove target PUSH_ARGS definitions which return 0 as it is the same
as the default.
4. Define TARGET_PUSH_ARGUMENT of cr16 and m32c to always return true.

gcc/

	PR target/100704
	* calls.c (expand_call): Replace PUSH_ARGS with
	targetm.calls.push_argument (0).
	(emit_library_call_value_1): Likewise.
	* defaults.h (PUSH_ARGS): Removed.
	(PUSH_ARGS_REVERSED): Replace PUSH_ARGS with
	targetm.calls.push_argument (0).
	* expr.c (block_move_libcall_safe_for_call_parm): Likewise.
	(emit_push_insn): Pass the number bytes to push to
	targetm.calls.push_argument and pass 0 if ARGS_ADDR is 0.
	* hooks.c (hook_bool_uint_true): New.
	* hooks.h (hook_bool_uint_true): Likewise.
	* rtlanal.c (nonzero_bits1): Replace PUSH_ARGS with
	targetm.calls.push_argument (0).
	* target.def (push_argument): Add a targetm.calls hook.
	* targhooks.c (default_push_argument): New.
	* targhooks.h (default_push_argument): Likewise.
	* config/bpf/bpf.h (PUSH_ARGS): Removed.
	* config/cr16/cr16.c (TARGET_PUSH_ARGUMENT): New.
	* config/cr16/cr16.h (PUSH_ARGS): Removed.
	* config/i386/i386.c (ix86_push_argument): New.
	(TARGET_PUSH_ARGUMENT): Likewise.
	* config/i386/i386.h (PUSH_ARGS): Removed.
	* config/m32c/m32c.c (TARGET_PUSH_ARGUMENT): New.
	* config/m32c/m32c.h (PUSH_ARGS): Removed.
	* config/nios2/nios2.h (PUSH_ARGS): Likewise.
	* config/pru/pru.h (PUSH_ARGS): Likewise.
	* doc/tm.texi.in: Remove PUSH_ARGS documentation.  Add
	TARGET_PUSH_ARGUMENT hook.
	* doc/tm.texi: Regenerated.

gcc/testsuite/

	PR target/100704
	* gcc.target/i386/pr100704-1.c: New test.
	* gcc.target/i386/pr100704-2.c: Likewise.
	* gcc.target/i386/pr100704-3.c: Likewise.
2021-06-17 06:33:14 -07:00
Uros Bizjak
20a2c8ace0 i386: Add variable vec_set for 64bit vectors [PR97194]
To generate sane code a SSE4.1 variable PBLENDV instruction is needed.

2021-06-17  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
	PR target/97194
	* config/i386/i386-expand.c (expand_vector_set_var):
	Handle V2FS mode remapping.  Pass TARGET_MMX_WITH_SSE to
	ix86_expand_vector_init_duplicate.
	(ix86_expand_vector_init_duplicate): Emit insv_1 for
	QImode for !TARGET_PARTIAL_REG_STALL.
	* config/i386/predicates.md (vec_setm_mmx_operand): New predicate.
	* config/i386/mmx.md (vec_setv2sf): Use vec_setm_mmx_operand
	as operand 2 predicate.  Call ix86_expand_vector_set_var
	for non-constant index operand.
	(vec_setv2si): Ditto.
	(vec_setv4hi): Ditto.
	(vec_setv8qi): ditto.

gcc/testsuite/

	PR target/97194
	* gcc.target/i386/sse4_1-vec-set-1.c: New test.
	* gcc.target/i386/sse4_1-vec-set-2.c: ditto.
2021-06-17 15:19:54 +02:00
Aldy Hernandez
f1555d4013 Cleanup clz and ctz code in range_of_builtin_call.
These are various cleanups to the clz/ctz code.

First, ranges from range_of_expr are always numeric so we
should adjust.  Also, the checks for non-zero were assuming the argument
was unsigned, which in the PR's testcase is clearly not.  I've cleaned
this up, so that it works either way.

I've also removed the following annoying idiom:

-         int newmini = prec - 1 - wi::floor_log2 (r.upper_bound ());
-         if (newmini == prec)

This is really a check for r.upper_bound() == 0, as floor_log2(0)
returns -1.  It's confusing.

Tested on x86-64 Linux.

gcc/ChangeLog:

	PR tree-optimization/100790
	* gimple-range.cc (range_of_builtin_call): Cleanup clz and ctz
	code.

gcc/testsuite/ChangeLog:

	* gcc.dg/pr100790.c: New test.
2021-06-17 12:10:41 +02:00
Martin Liska
8eac92a07e docs: Use -O1 as a canonical value for -O option
gcc/ChangeLog:

	* doc/invoke.texi: Use consistently -O1 instead of -O.
2021-06-17 11:48:59 +02:00
Martin Liska
c0954059db gcov: update documentation entry about string format
gcc/ChangeLog:

	* gcov-io.h: Update documentation entry about string format.
2021-06-17 11:39:11 +02:00
Marius Hillenbrand
a4fc63e0c3 IBM Z: Fix vector intrinsics vec_double and vec_floate
Fix the mapping of vec_double and vec_floate to builtins.

gcc/ChangeLog:

	PR target/100871
	* config/s390/vecintrin.h (vec_doublee): Fix to use
	  __builtin_s390_vflls.
	(vec_floate): Fix to use __builtin_s390_vflrd.

gcc/testsuite/ChangeLog:

	* gcc.target/s390/zvector/vec-doublee.c: New test.
	* gcc.target/s390/zvector/vec-floate.c: New test.
2021-06-17 11:14:23 +02:00
Trevor Saunders
53c55d3204 return auto_vec from more dominance functions
This ensures the vector gets cleaned up by the caller when appropriate.

Signed-off-by: Trevor Saunders <tbsaunde@tbsaunde.org>

gcc/ChangeLog:

	* dominance.c (get_dominated_to_depth): Return auto_vec<basic_block>.
	* dominance.h (get_dominated_to_depth): Likewise.
	(get_all_dominated_blocks): Likewise.
	* cfgcleanup.c (delete_unreachable_blocks): Adjust.
	* gcse.c (hoist_code): Likewise.
	* tree-cfg.c (remove_edge_and_dominated_blocks): Likewise.
	* tree-parloops.c (oacc_entry_exit_ok): Likewise.
	* tree-ssa-dce.c (eliminate_unnecessary_stmts): Likewise.
	* tree-ssa-phiprop.c (pass_phiprop::execute): Likewise.
2021-06-17 04:43:28 -04:00
Trevor Saunders
4541b5ec16 make get_domminated_by_region return a auto_vec
This makes it clear the caller owns the vector, and ensures it is cleaned up.

Signed-off-by: Trevor Saunders <tbsaunde@tbsaunde.org>

gcc/ChangeLog:

	* dominance.c (get_dominated_by_region): Return auto_vec<basic_block>.
	* dominance.h (get_dominated_by_region): Likewise.
	* tree-cfg.c (gimple_duplicate_sese_region): Adjust.
	(gimple_duplicate_sese_tail): Likewise.
	(move_sese_region_to_fn): Likewise.
2021-06-17 04:43:28 -04:00
Trevor Saunders
4f899c4298 return auto_vec from get_dominated_by
Signed-off-by: Trevor Saunders <tbsaunde@tbsaunde.org>

gcc/ChangeLog:

	* dominance.c (get_dominated_by): Return auto_vec<basic_block>.
	* dominance.h (get_dominated_by): Likewise.
	* auto-profile.c (afdo_find_equiv_class): Adjust.
	* cfgloopmanip.c (duplicate_loop_to_header_edge): Likewise.
	* loop-unroll.c (unroll_loop_runtime_iterations): Likewise.
	* tree-cfg.c (test_linear_chain): Likewise.
	(test_diamond): Likewise.
2021-06-17 04:43:27 -04:00
Trevor Saunders
a165040e11 return auto_vec from get_loop_hot_path
This ensures callers take ownership of the returned vector.

Signed-off-by: Trevor Saunders <tbsaunde@tbsaunde.org>

gcc/ChangeLog:

	* cfgloop.h (get_loop_hot_path): Return auto_vec<basic_block>.
	* cfgloopanal.c (get_loop_hot_path): Likewise.
	* tree-ssa-loop-ivcanon.c (tree_estimate_loop_size): Likewise.
2021-06-17 04:43:27 -04:00
Trevor Saunders
265af872a1 return auto_vec from cgraph_node::collect_callers
This ensures the callers of collect_callers () take ownership of the vector and
free it when appropriate.

Signed-off-by: Trevor Saunders <tbsaunde@tbsaunde.org>

gcc/ChangeLog:

	* cgraph.c (cgraph_node::collect_callers): Return
	auto_vec<cgraph_edge *>.
	* cgraph.h (cgraph_node::collect_callers): Likewise.
	* ipa-cp.c (create_specialized_node): Adjust.
	(decide_about_value): Likewise.
	(decide_whether_version_node): Likewise.
	* ipa-sra.c (process_isra_node_results): Likewise.
2021-06-17 04:43:27 -04:00
Trevor Saunders
e9681f5725 auto_vec copy/move improvements
- Unfortunately using_auto_storage () needs to handle m_vec being null.
- Handle self move of an auto_vec to itself.
- Make sure auto_vec defines the classes move constructor and assignment
  operator, as well as ones taking vec<T>, so the compiler does not generate
them for us.  Per https://en.cppreference.com/w/cpp/language/move_constructor
the ones taking vec<T> do not count as the classes move constructor or
assignment operator, but we want them as well to assign a plain vec to a
auto_vec.
- Explicitly delete auto_vec's copy constructor and assignment operator.  This
  prevents unintentional expenssive coppies of the vector and makes it clear
when coppies are needed that that is what is intended.  When it is necessary to
copy a vector copy () can be used.

Signed-off-by: Trevor Saunders <tbsaunde@tbsaunde.org>

gcc/ChangeLog:

	* vec.h (vl_ptr>::using_auto_storage): Handle null m_vec.
	(auto_vec<T, 0>::auto_vec): Define move constructor, and delete copy
	constructor.
	(auto_vec<T, 0>::operator=): Define move assignment and delete copy
	assignment.
2021-06-17 04:43:26 -04:00
Aldy Hernandez
3f3ee13959 Add debugging helpers for ranger.
These are debugging aids for help in debugging ranger based passes.

gcc/ChangeLog:

	* gimple-range.cc (debug_seed_ranger): New.
	(dump_ranger): New.
	(debug_ranger): New.
2021-06-17 10:29:28 +02:00