Commit graph

209370 commits

Author SHA1 Message Date
Tobias Burnus
ef79c64cb5 libgomp/libgomp.texi: Fix @node order in @menu
While texinfo 7.0.3 does not warn, an older texinfo did complain about:
libgomp.texi:1964: warning: node next `omp_target_memcpy' in menu
`omp_target_memcpy_rect' and in sectioning `omp_target_memcpy_async' differ

libgomp/

	* libgomp.texi (Device Memory Routines): Swap item order to match
	the order of the '@node's of the '@subsection's.
2024-03-12 15:42:50 +01:00
Richard Biener
73dac51b32 tree-optimization/114121 - chrec_fold_{plus,multiply} and recursion
The following addresses endless recursion in the
chrec_fold_{plus,multiply} functions when handling sign-conversions.
We only need to apply tricks when we'd fail (there's a chrec in the
converted operand) and we need to make sure to not turn the other
operand into something worse (for the chrec-vs-chrec case).

	PR tree-optimization/114121
	* tree-chrec.cc (chrec_fold_plus_1): Guard recursion with
	converted operand properly.
	(chrec_fold_multiply): Likewise.  Handle missed recursion.

	* gcc.dg/torture/pr114312.c: New testcase.
2024-03-12 15:16:05 +01:00
Nathaniel Shead
4aa87b8560 c++: Support target-specific nodes when streaming modules [PR111224]
Some targets make use of POLY_INT_CSTs and other custom builtin types,
which currently violate some assumptions when streaming. This patch adds
support for them, such as types like Aarch64 __fp16, PowerPC __ibm128,
and vector types thereof.

This patch doesn't provide "full" support of AArch64 SVE, however, since
for that we would need to support 'target' nodes (tracked in PR108080).

Adding the new builtin types means that on Aarch64 we now have 217
global trees created on initialisation (up from 191), so this patch also
slightly bumps the initial size of the fixed_trees allocation to 250.

	PR c++/98645
	PR c++/98688
	PR c++/111224

gcc/cp/ChangeLog:

	* module.cc (enum tree_tag): Add new tag for builtin types.
	(trees_out::start): POLY_INT_CSTs can be emitted.
	(trees_in::start): Likewise.
	(trees_out::core_vals): Stream POLY_INT_CSTs.
	(trees_in::core_vals): Likewise.
	(trees_out::type_node): Handle vectors with multiple coeffs.
	(trees_in::tree_node): Likewise.
	(init_modules): Register target-specific builtin types. Bump
	initial capacity slightly.

gcc/testsuite/ChangeLog:

	* g++.dg/modules/target-aarch64-1_a.C: New test.
	* g++.dg/modules/target-aarch64-1_b.C: New test.
	* g++.dg/modules/target-powerpc-1_a.C: New test.
	* g++.dg/modules/target-powerpc-1_b.C: New test.
	* g++.dg/modules/target-powerpc-2_a.C: New test.
	* g++.dg/modules/target-powerpc-2_b.C: New test.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
Reviewed-by: Patrick Palka <ppalka@redhat.com>
2024-03-13 00:33:40 +11:00
Jakub Jelinek
ad860cc27b asan: Instrument <retval> stores in callees rather than callers [PR112709]
asan currently instruments since PR69276 r6-6758 fix calls which store
the return value into memory on the caller side, before the call it
verifies the memory is writable.
Now PR112709 where we ICE on trying to instrument such calls made me
think about whether that is what we want to do.

There are 3 different cases.

One is when a function returns an aggregate which is passed e.g. in
registers, say like struct S { int a[4]; }; returning on x86_64.
That would be ideally instrumented in between the actual call and
storing of the aggregate into memory, but asan currently mostly
works as a GIMPLE pass and arranging for the instrumentation to happen
at that spot would be really hard.  We could diagnose after the call
but generally asan attempts to diagnose stuff before something is
overwritten rather than after, or keep the current behavior (that is
what this patch does, which has the disadvantage that it can complain
about UB even for functions which never return and so never actually store,
and doesn't check whether the memory wasn't e.g. poisoned during the call)
or could e.g. instrument both before and after the call (that would have
the disadvantage the current state has but at least would check post-factum
the store again afterwards).

Another case is when a function returns an aggregate through a hidden
reference, struct T { int a[128]; }; on x86_64 or even the above struct S
on ia32 as example.  In the actual program such stores happen when storing
something to <retval> or its parts in the callee, because <retval> there
expands to *hidden_retval.  So, IMHO we should instrument those in the
callee rather than caller, that is where the writes are and we can do that
easily.  This is what the patch below does.

And the last case is for builtins/internal functions.  Usually those don't
return aggregates, but in case they'd do and can be expanded inline, it is
better to instrument them in the caller (as before) rather than not
instrumenting the return stores at all.

I had to tweak the expected output on the PR69276 testcase, because
with the patch it keeps previous behavior on x86_64 (structure returned
in registers, stored in the caller, so reported as UB in A::A()),
while on i686 it changed the behavior and is reported as UB in the
vnull::operator vec which stores the structure, A::A() is then a frame
above it in the backtrace.

2024-03-12  Jakub Jelinek  <jakub@redhat.com>

	PR sanitizer/112709
	* asan.cc (has_stmt_been_instrumented_p): Don't instrument call
	stores on the caller side unless it is a call to a builtin or
	internal function or function doesn't return by hidden reference.
	(maybe_instrument_call): Likewise.
	(instrument_derefs): Instrument stores to RESULT_DECL if
	returning by hidden reference.

	* gcc.dg/asan/pr112709-1.c: New test.
	* g++.dg/asan/pr69276.C: Adjust expected output for some targets.
2024-03-12 11:34:50 +01:00
Jakub Jelinek
39737cdf00 strlen: Fix another spot that can create invalid ranges [PR114293]
This PR is similar to PR110603 fixed with r14-8487, except in a different
spot.  From the memset with -1 size of non-zero value we determine minimum
of (size_t) -1 and the code uses PTRDIFF_MAX - 2 (not really sure I
understand why it is - 2 and not - 1, e.g. heap allocated array
with PTRDIFF_MAX char elements which contain '\0' in the last element
should be fine, no?  One can still represent arr[PTRDIFF_MAX] - arr[0]
and arr[0] - arr[PTRDIFF_MAX] in ptrdiff_t and
strlen (arr) == PTRDIFF_MAX - 1) as the maximum, so again invalid range.
As in the other case, it is just UB that can lead to that, and we have
choice to only keep the min and use +inf for max, or only keep max
and use 0 for min, or not set the range at all, or use [min, min] or
[max, max] etc.  The following patch uses [min, +inf].

