Commit Graph

188224 Commits

Author SHA1 Message Date
Doug Rupp
ab621f4ada [Ada] VxWorks inconsistent use of return type (STATUS)
gcc/ada/

	* libgnarl/s-interr__vxworks.adb (Interfaces.C): Remove as
	unused.
	(System.VxWorks.Ext): Import.
	(System.VxWorks.Ext.STATUS): use type.
	(STATUS): New subtype.
	(OK): New constant.
	(Interrupt_Connector): Return STATUS type vice int.
	(Interrupt_Connect, Notify_Interrupt, Unbind_Handler,
	Interrupt_Server_Task): Rename Status to Result. Assert Result =
	OK.
	* libgnarl/s-osinte__vxworks.adb (To_Clock_Ticks): Define constant
	IERR, and return it vice ERROR.
	(Binary_Semaphore_Delete): Return STATUS type vice int.
	(Binary_Semaphore_Obtain): Likewise.
	(Binary_Semaphore_Release): Likewise.
	(Binary_Semaphore_Flush): Likewise.
	* libgnarl/s-osinte__vxworks.ads (SVE): Renaming of
	System.VxWorks.Ext.
	(STATUS): Use SVE in declaration of subtype.
	(BOOL): Likewise.
	(vx_freq_t): Likewise.
	(t_id): Likewise.
	(gitpid): Use SVE in renaming of subprogram
	(Task_Stop): Likewise.
	(Task_Cont): Likewise.
	(Int_Lock): Likewise.
	(Int_Unlock): Likewise.
	(Set_Time_Slice): Likewise.
	(semDelete): Likewise.
	(taskCpuAffinitySet): Likewise.
	(taskMaskAffinitySet): Likewise.
	(sigset_t): Use SVE in declaration of type.
	(OK): Remove as unused.
	(ERROR): Likewise.
	(taskOptionsGet): return STATUS vice int.
	(taskSuspend): Likewise.
	(taskResume): Likewise.
	(taskDelay): Likewise.
	(taskVarAdd): Likewise.
	(taskVarDelete): Likewise.
	(taskVarSet): Likewise.
	(tlkKeyCreate): Likewise.
	(taskPrioritySet): Likewise.
	(semGive): Likewise.
	(semTake): Likewise.
	(Binary_Semaphore_Delete): Likewise.
	(Binary_Semaphore_Obtain): Likewise.
	(Binary_Semaphore_Release): Likewise.
	(Binary_Semaphore_Flush): Likewise.
	(Interrupt_Connect): Likewise.
	* libgnarl/s-taprop__vxworks.adb
	(System.VxWorks.Ext.STATUS): use type.
	(int): Syntactically align subtype.
	(STATUS): New subtype.
	(OK): New constant.
	(Finalize_Lock): Check STATUS vice int. Assert OK.
	(Finalize_Lock): Likewise.
	(Write_Lock): Likewise.
	(Write_Lock): Likewise.
	(Write_Lock): Likewise.
	(Unlock): Likewise.
	(Unlock): Likewise.
	(Unlock): Likewise.
	(Unlock): Likewise.
	(Sleep): Likewise.
	(Sleep): Likewise.
	(Sleep): Likewise.
	(Timed_Sleep): Likewise and test Result.
	(Timed_Delay): Likewise and test Result.
	(Wakeup): Likewise.
	(Yield): Likewise.
	(Finalize_TCB): Likewise.
	(Suspend_Until_True): Check OK.
	(Stop_All_Tasks): Declare Dummy STATUS vice in.  Check OK.
	(Is_Task_Context): Use OSI renaming.
	(Initialize): Use STATUS vice int.
	* libgnarl/s-vxwext.adb
	(IERR): Renamed from ERROR.
	(taskCpuAffinitySet): Return IERR (int).
	(taskMaskAffinitySet): Likewise.
	* libgnarl/s-vxwext.ads
	(STATUS): New subtype.
	(OK): New STATUS constant.
	(ERROR): Likewise.
	* libgnarl/s-vxwext__kernel-smp.adb
	(IERR): Renamed from ERROR.
	(Int_Lock): Return IERR.
	(semDelete): Return STATUS.
	(Task_Cont): Likewise.
	(Task_Stop): Likewise.
	* libgnarl/s-vxwext__kernel.adb
	(IERR): Renamed from ERROR.
	(semDelete): Return STATUS.
	(Task_Cont): Likewise.
	(Task_Stop): Likewise.
	(taskCpuAffinitySet): Return IERR (int)
	(taskMaskAffinitySet): Likewise.
	* libgnarl/s-vxwext__kernel.ads
	(STATUS): New subtype.
	(OK): New STATUS constant.
	(ERROR): Likewise.
	(Interrupt_Connect): Return STATUS
	(semDelete): Likewise.
	(Task_Cont): Likewise.
	(Task_Stop): Likewise.
	(Set_Time_Slice): Likewise.
	* libgnarl/s-vxwext__rtp-smp.adb
	(IERR): Renamed from ERROR.
	(Int_Lock): return IERR constant vice ERROR.
	(Interrupt_Connect): Return STATUS.
	(semDelete): Likewise.
	(Set_Time_Slice): Likewise.
	* libgnarl/s-vxwext__rtp.adb
	(IERR): Renamed from ERROR.
	(Int_Lock): return IERR constant vice ERROR.
	(Int_Unlock): Return STATUS.
	(semDelete): Likewise.
	(Set_Time_Slice): Likewise.
	(taskCpuAffinitySet): Return IERR (int)
	(taskMaskAffinitySet): Likewise.
	* libgnarl/s-vxwext__rtp.ads
	(STATUS): New subtype.
	(OK): New STATUS constant.
	(ERROR): Likewise.
	(Interrupt_Connect): Return STATUS
	(semDelete): Likewise.
	(Task_Cont): Likewise.
	(Task_Stop): Likewise.
	(Set_Time_Slice): Likewise.
