Commit Graph

190645 Commits

Author SHA1 Message Date
Yannick Moy
3814652309 [Ada] Proof of runtime units for integer exponentiation (checks on)
gcc/ada/

	* libgnat/s-expint.ads: Mark in SPARK. Adapt to change to
	package.
	* libgnat/s-explli.ads: Likewise.
	* libgnat/s-expllli.ads: Likewise.
	* libgnat/s-expont.adb: Add lemmas and ghost code.
	* libgnat/s-expont.ads: Add functional contract.
2022-01-05 11:32:35 +00:00
Piotr Trojanek
1702fb6bf9 [Ada] Remove unnecessary check for missing parameter specifications
gcc/ada/

	* exp_disp.adb (Gen_Parameters_Profile): Remove redundant guard.
2022-01-05 11:32:35 +00:00
Claire Dross
c239773dd1 [Ada] Introduce expression functions for contract of Scan_Exponent
gcc/ada/

	* libgnat/s-valuti.ads (Starts_As_Exponent_Format_Ghost): Ghost
	function to determine if a string is recognized as something
	which might be an exponent.
	(Is_Opt_Exponent_Format_Ghost): Ghost function to determine if a
	string has the correct format for an optional exponent.
	(Scan_Exponent): Use ghost functions to factorize contracts.
2022-01-05 11:32:35 +00:00
Bob Duff
a6505936a3 [Ada] Prevent Get_Current_Value_Condition from returning the same node
gcc/ada/

	* exp_util.ads (Get_Current_Value_Condition): Belt: Add a
	postcondition that Val /= Var.
	* sem_util.adb (Known_Null): Suspenders: Raise Program_Error if
	Get_Current_Value_Condition returned the same value. This will
	be enabled even without assertions, because infinite recursion
	is a nuisance -- better to crash if this bug ever occurs.
2022-01-05 11:32:35 +00:00
Piotr Trojanek
54403a8130 [Ada] Simplify making of null procedure wrappers
gcc/ada/

	* exp_ch3.adb (Make_Null_Procedure_Specs): Simplify by reusing
	Copy_Subprogram_Spec.
	* sem_util.ads (Copy_Subprogram_Spec): Add New_Sloc parameter.
	* sem_util.adb (Copy_Subprogram_Spec): Pass New_Sloc to
	New_Copy_Tree.
2022-01-05 11:32:35 +00:00
Yannick Moy
af28783eb4 [Ada] Proof of runtime units for integer exponentiation (checks off)
gcc/ada/

	* libgnat/s-exnint.ads: Mark in SPARK. Adapt to change to
	package.
	* libgnat/s-exnlli.ads: Likewise.
	* libgnat/s-exnllli.ads: Likewise.
	* libgnat/s-exponn.adb: Add lemmas and ghost code. Secial case
	value zero as Left or Right to simplify proof.
	* libgnat/s-exponn.ads: Transform the generic function into a
	generic package with a function inside. Add a functional
	contract.
2022-01-05 11:32:35 +00:00
Piotr Trojanek
8ec9fd41cf [Ada] Remove redundant code related to instances with formal subprograms
gcc/ada/

	* sem_ch12.adb (Instantiate_Formal_Subprogram): Remove redundant
	call to Set_Defining_Unit_Name; a similar call is done few lines
	below.
2022-01-05 11:32:35 +00:00
Piotr Trojanek
a714d2b000 [Ada] Fix sharing of formal parameters between wrapper spec and body
gcc/ada/

	* exp_ch3.adb (Make_Controlling_Function_Wrappers): Create
	distinct copies of parameter lists for spec and body with
	Copy_Parameter_List; cleanup.
	(Make_Null_Procedure_Specs): Fix style in comments; remove a
	potentially unnecessary initialization of a local variable.
2022-01-05 11:32:34 +00:00
Bob Duff
0f93c574cb [Ada] Renamed_Entity should return Entity_Id
gcc/ada/

	* einfo-utils.ads, einfo-utils.adb (Renamed_Entity Alias):
	Change Node_Id to Entity_Id.
2022-01-05 11:32:34 +00:00
Piotr Trojanek
06faf927cb [Ada] Deconstruct dead wrappers added for external axiomatization
gcc/ada/

	* sem_ch12.ads (Build_Function_Wrapper, Build_Operator_Wrapper):
	Remove unreferenced spec.
	* sem_ch12.adb (Build_Function_Wrapper, Build_Operator_Wrapper):
	Remove dead bodies.
2022-01-05 11:32:34 +00:00
Yannick Moy
1a056c2788 [Ada] Rename parameter-dependent constants in generic unit
gcc/ada/

	* libgnat/s-aridou.adb: Apply replacement.
2022-01-05 11:32:34 +00:00
Yannick Moy
50d8b1066a [Ada] Fix lemma in generic unit System.Arith_Double
gcc/ada/

	* libgnat/s-aridou.adb (Lemma_Word_Commutation): Fix for
	instances with other values of Single_Size.