2024-03-12  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/114293
	* tree-ssa-strlen.cc (strlen_pass::handle_builtin_strlen): If
	max is smaller than min, set max to ~(size_t)0.

	* gcc.dg/pr114293.c: New test.
2024-03-12 10:23:19 +01:00
Pan Li
cdf0c6604d RISC-V: Fix some code style issue(s) in riscv-c.cc [NFC]
Notice some code style issue(s) when add __riscv_v_fixed_vlen, includes:

* Meanless empty line.
* Line greater than 80 chars.
* Indent with 3 space(s).
* Argument unalignment.

gcc/ChangeLog:

	* config/riscv/riscv-c.cc (riscv_ext_version_value): Fix
	code style greater than 80 chars.
	(riscv_cpu_cpp_builtins): Fix useless empty line, indent
	with 3 space(s) and argument unalignment.

Signed-off-by: Pan Li <pan2.li@intel.com>
2024-03-12 15:28:47 +08:00
Richard Biener
c0c57246d5 tree-optimization/114297 - SLP reduction with early break fix
The following makes sure to pass in the SLP node for the live stmts
we are generating the reduction epilogue for to
vect_create_epilog_for_reduction.  This follows the previous fix for
the non-SLP path.

	PR tree-optimization/114297
	* tree-vect-loop.cc (vectorizable_live_operation): Pass in the
	live stmts SLP node to vect_create_epilog_for_reduction.

	* gcc.dg/vect/vect-early-break_123-pr114297.c: New testcase.
2024-03-12 08:16:56 +01:00
Andrew Pinski
c4e5789ced Reject -fno-multiflags [PR114314]
When -fmultiflags option support was added in r13-3693-g6b1a2474f9e422,
it accidently allowed -fno-multiflags which then would pass on to cc1.
This fixes that oversight.

Committed as obvious after bootstrap/test on x86_64-linux-gnu.

gcc/ChangeLog:

	PR driver/114314
	* common.opt (fmultiflags): Add RejectNegative.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-03-11 17:44:37 -07:00
GCC Administrator
0628916802 Daily bump. 2024-03-12 00:17:48 +00:00
Jerry DeLisle
0c179654c3 libgfortran: [PR114304] Revert portion of PR105347 change.
PR libfortran/105437
	PR libfortran/114304

libgfortran/ChangeLog:

	* io/list_read.c (eat_separator): Remove check for decimal
	point mode and semicolon used as a seprator. Removes
	the regression.

gcc/testsuite/ChangeLog:

	* gfortran.dg/pr105473.f90: Add additional checks to address
	the case of semicolon at the end of a line.
2024-03-11 15:15:34 -07:00
Joseph Myers
9b3243858b Update gcc sv.po
* sv.po: Update.
2024-03-11 19:36:52 +00:00
Richard Earnshaw
c27b30552e gomp: testsuite: improve compatibility of bad-array-section-3.c [PR113428]
This test generates different warnings on ilp32 targets because the size
of an integer matches the size of a pointer.  Avoid this by using
signed char.

gcc/testsuite:

	PR testsuite/113428
	* gcc.dg/gomp/bad-array-section-c-3.c: Use signed char instead
	of int.
2024-03-11 15:51:35 +00:00
Gaius Mulley
8410402272 PR modula2/114295 Incorrect location if compiling implementation without definition
This patch fixes a bug which occurred if gm2 was asked to compile an
implementation module and could not find the definition module.  The error
location would be set to the SYSTEM module.  The bug occurred as the
module sym was created during the peep phase after which the few tokens are
destroyed and recreated during parsing.  The bug fix is to call
PutDeclared when the module is encountered during parsing which updates
the tokenno associated with the module.

gcc/m2/ChangeLog:

	PR modula2/114295
	* gm2-compiler/M2Batch.mod (MakeProgramSource): Call PutDeclared
	if the module is known.
	(MakeDefinitionSource): Ditto.
	(MakeImplementationSource): Ditto.
	* gm2-compiler/M2Comp.mod (ExamineHeader): New procedure.
	(ExamineCompilationUnit): Rewrite.
	(PeepInto): Rewrite.
	* gm2-compiler/M2Error.mod (NewError): Remove default call to
	GetTokenNo.
	* gm2-compiler/M2Quads.mod (callRequestDependant): Push tokno with
	Adr.
	(BuildStringAdrParam): Ditto.
	(doBuildBinaryOp): Push OperatorPos on the bool stack.
	(BuildRelOp): Ditto.
	* gm2-compiler/P2Build.bnf (SetType): Pass set token pos to
	BuildSetType.
	(PointerType): Pass pointer token pos to BuildPointerType.
	* gm2-compiler/P2SymBuild.def (BuildPointerType): Add parameter
	pointerpos.
	(BuildSetType): Add parameter setpos.
	* gm2-compiler/P2SymBuild.mod (BuildPointerType): Add parameter
	pointerpos.  Build combined token and use it when creating a
	pointer type.
	(BuildSetType): Add parameter setpos.  Build combined token and
	use it when creating a set type.
	* gm2-compiler/SymbolTable.mod (DebugUnknownToken): New constant.
	(CheckTok): New procedure function.
	(MakeProcedure): Call CheckTok.
	(MakeRecord): Ditto.
	(MakeVarient): Ditto.
	(MakeEnumeration): Ditto.
	(MakeHiddenType): Ditto.
	(MakeConstant): Ditto.
	(MakeConstStringCnul): Ditto.
	(MakeSubrange): Ditto.
	(MakeTemporary): Ditto.
	(MakeVariableForParam): Ditto.
	(MakeParameterHeapVar): Ditto.
	(MakePointer): Ditto.
	(MakeSet): Ditto.
	(MakeUnbounded): Ditto.
	(MakeProcType): Ditto.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
2024-03-11 15:21:42 +00:00
Rainer Orth
4e1fcf44bd testsuite: vect: Require vect_hw_misalign in gcc.dg/vect/vect-cost-model-1.c etc. [PR98238]
Several gcc.dg/vect/vect-cost-model-?.c tests FAIL on 32 and 64-bit
Solaris/SPARC:

FAIL: gcc.dg/vect/vect-cost-model-1.c -flto -ffat-lto-objects
scan-tree-dump vect "LOOP VECTORIZED"
FAIL: gcc.dg/vect/vect-cost-model-1.c scan-tree-dump vect "LOOP VECTORIZED"
FAIL: gcc.dg/vect/vect-cost-model-3.c -flto -ffat-lto-objects
scan-tree-dump vect "LOOP VECTORIZED"
FAIL: gcc.dg/vect/vect-cost-model-3.c scan-tree-dump vect "LOOP VECTORIZED"
FAIL: gcc.dg/vect/vect-cost-model-5.c -flto -ffat-lto-objects
scan-tree-dump vect "LOOP VECTORIZED"
FAIL: gcc.dg/vect/vect-cost-model-5.c scan-tree-dump vect "LOOP VECTORIZED"

The dumps show

/vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/vect/vect-cost-model-1.c:7:30:
note: ==> examining statement: _3 = *_2;
/vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/vect/vect-cost-model-1.c:7:30:
missed: unsupported unaligned access
/vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/vect/vect-cost-model-1.c:8:6:
missed: not vectorized: relevant stmt not supported: _3 = *_2;

so I think the tests need to require vect_hw_misalign.  This is what
this patch does.

Tested on sparc-sun-solaris2.11 and i386-pc-solaris2.11.

2024-02-22  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	gcc/testsuite:
	PR tree-optimization/98238
	* gcc.dg/vect/vect-cost-model-1.c (scan-tree-dump): Also require
	vect_hw_misalign.
	* gcc.dg/vect/vect-cost-model-3.c: Likewise.
	* gcc.dg/vect/vect-cost-model-5.c: Likewise.
2024-03-11 15:46:30 +01:00
Rainer Orth
96b63fa255 testsuite: vect: Require vect_perm in several tests [PR114071, PR113557, PR96109]
Several vectorization tests FAIL on 32 and 64-bit Solaris/SPARC:

FAIL: gcc.dg/vect/pr37027.c -flto -ffat-lto-objects scan-tree-dump-times
vect "vectorized 1 loops" 1
FAIL: gcc.dg/vect/pr37027.c -flto -ffat-lto-objects scan-tree-dump-times
vect "vectorizing stmts using SLP" 1
FAIL: gcc.dg/vect/pr37027.c scan-tree-dump-times vect "vectorized 1 loops" 1
FAIL: gcc.dg/vect/pr37027.c scan-tree-dump-times vect "vectorizing stmts
using SLP" 1
FAIL: gcc.dg/vect/pr67790.c -flto -ffat-lto-objects scan-tree-dump vect
"vectorizing stmts using SLP"
FAIL: gcc.dg/vect/pr67790.c scan-tree-dump vect "vectorizing stmts using SLP"
FAIL: gcc.dg/vect/slp-47.c -flto -ffat-lto-objects scan-tree-dump-times
vect "vectorizing stmts using SLP" 2
FAIL: gcc.dg/vect/slp-47.c scan-tree-dump-times vect "vectorizing stmts
using SLP" 2
FAIL: gcc.dg/vect/slp-48.c -flto -ffat-lto-objects scan-tree-dump-times
vect "vectorizing stmts using SLP" 2
FAIL: gcc.dg/vect/slp-48.c scan-tree-dump-times vect "vectorizing stmts
using SLP" 2
FAIL: gcc.dg/vect/slp-reduc-1.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorized 1 loops" 1
FAIL: gcc.dg/vect/slp-reduc-1.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorizing stmts using SLP" 1
FAIL: gcc.dg/vect/slp-reduc-1.c scan-tree-dump-times vect "vectorized 1 loops" 1
FAIL: gcc.dg/vect/slp-reduc-1.c scan-tree-dump-times vect "vectorizing
stmts using SLP" 1
FAIL: gcc.dg/vect/slp-reduc-2.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorized 1 loops" 1
FAIL: gcc.dg/vect/slp-reduc-2.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorizing stmts using SLP" 1
FAIL: gcc.dg/vect/slp-reduc-2.c scan-tree-dump-times vect "vectorized 1 loops" 1
FAIL: gcc.dg/vect/slp-reduc-2.c scan-tree-dump-times vect "vectorizing
stmts using SLP" 1
FAIL: gcc.dg/vect/slp-reduc-7.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorized 1 loops" 1
FAIL: gcc.dg/vect/slp-reduc-7.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorizing stmts using SLP" 1
FAIL: gcc.dg/vect/slp-reduc-7.c scan-tree-dump-times vect "vectorized 1 loops" 1
FAIL: gcc.dg/vect/slp-reduc-7.c scan-tree-dump-times vect "vectorizing
stmts using SLP" 1
FAIL: gcc.dg/vect/slp-reduc-8.c -flto -ffat-lto-objects scan-tree-dump vect
"vectorized 1 loops"
FAIL: gcc.dg/vect/slp-reduc-8.c scan-tree-dump vect "vectorized 1 loops"
FAIL: gcc.dg/vect/vect-multi-peel-gaps.c -flto -ffat-lto-objects
scan-tree-dump vect "LOOP VECTORIZED"
FAIL: gcc.dg/vect/vect-multi-peel-gaps.c scan-tree-dump vect "LOOP VECTORIZED"

The dumps show variations of

/vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/vect/pr37027.c:24:17:
note: ==> examining statement: _4 = a[i_19].f2;
/vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/vect/pr37027.c:24:17:
missed: unsupported vect permute { 1 0 3 2 5 4 }
/vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/vect/pr37027.c:24:17:
missed: unsupported load permutation
/vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/vect/pr37027.c:27:17:
missed: not vectorized: relevant stmt not supported: _4 = a[i_19].f2;

so I think the tests should require vect_perm.  This is what this patch does

Tested on sparc-sun-solaris2.11 and i386-pc-solaris2.11.

2024-02-22  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	gcc/testsuite:
	PR tree-optimization/114071
	* gcc.dg/vect/pr37027.c: Require vect_perm.
	* gcc.dg/vect/pr67790.c: Likewise.
	* gcc.dg/vect/slp-reduc-1.c: Likewise.
	* gcc.dg/vect/slp-reduc-2.c: Likewise.
	* gcc.dg/vect/slp-reduc-7.c: Likewise.
	* gcc.dg/vect/slp-reduc-8.c: Likewise.

	PR tree-optimization/113557
	* gcc.dg/vect/vect-multi-peel-gaps.c (scan-tree-dump): Also
	require vect_perm.

	PR testsuite/96109
	* gcc.dg/vect/slp-47.c: Require vect_perm.
	* gcc.dg/vect/slp-48.c: Likewise.