2021-09-22 15:01:48 +00:00
Arnaud Charlet
3d2226f173 [Ada] More flexibility in preprocessor
gcc/ada/

	* prep.adb (Preprocess): Allow for more flexibility when
	Relaxed_RM_Semantics is set.
2021-09-22 15:01:48 +00:00
Pierre-Alexandre Bazin
1647bc2a78 [Ada] Contracts written for the Ada.Strings.Bounded library
gcc/ada/

	* libgnat/a-strbou.adb: Turn SPARK_Mode on.
	* libgnat/a-strbou.ads: Write contracts.
	* libgnat/a-strfix.ads (Index): Fix grammar error in a comment.
	* libgnat/a-strsea.ads (Index): Likewise.
	* libgnat/a-strsup.adb: Rewrite the body to take into account
	the new definition of Super_String using Relaxed_Initialization
	and a predicate.
	(Super_Replicate, Super_Translate, Times): Added loop
	invariants, and ghost lemmas for Super_Replicate and Times.
	(Super_Trim): Rewrite the body using search functions to
	determine the cutting points.
	(Super_Element, Super_Length, Super_Slice, Super_To_String):
	Remove (now written as expression functions in a-strsup.ads).
	* libgnat/a-strsup.ads: Added contracts.
	(Super_Element, Super_Length, Super_Slice, Super_To_String):
	Rewrite as expression functions.
2021-09-22 15:01:48 +00:00
Yannick Moy
5f325f5e6f [Ada] Add adequate guard before calling First_Rep_Item
gcc/ada/

	* sem_ch13.adb (Build_Predicate_Functions): Add guard.
2021-09-22 15:01:47 +00:00
Doug Rupp
27534649ab [Ada] VxWorks inconsistent use of return type (BOOL)
gcc/ada/

	* libgnarl/s-vxwext.ads (BOOL): New int type.
	(Interrupt_Context): Change return type to BOOL.
	* libgnarl/s-vxwext__kernel.ads: Likewise.
	* libgnarl/s-vxwext__rtp-smp.adb: Likewise.
	* libgnarl/s-vxwext__rtp.adb: Likewise.
	* libgnarl/s-vxwext__rtp.ads: Likewise.
	* libgnarl/s-osinte__vxworks.adb (Interrupt_Context): Change
	return type to BOOL.
	* libgnarl/s-osinte__vxworks.ads (BOOL) New subtype.
	(taskIsSuspended): Change return type to BOOL.
	(Interrupt_Context): Change return type to BOOL. Adjust comments
	accordingly.
	* libgnarl/s-taprop__vxworks.adb (System.VxWorks.Ext.BOOL):
	use type.
	(Is_Task_Context): Test Interrupt_Context against 0.
	* libgnat/i-vxwork.ads (BOOL): New int.
	(intContext): Change return type to BOOL. Adjust comments.
	* libgnat/i-vxwork__x86.ads: Likewise.
2021-09-22 15:01:47 +00:00
Piotr Trojanek
920e43ee21 [Ada] Add Package_Body helper routine to be used in GNATprove
gcc/ada/

	* sem_aux.adb, sem_aux.ads (Package_Body): Moved from GNATprove.
	* sem_elab.adb (Spec_And_Body_From_Entity): Refine type of parameter.
2021-09-22 15:01:47 +00:00
Arnaud Charlet
f4f6c18d9f [Ada] Minor doc improvement
gcc/ada/

	* doc/gnat_ugn/platform_specific_information.rst: Improve doc
	on permission and containers.
	* gnat_ugn.texi: Regenerate.
2021-09-22 15:01:46 +00:00
Yannick Moy
8c61547d80 [Ada] Fix infinite loop in compilation of illegal code
gcc/ada/

	* atree.adb (Rewrite): Fix parent node of shared aspects.
	* atree.ads (Rewrite): Add ??? comment on incorrect
	documentation.
	* einfo-utils.adb (Known_Esize): Fix logic.
	* sem_ch13.adb (Alignment_Check_For_Size_Change,
	Analyze_Attribute_Definition_Clause): Protect against unset
	Size.
2021-09-22 15:01:46 +00:00
Yannick Moy
0b7ddfb9f1 [Ada] More precise analysis of function renamings in GNATprove
gcc/ada/

	* freeze.adb (Build_Renamed_Body): Special case for GNATprove.
	* sem_ch6.adb (Analyze_Expression_Function): Remove useless test
	for a node to come from source, which becomes harmful otherwise.
2021-09-22 15:01:46 +00:00
Justin Squirek
4b54d9393e [Ada] Removal of technical debt
gcc/ada/

	* ali.adb, ali.ads (Scan_ALI): Remove use of deprecated
	parameter Ignore_ED, and all specification for Lower in call to
	Get_File_Name.
	* ali-util.adb (Read_Withed_ALIs): Modify call to Scan_ALI.
	* clean.adb (Clean_Executables): Likewise.
	* gnatbind.adb (Add_Artificial_ALI_File, Executable section):
	Likewise.
	* gnatlink.adb (Executable section): Likewise.
	* gnatls.adb (Executable section): Likewise.
	* make.adb (Check, Wait_For_Available_Slot): Likewise.
	* aspects.ads: Add Aspect_No_Controlled_Parts to
	Nonoverridable_Aspect_Id
	* opt.ads: Remove function pointers used as a workaround for
	ASIS.
	* osint-c.adb (Executable section): Remove setting of function
	pointer workarounds needed for ASIS.
	* osint.adb (Read_Default_Search_Dirs): Correct behavior to
	detect EOL characters.
	* par_sco.adb (Output_Header): Remove comment regarding use of
	First_Sloc.
	(Traverse_Sync_Definition): Renamed to
	Traverse_Protected_Or_Task_Definition.
	* pprint.adb (Interal_List_Name): Add description about purpose,
	and refactor conditional statement.
	(Prepend): Removed.
	* repinfo.adb (List_Rep_Info, Write_Info_Line): Remove use of
	subprogram pointer.
	* scng.adb (Scan): Remove CODEFIX question, and minor comment
	change.
	* sem_attr.adb (Analyze_Image_Attribute): Remove special
	processing for 'Img.
	* sem_ch6.adb (Check_Untagged_Equality): Add RM reference.
	(FCE): Add comment describing behavior.
	(Is_Non_Overriding_Operation): Minor comment formatting change.
	* sem_type.adb (Is_Actual_Subprogram): Add comment about
	Comes_From_Source test.
	(Matching_Types): Describe non-matching cases.
	* sem_util.adb (Is_Confirming): Add stub case for
	No_Controlled_Parts.