2022-01-05 11:32:34 +00:00
Marc Poulhiès
acdf2f079b [Ada] Remove Compiler_Unit[_Warning] pragmas
gcc/ada/

	* doc/gnat_rm/implementation_defined_pragmas.rst (Compiler_Unit)
	(Compiler_Unit_Warning): Remove.
	* gnat-style.texi, gnat_rm.texi, gnat_ugn.texi: Regenerate.
	* libgnat/g-dynhta.ads: Add comment indicating this unit is
	built during stage1.
	* libgnat/g-dyntab.ads: Likewise.
	* libgnat/g-graphs.ads: Likewise.
	* libgnat/g-lists.ads: Likewise.
	* libgnat/g-sets.ads: Likewise.
	* libgnat/gnat.ads: Likewise.
	* libgnat/s-pehage.ads: Likewise.
	* libgnat/s-resfil.ads: Likewise.
	* libgnat/s-rident.ads: Likewise.
	* libgnat/s-utf_32.ads: Likewise.
	* errout.ads: Update comment.
	* opt.ads (Opt): Remove Compiler_Unit.
	* par-ch5.adb (All_Pragmas): Remove call to Check_Compiler_Unit.
	* sem_prag.adb (Analyze_Pragma): Likewise.
	* sem_ch4.adb (Non_Static_Choice_Error, Analyze_If_Expression)
	(Analyze_Set_Membership, Record_Interp): Likewise.
	* sem_ch11.adb (Analyze_Raise_Expression): Likewise.
	* sem_ch6.adb: Remove Restric package reference.
	(Analyze_Extended_Return_Statement): Remove call to
	Check_Compiler_Unit.
	* par-prag.adb (Process_Restrictions_Or_Restriction_Warnings):
	Remove handling of Pragma_Compiler_Unit[_Warning}.
	* restrict.adb (Check_Compiler_Unit): Remove both.
	* restrict.ads: Likewise.
	* snames.ads-tmpl (Pragma_Id): Remove
	Pragma_Compiler_Unit[_Warning].
	* libgnat/a-assert.ads: Remove pragma Compiler_Unit_Warning.
	* libgnat/a-chlat1.ads: Likewise.
	* libgnat/a-elchha.adb: Likewise.
	* libgnat/a-elchha.ads: Likewise.
	* libgnat/a-ioexce.ads: Likewise.
	* libgnat/a-strhas.ads: Likewise.
	* libgnat/g-byorma.adb: Likewise.
	* libgnat/g-byorma.ads: Likewise.
	* libgnat/g-dyntab.adb: Likewise.
	* libgnat/g-heasor.ads: Likewise.
	* libgnat/g-hesora.adb: Likewise.
	* libgnat/g-hesora.ads: Likewise.
	* libgnat/g-htable.adb: Likewise.
	* libgnat/g-htable.ads: Likewise.
	* libgnat/g-spchge.adb: Likewise.
	* libgnat/g-spchge.ads: Likewise.
	* libgnat/g-speche.adb: Likewise.
	* libgnat/g-speche.ads: Likewise.
	* libgnat/g-table.ads: Likewise.
	* libgnat/g-u3spch.adb: Likewise.
	* libgnat/g-u3spch.ads: Likewise.
	* libgnat/interfac.ads: Likewise.
	* libgnat/s-addope.adb: Likewise.
	* libgnat/s-addope.ads: Likewise.
	* libgnat/s-assert.adb: Likewise.
	* libgnat/s-assert.ads: Likewise.
	* libgnat/s-bitops.adb: Likewise.
	* libgnat/s-bitops.ads: Likewise.
	* libgnat/s-carun8.adb: Likewise.
	* libgnat/s-carun8.ads: Likewise.
	* libgnat/s-casuti.adb: Likewise.
	* libgnat/s-casuti.ads: Likewise.
	* libgnat/s-conca2.adb: Likewise.
	* libgnat/s-conca2.ads: Likewise.
	* libgnat/s-conca3.adb: Likewise.
	* libgnat/s-conca3.ads: Likewise.
	* libgnat/s-conca4.adb: Likewise.
	* libgnat/s-conca4.ads: Likewise.
	* libgnat/s-conca5.adb: Likewise.
	* libgnat/s-conca5.ads: Likewise.
	* libgnat/s-conca6.adb: Likewise.
	* libgnat/s-conca6.ads: Likewise.
	* libgnat/s-conca7.adb: Likewise.
	* libgnat/s-conca7.ads: Likewise.
	* libgnat/s-conca8.adb: Likewise.
	* libgnat/s-conca8.ads: Likewise.
	* libgnat/s-conca9.adb: Likewise.
	* libgnat/s-conca9.ads: Likewise.
	* libgnat/s-crc32.adb: Likewise.
	* libgnat/s-crc32.ads: Likewise.
	* libgnat/s-crtl.ads: Likewise.
	* libgnat/s-excdeb.adb: Likewise.
	* libgnat/s-excdeb.ads: Likewise.
	* libgnat/s-except.ads: Likewise.
	* libgnat/s-exctab.adb: Likewise.
	* libgnat/s-exctab.ads: Likewise.
	* libgnat/s-finmas.ads: Likewise.
	* libgnat/s-htable.adb: Likewise.
	* libgnat/s-htable.ads: Likewise.
	* libgnat/s-mastop.adb: Likewise.
	* libgnat/s-mastop.ads: Likewise.
	* libgnat/s-memory.adb: Likewise.
	* libgnat/s-memory.ads: Likewise.
	* libgnat/s-os_lib.ads: Likewise.
	* libgnat/s-parame.adb: Likewise.
	* libgnat/s-parame.ads: Likewise.
	* libgnat/s-parame__posix2008.ads: Likewise.
	* libgnat/s-purexc.ads: Likewise.
	* libgnat/s-resfil.adb: Likewise.
	* libgnat/s-restri.adb: Likewise.
	* libgnat/s-restri.ads: Likewise.
	* libgnat/s-secsta.adb: Likewise.
	* libgnat/s-secsta.ads: Likewise.
	* libgnat/s-soflin.adb: Likewise.
	* libgnat/s-soflin.ads: Likewise.
	* libgnat/s-sopco3.adb: Likewise.
	* libgnat/s-sopco3.ads: Likewise.
	* libgnat/s-sopco4.adb: Likewise.
	* libgnat/s-sopco4.ads: Likewise.
	* libgnat/s-sopco5.adb: Likewise.
	* libgnat/s-sopco5.ads: Likewise.
	* libgnat/s-spsufi.ads: Likewise.
	* libgnat/s-stache.adb: Likewise.
	* libgnat/s-stache.ads: Likewise.
	* libgnat/s-stalib.adb: Likewise.
	* libgnat/s-stalib.ads: Likewise.
	* libgnat/s-stoele.adb: Likewise.
	* libgnat/s-stoele.ads: Likewise.
	* libgnat/s-strcom.adb: Likewise.
	* libgnat/s-strcom.ads: Likewise.
	* libgnat/s-strhas.adb: Likewise.
	* libgnat/s-string.adb: Likewise.
	* libgnat/s-string.ads: Likewise.
	* libgnat/s-strops.adb: Likewise.
	* libgnat/s-strops.ads: Likewise.
	* libgnat/s-ststop.adb: Likewise.
	* libgnat/s-ststop.ads: Likewise.
	* libgnat/s-traceb.adb: Likewise.
	* libgnat/s-traceb.ads: Likewise.
	* libgnat/s-traent.adb: Likewise.
	* libgnat/s-traent.ads: Likewise.
	* libgnat/s-utf_32.adb: Likewise.
	* libgnat/s-unstyp.ads: Likewise.
	* libgnat/s-wchcnv.adb: Likewise.
	* libgnat/s-wchcnv.ads: Likewise.
	* libgnat/s-wchcon.adb: Likewise.
	* libgnat/s-wchcon.ads: Likewise.
	* libgnat/s-wchjis.adb: Likewise.
	* libgnat/s-wchjis.ads: Likewise.