2024-03-11 15:45:17 +01:00
Szabolcs Nagy
1bf70e68e4 aarch64,arm: Move branch-protection data to targets
The branch-protection types are target specific, not the same on arm
and aarch64.  This currently affects pac-ret+b-key, but there will be
a new type on aarch64 that is not relevant for arm.

After the move, change aarch_ identifiers to aarch64_ or arm_ as
appropriate.

Refactor aarch_validate_mbranch_protection to take the target specific
branch-protection types as an argument.

In case of invalid input currently no hints are provided: the way
branch-protection types and subtypes can be mixed makes it difficult
without causing confusion.

gcc/ChangeLog:

	* config/aarch64/aarch64.md: Rename aarch_ to aarch64_.
	* config/aarch64/aarch64.opt: Likewise.
	* config/aarch64/aarch64-c.cc (aarch64_update_cpp_builtins): Likewise.
	* config/aarch64/aarch64.cc (aarch64_expand_prologue): Likewise.
	(aarch64_expand_epilogue): Likewise.
	(aarch64_post_cfi_startproc): Likewise.
	(aarch64_handle_no_branch_protection): Copy and rename.
	(aarch64_handle_standard_branch_protection): Likewise.
	(aarch64_handle_pac_ret_protection): Likewise.
	(aarch64_handle_pac_ret_leaf): Likewise.
	(aarch64_handle_pac_ret_b_key): Likewise.
	(aarch64_handle_bti_protection): Likewise.
	(aarch64_override_options): Update branch protection validation.
	(aarch64_handle_attr_branch_protection): Likewise.
	* config/arm/aarch-common-protos.h (aarch_validate_mbranch_protection):
	Pass branch protection type description as argument.
	(struct aarch_branch_protect_type): Move from aarch-common.h.
	* config/arm/aarch-common.cc (aarch_handle_no_branch_protection):
	Remove.
	(aarch_handle_standard_branch_protection): Remove.
	(aarch_handle_pac_ret_protection): Remove.
	(aarch_handle_pac_ret_leaf): Remove.
	(aarch_handle_pac_ret_b_key): Remove.
	(aarch_handle_bti_protection): Remove.
	(aarch_validate_mbranch_protection): Pass branch protection type
	description as argument.
	* config/arm/aarch-common.h (enum aarch_key_type): Remove.
	(struct aarch_branch_protect_type): Remove.
	* config/arm/arm-c.cc (arm_cpu_builtins): Remove aarch_ra_sign_key.
	* config/arm/arm.cc (arm_handle_no_branch_protection): Copy and rename.
	(arm_handle_standard_branch_protection): Likewise.
	(arm_handle_pac_ret_protection): Likewise.
	(arm_handle_pac_ret_leaf): Likewise.
	(arm_handle_bti_protection): Likewise.
	(arm_configure_build_target): Update branch protection validation.
	* config/arm/arm.opt: Remove aarch_ra_sign_key.
2024-03-11 12:43:03 +00:00
Richard Biener
119f5ae045 middle-end/114299 - missing error recovery from gimplify failure
When internal_get_tmp_var fails to gimplify the value the temporary
SSA name is supposed to be initialized with we can leak SSA names
with a NULL SSA_NAME_DEF_STMT into the IL.  That's bad, so recover
from this by instead returning a decl in that case.

	PR middle-end/114299
	* gimplify.cc (internal_get_tmp_var): When gimplification
	of VAL failed, return a decl.

	* gcc.target/i386/pr114299.c: New testcase.
2024-03-11 11:22:26 +01:00
Jakub Jelinek
dbe5ccda4d bitint: Avoid rewriting large/huge _BitInt vars into SSA after bitint lowering [PR114278]
The following testcase ICEs, because update-address-taken subpass of
fre5 rewrites
  _BitInt(128) b;
  vector(16) unsigned char _3;

  <bb 2> [local count: 1073741824]:
  _3 = MEM <vector(16) unsigned char> [(char * {ref-all})p_2(D)];
  MEM <vector(16) unsigned char> [(char * {ref-all})&b] = _3;
  b ={v} {CLOBBER(eos)};
to
  _BitInt(128) b;
  vector(16) unsigned char _3;

  <bb 2> [local count: 1073741824]:
  _3 = MEM <vector(16) unsigned char> [(char * {ref-all})p_2(D)];
  b_5 = VIEW_CONVERT_EXPR<_BitInt(128)>(_3);
but we can't have large/huge _BitInt vars in SSA form after the bitint
lowering except for function arguments loaded from memory, as expansion
isn't able to deal with those, it relies on bitint lowering to lower
those operations.
The following patch fixes that by setting DECL_NOT_GIMPLE_REG_P for
large/huge _BitInt vars after bitint lowering, such that we don't
rewrite them into SSA form.

2024-03-11  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/114278
	* tree-ssa.cc (maybe_optimize_var): If large/huge _BitInt vars are no
	longer addressable, set DECL_NOT_GIMPLE_REG_P on them.

	* gcc.dg/bitint-99.c: New test.
2024-03-11 11:00:54 +01:00
Eric Botcazou
0c4df2c3c3 Fix placement of recently implemented DIE
It's the DIE added for enumeration types with reverse scalar storage order.

gcc/
	PR debug/113519
	PR debug/113777
	* dwarf2out.cc (gen_enumeration_type_die): In the reverse case,
	generate the DIE with the same parent as in the regular case.

gcc/testsuite/
	* gcc.dg/sso-20.c: New test.
	* gcc.dg/sso-21.c: Likewise.
2024-03-11 09:30:05 +01:00
Andrew Pinski
31ce2e993d Fold: Fix up merge_truthop_with_opposite_arm for NaNs [PR95351]
The problem here is that merge_truthop_with_opposite_arm would
use the type of the result of the comparison rather than the operands
of the comparison to figure out if we are honoring NaNs.
This fixes that oversight and now we get the correct results in this
case.

Committed as obvious after a bootstrap/test on x86_64-linux-gnu.

	PR middle-end/95351

gcc/ChangeLog:

	* fold-const.cc (merge_truthop_with_opposite_arm): Use
	the type of the operands of the comparison and not the type
	of the comparison.

gcc/testsuite/ChangeLog:

	* gcc.dg/float_opposite_arm-1.c: New test.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-03-10 19:58:49 -07:00