2021-09-22 15:01:45 +00:00
Yannick Moy
cbf1ffe125 [Ada] Fix access to predicated parent in Itype
gcc/ada/

	* sem_ch13.adb (Build_Predicate_Functions): Access
	Predicated_Parent only on subtypes.
2021-09-22 15:01:45 +00:00
Arnaud Charlet
326b74705c [Ada] Allow more cases of import with Relaxed_RM_Semantics
gcc/ada/

	* sem_prag.adb (Process_Import_Or_Interface): Relax error when
	Relaxed_RM_Semantics.
2021-09-22 15:01:44 +00:00
Steve Baird
e41e989b42 [Ada] Improve performance for case-insensitive regular expressions
gcc/ada/

	* libgnat/s-regpat.adb (Match): Handle the case where Self.First
	is not NUL (so we know the first character we are looking for),
	but case-insensitive matching has
	been specified.
	(Optimize): In the case of an EXACTF Op, set Self.First as is
	done in the EXACT case, except with the addition of a call to
	Lower_Case.
2021-09-22 15:01:44 +00:00
Eric Botcazou
7e7c4aeb6e [Ada] Remove System.Img_Enum_New unit
gcc/ada/

	* libgnat/s-imenne.ads, libgnat/s-imenne.adb: Delete.
	* gcc-interface/Make-lang.in (GNAT_ADA_OBJS): Remove s-imenne.o.
	(GNATBIND_OBJS): Likewise.
2021-09-22 15:01:44 +00:00
Yannick Moy
81a0f4a391 [Ada] Fix obsolete comments/name referring to girder discriminants
gcc/ada/

	* einfo.ads: Fix comments.
	* exp_aggr.adb: Fix variable name.
	* exp_util.adb: Fix comments.
	* sem_ch13.adb: Fix comments.
	* sem_ch3.adb: Fix comments and variable name.
2021-09-22 15:01:43 +00:00
Doug Rupp
064056d7b5 [Ada] VxWorks inconsistent use of return type (Int_Unlock)
gcc/ada/

	* libgnarl/s-osinte__vxworks.ads: Make procedure vice function.
	* libgnarl/s-vxwext.ads: Likewise.
	* libgnarl/s-vxwext__kernel-smp.adb: Likewise.
	* libgnarl/s-vxwext__kernel.adb: Likewise.
	* libgnarl/s-vxwext__kernel.ads: Likewise.
	* libgnarl/s-vxwext__rtp-smp.adb: Likewise.
	* libgnarl/s-vxwext__rtp.adb: Likewise.
	* libgnarl/s-vxwext__rtp.ads: Likewise.
	* libgnarl/s-taprop__vxworks.adb (Stop_All_Tasks): Call
	Int_Unlock as a procedure.
2021-09-22 15:01:43 +00:00
Doug Rupp
2df3e43eb9 [Ada] VxWorks inconsistent use of return type (vx_freq_t)
gcc/ada/

	* libgnarl/s-osinte__vxworks.ads (SVE): New package renaming
	(vx_freq_t): New subtype.
	(sysClkRateGet): Return vx_freq_t.
	* libgnarl/s-vxwext.ads (vx_freq_t): New type.
	* libgnarl/s-vxwext__kernel.ads: Likewise.
	* libgnarl/s-vxwext__rtp.ads: Likewise.
2021-09-22 15:01:43 +00:00
Ghjuvan Lacambre
4a3cb9e319 [Ada] Replace use of 'Image with use of Error_Msg_Uint
gcc/ada/

	* sem_case.adb (Composite_Case_Ops): Replace 'Image with
	Error_Msg_Uint.
2021-09-22 15:01:42 +00:00
Eric Botcazou
26ece6eca7 [Ada] Generate temporary for if-expression with -fpreserve-control-flow
gcc/ada/

	* exp_ch4.adb (Expand_N_If_Expression): Generate an intermediate
	temporary when the expression is a condition in an outer decision
	and control-flow optimizations are suppressed.
2021-09-22 15:01:42 +00:00
Steve Baird
ec813d06f7 [Ada] Add -gnatX support for casing on array values
gcc/ada/

	* exp_ch5.adb (Expand_General_Case_Statement.Pattern_Match): Add
	new function Indexed_Element to handle array element
	comparisons. Handle case choices that are array aggregates,
	string literals, or names denoting constants.
	* sem_case.adb (Composite_Case_Ops.Array_Case_Ops): New package
	providing utilities needed for casing on arrays.
	(Composite_Case_Ops.Choice_Analysis): If necessary, include
	array length as a "component" (like a discriminant) when
	traversing components. We do not (yet) partition choice analysis
	to deal with unequal length choices separately. Instead, we
	embed everything in the minimum-dimensionality Cartesian product
	space needed to handle all choices properly; this is determined
	by the length of the longest choice pattern.
	(Composite_Case_Ops.Choice_Analysis.Traverse_Discrete_Parts):
	Include length as a "component" in the traversal if necessary.
	(Composite_Case_Ops.Choice_Analysis.Parse_Choice.Traverse_Choice):
	Add support for case choices that are string literals or names
	denoting constants.
	(Composite_Case_Ops.Choice_Analysis): Include length as a
	"component" in the analysis if necessary.
	(Check_Choices.Check_Case_Pattern_Choices.Ops.Value_Sets.Value_Index_Count):
	Improve error message when capacity exceeded.
	* doc/gnat_rm/implementation_defined_pragmas.rst: Update
	documentation to reflect current implementation status.
	* gnat_rm.texi: Regenerate.
