Commit graph

206631 commits

Author SHA1 Message Date
Vasiliy Fofanov
e691cda519 ada: Optimize performance and remove dynamic frame requirement.
gcc/ada/

	* libgnat/i-cstrin.adb (Value): Optimize.
2023-12-19 15:27:49 +01:00
Piotr Trojanek
9bbd4af053 ada: Ignore unconstrained components as inputs for Depends
The current wording of SPARK RM 6.1.5(5) about the inputs for the
Depends contract doesn't mention "a record with at least one
unconstrained component".

gcc/ada/

	* sem_prag.adb (Is_Unconstrained_Or_Tagged_Item): Update comment
	and body.
2023-12-19 15:27:49 +01:00
Eric Botcazou
80a63cc744 ada: Rename Is_Constr_Subt_For_UN_Aliased flag
The flag is set on the constructed subtype of an object with unconstrained
nominal subtype that is aliased and is used by the code generator to adjust
the layout of the object.

But it is actually only used for array subtypes, where it determines whether
the object is allocated with its bounds, and this usage could be extended to
other cases than the original case.

gcc/ada/

	* einfo.ads (Is_Constr_Subt_For_UN_Aliased): Rename into...
	(Is_Constr_Array_Subt_With_Bounds): ...this.
	* exp_ch3.adb (Expand_N_Object_Declaration): Adjust to above
	renaming and remove now redundant test.
	* sem_ch3.adb (Analyze_Object_Declaration): Likewise, but set
	Is_Constr_Array_Subt_With_Bounds only on arrays.
	* gen_il-fields.ads (Opt_Field_Enum): Apply same renaming.
	* gen_il-gen-gen_entities.adb (Entity_Kind): Likewise.
	* gen_il-internals.adb (Image): Remove specific processing for
	Is_Constr_Subt_For_UN_Aliased.
	* treepr.adb (Image): Likewise.
	* gcc-interface/decl.cc (gnat_to_gnu_entity): Adjust to renaming
	and remove now redundant tests.
	* gcc-interface/trans.cc (Identifier_to_gnu): Likewise.
	(Call_to_gnu): Likewise.
2023-12-19 15:27:49 +01:00
Johannes Kliemann
35ef3e08ec ada: Remove No_Dynamic_Priorities from Restricted_Tasking
Some of our restricted runtimes support dynamic priorities. The binder
needs to generate code for a restricted runtime even if the restriction
No_Dynamic_Priorities is not in place.

gcc/ada/

	* libgnat/s-rident.ads: Remove No_Dynamic_Priorities from
	Restricted_Tasking.
2023-12-19 15:27:49 +01:00
Patrick Bernardi
15626fb116 ada: Adapt Ada.Command_Line to work on configurable runtimes
The behaviour of the binder when handling command line arguments and exit
codes is simplified so that references to the corresponding runtime symbols
are always generated when the runtime is configured with command line
argument and exit code support. This allows Ada.Command_Line to work with
all runtimes, which was not the case previously.

As a result of this change, configurable runtimes that do not include
Ada.Command_Line and it support files, but are configured with
Command_Line_Args and/or Exit_Status_Supported set to True will need to
provide the symbols required by the binder, as these symbols will no longer
be defined in the binder generated file.

argv.c includes a small change to exclude adaint.h when compiling for a
light runtime, since this header is not required.

gcc/ada/

	* argv.c: Do not include adaint.h if LIGHT_RUNTIME is defined.
	* bindgen.adb (Gen_Main): Simplify command line argument and exit
	handling by requiring the runtime to always provide the required
	symbols if command line argument and exit code is enabled.
	* targparm.ads: Update comments to reflect changes to gnatbind.
2023-12-19 15:27:49 +01:00
Ronan Desplanques
346e4645eb ada: Fix crash on concurrent type aggregate
Before this patch, the compiler would fail to examine the corresponding
record types of concurrent types when building aggregate components.
This patch fixes this, and adds a precondition and additional documentation
on the subprogram that triggered the crash, as it never makes sense
to call it with a concurrent type.

gcc/ada/

	* exp_aggr.adb (Initialize_Component): Use corresponding record
	types of concurrent types.
	* exp_util.ads (Make_Tag_Assignment_From_Type): Add precondition
	and extend documentation.

Co-authored-by: Javier Miranda <miranda@adacore.com>
2023-12-19 15:27:49 +01:00
Eric Botcazou
6b92b664aa ada: Further cleanup in finalization machinery
This removes the setting of the Is_Ignored_Transient flag on the temporaries
needing finalization created by Expand_Ctrl_Function_Call when invoked from
within the dependent expressions of conditional expressions.

This flag tells the general finalization machinery to disregard the object.
But temporaries needing finalization present in action lists of dependent
expressions are picked up by Process_Transients_In_Expression, which deals
with their finalization and sets the Is_Finalized_Transient flag on them.

Now this latter flag has exactly the same effect as Is_Ignored_Transient
as far as the general finalization machinery is concerned, so setting the
flag is unnecessary.  In the end, the flag can be decoupled entirely from
transient objects and renamed into Is_Ignored_For_Finalization.

This also moves around the declaration of a local variable and turns a
library-level procedure into a nested procedure.

gcc/ada/

	* einfo.ads (Is_Ignored_Transient): Rename into...
	(Is_Ignored_For_Finalization): ...this.
	* gen_il-fields.ads (Opt_Field_Enum): Adjust to above renaming.
	* gen_il-gen-gen_entities.adb (Object_Kind): Likewise.
	* exp_aggr.adb (Expand_Array_Aggregate): Likewise.
	* exp_ch7.adb (Build_Finalizer.Process_Declarations): Likewise.
	* exp_util.adb (Requires_Cleanup_Actions): Likewise.
	* exp_ch4.adb (Expand_N_If_Expression): Move down declaration of
	variable Optimize_Return_Stmt.
	(Process_Transient_In_Expression): Turn procedure into a child of...
	(Process_Transients_In_Expression): ...this procedure.
	* exp_ch6.adb (Expand_Ctrl_Function_Call): Remove obsolete setting
	of Is_Ignored_Transient flag on the temporary if within a dependent
	expression of a conditional expression.