GCC Administrator
1a4553bc25 Daily bump. 2024-03-11 00:16:47 +00:00
Iain Buclaw
a84b98c62d d: Fix -fpreview=in ICEs with forward referenced parameter [PR112285]
The way that the target hook preferPassByRef is implemented, it relied
on the GCC "back-end" tree type to determine whether or not to use `ref'
ABI for D `in' parameters; e.g: prefer by value if it is expected that
the target will pass the type around in registers.

Building the GCC tree type depends on the AST type being complete - all
semantic processing is finished - but as this hook is called from the
front-end, this will not be the case for forward referenced or
self-referencing types.

The consensus in upstream is that `in' parameters should always be
implicitly `ref', but as the front-end does not yet support all types
being rvalue references, limit this just static arrays and structs.

	PR d/112285
	PR d/112290

gcc/d/ChangeLog:

	* d-target.cc (Target::preferPassByRef): Return true for all static
	array and struct types.

gcc/testsuite/ChangeLog:

	* gdc.dg/pr112285.d: New test.
	* gdc.dg/pr112290.d: New test.
2024-03-10 19:06:11 +01:00
jlaw
8fe27ed193 [committed] [PR tree-optimization/110199] Simplify MIN/MAX more often
So as I mentioned in the BZ, the case of

t = MIN_EXPR (A, B)

where we know something about the relationship between A and B can be trivially
handled by some existing code in DOM.  That existing code would simplify when A
== B.  But by testing GE and LE instead of EQ we can cover more cases with
minimal effort.  When applicable the MIN/MAX turns into a simple copy.

I made one other change.  We have other binary operations that we simplify when
we know something about the relationship between the operands.  That code was
not canonicalizing the order of operands when building the expression to lookup
in the hash tables to discover that relationship.  Since those paths are only
testing for equality, we can trivially reverse them and not have to worry about
changing codes or anything like that.  So extremely safe and avoids having to
come back and fix that code to match the MIN_EXPR/MAX_EXPR case later.

Bootstrapped on x86 and also tested on the crosses.  I briefly thought there
was an sh regression, but that was actually the recent fwprop changes twiddling
code generation for one test.

	PR tree-optimization/110199
gcc/
	* tree-ssa-scopedtables.cc
	(avail_exprs_stack::simplify_binary_operation): Generalize handling
	of MIN_EXPR/MAX_EXPR to allow additional simplifications.  Canonicalize
	comparison operands for other cases.

gcc/testsuite

	* gcc.dg/tree-ssa/minmax-27.c: New test.
	* gcc.dg/tree-ssa/minmax-28.c: New test.
2024-03-10 12:03:52 -06:00
Pan Li
993c6de642 VECT: Fix ICE for vectorizable LD/ST when both len and store are enabled
This patch would like to fix one ICE in vectorizable_store when both the
loop_masks and loop_lens are enabled.  The ICE looks like below when build
with "-march=rv64gcv -O3".

during GIMPLE pass: vect
test.c: In function ‘d’:
test.c:6:6: internal compiler error: in vectorizable_store, at
tree-vect-stmts.cc:8691
    6 | void d() {
      |      ^
0x37a6f2f vectorizable_store
        .../__RISC-V_BUILD__/../gcc/tree-vect-stmts.cc:8691
0x37b861c vect_analyze_stmt(vec_info*, _stmt_vec_info*, bool*,
_slp_tree*, _slp_instance*, vec<stmt_info_for_cost, va_heap, vl_ptr>*)
        .../__RISC-V_BUILD__/../gcc/tree-vect-stmts.cc:13242
0x1db5dca vect_analyze_loop_operations
        .../__RISC-V_BUILD__/../gcc/tree-vect-loop.cc:2208
0x1db885b vect_analyze_loop_2
        .../__RISC-V_BUILD__/../gcc/tree-vect-loop.cc:3041
0x1dba029 vect_analyze_loop_1
        .../__RISC-V_BUILD__/../gcc/tree-vect-loop.cc:3481
0x1dbabad vect_analyze_loop(loop*, vec_info_shared*)
        .../__RISC-V_BUILD__/../gcc/tree-vect-loop.cc:3639
0x1e389d1 try_vectorize_loop_1
        .../__RISC-V_BUILD__/../gcc/tree-vectorizer.cc:1066
0x1e38f3d try_vectorize_loop
        .../__RISC-V_BUILD__/../gcc/tree-vectorizer.cc:1182
0x1e39230 execute
        .../__RISC-V_BUILD__/../gcc/tree-vectorizer.cc:1298

There are two ways to reach vectorizer LD/ST, one is the analysis and
the other is transform.  We cannot have both the lens and the masks
enabled during transform but it is valid during analysis.  Given the
transform doesn't required cost_vec,  we can only enable the assert
based on cost_vec is NULL or not.

Below testsuites are passed for this patch:
* The x86 bootstrap tests.
* The x86 fully regression tests.
* The aarch64 fully regression tests.
* The riscv fully regressison tests.

gcc/ChangeLog:

	* tree-vect-stmts.cc (vectorizable_store): Enable the assert
	during transform process.
	(vectorizable_load): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/pr114195-1.c: New test.

Signed-off-by: Pan Li <pan2.li@intel.com>
2024-03-10 18:01:07 +08:00
jlaw
6f7d000fca Revert "[committed] Adjust expectations for pr59533-1.c"
This reverts commit 7e16f819ff.
2024-03-09 21:33:47 -07:00
jlaw
7c8f0a79a7 [committed] [target/102250] Document python requirement for risc-v
PR target/102250
gcc/

	* doc/install.texi: Document need for python when building
	RISC-V compilers.
2024-03-09 20:11:39 -07:00
jlaw
50531b6d40 [committed] [PR target/111362] Fix compare-debug issue with mode switching
The issue here is the code we emit for mode-switching can change when -g is
added to the command line.  This is caused by processing debug notes occurring
after a call which is the last real statement in a basic block.

Without -g the CALL_INSN is literally the last insn in the block and the loop
exits.  If mode switching after the call is needed, it'll be handled as we
process outgoing edges.

With -g the loop iterates again and in the processing of the node the backend
signals that a mode switch is necessary.

I pondered fixing this in the target, but the better fix is to ignore the debug
notes in the insn stream.

I did a cursory review of some of the other compare-debug failures, but did not
immediately see others which would likely be fixed by this change.  Sigh.

Anyway, bootstrapped and regression tested on x86.  Regression tested on rv64
as well.

	PR target/111362
gcc/
	* mode-switching.cc (optimize_mode_switching): Only process
	NONDEBUG insns.

gcc/testsuite

	* gcc.target/riscv/compare-debug-1.c: New test.
	* gcc.target/riscv/compare-debug-2.c: New test.
2024-03-09 19:39:09 -07:00
GCC Administrator
3e05eb949d Daily bump. 2024-03-10 00:17:04 +00:00
Georg-Johann Lay
f5a805d829 AVR: Fix typos in comment, indentation glitches in avr.md.
gcc/
	* config/avr/avr.md: Fix typos in comment, indentation glitches
	and some other nits.
2024-03-09 13:09:30 +01:00
Jakub Jelinek
3e3e4156a5 fwprop: Restore previous behavior for forward propagation of RTL with MEMs [PR114284]
Before the recent PR111267 r14-8319 fwprop changes, fwprop would never try
to propagate what was not considered PROFITABLE, where the profitable part
actually was partly about profitability, partly about very good reasons
not to actually propagate and partly for cases where propagation is
completely incorrect.
In particular, classify_result has:
  /* Allow (subreg (mem)) -> (mem) simplifications with the following
     exceptions:
     1) Propagating (mem)s into multiple uses is not profitable.
     2) Propagating (mem)s across EBBs may not be profitable if the source EBB
        runs less frequently.
     3) Propagating (mem)s into paradoxical (subreg)s is not profitable.
     4) Creating new (mem/v)s is not correct, since DCE will not remove the old
        ones.  */
  if (single_use_p
      && single_ebb_p
      && SUBREG_P (old_rtx)
      && !paradoxical_subreg_p (old_rtx)
      && MEM_P (new_rtx)
      && !MEM_VOLATILE_P (new_rtx))
    return PROFITABLE;
and didn't mark any other MEM_P (new_rtx) or rtxes which contain
a MEM in its subrtxes as PROFITABLE.  Now, since r14-8319 profitable_p
method has been renamed to likely_profitable_p and has just a minor role.
Now, rule 4) above is something that isn't about profitability, but about
correct behavior, if you propagate mem/v, the code is miscompiled.
This particular case has been fixed elsewhere by Haochen in r14-9379.
But I think even the 1) and 2) and maybe 3) are a strong don't do it,
don't rely solely on rtx costs, increasing the number of loads of the same
memory, even when cached, is undesirable, canceling load hoisting can
be undesirable as well.