2021-09-22 15:01:42 +00:00
Eric Botcazou
c5ff859dc0 [Ada] Fix imprecise wording for error on scalar storage order
gcc/ada/

	* freeze.adb (Check_Component_Storage_Order): Give a specific error
	message for non-byte-aligned component in the packed case.  Replace
	"composite" with "record" in both cases.
2021-09-22 15:01:41 +00:00
Arnaud Charlet
d232417a88 [Ada] Make Ada.Task_Initialization compatible with No_Elaboration_Code_All
gcc/ada/

	* libgnarl/a-tasini.ads, libgnarl/a-tasini.adb: Make compatible
	with No_Elaboration_Code_All.
	* libgnarl/s-taskin.ads, libgnarl/s-tassta.adb: Adjust
	accordingly.
2021-09-22 15:01:41 +00:00
Arnaud Charlet
ab857d1a3b [Ada] Change message format on missing return
gcc/ada/

	* sem_ch6.adb (Check_Returns): Change message on missing return.
2021-09-22 15:01:41 +00:00
Arnaud Charlet
e690e0c287 [Ada] Mark gnatfind and gnatxref obsolete
gcc/ada/

	* gnatfind.adb, gnatxref.adb: Mark these tools as obsolete
	before removing them completely.
2021-09-22 15:01:40 +00:00
Jiufu Guo
3087d1b0a2 Set bound/cmp/control for until wrap loop.
In patch r12-3136, niter->control, niter->bound and niter->cmp are
derived from number_of_iterations_lt.  While for 'until wrap condition',
the calculation in number_of_iterations_lt is not align the requirements
on the define of them and requirements in determine_exit_conditions.

This patch calculate niter->control, niter->bound and niter->cmp in
number_of_iterations_until_wrap.

gcc/ChangeLog:

2021-09-22  Jiufu Guo  <guojiufu@linux.ibm.com>

	PR tree-optimization/102087
	* tree-ssa-loop-niter.c (number_of_iterations_until_wrap):
	Update bound/cmp/control for niter.

gcc/testsuite/ChangeLog:

2021-09-22  Jiufu Guo  <guojiufu@linux.ibm.com>

	* gcc.dg/pr102087.c: New test.
	PR tree-optimization/102087
2021-09-22 21:03:08 +08:00
Aldy Hernandez
fec75ab8c0 Check for BB before calling register_outgoing_edges.
We may be asked to fold an artificial statement not in the CFG.  Since
there are no outgoing edges from those, avoid calling
register_outgoing_edges.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* gimple-range-fold.cc (fold_using_range::range_of_range_op):
	Move check for non-empty BB here.
	(fur_source::register_outgoing_edges): ...from here.
2021-09-22 13:28:16 +02:00
Aldy Hernandez
7e5e44bd17 path solver: Use range_on_path_entry instead of looking at equivalences.
Cycling through equivalences to improve a range is nowhere near as
efficient as asking the ranger what the range on entry is.

Testing on a hybrid VRP threader, shows that this improves our VRP
threading benefit from 14.5% to 18.5% and our overall jump threads from
0.85% to 1.28%.

Tested on x86-64 Linux.

gcc/ChangeLog:

	* gimple-range-path.cc (path_range_query::internal_range_of_expr):
	Remove call to improve_range_with_equivs.
	(path_range_query::improve_range_with_equivs): Remove
	* gimple-range-path.h: Remove improve_range_with_equivs.
2021-09-22 13:28:08 +02:00
dianhong xu
6b0e0b29c6 AVX512FP16: Add permutation and mask blend intrinsics.
gcc/ChangeLog:

	* config/i386/avx512fp16intrin.h:
	(_mm512_mask_blend_ph): New intrinsic.
	(_mm512_permutex2var_ph): Ditto.
	(_mm512_permutexvar_ph): Ditto.
	* config/i386/avx512fp16vlintrin.h:
	(_mm256_mask_blend_ph): New intrinsic.
	(_mm256_permutex2var_ph): Ditto.
	(_mm256_permutexvar_ph): Ditto.
	(_mm_mask_blend_ph): Ditto.
	(_mm_permutex2var_ph): Ditto.
	(_mm_permutexvar_ph): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx512fp16-14.c: New test.
2021-09-22 18:27:29 +08:00
dianhong xu
69dc9c59e9 AVX512FP16: Add complex conjugation intrinsic instructions.
gcc/ChangeLog:

	* config/i386/avx512fp16intrin.h: Add new intrinsics.
	(_mm512_conj_pch): New intrinsic.
	(_mm512_mask_conj_pch): Ditto.
	(_mm512_maskz_conj_pch): Ditto.
	* config/i386/avx512fp16vlintrin.h: Add new intrinsics.
	(_mm256_conj_pch): New intrinsic.
	(_mm256_mask_conj_pch): Ditto.
	(_mm256_maskz_conj_pch): Ditto.
	(_mm_conj_pch): Ditto.
	(_mm_mask_conj_pch): Ditto.
	(_mm_maskz_conj_pch): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx512fp16-conjugation-1.c: New test.
	* gcc.target/i386/avx512fp16vl-conjugation-1.c: New test.
2021-09-22 18:27:28 +08:00
dianhong xu
f6afc926dc AVX512FP16: Add reduce operators(add/mul/min/max).
gcc/ChangeLog:

	* config/i386/avx512fp16intrin.h (_MM512_REDUCE_OP): New macro
	(_mm512_reduce_add_ph): New intrinsic.
	(_mm512_reduce_mul_ph): Ditto.
	(_mm512_reduce_min_ph): Ditto.
	(_mm512_reduce_max_ph): Ditto.
	* config/i386/avx512fp16vlintrin.h
	(_MM256_REDUCE_OP/_MM_REDUCE_OP): New macro.
	(_mm256_reduce_add_ph): New intrinsic.
	(_mm256_reduce_mul_ph): Ditto.
	(_mm256_reduce_min_ph): Ditto.
	(_mm256_reduce_max_ph): Ditto.
	(_mm_reduce_add_ph): Ditto.
	(_mm_reduce_mul_ph): Ditto.
	(_mm_reduce_min_ph): Ditto.
	(_mm_reduce_max_ph): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx512fp16-reduce-op-1.c: New test.
	* gcc.target/i386/avx512fp16vl-reduce-op-1.c: Ditto.