2023-12-19 15:27:48 +01:00
Yannick Moy
c3d97f236e ada: Fix SPARK expansion of container aggregates
GNATprove supports container aggregates, except for indexed aggregates.
It needs all expressions to have suitable target types and Do_Range_Check
flags, which are added by the special expansion for GNATprove.

There is no impact on code generation.

gcc/ada/

	* exp_spark.adb (Expand_SPARK_N_Aggregate): New procedure for the
	special expansion.
	(Expand_SPARK): Call the new expansion procedure.
	* sem_util.adb (Is_Container_Aggregate): Implement missing test.
2023-12-19 15:27:48 +01:00
Eric Botcazou
40cf86ef4a ada: Add missing guard to previous change
Ancestor_Type is overloaded with Aggregate_Bounds on N_Aggregate nodes
so its access needs to be guarded in Copy_Generic_Node.

gcc/ada/

	* sem_ch12.adb (Copy_Generic_Node): Add guard for Ancestor_Type.
2023-12-19 15:27:48 +01:00
Eric Botcazou
cdd8f4b3f2 ada: Fix spurious visibility error on parent's component in instance
This occurs for an aggregate of a derived tagged type in the body of the
instance, because the full view of the parent type, which was visible in
the generic construct (otherwise the aggregate would have been illegal),
is not restored in the body of the instance.

Copy_Generic_Node already contains code to restore the full view in this
case, but it works only if the derived tagged type is itself global to
the generic construct, and not if the derived tagged type is local but
the parent type global, as is the case here.

gcc/ada/

	* gen_il-fields.ads (Aggregate_Bounds): Rename to
	Aggregate_Bounds_Or_Ancestor_Type.
	* gen_il-gen-gen_nodes.adb (Aggregate_Bounds): Likewise.
	* sem_aggr.adb (Resolve_Record_Aggregate): Remove obsolete bypass.
	* sem_ch12.adb (Check_Generic_Actuals): Add decoration.
	(Copy_Generic_Node): For an extension aggregate, restore only the
	full view, if any.  For a full aggregate, restore the full view as
	well as that of its Ancestor_Type, if any, and up to the root type.
	(Save_References_In_Aggregate): For a full aggregate of a local
	derived tagged type with a global ancestor, set Ancestor_Type to
	this ancestor.  For a full aggregate of a global derived tagged
	type, set Ancestor_Type to the parent type.
	* sinfo-utils.ads (Aggregate_Bounds): New function renaming.
	(Ancestor_Type): Likewise.
	(Set_Aggregate_Bounds): New procedure renaming.
	(Set_Ancestor_Type): Likewise.
	* sinfo.ads (Ancestor_Type): Document new field.
2023-12-19 15:27:48 +01:00
Eric Botcazou
64a485df89 ada: Plug small loophole in finalization machinery
The path in Expand_N_If_Expression implementing the special optimization for
an unidimensional array type and dependent expressions with static bounds
fails to call Process_Transients_In_Expression on their list of actions.

gcc/ada/

	* exp_ch4.adb (Expand_N_If_Expression): Also add missing calls to
	Process_Transients_In_Expression on the code path implementing the
	special optimization for an unidimensional array type and
	dependent expressions with static bounds.
2023-12-19 15:27:48 +01:00
Steve Baird
5c374c0907 ada: Cope with Sem_Util.Enclosing_Declaration oddness.
Sem_Util.Enclosing_Declaration can return a non-empty result which is not
a declaration; clients may need to compensate for the case where an
N_Subprogram_Specification node is returned. One such client is the function
Is_Actual_Subp_Of_Inst.

gcc/ada/

	* sem_ch8.adb (Is_Actual_Subp_Of_Inst): After calling
	Enclosing_Declaration, add a check for the case where one more
	Parent call is needed to get the enclosing declaration.
2023-12-19 15:27:48 +01:00
Ronan Desplanques
95a7771da2 ada: Restore object constraint optimization
This patch relaxes the requirement that discriminants values should be
known at compile time for a particular optimization to be applied. That
optimization is the one that treats an unconstrained object as constrained
when the object is of a limited type, in order to reduce the size of the
object.

What makes it possible to relax this requirement is that the set of
cases where the optimization is applied was narrowed in a previous
patch.

gcc/ada/

	* sem_util.adb (Build_Default_Subtype_OK): Relax
	known-at-compile-time requirement.
	* sem_util.ads (Build_Default_Subtype_OK): Bring documentation
	comment up-to-date.
2023-12-19 15:27:48 +01:00
Yannick Moy
1acce1417b ada: Do not issue SPARK legality error if SPARK_Mode ignored
When pragma Ignore_Pragma(SPARK_Mode) is used, do not issue error
messages related to SPARK legality checking. This facilitates the
instrumentation of code by GNATcoverage.

gcc/ada/

	* doc/gnat_rm/implementation_defined_pragmas.rst: Fix doc for
	pragma Ignore_Pragma, in the case where it follows another
	configuration pragma that it names, which causes the preceding
	pragma to be ignored after parsing.
	* errout.adb (Should_Ignore_Pragma_SPARK_Mode): New query.
	(SPARK_Msg_N): Do nothing if SPARK_Mode is ignored.
	(SPARK_Msg_NE): Same.
	* gnat-style.texi: Regenerate.
	* gnat_rm.texi: Regenerate.
	* gnat_ugn.texi: Regenerate.
2023-12-19 15:27:48 +01:00
Yannick Moy
da5dca1d36 ada: Cleanup SPARK legality checking
Move one SPARK legality check from GNAT to GNATprove, and cleanup
other uses of SPARK_Mode for legality checking.

gcc/ada/

	* sem_ch4.adb (Analyze_Selected_Component): Check correct mode
	variable for GNATprove.
	* sem_prag.adb (Refined_State): Call SPARK_Msg_NE which checks
	value of SPARK_Mode before issuing a message.
	* sem_res.adb (Resolve_Entity_Name): Remove legality check for
	SPARK RM 6.1.9(1), moved to GNATprove.