So, the following patch restores previous behavior of src contains any MEMs,
in that case likely_profitable_p () is taken as the old profitable_p ()
as a requirement rather than just a hint.  For propagation of something
which doesn't load from memory this keeps the r14-8319 behavior.

2024-03-09  Jakub Jelinek  <jakub@redhat.com>

	PR target/114284
	* fwprop.cc (try_fwprop_subst_pattern): Don't propagate
	src containing MEMs unless prop.likely_profitable_p ().
2024-03-09 13:04:26 +01:00
Xi Ruoyao
42cd49aa48
LoongArch: Emit R_LARCH_RELAX for TLS IE with non-extreme code model to allow the IE to LE linker relaxation
In Binutils we need to make IE to LE relaxation only allowed when there
is an R_LARCH_RELAX after R_LARCH_TLE_IE_PC_{HI20,LO12} so an invalid
"partial" relaxation won't happen with the extreme code model.  So if we
are emitting %ie_pc_{hi20,lo12} in a non-extreme code model, emit an
R_LARCH_RELAX to allow the relaxation.  The IE to LE relaxation does not
require the pcalau12i and the ld instruction to be adjacent, so we don't
need to limit ourselves to use the macro.

For the distro maintainers backporting changes: this change depends on
r14-8721, without r14-8721 R_LARCH_RELAX can be emitted mistakenly in
the extreme code model.

gcc/ChangeLog:

	* config/loongarch/loongarch.cc (loongarch_print_operand_reloc):
	Support 'Q' for R_LARCH_RELAX for TLS IE.
	(loongarch_output_move): Use 'Q' to print R_LARCH_RELAX for TLS
	IE.
	* config/loongarch/loongarch.md (ld_from_got<mode>): Likewise.

gcc/testsuite/ChangeLog:

	* gcc.target/loongarch/tls-ie-relax.c: New test.
	* gcc.target/loongarch/tls-ie-norelax.c: New test.
	* gcc.target/loongarch/tls-ie-extreme.c: New test.
2024-03-09 17:50:00 +08:00
Georg-Johann Lay
e8cc1f956b AVR: Add cost computation for some insn combine patterns.
gcc/
	* config/avr/avr.cc (avr_rtx_costs_1) [PLUS]: Determine cost for
	usum_widenqihi and add_zero_extend1.
	[MINUS]: Determine costs for udiff_widenqihi, sub+zero_extend,
	sub+sign_extend.
	* config/avr/avr.md (*addhi3.sign_extend1, *subhi3.sign_extend2):
	Compute exact insn lengths.
	(*usum_widenqihi3): Allow input operands to commute.
2024-03-09 10:09:57 +01:00
Jakub Jelinek
e9753f4b63 i386: Regenerate i386.opt.urls
When I've added the -mnoreturn-no-callee-saved-registers option
to i386.opt, I forgot to regenerate i386.opt.urls and Mark's
CI kindly reminded me of that.

Fixed thusly.

2024-03-09  Jakub Jelinek  <jakub@redhat.com>

	* config/i386/i386.opt.urls: Regenerate.
2024-03-09 09:37:07 +01:00
Lulu Cheng
6fe63013e3 LoongArch: testsuite: Add compilation options to the regname-fp-s9.c.
When the value of the macro DEFAULT_CFLAGS is set to '-ansi -pedantic-errors',
regname-s9-fp.c will test to fail. To solve this problem, add the compilation
option '-Wno-pedantic -std=gnu90' to this test case.

gcc/testsuite/ChangeLog:

	* gcc.target/loongarch/regname-fp-s9.c: Add compilation option
	'-Wno-pedantic -std=gnu90'.