2021-09-22 18:27:28 +08:00
dianhong xu
6185b9a93c AVX512FP16: Support load/store/abs intrinsics.
gcc/ChangeLog:

	* config/i386/avx512fp16intrin.h (__m512h_u, __m256h_u,
	__m128h_u): New typedef.
	(_mm512_load_ph): New intrinsic.
	(_mm256_load_ph): Ditto.
	(_mm_load_ph): Ditto.
	(_mm512_loadu_ph): Ditto.
	(_mm256_loadu_ph): Ditto.
	(_mm_loadu_ph): Ditto.
	(_mm512_store_ph): Ditto.
	(_mm256_store_ph): Ditto.
	(_mm_store_ph): Ditto.
	(_mm512_storeu_ph): Ditto.
	(_mm256_storeu_ph): Ditto.
	(_mm_storeu_ph): Ditto.
	(_mm512_abs_ph): Ditto.
	* config/i386/avx512fp16vlintrin.h
	(_mm_abs_ph): Ditto.
	(_mm256_abs_ph): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx512fp16-13.c: New test.
2021-09-22 18:27:28 +08:00
Eric Botcazou
3ae5e6fbc8 Small tweak to comments in range_cannot_be_superflat
gcc/ada/
	* gcc-interface/decl.c (range_cannot_be_superflat): Tweak comments.
2021-09-22 12:20:05 +02:00
Andreas Krebbel
e1223ea2f4 IBM Z: TPF: Add cc clobber to profiling expanders
The code sequence emitted uses CC internally.

gcc/ChangeLog:

	* config/s390/tpf.md (prologue_tpf, epilogue_tpf): Add cc clobber.
2021-09-22 12:13:19 +02:00
Tobias Burnus
424a4a463a Fortran: Add gfc_simple_for_loop aux function
Function to generate a simple loop (to be used internally).
Callers will be added in follow-up commits.

gcc/fortran/
	* trans-expr.c (gfc_simple_for_loop): New.
	* trans.h (gfc_simple_for_loop): New prototype.
2021-09-22 11:11:00 +02:00
Alan Modra
b032103265 obstack.h __PTR_ALIGN vs. ubsan
Current ubsan complains on every use of __PTR_ALIGN (when ptrdiff_t is
as large as a pointer), due to making calculations relative to a NULL
pointer.  This patch avoids the problem by extracting out and
simplifying __BPTR_ALIGN for the usual case.  I've continued to use
ptrdiff_t here, where it might be better to throw away __BPTR_ALIGN
entirely and just assume uintptr_t exists.

	* obstack.h (__PTR_ALIGN): Expand and simplify __BPTR_ALIGN
	rather than calculating relative to a NULL pointer.
2021-09-22 17:14:17 +09:30
Andreas Krebbel
a9b3c451be IBM Z: Fix PR102222
Avoid emitting a strict low part move if the insv target actually
affects the whole target reg.

gcc/ChangeLog:

	PR target/102222
	* config/s390/s390.c (s390_expand_insv): Emit a normal move if it
	is actually a full copy of the source operand into the target.
	Don't emit a strict low part move if source and target mode match.

gcc/testsuite/ChangeLog:

	* gcc.target/s390/pr102222.c: New test.
2021-09-22 09:42:26 +02:00
Jakub Jelinek
c4432b2776 openmp: Fix OpenMP expansion of scope with non-fallthrugh body [PR102415]
I've used function for omp single expansion also for omp scope.  That is
mostly ok, but as the testcase shows, there is one important difference.
The omp single expansion always has a fallthru body, because it during
omp lowering expands the body as if wrapped in an if to simulate that
one thread runs the body and others wait (unless nowait) until it completes
and continue.  omp scope is invoked by all threads and so if the body
is non-fallthru, the barrier (unless nowait) at the end will not be reached
by any of the threads.

The following patch fixes that by handling the case where cfg pass optimizes
away the exit bb of it gracefully.

2021-09-22  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/102415
	* omp-expand.c (expand_omp_single): If region->exit is NULL,
	assert region->entry is GIMPLE_OMP_SCOPE region and return.

	* c-c++-common/gomp/scope-3.c: New test.
2021-09-22 09:32:32 +02:00
Jakub Jelinek
059b819e3c openmp: Add support for allocator and align modifiers on allocate clauses
As the allocate-2.c testcase shows, this change isn't 100% backwards compatible,
one could have allocate and/or align functions that return an OpenMP allocator
handle and previously it would call those functions and now would use those
names as keywords for the modifiers.  But it allows specify extra alignment
requirements for the allocations.

2021-09-22  Jakub Jelinek  <jakub@redhat.com>

gcc/
	* tree.h (OMP_CLAUSE_ALLOCATE_ALIGN): Define.
	* tree.c (omp_clause_num_ops): Change number of OMP_CLAUSE_ALLOCATE
	arguments from 2 to 3.
	* tree-pretty-print.c (dump_omp_clause): Print allocator() around
	allocate clause allocator and print align if present.
	* omp-low.c (scan_sharing_clauses): Force allocate_map entry even
	for omp_default_mem_alloc if align modifier is present.  If align
	modifier is present, use TREE_LIST to encode both allocator and
	align.
	(lower_private_allocate, lower_rec_input_clauses, create_task_copyfn):
	Handle align modifier on allocator clause if present.
gcc/c-family/
	* c-omp.c (c_omp_split_clauses): Copy over OMP_CLAUSE_ALLOCATE_ALIGN.