2023-12-19 15:27:47 +01:00
Steve Baird
27fd2dc518 ada: Illegal instance of Generic_1.Generic_2 incorrectly accepted
If G1 is a generic package and G1.G2 is a child unit (also a generic package)
then it would be illegal if some third generic unit (declared outside of G1)
takes a formal instance of G1.G2, as in "with package I2 is new G1.G2;".
This construct was incorrectly accepted in some cases.

gcc/ada/

	* sem_ch12.adb (Check_Generic_Child_Unit): Introduce a new nested
	function Adjusted_Inst_Par_Ekind to cope with cases where either
	a- the visibility of a compiler-generated renaming is incorrect;
	or b- we are inside of a generic parent unit G1 that has a child
	unit G1.G2, so instantiation of G1.G2 is permitted.
2023-12-19 15:27:47 +01:00
Eric Botcazou
54d049b281 ada: Further cleanup in finalization machinery
This streamlines the submachinery that makes it so that the finalization of
temporaries created for EWAs and conditional expressions is deferred to the
enclosing context.

The original implementation was using a deep tree traversal for EWAs, which
was later restricted to immediate subexpressions; this further flattens it
to the traversal of the immediate list of actions of the EWA in keeping with
the implementation for conditional expressions.

This should not change anything because the enclosing context found by the
machinery is the same, whatever the starting position in a nest of EWAs or
conditional expressions.

gcc/ada/

	* exp_ch4.adb (Process_If_Case_Statements): Rename into...
	(Process_Transients_In_Expression): ...this and beef up comment.
	(Expand_N_Case_Expression): Call Process_Transients_In_Expression
	unconditionally on the list of actions of each alternative.
	(Expand_N_Expression_With_Actions): Do not deal with actions in
	nested subexpressions, but call Process_Transients_In_Expression
	on the list of actions only.
	(Expand_N_If_Expression): Adjust to above renaming.  Add missing
	calls to Process_Transients_In_Expression in the case when an EWA
	is not used because of Minimize_Expression_With_Actions.
2023-12-19 15:27:47 +01:00
Juzhe-Zhong
71bc7c6fa1 RISC-V: Fix FAIL of bb-slp-cond-1.c for RVV
Due to recent VLSmode changes (Change for fixing ICE and run-time FAIL).

The dump check is same as ARM SVE now. So adapt test for RISC-V.

gcc/testsuite/ChangeLog:

	* gcc.dg/vect/bb-slp-cond-1.c: Adapt for RISC-V.
2023-12-19 21:14:22 +08:00
Richard Biener
afd49e6632 tree-optimization/113080 - missing final value replacement
When performing final value replacement we guard against exponential
(temporary) code growth due to unsharing of trees (SCEV heavily
relies on tree sharing).  The following relaxes this a tiny bit
to cover some more optimizations and puts in comments as to what
the real fix would be.

	PR tree-optimization/113080
	* tree-scalar-evolution.cc (expression_expensive_p): Allow
	a tiny bit of growth due to expansion of shared trees.
	(final_value_replacement_loop): Add comment.

	* gcc.dg/tree-ssa/sccp-3.c: New testcase.
2023-12-19 13:31:30 +01:00
Richard Biener
aa2a48984c tree-optimization/113073 - amend PR112736 fix
The PR112736 testcase fails on RISC-V because the aligned exception
uses the wrong check.  The alignment support scheme can be
dr_aligned even when the access isn't aligned to the vector size
but some targets are happy with element alignment.  The following
fixes that.

	PR tree-optimization/113073
	* tree-vect-stmts.cc (vectorizable_load): Properly ensure
	to exempt only vector-size aligned overreads.
2023-12-19 13:31:30 +01:00
Roger Sayle
7e1c440bc8 i386: Improved TImode (128-bit) integer constants on x86_64.
This patch fixes two issues with the handling of 128-bit TImode integer
constants in the x86_64 backend.  The main issue is that GCC always
tries to load 128-bit integer constants via broadcasts to vector SSE
registers, even if the result is required in general registers.  This
is seen in the two closely related functions below:

__int128 m;
void foo() { m &= CONST; }
void bar() { m = CONST; }

When compiled with -O2 -mavx, we currently generate:

foo:	movabsq $81985529216486895, %rax
        vmovq   %rax, %xmm0
        vpunpcklqdq     %xmm0, %xmm0, %xmm0
        vmovq   %xmm0, %rax
        vpextrq $1, %xmm0, %rdx
        andq    %rax, m(%rip)
        andq    %rdx, m+8(%rip)
        ret

bar:	movabsq $81985529216486895, %rax
        vmovq   %rax, %xmm1
        vpunpcklqdq     %xmm1, %xmm1, %xmm0
        vpextrq $1, %xmm0, %rdx
        vmovq   %xmm0, m(%rip)
        movq    %rdx, m+8(%rip)
        ret

With this patch we defer the decision to use vector broadcast for
TImode until we know that we actually want a SSE register result,
by moving the call to ix86_convert_const_wide_int_to_broadcast from
the RTL expansion pass, to the scalar-to-vector (STV) pass.  With
this change (and a minor tweak described below) we now generate:

foo:	movabsq $81985529216486895, %rax
        andq    %rax, m(%rip)
        andq    %rax, m+8(%rip)
        ret

bar:	movabsq $81985529216486895, %rax
        vmovq   %rax, %xmm0
        vpunpcklqdq     %xmm0, %xmm0, %xmm0
        vmovdqa %xmm0, m(%rip)
        ret

showing that we now correctly use vector mode broadcasts (only)
where appropriate.

The one minor tweak mentioned above is to enable the un-cprop hi/lo
optimization, that I originally contributed back in September 2004
https://gcc.gnu.org/pipermail/gcc-patches/2004-September/148756.html
even when not optimizing for size.  Without this (and currently with
just -O2) the function foo above generates:

foo:    movabsq $81985529216486895, %rax
	movabsq $81985529216486895, %rdx
        andq    %rax, m(%rip)
        andq    %rdx, m+8(%rip)
        ret

