Commit graph

208382 commits

Author SHA1 Message Date
Tobias Burnus
56d0aba11a amdgcn: config.gcc - enable gfx1030 and gfx1100 multilib; add them to the docs
gcc/ChangeLog:

	* config.gcc (amdgcn-*-*): Add gfx1030 and gfx1100 to
	TM_MULTILIB_CONFIG.
	* doc/install.texi (Configuration amdgcn-*-*): Mention gfx1030/gfx1100.
	* doc/invoke.texi (AMD GCN Options): Add gfx1030 and gfx1100 to
	-march/-mtune.

libgomp/ChangeLog:

	* testsuite/libgomp.c/declare-variant-4.h: Add variant functions
	for gfx1030 and gfx1100.
	* testsuite/libgomp.c/declare-variant-4-gfx1030.c: New test.
	* testsuite/libgomp.c/declare-variant-4-gfx1100.c: New test.

Signed-off-by: Tobias Burnus <tburnus@baylibre.com>
2024-01-26 15:11:09 +01:00
Andrew Stubbs
99890e1552 amdgcn: additional gfx1030/gfx1100 support
This is enough to get gfx1030 and gfx1100 working; there are still some test
failures to investigate, and probably some tuning to do.

gcc/ChangeLog:

	* config/gcn/gcn-opts.h (TARGET_PACKED_WORK_ITEMS): Add TARGET_RDNA3.
	* config/gcn/gcn-valu.md (all_convert): New iterator.
	(<convop><V_INT_1REG_ALT:mode><V_INT_1REG:mode>2<exec>): New
	define_expand, and rename the old one to ...
	(*<convop><V_INT_1REG_ALT:mode><V_INT_1REG:mode>_sdwa<exec>): ... this.
	(extend<V_INT_1REG_ALT:mode><V_INT_1REG:mode>2<exec>): Likewise, to ...
	(extend<V_INT_1REG_ALT:mode><V_INT_1REG:mode>_sdwa<exec>): .. this.
	(*<convop><V_INT_1REG_ALT:mode><V_INT_1REG:mode>_shift<exec>): New.
	* config/gcn/gcn.cc (gcn_global_address_p): Use "offsetbits" correctly.
	(gcn_hsa_declare_function_name): Update the vgpr counting for gfx1100.
	* config/gcn/gcn.md (<u>mulhisi3): Disable on RDNA3.
	(<u>mulqihi3_scalar): Likewise.

libgcc/ChangeLog:

	* config/gcn/amdgcn_veclib.h (CDNA3_PLUS): Handle RDNA3.

libgomp/ChangeLog:

	* config/gcn/time.c (RTC_TICKS): Configure RDNA3.
	(omp_get_wtime): Add RDNA3-compatible variant.
	* plugin/plugin-gcn.c (max_isa_vgprs): Tune for gfx1030 and gfx1100.

Signed-off-by:  Andrew Stubbs <ams@baylibre.com>
2024-01-26 11:38:47 +00:00
Nathaniel Shead
a0dde47f84 c++: Emit definitions of ODR-used static members imported from modules [PR112899]
Static data members marked 'inline' should be emitted in TUs where they
are ODR-used.  We need to make sure that inlines imported from modules
are correctly added to the 'pending_statics' map so that they get
emitted if needed, otherwise the attached testcase fails to link.

	PR c++/112899

gcc/cp/ChangeLog:

	* cp-tree.h (note_variable_template_instantiation): Rename to...
	(note_vague_linkage_variable): ...this.
	* decl2.cc (note_variable_template_instantiation): Rename to...
	(note_vague_linkage_variable): ...this.
	* pt.cc (instantiate_decl): Rename usage of above function.
	* module.cc (trees_in::read_var_def): Remember pending statics
	that we stream in.

gcc/testsuite/ChangeLog:

	* g++.dg/modules/init-4_a.C: New test.
	* g++.dg/modules/init-4_b.C: New test.
	* g++.dg/modules/init-6_a.H: New test.
	* g++.dg/modules/init-6_b.C: New test.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
Reviewed-by: Patrick Palka <ppalka@redhat.com>
Reviewed-by: Jason Merrill <jason@redhat.com
2024-01-26 22:28:45 +11:00
Richard Biener
f9b143d239 tree-optimization/113602 - datarefs of non-addressables
We can end up creating ADDR_EXPRs of non-addressable entities during
for example vectorization.  The following plugs this in data-ref
analysis when that would create such invalid ADDR_EXPR as part of
analyzing the ref structure.

	PR tree-optimization/113602
	* tree-data-ref.cc (dr_analyze_innermost): Fail when
	the base object isn't addressable.

	* gcc.dg/pr113602.c: New testcase.