gcc/c/
	* c-parser.c (c_parser_omp_clause_allocate): Parse allocate clause
	modifiers.
gcc/cp/
	* parser.c (cp_parser_omp_clause_allocate): Parse allocate clause
	modifiers.
	* semantics.c (finish_omp_clauses) <OMP_CLAUSE_ALLOCATE>: Perform
	semantic analysis of OMP_CLAUSE_ALLOCATE_ALIGN.
	* pt.c (tsubst_omp_clauses) <case OMP_CLAUSE_ALLOCATE>: Handle
	also OMP_CLAUSE_ALLOCATE_ALIGN.
gcc/testsuite/
	* c-c++-common/gomp/allocate-6.c: New test.
	* c-c++-common/gomp/allocate-7.c: New test.
	* g++.dg/gomp/allocate-4.C: New test.
libgomp/
	* testsuite/libgomp.c-c++-common/allocate-2.c: New test.
	* testsuite/libgomp.c-c++-common/allocate-3.c: New test.
2021-09-22 09:29:13 +02:00
Iain Sandoe
578b768733 libgcc, X86: Adjust guard for Mach-O code.
Existing code in the sfp-machine header has been using __MACH__
as a guard for Mach-O, where currently symbols aliases are not
supported.

__MACH__ is not a sufficient guard for this, since the define
is also emitted for HURD, at least.

Fixed by amending the guard to use __APPLE__ instead.

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

libgcc/ChangeLog:

	* config/i386/sfp-machine.h: Guard Mach-O-specific code
	using __APPLE__.
2021-09-22 07:42:21 +01:00
liuhongt
b0ac84dc27 Support 64bit fma/fms/fnma/fnms under avx512vl.
gcc/ChangeLog:

	* config/i386/i386.md (define_attr "isa"): Add
	fma_or_avx512vl.
	(define_attr "enabled"): Correspond fma_or_avx512vl to
	TARGET_FMA || TARGET_AVX512VL.
	* config/i386/mmx.md (fmav2sf4): Extend to AVX512 fma.
	(fmsv2sf4): Ditto.
	(fnmav2sf4): Ditto.
	(fnmsv2sf4): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx512vl-pr95046.c: New test.
2021-09-22 14:18:35 +08:00
liuhongt
0f4b73f4ed Adjust testcase.
gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr92658-avx512f.c: Refine testcase.
	* gcc.target/i386/pr92658-avx512vl.c: Adjust scan-assembler,
	only v2di->v2qi truncate is not supported, v4di->v4qi should
	be supported.
2021-09-22 13:18:40 +08:00
liuhongt
0eeb8c81e8 AVX512FP16: Add expander for cstorehf4.
gcc/ChangeLog:

	* config/i386/i386.md (cstorehf3): New define_expand.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx512fp16-builtin-fpcompare-1.c: New test.
	* gcc.target/i386/avx512fp16-builtin-fpcompare-2.c: New test.
2021-09-22 12:56:31 +08:00
liuhongt
338abd0bf7 AVX512FP16: Add expander for ceil/floor/trunc/roundeven.
gcc/ChangeLog:

	* config/i386/i386.md (<rounding_insn>hf2): New expander.
	(sse4_1_round<mode>2): Extend from MODEF to MODEFH.
	* config/i386/sse.md (*sse4_1_round<ssescalarmodesuffix>):
	Extend from VF_128 to VFH_128.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx512fp16-builtin-round-1.c: New test.
2021-09-22 12:56:31 +08:00
liuhongt
59e9c4cbe6 AVX512FP16: Add expander for sqrthf2.
gcc/ChangeLog:

	* config/i386/i386-features.c (i386-features.c): Handle
	E_HFmode.
	* config/i386/i386.md (sqrthf2): New expander.
	(*sqrthf2): New define_insn.
	* config/i386/sse.md
	(*<sse>_vmsqrt<mode>2<mask_scalar_name><round_scalar_name>):
	Extend to VFH_128.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx512fp16-builtin-sqrt-1.c: New test.
	* gcc.target/i386/avx512fp16vl-builtin-sqrt-1.c: New test.
2021-09-22 12:56:31 +08:00
liuhongt
8a5837cfb7 AVX512FP16: Add testcases for vfcmaddcsh/vfmaddcsh/vfcmulcsh/vfmulcsh.
gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx512fp16-vfcmaddcsh-1a.c: New test.
	* gcc.target/i386/avx512fp16-vfcmaddcsh-1b.c: Ditto.
	* gcc.target/i386/avx512fp16-vfcmulcsh-1a.c: Ditto.
	* gcc.target/i386/avx512fp16-vfcmulcsh-1b.c: Ditto.
	* gcc.target/i386/avx512fp16-vfmaddcsh-1a.c: Ditto.
	* gcc.target/i386/avx512fp16-vfmaddcsh-1b.c: Ditto.
	* gcc.target/i386/avx512fp16-vfmulcsh-1a.c: Ditto.
	* gcc.target/i386/avx512fp16-vfmulcsh-1b.c: Ditto.
	* gcc.target/i386/avx512fp16-complex-constraints.c: Ditto.
