aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2021-09-22[Ada] Fix conformance errors and erroneous codeBob Duff19-103/+65
gcc/ada/ * contracts.adb, einfo-utils.adb, einfo-utils.ads, exp_ch7.adb, exp_ch9.adb, exp_disp.adb, exp_prag.adb, exp_smem.adb, exp_util.adb, freeze.adb, sem_aggr.adb, sem_attr.adb, sem_ch8.adb, sem_prag.ads, sem_util.adb, sem_util.ads: Fix conformance errors. * errout.adb, erroutc.adb: Remove pragmas Suppress. * err_vars.ads: Initialize variables that were previously being read uninitialized.
2021-09-22[Ada] Clarify parts of Ada.Strings.Unbounded in SPARK or notYannick Moy1-1/+4
gcc/ada/ * libgnat/a-strunb.ads: Mark package in SPARK with private part not in SPARK. (Free): Mark not in SPARK.
2021-09-22[Ada] Update status of some attributesArnaud Charlet1-4/+4
gcc/ada/ * snames.ads-tmpl: Update status of some attributes.
2021-09-22[Ada] VxWorks inconsistent use of return type (STATUS)Doug Rupp12-152/+177
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[Ada] More flexibility in preprocessorArnaud Charlet1-5/+20
gcc/ada/ * prep.adb (Preprocess): Allow for more flexibility when Relaxed_RM_Semantics is set.
2021-09-22[Ada] Contracts written for the Ada.Strings.Bounded libraryPierre-Alexandre Bazin6-723/+4911
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[Ada] Add adequate guard before calling First_Rep_ItemYannick Moy1-1/+4
gcc/ada/ * sem_ch13.adb (Build_Predicate_Functions): Add guard.
2021-09-22[Ada] VxWorks inconsistent use of return type (BOOL)Doug Rupp10-18/+35
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[Ada] Add Package_Body helper routine to be used in GNATprovePiotr Trojanek3-2/+31
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[Ada] Minor doc improvementArnaud Charlet2-3/+9
gcc/ada/ * doc/gnat_ugn/platform_specific_information.rst: Improve doc on permission and containers. * gnat_ugn.texi: Regenerate.
2021-09-22[Ada] Fix infinite loop in compilation of illegal codeYannick Moy4-5/+12
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[Ada] More precise analysis of function renamings in GNATproveYannick Moy2-13/+20
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[Ada] Removal of technical debtJustin Squirek20-137/+60
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[Ada] Fix access to predicated parent in ItypeYannick Moy1-0/+3
gcc/ada/ * sem_ch13.adb (Build_Predicate_Functions): Access Predicated_Parent only on subtypes.
2021-09-22[Ada] Allow more cases of import with Relaxed_RM_SemanticsArnaud Charlet1-1/+5
gcc/ada/ * sem_prag.adb (Process_Import_Or_Interface): Relax error when Relaxed_RM_Semantics.
2021-09-22[Ada] Improve performance for case-insensitive regular expressionsSteve Baird1-10/+53
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[Ada] Remove System.Img_Enum_New unitEric Botcazou3-257/+0
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[Ada] Fix obsolete comments/name referring to girder discriminantsYannick Moy5-28/+28
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[Ada] VxWorks inconsistent use of return type (Int_Unlock)Doug Rupp9-14/+13
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[Ada] VxWorks inconsistent use of return type (vx_freq_t)Doug Rupp4-1/+12
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[Ada] Replace use of 'Image with use of Error_Msg_UintGhjuvan Lacambre1-10/+11
gcc/ada/ * sem_case.adb (Composite_Case_Ops): Replace 'Image with Error_Msg_Uint.
2021-09-22[Ada] Generate temporary for if-expression with -fpreserve-control-flowEric Botcazou1-0/+40
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[Ada] Add -gnatX support for casing on array valuesSteve Baird4-54/+459
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[Ada] Fix imprecise wording for error on scalar storage orderEric Botcazou1-3/+9
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[Ada] Make Ada.Task_Initialization compatible with No_Elaboration_Code_AllArnaud Charlet4-15/+17
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[Ada] Change message format on missing returnArnaud Charlet1-1/+1
gcc/ada/ * sem_ch6.adb (Check_Returns): Change message on missing return.
2021-09-22[Ada] Mark gnatfind and gnatxref obsoleteArnaud Charlet2-0/+10
gcc/ada/ * gnatfind.adb, gnatxref.adb: Mark these tools as obsolete before removing them completely.
2021-09-22Set bound/cmp/control for until wrap loop.Jiufu Guo2-1/+50
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-22Check for BB before calling register_outgoing_edges.Aldy Hernandez1-5/+3
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-22path solver: Use range_on_path_entry instead of looking at equivalences.Aldy Hernandez2-33/+1
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-22AVX512FP16: Add permutation and mask blend intrinsics.dianhong xu3-0/+178
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-22AVX512FP16: Add complex conjugation intrinsic instructions.dianhong xu4-0/+169
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-22AVX512FP16: Add reduce operators(add/mul/min/max).dianhong xu4-0/+579
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-22AVX512FP16: Support load/store/abs intrinsics.dianhong xu3-0/+256
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-22Small tweak to comments in range_cannot_be_superflatEric Botcazou1-2/+4
gcc/ada/ * gcc-interface/decl.c (range_cannot_be_superflat): Tweak comments.
2021-09-22IBM Z: TPF: Add cc clobber to profiling expandersAndreas Krebbel1-2/+4
The code sequence emitted uses CC internally. gcc/ChangeLog: * config/s390/tpf.md (prologue_tpf, epilogue_tpf): Add cc clobber.
2021-09-22Fortran: Add gfc_simple_for_loop aux functionTobias Burnus2-0/+36
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-22IBM Z: Fix PR102222Andreas Krebbel2-0/+26
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-22openmp: Fix OpenMP expansion of scope with non-fallthrugh body [PR102415]Jakub Jelinek2-2/+29
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-22openmp: Add support for allocator and align modifiers on allocate clausesJakub Jelinek12-33/+544
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-22Support 64bit fma/fms/fnma/fnms under avx512vl.liuhongt3-9/+25
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-22Adjust testcase.liuhongt2-2/+7
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-22AVX512FP16: Add expander for cstorehf4.liuhongt3-0/+84
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-22AVX512FP16: Add expander for ceil/floor/trunc/roundeven.liuhongt3-7/+50
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-22AVX512FP16: Add expander for sqrthf2.liuhongt5-8/+65
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-22AVX512FP16: Add testcases for vfcmaddcsh/vfmaddcsh/vfcmulcsh/vfmulcsh.liuhongt9-0/+424
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-22AVX512FP16: Add vfcmaddcsh/vfmaddcsh/vfcmulcsh/vfmulcsh.liuhongt9-0/+682
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-22AVX512FP16: Add testcases for vfcmaddcph/vfmaddcph/vfcmulcph/vfmulcph.liuhongt17-2/+777
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-22AVX512FP16: Add vfcmaddcph/vfmaddcph/vfcmulcph/vfmulcphliuhongt12-0/+895
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-21rs6000: Parameterize some const values for density testKewen Lin2-15/+45
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.