2024-01-26 11:25:05 +01:00
Tobias Burnus
4b5650acb3 gcn/gcn-hsa.h: Always pass --amdhsa-code-object-version= in ASM_SPEC
Since LLVM commit 082f87c9d418 (Pull Req. #79038; will become LLVM 18)
  "[AMDGPU] Change default AMDHSA Code Object version to 5"
the default - when no --amdhsa-code-object-version= is used - was bumped.

Using --amdhsa-code-object-version=5 is supported (with unknown limitations)
since LLVM 14. GCC required for proper support at least LLVM 13.0.1 such
that explicitly using COV5 is not possible.

Unfortunately, the COV number matters for debugging ("-g") as mkoffload.cc
extracts debugging data from the host's object file and writes into an
an AMD GPU object file it creates. And all object files linked together
must have the same ABI version.

gcc/ChangeLog:

	* config/gcn/gcn-hsa.h (ABI_VERSION_SPEC): New; creates the
	"--amdhsa-code-object-version=" argument.
	(ASM_SPEC): Use it; replace previous version of it.

Signed-off-by: Tobias Burnus <tburnus@baylibre.com>
2024-01-26 10:14:09 +01:00
Juzhe-Zhong
bf23a62ee0 RISC-V: Refine some codes of VSETVL PASS [NFC]
gcc/ChangeLog:

	* config/riscv/riscv-vsetvl.cc (pre_vsetvl::earliest_fuse_vsetvl_info): Refine some codes.
	(pre_vsetvl::emit_vsetvl): Ditto.
2024-01-26 16:33:59 +08:00
Jiahao Xu
e3a9b77d73 LoongArch: Split vec_selects of bottom elements into simple move
For below pattern, can be treated as a simple move because floating point
and vector share a common register on loongarch64.

(set (reg/v:SF 32 $f0 [orig:93 res ] [93])
      (vec_select:SF (reg:V8SF 32 $f0 [115])
          (parallel [
                  (const_int 0 [0])
              ])))

gcc/ChangeLog:

	* config/loongarch/lasx.md (vec_extract<mode>_0):
	New define_insn_and_split patten.

gcc/testsuite/ChangeLog:

	* gcc.target/loongarch/vect-extract.c: New test.
2024-01-26 16:21:47 +08:00
Jiahao Xu
dddafe9482 LoongArch: Define LOGICAL_OP_NON_SHORT_CIRCUIT
Define LOGICAL_OP_NON_SHORT_CIRCUIT as 0, for a short-circuit branch, use the
short-circuit operation instead of the non-short-circuit operation.

SPEC2017 performance evaluation shows 1% performance improvement for fprate
GEOMEAN and no obvious regression for others. Especially, 526.blender_r +10.6%
on 3A6000.

This modification will introduce the following FAIL items:

FAIL: gcc.dg/tree-ssa/copy-headers-8.c scan-tree-dump-times ch2 "Conditional combines static and invariant" 1
FAIL: gcc.dg/tree-ssa/copy-headers-8.c scan-tree-dump-times ch2 "Will duplicate bb" 2
FAIL: gcc.dg/tree-ssa/update-threading.c scan-tree-dump-times optimized "Invalid sum" 0

gcc/ChangeLog:

	* config/loongarch/loongarch.h (LOGICAL_OP_NON_SHORT_CIRCUIT): Define.

gcc/testsuite/ChangeLog:

	* gcc.target/loongarch/short-circuit.c: New test.
2024-01-26 16:11:29 +08:00
chenxiaolong
9e7947a667 LoongArch: testsuite:Added additional vectorization "-mlsx" option.
gcc/testsuite/ChangeLog:

	* gcc.dg/signbit-2.c: Added additional "-mlsx" compilation options.
	* gfortran.dg/graphite/vect-pr40979.f90: Dito.
	* gfortran.dg/vect/fast-math-mgrid-resid.f: Dito.
2024-01-26 16:10:49 +08:00
Li Wei
58a27738c5 LoongArch: Optimize implementation of single-precision floating-point approximate division.
We found that in the spec17 521.wrf program, some loop invariant code generated
from single-precision floating-point approximate division calculation failed to
propose a loop. This is because the pseudo-register that stores the
intermediate temporary calculation results is rewritten in the implementation
of single-precision floating-point approximate division, failing to propose
invariants in the loop2_invariant pass. To this end, the intermediate temporary
calculation results are stored in new pseudo-registers without destroying the
read-write dependency, so that they could be recognized as loop invariants in
the loop2_invariant pass.
After optimization, the number of instructions of 521.wrf is reduced by 0.18%
compared with before optimization (1716612948501 -> 1713471771364).

gcc/ChangeLog:

	* config/loongarch/loongarch.cc (loongarch_emit_swdivsf): Adjust.

gcc/testsuite/ChangeLog:

	* gcc.target/loongarch/invariant-recip.c: New test.
2024-01-26 16:10:40 +08:00
Andrew Pinski
bfd6b36f08 testsuite/vect: Fix pr25413a.c expectations [PR109705]
The 2 loops in octfapg_universe can and will be vectorized now
after r14-333-g6d4b59a9356ac4 on targets that support multiplication
in the long type. But the testcase does not check vect_long_mult for
that, so this patch corrects that error and now the testcase passes correctly
on aarch64-linux-gnu (with and without SVE).

Built and tested on aarch64-linux-gnu (with and without SVE).

gcc/testsuite/ChangeLog:

	PR testsuite/109705
	* gcc.dg/vect/pr25413a.c: Expect 1 vectorized loops for !vect_long_mult
	and 2 for vect_long_mult.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-01-25 23:34:43 -08:00
Juzhe-Zhong
d40b3c1e43 RISC-V: Fix incorrect LCM delete bug [VSETVL PASS]
This patch fixes the recent noticed bug in RV32 glibc.

We incorrectly deleted a vsetvl:

        ...
	and	a4,a4,a3
	vmv.v.i	v1,0                 ---> Missed vsetvl cause illegal instruction report.
	vse8.v	v1,0(a5)

The root cause the laterin in LCM is incorrect.

      BB 358:
        avloc: n_bits = 2, set = {}
        kill: n_bits = 2, set = {}
        antloc: n_bits = 2, set = {}
        transp: n_bits = 2, set = {}
        avin: n_bits = 2, set = {}
        avout: n_bits = 2, set = {}
        del: n_bits = 2, set = {}

cause LCM let BB 360 delete the vsetvl:

      BB 360:
        avloc: n_bits = 2, set = {}
        kill: n_bits = 2, set = {}
        antloc: n_bits = 2, set = {}
        transp: n_bits = 2, set = {0 1 }
        avin: n_bits = 2, set = {}
        avout: n_bits = 2, set = {}
        del: n_bits = 2, set = {1}

Also, remove unknown vsetvl info into local computation since it is unnecessary.

Tested on both RV32/RV64 no regression.

	PR target/113469

gcc/ChangeLog:

	* config/riscv/riscv-vsetvl.cc (pre_vsetvl::compute_lcm_local_properties): Fix bug.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/autovec/pr113469.c: New test.
2024-01-26 14:49:12 +08:00
Andrew Pinski
0c2583dc25 aarch64: Fix/avoid undefinedness in aarch64_classify_index [PR100212]
The problem here is we don't check the return value of exact_log2
and always use that result as shifter. This fixes the issue by avoiding
the shift if the value was `-1` (which means the value was not exact a power of 2);
in this case we could either check if the values was equal to -1 or not equal to because
we then assign -1 to shift if the constant value was not equal. I chose `!=` as
it seemed to be more obvious of what the code is doing.

Committed as obvious after a build/test for aarch64-linux-gnu.

gcc/ChangeLog:

	PR target/100212
	* config/aarch64/aarch64.cc (aarch64_classify_index): Avoid
	undefined shift after the call to exact_log2.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-01-25 21:02:19 -08:00
GCC Administrator
f22a7ae8a9 Daily bump. 2024-01-26 00:18:33 +00:00
Jakub Jelinek
fd620bd335 c++: Fix up build_m_component_ref [PR113599]
The following testcase reduced from GDB is miscompiled starting with
r14-5503 PR112427 change.
The problem is in the build_m_component_ref hunk, which changed
-      datum = fold_build_pointer_plus (fold_convert (ptype, datum), component);
+      datum = cp_convert (ptype, datum, complain);
+      if (!processing_template_decl)
+       datum = build2 (POINTER_PLUS_EXPR, ptype,
+                       datum, convert_to_ptrofftype (component));
+      datum = cp_fully_fold (datum);
Component is e, (sizetype) e is 16, offset of c inside of C.
ptype is A *, pointer to type of C::c and datum is &d.
Now, previously the above created ((A *) &d) p+ (sizetype) e which is correct,
but in the new code cp_convert sees that C has A as base class and
instead of returning (A *) &d, it returns &d.D.2800 where D.2800 is
the FIELD_DECL for the A base at offset 8 into C.
So, instead of computing ((A *) &d) p+ (sizetype) e it computes
&d.D.2800 p+ (sizetype) e, which is ((A *) &d) p+ 24.

The following patch fixes it by using convert instead of cp_convert which
eventually calls build_nop (ptype, datum).

2024-01-26  Jakub Jelinek  <jakub@redhat.com>

	PR c++/113599
	* typeck2.cc (build_m_component_ref): Use convert instead of
	cp_convert for pointer conversion.

	* g++.dg/expr/ptrmem11.C: New test.
2024-01-26 00:08:36 +01:00
Jason Merrill
136a828754 c++: array of PMF [PR113598]
Here AGGREGATE_TYPE_P includes pointers to member functions, which is not
what we want.  Instead we should use class||array, as elsewhere in the
function.

	PR c++/113598

gcc/cp/ChangeLog:

	* init.cc (build_vec_init): Don't use {} for PMF.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/initlist-pmf2.C: New test.
2024-01-25 15:22:32 -05:00
Jason Merrill
44868e7298 c++: co_await and initializer_list [PR109227]
Here we end up with an initializer_list of 'aa', a type with a non-trivial
destructor, and need to destroy it.  The code called
build_special_member_call for cleanups, but that doesn't work for arrays, so
use cxx_maybe_build_cleanup instead.  Let's go ahead and do that
everywhere that has been calling the destructor directly.

	PR c++/109227

gcc/cp/ChangeLog:

	* coroutines.cc (build_co_await): Use cxx_maybe_build_cleanup.
	(build_actor_fn, process_conditional, maybe_promote_temps)
	(morph_fn_to_coro): Likewise.
	(expand_one_await_expression): Use build_cleanup.

gcc/testsuite/ChangeLog:

	* g++.dg/coroutines/co-await-initlist2.C: New test.
2024-01-25 15:22:32 -05:00
Andrew Pinski
f03b8f595b aarch64: Fix undefinedness while testing the J constraint [PR100204]
The J constraint can invoke undefined behavior due to it taking the
negative of the ival if ival was HWI_MIN. The fix is simple as casting
to `unsigned HOST_WIDE_INT` before doing the negative of it. This
does that.

Committed as obvious after build/test for aarch64-linux-gnu.

gcc/ChangeLog:

	PR target/100204
	* config/aarch64/constraints.md (J): Cast to `unsigned HOST_WIDE_INT`
	before taking the negative of it.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-01-25 11:57:48 -08:00
Vladimir N. Makarov
476226290d [PR113526][LRA]: Fixing asm-flag-1.c failure on ARM
My recent patch for PR113356 results in failure asm-flag-1.c test on arm.
After the patch LRA treats asm operand pseudos as general regs.  There
are too many such operands and LRA can not assign hard regs to all
operand pseudos.  Actually we should not assign hard regs to the
operand pseudo at all.  The following patch fixes this.

gcc/ChangeLog:

	PR target/113526
	* lra-constraints.cc (curr_insn_transform): Change class even for
	spilled pseudo successfully matched with with NO_REGS.
2024-01-25 14:46:39 -05:00
Chung-Lin Tang
ffeab69e1f MAINTAINERS: Update my work email address
* MAINTAINERS: Update my work email address.
2024-01-25 18:20:43 +00:00
Georg-Johann Lay
6b678d8f96 AVR: target/113601 - Fix wrong data start for ATmega3208 and ATmega3209.
gcc/
	PR target/113601
	* config/avr/avr-mcus.def (atmega3208, atmega3209): Fix data_section_start.
2024-01-25 18:53:16 +01:00
Szabolcs Nagy
305fe4f136 aarch64: Fix eh_return for -mtrack-speculation [PR112987]
Recent commit introduced a conditional branch in eh_return epilogues
that is not compatible with speculation tracking:

  commit 426fddcbda
  Author:     Szabolcs Nagy <szabolcs.nagy@arm.com>
  CommitDate: 2023-11-27 15:52:48 +0000

  aarch64: Use br instead of ret for eh_return

Refactor the compare zero and jump pattern and use it to fix the issue.

gcc/ChangeLog:

	PR target/112987
	* config/aarch64/aarch64.cc (aarch64_gen_compare_zero_and_branch): New.
	(aarch64_expand_epilogue): Use the new function.
	(aarch64_split_compare_and_swap): Likewise.
	(aarch64_split_atomic_op): Likewise.
2024-01-25 17:23:05 +00:00
Gaius Mulley
0614eb8440 modula2: add project regression test and badpointer tests
This patch adds four modula-2 testcases to the regression testsuite.
The project example stresses INC/DEC and range checking and the bad
pointer stress attempting to pass a string acual parameter to a
procedure with a pointer formal parameter.

gcc/testsuite/ChangeLog:

	* gm2/pim/fail/badpointer.mod: New test.
	* gm2/pim/fail/badpointer2.mod: New test.
	* gm2/pim/fail/badpointer3.mod: New test.
	* gm2/projects/pim/run/pass/pegfive/pegfive.mod: New test.
	* gm2/projects/pim/run/pass/pegfive/projects-pim-run-pass-pegfive.exp: New test.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
2024-01-25 16:29:02 +00:00
Robin Dapp
660e17f006 fold-const: Handle AND, IOR, XOR with stepped vectors [PR112971].
Found in PR112971 this patch adds folding support for bitwise operations
of const duplicate zero/one vectors with stepped vectors.
On riscv we have the situation that a folding would perpetually continue
without simplifying because e.g. {0, 0, 0, ...} & {7, 6, 5, ...} would
not be folded to {0, 0, 0, ...}.

gcc/ChangeLog:

	PR middle-end/112971

	* fold-const.cc (simplify_const_binop): New function for binop
	simplification of two constant vectors when element-wise
	handling is not necessary.
	(const_binop): Call new function.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/autovec/pr112971.c: New test.
2024-01-25 16:21:33 +01:00
Robin Dapp
90880e117a testsuite/vect: Add target checks to refined patterns.
On Solaris/SPARC several vector tests appeared to be regressing.  They
were never vectorized but the checks before r14-3612-ge40edf64995769
would match regardless if a loop was actually vectorized or not.
The refined checks only match a successful vectorization attempt
but are run unconditionally.  This patch adds target checks to them.

gcc/testsuite/ChangeLog:

	PR testsuite/113558

	* gcc.dg/vect/no-scevccp-outer-7.c: Add target check.
	* gcc.dg/vect/vect-outer-4c-big-array.c: Ditto.
	* gcc.dg/vect/vect-reduc-dot-s16a.c: Ditto.
	* gcc.dg/vect/vect-reduc-dot-s8a.c: Ditto.
	* gcc.dg/vect/vect-reduc-dot-s8b.c: Ditto.
	* gcc.dg/vect/vect-reduc-dot-u16b.c: Ditto.
	* gcc.dg/vect/vect-reduc-dot-u8a.c: Ditto.
	* gcc.dg/vect/vect-reduc-dot-u8b.c: Ditto.
	* gcc.dg/vect/vect-reduc-pattern-1a.c: Ditto.
	* gcc.dg/vect/vect-reduc-pattern-1b-big-array.c: Ditto.
	* gcc.dg/vect/vect-reduc-pattern-1c-big-array.c: Ditto.
	* gcc.dg/vect/vect-reduc-pattern-2a.c: Ditto.
	* gcc.dg/vect/vect-reduc-pattern-2b-big-array.c: Ditto.
	* gcc.dg/vect/wrapv-vect-reduc-dot-s8b.c: Ditto.
2024-01-25 16:21:33 +01:00
David Malcolm
6426d46677 analyzer: fix defaults in compound assignments from non-zero offsets [PR112969]
Confusion in binding_cluster::maybe_get_compound_binding about whether
offsets are relative to the start of the region or to the start of the
cluster was leading to incorrect handling of default values, leading
to false positives from -Wanalyzer-use-of-uninitialized-value, from
-Wanalyzer-exposure-through-uninit-copy, and other logic errors.

Fixed thusly.

gcc/analyzer/ChangeLog:
	PR analyzer/112969
	* store.cc (binding_cluster::maybe_get_compound_binding): When
	populating default_map, express the bit-range of the default key
	for REG relative to REG, rather than to the base region.

gcc/testsuite/ChangeLog:
	PR analyzer/112969
	* c-c++-common/analyzer/compound-assignment-5.c (test_3): Remove
	xfails, reorder tests.
	* c-c++-common/analyzer/compound-assignment-pr112969.c: New test.
	* gcc.dg/plugin/infoleak-pr112969.c: New test.
	* gcc.dg/plugin/plugin.exp: Add infoleak-pr112969.c to
	analyzer_kernel_plugin.c tests.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2024-01-25 10:06:12 -05:00
Gaius Mulley
4ffcceef81 modula2: correct prototype for lseek within gcc/m2/gm2-libs/libc.def
This patch corrects the definition of lseek by changing the second
parameter to a CSSIZE_T rather than LONGINT and allow the return value
to be ignored.

gcc/m2/ChangeLog:

	* gm2-libs/libc.def (lseek): Change the second parameter
	type to	CSSIZE_T and make the return value optional.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
2024-01-25 15:04:53 +00:00
Mary Bennett
5739d5fb54 RISC-V: Add support for XCVsimd extension in CV32E40P
Spec: github.com/openhwgroup/core-v-sw/blob/master/specifications/corev-builtin-spec.md

Contributors:
  Mary Bennett <mary.bennett@embecosm.com>
  Nandni Jamnadas <nandni.jamnadas@embecosm.com>
  Pietra Ferreira <pietra.ferreira@embecosm.com>
  Charlie Keaney
  Jessica Mills
  Craig Blackmore <craig.blackmore@embecosm.com>
  Simon Cook <simon.cook@embecosm.com>
  Jeremy Bennett <jeremy.bennett@embecosm.com>
  Helene Chelin <helene.chelin@embecosm.com>

gcc/ChangeLog:

	* common/config/riscv/riscv-common.cc: Add XCVbitmanip.
	* config/riscv/constraints.md: Likewise.
	* config/riscv/corev.def: Likewise.
	* config/riscv/corev.md: Likewise.
	* config/riscv/predicates.md: Likewise.
	* config/riscv/riscv-builtins.cc (AVAIL): Likewise.
	* config/riscv/riscv-ftypes.def: Likewise.
	* config/riscv/riscv.opt: Likewise.
	* config/riscv/riscv.cc (riscv_print_operand): Add new operand 'Y'.
	* doc/extend.texi: Add XCVbitmanip builtin documentation.
	* doc/sourcebuild.texi: Likewise.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/cv-simd-abs-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-abs-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-add-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-add-div2-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-add-div4-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-add-div8-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-add-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-add-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-add-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-and-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-and-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-and-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-and-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-avg-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-avg-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-avg-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-avg-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-avgu-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-avgu-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-avgu-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-avgu-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpeq-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpeq-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpeq-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpeq-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpge-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpge-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpge-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpge-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpgeu-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpgeu-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpgeu-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpgeu-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpgt-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpgt-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpgt-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpgt-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpgtu-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpgtu-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpgtu-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpgtu-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmple-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmple-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmple-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmple-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpleu-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpleu-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpleu-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpleu-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmplt-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmplt-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmplt-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmplt-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpltu-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpltu-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpltu-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpltu-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpne-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpne-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpne-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cmpne-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cplxconj-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cplxmul-i-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cplxmul-i-div2-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cplxmul-i-div4-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cplxmul-i-div8-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cplxmul-r-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cplxmul-r-div2-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cplxmul-r-div4-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-cplxmul-r-div8-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-dotsp-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-dotsp-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-dotsp-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-dotsp-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-dotup-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-dotup-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-dotup-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-dotup-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-dotusp-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-dotusp-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-dotusp-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-dotusp-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-extract-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-extract-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-extractu-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-extractu-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-insert-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-insert-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-march-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-max-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-max-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-max-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-max-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-maxu-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-maxu-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-maxu-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-maxu-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-min-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-min-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-min-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-min-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-minu-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-minu-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-minu-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-minu-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-neg-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-neg-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-or-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-or-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-or-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-or-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-pack-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-pack-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-packhi-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-packlo-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sdotsp-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sdotsp-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sdotsp-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sdotsp-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sdotup-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sdotup-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sdotup-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sdotup-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sdotusp-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sdotusp-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sdotusp-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sdotusp-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-shuffle-sci-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-shuffle2-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-shuffle2-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-shufflei0-sci-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-shufflei1-sci-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-shufflei2-sci-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-shufflei3-sci-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sll-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sll-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sll-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sll-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sra-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sra-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sra-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sra-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-srl-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-srl-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-srl-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-srl-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sub-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sub-div2-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sub-div4-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sub-div8-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sub-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sub-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-sub-sc-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-subrotmj-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-subrotmj-div2-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-subrotmj-div4-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-subrotmj-div8-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-xor-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-xor-h-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-xor-sc-b-compile-1.c: New test.
	* gcc.target/riscv/cv-simd-xor-sc-h-compile-1.c: New test.
	* lib/target-supports.exp: Add proc for XCVsimd extension.
2024-01-25 22:51:23 +08:00
Tobias Burnus
3fc39658df gcn: Add missing space to ASM_SPEC in gcn-hsa.h
gcc/
	* config/gcn/gcn-hsa.h (ASM_SPEC): Add space after -mxnack= argument.
2024-01-25 15:43:50 +01:00
Yanzhang Wang
acc22d56e1 RISC-V: remove param riscv-vector-abi. [PR113538]
Also adjust some of the tests for scan-assembly. The behavior is the
same as --param=riscv-vector-abi before.

gcc/ChangeLog:

	PR target/113538
	* config/riscv/riscv.cc (riscv_get_arg_info): Remove the flag.
	(riscv_fntype_abi): Ditto.
	* config/riscv/riscv.opt: Ditto.

gcc/testsuite/ChangeLog:

	PR target/113538
	* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-7.c: Fix the asm
	check.
	* gcc.target/riscv/rvv/base/abi-call-args-1-run.c: Ditto.
	* gcc.target/riscv/rvv/base/abi-call-args-1.c: Ditto.
	* gcc.target/riscv/rvv/base/abi-call-args-2-run.c: Ditto.
	* gcc.target/riscv/rvv/base/abi-call-args-2.c: Ditto.
	* gcc.target/riscv/rvv/base/abi-call-args-3-run.c: Ditto.
	* gcc.target/riscv/rvv/base/abi-call-args-3.c: Ditto.
	* gcc.target/riscv/rvv/base/abi-call-args-4-run.c: Ditto.
	* gcc.target/riscv/rvv/base/abi-call-args-4.c: Ditto.
	* gcc.target/riscv/rvv/base/abi-call-error-1.c: Ditto.
	* gcc.target/riscv/rvv/base/abi-call-return-run.c: Ditto.
	* gcc.target/riscv/rvv/base/abi-call-return.c: Ditto.
	* gcc.target/riscv/rvv/base/abi-call-variant_cc.c: Ditto.
	* gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-1.c: Ditto.
	* gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-2.c: Ditto.
	* gcc.target/riscv/rvv/base/abi-callee-saved-1-save-restore.c: Ditto.
	* gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c: Ditto.
	* gcc.target/riscv/rvv/base/abi-callee-saved-1.c: Ditto.
	* gcc.target/riscv/rvv/base/abi-callee-saved-2-save-restore.c: Ditto.
	* gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c: Ditto.
	* gcc.target/riscv/rvv/base/abi-callee-saved-2.c: Ditto.
	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-69.c: Ditto.
	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-70.c: Ditto.
	* gcc.target/riscv/rvv/base/float-point-dynamic-frm-71.c: Ditto.
	* gcc.target/riscv/rvv/base/misc_vreinterpret_vbool_vint.c: Ditto.
	* gcc.target/riscv/rvv/base/overloaded_rv32_vadd.c: Ditto.
	* gcc.target/riscv/rvv/base/overloaded_rv32_vfadd.c: Ditto.
	* gcc.target/riscv/rvv/base/overloaded_rv32_vget_vset.c: Ditto.
	* gcc.target/riscv/rvv/base/overloaded_rv32_vloxseg2ei16.c: Ditto.
	* gcc.target/riscv/rvv/base/overloaded_rv32_vreinterpret.c: Ditto.
	* gcc.target/riscv/rvv/base/overloaded_rv64_vadd.c: Ditto.
	* gcc.target/riscv/rvv/base/overloaded_rv64_vfadd.c: Ditto.
	* gcc.target/riscv/rvv/base/overloaded_rv64_vget_vset.c: Ditto.
	* gcc.target/riscv/rvv/base/overloaded_rv64_vloxseg2ei16.c: Ditto.
	* gcc.target/riscv/rvv/base/overloaded_rv64_vreinterpret.c: Ditto.
	* gcc.target/riscv/rvv/base/spill-10.c: Ditto.
	* gcc.target/riscv/rvv/base/spill-11.c: Ditto.
	* gcc.target/riscv/rvv/base/spill-9.c: Ditto.
	* gcc.target/riscv/rvv/base/tuple_vundefined.c: Ditto.
	* gcc.target/riscv/rvv/base/vcreate.c: Ditto.
	* gcc.target/riscv/rvv/base/vlmul_ext-1.c: Ditto.
	* gcc.target/riscv/rvv/base/zvfh-over-zvfhmin.c: Ditto.
	* gcc.target/riscv/rvv/base/zvfhmin-intrinsic.c: Ditto.
	* lib/target-supports.exp: Remove the flag.

Signed-off-by: Yanzhang Wang <yanzhang.wang@intel.com>
2024-01-25 21:12:34 +08:00
Jakub Jelinek
fb1b7e2fec convert: Fix test for out of bounds shift count [PR113574]
The following patch is miscompiled, because convert_to_integer_1 for
LSHIFT_EXPR tests if the INTEGER_CST shift count is too high, but
incorrectly compares it against TYPE_SIZE rather than TYPE_PRECISION.
The type in question is unsigned _BitInt(1), which has TYPE_PRECISION 1,
TYPE_SIZE 8, and the shift count is 2 in that case.

2024-01-25  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/113574
	* convert.cc (convert_to_integer_1) <case LSHIFT_EXPR>: Compare shift
	count against TYPE_PRECISION rather than TYPE_SIZE.

	* gcc.dg/torture/bitint-52.c: New test.
2024-01-25 13:15:23 +01:00
Richard Sandiford
c3de14ba1b aarch64: Fix out-of-bounds ENCODED_ELT access [PR113572]
When generalising vector_cst_all_same, I'd forgotten to update
VECTOR_CST_ENCODED_ELT to VECTOR_CST_ELT.  The check deliberately
looks at implicitly encoded elements in some cases.

gcc/
	PR target/113572
	* config/aarch64/aarch64-sve-builtins.cc (vector_cst_all_same):
	Check VECTOR_CST_ELT instead of VECTOR_CST_ENCODED_ELT

gcc/testsuite/
	PR target/113572
	* gcc.target/aarch64/sve/pr113572.c: New test.
2024-01-25 12:03:18 +00:00
Richard Sandiford
8eead1148c aarch64: Handle overlapping registers in movv8di [PR113550]
The LS64 movv8di pattern didn't handle loads that overlapped with
the address register (unless the overlap happened to be in the
last subload).

gcc/
	PR target/113550
	* config/aarch64/aarch64-simd.md: In the movv8di splitter, check
	whether each split instruction is a load that clobbers the source
	address.  Emit that instruction last if so.

gcc/testsuite/
	PR target/113550
	* gcc.target/aarch64/pr113550.c: New test.
2024-01-25 12:03:18 +00:00
Richard Sandiford
f251bbfec9 aarch64: Avoid paradoxical subregs in UXTL split [PR113485]
g:74e3e839ab2d36841320 handled the UXTL{,2}-ZIP[12] optimisation
in split1.  The UXTL input is a 64-bit vector of N-bit elements
and the result is a 128-bit vector of 2N-bit elements.  The
corresponding ZIP1 operates on 128-bit vectors of N-bit elements.

This meant that the ZIP1 input had to be a 128-bit paradoxical subreg
of the 64-bit UXTL input.  In the PRs, it wasn't possible to generate
this subreg because the inputs were already subregs of a x[234]
structure of 64-bit vectors.

I don't think the same thing can happen for UXTL2->ZIP2 because
UXTL2 input is a 128-bit vector rather than a 64-bit vector.

It isn't really necessary for ZIP1 to take 128-bit inputs,
since the upper 64 bits are ignored.  This patch therefore adds
a pattern for 64-bit → 128-bit ZIP1s.

In principle, we should probably use this form for all ZIP1s.
But in practice, that creates an awkward special case, and
would be quite invasive for stage 4.

gcc/
	PR target/113485
	* config/aarch64/aarch64-simd.md (aarch64_zip1<mode>_low): New
	pattern.
	(<optab><Vnarrowq><mode>2): Use it instead of generating a
	paradoxical subreg for the input.

gcc/testsuite/
	PR target/113485
	* gcc.target/aarch64/pr113485.c: New test.
	* gcc.target/aarch64/pr113573.c: Likewise.
2024-01-25 12:03:17 +00:00
Juzhe-Zhong
c6c2a1d79e RISC-V: Add LCM delete block predecessors dump information
While looking into PR113469, I notice the LCM delete a vsetvl incorrectly.

This patch add dump information of all predecessors for LCM delete vsetvl block
for better debugging.

Tested no regression.

gcc/ChangeLog:

	* config/riscv/riscv-vsetvl.cc (get_all_predecessors): New function.
	(pre_vsetvl::pre_global_vsetvl_info): Add LCM delete block all
	predecessors dump information.
2024-01-25 17:20:14 +08:00
Juzhe-Zhong
5ee45f5e28 RISC-V: Remove redundant full available computation [NFC]
Notice full available is computed evey round of earliest fusion which is redundant.
Actually we only need to compute it once in phase 3.

It's NFC patch and tested no regression. Committed.

gcc/ChangeLog:

	* config/riscv/riscv-vsetvl.cc (pre_vsetvl::compute_vsetvl_def_data): Remove
	redundant full available computation.
	(pre_vsetvl::pre_global_vsetvl_info): Ditto.
2024-01-25 16:32:22 +08:00
Andrew Pinski
e7d7c9e889 Fix a few vect gimple testcases for LLP64 targets (e.g. mingw) [PR113548]
This fixes of the vect testcases which uses the gimple FE for LLP64 targets.
The testcases use directly `unsigned long` for the addition to pointers
when they should be using `__SIZETYPE__`. This changes to use that instead.

gcc/testsuite/ChangeLog:

	PR testsuite/113548
	* gcc.dg/vect/slp-reduc-10a.c: Use `__SIZETYPE__` instead of `unsigned long`.
	* gcc.dg/vect/slp-reduc-10b.c: Likewise.
	* gcc.dg/vect/slp-reduc-10c.c: Likewise.
	* gcc.dg/vect/slp-reduc-10d.c: Likewise.
	* gcc.dg/vect/slp-reduc-10e.c: Likewise.
	* gcc.dg/vect/vect-cond-arith-2.c: Likewise.
	* gcc.dg/vect/vect-ifcvt-19.c: Likewise.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-01-25 00:30:49 -08:00
Jakub Jelinek
36c1384038 docs: Fix 2 typos
When looking into PR113572, I've noticed a typo in VECTOR_CST documentation
and grep found pasto of it elsewhere.

2024-01-25  Jakub Jelinek  <jakub@redhat.com>

	* doc/generic.texi (VECTOR_CST): Fix typo - petterns -> patterns.
	* doc/rtl.texi (CONST_VECTOR): Likewise.
2024-01-25 09:10:08 +01:00
Juzhe-Zhong
1a8bebb1c5 RISC-V: Add optim-no-fusion compile option [VSETVL PASS]
This patch adds no fusion compile option to disable phase 2 global fusion.

It can help us to analyze the compile-time and debugging.

Committed.

gcc/ChangeLog:

	* config/riscv/riscv-opts.h (enum vsetvl_strategy_enum): Add optim-no-fusion option.
	* config/riscv/riscv-vsetvl.cc (pass_vsetvl::lazy_vsetvl): Ditto.
	(pass_vsetvl::execute): Ditto.
	* config/riscv/riscv.opt: Ditto.
2024-01-25 15:58:57 +08:00
Jiahao Xu
77159546b2 LoongArch: Remove vec_concatz<mode> pattern.
It is incorrect to use vld/vori to implement the vec_concatz<mode> because when the LSX
instruction is used to update the value of the vector register, the upper 128 bits of
the vector register will not be zeroed.

gcc/ChangeLog:

	* config/loongarch/lasx.md (@vec_concatz<mode>): Remove this define_insn pattern.
	* config/loongarch/loongarch.cc (loongarch_expand_vector_group_init): Use vec_concat<mode>.
2024-01-25 15:50:24 +08:00
Richard Biener
578c7b91f4 tree-optimization/113576 - non-empty latch and may_be_zero vectorization
We can't support niters with may_be_zero when we end up with a
non-empty latch due to early exit peeling.  At least not in
the simplistic way the vectorizer handles this now.  Disallow
it again for exits that are not the last one.

	PR tree-optimization/113576
	* tree-vect-loop.cc (vec_init_loop_exit_info): Only allow
	exits with may_be_zero niters when its the last one.

	* gcc.dg/vect/pr113576.c: New testcase.
2024-01-25 08:37:37 +01:00
Lulu Cheng
0801a88af4 LoongArch: Disable TLS type symbols from generating non-zero offsets.
TLS gd ld and ie type symbols will generate corresponding GOT entries,
so non-zero offsets cannot be generated.
The address of TLS le type symbol+addend is not implemented in binutils,
so non-zero offset is not generated here for the time being.

gcc/ChangeLog:

	* config/loongarch/loongarch.cc (loongarch_symbolic_constant_p):
	For symbols of type tls, non-zero Offset is not generated.
2024-01-25 15:37:23 +08:00
Haochen Gui
464de9c283 rs6000: Enable block compare expand on P9 with m32 and mpowerpc64
gcc/
	* config/rs6000/rs6000-string.cc (expand_block_compare): Enable
	P9 with m32 and mpowerpc64.

gcc/testsuite/
	* gcc.target/powerpc/block-cmp-1.c: Exclude m32 and mpowerpc64.
	* gcc.target/powerpc/block-cmp-4.c: Likewise.
	* gcc.target/powerpc/block-cmp-8.c: New.
2024-01-25 14:57:39 +08:00
liuhongt
73f0a1a70c Enable -mlam=u57 by default when compiled with -fsanitize=hwaddress.
gcc/ChangeLog:

	* config/i386/i386-options.cc (ix86_option_override_internal):
	Enable -mlam=u57 by default when compiled with
	-fsanitize=hwaddress.
2024-01-25 12:42:37 +08:00
liuhongt
025b8f5eb7 Adjust hwasan testcase for x86 target.
There're 2 cases:
1. hwasan-poison-optimisation.c is supposed to scan call to
__hwasan_tag_mismatch4, and x86 have different mnemonic(call) from
aarch64(bl), so adjust testcase to scan either call or bl.

2. alloca-outside-caught.c/vararray-outside-caught.c are supposed to
scan mismatched tags and expected the tag corresponding to
out-of-bounds memory is 00, but for x86 the continous stack is
allocated by other local variable/array which is assigned with a
different tag, but still there're mismatches. So adjust testcase to
scan XX/XX instead of XX/00.

gcc/testsuite/ChangeLog:

	* c-c++-common/hwasan/alloca-outside-caught.c: Adjust
	testcase.
	* c-c++-common/hwasan/hwasan-poison-optimisation.c: Ditto.
	* c-c++-common/hwasan/vararray-outside-caught.c: Ditto.
2024-01-25 12:42:37 +08:00
Nathaniel Shead
6ff54cc0be c++: Handle partial specialisations in GMF [PR113405]
Currently, when exporting names from the GMF, or within header modules,
for a set of constrained partial specialisations we only emit the first
one. This is because the 'type_specialization' list only includes a
single specialization per template+argument list; constraints are not
considered here.

The existing code uses a separate 'partial_specializations' list to
track this instead, but currently it's only used for declarations in the
module purview. This patch makes use of this list for all declarations.

	PR c++/113405

gcc/cp/ChangeLog:

	* module.cc (set_defining_module): Track partial specialisations
	for all declarations.

gcc/testsuite/ChangeLog:

	* g++.dg/modules/concept-9.h: New test.
	* g++.dg/modules/concept-9_a.C: New test.
	* g++.dg/modules/concept-9_b.C: New test.
	* g++.dg/modules/concept-10_a.H: New test.
	* g++.dg/modules/concept-10_b.C: New test.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
2024-01-25 14:19:01 +11:00
Nathaniel Shead
b433a6f5a0 c++: Fix importing nested namespace declarations [PR100707]
Currently, importing a namespace declarations marks it as imported, and
so marks it as originating from the module that it was imported from.
This is usually harmless, but causes problems with nested namespaces.

In the linked PR, what happens is that the namespace 'A' imported from
the module ends up not being considered when creating the 'A' namespace
within its own TU, and thus it has its 'cp_binding_level' recreated.
However, by this point 'A::B' has already been imported, and so the
'level_chain' member no longer correctly points at 'A's binding level,
so the sanity check for this in 'resume_scope' ICEs.

Since as far as I can tell there's no reason for imported namespaces to
be attached to any specific module (namespace declarations with external
linkage are always attached to the global module by [module.unit] p7.2),
this patch just removes the 'imported' flag, which stops code from
caring about its originating module.

This patch also makes some minor adjustments to existing tests to cater
for the new dumped name.

	PR c++/100707

gcc/cp/ChangeLog:

	* name-lookup.cc (add_imported_namespace): Don't mark namespaces
	as imported.

gcc/testsuite/ChangeLog:

	* g++.dg/modules/indirect-1_b.C: Adjust to handle namespaces not
	being attached to the module they were imported from.
	* g++.dg/modules/indirect-1_c.C: Likewise.
	* g++.dg/modules/indirect-2_b.C: Likewise.
	* g++.dg/modules/indirect-2_c.C: Likewise.
	* g++.dg/modules/indirect-3_b.C: Likewise.
	* g++.dg/modules/indirect-3_c.C: Likewise.
	* g++.dg/modules/indirect-4_b.C: Likewise.
	* g++.dg/modules/indirect-4_c.C: Likewise.
	* g++.dg/modules/namespace-5_a.C: New test.
	* g++.dg/modules/namespace-5_b.C: New test.
	* g++.dg/modules/namespace-5_c.C: New test.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
2024-01-25 14:19:01 +11:00
Haochen Jiang
6f4d133dce i386: Modify testcases failed under -DDEBUG
gcc/testsuite/ChangeLog:

	* gcc.target/i386/adx-check.h: Include stdio.h when DEBUG
	is defined.
	* gcc.target/i386/avx512fp16-vscalefph-1b.c: Do not define
	DEBUG.
	* gcc.target/i386/avx512fp16vl-vaddph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vcmpph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vdivph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vfpclassph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vgetexpph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vgetmantph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vmaxph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vminph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vmulph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vrcpph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vreduceph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vrndscaleph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vrsqrtph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vscalefph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vsqrtph-1b.c: Ditto.
	* gcc.target/i386/avx512fp16vl-vsubph-1b.c: Ditto.
	* gcc.target/i386/readeflags-1.c: Include stdio.h when DEBUG
	is defined.
	* gcc.target/i386/rtm-check.h: Ditto.
	* gcc.target/i386/sha-check.h: Ditto.
	* gcc.target/i386/writeeflags-1.c: Ditto.
2024-01-25 10:27:20 +08:00
Andrew Pinski
ba2c1a45dd Fix check_effective_target_vect_long_mult
My last commit I tested on aarch64 but vect_long_mult was not actually invoked
and I didn't notice that I was missing a `[` in front of check_effective_target_aarch64_sve.
When I ran the testsuite on x86_64, I got the failure.

Committed as obvious after testing on x86_64.

gcc/testsuite/ChangeLog:

	* lib/target-supports.exp (check_effective_target_vect_long_mult): Fix
	small typo for aarch64*-*-*.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-01-24 16:39:43 -08:00
Palmer Dabbelt
0d1b0f2ad3
RISC-V: Don't make Ztso imply A
I can't actually find anything in the ISA manual that makes Ztso imply
A.  In theory the memory ordering is just a different thing that the set
of availiable instructions (ie, Ztso without A would still imply TSO for
loads and stores).  It also seems like a configuration that could be
sane to build: without A it's all but impossible to write any meaningful
multi-core code, and TSO is really cheap for a single core.

That said, I think it's kind of reasonable to provide A to users asking
for Ztso.  So maybe even if this was a mistake it's the right thing to
do?

gcc/ChangeLog:

	* common/config/riscv/riscv-common.cc (riscv_implied_info):
	Remove {"ztso", "a"}.
2024-01-24 16:37:15 -08:00