2022-01-05 11:32:34 +00:00
Arnaud Charlet
1fc93860a5 [Ada] Reduce runtime dependencies on stage1
gcc/ada/

	* osint.adb (File_Names_Equal): Declare To_Lower locally.
	* osint.ads (Null_FD): New.
	* fmap.adb, sinput-l.adb, targparm.adb: Adapt to changes above.
	* switch-b.adb (Scan_Debug_Switches): Use Is_Regular_File to
	simplify the bootstrap dependencies.
2022-01-05 11:32:33 +00:00
Richard Biener
1021b72bf6 tree-optimization/103816 - detect offset overflow in SLP group analysis
This makes sure to detect overflow when computing DR_GROUP_GAP
and DR_GROUP_SIZE more thoroughly so artificial testcases like the
added one are not fooling the existing check.

2022-01-05  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/103816
	* tree-vect-data-refs.c (vect_analyze_group_access_1): Also
	check DR_GROUP_GAP compute for overflow and representability.

	* gcc.dg/torture/pr103816.c: New testcase.
2022-01-05 11:56:36 +01:00
Jakub Jelinek
a4c2e62d60 gimple-fold: Remove incorrect folding of debug stmts [PR103691]
For ADDR_EXPR gimple_debug_bind_get_value fold_stmt_1 uses
maybe_canonicalize_mem_ref_addr earlier and I think that should
resolve the concerns raised in PR52329.  But folding ADDR_EXPR
operand using maybe_fold_reference and then taking address of that
looks like an invalid transformation, it can transform
  # DEBUG D.4293 => &a[0]
into
  # DEBUG D.4293 => &2.0e+0
etc., all we want to allow are the lhs folding of the operand which
maybe_fold_reference no longer does since r12-21-g0bf8cd9d5e8ac.

2022-01-05  Jakub Jelinek  <jakub@redhat.com>

	PR fortran/103691
	* gimple-fold.c (fold_stmt_1): Don't call maybe_fold_reference
	for DEBUG stmts with ADDR_EXPR gimple_debug_bind_get_value,
	it can do unwanted rhs folding like &a[0] into &2.0 etc.

	* gfortran.dg/pr103691.f90: New test.
2022-01-05 10:45:26 +01:00
Jakub Jelinek
4ce3bd7993 testsuite: Fix gcc.target/i386/pr103895.c testcase [PR103895]
The testcase uses SSE and SSE2 intrinsics, so fails on i686-linux
if -msse2 isn't enabled by default.  Fixed by adding -msse2 to
dg-options.

2022-01-05  Jakub Jelinek  <jakub@redhat.com>

	PR target/103895
	* gcc.target/i386/pr103895.c: Add -msse2 to dg-options.
2022-01-05 10:03:18 +01:00
Kewen Lin
0fc60c1833 ipa-inline: Add target info into fn summary [PR102059]
Power ISA 2.07 (Power8) introduces transactional memory
feature but ISA3.1 (Power10) removes it.  It exposes one
troublesome issue as PR102059 shows.  Users define some
function with target pragma cpu=power10 then it calls one
function with attribute always_inline which inherits
command line option -mcpu=power8 which enables HTM
implicitly.  The current isa_flags check doesn't allow this
inlining due to "target specific option mismatch" and error
mesasge is emitted.

Normally, the callee function isn't intended to exploit HTM
feature, but the default flag setting make it look it has.
As Richi raised in the PR, we have fp_expressions flag in
function summary, and allow us to check the function
actually contains any floating point expressions to avoid
overkill.  So this patch follows the similar idea but is
more target specific, for this rs6000 port specific
requirement on HTM feature check, we would like to check
rs6000 specific HTM built-in functions and inline assembly,
it allows targets to do their own customized checks and
updates.

It introduces two target hooks need_ipa_fn_target_info and
update_ipa_fn_target_info.  The former allows target to do
some previous check and decides to collect target specific
information for this function or not.  For some special
case, it can predict the analysis result and set it early
without any scannings.  The latter allows the
analyze_function_body to pass gimple stmts down just like
fp_expressions handlings, target can do its own tricks.
I put them together as one hook initially with one boolean
to indicate whether it's initial time, but the code looks a
bit ugly, to separate them seems to have better readability.

gcc/ChangeLog:

	PR ipa/102059
	* config/rs6000/rs6000.c (TARGET_NEED_IPA_FN_TARGET_INFO): New macro.
	(TARGET_UPDATE_IPA_FN_TARGET_INFO): Likewise.
	(rs6000_need_ipa_fn_target_info): New function.
	(rs6000_update_ipa_fn_target_info): Likewise.
	(rs6000_can_inline_p): Adjust for ipa function summary target info.
	* config/rs6000/rs6000.h (RS6000_FN_TARGET_INFO_HTM): New macro.
	* ipa-fnsummary.c (ipa_dump_fn_summary): Adjust for ipa function
	summary target info.
	(analyze_function_body): Adjust for ipa function summary target info
	and call hook rs6000_need_ipa_fn_target_info and
	rs6000_update_ipa_fn_target_info.
	(ipa_merge_fn_summary_after_inlining): Adjust for ipa function summary
	target info.
	(inline_read_section): Likewise.
	(ipa_fn_summary_write): Likewise.
	* ipa-fnsummary.h (ipa_fn_summary::target_info): New member.
	* doc/tm.texi: Regenerate.
	* doc/tm.texi.in (TARGET_UPDATE_IPA_FN_TARGET_INFO): Document new hook.
	(TARGET_NEED_IPA_FN_TARGET_INFO): Likewise.
	* target.def (update_ipa_fn_target_info): New hook.
	(need_ipa_fn_target_info): Likewise.
	* targhooks.c (default_need_ipa_fn_target_info): New function.
	(default_update_ipa_fn_target_info): Likewise.
	* targhooks.h (default_update_ipa_fn_target_info): New declare.
	(default_need_ipa_fn_target_info): Likewise.

