aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2023-11-28Fix PR ada/111909 On Darwin, determine filesystem case sensitivity at runtimeSimon Wright1-3/+11
In gcc/ada/adaint.c(__gnat_get_file_names_case_sensitive), the current assumption for __APPLE__ is that file names are case-insensitive unless __arm__ or __arm64__ are defined, in which case file names are declared case-sensitive. The associated comment is "By default, we suppose filesystems aren't case sensitive on Windows and Darwin (but they are on arm-darwin)." This means that on aarch64-apple-darwin, file names are treated as case-sensitive, which is not the default case. The true default position is that macOS file systems are case-insensitive, iOS file systems are case-sensitive. Apple provide a header file <TargetConditionals.h> which permits a compile-time check for the compiler target (e.g. OSX vs IOS); if TARGET_OS_IOS is defined as 1, this is a build for iOS. 2023-11-22 Simon Wright <simon@pushface.org> gcc/ada/ PR ada/111909 * adaint.c (__gnat_get_file_names_case_sensitive): Split out the __APPLE__ check and remove the checks for __arm__, __arm64__. For Apple, file names are by default case-insensitive unless TARGET_OS_IOS is set. Signed-off-by: Simon Wright <simon@pushface.org>
2023-11-28middle-end/112741 - ICE with gimple FE and later regimplificationRichard Biener2-1/+28
The GIMPLE frontend, when bypassing gimplification, doesn't set DECL_SEEN_IN_BIND_EXPR_P given there are no such things in GIMPLE. But it probably should set the flag anyway to avoid later ICEs when regimplifying. PR middle-end/112741 gcc/c/ * gimple-parser.cc (c_parser_parse_gimple_body): Also set DECL_SEEN_IN_BIND_EXPR_Pfor locals. gcc/testsuite/ * gcc.dg/ubsan/pr112741.c: New testcase.
2023-11-28middle-end/112732 - stray TYPE_ALIAS_SET in type variantRichard Biener1-0/+2
The following fixes a stray TYPE_ALIAS_SET in a type variant built by build_opaque_vector_type which is diagnosed by type checking enabled with -flto. PR middle-end/112732 * tree.cc (build_opaque_vector_type): Reset TYPE_ALIAS_SET of the newly built type.
2023-11-28i386: Improve cmpstrnqi_1 insn pattern [PR112494]Uros Bizjak1-8/+4
REPZ CMPSB instruction does not update FLAGS register when %ecx register equals zero. Improve cmpstrnqi_1 insn pattern to set FLAGS_REG to its previous value instead of (const_int 0) when operand 2 equals zero. PR target/112494 gcc/ChangeLog: * config/i386/i386.md (cmpstrnqi_1): Set FLAGS_REG to its previous value when operand 2 equals zero. (*cmpstrnqi_1): Ditto. (*cmpstrnqi_1 peephole2): Ditto.
2023-11-28Revert "This patch enables errors when external calls are created."Cupertino Miranda7-27/+6
Reverted commit was breaking the BPF build, because libgcc emits libcalls to __builtin_abort. This reverts commit faf5b148588bd7fbb60ec669aefa704044037cdc.
2023-11-28Fortran: fix reallocation on assignment of polymorphic variables [PR110415]Andrew Jenner4-14/+139
This patch fixes two bugs related to polymorphic class assignment in the Fortran front-end. One (described in PR110415) is an issue with the malloc and realloc calls using the size from the old vptr rather than the new one. The other is caused by the return value from the realloc call being ignored. Testcases are added for these issues. 2023-11-28 Andrew Jenner <andrew@codesourcery.com> gcc/fortran/ PR fortran/110415 * trans-expr.cc (trans_class_vptr_len_assignment): Add from_vptrp parameter. Populate it. Don't check for DECL_P when deciding whether to create temporary. (trans_class_pointer_fcn, gfc_trans_pointer_assignment): Add NULL argument to trans_class_vptr_len_assignment calls. (trans_class_assignment): Get rhs_vptr from trans_class_vptr_len_assignment and use it for determining size for allocation/reallocation. Use return value from realloc. gcc/testsuite/ PR fortran/110415 * gfortran.dg/pr110415.f90: New test. * gfortran.dg/asan/pr110415-2.f90: New test. * gfortran.dg/asan/pr110415-3.f90: New test. Co-Authored-By: Tobias Burnus <tobias@codesourcery.com>
2023-11-28Emit funcall external declarations only if actually used.Jose E. Marchesi4-1/+64
There are many places in GCC where alternative local sequences are tried in order to determine what is the cheapest or best alternative to use in the current target. When any of these sequences involve a libcall, the current implementation of emit_library_call_value_1 introduce a side-effect consisting on emitting an external declaration for the funcall (such as __divdi3) which is thus emitted even if the sequence that does the libcall is not retained. This is problematic in targets such as BPF, because the kernel loader chokes on the spurious symbol __divdi3 and makes the resulting BPF object unloadable. Note that BPF objects are not linked before being loaded. This patch changes asssemble_external_libcall to defer emitting declarations of external libcall symbols, by saving the call tree nodes in a temporary list pending_libcall_symbols and letting process_pending_assembly_externals to emit them only if they have been referenced. Solution suggested and sketched by Richard Sandiford. Regtested in x86_64-linux-gnu. Tested with host x86_64-linux-gnu with target bpf-unknown-none. gcc/ChangeLog PR target/109253 * varasm.cc (pending_libcall_symbols): New variable. (process_pending_assemble_externals): Process pending_libcall_symbols. (assemble_external_libcall): Defer emitting external libcall symbols to process_pending_assemble_externals. gcc/testsuite/ChangeLog PR target/109253 * gcc.target/bpf/divmod-libcall-1.c: New test. * gcc.target/bpf/divmod-libcall-2.c: Likewise. * gcc.c-torture/compile/libcall-2.c: Likewise.
2023-11-28Fixed problem with BTF defining smaller enums.Cupertino Miranda2-3/+31
This patch fixes a BTF, which would become invalid when having smaller then 4 byte definitions of enums. For example, when using the __attribute__((mode(byte))) in the enum definition. Two problems were identified: - it would incorrectly create an entry for enum64 when the size of the enum was different then 4. - it would allocate less then 4 bytes for the value entry in BTF, in case the type was smaller. BTF generated was validated against clang. gcc/ChangeLog: * btfout.cc (btf_calc_num_vbytes): Fixed logic for enum64. (btf_asm_enum_const): Corrected logic for enum64 and smaller than 4 bytes values. gcc/testsuite/ChangeLog: * gcc.dg/debug/btf/btf-enum-small.c: Added test.
2023-11-28This patch enables errors when external calls are created.Cupertino Miranda7-6/+27
When architectural limitations or usage of builtins implies the compiler to create function calls to external libraries that implement the functionality, GCC will now report an error claiming that this function calls are not compatible with eBPF target. Examples of those are the usage of __builtin_memmove and a sign division in BPF ISA v3 or below that will require to call __divdi3. This is currently an eBPF limitation which does not support linking of object files but rather "raw" non linked ones. Those object files are loaded and relocated by libbpf and the kernel. gcc/ChangeLog: * config/bpf/bpf.cc (bpf_output_call): Report error in case the function call is for a builtin. (bpf_external_libcall): Added target hook to detect and report error when other external calls that are not builtins. gcc/testsuite/ChangeLog: * gcc.target/bpf/atomic-cmpxchg-2.c: Adapted. * gcc.target/bpf/atomic-fetch-op-3.c: Adapted. * gcc.target/bpf/atomic-op-3.c: Adapted. * gcc.target/bpf/atomic-xchg-2.c: Adapted. * gcc.target/bpf/diag-sdiv.c: Adapted. * gcc.target/bpf/diag-smod.c: Adapted.
2023-11-28testsuite: Fix gcc.dg/pr111409.c on Solaris/SPARC with asRainer Orth1-2/+2
gcc.dg/pr111409.c FAILs on Solaris/SPARC with the native as: FAIL: gcc.dg/pr111409.c scan-assembler-times .section\\\\s+.debug_macro 1 Unlike most other ELF targets, that assembler requires the section name to be double-quoted. This patch allows for that. It also expects \t to separate .section directive and name like other similar tests, and escapes literal dots. Tested on sparc-sun-solaris2.11 (as and gas) and i386-pc-solaris2.11 (as and gas). 2023-11-23 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> gcc/testsuite: * gcc.dg/pr111409.c: Allow for " before .debug_macro. Quote literals dots.
2023-11-28bpf: Forces __buildin_memcmp not to generate a call upto 1024 bytes.Cupertino Miranda2-0/+21
This patch forces __builtin_memcmp calls upto data sizes of 1024 to become inline in caller. This is a requirement by BPF and it mimics the default behaviour of the clang BPF implementation. gcc/ChangeLog: * config/bpf/bpf.cc (bpf_use_by_pieces_infrastructure_p): Added function to bypass default behaviour. * config/bpf/bpf.h (COMPARE_MAX_PIECES): Defined to 1024 bytes.
2023-11-28bpf: Corrected condition in core_mark_as_access_index.Cupertino Miranda1-1/+1
gcc/ChangeLog: * config/bpf/core-builtins.cc (core_mark_as_access_index): Corrected check.
2023-11-28bpf: Delayed the removal of the parser enum plugin handler.Cupertino Miranda1-2/+1
The parser plugin handler that is responsible for collecting enum values information was being removed way too early. bpf_resolve_overloaded_core_builtin is called by the parser. It was moved to the function execute_lower_bpf_core. gcc/ChangeLog: * config/bpf/core-builtins.cc (bpf_resolve_overloaded_core_builtin): Removed call. (execute_lower_bpf_core): Added all to remove_parser_plugin.
2023-11-28RISC-V: Disallow poly (1,1) VLA SLP interleave vectorizationJuzhe-Zhong3-0/+81
This patch fixes all following ICE in zve64d: FAIL: gcc.dg/vect/pr71259.c -flto -ffat-lto-objects (internal compiler error: in SET_TYPE_VECTOR_SUBPARTS, at tree.h:4248) FAIL: gcc.dg/vect/pr71259.c -flto -ffat-lto-objects (test for excess errors) FAIL: gcc.dg/vect/vect-alias-check-14.c (internal compiler error: in SET_TYPE_VECTOR_SUBPARTS, at tree.h:4248) FAIL: gcc.dg/vect/vect-alias-check-14.c (test for excess errors) FAIL: gcc.dg/vect/vect-alias-check-14.c -flto -ffat-lto-objects (internal compiler error: in SET_TYPE_VECTOR_SUBPARTS, at tree.h:4248) FAIL: gcc.dg/vect/vect-alias-check-14.c -flto -ffat-lto-objects (test for excess errors) FAIL: gcc.dg/vect/vect-alias-check-9.c (internal compiler error: in SET_TYPE_VECTOR_SUBPARTS, at tree.h:4248) FAIL: gcc.dg/vect/vect-alias-check-9.c (test for excess errors) FAIL: gcc.dg/vect/vect-alias-check-9.c -flto -ffat-lto-objects (internal compiler error: in SET_TYPE_VECTOR_SUBPARTS, at tree.h:4248) FAIL: gcc.dg/vect/vect-alias-check-9.c -flto -ffat-lto-objects (test for excess errors) FAIL: gcc.dg/vect/vect-cond-arith-6.c (internal compiler error: in SET_TYPE_VECTOR_SUBPARTS, at tree.h:4248) FAIL: gcc.dg/vect/vect-cond-arith-6.c (test for excess errors) FAIL: gcc.dg/vect/vect-cond-arith-6.c -flto -ffat-lto-objects (internal compiler error: in SET_TYPE_VECTOR_SUBPARTS, at tree.h:4248) FAIL: gcc.dg/vect/vect-cond-arith-6.c -flto -ffat-lto-objects (test for excess errors) FAIL: gcc.dg/vect/vect-gather-5.c (internal compiler error: in SET_TYPE_VECTOR_SUBPARTS, at tree.h:4248) FAIL: gcc.dg/vect/vect-gather-5.c (test for excess errors) FAIL: gcc.dg/vect/vect-gather-5.c -flto -ffat-lto-objects (internal compiler error: in SET_TYPE_VECTOR_SUBPARTS, at tree.h:4248) FAIL: gcc.dg/vect/vect-gather-5.c -flto -ffat-lto-objects (test for excess errors) poly size (1, 1) vectors can not be allowed to interleave VLA SLP since interleave VLA SLP suppose VF at least hold 2 elements, whereas, poly size (1,1) may possible only have 1 element. PR target/112694 gcc/ChangeLog: * config/riscv/riscv-v.cc (expand_vec_perm_const): Disallow poly size (1, 1) VLA SLP. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/pr112694-2.c: New test. * gcc.target/riscv/rvv/autovec/pr112694-3.c: New test.
2023-11-28ada: Fix wrong size value output with -gnatR -gnatcEric Botcazou1-0/+1
This happens when a parameter is involved in the computation. gcc/ada/ * gcc-interface/decl.cc (annotate_value): Apply the same processing for parameters as for variables.
2023-11-28ada: Add comment for assertionMarc Poulhiès1-1/+4
Add possible cause for a failed assertion. gcc/ada/ * gcc-interface/utils2.cc (build_simple_component_ref): Add comment on assertion.
2023-11-28ada: Error compiling reduction expression with overloaded reducer subprogramSteve Baird1-43/+34
In some cases involving a reduction expression with an overloaded reducer subprogram, the accumulator type is not determined correctly. This can lead to spurious compile-time errors. gcc/ada/ * exp_attr.adb (Expand_N_Attribute_Reference): In the case of a Reduce attribute reference, fix bugs in initializing Accum_Typ. The previous version was incorrect in the case where E1 refers to the first of multiple possible overload resolution candidates and that candidate does not turn out to be the right one. The previous version also had code to compute Accum_Typ via a different method if the initial computation turned out to yield a universal numeric type. Delete that initial computation and use the second method in all cases.
2023-11-28ada: Errors on instance of Multiway_Trees with discriminated typeGary Dismukes1-270/+4
The compiler may report various type conflicts on an instantiation of the generic package Ada.Containers.Multiway_Trees with an actual for Element_Type that is a nonprivate actual type with discriminants that has a discriminant-dependent component of a private type (such as a Bounded_Vector type). The type errors occur on an aggregate of the implementation type Tree_Node_Type within the body of Multiway_Trees, where the aggregate has a box-defaulted association for the Element component. (Such type errors could of course arise in other cases of generic instantiations that follow a similar type model.) In the case where the discriminant-dependent component type has a default-initialization procedure (init proc), the compiler was handling box associations for such components by expanding the topmost box association into subaggregates that themselves have box associations, and didn't properly account for discriminant-dependent subcomponents of private types. This could be fixed internally in Propagate_Discriminants, but it seems that the entire machinery for dealing with such subcomponent associations is unnecessary, and the topmost component association can be handled directly as a default-initialized box association. gcc/ada/ * sem_aggr.adb (Add_Discriminant_Values): Remove this procedure. (Propagate_Discriminants): Remove this procedure. (Resolve_Record_Aggregate): Remove code (the Capture_Discriminants block statement) related to propagating discriminants and generating initializations for subcomponents of a discriminant-dependent box-defaulted subcomponent of a nonprivate record type with discriminants, and handle all top-level components that have a non-null base init proc directly, by calling Add_Association with "Is_Box_Present => True". Also, combine that elsif clause with the immediately preceding elsif clause, since they now both contain the same statement (calls to Add_Association with the same actuals).
2023-11-28ada: False alarms from -gnatw.t with generic functionsBob Duff1-17/+25
Disable the warnings generated by -gnatw.t on instances. Otherwise, we get false positives. gcc/ada/ * sem_util.adb (Check_Result_And_Post_State): Disable this when we're in an instance. Misc cleanup.
2023-11-28ada: Further cleanup in finalization machineryEric Botcazou4-74/+110
When transient scopes are being materialized, they can give rise to a block created around the construct being wrapped or not, depending on the kind of construct. In both cases finalization actions for the transient objects of the scope are generated the same way, with normal finalization done manually immediately after the construct and exceptional finalization deferred to the enclosing scope by means of a hooking mechanism. Now when the block is generated, it becomes this enclosing scope, so the normal finalization that comes with it would also be done immediately after the construct, even without normal finalization generated manually. Therefore this change gets rid of the manual finalization as well as of the hooking in the cases where the block is generated, leading to a significant streamlining of the expanded code in these cases. This requires fixing a small inaccuracy of the Within_Case_Or_If_Expression predicate, which must only be concerned with the dependent expressions, since those are the only ones to be treated specially by the finalization machinery. It also contains a small cleanup for the description of the transient scope management present at the beginning of the exp_ch7.adb file. gcc/ada/ * exp_ch7.ads (Expand_Cleanup_Actions): Move declaration to the Finalization Management section. * exp_ch7.adb (Transient Scope Management): Move description down to after that of the general finalization and make a few changes. (Insert_Actions_In_Scope_Around): Call Process_Transients_In_Scope only if cleanups are being handled. (Process_Transients_In_Scope): Remove redundant test on Clean. * exp_util.ads (Within_Case_Or_If_Expression): Adjust description. * exp_util.adb (Within_Case_Or_If_Expression): Only return true if within the dependent expressions of the conditional expressions.
2023-11-28ada: Fix incorrect quoting in documentationEric Botcazou2-7/+5
gcc/ada/ * doc/gnat_rm/the_implementation_of_standard_i_o.rst: Fix a couple occurrences of incorrect quoting. * gnat_rm.texi: Regenerate.
2023-11-28ada: Fix premature finalization for nested return within extended oneEric Botcazou1-50/+98
The return object is incorrectly finalized when the nested return is taken, because the special flag attached to the return object is not updated. gcc/ada/ * exp_ch6.adb (Build_Flag_For_Function): New function made up of the code building the special flag for return object present... (Expand_N_Extended_Return_Statement): ...in there. Replace the code with a call to Build_Flag_For_Function. Add assertion for the flag. (Expand_Non_Function_Return): For a nested return, if the return object needs finalization actions, update the special flag.
2023-11-28ada: Add new predicate Is_Address_Compatible_TypeSebastian Poeplau2-0/+7
When emitting code for architectures with tagged pointers, it is useful to be able to recognize values representing addresses because they require special handling. This commits adds the predicate Is_Address_Compatible_Type, which differs from the node attribute Is_Descendant_Of_Address by also taking Standard_Address into account. gcc/ada/ * einfo-utils.ads, einfo-utils.adb (Is_Address_Compatible_Type): New function.
2023-11-28ada: Type error on container aggregate with loop_parameter_specificationGary Dismukes1-2/+8
The compiler incorrectly reported a type error on a container aggregate for a Vector type with a loop_parameter_specification specifying a nonstatic upper bound, complaining that it expected the Vector index type, but instead found type Count_Type. The expansion of the aggregate was incorrectly passing a size temporary of type Count_Type to the function associated with the New_Indexed part of the container type's Aggregate aspect (New_Vector in the case of Vectors), which has two formals of the container index type. The fix is to convert the size temporary to the expected index type. gcc/ada/ * exp_aggr.adb (Expand_Container_Aggregate): Apply a conversion to the size temp object passed as the second actual parameter on the call to the New_Indexed_Subp function, to convert it to the index type of the container type (taken from the first formal parameter of the function).
2023-11-28ada: Fix internal error on declare expression in expression functionEric Botcazou2-2/+23
When the expression function is not a completion, its (return) expression does not cause freezing so analyzing the declare expression in this context must not freeze the type of the object. The change also contains another fix, which makes it so that the compiler does not evaluate a nonstatic representation attribute of a scalar subtype in the same context if the subtype is not already frozen. gcc/ada/ * sem_attr.adb (Eval_Attribute): Do not proceed in a spec expression for nonstatic representation attributes of a scalar subtype when the subtype is not frozen. * sem_ch3.adb (Analyze_Object_Declaration): Do not freeze the type of the object in a spec expression.
2023-11-28ada: Handle unchecked conversion in boundRichard Kenner1-1/+3
Look through both unchecked and normal conversions when seeing if any part of a bound is uplevel. gcc/ada/ * exp_unst.adb (Note_Uplevel_Bound): Treat N_Unchecked_Type_Conversion like N_Type_Conversion.
2023-11-28ada: Remove dependency on System.Val_Bool in System.Img_BoolYannick Moy4-37/+40
In order to facilitate the certification of System.Img_Bool, remove its dependency on unit System.Val_Bool. Modify the definition of ghost function Is_Boolean_Image_Ghost to take the expected boolean value and move it to System.Val_Spec. gcc/ada/ * libgnat/s-imgboo.adb: Remove with_clause now in spec file. * libgnat/s-imgboo.ads: Remove dependency on System.Val_Bool. (Image_Boolean): Replace call to Value_Boolean by passing value V to updated ghost function Is_Boolean_Image_Ghost. * libgnat/s-valboo.ads (Is_Boolean_Image_Ghost): Move to other unit. (Value_Boolean.): Update precondition. * libgnat/s-valspe.ads (Is_Boolean_Image_Ghost): Move here. Add new parameter for expected boolean value.
2023-11-28ada: Fix predicate failure that occurred in a test caseTucker Taft1-0/+1
The CodePeer test case illustrating a problem where a "high" precondition failure was expected, died in the GNAT FE on input_reading.adb. The problem was in Check_SCIL, where it didn't properly handle a discriminant_specification. gcc/ada/ * sem_scil.adb: Handle discriminant specification.
2023-11-28testsuite: Fix up pr111754.c testJakub Jelinek1-3/+4
On Tue, Nov 28, 2023 at 03:56:47PM +0800, juzhe.zhong@rivai.ai wrote: > Hi, there is a regression in RISC-V caused by this patch: > > FAIL: gcc.dg/vect/pr111754.c -flto -ffat-lto-objects scan-tree-dump optimized "return { 0.0, 9.0e\\+0, 0.0, 0.0 }" > FAIL: gcc.dg/vect/pr111754.c scan-tree-dump optimized "return { 0.0, 9.0e\\+0, 0.0, 0.0 }" > > I have checked the dump is : > F foo (F a, F b) > { > <bb 2> [local count: 1073741824]: > <retval> = { 0.0, 9.0e+0, 0.0, 0.0 }; > return <retval>; > > } > > The dump IR seems reasonable to me. > I wonder whether we should walk around in RISC-V backend to generate the same IR as ARM SVE ? > Or we should adjust the test ? Note, the test also FAILs on i686-linux (but not e.g. on x86_64-linux): /home/jakub/src/gcc/obj67/gcc/xgcc -B/home/jakub/src/gcc/obj67/gcc/ /home/jakub/src/gcc/gcc/testsuite/gcc.dg/vect/pr111754.c -fdiagnostics-plain-output -O2 -fdump-tree-optimized -S +-o pr111754.s /home/jakub/src/gcc/gcc/testsuite/gcc.dg/vect/pr111754.c: In function 'foo': /home/jakub/src/gcc/gcc/testsuite/gcc.dg/vect/pr111754.c:7:1: warning: SSE vector return without SSE enabled changes the ABI [-Wpsabi] /home/jakub/src/gcc/gcc/testsuite/gcc.dg/vect/pr111754.c:6:3: note: the ABI for passing parameters with 16-byte alignment has changed in GCC 4.6 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/vect/pr111754.c:6:3: warning: SSE vector argument without SSE enabled changes the ABI [-Wpsabi] FAIL: gcc.dg/vect/pr111754.c (test for excess errors) Excess errors: /home/jakub/src/gcc/gcc/testsuite/gcc.dg/vect/pr111754.c:7:1: warning: SSE vector return without SSE enabled changes the ABI [-Wpsabi] /home/jakub/src/gcc/gcc/testsuite/gcc.dg/vect/pr111754.c:6:3: warning: SSE vector argument without SSE enabled changes the ABI [-Wpsabi] PASS: gcc.dg/vect/pr111754.c scan-tree-dump-not optimized "VEC_PERM_EXPR" FAIL: gcc.dg/vect/pr111754.c scan-tree-dump optimized "return { 0.0, 9.0e\\+0, 0.0, 0.0 }" So, I think it is wrong to specify /* { dg-options "-O2 -fdump-tree-optimized" } */ in the test, should be dg-additional-options instead, so that it gets the implied vector compilation options e.g. for i686-linux (-msse2 in that case at least), question is if -Wno-psabi should be added as well or not, and certainly the scan-tree-dump needs to be guarded by appropriate vect_* effective target (but dunno which, one which asserts support for V4SFmode and returning it). Alternatively, perhaps don't check optimized dump but some earlier one before generic vector lowering, then hopefully it could match on all targets? Maybe with the <retval> = ... vs. return ... variants. 2023-11-28 Jakub Jelinek <jakub@redhat.com> PR middle-end/111754 * gcc.dg/vect/pr111754.c: Use dg-additional-options rather than dg-options, add -Wno-psabi and use -fdump-tree-forwprop1 rather than -fdump-tree-optimized. Scan forwprop1 dump rather than optimized and scan for either direct return or setting of <retval> to the vector.
2023-11-28match.pd: Fix parity (X) ^ parity (Y) simplification [PR112719]Jakub Jelinek3-2/+51
When looking around, I've noticed we have a similar simplification for parity (with ^ rather than +). Note, unlike the popcount one, this one doesn't check for INTEGRAL_TYPE_P (type) (which rules out vector simplification), so I've used the old handling for types_match and otherwise do it only for scalar argument types and handle different precision in there. The testcase ICEs without the previous patch on the first function, but strangely not on the second which tests parity. The reason is that in this case there is no wi::bit_and test like for popcount and for BITINT_TYPEs build_call_internal actually refuses to create it and thus the whole simplification fails. While .{CLZ,CTZ,CLRSB,FFS,POPCOUNT,PARITY} ifns are direct optab ifns for normal integer and vector types (and thus it is desirable to punt if there is no supported optab for them), they have this large/huge _BitInt extension before bitint lowering, so the patch also adjusts build_call_internal to allow that case. 2023-11-28 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/112719 * match.pd (parity(X)^parity(Y) -> parity(X^Y)): Handle case of mismatched types. * gimple-match-exports.cc (build_call_internal): Add special-case for bit query ifns on large/huge BITINT_TYPE before bitint lowering. * gcc.dg/bitint-43.c: New test.
2023-11-28match.pd: Fix popcount (X) + popcount (Y) simplification [PR112719]Jakub Jelinek2-2/+25
Since my PR112566 r14-5557 changes the following testcase ICEs, because .POPCOUNT (x) + .POPCOUNT (y) has a simplification attempted even when x and y have incompatible types (different precisions). Note, with _BitInt it can ICE already starting with r14-5435 and I think as a latent problem it exists for years, because IFN_POPCOUNT calls inherently can have different argument types and return type is always the same. The following patch fixes it by using widest_int during the analysis (which is where it was ICEing) and if it is optimizable, casting to the wider type so that bit_ior has matching argument types. 2023-11-28 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/112719 * match.pd (popcount (X) + popcount (Y) -> POPCOUNT (X | Y)): Deal with argument types with different precisions.
2023-11-28analyzer: install header files for use by plugins [PR109077]David Malcolm1-4/+6
PLUGIN_ANALYZER_INIT was added in r11-5583-g66dde7bc64b75d, but we haven't been installing the analyzer's headers files. Fixed thusly. gcc/ChangeLog: PR analyzer/109077 * Makefile.in (PLUGIN_HEADERS): Add analyzer headers. (install-plugin): Keep the directory structure for files in "analyzer". Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2023-11-27libcpp: Fix unsigned promotion for unevaluated divide by zero [PR112701]Lewis Hyatt1-2/+20
When libcpp encounters a divide by zero while processing a constant expression "x/y", it returns "x" as a fallback. The value of the fallback is not normally important, since an error will be generated anyway, but if the expression appears in an unevaluated context, such as "0 ? 0/0u : -1", then there will be no error, and the fallback value will be meaningful to the extent that it may cause promotion from signed to unsigned of an operand encountered later. As the PR notes, libcpp does not do the unsigned promotion correctly in this case; fix it by making the fallback return value unsigned as necessary. libcpp/ChangeLog: PR preprocessor/112701 * expr.cc (num_div_op): Set unsignedp appropriately when returning a stub value for divide by 0. gcc/testsuite/ChangeLog: PR preprocessor/112701 * gcc.dg/cpp/expr.c: Add additional tests to cover divide by 0 in an unevaluated context, where the unsignedness still matters.
2023-11-28RISC-V: Fix VSETVL PASS regressionJuzhe-Zhong3-9/+91
This patch is regression fix patch, not an optimization patch. Since trunk GCC generates redundant vsetvl than GCC-13. This is the case: bb 2: def a2 (vsetvl a2, zero) bb 3: use a2 bb 4: use a2 (vle) before this patch: bb 2: vsetvl a2 zero bb 3: vsetvl zero, zero ----> should be eliminated. bb 4: vle.v The root cause is we didn't set bb 3 as transparent since the incorrect codes. bb 3 didn't modify "a2" just use it, the VSETVL status from bb 2 can be available to bb 3 and bb 4: bb 2 -> bb 3 -> bb4. Another regression fix is anticipation calculation: bb 4: use a5 (sub) use a5 (vle) The vle VSETVL status should be considered as anticipated as long as both sub and vle a5 def are coming from same def. Tested on zvl128b no regression. I am going to test on zvl256/zvl512/zvl1024 PR target/112713 gcc/ChangeLog: * config/riscv/riscv-vsetvl.cc (pre_vsetvl::compute_lcm_local_properties): Fix regression. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/vsetvl/pr112713-1.c: New test. * gcc.target/riscv/rvv/vsetvl/pr112713-2.c: New test.
2023-11-27diagnostics: don't print annotation lines when there's no column infoDavid Malcolm1-1/+25
gcc/ChangeLog: * diagnostic-show-locus.cc (layout::maybe_add_location_range): Don't print annotation lines for ranges when there's no column info. (selftest::test_one_liner_no_column): New. (selftest::test_diagnostic_show_locus_one_liner): Call it. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2023-11-27diagnostics: add diagnostic_context::get_location_textDavid Malcolm2-20/+17
No functional change intended. gcc/ChangeLog: * diagnostic.cc (diagnostic_get_location_text): Convert to... (diagnostic_context::get_location_text): ...this, and convert return type from char * to label_text. (diagnostic_build_prefix): Update for above change. (default_diagnostic_start_span_fn): Likewise. (selftest::assert_location_text): Likewise. * diagnostic.h (diagnostic_context::get_location_text): New decl. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2023-11-28Daily bump.GCC Administrator8-1/+524
2023-11-27aarch64: Improve cost of `a ? {-,}1 : b`Andrew Pinski2-0/+22
While looking into PR 112454, I found the cost for `(if_then_else (cmp) (const_int 1) (reg))` was being recorded as 8 (or `COSTS_N_INSNS (2)`) but it should have been 4 (or `COSTS_N_INSNS (1)`). This improves the cost by not adding the cost of `(const_int 1)` to the total cost. It does not does not fully fix PR 112454 as that requires other changes to forwprop the `(const_int 1)` earlier than combine. Though we do fix the loop case where the constant was only used once. Bootstrapped and tested on aarch64-linux-gnu with no regressions. gcc/ChangeLog: * config/aarch64/aarch64.cc (aarch64_if_then_else_costs): Handle csinv/csinc case of 1/-1. gcc/testsuite/ChangeLog: * gcc.target/aarch64/csinc-3.c: New test. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2023-11-27Fix time-profiler-3.c after r14-5628-g53ba8d669550d3Andrew Pinski1-1/+1
This testcase started to fail after r14-5628-g53ba8d669550d3 because IPA-VRP can now start to figure out the functions return a constant value and there was nothing that profiling needed to profile any more. This disables IPA-VRP for this testcase to be able to profile again. Bootrapped/tested on x86_64-linux-gnu with no regressions. gcc/testsuite/ChangeLog: PR testsuite/112689 * gcc.dg/tree-prof/time-profiler-3.c: Add -fno-ipa-vrp.
2023-11-27PR111754: Rework encoding of result for VEC_PERM_EXPR with constant input ↵Prathamesh Kulkarni4-45/+112
vectors. gcc/ChangeLog: PR middle-end/111754 * fold-const.cc (fold_vec_perm_cst): Set result's encoding to sel's encoding, and set res_nelts_per_pattern to 2 if sel contains stepped sequence but input vectors do not. (test_nunits_min_2): New test Case 8. (test_nunits_min_4): New tests Case 8 and Case 9. gcc/testsuite/ChangeLog: PR middle-end/111754 * gcc.target/aarch64/sve/slp_3.c: Adjust code-gen. * gcc.target/aarch64/sve/slp_4.c: Likewise. * gcc.dg/vect/pr111754.c: New test. Co-authored-by: Richard Sandiford <richard.sandiford@arm.com>
2023-11-27aarch64: Disable branch-protection for pcs testsSzabolcs Nagy5-0/+5
The tests manipulate the return address in abitest-2.h and thus not compatible with -mbranch-protection=pac-ret+leaf or -mbranch-protection=gcs. gcc/testsuite/ChangeLog: * gcc.target/aarch64/aapcs64/func-ret-1.c: Disable branch-protection. * gcc.target/aarch64/aapcs64/func-ret-2.c: Likewise. * gcc.target/aarch64/aapcs64/func-ret-3.c: Likewise. * gcc.target/aarch64/aapcs64/func-ret-4.c: Likewise. * gcc.target/aarch64/aapcs64/func-ret-64x1_1.c: Likewise.
2023-11-27aarch64: Add eh_return compile testsSzabolcs Nagy2-0/+37
gcc/testsuite/ChangeLog: * gcc.target/aarch64/eh_return-2.c: New test. * gcc.target/aarch64/eh_return-3.c: New test.
2023-11-27aarch64: Do not force a stack frame for EH returnsSzabolcs Nagy1-2/+1
EH returns no longer rely on clobbering the return address on the stack so forcing a stack frame is not necessary. This does not actually change the code gen for the unwinder since there are calls before the EH return. gcc/ChangeLog: * config/aarch64/aarch64.cc (aarch64_needs_frame_chain): Do not force frame chain for eh_return.
2023-11-27aarch64: Use br instead of ret for eh_returnSzabolcs Nagy11-89/+115
The expected way to handle eh_return is to pass the stack adjustment offset and landing pad address via EH_RETURN_STACKADJ_RTX EH_RETURN_HANDLER_RTX to the epilogue that is shared between normal return paths and the eh_return paths. EH_RETURN_HANDLER_RTX is the stack slot of the return address that is overwritten with the landing pad in the eh_return case and EH_RETURN_STACKADJ_RTX is a register added to sp right before return and it is set to 0 in the normal return case. The issue with this design is that eh_return and normal return may require different return sequence but there is no way to distinguish the two cases in the epilogue (the stack adjustment may be 0 in the eh_return case too). The reason eh_return and normal return requires different return sequence is that control flow integrity hardening may need to treat eh_return as a forward-edge transfer (it is not returning to the previous stack frame) and normal return as a backward-edge one. In case of AArch64 forward-edge is protected by BTI and requires br instruction and backward-edge is protected by PAUTH or GCS and requires ret (or authenticated ret) instruction. This patch resolves the issue by introducing EH_RETURN_TAKEN_RTX that is a flag set to 1 in the eh_return path and 0 in normal return paths. Branching on the EH_RETURN_TAKEN_RTX flag, the right return sequence can be used in the epilogue. The handler could be passed the old way via clobbering the return address, but since now the eh_return case can be distinguished, the handler can be in a different register than x30 and no stack frame is needed for eh_return. This patch fixes a return to anywhere gadget in the unwinder with existing standard branch protection as well as makes EH return compatible with the Guarded Control Stack (GCS) extension. Some tests are adjusted because eh_return no longer prevents pac-ret in the normal return path. gcc/ChangeLog: * config/aarch64/aarch64-protos.h (aarch64_eh_return_handler_rtx): Remove. * config/aarch64/aarch64.cc (aarch64_return_address_signing_enabled): Sign return address even in functions with eh_return. (aarch64_expand_epilogue): Conditionally return with br or ret. (aarch64_eh_return_handler_rtx): Remove. * config/aarch64/aarch64.h (EH_RETURN_TAKEN_RTX): Define. (EH_RETURN_STACKADJ_RTX): Change to R5. (EH_RETURN_HANDLER_RTX): Change to R6. * df-scan.cc: Handle EH_RETURN_TAKEN_RTX. * doc/tm.texi: Regenerate. * doc/tm.texi.in: Document EH_RETURN_TAKEN_RTX. * except.cc (expand_eh_return): Handle EH_RETURN_TAKEN_RTX. gcc/testsuite/ChangeLog: * gcc.target/aarch64/return_address_sign_1.c: Move func4 to ... * gcc.target/aarch64/return_address_sign_2.c: ... here and fix the scan asm check. * gcc.target/aarch64/return_address_sign_b_1.c: Move func4 to ... * gcc.target/aarch64/return_address_sign_b_2.c: ... here and fix the scan asm check.
2023-11-27GCN: Remove 'last_arg' spec functionThomas Schwinge4-44/+1
The LLVM 13.0.1 assembler ('llvm-mc') indeed still does complain in presence of multiple '-mcpu=[...]' options: as: for the --mcpu option: may only occur zero or one times! However, as of "GCN: Tag '-march=[...]', '-mtune=[...]' as 'Negative' of themselves [PR112669]", the GCC-side special handling is no longer necessary. gcc/ * config.gcc <amdgcn-*-amdhsa> (extra_gcc_objs): Don't set. * config/gcn/driver-gcn.cc: Remove. * config/gcn/gcn-hsa.h (ASM_SPEC, EXTRA_SPEC_FUNCTIONS): Remove 'last_arg' spec function. * config/gcn/t-gcn-hsa (driver-gcn.o): Remove.
2023-11-27GCN: Tag '-march=[...]', '-mtune=[...]' as 'Negative' of themselves [PR112669]Thomas Schwinge1-2/+2
Certain other command-line flags are mutually exclusive (random example: GCN '-march=gfx906', '-march=gfx908'). If they're not appropriately marked up, this does disturb the multilib selection machinery, for example: $ build-gcc-offload-amdgcn-amdhsa/gcc/xgcc -print-multi-directory -march=gfx906 gfx906 $ build-gcc-offload-amdgcn-amdhsa/gcc/xgcc -print-multi-directory -march=gfx908 gfx908 $ build-gcc-offload-amdgcn-amdhsa/gcc/xgcc -print-multi-directory -march=gfx906 -march=gfx908 . In the last invocation, '-march=gfx900 -march=gfx906', for example, in 'gcc/gcc.cc:set_multilib_dir' we see both flags -- which there doesn't exist a matching multilib for, therefore we "fail" to the default ('.'). Tagges as 'Negative', only the last flag survives, and we, for example, get the expected: $ build-gcc-offload-amdgcn-amdhsa/gcc/xgcc -print-multi-directory -march=gfx906 -march=gfx908 gfx908 I quickly found that the same also applies to GCN's '-mtune=[...]', but I've not otherwise reviewed the GCN options. PR target/112669 gcc/ * config/gcn/gcn.opt (march=, mtune=): Tag as 'Negative' of themselves.
2023-11-27hurd: Ad default-pie and static-pie supportSamuel Thibault2-6/+6
This fixes the Hurd spec in the default-pie case, and adds static-pie support. gcc/ChangeLog: * config/i386/gnu.h: Use PIE_SPEC, add static-pie case. * config/i386/gnu64.h: Use PIE_SPEC, add static-pie case.
2023-11-27hurd: Add multilib paths for gnu-x86_64Samuel Thibault2-0/+41
We need the multilib paths in gcc to find e.g. glibc crt files on Debian. This is essentially based on t-linux64 version. gcc/ChangeLog: * config/i386/t-gnu64: New file. * config.gcc [x86_64-*-gnu*]: Add i386/t-gnu64 to tmake_file.
2023-11-27aarch64: Remove redundant zeroing/merging in SVE intrinsics [PR106326]Richard Sandiford3-0/+427
Many predicated SVE intrinsics provide three forms of predication: zeroing, merging, and any/dont-care. All three are equivalent when the predicate is all-true, so this patch drops the zeroing and merging in that case. gcc/ PR target/106326 * config/aarch64/aarch64-sve-builtins.h (is_ptrue): Declare. * config/aarch64/aarch64-sve-builtins.cc (is_ptrue): New function. (gimple_folder::redirect_pred_x): Likewise. (gimple_folder::fold): Use it. gcc/testsuite/ PR target/106326 * gcc.target/aarch64/sve/acle/general/pr106326_1.c: New test.
2023-11-27aarch64: Move and generalise vect_all_sameRichard Sandiford3-15/+24
The fix for PR106329 needs a way of testing for a ptrue of a particular element size. We already had such a function for svlast, so this patch moves it to common code and generalises it to work with all kinds of vectors. gcc/ * config/aarch64/aarch64-sve-builtins.h (vector_cst_all_same): Declare. * config/aarch64/aarch64-sve-builtins.cc (vector_cst_all_same): New function, a generalized replacement of... * config/aarch64/aarch64-sve-builtins-base.cc (svlast_impl::vect_all_same): ...this. (svlast_impl::fold): Update accordingly.