2024-03-09 09:46:54 +08:00
Lulu Cheng
3a3fbec0a4 LoongArch: Fixed an issue with the implementation of the template atomic_compare_and_swapsi.
If the hardware does not support LAMCAS, atomic_compare_and_swapsi needs to be
implemented through "ll.w+sc.w". In the implementation of the instruction sequence,
it is necessary to determine whether the two registers are equal.
Since LoongArch's comparison instructions do not distinguish between 32-bit
and 64-bit, the two operand registers that need to be compared are symbolically
extended, and one of the operand registers is obtained from memory through the
"ll.w" instruction, which can ensure that the symbolic expansion is carried out.
However, the value of the other operand register is not guaranteed to be the
value of the sign extension.

gcc/ChangeLog:

	* config/loongarch/sync.md (atomic_cas_value_strong<mode>):
	In loongarch64, a sign extension operation is added when
	operands[2] is a register operand and the mode is SImode.

gcc/testsuite/ChangeLog:

	* g++.target/loongarch/atomic-cas-int.C: New test.
2024-03-09 09:46:23 +08:00
Jonathan Wakely
3e8ee03edd libstdc++: Do not require a time-of-day when parsing sys_days [PR114240]
When parsing a std::chrono::sys_days (or a sys_time with an even longer
period) we should not require a time-of-day to be present in the input,
because we can't represent that in the result type anyway.

Rather than trying to decide which specializations should require a
time-of-date and which should not, follow the direction of Howard
Hinnant's date library, which allows extracting a sys_time of any period
from input that only contains a date, defaulting the time-of-day part to
00:00:00. This seems consistent with the intent of the standard, which
says it's an error "If the parse fails to decode a valid date" (i.e., it
doesn't care about decoding a valid time, only a date).

libstdc++-v3/ChangeLog:

	PR libstdc++/114240
	* include/bits/chrono_io.h (_Parser::operator()): Assume
	hours(0) for a time_point, so that a time is not required
	to be present.
	* testsuite/std/time/parse/114240.cc: New test.
2024-03-09 00:21:42 +00:00
Jonathan Wakely
f4a52c184d libstdc++: Fix parsing of leap seconds as chrono::utc_time [PR114279]
Implementing all chrono::from_stream overloads in terms of
chrono::sys_time meant that a leap second time like 23:59:60.001 cannot
be parsed, because that cannot be represented in a sys_time.

The fix to support parsing leap seconds as utc_time is to convert the
parsed date to utc_time<days> and then add the parsed time to that,
which allows the result to land in a leap second, rather than doing all
the arithmetic with sys_time which doesn't have leap seconds.

For local_time we also allow %S to parse a 60s value, because doing
otherwise might disallow some valid uses. We can't know all use cases
users have for treating times as local_time.

For all other clocks, we can reject times that have 60 or 60.nnn as the
seconds part, because that cannot occur in a valid UNIX, GPS, or TAI
time. Since our chrono::file_clock uses sys_time, it can't occur for
that clock either.

In order to support this a new _M_is_leap_second member is needed in the
_Parser type. This can be added at the end, where most targets currently
have padding bytes. Similar to what I did recently for formatter _Spec
structs, we can also reserve additional padding bits for future
expansion.

This also fixes bugs in the from_stream overloads for utc_time,
tai_time, gps_time, and file_time, which were not using time_point_cast
to explicitly convert to the result type. That's needed because the
result type might have lower precision than the value returned from
from_sys or from_utc, which has a precision no lower than seconds.

libstdc++-v3/ChangeLog:

	PR libstdc++/114279
	* include/bits/chrono_io.h (_Parser::_M_is_leap_second): New
	data member.
	(_Parser::_M_reserved): Reserve padding bits for future use.
	(_Parser::operator()): Set _M_is_leap_second if %S reads 60s.
	(from_stream): Only allow _M_is_leap_second for utc_time and
	local_time. Adjust arithmetic for utc_time so that leap seconds
	are preserved. Use time_point_cast to convert to a possibly
	lower-precision result type.
	* testsuite/std/time/parse.cc: Move to ...
	* testsuite/std/time/parse/parse.cc: ... here.
	* testsuite/std/time/parse/114279.cc: New test.
2024-03-09 00:21:42 +00:00
GCC Administrator
c775a030af Daily bump. 2024-03-09 00:17:14 +00:00
Martin Jambor
54e505d044
ipa: Avoid excessive removing of SSAs (PR 113757)
PR 113757 shows that the code which was meant to debug-reset and
remove SSAs defined by LHSs of calls redirected to
__builtin_unreachable can trigger also when speculative
devirtualization creates a call to a noreturn function (and since it
is noreturn, it does not bother dealing with its return value).

What is more, it seems that the code handling this case is not really
necessary.  I feel slightly idiotic about this because I have a
feeling that I added it because of a failing test-case but I can
neither find the testcase nor a reason why the code in
cgraph_edge::redirect_call_stmt_to_callee would not be sufficient (it
turns the SSA name into a default-def, a bit like IPA-SRA, but any
code dominated by a call to a noreturn is not dangerous when it comes
to its side-effects).  So this patch just removes the handling.

gcc/ChangeLog:

2024-02-07  Martin Jambor  <mjambor@suse.cz>

	PR ipa/113757
	* tree-inline.cc (redirect_all_calls): Remove code adding SSAs to
	id->killed_new_ssa_names.

gcc/testsuite/ChangeLog:

2024-02-07  Martin Jambor  <mjambor@suse.cz>

	PR ipa/113757
	* g++.dg/ipa/pr113757.C: New test.
2024-03-09 00:47:49 +01:00
Ian Lance Taylor
5825bd0e0d libbacktrace: don't assume compressed section is aligned
Patch originally by GitHub user ubyte at
https://github.com/ianlancetaylor/libbacktrace/pull/120.

	* elf.c (elf_uncompress_chdr): Don't assume compressed section is
	aligned.
2024-03-08 13:56:33 -08:00
Vladimir N. Makarov
cebbaa2a84 [PR113790][LRA]: Fixing LRA ICE on riscv64
LRA failed to consider all insn alternatives when non-reload pseudo
did not get a hard register.  This resulted in failure to generate
code by LRA.  The patch fixes this problem.

gcc/ChangeLog:

	PR target/113790
	* lra-assigns.cc (assign_by_spills): Set up all_spilled_pseudos
	for non-reload pseudo too.
2024-03-08 14:49:01 -05:00
David Faust
0e850eff58 bpf: add size threshold for inlining mem builtins
BPF cannot fall back on library calls to implement memmove, memcpy and
memset, so we attempt to expand these inline always if possible.
However, this inline expansion was being attempted even for excessively
large operations, which could result in gcc consuming huge amounts of
memory and hanging.