gcc/testsuite/ChangeLog:

	PR ipa/102059
	* gcc.dg/lto/pr102059-1_0.c: New test.
	* gcc.dg/lto/pr102059-1_1.c: New test.
	* gcc.dg/lto/pr102059-1_2.c: New test.
	* gcc.dg/lto/pr102059-2_0.c: New test.
	* gcc.dg/lto/pr102059-2_1.c: New test.
	* gcc.dg/lto/pr102059-2_2.c: New test.
	* gcc.target/powerpc/pr102059-1.c: New test.
	* gcc.target/powerpc/pr102059-2.c: New test.
	* gcc.target/powerpc/pr102059-3.c: New test.
2022-01-04 20:27:18 -06:00
Ian Lance Taylor
a0239f8525 compiler: remove duplication of Named_object traversal
Adding type parameters was about to add a partial third version.
Remove the duplication to avoid that.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/375234
2022-01-04 16:20:05 -08:00
GCC Administrator
7d11b64b18 Daily bump. 2022-01-05 00:16:52 +00:00
Martin Sebor
5a431b60d1 Eenable -Winvalid-memory-order for C++ [PR99612].
Resolves:
PR middle-end/99612 - Remove "#pragma GCC system_header" from atomic file to warn on incorrect memory order

gcc/ChangeLog:

	PR middle-end/99612
	* builtins.c (get_memmodel): Move warning code to
	gimple-ssa-warn-access.cc.
	(expand_builtin_atomic_compare_exchange): Same.
	(expand_ifn_atomic_compare_exchange): Same.
	(expand_builtin_atomic_load): Same.
	(expand_builtin_atomic_store): Same.
	(expand_builtin_atomic_clear): Same.
	* doc/extend.texi (__atomic_exchange_n): Update valid memory
	models.
	* gimple-ssa-warn-access.cc (memmodel_to_uhwi): New function.
	(struct memmodel_pair): New struct.
	(memmodel_name): New function.
	(pass_waccess::maybe_warn_memmodel): New function.
	(pass_waccess::check_atomic_memmodel): New function.
	(pass_waccess::check_atomic_builtin): Handle memory model.
	* input.c (expansion_point_location_if_in_system_header): Return
	original location if expansion location is in a system header.

gcc/testsuite/ChangeLog:

	PR middle-end/99612
	* c-c++-common/pr83059.c: Adjust text of expected diagnostics.
	* gcc.dg/atomic-invalid-2.c: Same.
	* gcc.dg/atomic-invalid.c: Same.
	* c-c++-common/Winvalid-memory-model.c: New test.
	* g++.dg/warn/Winvalid-memory-model-2.C: New test.
	* g++.dg/warn/Winvalid-memory-model.C: New test.
2022-01-04 13:44:23 -07:00
Uros Bizjak
708b87dcb6 i386: Introduce V2QImode vectorized logic [PR103861]
Add V2QImode logic operations with SSE and GP registers and split
them to V4QImode SSE instructions or SImode GP instructions.

The patch also fixes PR target/103900.

2022-01-04  Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:

	PR target/103861
	* config/i386/mmx.md (one_cmplv2qi3): New insn pattern.
	(one_cmplv2qi3 splitters): New post-reload splitters.
	(*andnotv2qi3): New insn pattern.
	(andnotv2qi3 splitters): New post-reload splitters.
	(<any_logic:code>v2qi3): New insn pattern.
	(<any_logic:insn>v2qi3 splitters): New post-reload splitters.

gcc/testsuite/ChangeLog:

	PR target/103861
	* gcc.target/i386/warn-vect-op-2.c: Adjust warnings.
	* gcc.target/i386/pr103900.c: New test.
2022-01-04 19:43:54 +01:00
Jason Merrill
dd80200324 c++: add begin/end to releasing_vec
So C++11 range-for will work.

gcc/cp/ChangeLog:

	* cp-tree.h (class releasing_vec): Add begin/end fns.
2022-01-04 12:57:31 -05:00
Jason Merrill
71c5b8bac3 c++: add emacs c++-mode marker
gcc/cp/ChangeLog:

	* init.c: Include -*- C++ -*- on first line.
2022-01-04 12:57:31 -05:00
Gaius Mulley
0c9b04e530 MAINTAINERS: Change of email address.
Change email address in both DCO and Write After Approval list.

2022-01-04  Gaius Mulley  <gaiusmod2@gmail.com>

ChangeLog:

	* MAINTAINERS: Change of email address in both DCO and
	Write After Approval list.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
2022-01-04 17:25:29 +00:00
Richard Biener
88e861655b tree-optimization/103800 - sanity check more PHI vectorization
Bool pattern detection doesn't really handle PHIs well so we have
to be prepared for mismatched vector types in more cases than
originally thought.

2022-01-04  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/103800
	* tree-vect-loop.c (vectorizable_phi): Remove assert and
	expand comment.

	* gcc.dg/vect/bb-slp-pr103800.c: New testcase.
2022-01-04 16:51:53 +01:00
Florian Weimer
790854ea76 libgcc: Use _dl_find_object in _Unwind_Find_FDE
libgcc/ChangeLog:

	* unwind-dw2-fde-dip.c (_Unwind_Find_FDE): Call _dl_find_object
	if available.
2022-01-04 15:47:30 +01:00
Tobias Burnus
be661959a6 libgomp/testsuite: Improve omp_get_device_num() tests
Related to r12-6208-gebc853deb7cc0487de9ef6e891a007ba853d1933
"libgomp: Fix GOMP_DEVICE_NUM_VAR stringification during offload image load"

That commit fixed an issue with omp_get_device_num() on gcn/nvptx that
resulted in having always the value 0.
This commit modifies the tests to iterate over all devices such that on a
multi-nonhost-device system it had detected that always-zero issue.