I'm not sure why (back in 2004) I thought that avoiding the implicit
"movq %rax, %rdx" instead of a second load was faster, perhaps avoiding
a dependency to allow better scheduling, but nowadays "movq %rax, %rdx"
is either eliminated by GCC's hardreg cprop pass, or special cased by
modern hardware, making the first foo preferrable, not only shorter but
also faster.

2023-12-19  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
	* config/i386/i386-expand.cc
	(ix86_convert_const_wide_int_to_broadcast): Remove static.
	(ix86_expand_move): Don't attempt to convert wide constants
	to SSE using ix86_convert_const_wide_int_to_broadcast here.
	(ix86_split_long_move): Always un-cprop multi-word constants.
	* config/i386/i386-expand.h
	(ix86_convert_const_wide_int_to_broadcast): Prototype here.
	* config/i386/i386-features.cc: Include i386-expand.h.
	(timode_scalar_chain::convert_insn): When converting TImode to
	V1TImode, try ix86_convert_const_wide_int_to_broadcast.

gcc/testsuite/ChangeLog
	* gcc.target/i386/movti-2.c: New test case.
	* gcc.target/i386/movti-3.c: Likewise.
2023-12-19 11:24:36 +00:00
Thomas Schwinge
cf840a7f7c Unify OpenACC/C and C++ behavior re duplicate OpenACC 'declare' directives for 'extern' variables [PR90868]
This likely still isn't what OpenACC actually intends (addressing that is for
another day), but at least we now misbehave consistently for C and C++.

	PR c++/90868
	gcc/cp/
	* parser.cc (cp_parser_oacc_declare): For "more than once", check
	the DECL that we're actually setting the attribute on.
	gcc/testsuite/
	* c-c++-common/goacc/declare-1.c: Adjust.
	* c-c++-common/goacc/declare-2.c: Likewise.
2023-12-19 12:15:17 +01:00
Juzhe-Zhong
1555a5e24c RISC-V: Refine some codes of expand_const_vector [NFC]
gcc/ChangeLog:

	* config/riscv/riscv-v.cc (expand_const_vector): Use builder.inner_mode ().
2023-12-19 19:11:31 +08:00
Jakub Jelinek
80e1375ed7 i386: Fix mmx.md signbit expanders [PR112816]
Apparently when looking for "signbit<mode>2" vector expanders, I've only
looked at sse.md and forgot mmx.md, which has two further ones and the
following patch still ICEd.

2023-12-19  Jakub Jelinek  <jakub@redhat.com>

	PR target/112816
	* config/i386/mmx.md (signbitv2sf2, signbit<mode>2): Force operands[1]
	into a REG.

	* gcc.target/i386/sse2-pr112816-2.c: New test.
2023-12-19 10:24:33 +01:00
Alex Coplan
2cd5548085 aarch64: Fix parens in aarch64_stp_reg_operand [PR113061]
In r14-6603-gfcdd2757c76bf925115b8e1ba4318d6366dd6f09 I messed up the
parentheses in aarch64_stp_reg_operand, the indentation shows the intended
nesting of the conditions.  This patch fixes that.

This fixes PR113061 which shows IRA substituting (const_int 1) into a
writeback stp pattern as a result (and LRA failing to reload the
constant).

gcc/ChangeLog:

	PR target/113061
	* config/aarch64/predicates.md (aarch64_stp_reg_operand): Fix
	parentheses to match intent.

gcc/testsuite/ChangeLog:

	PR target/113061
	* gfortran.dg/PR113061.f90: New test.
2023-12-19 09:22:20 +00:00
Juzhe-Zhong
a0cc5eb21d RISC-V: Force scalable vector on all vsetvl tests
Since when VLEN = 128bits and FIXED-VLMAX, vsetvli a5,zero will be optimized
into vsetivli zero, 16 for SEW = 16.
Such situation will cause many bogus FAILs in FIXED-VLMAX of full coverage
testing.