Add a size threshold in the BPF backend below which to always expand
these operations inline, and introduce an option
-minline-memops-threshold= to control the threshold. Defaults to
1024 bytes.

gcc/

	* config/bpf/bpf.cc (bpf_expand_cpymem, bpf_expand_setmem): Do
	not attempt inline expansion if size is above threshold.
	* config/bpf/bpf.opt (-minline-memops-threshold): New option.
	* doc/invoke.texi (eBPF Options) <-minline-memops-threshold>:
	Document.

gcc/testsuite/

	* gcc.target/bpf/inline-memops-threshold-1.c: New test.
	* gcc.target/bpf/inline-memops-threshold-2.c: New test.
2024-03-08 10:12:42 -08:00
Richard Earnshaw
ac829a89fb arm: testsuite: tweak bics_3.c [PR113542]
This test was too simple, which meant that the compiler was sometimes
able to find a better optimization of the code than using a BICS
instruction.  Fix this by changing the test slightly to produce a
sequence where BICS should always be the preferred solution.

gcc/testsuite:
	PR target/113542
	* gcc.target/arm/bics_3.c: Adjust code to something which should
	always result in BICS.
2024-03-08 17:06:18 +00:00
David Faust
10c609191c bpf: testsuite: fix unresolved test in memset-1.c
The test was trying to do too much by both checking for an error, and
checking the resulting assembly. Of course, due to the error no asm was
produced, so the scan-asm went unresolved. Split it into two separate
tests to fix the issue.

gcc/testsuite/

	* gcc.target/bpf/memset-1.c: Move error test case to...
	* gcc.target/bpf/memset-2.c: ... here. New test.
2024-03-08 08:50:01 -08:00
Thomas Schwinge
84fc8f4f32 GCN: The original meaning of 'GCN_SUPPRESS_HOST_FALLBACK' isn't applicable (non-shared memory system)
'GCN_SUPPRESS_HOST_FALLBACK' originated as 'HSA_SUPPRESS_HOST_FALLBACK' in the
libgomp HSA plugin, where the idea was -- in my understanding -- that you
wouldn't have device code available for all functions that may be called, and
in that case transparently (shared memory system!) do host-fallback execution.
Or, with 'HSA_SUPPRESS_HOST_FALLBACK' set, you'd get those diagnosed.

This has then been copied into the libgomp GCN plugin as
'GCN_SUPPRESS_HOST_FALLBACK'.  However, the original meaning isn't applicable
for the libgomp GCN plugin anymore: we assume that we're generating device code
for all relevant functions, and we're implementing a non-shared memory system,
where we cannot transparently do host-fallback execution for individual
functions.

However, 'GCN_SUPPRESS_HOST_FALLBACK' has gained an additional meaning, to
enforce a fatal error in case that 'libhsa-runtime64.so.1' can't be dynamically
loaded; keep that meaning.

	libgomp/
	* plugin/plugin-gcn.c (GOMP_OFFLOAD_can_run): Don't consider
	'GCN_SUPPRESS_HOST_FALLBACK' anymore (assume always-'true').
	(init_hsa_context): Adjust 'GCN_SUPPRESS_HOST_FALLBACK' error
	message.
2024-03-08 16:35:28 +01:00
Thomas Schwinge
37078f241a nvptx: 'cuDeviceGetCount' failure is fatal
Per commit 683f118439
"OpenMP: Move omp requires checks to libgomp", we're now using 'return -1'
from 'GOMP_OFFLOAD_get_num_devices' for 'omp_requires_mask' purposes.  This
missed that via 'nvptx_get_num_devices', we could also 'return -1' for
'cuDeviceGetCount' failure.  Before, this meant (in 'gomp_target_init') to
silently ignore the plugin/device -- which also has been doubtful behavior.
Let's instead turn 'cuDeviceGetCount' failure into a fatal error, similar to
other errors during device initialization.

	libgomp/
	* plugin/plugin-nvptx.c (nvptx_get_num_devices):
	'cuDeviceGetCount' failure is fatal.
2024-03-08 16:35:28 +01:00
Thomas Schwinge
ab70addf56 GCN, nvptx: Fatal error for missing symbols in 'libhsa-runtime64.so.1', 'libcuda.so.1'
If 'libhsa-runtime64.so.1', 'libcuda.so.1' are not available, the corresponding
libgomp plugin/device gets disabled, as before.  But if they are available,
report any inconsistencies such as missing symbols, similar to how we fail in
presence of other issues during device initialization.

	libgomp/
	* plugin/plugin-gcn.c (init_hsa_runtime_functions): Fatal error
	for missing symbols.
	* plugin/plugin-nvptx.c (init_cuda_lib): Likewise.
2024-03-08 16:35:28 +01:00
Wilco Dijkstra
5119c7927c ARM: Fix builtin-bswap-1.c test [PR113915]
On Thumb-2 the use of CBZ blocks conditional execution, so change the
test to compare with a non-zero value.

gcc/testsuite/ChangeLog:
	PR target/113915
	* gcc.target/arm/builtin-bswap.x: Fix test to avoid emitting CBZ.
2024-03-08 15:03:31 +00:00
Sam James
64273a7e6b contrib: Improve dg-extract-results.sh's Python detection [PR109668]
'python' on some systems (e.g. SLES 15) might be Python 2. Prefer python3,
then python, then python2 (as the script still tries to work there).

	PR other/109668
	* dg-extract-results.sh: Check for python3 before python. Check for
	python2 last.
2024-03-08 15:24:20 +01:00
Jakub Jelinek
8263a4b650 testsuite: Fix up pr113617 test for darwin [PR113617]
The test attempts to link a shared library, and apparently Darwin doesn't
allow by default for shared libraries to contain undefined symbols.

The following patch just adds dummy definitions for the symbols, so that
the library no longer has any undefined symbols at least in my linux
testing.
Furthermore, for target { !shared } targets (like darwin until the it is
fixed in target-supports.exp), because we then link a program rather than
shared library, the patch also adds a dummy main definition so that it
can link.

2024-03-08  Jakub Jelinek  <jakub@redhat.com>

	PR rtl-optimization/113617
	PR target/114233
	* g++.dg/other/pr113617.C: Define -DSHARED when linking with -shared.
	* g++.dg/other/pr113617-aux.cc: Add definitions for used methods and
	templates not defined elsewhere.
2024-03-08 15:18:56 +01:00