libgomp/ChangeLog:

	* testsuite/libgomp.c-c++-common/target-45.c: Iterate over all devices.
	* testsuite/libgomp.fortran/target10.f90: Likewise.
2022-01-04 14:58:06 +01:00
Richard Biener
ebc853deb7 tree-optimization/103690 - not up-to-date SSA and PRE DCE
This avoids running simple_dce_from_worklist on partially not up-to-date
SSA form (in unreachable code regions) by scheduling CFG cleanup
manually as is done anyway when tail-merging runs.

2022-01-04  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/103690
	* tree-pass.h (tail_merge_optimize): Adjust.
	* tree-ssa-tail-merge.c (tail_merge_optimize): Pass in whether
	to re-split critical edges, move CFG cleanup ...
	* tree-ssa-pre.c (pass_pre::execute): ... here, before
	simple_dce_from_worklist and delay freeing inserted_exprs from
	...
	(fini_pre): .. here.
2022-01-04 13:17:14 +01:00
Roger Sayle
beed3f8f60 nvptx: Transition nvptx backend to STORE_FLAG_VALUE = 1
This patch to the nvptx backend changes the backend's STORE_FLAG_VALUE
from -1 to 1, by using BImode predicates and selp instructions, instead
of set instructions (almost always followed by integer negation).

Historically, it was reasonable (through rare) for backends to use -1
for representing true during the RTL passes.  However with tree-ssa,
GCC now emits lots of code that reads and writes _Bool values, requiring
STORE_FLAG_VALUE=-1 targets to frequently convert 0/-1 pseudos to 0/1
pseudos using integer negation.  Unfortunately, this process prevents
or complicates many optimizations (negate isn't associative with logical
AND, OR and XOR, and interferes with range/vrp/nonzerobits bounds etc.).

The impact of this is that for a relatively simple logical expression
like "return (x==21) && (y==69);", the nvptx backend currently generates:

                mov.u32 %r26, %ar0;
                mov.u32 %r27, %ar1;
                set.u32.eq.u32  %r30, %r26, 21;
                neg.s32 %r31, %r30;
                mov.u32 %r29, %r31;
                set.u32.eq.u32  %r33, %r27, 69;
                neg.s32 %r34, %r33;
                mov.u32 %r32, %r34;
                cvt.u16.u8      %r39, %r29;
                mov.u16 %r36, %r39;
                cvt.u16.u8      %r39, %r32;
                mov.u16 %r37, %r39;
                and.b16 %r35, %r36, %r37;
                cvt.u32.u16     %r38, %r35;
                cvt.u32.u8      %value, %r38;

This patch tweaks nvptx to generate 0/1 values instead, requiring the
same number of instructions, using (BImode) predicate registers and selp
instructions so as to now generate the almost identical:

                mov.u32 %r26, %ar0;
                mov.u32 %r27, %ar1;
                setp.eq.u32     %r31, %r26, 21;
                selp.u32        %r30, 1, 0, %r31;
                mov.u32 %r29, %r30;
                setp.eq.u32     %r34, %r27, 69;
                selp.u32        %r33, 1, 0, %r34;
                mov.u32 %r32, %r33;
                cvt.u16.u8      %r39, %r29;
                mov.u16 %r36, %r39;
                cvt.u16.u8      %r39, %r32;
                mov.u16 %r37, %r39;
                and.b16 %r35, %r36, %r37;
                cvt.u32.u16     %r38, %r35;
                cvt.u32.u8      %value, %r38;