Force them all scalable vectors to supress those bogus FAILs.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/vsetvl/avl_multiple-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-10.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-11.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-12.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-13.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-14.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-15.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-16.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-4.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-5.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-6.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-7.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-8.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_multiple-9.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_prop-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_prop-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-10.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-100.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-101.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-102.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-103.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-104.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-105.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-106.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-107.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-108.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-109.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-11.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-12.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-13.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-14.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-15.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-16.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-17.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-18.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-19.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-20.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-21.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-22.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-23.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-24.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-25.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-26.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-27.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-28.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-29.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-30.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-31.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-32.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-33.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-34.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-35.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-36.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-37.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-38.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-39.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-4.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-40.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-41.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-42.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-43.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-44.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-45.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-46.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-47.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-48.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-49.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-5.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-50.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-51.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-52.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-53.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-54.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-55.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-56.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-57.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-58.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-59.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-6.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-60.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-61.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-62.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-63.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-64.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-65.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-66.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-67.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-68.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-69.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-7.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-70.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-71.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-72.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-73.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-74.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-75.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-76.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-77.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-78.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-79.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-8.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-80.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-81.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-82.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-83.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-84.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-85.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-86.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-87.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-88.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-89.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-9.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-90.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-91.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-92.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-93.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-94.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-95.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-96.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-97.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-98.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/avl_single-99.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/dump-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/ffload-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/ffload-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/ffload-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/ffload-5.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/ffload-6.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/ffload-7.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_bb_prop-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_bb_prop-10.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_bb_prop-11.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_bb_prop-12.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_bb_prop-13.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_bb_prop-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_bb_prop-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_bb_prop-4.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_bb_prop-5.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_bb_prop-6.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_bb_prop-7.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_bb_prop-8.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_bb_prop-9.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_conflict-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_conflict-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_conflict-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_conflict-4.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_conflict-5.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-10.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-11.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-12.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-13.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-14.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-15.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-16.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-17.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-4.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-5.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-6.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-7.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-8.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-9.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_switch-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_switch-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_switch-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_switch-4.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_switch-5.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_switch-6.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_switch-7.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_switch-8.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/imm_switch-9.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr108270.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr109399.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr109547.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr109615.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr109743-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr109743-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr109743-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr109743-4.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr109748.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr109773-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr109773-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr109974.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr111037-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr111037-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr111037-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr111037-4.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr111234.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr111255.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr111927.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr111947.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr112092-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr112092-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr112713-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr112713-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr112776.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr112813-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr112929-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/pr112988-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-10.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-11.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-12.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-13.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-14.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-15.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-16.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-17.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-18.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-19.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-20.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-21.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-22.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-23.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-24.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-25.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-26.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-27.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-28.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-29.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-30.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-31.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-32.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-33.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-34.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-35.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-36.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-37.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-38.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-39.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-4.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-40.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-41.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-42.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-43.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-44.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-45.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-46.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-5.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-6.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-7.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-8.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-9.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-10.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-11.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-12.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-13.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-14.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-15.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-16.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-17.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-18.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-19.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-20.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-21.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-22.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-23.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-24.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-25.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-26.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-27.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-28.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-4.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-5.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-6.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-7.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-8.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-9.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_call-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_call-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_call-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_call-4.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_complex_loop-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_complex_loop-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-10.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-11.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-12.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-13.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-4.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-5.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-6.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-7.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-8.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-9.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-10.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-11.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-12.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-13.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-14.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-15.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-16.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-17.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-18.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-19.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-20.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-21.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-22.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-23.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-24.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-25.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-26.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-27.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-28.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-4.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-5.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-6.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-7.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-8.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-9.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-10.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-11.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-12.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-13.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-14.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-15.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-16.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-17.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-18.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-19.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-20.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-21.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-22.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-23.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-24.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-25.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-26.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-27.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-28.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-4.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-5.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-6.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-7.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-8.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_phi-9.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-10.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-11.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-12.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-13.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-14.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-15.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-16.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-17.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-18.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-19.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-4.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-5.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-6.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-7.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-8.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_block-9.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-4.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-5.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-6.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-7.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-8.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-11.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-12.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-13.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-14.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-15.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-16.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-4.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-5.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-6.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-7.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-8.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-9.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-10.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-11.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-12.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-13.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-14.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-15.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-16.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-17.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-18.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-19.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-20.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-21.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-22.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-23.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-24.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-4.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-5.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-6.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-7.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-8.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl-9.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl_bug-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl_bug-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvl_int.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-1.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-10.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-11.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-12.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-13.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-14.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-15.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-16.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-17.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-18.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-19.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-2.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-20.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-3.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-4.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-5.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-6.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-7.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-8.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/vsetvlmax-9.c: Force scalable vector.
	* gcc.target/riscv/rvv/vsetvl/wredsum_vlmax.c: Force scalable vector.
2023-12-19 16:45:55 +08:00
Juzhe-Zhong
746e7b214d RISC-V: Fix FAIL of dynamic-lmul2-7.c
Fix this FAIL:
FAIL: gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-7.c scan-tree-dump-times vect "Maximum lmul = 2" 1

gcc/testsuite/ChangeLog:

	* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-7.c: Adapt test.
2023-12-19 14:07:39 +08:00
xuli
b61e849bd3 testsuite: Fix dump checks under different riscv-sim for RVV.
gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/cpymem-1.c: Fix checks under medany.
	* gcc.target/riscv/rvv/base/cpymem-strategy-3.c: Fix checks.
	* gcc.target/riscv/rvv/base/cpymem-strategy-4.c: Ditto.
2023-12-19 05:26:09 +00:00
Jiufu Guo
4759383245 treat argp-based mem as frame related in dse
The issue mentioned in PR112525 would be able to be handled by
updating dse.cc to treat arg_pointer_rtx similarly with frame_pointer_rtx.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=30271#c10 also mentioned
this idea.

And arpg area may be used to pass argument to callee. So, it would
be needed to check if call insns are using that mem.

	PR rtl-optimization/112525
	PR target/30271

gcc/ChangeLog:

	* dse.cc (get_group_info): Add arg_pointer_rtx as frame_related.
	(check_mem_read_rtx): Add parameter to indicate if it is checking mem
	for call insn.
	(scan_insn): Add mem checking on call usage.

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/pr112525.c: New test.
	* gcc.target/powerpc/pr30271.c: New test.
2023-12-19 13:18:40 +08:00
Juzhe-Zhong
caa2d2a588 RISC-V: Remove 256/512/1024 VLS vectors
Since https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=2e7abd09621a4401d44f4513adf126bce4b4828b
we only allow VLSmodes with size <= TARGET_MIN_VLEN * TARGET_MAX_LMUL.

So when -march=rv64gcv default LMUL = 1, we don't have VLS modes of 256/512/1024 vectors.

Disable them in vect test which fixes the following FAILs in the regression:

FAIL: gcc.dg/vect/bb-slp-pr65935.c -flto -ffat-lto-objects  scan-tree-dump-times slp1 "optimized: basic block" 11
FAIL: gcc.dg/vect/bb-slp-pr65935.c scan-tree-dump-times slp1 "optimized: basic block" 11
FAIL: gcc.dg/vect/bb-slp-subgroups-2.c -flto -ffat-lto-objects  scan-tree-dump-times slp2 "optimized: basic block" 1
FAIL: gcc.dg/vect/bb-slp-subgroups-2.c scan-tree-dump-times slp2 "optimized: basic block" 1

gcc/testsuite/ChangeLog:

	* lib/target-supports.exp: Remove 256/512/1024 vectors.
2023-12-19 12:30:02 +08:00
xuli
605d21f8ef testsuite: Fix cpymem-2.c dump checks under different riscv-sim for RVV.
gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/cpymem-2.c: Fix checks.
2023-12-19 01:46:31 +00:00
Ian Lance Taylor
c20328e7ca compiler: move lowering pass after check types pass
This change moves the lowering pass after the type determination and
the type checking passes.  This lets us simplify some of the code that
determines the type of an expression, which previously had to work
correctly both before and after type determination.

I'm doing this to help with future generic support.  For example, with
generics, we can see code like

    func ident[T any](v T) T { return v }

    func F() int32 {
	s := int32(1)
	return ident(s)
    }

