- Nov 18, 2024
-
-
Jeff Law authored
While these haven't shown up in my tester (not configs I test) and I think we're likely going to be deprecating the nds32 target. we might as well go ahead and fix them. I'm going to include this under the pr117628 umbrella. PR target/117628 libgcc/ * config/arm/freebsd-atomic.c (bool): Remove unnecessary typedef. * config/arm/linux-atomic-64bit.c: Likewise. * config/arm/linux-atomic.c: Likewise. * config/nds32/linux-atomic.c: Likewise. * config/nios2/linux-atomic.c: Likewise.
-
Jeff Law authored
csky fails to build libgcc after the c23 changes because it has a typedef for bool. AFAICT it's internal to the file, so removing the typedef isn't an ABI change. Similiarly for c6x which includes unwind-arm-common.inc. I suspect most, if not all of the arm-v7 and older targets are failing to build right now. I've built and regression tested both csky-linux-gnu and c6x-elf with this change. OK for the trunk? PR target/117628 libgcc/ * config/csky/linux-atomic.c (bool): Remove unnecessary typedef. * unwind-arm-common.inc (bool): Similarly.
-
Gaius Mulley authored
This patch is a follow on from PR modula2/117371 which could include a check to enforce the ISO restriction on a zero for loop step. gcc/m2/ChangeLog: PR modula2/117371 * gm2-compiler/M2GenGCC.mod (PerformLastForIterator): Add check for zero step value and issue an error message. gcc/testsuite/ChangeLog: PR modula2/117371 * gm2/iso/fail/forloopbyzero.mod: New test. Signed-off-by:
Gaius Mulley <gaiusmod2@gmail.com>
-
Eric Botcazou authored
The semantics of the GNAT-specific Predicate aspect should be equivalent to those of the Static_Predicate aspect when the predicate expression is static, but that is not correctly implemented for static case expressions. gcc/ada/ChangeLog: * exp_ch4.adb (Expand_N_Case_Expression): Remove the test on enclosing predicate function for the return optimization. Rewrite it in the general case to catch all nondynamic predicates. (Expand_N_If_Expression): Remove the test on enclosing predicate function for the return optimization.
-
Bob Duff authored
Remove all user-level documentation of the check name "Atomic_Synchronization". The documentation was confusing because this check should never be used in source code, and because it raises the question of whether All_Checks applies to it (it does not). Change the name Atomic_Synchronization to be _Atomic_Synchronization (with a leading underscore) so that it cannot be used in source code. This "check" is not really a check at all; it is used only internally in the implementation of Disable/Enable_Atomic_Synchronization, because the placement and scope of these pragmas match pragma Suppress. gcc/ada/ChangeLog: * doc/gnat_rm/implementation_defined_characteristics.rst: Remove Atomic_Synchronization. * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Likewise. * doc/gnat_rm/implementation_defined_pragmas.rst: DRY. Consolidate documentation of Disable/Enable_Atomic_Synchronization. * checks.adb: Comment fix. * exp_util.ads: Likewise. * targparm.ads: Likewise. * types.ads: Likewise. * gnat1drv.adb: Likewise. DRY. * sem_prag.adb (Process_Disable_Enable_Atomic_Sync): Change name of Atomic_Synchronization to start with underscore. (Process_Suppress_Unsuppress): No need to check Comes_From_Source for Atomic_Synchronization anymore; _Atomic_Synchronization can never come from source. (Anyway, it shouldn't be ignored; it should be an error.) * snames.ads-tmpl (Atomic_Synchronization): Change name to start with underscore. * switch-c.adb (Scan_Front_End_Switches): Minor cleanup: Use 'in'. * gnat_rm.texi: Regenerate. * gnat_ugn.texi: Regenerate.
-
Eric Botcazou authored
In addition to Resolve_Indexed_Component, Eval_Indexed_Component can also set the Do_Range_Check flag on the expressions of an N_Indexed_Component node through the call on Check_Non_Static_Context, so this also needs to be blocked by the Kill_Range_Check flag. gcc/ada/ChangeLog: * sem_eval.adb (Eval_Indexed_Component): Clear Do_Range_Check on the expressions if Kill_Range_Check is set on the node.
-
Eric Botcazou authored
This is another glitch associated with Initialization_Statements. gcc/ada/ChangeLog: * exp_util.adb (Remove_Init_Call): Rewrite a compound statement in the Initialization_Statements of the variable as a null statement instead of removing it. * freeze.adb (Explode_Initialization_Compound_Statement): Small comment tweaks.
-
Eric Botcazou authored
The processing of static array aggregates in Exp_Aggr requires that their bounds be representable as Int(eger) values for practical purposes, and the previous changes have exposed another path where this is not checked. This introduces a UI_Are_In_Int_Range local predicate for convenience. gcc/ada/ChangeLog: * exp_aggr.adb (UI_Are_In_Int_Range): New predicate. (Aggr_Size_OK): Use it. (Flatten): Likewise. (Packed_Array_Aggregate_Handled): Likewise. (Static_Array_Aggregate): Likewise.
-
Eric Botcazou authored
The problem occurs for an anonymous array object declared with an aspect and when pragma {Initialize,Normalize}_Scalars is in effect: in this case, the synthesized aggregate is attached to the Initialization_Statements field by Convert_Aggr_In_Object_Decl, but Explode_Initialization_Compound_Statement puts it back at the point of declaration instead of the freeze point, thus voiding the effects of the mechanism. This was previously hidden because of a bypass in Freeze_Entity which drops the freeze node on the floor in this case, so the change fixes the issue and removes the bypass in the process. gcc/ada/ChangeLog: * freeze.ads (Explode_Initialization_Compound_Statement): Adjust the description. * freeze.adb (Explode_Initialization_Compound_Statement): If the entity has its freezing delayed, append the initialization actions to its freeze actions. (Freeze_Object_Declaration): Remove commented out code. (Freeze_Entity): Remove bypass for object of anonymous array type.
-
Eric Botcazou authored
The exception handler that catches Abort_Signal does nothing nowadays. This refactors the code to use Build_Abort_Block more consistently and also makes it simpler by dropping the identifier on the abort block. No functional changes. gcc/ada/ChangeLog: * exp_sel.ads (Build_Abort_Block): Remove second parameter and rename the third. (Build_Abort_Block_Handler): Fix description. * exp_sel.adb (Build_Abort_Block): Remove second parameter, rename the third and adjust accordingly. * exp_ch9.adb (Expand_N_Asynchronous_Select): Fix the description of the exception handler throughout. Remove Abort_Block_Ent and Hdle local variables. Call Build_Abort_Block consistently to build the abort block and adjust existing calls.
-
Steve Baird authored
In some cases an array aggregate with statically known bounds and at least one bound outside of the range of a 32-bit signed integer causes a bugbox. gcc/ada/ChangeLog: * exp_aggr.adb (Convert_To_Positional.Flatten): Avoid raising Constraint_Error in UI_To_Int by testing UI_Is_In_Int_Range first.
-
Eric Botcazou authored
This mainly decouples the handling of the declaration case from that of the assignment case in Expand_Array_Aggregate, as well as moves the expansion in the case of an aggregate that can be processed by the back end to the Build_Array_Aggr_Code routine. gcc/ada/ChangeLog: * exp_aggr.adb (Build_Array_Aggr_Code): Build the simple assignment for the case of an aggregate that can be handled by the back end. (Expand_Array_Aggregate): Adjust description of the processing. Move handling of declaration case to STEP 4 and remove handling of the case of an aggregate that can be processed by the back end. (Late_Expansion): Likewise for the second part. * exp_ch3.adb (Expand_N_Object_Declaration): Deal with a delayed aggregate synthesized for the default initialization, if any. * sem_eval.adb (Eval_Indexed_Component): Bail out for the name of an assignment statement.
-
Eric Botcazou authored
This mainly decouples the handling of the allocator case from that of the assignment case in Expand_Array_Aggregate and also makes Must_Slide a bit more forgiving. gcc/ada/ChangeLog: * exp_aggr.adb (In_Place_Assign_OK): Remove handling of allocators and call Must_Slide instead of implementing the check manually. (Convert_To_Assignments): Adjust outdated comment. (Expand_Array_Aggregate): Move handling of allocator case to STEP 3 and call Must_Slide directly for it. (Must_Slide): Replace tests based on Is_OK_Static_Expression with tests based on Compile_Time_Known_Value.
-
Eric Botcazou authored
Convert_Array_Aggr_In_Allocator does nothing that Late_Expansion cannot do, so this deletes the former and moves its support code for Storage_Model to the latter. No functional changes. gcc/ada/ChangeLog: * exp_aggr.adb (Convert_Array_Aggr_In_Allocator): Delete. (Convert_Aggr_In_Allocator): Do not call above procedure. (Late_Expansion): Deal with a target that is the dereference of a prefix with a Storage_Model. Remove an useless actual parameter in the call to Build_Array_Aggr_Code.
-
Javier Miranda authored
Reverse the meaning of switch -gnatd_P; that is, enable by default the generating of a runtime check when the prefix of the call is an access-to-subprogram type with a null value. gcc/ada/ChangeLog: * sem_res.adb (Resolve_Actuals): Add by default a null-exclusion check on the prefix of the call when it is an access-type; it can be disabled using -gnatd_P. * debug.adb (gnatd_P): Update documentation.
-
squirek authored
This patch fixes a crash in the compiler when the actual for an anonymous access type formal is an 'Access of a Sream_Element_Array object during the calculation of said actual's accessibility level. gcc/ada/ChangeLog: * accessibility.adb (Accessibility_Level): Handle the Input attribute case
-
Ronan Desplanques authored
This change is part of an effort to reduce usage of Is_Predefined_Filename. gcc/ada/ChangeLog: * frontend.adb (Frontend): tweak test for predefined main unit.
-
Tobias Burnus authored
libgomp/ChangeLog: * plugin/plugin-gcn.c (GOMP_OFFLOAD_openacc_async_construct): In case of an error, call GOMP_PLUGIN_fatal not ..._error; use NULL not false in return.
-
Jennifer Schmitz authored
The test file pr117093.c failed on platforms other than aarch64, because it uses arm_neon.h. We moved it into gcc.target/aarch64. The patch was bootstrapped and tested on aarch64-linux-gnu and x86_64-linux-gnu, no regression. Committed as obvious. Signed-off-by:
Jennifer Schmitz <jschmitz@nvidia.com> gcc/testsuite/ PR tree-optimization/117093 * gcc.dg/tree-ssa/pr117093.c: Move to gcc.target/aarch64. * gcc.target/aarch64/pr117093.c: New test.
-
Robin Dapp authored
This patch adds VLS modes to the strided load expanders. gcc/ChangeLog: * config/riscv/autovec.md: Add VLS modes. * config/riscv/vector-iterators.md: Ditto. * config/riscv/vector.md: Ditto.
-
Robin Dapp authored
This patch adds else operands to masked loads. Currently the default else operand predicate just accepts "undefined" (i.e. SCRATCH) values. PR middle-end/115336 PR middle-end/116059 gcc/ChangeLog: * config/riscv/autovec.md: Add else operand. * config/riscv/predicates.md (maskload_else_operand): New predicate. * config/riscv/riscv-v.cc (get_else_operand): Remove static. (expand_load_store): Use get_else_operand and adjust index. (expand_gather_scatter): Ditto. (expand_lanes_load_store): Ditto. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/pr115336.c: New test. * gcc.target/riscv/rvv/autovec/pr116059.c: New test.
-
Robin Dapp authored
gcc/ChangeLog: * config/i386/sse.md (maskload<mode><sseintvecmodelower>): Call maskload<mode>..._1. (maskload<mode><sseintvecmodelower>_1): Rename.
-
Robin Dapp authored
This patch adds an undefined else operand to the masked loads. gcc/ChangeLog: * config/gcn/predicates.md (maskload_else_operand): New predicate. * config/gcn/gcn-valu.md: Use new predicate.
-
Robin Dapp authored
This adds zero else operands to masked loads and their intrinsics. I needed to adjust more than initially thought because we rely on combine for several instructions and a change in a "base" pattern needs to propagate to all those. gcc/ChangeLog: * config/aarch64/aarch64-sve-builtins-base.cc: Add else handling. * config/aarch64/aarch64-sve-builtins.cc (function_expander::use_contiguous_load_insn): Ditto. * config/aarch64/aarch64-sve-builtins.h: Add else operand to contiguous load. * config/aarch64/aarch64-sve.md (@aarch64_load<SVE_PRED_LOAD:pred_load> _<ANY_EXTEND:optab><SVE_HSDI:mode><SVE_PARTIAL_I:mode>): Split and add else operand. (@aarch64_load_<ANY_EXTEND:optab><SVE_HSDI:mode><SVE_PARTIAL_I:mode>): Ditto. (*aarch64_load_<ANY_EXTEND:optab>_mov<SVE_HSDI:mode><SVE_PARTIAL_I:mode>): Ditto. * config/aarch64/aarch64-sve2.md: Ditto. * config/aarch64/iterators.md: Remove unused iterators. * config/aarch64/predicates.md (aarch64_maskload_else_operand): Add zero else operand.
-
Robin Dapp authored
This patch adds an else operand to vectorized masked load calls. The current implementation adds else-value arguments to the respective target-querying functions that is used to supply the vectorizer with the proper else value. We query the target for its supported else operand and uses that for the maskload call. If necessary, i.e. if the mode has padding bits and if the else operand is nonzero, a VEC_COND enforcing a zero else value is emitted. gcc/ChangeLog: * optabs-query.cc (supports_vec_convert_optab_p): Return icode. (get_supported_else_val): Return supported else value for optab's operand at index. (supports_vec_gather_load_p): Add else argument. (supports_vec_scatter_store_p): Ditto. * optabs-query.h (supports_vec_gather_load_p): Ditto. (get_supported_else_val): Ditto. * optabs-tree.cc (target_supports_mask_load_store_p): Ditto. (can_vec_mask_load_store_p): Ditto. (target_supports_len_load_store_p): Ditto. (get_len_load_store_mode): Ditto. * optabs-tree.h (target_supports_mask_load_store_p): Ditto. (can_vec_mask_load_store_p): Ditto. * tree-vect-data-refs.cc (vect_lanes_optab_supported_p): Ditto. (vect_gather_scatter_fn_p): Ditto. (vect_check_gather_scatter): Ditto. (vect_load_lanes_supported): Ditto. * tree-vect-patterns.cc (vect_recog_gather_scatter_pattern): Ditto. * tree-vect-slp.cc (vect_get_operand_map): Adjust indices for else operand. (vect_slp_analyze_node_operations): Skip undefined else operand. * tree-vect-stmts.cc (exist_non_indexing_operands_for_use_p): Add else operand handling. (vect_get_vec_defs_for_operand): Handle undefined else operand. (check_load_store_for_partial_vectors): Add else argument. (vect_truncate_gather_scatter_offset): Ditto. (vect_use_strided_gather_scatters_p): Ditto. (get_group_load_store_type): Ditto. (get_load_store_type): Ditto. (vect_get_mask_load_else): Ditto. (vect_get_else_val_from_tree): Ditto. (vect_build_one_gather_load_call): Add zero else operand. (vectorizable_load): Use else operand. * tree-vectorizer.h (vect_gather_scatter_fn_p): Add else argument. (vect_load_lanes_supported): Ditto. (vect_get_mask_load_else): Ditto. (vect_get_else_val_from_tree): Ditto.
-
Robin Dapp authored
When predicating a load we implicitly assume that the else value is zero. This matters in case the loaded value is padded (like e.g. a Bool) and we must ensure that the padding bytes are zero on targets that don't implicitly zero inactive elements. A former version of this patch still had this handling in ifcvt but the latest version defers it to the vectorizer. gcc/ChangeLog: * tree-if-conv.cc (predicate_load_or_store): Add zero else operand and comment.
-
Robin Dapp authored
This patch adds else-operand handling to the internal functions. gcc/ChangeLog: * internal-fn.cc (add_mask_and_len_args): Rename... (add_mask_else_and_len_args): ...to this and add else handling. (expand_partial_load_optab_fn): Use adjusted function. (expand_partial_store_optab_fn): Ditto. (expand_scatter_store_optab_fn): Ditto. (expand_gather_load_optab_fn): Ditto. (internal_fn_len_index): Add else handling. (internal_fn_else_index): Ditto. (internal_fn_mask_index): Ditto. (get_supported_else_vals): New function. (supported_else_val_p): New function. (internal_gather_scatter_fn_supported_p): Add else operand. * internal-fn.h (internal_gather_scatter_fn_supported_p): Define else constants. (MASK_LOAD_ELSE_ZERO): Ditto. (MASK_LOAD_ELSE_M1): Ditto. (MASK_LOAD_ELSE_UNDEFINED): Ditto. (get_supported_else_vals): Declare. (supported_else_val_p): Ditto.
-
Robin Dapp authored
This patch amends the documentation for masked loads (maskload, vec_mask_load_lanes, and mask_gather_load as well as their len counterparts) with an else operand. gcc/ChangeLog: * doc/md.texi: Document masked load else operand.
-
Tobias Burnus authored
libgomp/ChangeLog: PR libgomp/117626 * plugin/plugin-nvptx.c (nvptx_open_device): Use 'CUDA_CALL_ERET' with 'NULL' as error return instead of 'CUDA_CALL' that returns false.
-
Andrew Pinski authored
For pointers I forgot that BIT_IOR_EXPR is not valid so when I added the pattern to convert `max<a,b> != 0` (r15-5356), GCC would start to ICEing saying pointer types were not valid for BIT_IOR_EXPR. This fixes the problem by casting to the unsigned type of the inner type. There was another way of fixing this to handling it as `a == 0 & b == 0` but both match and reassoication (for pointers) will then convert it back into the form I am creating here so let's just use that form instead. Bootstrapped and tested on x86_64-linux-gnu. PR tree-optimization/117646 gcc/ChangeLog: * match.pd (`max<a,b>==0`): Add casts to `unsigned type`. gcc/testsuite/ChangeLog: * gcc.dg/torture/minmaxneeqptr-1.c: New test. Signed-off-by:
Andrew Pinski <quic_apinski@quicinc.com>
-
Jonathan Wakely authored
François pointed out that static_cast<__node_ptr>(&_M_before_begin) is invalid, because _M_before_begin is only a node-base not a node. Refactor the new merge overloads to only cast when we know we have a valid node. He also pointed out some optimizations to allow reusing hash codes that might be cached in the node. The _M_src_hash_code function already has the right logic to decide when a cached hash code can be reused by a different _Hashtable object. libstdc++-v3/ChangeLog: * include/bits/hashtable.h (_Hashtable::_M_src_hash_code): Improve comments. (_Hashtable::_M_merge_unique(_Hashtable&)): Use pointer_traits to get before-begin pointer. Only use static_cast on valid nodes, not the before-begin pointer. Reuse a hash code cached in the node when possible. (_Hashtable::_M_merge_multi(_Hashtable&)): Likewise. Reviewed-by:
François Dumont <fdumont@gcc.gnu.org>
-
Jason Merrill authored
The dependency output for header unit modules is based on the absolute pathname of the header file, but that's not something that a makefile can portably refer to. This patch adds a .c++-header-unit target based on the header name relative to an element of the include path. libcpp/ChangeLog: * internal.h (_cpp_get_file_dir): Declare. * files.cc (_cpp_get_file_dir): New fn. * mkdeps.cc (make_write): Use it. gcc/testsuite/ChangeLog: * g++.dg/modules/dep-4.H: New test.
-
Andrew Pinski authored
Instead of doing a dg-run with a specific target check for linux. Use signal as the effective-target since this requires the use of ALARM signal to do the testing. Also use check_vect in the main and renames main to main1 to make sure we don't use the registers. Tested on x86_64-linux-gnu. PR testsuite/117494 gcc/testsuite/ChangeLog: * gcc.dg/vect/pr101145inf.c: Remove dg-do and replace with dg-require-effective-target of signal. * gcc.dg/vect/pr101145inf_1.c: Likewise. * gcc.dg/vect/pr101145inf.inc: Rename main to main1 and mark as noinline. Include tree-vect.h. Have main call check_vect and main1. Signed-off-by:
Andrew Pinski <quic_apinski@quicinc.com>
-
Gerald Pfeifer authored
libstdc++-v3: * doc/xml/manual/allocator.xml: Update reference to Angelika Langer's article. * doc/html/manual/memory.html: Regenerate.
-
Jeff Law authored
I was looking at a regression in ext-dce's behavior just before Cauldron. Essentially a bugfix in ext-dce ended up causing us to fail to eliminate some useless extensions. When we have a SUBREG object with SUBREG_PROMOTED_VAR* flags set, we generally have to be more conservative in how we process bit group liveness, making bits live that wouldn't obviously be live otherwise. That's not always necessary though. For example, if we're storing a promoted subreg into memory, we may not care about those extra live bits on this instance of the subreg object (remember subregs are not shared!). Essentially if the mode of the memory reference is not wider than the mode of the inner REG, then we can clear the promoted state which in turn may allow more extension elimination. So at the start of ext-dce we do a simple pass over the IL and remove promoted subreg state when it's obviously safe to do so (memory stores when the modes allow it). That prevents extra bits from being live and ultimately allows us to remove more useless extensions. The testcase is in theory generic, but many targets won't have an opportunity to optimize this case. So rather then build out a large inclusion/exclusion list, I've just made the test risc-v specific. Bootstrapped and regression tested on aarch64, riscv64, s390x, etc in my tester. gcc/ * ext-dce.cc (maybe_clear_subreg_promoted_p): New function. (ext_dce_execute): Call it. gcc/testsuite * gcc.target/riscv/ext-dce-1.c: New test.
-
Maciej W. Rozycki authored
Remove stray `;;' from the middle of the introductory comment for the "unaligned_store<mode>" expander, clearly a leftover from a previous edition. gcc/ * config/alpha/alpha.md (unaligned_store<mode>): Remove stray `;;'.
-
John David Anglin authored
2024-11-17 John David Anglin <danglin@gcc.gnu.org> gcc/ChangeLog: PR target/69374 * doc/install.texi (Specific) <hppa*-hp-hpux11>: Update anchor and heading to reflect removal of 32-bit hppa support on HP-UX. Trim 32-bit related text.
-
GCC Administrator authored
-
- Nov 17, 2024
-
-
Jason Merrill authored
This should have been part of r15-5367. One day I'll remember to do this before buildbot sends me hate mail. gcc/c-family/ChangeLog: * c.opt.urls: Regenerate.
-
John David Anglin authored
In C23, bool is now a keyword. So, doing a typedef for it is invalid. 2024-11-17 John David Anglin <danglin@gcc.gnu.org> libgcc/ChangeLog: PR target/117627 * config/pa/linux-atomic.c: Remove typedef for bool type.
-