The hidden benefit is that this sequence can (in theory) be optimized
by the RTL passes to eventually generate a much shorter sequence using
an and.pred instruction (just like Nvidia's nvcc compiler).

This patch has been tested nvptx-none with a "make" and "make -k check"
(including newlib) hosted on x86_64-pc-linux-gnu with no new failures.

gcc/ChangeLog:

	* config/nvptx/nvptx.h (STORE_FLAG_VALUE): Change to 1.
	* config/nvptx/nvptx.md (movbi): Use P1 constraint for true.
	(setcc_from_bi): Remove SImode specific pattern.
	(setcc<mode>_from_bi): Provide more general HSDIM pattern.
	(extendbi<mode>2, zeroextendbi<mode>2): Provide instructions
	for sign- and zero-extending BImode predicates to integers.
	(setcc_int<mode>): Remove previous (-1-based) instructions.
	(cstorebi4): Remove BImode to SImode specific expander.
	(cstore<mode>4): Fix indentation.  Expand using setccsi_from_bi.
	(cstore<mode>4): For both integer and floating point modes.
2022-01-04 12:28:02 +01:00
Olivier Hainque
a54d11749f Adjust VxWorks fixincludes hack for mkdir to work for C++
For VxWorks, replace an attempt at providing a posix API for
mkdir via macro by a varargs prototype, which works better for
C++ references like std::mkdir(arg1, arg2).

2021-12-16  Olivier Hainque  <hainque@adacore.com>

fixincludes/
	* inclhack.def (vxworks_posix_mkdir): Refine to expose a
	varargs interface.
	* tests/base/sys/stat.h: Update expected results.
	* fixincl.x: Regenerate.
2022-01-04 10:27:11 +00:00
Olivier Hainque
48e2d9b7b8 Register --sysroot in the driver switches table
This change adjusts the processing of --sysroot to save the option in the
internal "switches" array, which lets self-specs test for it and provide a
default value possibly dependent on environment variables, as in

  --with-specs=%{!-sysroot*:--sysroot=%:getenv("WIND_BASE" /target)}

2021-12-20  Olivier Hainque  <hainque@adacore.com>

gcc/
	* gcc.c (driver_handle_option): do_save --sysroot.
2022-01-04 10:16:01 +00:00
Chung-Lin Tang
fbb592407c libgomp: Fix GOMP_DEVICE_NUM_VAR stringification during offload image load
In the patch that implemented omp_get_device_num(), there was an error where
the stringification of GOMP_DEVICE_NUM_VAR, which is the macro expanding to
the actual symbol used, was erroneously using the STRINGX() macro in the
libgomp offload image symbol search, and expansion of the variable name
string through the additional layer of preprocessor symbol was not properly
achieved.

This patch fixes this by changing to properly use XSTRING(), also from
include/symcat.h.

libgomp/ChangeLog:

	* plugin/plugin-gcn.c (GOMP_OFFLOAD_load_image): Change uses of STRINGX
	into XSTRING when looking for GOMP_DEVICE_NUM_VAR in offload image.
	* plugin/plugin-nvptx.c (GOMP_OFFLOAD_load_image): Likewise.
2022-01-04 17:26:23 +08:00
Richard Biener
1a15451da1 tree-optimization/103864 - SLP reduction of reductions with conversions
This generalizes the fix for PR103544 to also cover reductions that
are not reduction chains and does not consider reductions wrapped in
sign conversions for SLP reduction handling.

2022-01-04  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/103864
	PR tree-optimization/103544
	* tree-vect-slp.c (vect_analyze_slp_instance): Exclude
	reductions wrapped in conversions from SLP handling.
	(vect_analyze_slp): Revert PR103544 change.

	* gcc.dg/vect/pr103864.c: New testcase.
2022-01-04 10:16:28 +01:00
Jakub Jelinek
801b2c880c shrink-wrapping: Don't call can_get_prologue unnecessarily [PR103860]
On Thu, Dec 30, 2021 at 04:08:25AM -0600, Segher Boessenkool wrote:
> > The following simple patch makes sure we call can_get_prologue even after
> > the last former iteration when vec is already empty and only break from
> > the loop afterwards (and only if the updating of pro done because of
> > !can_get_prologue didn't push anything into vec again).

During the development of the above patch I've noticed that in many cases
we call can_get_prologue often on the same pro again and again and again,
we can have many basic blocks pushed into vec and if most of those don't
require pro updates, i.e.
      basic_block bb = vec.pop ();
      if (!can_dup_for_shrink_wrapping (bb, pro, max_grow_size))
        while (!dominated_by_p (CDI_DOMINATORS, bb, pro))
isn't true, then pro is can_get_prologue checked for each bb in the vec.

The following simple patch just remembers which bb we've verified already
and verifies again only when pro changes.  Most of the patch is just
reindentation.

2022-01-04  Jakub Jelinek  <jakub@redhat.com>

	PR rtl-optimization/103860
	* shrink-wrap.c (try_shrink_wrapping): Don't call can_get_prologue
	uselessly for blocks for which it has been called already.
2022-01-04 10:12:17 +01:00
Cui,Lili
4bd5297f66 x86: Update model value for Alderlake and Rocketlake
gcc/ChangeLog

	* common/config/i386/cpuinfo.h (get_intel_cpu): Add new model values
	to Alderlake and Rocketlake.
2022-01-04 16:30:41 +08:00
Chung-Lin Tang
62c8b21d48 openmp: Fix ICE in gimplify_omp_affinity [PR103643]
After the PR90030 patch, which removes the universal casting of all Fortran
array pointers to 'c_char*', a Fortran descriptor based array passed into an
affinity() clause now looks like:

-     #pragma omp task private(i) shared(b) affinity(*(c_char *) a.data)
+     #pragma omp task private(i) shared(b) affinity(*(integer(kind=4)[0:] * restrict) a.data)

The 'integer(kind=4)[0:]' incomplete type appears to be causing ICE during
gimplify_expr() due to 'is_gimple_val, fb_rvalue'. The ICE appears to be fixed
just by adjusting to 'is_gimple_lvalue, fb_lvalue'. Considering the use of the
affinity() clause, which should be specifying the location of a particular
object in memory, this probably makes sense.

gcc/ChangeLog:

	PR middle-end/103643

	* gimplify.c (gimplify_omp_affinity): Adjust gimplify_expr of entire
	OMP_CLAUSE_DECL to use 'is_gimple_lvalue, fb_lvalue'

gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/pr103643.f90: New test.
2022-01-04 15:37:15 +08:00
liuhongt
05da96886e Force_reg operand 1.
Avoid ICE of move pattern from memory to memory.

gcc/ChangeLog:

	PR target/103895
	* config/i386/sse.md (*bit_and_float_vector_all_ones):
	Force_reg operand 1 to avoid ICE.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr103895.c: New test.
2022-01-04 11:49:58 +08:00
Andrew Pinski
d4b710a31d [COMMITTED] c++: [PR90782] Add testcase
This testcase was fixed by r12-1744-g3eecc1 as it make
sense it fixed a few other class deduction issues.
So I thought I would add a testcase for this PR and close
it as fixed.

Committed after a quick test of the testcase.

	PR c++/90782

gcc/testsuite/ChangeLog:

	* g++.dg/cpp1z/class-deduction100.C: New test.
2022-01-04 02:59:58 +00:00
Jason Merrill
43359148b2 tree-pretty-print: still indent unhandled codes
It would be nice to handle language-specific codes in the tree
pretty-printer, but until then we can at least indent them appropriately.

gcc/ChangeLog:

	* tree-pretty-print.c (do_niy): Add spc parameter.
	(NIY): Pass it.
	(print_call_name): Add spc local variable.
2022-01-03 19:36:35 -05:00
GCC Administrator
a4ae8c3701 Daily bump. 2022-01-04 00:16:40 +00:00
Marek Polacek
bb936163e2 c-family: Have -Wformat-diag accept "decl-specifier" [PR103758]
I'm tired of seeing

cp/parser.c:15923:55: warning: misspelled term 'decl' in format; use 'declaration' instead [-Wformat-diag]
cp/parser.c:15925:57: warning: misspelled term 'decl' in format; use 'declaration' instead [-Wformat-diag]

every time I compile cp/parser.c, which happens...a lot.  I'd like my
compilation to be free of warnings, otherwise I'm going to miss some
important ones.

"decl-specifiers" is a C++ grammar term; it is not actual code, so
should not be wrapped with %< %>.  I hope we can accept it as an exception
in check_tokens.

It was surrounded by %< %> in cp_parser_decl_specifier_seq, so fix that.

In passing, fix a misspelling in missspellings.

	PR c++/103758

gcc/c-family/ChangeLog:

	* c-format.c (check_tokens): Accept "decl-specifier*".

gcc/cp/ChangeLog:

	* parser.c (cp_parser_decl_specifier_seq): Replace %<decl-specifier%>
	with %qD.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/constexpr-condition.C: Adjust dg-error.
2022-01-03 15:53:59 -05:00
Uros Bizjak
1096ab1775 i386: Always enable mov<V_32:mode> patterns [PR103894]
Middle end tries to generate V4QImode moves to implement V2QImode inserts
and calls emit_move_multi_word when V4QImode moves are unavailable, as is
the case with 32-bit vector moves, constrainted with TARGET_SSE2.

However, this triggers

  gcc_assert (mode_size >= UNITS_PER_WORD);

in emit_move_multi_word, since mode_size of V4QImode operand is less than
UNITS_PER_WORD of 64-bit targets.

The patch unconditionally enables 32-bit vector moves to match 16-bit
vector moves.  This also enables implementation of 32-bit vector logic
operations with GPR in a follow-up patch.

2022-01-03  Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:

	PR target/103894
	* config/i386/mmx.md (mov<V_32:mode>): Remove TARGET_SSE2 constraint.
	(mov<V_32:mode>_internal): Ditto.
	(*push<V_32:mode>_rex64): Ditto.
	(movmisalign<V_32:mode>): Ditto.
	(*push<V_32:mode>_rex64 splitter): Enable for
	TARGET_64BIT && TARGET_SSE.
	(*push<V_32:mode>2): Remove insn pattern.

gcc/testsuite/ChangeLog:

	PR target/103894
	* gcc.target/i386/pr103894.c: New test.
2022-01-03 20:59:19 +01:00
Marek Polacek
122a75488c c++: Avoid narrowing in make_char_string_pack
This fixes

gcc/cp/parser.c:4618:41: warning: narrowing conversion of '(char)(*(str + ((sizetype)i)))' from 'char' to 'unsigned char' [-Wnarrowing]
 4618 |       unsigned char s[3] = { '\'', str[i], '\'' };
      |                                    ~~~~~^

gcc/cp/ChangeLog:

	* parser.c (make_char_string_pack): Add a cast to const unsigned
	char *.
2022-01-03 14:00:34 -05:00
Andrew Pinski
4003ecbced Revamp documentation for _Complex types extension
While cleaning up the bug database, I noticed there was a request
to improve the documentation of the _Complex type extensions.
So I rewrote part of the documentation to make things clearer on
__real/__imag and even added documentation about casts between
the scalar and the complex type.
I moved the documentation of __builtin_complex under this section
too because it makes more sense than having it in the other
built-in section and reference it.

OK? Built make info and make html and checked out the results to
make sure the tables look decent.

gcc/ChangeLog:

	PR c/33193
	* doc/extend.texi: Extend the documentation about Complex
	types for casting and also rewrite the __real__/__imag__
	expression portion to use tables.
	Move __builtin_complex to the Complex type section.
2022-01-03 17:52:59 +00:00
Sandra Loosemore
6447f6f983 Fortran: Fix array copy-in/copy-out for BIND(C) functions [PR103390]
The Fortran front end was generating invalid code for the array
copy-out after a call to a BIND(C) function for a dummy with the
CONTIGUOUS attribute when the actual argument was a call to the SHAPE
intrinsic or other array expressions that are not lvalues.  It was
also generating code to evaluate the argument expression multiple
times on copy-in.  This patch teaches it to recognize that a copy is
not needed in these cases.

2022-01-03  Sandra Loosemore  <sandra@codesourcery.com>

	PR fortran/103390

	gcc/fortran/
	* expr.c (gfc_is_simply_contiguous): Make it smarter about
	function calls.
	* trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): Do not generate
	copy loops for array expressions that are not "variables" (lvalues).

	gcc/testsuite/
	* gfortran.dg/c-interop/pr103390-1.f90: New.
	* gfortran.dg/c-interop/pr103390-2.f90: New.
	* gfortran.dg/c-interop/pr103390-3.f90: New.
	* gfortran.dg/c-interop/pr103390-4.f90: New.
	* gfortran.dg/c-interop/pr103390-6.f90: New.
	* gfortran.dg/c-interop/pr103390-7.f90: New.
	* gfortran.dg/c-interop/pr103390-8.f90: New.
	* gfortran.dg/c-interop/pr103390-9.f90: New.
2022-01-03 08:47:38 -08:00
Jakub Jelinek
6362627b27 i386, fab: Optimize __atomic_{add,sub,and,or,xor}_fetch (x, y, z) {==,!=,<,<=,>,>=} 0 [PR98737]
On Wed, Jan 27, 2021 at 12:27:13PM +0100, Ulrich Drepper via Gcc-patches wrote:
> On 1/27/21 11:37 AM, Jakub Jelinek wrote:
> > Would equality comparison against 0 handle the most common cases.
> >
> > The user can write it as
> > __atomic_sub_fetch (x, y, z) == 0
> > or
> > __atomic_fetch_sub (x, y, z) - y == 0
> > thouch, so the expansion code would need to be able to cope with both.
>
> Please also keep !=0, <0, <=0, >0, and >=0 in mind.  They all can be
> useful and can be handled with the flags.

<= 0 and > 0 don't really work well with lock {add,sub,inc,dec}, x86 doesn't
have comparisons that would look solely at both SF and ZF and not at other
flags (and emitting two separate conditional jumps or two setcc insns and
oring them together looks awful).

But the rest can work.

Here is a patch that adds internal functions and optabs for these,
recognizes them at the same spot as e.g. .ATOMIC_BIT_TEST_AND* internal
functions (fold all builtins pass) and expands them appropriately (or for
the <= 0 and > 0 cases of +/- FAILs and let's middle-end fall back).

So far I have handled just the op_fetch builtins, IMHO instead of handling
also __atomic_fetch_sub (x, y, z) - y == 0 etc. we should canonicalize
__atomic_fetch_sub (x, y, z) - y to __atomic_sub_fetch (x, y, z) (and vice
versa).

2022-01-03  Jakub Jelinek  <jakub@redhat.com>

	PR target/98737
	* internal-fn.def (ATOMIC_ADD_FETCH_CMP_0, ATOMIC_SUB_FETCH_CMP_0,
	ATOMIC_AND_FETCH_CMP_0, ATOMIC_OR_FETCH_CMP_0, ATOMIC_XOR_FETCH_CMP_0):
	New internal fns.
	* internal-fn.h (ATOMIC_OP_FETCH_CMP_0_EQ, ATOMIC_OP_FETCH_CMP_0_NE,
	ATOMIC_OP_FETCH_CMP_0_LT, ATOMIC_OP_FETCH_CMP_0_LE,
	ATOMIC_OP_FETCH_CMP_0_GT, ATOMIC_OP_FETCH_CMP_0_GE): New enumerators.
	* internal-fn.c (expand_ATOMIC_ADD_FETCH_CMP_0,
	expand_ATOMIC_SUB_FETCH_CMP_0, expand_ATOMIC_AND_FETCH_CMP_0,
	expand_ATOMIC_OR_FETCH_CMP_0, expand_ATOMIC_XOR_FETCH_CMP_0): New
	functions.
	* optabs.def (atomic_add_fetch_cmp_0_optab,
	atomic_sub_fetch_cmp_0_optab, atomic_and_fetch_cmp_0_optab,
	atomic_or_fetch_cmp_0_optab, atomic_xor_fetch_cmp_0_optab): New
	direct optabs.
	* builtins.h (expand_ifn_atomic_op_fetch_cmp_0): Declare.
	* builtins.c (expand_ifn_atomic_op_fetch_cmp_0): New function.
	* tree-ssa-ccp.c: Include internal-fn.h.
	(optimize_atomic_bit_test_and): Add . before internal fn call
	in function comment.  Change return type from void to bool and
	return true only if successfully replaced.
	(optimize_atomic_op_fetch_cmp_0): New function.
	(pass_fold_builtins::execute): Use optimize_atomic_op_fetch_cmp_0
	for BUILT_IN_ATOMIC_{ADD,SUB,AND,OR,XOR}_FETCH_{1,2,4,8,16} and
	BUILT_IN_SYNC_{ADD,SUB,AND,OR,XOR}_AND_FETCH_{1,2,4,8,16},
	for *XOR* ones only if optimize_atomic_bit_test_and failed.
	* config/i386/sync.md (atomic_<plusminus_mnemonic>_fetch_cmp_0<mode>,
	atomic_<logic>_fetch_cmp_0<mode>): New define_expand patterns.
	(atomic_add_fetch_cmp_0<mode>_1, atomic_sub_fetch_cmp_0<mode>_1,
	atomic_<logic>_fetch_cmp_0<mode>_1): New define_insn patterns.
	* doc/md.texi (atomic_add_fetch_cmp_0<mode>,
	atomic_sub_fetch_cmp_0<mode>, atomic_and_fetch_cmp_0<mode>,
	atomic_or_fetch_cmp_0<mode>, atomic_xor_fetch_cmp_0<mode>): Document
	new named patterns.

	* gcc.target/i386/pr98737-1.c: New test.
	* gcc.target/i386/pr98737-2.c: New test.
	* gcc.target/i386/pr98737-3.c: New test.
	* gcc.target/i386/pr98737-4.c: New test.
	* gcc.target/i386/pr98737-5.c: New test.
	* gcc.target/i386/pr98737-6.c: New test.
	* gcc.target/i386/pr98737-7.c: New test.
2022-01-03 14:17:26 +01:00
Richard Biener
4911609fbe middle-end/103851 - ensure SSA names are released during OMP lowering
This makes sure to release moved & remapped SSA names during OMP
outlining which happens before going into SSA but with SSA names
created by gimplification around.

2022-01-03  Richard Biener  <rguenther@suse.de>

	PR middle-end/103851
	* tree-cfg.c (move_sese_region_to_fn): Always release SSA names.

	* g++.dg/gomp/pr103851.C: New testcase.
2022-01-03 13:51:24 +01:00
Jakub Jelinek
91031bffa4 symtab: Fold &a == &b to 0 if folding_initializer [PR94716]
On Thu, Dec 09, 2021 at 06:09:12PM -0500, Jason Merrill wrote:
> For the more general comparison of decls like your a != b example above I
> think clang is in the right; in manifestly constant-evaluated context
> (folding_initializer) we should return that they are unequal and prevent a
> later alias declaration, like we do for comparison to 0 in
> maybe_nonzero_address.  It's possible that this gives a wrong answer based
> on something in another translation unit, but that's unlikely, and taking
> that chance seems better than rejecting code that needs a constant answer.

I agree.  This is an incremental patch to do that.

2022-01-03  Jakub Jelinek  <jakub@redhat.com>

	PR c++/94716
gcc/
	* symtab.c: Include fold-const.h.
	(symtab_node::equal_address_to): If folding_initializer is true,
	handle it like memory_accessed.  Simplify.
gcc/testsuite/
	* gcc.dg/init-compare-1.c: New test.
	* g++.dg/cpp0x/constexpr-compare1.C: New test.
	* g++.dg/cpp1y/constexpr-94716.C: New test.
	* g++.dg/cpp1z/constexpr-compare1.C: New test.
2022-01-03 13:47:53 +01:00
Martin Liska
814c221c9e testsuite: fix ASAN errors in i386.exp tests
gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx2-i32gatherpd256-4.c: Fix ASAN errors.
	* gcc.target/i386/avx2-i32gatherq256-4.c: Likewise.
	* gcc.target/i386/avx2-i64gatherpd256-4.c: Likewise.
	* gcc.target/i386/avx2-i64gatherq256-4.c: Likewise.
	* gcc.target/i386/avx2-vpabsb256-2.c: Likewise.
	* gcc.target/i386/avx2-vpabsd256-2.c: Likewise.
	* gcc.target/i386/avx2-vpabsw256-2.c: Likewise.
	* gcc.target/i386/avx256-unaligned-load-7.c: Likewise.
	* gcc.target/i386/avx256-unaligned-store-7.c: Likewise.
	* gcc.target/i386/pr64291-1.c: Likewise.
2022-01-03 12:48:59 +01:00