Before this change, we would type check return statements in the
lowering pass (see Return_statement::do_lower).  With a generic
example like the above, that means we have to determine the type of s,
and use that to infer the type arguments passed to ident, and use that
to determine the result type of ident.  That is too much to do at
lowering time.  Of course we can change the way that return statements
work, but similar issues arise with index expressions, the types of
closures for function literals, and probably other cases as well.

Rather than try to deal with all those cases, we move the lowering
pass after type checking.  This requires a bunch of changes, notably
for determining constant types.  We have to add type checking for
various constructs that formerly disappeared in the lowering pass.
So it's a lot of shuffling.  Sorry for the size of the patch.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/536643
2023-12-18 17:30:56 -08:00
Feng Wang
15cb5204e4 RISC-V: Add required_extensions in function_group
In order to add other vector related extensions in the future, this
patch add one more parameter in the function_group_info, it will be
used to determine whether intrinsic registration processing is required.

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-functions.def (REQUIRED_EXTENSIONS):
					Add new macro for match function.
	* config/riscv/riscv-vector-builtins.cc (DEF_RVV_FUNCTION):
					Add one more parameter for macro expanding.
	(handle_pragma_vector): Add match function calls.
	* config/riscv/riscv-vector-builtins.h (enum required_ext):
				Add enum defination for required extension.
	(struct function_group_info): Add one more parameter for checking required-ext.
2023-12-19 01:21:40 +00:00
GCC Administrator
08c5d26afa Daily bump. 2023-12-19 00:17:36 +00:00
Patrick Palka
4f54e65678 libstdc++: Make ranges::to closure objects SFINAE-friendly [PR112802]
This also happens to fix composition of these closure objects.

	PR libstdc++/112802
	PR libstdc++/113068

libstdc++-v3/ChangeLog:

	* include/std/ranges (__detail::_To::operator()): Add constraints.
	(__detail::_To2::operator()): Likewise.
	* testsuite/std/ranges/conv/1.cc (test_sfinae): New test.
	(test_composition): New test.
2023-12-18 18:05:36 -05:00
Vladimir N. Makarov
989e67f827 [PR112918][LRA]: Fixing IRA ICE on m68k
Some GCC tests on m68K port of LRA is failed on `maximum number of
generated reload insns per insn achieved`.  The problem is in that for
subreg reload LRA can not narrow reg class more from ALL_REGS to
GENERAL_REGS and then to data regs or address regs.  The patch permits
narowing reg class from reload insns if this results in succesful
matching of reg operand.

gcc/ChangeLog:

	PR rtl-optimization/112918
	* lra-constraints.cc (SMALL_REGISTER_CLASS_P): Move before in_class_p.
	(in_class_p): Restrict condition for narrowing class in case of
	allow_all_reload_class_changes_p.
	(process_alt_operands): Pass true for
	allow_all_reload_class_changes_p in calls of in_class_p.
	(curr_insn_transform): Ditto for reg operand win.
2023-12-18 17:14:50 -05:00
Uros Bizjak
86b6daefc8 i386: Eliminate redundant compare between set{z,nz} and j{z,nz}
Eliminate redundant compare between set{z,nz} and j{z,nz}:
setz %al; test %al,%al; jz <...> -> setz %al; jnz <...> and
setnz %al, test %al,%al; jz <...> -> setnz %al; jz <...>.

We can use the original Zero-flag value instead of setting the
temporary register and testing it for zero.

gcc/ChangeLog:

	* config/i386/i386.md (redundant compare peephole2):
	New peephole2 pattern.
2023-12-18 22:18:56 +01:00
Harald Anlauf
b77691a90f Fortran: update DATE_AND_TIME intrinsic for Fortran 2018 [PR96580]
Fortran 2018 allows a non-default integer kind for its VALUES argument if
it has a decimal exponent range of at least four.  Update checks, library
implementation and documentation.

gcc/fortran/ChangeLog:

	PR fortran/96580
	* check.cc (array_size_check): New helper function.
	(gfc_check_date_and_time): Use it for checking minimum size of
	VALUES argument.  Update kind check to Fortran 2018.
	* intrinsic.texi: Fix documentation of DATE_AND_TIME.

libgfortran/ChangeLog:

	PR fortran/96580
	* intrinsics/date_and_time.c (date_and_time): Handle VALUES argument
	for kind=2 and kind=16 (if available).

gcc/testsuite/ChangeLog:

	PR fortran/96580
	* gfortran.dg/date_and_time_2.f90: New test.
	* gfortran.dg/date_and_time_3.f90: New test.
	* gfortran.dg/date_and_time_4.f90: New test.
2023-12-18 20:32:52 +01:00
Andreas Krebbel
f85fdf59c9 IBM Z: Cover weak symbols with -munaligned-symbols
With the recently introduced -munaligned-symbols option byte-sized
variables which are resolved externally are considered to be
potentially misaligned.
However, this should rather also be applied to symbols which resolve
locally if they are weak. Done with this patch.

gcc/ChangeLog:

	* config/s390/s390.cc (s390_encode_section_info): Replace
	SYMBOL_REF_LOCAL_P with decl_binds_to_current_def_p.

gcc/testsuite/ChangeLog:

	* gcc.target/s390/unaligned-2.c: New test.
2023-12-18 19:42:37 +01:00
Andrew Pinski
4554a151d0 SCCP: Fix ODR issues when compiling with LTO [PR 113054}
The problem here is that in C++ structs and classes have a
linkage too so the type vertex is not considered local to
the TU but will conflict with the globally defined one
in graphds.h.  The simple way to fix this is to wrap the ones
defined locally in gimple-ssa-sccopy.cc inside an anonymous namespace
and they are now considered locally to that TU.

Committed as obvious after a bootstrap/test on x86_64.

gcc/ChangeLog:

	PR tree-optimization/113054
	* gimple-ssa-sccopy.cc: Wrap the local types
	with an anonymous namespace.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2023-12-18 08:35:48 -08:00