2021-09-22 12:56:30 +08:00
liuhongt
db3b96df03 AVX512FP16: Add vfcmaddcsh/vfmaddcsh/vfcmulcsh/vfmulcsh.
gcc/ChangeLog:

	* config/i386/avx512fp16intrin.h (_mm_mask_fcmadd_sch):
	New intrinsic.
	(_mm_mask3_fcmadd_sch): Likewise.
	(_mm_maskz_fcmadd_sch): Likewise.
	(_mm_fcmadd_sch): Likewise.
	(_mm_mask_fmadd_sch): Likewise.
	(_mm_mask3_fmadd_sch): Likewise.
	(_mm_maskz_fmadd_sch): Likewise.
	(_mm_fmadd_sch): Likewise.
	(_mm_mask_fcmadd_round_sch): Likewise.
	(_mm_mask3_fcmadd_round_sch): Likewise.
	(_mm_maskz_fcmadd_round_sch): Likewise.
	(_mm_fcmadd_round_sch): Likewise.
	(_mm_mask_fmadd_round_sch): Likewise.
	(_mm_mask3_fmadd_round_sch): Likewise.
	(_mm_maskz_fmadd_round_sch): Likewise.
	(_mm_fmadd_round_sch): Likewise.
	(_mm_fcmul_sch): Likewise.
	(_mm_mask_fcmul_sch): Likewise.
	(_mm_maskz_fcmul_sch): Likewise.
	(_mm_fmul_sch): Likewise.
	(_mm_mask_fmul_sch): Likewise.
	(_mm_maskz_fmul_sch): Likewise.
	(_mm_fcmul_round_sch): Likewise.
	(_mm_mask_fcmul_round_sch): Likewise.
	(_mm_maskz_fcmul_round_sch): Likewise.
	(_mm_fmul_round_sch): Likewise.
	(_mm_mask_fmul_round_sch): Likewise.
	(_mm_maskz_fmul_round_sch): Likewise.
	* config/i386/i386-builtin.def: Add corresponding new builtins.
	* config/i386/sse.md
	(avx512fp16_fmaddcsh_v8hf_maskz<round_expand_name>): New expander.
	(avx512fp16_fcmaddcsh_v8hf_maskz<round_expand_name>): Ditto.
	(avx512fp16_fma_<complexopname>sh_v8hf<mask_scalarcz_name><round_scalarcz_name>):
	New define insn.
	(avx512fp16_<complexopname>sh_v8hf_mask<round_name>): Ditto.
	(avx512fp16_<complexopname>sh_v8hf<mask_scalarc_name><round_scalarcz_name>):
	Ditto.
	* config/i386/subst.md (mask_scalarcz_name): New.
	(mask_scalarc_name): Ditto.
	(mask_scalarc_operand3): Ditto.
	(mask_scalarcz_operand4): Ditto.
	(round_scalarcz_name): Ditto.
	(round_scalarc_mask_operand3): Ditto.
	(round_scalarcz_mask_operand4): Ditto.
	(round_scalarc_mask_op3): Ditto.
	(round_scalarcz_mask_op4): Ditto.
	(round_scalarcz_constraint): Ditto.
	(round_scalarcz_nimm_predicate): Ditto.
	(mask_scalarcz): Ditto.
	(mask_scalarc): Ditto.
	(round_scalarcz): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx-1.c: Add test for new builtins.
	* gcc.target/i386/sse-13.c: Ditto.
	* gcc.target/i386/sse-23.c: Ditto.
	* gcc.target/i386/sse-14.c: Add test for new intrinsics.
	* gcc.target/i386/sse-22.c: Ditto.
2021-09-22 12:56:30 +08:00
liuhongt
ed643e9f17 AVX512FP16: Add testcases for vfcmaddcph/vfmaddcph/vfcmulcph/vfmulcph.
gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx512fp16-helper.h
	(init_src): Adjust init value.
	(NET_CMASK): New net mask for complex input.
	* gcc.target/i386/avx512fp16-vfcmaddcph-1a.c: New test.
	* gcc.target/i386/avx512fp16-vfcmaddcph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16-vfcmulcph-1a.c: Ditto.
	* gcc.target/i386/avx512fp16-vfcmulcph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16-vfmaddcph-1a.c: Ditto.
	* gcc.target/i386/avx512fp16-vfmaddcph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16-vfmulcph-1a.c: Ditto.
	* gcc.target/i386/avx512fp16-vfmulcph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vfcmaddcph-1a.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vfcmaddcph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vfcmulcph-1a.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vfcmulcph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vfmaddcph-1a.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vfmaddcph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vfmulcph-1a.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vfmulcph-1b.c: Ditto.
