aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2022-11-07ada: Document that gprof won't work on windows with PIE.Cedric Landet2-4/+11
Document that gprof won't work on windows with PIE and -no-pie must be used. gcc/ada/ * doc/gnat_ugn/gnat_and_program_execution.rst: Mention the needed -no-pie for windows to use gprof. * gnat_ugn.texi: Regenerate.
2022-11-07ada: Tune hash function for cross-reference entriesPiotr Trojanek1-2/+2
Tune the hash function that combines entity identifiers with source locations of where those entities are referenced. Previously the source location was multiplied by 2 ** 7 (i.e. shifted left by 7 bits), then added to the entity identifier, and finally divided modulo 2 ** 16 (i.e. masked to only use the lowest 16 bits). This hash routine caused collisions that could make some tests up to twice slower. With a large entity number the source location was only contributing few bits to the hash value. This large entity number might correspond to entity like Ada.Characters.Latin_1.NUL that occurs thousands of times in generated code. gcc/ada/ * lib-xref.adb (Hash): Tune hash function.
2022-11-07ada: Fix performance regression related to references in Refined_StatePiotr Trojanek1-27/+29
Recently added call to In_Pragma_Expression caused a performance regression. It might require climbing syntax trees of arbitrarily deep expressions, while previously references within pragmas were detected in bounded time. This patch restores the previous efficiency. However, while the original code only detected references directly within pragma argument associations, now we also detect references inside aggregates, e.g. like those in pragma Refined_State. gcc/ada/ * sem_prag.adb (Non_Significant_Pragma_Reference): Detect references with aggregates; only assign local variables Id and C when necessary.
2022-11-07ada: Use named notation in calls to Expand_Composite_EqualityBob Duff1-12/+18
Use named notation in calls to Expand_Composite_Equality. gcc/ada/ * exp_ch4.adb (Component_Equality, Expand_Array_Equality) (Expand_Record_Equality): Use named notation.
2022-11-07ada: New warning about noncomposing user-defined "="Bob Duff10-34/+145
Print warning for a user-defined "=" that does not compose as might be expected (i.e. is ignored for predefined "=" of a containing record or array type). This warning is enabled by -gnatw_q; we don't enable it by default because it generates too many false positives. We also don't enable it via -gnatwa. gcc/ada/ * exp_ch4.adb (Expand_Array_Equality): Do not test Ltyp = Rtyp here, because that is necessarily true. Move assertion thereof to more general place. (Expand_Composite_Equality): Pass in Outer_Type, for use in warnings. Rename Typ to be Comp_Type, to more clearly distinguish it from Outer_Type. Print warning when appropriate. * exp_ch4.ads: Minor comment fix. * errout.ads: There is no such pragma as Warning_As_Pragma -- Warning_As_Error must have been intended. Improve comment for ?x?. * exp_ch3.adb (Build_Untagged_Equality): Update comment to be accurate for more recent versions of Ada. * sem_case.adb (Choice_Analysis): Declare user-defined "=" functions as abstract. * sem_util.ads (Is_Bounded_String): Give RM reference in comment. * warnsw.ads, warnsw.adb (Warn_On_Ignored_Equality): Implement new warning switch -gnatw_q. * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Document new warning switch. * gnat_ugn.texi: Regenerate.
2022-11-07ada: Inline composite node kind AST queriesPiotr Trojanek2-2/+3
Queries that ultimately examine the same field of an AST node (e.g. Nkind) are visibly more efficient when inlined. In particular, routines Is_Body_Or_Package_Declaration and Is_Body can apparently be inlined into a single Nkind membership test. This patch fixes some of the performance lost with the recent changes, which increased the number of calls to Is_Body_Or_Package_Declaration (as it is typically used to prevent AST search from climbing too far). However, it should be generally beneficial to inline routines like this. gcc/ada/ * sem_aux.ads (Is_Body): Annotate with Inline. * sem_util.ads (Is_Body_Or_Package_Declaration): Likewise.
2022-11-07ada: Fix inherited postconditions in inlined subprogramsBob Duff1-5/+10
Protect the building of postcondition pragmas in case the postcondition is not present due to inlining. gcc/ada/ * freeze.adb (Build_Inherited_Condition_Pragmas): Do nothing if A_Post is empty.
2022-11-07ada: Fixed elaboration of CUDA programs.Quentin Ochem1-9/+11
The names of imported / exported symbols were not consistent between the device and the host when compiling for CUDA. Remove the function Device_Ada_Final_Link_Name as it is no longer referenced. gcc/ada/ * bindgen.adb: fixed the way the device init and final symbols are computed, re-using the normal way these symbols would be computed with a __device_ prefix. Also fixed the "is null;" procedure on the host side which are not Ada 95, replaced with a procedure raising an exception as it should never be called. Remove the unused function Device_Ada_Final_Link_Name. Co-authored-by: Steve Baird <baird@adacore.com>
2022-11-07ada: Rework CUDA host-side invocation of device-side elaboration codeSteve Baird3-36/+34
When the binder is invoked with a "-d_c" switch, add an argument to that switch which is the library name on the device side; so "-d_c" becomes "-d_c=some_library_name". This does not effect the case where "-d_c" is specified as a switch for compilation (as opposed to binding). Use this new piece of information in the code generated by the binder to invoke elaboration code on the device side from the host side. gcc/ada/ * opt.ads: Declare new string pointer variable, CUDA_Device_Library_Name. Modify comments for existing Boolean variable Enable_CUDA_Device_Expansion. * switch-b.adb: When "-d_c" switch is encountered, check that the next character is an "'='; use the remaining characters to initialize Opt.CUDA_Device_Library_Name. * bindgen.adb: Remove (for now) most support for host-side invocation of device-side finalization. Make use of the new CUDA_Device_Library_Name in determining the string used to refer (on the host side) to the device-side initialization procedure. Declare the placeholder routine that is named in the CUDA_Execute pragma (and the CUDA_Register_Function call) as an exported null procedure, rather than as an imported procedure. It is not clear whether it is really necessary to specify the link-name for this should-never-be-called subprogram on the host side, but for now it shouldn't hurt to do so.
2022-11-07ada: Fix detection of external calls to protected objects in instancesPiotr Trojanek1-1/+1
Detection of external-vs-internal calls to protected objects relied on the scope stack. This didn't work when the call appeared in an instance of generic unit, because instances are analyzed in different context to where they appear. gcc/ada/ * exp_ch6.adb (Expand_Protected_Subprogram_Call): Examine scope tree and not the scope stack.
2022-11-07ada: Clean up unnecessary nesting in code for DLL librariesPiotr Trojanek2-44/+28
Code cleanup; issue spotted while examining routines with No_ prefix. gcc/ada/ * mdll.ads (Build_Import_Library): Fix grammar in comment. * mdll.adb (Build_Import_Library): Directly execute code of a nested routine; rename No_Lib_Prefix to Strip_Lib_Prefix.
2022-11-07ada: Suppress warnings on derived True/FalseBob Duff1-70/+49
GNAT normally warns on "return ...;" if the "..." is known to be True or False, but not when it is a Boolean literal True or False. This patch also suppresses the warning when the type is derived from Boolean, and has convention C or Fortran (and therefore True is represented as "nonzero"). Without this fix, GNAT would give warnings like "False is always False". gcc/ada/ * sem_warn.adb (Check_For_Warnings): Remove unnecessary exception handler. (Warn_On_Known_Condition): Suppress warning when we detect a True or False that has been turned into a more complex expression because True is represented as "nonzero". (Note that the complex expression will subsequently be constant-folded to a Boolean True or False). Also simplify to always print "condition is always ..." instead of special-casing object names. The special case was unhelpful, and indeed wrong when the expression is a literal.
2022-11-07ada: Deconstruct Safe_To_Capture_In_Parameter_ValuePiotr Trojanek2-118/+7
Recently routine Safe_To_Capture_Value was adapted, so that various data properties like validity/nullness/values are tracked also for in-parameters. Now a similar routine Safe_To_Capture_In_Parameter_Value, which was only used to track data nullness, is redundant, so this patch deconstructs it. Also the removed routine had at least few problems and limitations, for example: 1) it only worked for functions and procedures, but not for protected entries and task types (whose discriminants work very much like in-parameters) 2) it only worked for subprogram bodies with no spec, because of this dubious check (here simplified): if Nkind (Parent (Parent (Current_Scope))) /= N_Subprogram_Body then return False; 3) it only recognized references within short-circuit operators as certainly evaluated if they were directly their left hand expression, e.g.: X.all and then ... but not when they were certainly evaluated as part of a bigger expression on the left hand side, e.g.: (X.all > 0) and then ... 4) it categorizes parameters with 'Unrestricted_Access attribute as safe to capture, which is not necessarily wrong, but risky (because the object becomes aliased). Routine Safe_To_Capture_Value, which is kept by this patch, seems to behave better in all those situations, though it has its own problems as well and ideally should be further scrutinized. gcc/ada/ * checks.adb (Safe_To_Capture_In_Parameter_Value): Remove. * sem_util.adb (Safe_To_Capture_Value): Stop search at the current body.
2022-11-07ada: Flip warning suppression routine to positive meaningPiotr Trojanek1-16/+11
Subprogram names starting with No_ seem unnecessarily confusing. Cleanup related to improved detection of references to uninitialized objects; semantics is unaffected. gcc/ada/ * sem_warn.adb (Warn_On_In_Out): Remove No_ prefix; flip return values between True and False; adapt caller.
2022-11-07ada: Cleanup detection of code within generic instancesPiotr Trojanek4-8/+5
To check if a node is located in a generic instance we can either look at Instantiation_Location or at the Instantiation_Depth, but just looking at the location is simpler and more efficient. Cleanup related to improved detection of references to uninitialized objects; semantics is unaffected. gcc/ada/ * sem_ch13.adb (Add_Call): Just look at Instantiation_Depth. * sem_ch3.adb (Derive_Subprograms): Likewise. * sem_warn.adb (Check_References): Remove redundant filtering with Instantiation_Depth that follows filtering with Instantiation_Location. * sinput.adb (Instantiation_Depth): Reuse Instantiation_Location.
2022-11-07ada: Remove redundant suppression for non-modified IN OUT parametersPiotr Trojanek1-6/+4
Non-modified IN OUT parameters are first collected and then filtered by examining uses of their enclosing subprograms. In this filtering we don't need to look again at properties of the formal parameters themselves. Cleanup related to improved detection of references to uninitialized objects; semantics is unaffected. gcc/ada/ * sem_warn.adb (No_Warn_On_In_Out): For subprograms we can simply call Warnings_Off. (Output_Non_Modified_In_Out_Warnings): Remove repeated suppression.
2022-11-07ada: Reject boxes in delta array aggregatesPiotr Trojanek1-1/+12
Implement Ada 2022 4.3.4(11/5), which rejects box compound delimiter <> in delta record aggregates, just like another rule rejects it in delta array aggregates. gcc/ada/ * sem_aggr.adb (Resolve_Delta_Array_Aggregate): Reject boxes in delta array aggregates.
2022-11-07ada: Allow reuse of Enclosing_Declaration_Or_Statement by GNATprovePiotr Trojanek3-31/+31
Move routine Enclosing_Declaration_Or_Statement from body of Sem_Res to spec of Sem_Util, so it can be reused. In particular, GNATprove needs this functionality to climb from an arbitrary subexpression with target_name (@) to the enclosing assignment statement. Behaviour of the compiler is unaffected. gcc/ada/ * sem_res.adb (Enclosing_Declaration_Or_Statement): Moved to Sem_Util. * sem_util.ads (Enclosing_Declaration_Or_Statement): Moved from Sem_Res. * sem_util.adb (Enclosing_Declaration_Or_Statement): Likewise.
2022-11-07ada: Clean up unnecesary call in resolution of overloaded expressionsPiotr Trojanek1-2/+2
When experimentally enabling frontend inlining by default, the unnecessary call to Comes_From_Predefined_Lib_Unit in Resolve appears to be a performance bottleneck (most likely this call is expensive because it involves a loop over the currently inlined subprograms). Code cleanup; semantics is unaffected. gcc/ada/ * sem_res.adb (Resolve): Only call Comes_From_Predefined_Lib_Unit when its result might be needed.
2022-11-07ada: Clean up code for visibility of generic actualsPiotr Trojanek1-8/+6
Code cleanup related to fixing visibility of actual parameters in inlining-for-proof in GNATprove mode; semantics is unaffected. gcc/ada/ * sem_ch12.adb (Check_Generic_Actuals): Remove redundant parens; refactor an excessive if-statement; remove repeated call to Node.
2022-11-07ada: Cleanup comment about mapping parameters when inliningPiotr Trojanek1-8/+8
Improve location of the comment about a special case for GNATprove mode. gcc/ada/ * inline.adb (Establish_Actual_Mapping_For_Inlined_Call): Move comment next to a condition that it describes.
2022-11-07ada: Put_Image aspect spec incorrectly not inheritedSteve Baird1-3/+3
In some cases, a Put_Image aspect specification for a scalar type was not correctly inherited by a descendant of that type. gcc/ada/ * exp_put_image.adb (Image_Should_Call_Put_Image): Correctly handle the case of an inherited Put_Image aspect specification for a scalar type.
2022-11-07ada: Tune layout after switching to Ada 2022 aggregate syntaxPiotr Trojanek1-6/+5
Whitespace cleanup only. gcc/ada/ * libgnarl/s-interr.adb: Tune whitespace.
2022-11-07ada: Cleanup WITH clauses after switching from obsolescent Ada 83 unitPiotr Trojanek1-11/+6
Cleanup after replacing Unchecked_Conversion with Ada.Unchecked_Conversion. gcc/ada/ * libgnarl/s-interr.adb: Reorder context items and pragmas.
2022-11-07ada: Create operator nodes in functional stylePiotr Trojanek2-70/+76
A recent patch removed two rewritings, where we kept the operator node but replaced its operands. This patch removes explicit setting of the operands; instead, the operator is already created together with its operands, which seems a bit safer and more consistent with how we typically create operator nodes. It is a cleanup only; semantics is unaffected. gcc/ada/ * exp_ch4.adb (Expand_Modular_Addition): Rewrite using Make_XXX calls. (Expand_Modular_Op): Likewise. (Expand_Modular_Subtraction): Likewise. * exp_imgv.adb (Expand_User_Defined_Enumeration_Image): Likewise.
2022-11-07ada: Don't reuse operator nodes in expansionPiotr Trojanek4-59/+58
This patch removes handling of references to unset objects that relied on Original_Node. This handling was only needed because of rewriting that reused operator nodes, for example, when an array inequality like: A < B was rewritten into: System.Compare_Array_Unsigned_8.Compare_Array_U8 (A'Address, B'Address, A'Length, B'Length) < 0 by keeping the node for operator "<" and only substituting its operands. It seems safer to simply create an new operator node when rewriting and not rely on Original_Node afterwards. Cleanup related to improved detection uninitialized objects. gcc/ada/ * checks.adb (Apply_Arithmetic_Overflow_Strict): Rewrite using a newly created operator node. * exp_ch4.adb (Expand_Array_Comparison): Likewise. * exp_ch6.adb (Add_Call_By_Copy_Code): Rewriting actual parameter using its own location and not the location of the subprogram call. * sem_warn.adb (Check_References): Looping with Original_Node is no longer needed.
2022-11-07ada: Simplify detection of pragmas in the context itemsPiotr Trojanek1-11/+5
Code cleanup; semantics is unaffected. gcc/ada/ * sem_prag.adb (Is_In_Context_Clause): Rewrite without negations and inequalities.
2022-11-07ada: Reject misplaced pragma ObsolescentPiotr Trojanek1-2/+8
Pragma Obsolescent appearing before declaration was putting the Obsolescent flag on the Standard package, which is certainly wrong. The problem was that we relied on the Find_Lib_Unit_Name routine without sanitizing the pragma placement with Check_Valid_Library_Unit_Pragma. Part of cleaning up the warnings machinery to better handle references to unset objects. gcc/ada/ * sem_prag.adb (Analyze_Pragma [Pragma_Obsolescent]): Reject misplaced pragma.
2022-11-07ada: Fix missing tag for with of an obsolescent functionPiotr Trojanek1-1/+1
Fix minor inconsistency in tags of warnings about obsolescent entities. Part of cleaning up the warnings machinery to better handle references to unset objects. gcc/ada/ * sem_warn.adb (Output_Obsolescent_Entity_Warnings): Tag warnings about obsolescent functions just like we tag similar warnings for packages and procedures.
2022-11-07ada: Remove useless validity suppression for attribute InputPiotr Trojanek1-3/+2
Attributes 'Input and 'Read are similar, but only the 'Read denotes a subprogram with parameter of mode OUT where operand validity checks need to be suppressed. Cleanup related to fix for attributes 'Has_Same_Storage and 'Overlaps_Storage. gcc/ada/ * exp_attr.adb (Expand_N_Attribute_Reference): Remove useless skipping for attribute Input.
2022-11-07vect: Fold LEN_{LOAD,STORE} if it's for the whole vector [PR107412]Kewen Lin3-14/+64
As the test case in PR107412 shows, we can fold IFN .LEN_{LOAD, STORE} into normal vector load/store if the given length is known to be equal to the length of the whole vector. It would help to improve overall cycles as normally the latency of vector access with length in bytes is bigger than normal vector access, and it also saves the preparation for length if constant length can not be encoded into instruction (such as on power). PR tree-optimization/107412 gcc/ChangeLog: * gimple-fold.cc (gimple_fold_mask_load_store_mem_ref): Rename to ... (gimple_fold_partial_load_store_mem_ref): ... this, add one parameter mask_p indicating it's for mask or length, and add some handlings for IFN LEN_{LOAD,STORE}. (gimple_fold_mask_load): Rename to ... (gimple_fold_partial_load): ... this, add one parameter mask_p. (gimple_fold_mask_store): Rename to ... (gimple_fold_partial_store): ... this, add one parameter mask_p. (gimple_fold_call): Add the handlings for IFN LEN_{LOAD,STORE}, and adjust calls on gimple_fold_mask_load_store_mem_ref to gimple_fold_partial_load_store_mem_ref. gcc/testsuite/ChangeLog: * gcc.target/powerpc/pr107412.c: New test. * gcc.target/powerpc/p9-vec-length-epil-8.c: Adjust scan times for folded LEN_LOAD.
2022-11-07Merge branch 'master' into devel/sphinxMartin Liska654-5274/+14477
2022-11-07Initial Grand Ridge supportHu, Lin112-2/+45
gcc/ChangeLog: * common/config/i386/cpuinfo.h (get_intel_cpu): Handle Grand Ridge. * common/config/i386/i386-common.cc (processor_names): Add grandridge. (processor_alias_table): Ditto. * common/config/i386/i386-cpuinfo.h: (enum processor_types): Add INTEL_GRANDRIDGE. * config.gcc: Add -march=grandridge. * config/i386/driver-i386.cc (host_detect_local_cpu): Handle grandridge. * config/i386/i386-c.cc (ix86_target_macros_internal): Ditto. * config/i386/i386-options.cc (m_GRANDRIDGE): New define. (processor_cost_table): Add grandridge. * config/i386/i386.h (enum processor_type): Add PROCESSOR_GRANDRIDGE. (PTA_GRANDRIDGE): Ditto. * doc/extend.texi: Add grandridge. * doc/invoke.texi: Ditto. gcc/testsuite/ChangeLog: * g++.target/i386/mv16.C: Add grandridge. * gcc.target/i386/funcspec-56.inc: Handle new march.
2022-11-07i386: Prefer remote atomic insn for atomic_fetch{add, and, or, xor}konglin14-4/+62
Add flag -mprefer-remote-atomic to control whether to generate raoint insn for atomic operations. gcc/ChangeLog: * config/i386/i386.opt:Add -mprefer-remote-atomic. * config/i386/sync.md (atomic_<plus_logic><mode>): New define_expand. (atomic_add<mode>): Rename to below one. (atomic_add<mode>_1): To this. (atomic_<logic><mode>): Ditto. (atomic_<logic><mode>_1): Ditto. * doc/invoke.texi: Add -mprefer-remote-atomic. gcc/testsuite/ChangeLog: * gcc.target/i386/raoint-atomic-fetch.c: New test.
2022-11-07Support Intel RAO-INTkonglin137-21/+412
gcc/ChangeLog: * common/config/i386/cpuinfo.h (get_available_features): Detect raoint. * common/config/i386/i386-common.cc (OPTION_MASK_ISA2_RAOINT_SET, OPTION_MASK_ISA2_RAOINT_UNSET): New. (ix86_handle_option): Handle -mraoint. * common/config/i386/i386-cpuinfo.h (enum processor_features): Add FEATURE_RAOINT. * common/config/i386/i386-isas.h: Add ISA_NAME_TABLE_ENTRY for raoint. * config.gcc: Add raointintrin.h * config/i386/cpuid.h (bit_RAOINT): New. * config/i386/i386-builtin.def (BDESC): Add new builtins. * config/i386/i386-c.cc (ix86_target_macros_internal): Define __RAOINT__. * config/i386/i386-isa.def (RAOINT): Add DEF_PTA(RAOINT). * config/i386/i386-options.cc (ix86_valid_target_attribute_inner_p): Add -mraoint. * config/i386/sync.md (rao_a<raointop><mode>): New define insn. * config/i386/i386.opt: Add option -mraoint. * config/i386/x86gprintrin.h: Include raointintrin.h. * doc/extend.texi: Document raoint. * doc/invoke.texi: Document -mraoint. * doc/sourcebuild.texi: Document target raoint. * config/i386/raointintrin.h: New file. gcc/testsuite/ChangeLog: * g++.dg/other/i386-2.C: Add -mraoint. * g++.dg/other/i386-3.C: Ditto. * gcc.target/i386/funcspec-56.inc: Add new target attribute. * gcc.target/i386/sse-12.c: Add -mraoint. * gcc.target/i386/sse-13.c: Ditto. * gcc.target/i386/sse-14.c: Ditto. * gcc.target/i386/sse-22.c: Add raoint target. * gcc.target/i386/sse-23.c: Ditto. * lib/target-supports.exp: Add check_effective_target_raoint. * gcc.target/i386/rao-helper.h: New test. * gcc.target/i386/raoint-1.c: Ditto. * gcc.target/i386/raoint-aadd-2.c: Ditto. * gcc.target/i386/raoint-aand-2.c: Ditto. * gcc.target/i386/raoint-aor-2.c: Ditto. * gcc.target/i386/raoint-axor-2.c: Ditto. * gcc.target/i386/x86gprintrin-1.c: Ditto. * gcc.target/i386/x86gprintrin-2.c: Ditto. * gcc.target/i386/x86gprintrin-3.c: Ditto. * gcc.target/i386/x86gprintrin-4.c: Ditto. * gcc.target/i386/x86gprintrin-5.c: Ditto.
2022-11-07Initial Granite Rapids SupportHaochen Jiang12-3/+52
gcc/ChangeLog: * common/config/i386/cpuinfo.h (get_intel_cpu): Handle Granite Rapids. * common/config/i386/i386-common.cc: (processor_names): Add graniterapids. (processor_alias_table): Ditto. * common/config/i386/i386-cpuinfo.h (enum processor_subtypes): Add INTEL_GRANTIERAPIDS. * config.gcc: Add -march=graniterapids. * config/i386/driver-i386.cc (host_detect_local_cpu): Handle graniterapids. * config/i386/i386-c.cc (ix86_target_macros_internal): Ditto. * config/i386/i386-options.cc (m_GRANITERAPIDS): New. (processor_cost_table): Add graniterapids. * config/i386/i386.h (enum processor_type): Add PROCESSOR_GRANITERAPIDS. (PTA_GRANITERAPIDS): Ditto. * doc/extend.texi: Add graniterapids. * doc/invoke.texi: Ditto. gcc/testsuite/ChangeLog: * g++.target/i386/mv16.C: Add graniterapids. * gcc.target/i386/funcspec-56.inc: Handle new march.
2022-11-07Support Intel prefetchit0/t1Haochen Jiang36-20/+345
gcc/ChangeLog: * common/config/i386/cpuinfo.h (get_available_features): Detect PREFETCHI. * common/config/i386/i386-common.cc (OPTION_MASK_ISA2_PREFETCHI_SET, OPTION_MASK_ISA2_PREFETCHI_UNSET): New. (ix86_handle_option): Handle -mprefetchi. * common/config/i386/i386-cpuinfo.h (enum processor_features): Add FEATURE_PREFETCHI. * common/config/i386/i386-isas.h: Add ISA_NAME_TABLE_ENTRY for prefetchi. * config.gcc: Add prfchiintrin.h. * config/i386/cpuid.h (bit_PREFETCHI): New. * config/i386/i386-builtin-types.def: Add DEF_FUNCTION_TYPE (VOID, PCVOID, INT) and DEF_FUNCTION_TYPE (VOID, PCVOID, INT, INT, INT). * config/i386/i386-builtin.def (BDESC): Add new builtins. * config/i386/i386-c.cc (ix86_target_macros_internal): Define __PREFETCHI__. * config/i386/i386-expand.cc: Handle new builtins. * config/i386/i386-isa.def (PREFETCHI): Add DEF_PTA(PREFETCHI). * config/i386/i386-options.cc (ix86_valid_target_attribute_inner_p): Handle prefetchi. * config/i386/i386.md (prefetchi): New define_insn. * config/i386/i386.opt: Add option -mprefetchi. * config/i386/predicates.md (local_func_symbolic_operand): New predicates. * config/i386/x86gprintrin.h: Include prfchiintrin.h. * config/i386/xmmintrin.h (enum _mm_hint): New enum for prefetchi. (_mm_prefetch): Handle the highest bit of enum. * doc/extend.texi: Document prefetchi. * doc/invoke.texi: Document -mprefetchi. * doc/sourcebuild.texi: Document target prefetchi. * config/i386/prfchiintrin.h: New file. gcc/testsuite/ChangeLog: * g++.dg/other/i386-2.C: Add -mprefetchi. * g++.dg/other/i386-3.C: Ditto. * gcc.target/i386/avx-1.c: Ditto. * gcc.target/i386/funcspec-56.inc: Add new target attribute. * gcc.target/i386/sse-13.c: Add -mprefetchi. * gcc.target/i386/sse-23.c: Ditto. * gcc.target/i386/x86gprintrin-1.c: Ditto. * gcc.target/i386/x86gprintrin-2.c: Ditto. * gcc.target/i386/x86gprintrin-3.c: Ditto. * gcc.target/i386/x86gprintrin-4.c: Ditto. * gcc.target/i386/x86gprintrin-5.c: Ditto. * gcc.target/i386/prefetchi-1.c: New test. * gcc.target/i386/prefetchi-2.c: Ditto. * gcc.target/i386/prefetchi-3.c: Ditto. * gcc.target/i386/prefetchi-4.c: Ditto. Co-authored-by: Hongtao Liu <hongtao.liu@intel.com>
2022-11-07Daily bump.GCC Administrator4-1/+17
2022-11-06optabs: Use operand[2] mode in can_vec_set_var_idx_pUros Bizjak1-1/+6
Use operand[2] mode in can_vec_set_var_idx_p when checking vec_set_optab. This change allows non-VOID index operand in vec_set_optab. 2022-11-06 Uroš Bizjak <ubizjak@gmail.com> gcc/ChangeLog: * optabs.cc (can_vec_set_var_idx_p): Use operand[2] mode when checking vec_set_optab.
2022-11-06c++: correct __has_attribute(init_priority)Patrick Palka2-13/+17
Currently __has_attribute(init_priority) always returns true, even on targets that don't actually support init priorities, and when using the attribute on such targets we just get a hard error about them being unsupported. This makes it impossible to conditionally use the attribute by querying __has_attribute. This patch fixes this by including init_priority in the attribute table only if the target supports init priorities. Thus on such targets __has_attribute(init_priority) will now return false and we'll treat it as just another unrecognized attribute (e.g. using it gives a -Wattribute warning instead of a hard error). gcc/cp/ChangeLog: * tree.cc (cxx_attribute_table): Include init_priority entry only if SUPPORTS_INIT_PRIORITY. (handle_init_priority_attribute): Add ATTRIBUTE_UNUSED. Assert SUPPORTS_INIT_PRIORITY is true. gcc/testsuite/ChangeLog: * g++.dg/special/initpri3.C: New test.
2022-11-06Manually add ChangeLog entries from ↵Jakub Jelinek1-0/+14
r13-3652-ge4cba49413ca429dc82f6aa2e88129ecb3fdd943 This commit caused failure of update_version_git due to the removal of liboffloadmic with ChangeLog in it, so I had to blacklist that commit and here I'm adding ChangeLog entries manually.
2022-11-06Daily bump.GCC Administrator7-1/+550
2022-11-06LoongArch: Add fcopysign instructionsXi Ruoyao2-1/+37
Add fcopysign.{s,d} with the names copysign{sf,df}3 so GCC will expand __builtin_copysign{f,} to a single instruction. Link: https://sourceware.org/pipermail/libc-alpha/2022-November/143177.html gcc/ChangeLog: * config/loongarch/loongarch.md (UNSPEC_FCOPYSIGN): New unspec. (type): Add fcopysign. (copysign<mode>3): New instruction template. gcc/testsuite/ChangeLog: * gcc.target/loongarch/fcopysign.c: New test.
2022-11-06Plug memory leak in attribute target_clonesBernhard Reutner-Fischer1-4/+8
It looks like there was some memory leak in the handling of attribute target_clones. Ok for trunk if testing passes? gcc/ChangeLog: * multiple_target.cc (expand_target_clones): Free memory. Signed-off-by: Bernhard Reutner-Fischer <aldot@gcc.gnu.org>
2022-11-06cgraph_node: Remove redundant section clearingBernhard Reutner-Fischer2-2/+0
Ok for trunk if testing passes? gcc/ChangeLog: * cgraph.cc (cgraph_node::make_local): Remove redundant set_section. * multiple_target.cc (create_dispatcher_calls): Likewise. Signed-off-by: Bernhard Reutner-Fischer <aldot@gcc.gnu.org>
2022-11-05d: Adjust test to pass when compiling with -m32Iain Buclaw1-2/+2
Noticed when running on x86_64-linux-gnu with `-m32', this test triggered other errors. Adjusted the test to use a different register that is common between x86 and x86_64. gcc/testsuite/ChangeLog: * gdc.dg/attr_register2.d: Adjust test.
2022-11-05d: Add support for vector comparison operatorsIain Buclaw14-179/+60
The front-end added semantic support to permit comparing two vector expressions. This removes the restriction in the code generator, as well as the intrisics that previously exposed the same operation. gcc/d/ChangeLog: * d-target.cc (Target::isVectorOpSupported): Remove cases for comparison operators. * intrinsics.cc (maybe_set_intrinsic): Remove cases for vector comparison intrinsics. (maybe_warn_intrinsic_mismatch): Likewise. (expand_intrinsic_vec_cond): Remove. (maybe_expand_intrinsic): Remove cases for vector comparison intrinsics. * intrinsics.def (INTRINSIC_EQUALMASK): Remove. (INTRINSIC_NOTEQUALMASK): Remove. (INTRINSIC_GREATERMASK): Remove. (INTRINSIC_GREATEREQUALMASK): Remove. libphobos/ChangeLog: * libdruntime/gcc/simd.d (equalMask): Implement using generics. (notEqualMask): Likewise. (greaterMask): Likewise. (greaterOrEqualMask): Likewise. (notMask): Likewise. (andAndMask): Likewise. (orOrMask): Likewise. gcc/testsuite/ChangeLog: * gdc.dg/Wbuiltin_declaration_mismatch2.d: Remove comparision tests. * gdc.dg/simd2a.d: Update comparison tests. * gdc.dg/simd2b.d: Likewise. * gdc.dg/simd2c.d: Likewise. * gdc.dg/simd2d.d: Likewise. * gdc.dg/simd2e.d: Likewise. * gdc.dg/simd2f.d: Likewise. * gdc.dg/simd2g.d: Likewise. * gdc.dg/simd2h.d: Likewise. * gdc.dg/simd2i.d: Likewise. * gdc.dg/simd2j.d: Likewise.
2022-11-05c++: libcpp: Support raw strings with newlines in directives [PR55971]Lewis Hyatt3-1/+116
It's not currently possible to use a C++11 raw string containing a newline as part of the definition of a macro, or in any other preprocessing directive, such as: #define X R"(two lines)" #error R"(this error has two lines)" Add support for that by relaxing the conditions under which _cpp_get_fresh_line() refuses to get a new line. For the case of lexing a raw string, it's OK to do so as long as there is another line within the current buffer. The code in cpp_get_fresh_line() was refactored into a new function get_fresh_line_impl(), so that the new logic is applied only when processing a raw string and not any other times. libcpp/ChangeLog: PR preprocessor/55971 * lex.cc (get_fresh_line_impl): New function refactoring the code from... (_cpp_get_fresh_line): ...here. (lex_raw_string): Use the new version of get_fresh_line_impl() to support raw strings containing new lines when processing a directive. gcc/testsuite/ChangeLog: PR preprocessor/55971 * c-c++-common/raw-string-directive-1.c: New test. * c-c++-common/raw-string-directive-2.c: New test. gcc/c-family/ChangeLog: PR preprocessor/55971 * c-ppoutput.cc (adjust_for_newlines): Update comment.
2022-11-05doc: Document correct -fwide-exec-charset defaults [PR41041]Jonathan Wakely1-3/+4
As shown in the PR, the default is not UTF-32 but rather UTF-32BE or UTF-32LE, avoiding the need for a byte order mark in literals. gcc/ChangeLog: PR c/41041 * doc/cppopts.texi: Document -fwide-exec-charset defaults correctly.
2022-11-05Support multilib-aware target lib flags self-specs overridingAlexandre Oliva4-2/+42
This patch introduces -fmultiflags, short for multilib TFLAGS, as an option that does nothing by default, but that can be added to TFLAGS and mapped to useful options by driver self-specs. for gcc/ChangeLog * common.opt (fmultiflags): New. * doc/invoke.texi: Document it. * gcc.cc (driver_self_specs): Discard it. * opts.cc (common_handle_option): Ignore it in the driver.