Richard Biener
88a398a487 middle-end/111975 - dump -> GIMPLE FE roundtrip improvements
The following improves the manual work needed to make a -gimple dump
valid input to the GIMPLE FE.  First of all it recognizes the 'sizetype'
tree and dumps it as __SIZETYPE__, then it changes dumping vector types
without name from 'vector(n) T' to 'T [[gnu::vector_size(n')]]' which
we can parse in most relevant contexts (and that's shorter than
using __attribute__).  Third it avoids a NULL_TREE TMR_STEP when
it would be one, an optimization that's re-done when generating RTL.

	PR middle-end/111975
	* tree-pretty-print.cc (dump_generic_node): Dump
	sizetype as __SIZETYPE__ with TDF_GIMPLE.
	Dump unnamed vector types as T [[gnu::vector_size(n)]] with
	TDF_GIMPLE.
	* tree-ssa-address.cc (create_mem_ref_raw): Never generate
	a NULL STEP when INDEX is specified.
2023-12-18 15:25:50 +01:00
Pan Li
ac9c81dd76 RISC-V: Rename the rvv test case.
As title.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/pr112432-42.c: Moved to...
	* gcc.target/riscv/rvv/base/pr112431-42.c: ...here.

Signed-off-by: Pan Li <pan2.li@intel.com>
2023-12-18 21:41:16 +08:00
Gerald Pfeifer
04538248c3 install: Drop hppa*-hp-hpux10, remove old notes on hppa*-hp-hpux11
gcc:
	PR target/69374
	* doc/install.texi (Specific) <hppa*-hp-hpux10>: Remove section.
	(Specific) <hppa*-hp-hpux11>: Remove references to GCC 2.95 and
	3.0. Also libffi has been ported now.
2023-12-18 21:39:22 +08:00
Juzhe-Zhong
b3b2799b87 RISC-V: Support one more overlap for wv instructions
For 'wv' instructions, e.g. vwadd.wv vd,vs2,vs1.

vs2 has same EEW as vd.
vs1 has smaller than vd.

So, vs2 can overlap with vd, but vs1 can only overlap highest-number of vd
when LMUL of vs1 is greater than 1.

We already have supported overlap for vs1 LMUL >= 1.
But I forget vs1 LMUL < 1, vs2 can overlap vd even though vs1 totally can not overlap vd.

Consider the reduction auto-vectorization:

int64_t
reduc_plus_int (int *__restrict a, int n)
{
  int64_t r = 0;
  for (int i = 0; i < n; ++i)
    r += a[i];
  return r;
}

When we use --param=riscv-autovec-lmul=m2, the codegen is good to us because we already supported
overlap for source EEW32 LMUL1 -> dest EEW64 LMUL2.

--param=riscv-autovec-lmul=m2:

reduc_plus_int:
        ble     a1,zero,.L4
        vsetvli a5,zero,e64,m2,ta,ma
        vmv.v.i v2,0
.L3:
        vsetvli a5,a1,e32,m1,tu,ma
        slli    a4,a5,2
        sub     a1,a1,a5
        vle32.v v1,0(a0)
        add     a0,a0,a4
        vwadd.wv        v2,v2,v1
        bne     a1,zero,.L3
        li      a5,0
        vsetivli        zero,1,e64,m1,ta,ma
        vmv.s.x v1,a5
        vsetvli a5,zero,e64,m2,ta,ma
        vredsum.vs      v2,v2,v1
        vmv.x.s a0,v2
        ret
.L4:
        li      a0,0
        ret

However, default LMUL (--param=riscv-autovec-lmul=m1) generates redundant vmv1r since
it is EEW32 LMUL=MF2 -> EEW64 LMUL = 1

Before this patch:

reduc_plus_int:
        ble     a1,zero,.L4
        vsetvli a5,zero,e64,m1,ta,ma
        vmv.v.i v1,0
.L3:
        vsetvli a5,a1,e32,mf2,tu,ma
        slli    a4,a5,2
        sub     a1,a1,a5
        vle32.v v2,0(a0)
        vmv1r.v v3,v1                  ---->  This should be removed.
        add     a0,a0,a4
        vwadd.wv        v1,v3,v2       ---->  vs2 should be v1
        bne     a1,zero,.L3
        li      a5,0
        vsetivli        zero,1,e64,m1,ta,ma
        vmv.s.x v2,a5
        vsetvli a5,zero,e64,m1,ta,ma
        vredsum.vs      v1,v1,v2
        vmv.x.s a0,v1
        ret
.L4:
        li      a0,0
        ret

After this patch:

reduc_plus_int:
	ble	a1,zero,.L4
	vsetvli	a5,zero,e64,m1,ta,ma
	vmv.v.i	v1,0
.L3:
	vsetvli	a5,a1,e32,mf2,tu,ma
	slli	a4,a5,2
	sub	a1,a1,a5
	vle32.v	v2,0(a0)
	add	a0,a0,a4
	vwadd.wv	v1,v1,v2
	bne	a1,zero,.L3
	li	a5,0
	vsetivli	zero,1,e64,m1,ta,ma
	vmv.s.x	v2,a5
	vsetvli	a5,zero,e64,m1,ta,ma
	vredsum.vs	v1,v1,v2
	vmv.x.s	a0,v1
	ret
.L4:
	li	a0,0
	ret

	PR target/112432

gcc/ChangeLog:

	* config/riscv/riscv.md (none,W21,W42,W84,W43,W86,W87): Add W0.
	(none,W21,W42,W84,W43,W86,W87,W0): Ditto.
	* config/riscv/vector.md: Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/pr112432-42.c: New test.
2023-12-18 21:19:23 +08:00
Richard Biener
5bca321faa c/111975 - GIMPLE FE dumping and parsing of TARGET_MEM_REF
The following adds dumping of TARGET_MEM_REF in -gimple form and
adds parsing of it to the GIMPLE FE.

	PR c/111975
gcc/c/
	* gimple-parser.cc (c_parser_gimple_postfix_expression):
	Parse TARGET_MEM_REF extended operands for __MEM.

gcc/
	* tree-pretty-print.cc (dump_mem_ref): Use TDF_GIMPLE path
	also for TARGET_MEM_REF and amend it.