2021-09-22 12:56:30 +08:00
liuhongt
081070bce2 AVX512FP16: Add vfcmaddcph/vfmaddcph/vfcmulcph/vfmulcph
gcc/ChangeLog:

	* config/i386/avx512fp16intrin.h (_mm512_fcmadd_pch):
	New intrinsic.
	(_mm512_mask_fcmadd_pch): Likewise.
	(_mm512_mask3_fcmadd_pch): Likewise.
	(_mm512_maskz_fcmadd_pch): Likewise.
	(_mm512_fmadd_pch): Likewise.
	(_mm512_mask_fmadd_pch): Likewise.
	(_mm512_mask3_fmadd_pch): Likewise.
	(_mm512_maskz_fmadd_pch): Likewise.
	(_mm512_fcmadd_round_pch): Likewise.
	(_mm512_mask_fcmadd_round_pch): Likewise.
	(_mm512_mask3_fcmadd_round_pch): Likewise.
	(_mm512_maskz_fcmadd_round_pch): Likewise.
	(_mm512_fmadd_round_pch): Likewise.
	(_mm512_mask_fmadd_round_pch): Likewise.
	(_mm512_mask3_fmadd_round_pch): Likewise.
	(_mm512_maskz_fmadd_round_pch): Likewise.
	(_mm512_fcmul_pch): Likewise.
	(_mm512_mask_fcmul_pch): Likewise.
	(_mm512_maskz_fcmul_pch): Likewise.
	(_mm512_fmul_pch): Likewise.
	(_mm512_mask_fmul_pch): Likewise.
	(_mm512_maskz_fmul_pch): Likewise.
	(_mm512_fcmul_round_pch): Likewise.
	(_mm512_mask_fcmul_round_pch): Likewise.
	(_mm512_maskz_fcmul_round_pch): Likewise.
	(_mm512_fmul_round_pch): Likewise.
	(_mm512_mask_fmul_round_pch): Likewise.
	(_mm512_maskz_fmul_round_pch): Likewise.
	* config/i386/avx512fp16vlintrin.h (_mm_fmadd_pch):
	New intrinsic.
	(_mm_mask_fmadd_pch): Likewise.
	(_mm_mask3_fmadd_pch): Likewise.
	(_mm_maskz_fmadd_pch): Likewise.
	(_mm256_fmadd_pch): Likewise.
	(_mm256_mask_fmadd_pch): Likewise.
	(_mm256_mask3_fmadd_pch): Likewise.
	(_mm256_maskz_fmadd_pch): Likewise.
	(_mm_fcmadd_pch): Likewise.
	(_mm_mask_fcmadd_pch): Likewise.
	(_mm_mask3_fcmadd_pch): Likewise.
	(_mm_maskz_fcmadd_pch): Likewise.
	(_mm256_fcmadd_pch): Likewise.
	(_mm256_mask_fcmadd_pch): Likewise.
	(_mm256_mask3_fcmadd_pch): Likewise.
	(_mm256_maskz_fcmadd_pch): Likewise.
	(_mm_fmul_pch): Likewise.
	(_mm_mask_fmul_pch): Likewise.
	(_mm_maskz_fmul_pch): Likewise.
	(_mm256_fmul_pch): Likewise.
	(_mm256_mask_fmul_pch): Likewise.
	(_mm256_maskz_fmul_pch): Likewise.
	(_mm_fcmul_pch): Likewise.
	(_mm_mask_fcmul_pch): Likewise.
	(_mm_maskz_fcmul_pch): Likewise.
	(_mm256_fcmul_pch): Likewise.
	(_mm256_mask_fcmul_pch): Likewise.
	(_mm256_maskz_fcmul_pch): Likewise.
	* config/i386/i386-builtin-types.def (V8HF_FTYPE_V8HF_V8HF_V8HF,
	V8HF_FTYPE_V16HF_V16HF_V16HF, V16HF_FTYPE_V16HF_V16HF_V16HF_UQI,
	V32HF_FTYPE_V32HF_V32HF_V32HF_INT,
	V32HF_FTYPE_V32HF_V32HF_V32HF_UHI_INT): Add new builtin types.
	* config/i386/i386-builtin.def: Add new builtins.
	* config/i386/i386-expand.c: Handle new builtin types.
	* config/i386/subst.md (SUBST_CV): New.
	(maskc_name): Ditto.
	(maskc_operand3): Ditto.
	(maskc): Ditto.
	(sdc_maskz_name): Ditto.
	(sdc_mask_op4): Ditto.
	(sdc_mask_op5): Ditto.
	(sdc_mask_mode512bit_condition): Ditto.
	(sdc): Ditto.
	(round_maskc_operand3): Ditto.
	(round_sdc_mask_operand4): Ditto.
	(round_maskc_op3): Ditto.
	(round_sdc_mask_op4): Ditto.
	(round_saeonly_sdc_mask_operand5): Ditto.
	* config/i386/sse.md (unspec): Add complex fma unspecs.
	(avx512fmaskcmode): New.
	(UNSPEC_COMPLEX_F_C_MA): Ditto.
	(UNSPEC_COMPLEX_F_C_MUL): Ditto.
	(complexopname): Ditto.
	(<avx512>_fmaddc_<mode>_maskz<round_expand_name>): New expander.
	(<avx512>_fcmaddc_<mode>_maskz<round_expand_name>): Ditto.
	(fma_<complexopname>_<mode><sdc_maskz_name><round_name>): New
	define insn.
	(<avx512>_<complexopname>_<mode>_mask<round_name>): Ditto.
	(<avx512>_<complexopname>_<mode><maskc_name><round_name>): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/avx-1.c: Add test for new builtins.
	* gcc.target/i386/sse-13.c: Ditto.
	* gcc.target/i386/sse-23.c: Ditto.
	* gcc.target/i386/sse-14.c: Add test for new intrinsics.
	* gcc.target/i386/sse-22.c: Ditto.
2021-09-22 12:56:30 +08:00
Kewen Lin
144c498465 rs6000: Parameterize some const values for density test
This patch follows the discussion here[1], where Segher suggested
parameterizing those exact magic constants for density heuristics,
to make it easier to tweak if need.

The change here should be "No Functional Change".  But I verified
it with SPEC2017 at option sets O2-vect and Ofast-unroll on Power8,
the result is neutral as expected.

[1]https://gcc.gnu.org/pipermail/gcc-patches/2021-September/579121.html

gcc/ChangeLog:

	* config/rs6000/rs6000.opt (rs6000-density-pct-threshold,
	rs6000-density-size-threshold, rs6000-density-penalty,
	rs6000-density-load-pct-threshold,
	rs6000-density-load-num-threshold): New parameter.
	* config/rs6000/rs6000.c (rs6000_density_test): Adjust with
	corresponding parameters.
2021-09-21 23:47:33 -05:00
Barrett Adair
72394d38d9 c++: fix template instantiation comparison in redeclarations
This change fixes a primordial c++11 frontend defect where function template
redeclarations with trailing return types that used dependent
sizeof/alignof/noexcept expressions in template value arguments failed to
compare as equivalent to the identical primary template declaration. By
forcing structural AST comparison of the template arguments, we no longer
require TYPE_CANONICAL to match in this case. The new canon-type-{15..18}.C
tests failed with all prior GCC versions, where the redeclarations were
incorrectly reported as ambiguous overloads. The new dependent-name{15,16}.C
tests are regression tests for sneaky problems encountered during
development of this fix. Note that this fix does not address the use of parm
objects' constexpr members as template arguments within a declaration (a
superficially similar longstanding defect).

gcc/cp/ChangeLog:

	* pt.c (find_parm_usage_r): New walk_tree callback to find func
	parms.
	(any_template_arguments_need_structural_equality_p): New special
	case.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/constexpr-52830.C: Remove unwanted dg-ice.
	* g++.dg/template/canon-type-15.C: New test.
	* g++.dg/template/canon-type-16.C: New test.
	* g++.dg/template/canon-type-17.C: New test.
	* g++.dg/template/canon-type-18.C: New test.
	* g++.dg/template/dependent-name15.C: New regression test.
	* g++.dg/template/dependent-name16.C: New regression test.
2021-09-22 00:03:12 -04:00