gcc/testsuite/
	* gcc.dg/gimplefe-52.c: New testcase.
2023-12-18 12:58:06 +01:00
Juzhe-Zhong
8c5d1d1388 RISC-V: Enable vect test for RV32
gcc/testsuite/ChangeLog:

	* lib/target-supports.exp: Add RV32.
2023-12-18 19:10:51 +08:00
Jakub Jelinek
000155e8ee libgomp: Make libgomp.c/declare-variant-1.c test x86 specific
As written earlier, this test was written with the x86 specifics in mind
and adding dg-final directives for it for other arches makes it unreadable.
If a declare variant call can be resolved in gimple already as in the
aarch64 or gcn cases, it can be done in gcc.dg/gomp/ and I believe we have
tests like that already, the point of the test is that it is not known
during gimplification time which exact call should be chosen as it depends
on which declare simd clone it will be in.

2023-12-18  Jakub Jelinek  <jakub@redhat.com>

	* testsuite/libgomp.c/declare-variant-1.c: Restrict the test to x86,
	drop because of that unneeded target selector from other directives
	and remove the aarch64 specific ones.
2023-12-18 11:57:39 +01:00
Juzhe-Zhong
10493cd4c1 RISC-V: Fix natural regsize for fixed-vlmax of -march=rv64gc_zve32f
This patch fixes 12 ICEs of "full coverage" testing:
Running target riscv-sim/-march=rv64gc_zve32f/-mabi=lp64d/-mcmodel=medlow/--param=riscv-autovec-lmul=dynamic/--param=riscv-autovec-preference=fixed-vlmax
FAIL: gcc.dg/torture/pr96513.c   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  (internal compiler error: Segmentation fault)
FAIL: gcc.dg/torture/pr96513.c   -O3 -g  (internal compiler error: Segmentation fault)

Running target riscv-sim/-march=rv64gc_zve32f/-mabi=lp64d/-mcmodel=medlow/--param=riscv-autovec-lmul=m4/--param=riscv-autovec-preference=fixed-vlmax
FAIL: gcc.dg/torture/pr111048.c   -O2  (internal compiler error: Segmentation fault)
FAIL: gcc.dg/torture/pr111048.c   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  (internal compiler error: Segmentation fault)
FAIL: gcc.dg/torture/pr111048.c   -O3 -g  (internal compiler error: Segmentation fault)

FAIL: gcc.dg/torture/pr96513.c   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  (internal compiler error: Segmentation fault)
FAIL: gcc.dg/torture/pr96513.c   -O3 -g  (internal compiler error: Segmentation fault)

Running target riscv-sim/-march=rv64gc_zve32f/-mabi=lp64d/-mcmodel=medlow/--param=riscv-autovec-lmul=m8/--param=riscv-autovec-preference=fixed-vlmax
FAIL: gcc.dg/torture/pr96513.c   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  (internal compiler error: Segmentation fault)
FAIL: gcc.dg/torture/pr96513.c   -O3 -g  (internal compiler error: Segmentation fault)

Running target riscv-sim/-march=rv64gc_zve32f/-mabi=lp64d/-mcmodel=medlow/--param=riscv-autovec-preference=fixed-vlmax
FAIL: gcc.c-torture/execute/20000801-1.c   -O2  (internal compiler error: Segmentation fault)
FAIL: gcc.c-torture/execute/20000801-1.c   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  (internal compiler error: Segmentation fault)
FAIL: gcc.c-torture/execute/20000801-1.c   -O3 -g  (internal compiler error: Segmentation fault)

The root cause of those ICEs is vector register size = 32bits, wheras scalar register size = 64bit.
That is, vector regsize < scalar regsize on -march=rv64gc_zve32f FIXED-VLMAX.

So the original natural regsize using scalar register size is incorrect. Instead, we should return minimum regsize between vector regsize and scalar regsize.

gcc/ChangeLog:

	* config/riscv/riscv.cc (riscv_regmode_natural_size): Fix ICE for
	FIXED-VLMAX of -march=rv32gc_zve32f.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/autovec/bug-4.c: New test.
	* gcc.target/riscv/rvv/autovec/bug-5.c: New test.
	* gcc.target/riscv/rvv/autovec/bug-6.c: New test.
2023-12-18 18:15:45 +08:00
Jakub Jelinek
5347263b34 tree-object-size: Robustify alloc_size attribute handling [PR113013]
The following testcase ICEs because we aren't careful enough with
alloc_size attribute.  We do check that such an argument exists
(although wouldn't handle correctly functions with more than INT_MAX
arguments), but didn't check that it is scalar integer, the ICE is
trying to fold_convert a structure to sizetype.

Given that the attribute can also appear on non-prototyped functions
where the arguments aren't known, I don't see how the FE could diagnose
that and because we already handle the case where argument doesn't exist,
I think we should also verify the argument is scalar integer convertible
to sizetype.  Furthermore, given this is not just in diagnostics but
used for code generation, I think it is better to punt on arguments with
larger precision then sizetype, the upper bits are then truncated.

The patch also fixes some formatting issues and avoids duplication of the
fold_convert, plus removes unnecessary check for if (arg1 >= 0), that is
always the case after if (arg1 < 0) return ...;

2023-12-18  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/113013
	* tree-object-size.cc (alloc_object_size): Return size_unknown if
	corresponding argument(s) don't have integral type or have integral
	type with higher precision than sizetype.  Don't check arg1 >= 0
	uselessly.  Compare argument indexes against gimple_call_num_args
	in unsigned type rather than int.  Formatting fixes.

	* gcc.dg/pr113013.c: New test.
2023-12-18 09:59:28 +01:00
Jakub Jelinek
994214334f testsuite: Fix up abi-tag25a.C test for C++11
Line 11 of abi-tag25.C is wrapped in #if __cpp_variable_templates
which isn't defined for -std=c++11, so we can't expect a warning
in that case either.

2023-12-18  Jakub Jelinek  <jakub@redhat.com>

	* g++.dg/abi/abi-tag25a.C: Expect second dg-warning only for c++14
	and later.
2023-12-18 09:49:11 +01:00