Ed Schonberg [Mon, 19 Aug 2019 08:36:44 +0000 (08:36 +0000)]
[Ada] Legality of protected subp. implementing interface operations
This patch refines the predicate that implements rule in RM 9.4 (11.9/2)
Compiling b94.ads must yield:
b94.ads:11:17: illegal overriding of subprogram inherited from interface
b94.ads:11:17: first formal of "N" declared at line 8 must be of mode
"out", "in out" or access-to-variable
----
package B94 is
type Prot2_Int is protected interface;
procedure J (PI : in Prot2_Int; N : in Integer) is null;
procedure K (PI : in out Prot2_Int; N : in Integer) is null;
procedure L (PI : out Prot2_Int; N : in Integer) is null;
procedure M (PI : access Prot2_Int; N : in Integer) is null;
procedure N (PI : access constant Prot2_Int; N : in Integer) is null;
protected type Protected_2 is new Prot2_Int with
procedure N (N : in Integer); -- ERROR: {7;1}
end Protected_2;
end B94;
2019-08-19 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch6.adb (Check_Synchronized_Overriding): Complete
predicate that applies legality check in 9.4 (11.9/2): if an
inherited subprogram is implemented by a protected procedure or
entry, its first paarameter must be out, in_out or
access_to_varible.
From-SVN: r274655
Javier Miranda [Mon, 19 Aug 2019 08:36:39 +0000 (08:36 +0000)]
[Ada] Buffer reading overflow in dispatch table initialization
For tagged types not defined at library level that derive from library
level tagged types the compiler may generate code to initialize their
dispatch table of predefined primitives copying from the parent type
data stored in memory after the dispatch table of the parent; that is,
at runtime the initialization of dispatch tables overflows reading the
parent dispatch table.
This problem does not affect the execution of the program since the
target dispatch table always has enough space to store the extra data,
and after such copy the compiler generates code to complete the
initialization of the dispatch table.
The following test must compile and execute without errors.
package pkg_a is
type Root is tagged null record;
end pkg_a;
with pkg_a;
procedure main is
type Derived is new pkg_a.Root with null record; -- Test
begin
null;
end main;
Command: gnatmake -q main -fsanitize=address; ./main
2019-08-19 Javier Miranda <miranda@adacore.com>
gcc/ada/
PR ada/65696
* exp_atag.ads, exp_atag.adb (Build_Inherit_Predefined_Prims):
Adding formal to specify how many predefined primitives are
inherited from the parent type.
* exp_disp.adb (Number_Of_Predefined_Prims): New subprogram.
(Make_Secondary_DT): Compute the number of predefined primitives
of all tagged types (including tagged types not defined at
library level). Previously we unconditionally relied on the
Max_Predef_Prims constant value when building the dispatch
tables of tagged types not defined at library level (thus
consuming more memory for their dispatch tables than required).
(Make_DT): Compute the number of predefined primitives that must
be inherited from their parent type when building the dispatch
tables of tagged types not defined at library level. Previously
we unconditionally relied on the Max_Predef_Prims constant value
when building the dispatch tables of tagged types not defined at
library level (thus copying more data than required from the
parent type).
From-SVN: r274654
Bob Duff [Mon, 19 Aug 2019 08:36:35 +0000 (08:36 +0000)]
[Ada] Process type extensions for -gnatw.h
This patch enables gap detection in type extensions.
With the -gnatw.h switch, on 64-bit machines,
the following test should get warnings:
gcc -c gaps.ads -gnatw.h
gaps.ads:16:07: warning: 48-bit gap before component "Comp2"
gaps.ads:17:07: warning: 8-bit gap before component "Comp3"
package Gaps is
type Integer_16 is mod 2**16;
type TestGap is tagged record
Comp1 : Integer_16;
end record;
for TestGap use record
Comp1 at 0 + 8 range 0..15;
end record;
type TestGap2 is new TestGap with record
Comp2 : Integer_16;
Comp3 : Integer_16;
end record;
for TestGap2 use record
Comp2 at 08 + 8 range 0..15;
Comp3 at 11 + 8 range 0..15;
end record;
end Gaps;
2019-08-19 Bob Duff <duff@adacore.com>
gcc/ada/
* sem_ch13.adb (Record_Hole_Check): Procedure to check for holes
that incudes processing type extensions. A type extension is
processed by first calling Record_Hole_Check recursively on the
parent type to compute the bit number after the last component
of the parent.
From-SVN: r274653
Gary Dismukes [Mon, 19 Aug 2019 08:36:30 +0000 (08:36 +0000)]
[Ada] Improve warnings about "too few elements" and "too many elements"
When warning about length-check failures detected at compile time that
are flagged with "too few elements" or "too many elements", the compiler
now gives an additional message indicating the number of elements
expected by the context versus how many are present in the conflicting
expression (such as an aggregate that has too few or too many
components).
The test below reports the following warnings when compiled with this command:
$ gcc -c -gnatj78 length_warnings.adb
length_warnings.adb:6:09: warning: too few elements for subtype of
"Boolean_Array" defined at line 5, expected 10
elements; found 9 elements, "Constraint_Error" will
be raised at run time
length_warnings.adb:10:09: warning: too few elements for subtype of
"Boolean_Array" defined at line 9, expected 2
elements; found 1 element, "Constraint_Error" will
be raised at run time
length_warnings.adb:14:09: warning: too many elements for subtype of
"Boolean_Array" defined at line 13, expected 10
elements; found 11 elements, "Constraint_Error"
will be raised at run time
length_warnings.adb:18:09: warning: too many elements for subtype of
"Boolean_Array" defined at line 17, expected 0
elements; found 1 element, "Constraint_Error" will
be raised at run time
length_warnings.adb:22:09: warning: too many elements for subtype of
"Boolean_Array" defined at line 21, expected 1
element; found 2 elements, "Constraint_Error" will
be raised at run time
procedure Length_Check_Warnings is
type Boolean_Array is array (Natural range <>) of Boolean;
Bits_A : Boolean_Array (1 .. 10)
:= (True, True, True, True, True, True, True, True, True);
-- Too few elements
Bits_B : Boolean_Array (1 .. 2)
:= (1 => False);
-- Too few elements
Bits_C : Boolean_Array (1 .. 10)
:= (True, True, True, True, True, True, True, True, True, True, True);
-- Too many elements
Bits_D : Boolean_Array (1 .. 0)
:= (1 => True);
-- Too many elements
Bits_E : Boolean_Array (1 .. 1)
:= (True, False);
-- Too many elements
begin
null;
end Length_Check_Warnings;
2019-08-19 Gary Dismukes <dismukes@adacore.com>
gcc/ada/
* checks.adb (Length_Mismatch_Info_Message): New function in
Selected_Length_Checks to return a message indicating the
element counts for the mismatched lengths for a failed
compile-time length check.
(Plural_Or_Singular_Ending): Support function in
Length_Mismatch_Info_Message to return either "" or "s", for
concatenating to the end of words.
(Selected_Length_Checks): Pass the result of
Length_Mismatch_Info_Message as an extra warning message to
Compile_Time_Constraint_Error to indicate the mismatched lengths
for a failed compile-time length check.
* sem_util.ads (Compile_Time_Constraint_Error): Add an optional
message formal (Extra_Msg), defaulted to the empty string.
* sem_util.adb (Compile_Time_Constraint_Error): Output an extra
message following the main warning message (when Extra_Msg is
not the empty string).
From-SVN: r274652
Patrick Bernardi [Mon, 19 Aug 2019 08:36:26 +0000 (08:36 +0000)]
[Ada] Enable use of GNAT.Sockets for VxWorks RTP
The recent introduction of GNAT.Sockets IPv6 support broke support for
VxWorks RTPs due to the use of internal VxWorks kernel calls. This patch
rectifies this by using the VxWorks public API for these routines.
The following RTP should compile successfully on a Development profile
VxWorks kernel that includes the INCLUDE_GETNAMEINFO component:
with GNAT.Sockets; use GNAT.Sockets;
procedure IPvX is
procedure Print_Address_Info
(Host, Serv : String;
Family : Family_Type := Family_Unspec)
is
Addresses : Address_Info_Array :=
Get_Address_Info
(Host, Serv, Family,
Passive => False,
Numeric_Host => False);
begin
Sort (Addresses, IPv6_TCP_Preferred'Access);
end Print_Address_Info;
begin
Print_Address_Info ("localhost", "ssh");
end IPvX;
2019-08-19 Patrick Bernardi <bernardi@adacore.com>
gcc/ada/
* socket.c: Removed the redefinition of getaddrinfo, getnameinfo
and freeaddrinfo to internal VxWorks kernel calls because they
are, well, internal kernel calls and cannot be called from RTPs.
VxWorks provides the necessary components to call these routines
directly.
From-SVN: r274651
Eric Botcazou [Mon, 19 Aug 2019 08:36:21 +0000 (08:36 +0000)]
[Ada] Fix incorrect stub generation for types in instances
This fixes a fallout of a recent change clearing the
Is_Generic_Actual_Type on the implicit full view of a private actual
type in an instance. This flag is used to help disambiguating formal
types instantiated on the same actual type within an instance, but it
should be cleared outside the instance to let the usual disambiguation
rules apply again to these types outside the instance.
This in particular means that Exp_Dist cannot rely on it to detect
subtypes representing generic actual types, hence the need for the new
predicate.
2019-08-19 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* exp_dist.adb (Is_Generic_Actual_Subtype): New predicate.
(Build_From_Any_Call, Build_To_Any_Call, Build_TypeCode_Call):
Use it instead of Is_Generic_Actual_Type flag to detect subtypes
representing generic actual types.
From-SVN: r274650
Ed Schonberg [Mon, 19 Aug 2019 08:36:17 +0000 (08:36 +0000)]
[Ada] Improve placement of warning on formals of generic subprograms
This patch modifies the handling of warnings on unused formal parameters
of generic subprograms. Previously such warnings were placed on the
formal appearing in the subprogram declaration, in contrast with
warnings on non-generic subprograms, where the warning is placed on the
corresponding entity in the body of the subprogram. This patch makes the
handling of both cases uniform. It is preferable to place the warning in
the body because this also provides a better suggestion for the
placement of an Unreferenced pragma to suppress the warning when desired.
2019-08-19 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_warn.adb (Check_References, Generic_Body_Formal): When a
formal parameter of a generic subprogram is not referenced in
the body, place the corresponding warning on the corresponding
entity in the specification of the generic body, as is done for
non-generic subprograms.
gcc/testsuite/
* gnat.dg/warn28.adb, gnat.dg/warn28.ads: New testcase.
From-SVN: r274649
Bob Duff [Mon, 19 Aug 2019 08:36:12 +0000 (08:36 +0000)]
[Ada] Factor out the "size for& too small..." error message
Use a constant for the Size_Too_Small_Message, so if it changes, it
won't change in one place but not another. DRY. It might be better to
move this code out of errout.adb, but that's for another day.
2019-08-19 Bob Duff <duff@adacore.com>
gcc/ada/
* errout.ads (Size_Too_Small_Message): New constant.
* errout.adb, freeze.adb, sem_ch13.adb: Use it.
From-SVN: r274648
Eric Botcazou [Mon, 19 Aug 2019 08:36:07 +0000 (08:36 +0000)]
[Ada] Fix internal error on subprogram instantiation with -gnatzc
This fixes a fallout of the recent change keeping the
Is_Generic_Instance flag on the wrapper package built for the
instantiation of a generic subprogram.
There is no need to visit the Instance_Spec of an
N_Subprogram_Instantiation node anymore because the regular processing
for an N_Package_Declaration node now does the job for instantiations of
generic subprograms.
The following subprogram must compile again quietly with -gnatzc:
with Gen_Proc;
package RCI is
pragma Remote_Call_Interface;
procedure Inst_Proc is new Gen_Proc;
procedure P (S : String);
end RCI;
generic
procedure Gen_Proc (S : String);
pragma Remote_Call_Interface (Gen_Proc);
with Ada.Text_IO; use Ada.Text_IO;
procedure Gen_Proc (S : String) is
begin
Put_Line ("Gen_Proc called: " & S);
end Gen_Proc;
2019-08-19 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* exp_dist.adb (Build_Package_Stubs): Do not specifically visit
the declarations of an N_Subprogram_Instantiation node.
From-SVN: r274647
Bob Duff [Mon, 19 Aug 2019 08:36:02 +0000 (08:36 +0000)]
[Ada] Document missing gnatmetric switches
2019-08-19 Bob Duff <duff@adacore.com>
gcc/ada/
* doc/gnat_ugn/gnat_utility_programs.rst: Document missing
metrics switches.
From-SVN: r274646
Piotr Trojanek [Mon, 19 Aug 2019 08:35:58 +0000 (08:35 +0000)]
[Ada] Minor refactorings
2019-08-19 Piotr Trojanek <trojanek@adacore.com>
gcc/ada/
* sem_ch12.adb (Get_Unit_Instantiation_Node): Simplify Nkind_In
membership test.
* sem.adb (Depends_On_Main): Whitespace cleanup; only assign a
local variable if needed.
From-SVN: r274645
Claire Dross [Mon, 19 Aug 2019 08:35:53 +0000 (08:35 +0000)]
[Ada] Allow reading a borrowed object inside a call to a pledge function
No impact on regular compilation.
2019-08-19 Claire Dross <dross@adacore.com>
gcc/ada/
* sem_spark.ads, sem_spark.adb (Is_Pledge_Function): New
parameter of the generic. Function used to decide whether a
function is a pledge function.
(Check_Not_Borrowed): Disable check inside the second parameter
of a pledge function for the path borrowed by the first
parameter. Also disable checks for entities inside a Global
contract.
From-SVN: r274644
Joffrey Huguet [Mon, 19 Aug 2019 08:35:49 +0000 (08:35 +0000)]
[Ada] Add formal function parameter equality to SPARK containers
This patch adds a formal function parameter "=" (L, R : Element_Type) to
SPARK containers. The equality that is used by default for Element_Type
after this patch is the primitive equality and not the predefined any
more. It also allows to use any function with the appropriate signature
for the equality function.
2019-08-19 Joffrey Huguet <huguet@adacore.com>
gcc/ada/
* libgnat/a-cfdlli.ads, libgnat/a-cfhama.ads,
libgnat/a-cfinve.ads, libgnat/a-cforma.ads,
libgnat/a-cofove.ads, libgnat/a-cofuma.ads,
libgnat/a-cofuve.ads: Add formal function parameter "=" (L, R :
Element_Type) to the generic packages.
From-SVN: r274643
Eric Botcazou [Mon, 19 Aug 2019 08:35:44 +0000 (08:35 +0000)]
[Ada] Opt: clean up left-overs of earlier implementation in comment
2019-08-19 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* opt.ads: Clean up left-overs of earlier implementation in
comment:
From-SVN: r274642
Ed Schonberg [Mon, 19 Aug 2019 08:35:40 +0000 (08:35 +0000)]
[Ada] Representation clause for derived enumeration type is mishandled
This patch fixes an old-standing problem with premature freezing. When a
derived type declaration includes a constraint, we generate a subtype
declaration of an anonymous base type, with the constraint given in the
original type declaration, Conceptually, the bounds are converted to the
new base type, and this conversion freezes (prematurely) that base type,
when the bounds are simply literals. As a result, a representation
clause for the derived type is then rejected or ignared. This procedure
recognizes the simple case of literal bounds in derived enumeration type
declarations, which allows us to indicate that the conversions are not
freeze points, and the subsequent representation clause can be accepted.
2019-08-19 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch3.adb (Derived_Enumeration_Type): Do no freeze anonymous
base type if the bounds in the derived type declaration are
literals of the type.
gcc/testsuite/
* gnat.dg/rep_clause9.adb: New testcase.
From-SVN: r274641
Yannick Moy [Mon, 19 Aug 2019 08:35:35 +0000 (08:35 +0000)]
[Ada] Do not skip non-aliasing checking when inlining in GNATprove
When code is inlinined for proof in the special mode for GNATprove, Ada
rules about non-aliasing should still be checked. Now fixed.
There is no impact on compilation.
2019-08-19 Yannick Moy <moy@adacore.com>
gcc/ada/
* sem_res.adb (Resolve_Call): Check non-aliasing rules before
GNATprove inlining.
From-SVN: r274640
Eric Botcazou [Mon, 19 Aug 2019 08:35:31 +0000 (08:35 +0000)]
[Ada] Further cleanup in inlining machinery
This gets rid of a small issue in the inlining machinery: under very
peculiar circumstances, it would add a pending instantiation for the
body of a generic package at the point of call to an inlined subprogram
of the instance. That's theoritically problematic because the saved
context is that of the call and not that of the instance in this case,
although the strict conditions ensure that this doesn't make a real
difference in practice.
Now that the machinery can perform the pending instantiations on demand,
we can optimistically add more of them when the instantiations are
analyzed and thus remove the problematic handling at the point of call.
No functional changes.
2019-08-19 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* inline.adb (Add_Inlined_Body): Do not add pending
instantiations.
* sem_ch12.adb (Needs_Body_Instantiated): New predicate.
(Analyze_Package_Instantiation): Use it to decide whether to add
a pending instantiation for the body of the package.
From-SVN: r274639
Olivier Hainque [Mon, 19 Aug 2019 08:35:24 +0000 (08:35 +0000)]
[Ada] Fix thinko in Acc_Loop_to_gnu
This fixes a glitch introduced during the initial OpenACC work import
process, causing crashes on any Acc_Parallel + Acc_Loop combination.
2019-08-19 Olivier Hainque <hainque@adacore.com>
gcc/ada/
* gcc-interface/trans.c (Acc_Loop_to_gnu): Return the openacc
BIND_EXPR node we have constructed on purpose. Remove unused
variable.
gcc/testsuite/
* gnat.dg/openacc1.adb: New testcase.
From-SVN: r274638
Pierre-Marie de Rodat [Mon, 19 Aug 2019 08:35:17 +0000 (08:35 +0000)]
[Ada] Define the -fdump-scos option in lang.opt
2019-08-19 Pierre-Marie de Rodat <derodat@adacore.com>
gcc/ada/
* gcc-interface/lang.opt (fdump-scos): Define.
* gcc-interface/misc.c (gnat_handle_option): Handle
OPT_fdump_scos.
From-SVN: r274637
Kito Cheng [Mon, 19 Aug 2019 03:21:44 +0000 (03:21 +0000)]
PR target/91441 - Turn off -fsanitize=kernel-address if TARGET_ASAN_SHADOW_OFFSET is not implemented.
- -fsanitize=kernel-address will call targetm.asan_shadow_offset ()
at asan_shadow_offset, so it will crash if TARGET_ASAN_SHADOW_OFFSET
is not implemented, that's mean -fsanitize=kernel-address is not
supported for target without TARGET_ASAN_SHADOW_OFFSET implementation.
gcc/ChangeLog:
PR target/91441
* toplev.c (process_options): Check TARGET_ASAN_SHADOW_OFFSET is
implemented for -fsanitize=kernel-address, and merge check logic
with -fsanitize=address.
testsuite/ChangeLog:
PR target/91441
* gcc.target/riscv/pr91441.c: New.
From-SVN: r274631
Steven G. Kargl [Mon, 19 Aug 2019 03:00:54 +0000 (03:00 +0000)]
re PR fortran/91485 (Erroneous conflict between variable x and operator(.x.))
2019-08-18 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/91485
module.c (gfc_match_use): User defined operator cannot conflict with
a rename symbol.
2019-08-18 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/91485
* gfortran.dg/pr91485.f90: New test.
From-SVN: r274630
GCC Administrator [Mon, 19 Aug 2019 00:16:20 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r274629
C.G. Dogan [Sun, 18 Aug 2019 18:54:13 +0000 (18:54 +0000)]
[Darwin, fixincludes] Fix PR83531
There is no reasonable chance that the SDKs in question will be re-
issued, so the only viable solution is a fixincludes.
2019-08-18 C.G. Dogan <gcc+cgdogan.00@gmail.com>
Iain Sandoe <iain@sandoe.co.uk>
PR target/83531
* inclhack.def (darwin_api_availability): New, strip leading
underscores from API_XXXX defines.
* fixincl.x: Regenerate.
* tests/base/os/availability.h: New file.
Co-Authored-By: Iain Sandoe <iain@sandoe.co.uk>
From-SVN: r274624
Iain Sandoe [Sun, 18 Aug 2019 18:44:58 +0000 (18:44 +0000)]
[Darwin, PPC] Fix fail of cpp/assert4.c
This test needs the cpu and machine asserts to be implemented
which hadn't been done for PPC Darwin. Fixed thus.
gcc/
2019-08-18 Iain Sandoe <iain@sandoe.co.uk>
* config/rs6000/darwin.h (TARGET_OS_CPP_BUILTINS): Add asserts
for cpu and machine. Factor 64/32b builtins.
From-SVN: r274623
Gerald Pfeifer [Sun, 18 Aug 2019 11:34:49 +0000 (11:34 +0000)]
install.texi (Specific, bfin): blackfin.uclinux.org is gone, point to sourceforge.net.
* doc/install.texi (Specific, bfin): blackfin.uclinux.org is
gone, point to sourceforge.net.
From-SVN: r274619
GCC Administrator [Sun, 18 Aug 2019 00:16:35 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r274618
Ian Lance Taylor [Sat, 17 Aug 2019 23:47:58 +0000 (23:47 +0000)]
compiler: support new numeric literal syntax
Support 0b, 0o, and hex floats.
Tested against test/literal2.go in the gc repo.
Updates golang/go#12711
Updates golang/go#19308
Updates golang/go#28493
Updates golang/go#29008
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/189718
From-SVN: r274614
Ian Lance Taylor [Sat, 17 Aug 2019 23:43:08 +0000 (23:43 +0000)]
compiler, runtime: allocate defer records on the stack
When a defer is executed at most once in a function body,
we can allocate the defer record for it on the stack instead
of on the heap.
This should make defers like this (which are very common) faster.
This is a port of CL 171758 from the gc repo.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/190410
From-SVN: r274613
Steven G. Kargl [Sat, 17 Aug 2019 17:15:42 +0000 (17:15 +0000)]
re PR fortran/82992 (ICE in create_int_parameter_array, at fortran/module.c:6586)
2019-08-17 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/82992
* module.c (gfc_match_use): When renaming a module entity, search
current namespace for conflicting symbol.
2019-08-17 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/82992
* gfortran.dg/pr71649.f90: Adjust error messages.
* gfortran.dg/use_15.f90: Ditto.
* gfortran.dg/use_rename_8.f90: Ditto.
From-SVN: r274608
Steven G. Kargl [Sat, 17 Aug 2019 14:39:51 +0000 (14:39 +0000)]
re PR fortran/78739 (ICE in gfc_get_symbol_decl, at fortran/trans-decl.c:1477)
2019-08-17 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/78739
* match.c (gfc_match_st_function): When matching a statement function,
need to check if the statement function name shadows the function
name.
2019-08-17 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/78739
* fortran.dg/pr78739.f90: New test.
From-SVN: r274605
Steven G. Kargl [Sat, 17 Aug 2019 14:27:07 +0000 (14:27 +0000)]
re PR fortran/78719 ([F03] ICE in gfc_get_symbol_decl, at fortran/trans-decl.c:1438)
2019-08-17 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/78719
* decl.c (get_proc_name): Check for a CLASS entity when trying to
add attributes to an entity that already has an explicit interface.
2019-08-17 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/78719
* gfortran.dg/pr78719_1.f90: New test.
* gfortran.dg/pr78719_2.f90: Ditto.
* gfortran.dg/pr78719_3.f90: Ditto.
From-SVN: r274604
Steven G. Kargl [Sat, 17 Aug 2019 14:23:10 +0000 (14:23 +0000)]
re PR fortran/91471 (f951: internal compiler error: gfc_variable_attr(): Bad array reference)
2019-08-17 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/91471
* primary.c (gfc_variable_attr): Remove a gfc_internal_error(),
which cannot be reached by conforming Fortran code, but seems to
be reachable from nonconforming Fortran code. Treat the AR_UNKNOWN
case as a no-op.
2019-08-17 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/91471
* gfortran.dg/pr91471.f90: New test.
From-SVN: r274603
Thomas Koenig [Sat, 17 Aug 2019 11:57:25 +0000 (11:57 +0000)]
re PR libgomp/91473 (Test case libgomp.fortran/appendix-a/a.28.5.f90 is invalid)
2019-08-17 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/91473
* testsuite/libgomp.fortran/appendix-a/a.28.5.f90: Add
-std=legacy so invalid code in the test case is accepted.
From-SVN: r274602
Gerald Pfeifer [Sat, 17 Aug 2019 10:10:54 +0000 (10:10 +0000)]
* doc/ux.texi (User Experience Guidelines): Update reference.
From-SVN: r274601
Gerald Pfeifer [Sat, 17 Aug 2019 10:07:13 +0000 (10:07 +0000)]
gpl_v3.texi (Copying): Adjust the link to "Why not LGPL".
* doc/include/gpl_v3.texi (Copying): Adjust the link to "Why
not LGPL".
From-SVN: r274600
Janne Blomqvist [Sat, 17 Aug 2019 05:45:37 +0000 (08:45 +0300)]
PR fortran/68401 Improve allocation error message
Improve the error message that is printed when a memory allocation
fails, by including the location, and the size of the allocation that
failed.
Regtested on x86_64-pc-linux-gnu.
gcc/fortran/ChangeLog:
2019-08-17 Janne Blomqvist <jb@gcc.gnu.org>
PR fortran/68401
* trans-decl.c (gfc_build_builtin_function_decls): Replace
os_error with os_error_at decl.
* trans.c (trans_runtime_error_vararg): Modify so the error
function decl is passed directly.
(gfc_trans_runtime_error): Pass correct error function decl.
(gfc_trans_runtime_check): Likewise.
(trans_os_error_at): New function.
(gfc_call_malloc): Use trans_os_error_at.
(gfc_allocate_using_malloc): Likewise.
(gfc_call_realloc): Likewise.
* trans.h (gfor_fndecl_os_error): Replace with gfor_fndecl_os_error_at.
libgfortran/ChangeLog:
2019-08-17 Janne Blomqvist <jb@gcc.gnu.org>
PR fortran/68401
* gfortran.map: Add GFORTRAN_10 node, add _gfortran_os_error_at
symbol.
* libgfortran.h (os_error_at): New prototype.
* runtime/error.c (os_error_at): New function.
From-SVN: r274599
Ian Lance Taylor [Sat, 17 Aug 2019 04:35:37 +0000 (04:35 +0000)]
runtime: scan write barrier buffer conservatively
In gccgo, we insert the write barriers in the frontend, and so we
cannot completely prevent write barriers on stack writes. So it
is possible for a bad pointer appearing in the write barrier
buffer. When flushing the write barrier, treat it the same as
sacnning the stack. In particular, don't mark a pointer if it
does not point to an allocated object. We already have similar
logic in greyobject. With this, hopefully, we can prevent an
unallocated object from being marked completely.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/190599
From-SVN: r274598
Marek Polacek [Sat, 17 Aug 2019 01:22:18 +0000 (01:22 +0000)]
Put the CL into the right dir.
From-SVN: r274596
GCC Administrator [Sat, 17 Aug 2019 00:16:17 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r274595
Ian Lance Taylor [Fri, 16 Aug 2019 22:49:23 +0000 (22:49 +0000)]
compiler: print runtime.hex in hex
The gc compiler recognizes the type runtime.hex and prints values
in this type as hex. Do the same here. This makes debugging
runtime crashes slightly better.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/190597
From-SVN: r274591
Jeff Law [Fri, 16 Aug 2019 21:51:13 +0000 (15:51 -0600)]
* gcc.target/sh/pr54236-6.c: Use -fno-tree-forwprop.
From-SVN: r274590
Marek Polacek [Fri, 16 Aug 2019 20:40:36 +0000 (20:40 +0000)]
re PR c++/85827 (false positive for -Wunused-but-set-variable because of constexpr-if)
PR c++/85827
g++.dg/cpp1z/constexpr-if29.C: New test.
From-SVN: r274587
Iain Sandoe [Fri, 16 Aug 2019 19:49:07 +0000 (19:49 +0000)]
libsanitizer, record a local patch.
2019-08-16 Iain Sandoe <iain@sandoe.co.uk>
* LOCAL_PATCHES: Add r274585.
From-SVN: r274586
Iain Sandoe [Fri, 16 Aug 2019 19:46:09 +0000 (19:46 +0000)]
libsanitize, asan - reapply r272406
The entry in LOCAL_PATCHES was accidentally omitted.
2019-08-16 Iain Sandoe <iain@sandoe.co.uk>
* asan/asan_interceptors.h: Reapply r272406.
From-SVN: r274585
Martin Sebor [Fri, 16 Aug 2019 17:06:25 +0000 (17:06 +0000)]
As discussed below:
https://gcc.gnu.org/ml/gcc-patches/2019-08/msg00517.html
gcc/testsuite/ChangeLog:
* gcc.dg/struct-ret-1.c: Enable on all targets.
From-SVN: r274579
Eric Botcazou [Fri, 16 Aug 2019 16:00:25 +0000 (16:00 +0000)]
tree-sra.c (build_reconstructed_reference): Return NULL_TREE instead of NULL.
* tree-sra.c (build_reconstructed_reference): Return NULL_TREE instead
of NULL. Add guard for broken VIEW_CONVERT_EXPRs.
From-SVN: r274576
Martin Sebor [Fri, 16 Aug 2019 15:53:29 +0000 (15:53 +0000)]
tree.def (TYPE_SIZE): Clarify.
gcc/ChangeLog:
* tree.def (TYPE_SIZE): Clarify.
* tree.h (TYPE_SIZE, TYPE_SIZE_UNIT, DECL_SIZE): Add comments.
From-SVN: r274575
Martin Sebor [Fri, 16 Aug 2019 15:47:25 +0000 (15:47 +0000)]
re PR testsuite/91458 (FAIL: g++.dg/tree-ssa/pr19807.C -std=gnu++98 scan-tree-dump-times optimized "&MEM\\\\[\\\\(void .\\\\)&a \\\\+ 8B\\\\]" 3)
PR testsuite/91458
gcc/testsuite/ChangeLog:
* g++.dg/tree-ssa/pr19807.C: Use the same search pattern
unconditionally (correcting r272199, PR middle-end/90676).
From-SVN: r274574
Bernd Edlinger [Fri, 16 Aug 2019 15:34:47 +0000 (15:34 +0000)]
re PR tree-optimization/91109 ([arm] gcc.c-torture/execute/
20040709-1.c fails since r273135)
2019-08-16 Bernd Edlinger <bernd.edlinger@hotmail.de>
PR tree-optimization/91109
* lra-int.h (lra_need_for_scratch_reg_p): Declare.
* lra.c (lra): Use lra_need_for_scratch_reg_p.
* lra-spills.c (lra_need_for_scratch_reg_p): New function.
From-SVN: r274573
Uros Bizjak [Fri, 16 Aug 2019 14:28:12 +0000 (16:28 +0200)]
mmx.md (mmxdoublemode): New mode attribute.
* config/i386/mmx.md (mmxdoublemode): New mode attribute.
(mmx_uavg<mode>3): Macroize expaner from mmx_uavgv8qi3 and
mmx_uavgv4hi3 using MMXMODE12 mode iterator.
(uavg<mode>3_ceil): New expander.
* config/i386/sse.md (uavg<mode>3_ceil): Use ssedoublemode
mode iterator when creating CONST1_RTX.
(<sse2_avx2>_uavg<mode>3<mask_name>): Ditto.
(*<sse2_avx2>_uavg<mode>3<mask_name>): Use ssedoublemode
mode iterator for const1_operand predicate.
From-SVN: r274572
Richard Biener [Fri, 16 Aug 2019 13:23:01 +0000 (13:23 +0000)]
tree-scalar-evolution.c (follow_ssa_edge_expr): Declare.
2019-08-16 Richard Biener <rguenther@suse.de>
* tree-scalar-evolution.c (follow_ssa_edge_expr): Declare.
(follow_ssa_edge_binary): Call follow_ssa_edge_expr instead of
follow_ssa_edge.
(follow_ssa_edge_in_condition_phi_branch): Likewise.
(analyze_evolution_in_loop): Likewise.
(follow_ssa_edge, follow_ssa_edge_in_rhs): Inline into ...
(follow_ssa_edge_expr): ... here. Refactor code.
From-SVN: r274571
Richard Biener [Fri, 16 Aug 2019 13:17:04 +0000 (13:17 +0000)]
re PR target/91469 (ICE in extract_insn, at recog.c:2310 since r274481)
2019-08-16 Richard Biener <rguenther@suse.de>
PR target/91469
* config/i386/i386-features.c
(general_scalar_chain::replace_with_subreg): Stop at memory operands.
* gcc.target/i386/pr91469-1.c: New testcase.
* gcc.target/i386/pr91469-2.c: Likewise.
From-SVN: r274570
Uros Bizjak [Fri, 16 Aug 2019 12:30:40 +0000 (14:30 +0200)]
baseline_symbols.txt: Update.
* config/abi/post/alpha-linux-gnu/baseline_symbols.txt: Update.
From-SVN: r274569
Mark Eggleston [Fri, 16 Aug 2019 10:09:57 +0000 (10:09 +0000)]
Allow automatics in equivalences
If a variable with an automatic attribute appears in an
equivalence statement the storage should be allocated on the
stack.
Note: most of this patch was provided by Jeff Law <law@redhat.com>.
From-SVN: r274565
Kyrylo Tkachov [Fri, 16 Aug 2019 09:32:36 +0000 (09:32 +0000)]
[gensupport] PR 91255: Do not error out immediately on set_attr_alternative with define_subst
I'm trying to add a define_subst use in the arm backend but am getting many build errors complaining about:
`set_attr_alternative' is unsupported by `define_subst'
Looking at the gensupport.c code it iterates over all define_insns and errors if any of them have set_attr_alternative.
The usecase I'm targetting doesn't involve patterns with set_attr_alternative, so I would like to make the define_subst handling
more robust to only error out if the define_subst is actually attempted on a set_attr_alternative.
This patch produces the error only if the set_attr_alternative attr matches the subst name.
This allows a build of the arm backend with a define_subst usage to succeed.
PR other/91255
* gensupport.c (has_subst_attribute): Error out on set_attr_alternative
only if subst_name matches curr_attr string.
From-SVN: r274564
Richard Biener [Fri, 16 Aug 2019 09:27:34 +0000 (09:27 +0000)]
tree-ssa-forwprop.c (simplify_builtin_call): Do not remove stmt at gsi_p, instead replace it with a NOP removed later.
2019-08-16 Richard Biener <rguenther@suse.de>
* tree-ssa-forwprop.c (simplify_builtin_call): Do not remove
stmt at gsi_p, instead replace it with a NOP removed later.
(pass_forwprop::execute): Fully propagate lattice, DCE stmts
that became dead because of that.
fortran/
* trans-intrinsic.c (gfc_conv_intrinsic_findloc): Initialize
forward_branch to avoid bogus uninitialized warning.
* gcc.dg/tree-ssa/forwprop-31.c: Adjust.
From-SVN: r274563
Martin Liska [Fri, 16 Aug 2019 08:10:55 +0000 (10:10 +0200)]
Add missed to a opt-info dump.
2019-08-16 Martin Liska <mliska@suse.cz>
PR ipa/91447
* g++.dg/ipa/ipa-icf-4.C: Add -missed for target that
don't have aliases.
From-SVN: r274562
Aldy Hernandez [Fri, 16 Aug 2019 06:54:23 +0000 (06:54 +0000)]
Add type to VR_VARYING.
From-SVN: r274561
Alexandre Oliva [Fri, 16 Aug 2019 03:39:02 +0000 (03:39 +0000)]
require trampolines for pr85044
Testcases that require support for trampolines should be marked as
such; gcc.target/i386/pr85044.c was missing it. Fixed.
for gcc/testsuite/ChangeLog
* gcc.target/i386/pr85044.c: Require support for trampolines.
From-SVN: r274560
Alexandre Oliva [Fri, 16 Aug 2019 03:38:49 +0000 (03:38 +0000)]
i386/asm-4 test: use amd64's natural addressing mode on all OSs
gcc.target/i386/asm-4.c uses amd64's natural PC-relative addressing
mode on a single platform, using the 32-bit absolute addressing mode
elsewhere. There's no point in giving up amd64's natural addressing
mode and insisting on the 32-bit one when we're targeting amd64, and
having to make explicit exceptions for systems where that's found not
to work for whatever reason. If we just use the best-suited way to
take the address of a function behind the compiler's back on each
target variant, we're less likely to hit unexpected failures.
for gcc/testsuite/ChangeLog
* gcc.target/i386/asm-4.c: Use amd64 natural addressing mode
on all __LP64__ targets.
From-SVN: r274559
Alexandre Oliva [Fri, 16 Aug 2019 03:38:36 +0000 (03:38 +0000)]
use __builtin_alloca, drop non-standard alloca.h
Since alloca.h is not ISO C, most of our alloca-using tests seem to
rely on __builtin_alloca instead of including the header and calling
alloca. This patch extends this practice to some of the exceptions I
found in gcc.target, marking them as requiring a functional alloca
while at that.
for gcc/testsuite/ChangeLog
* gcc.target/arc/interrupt-6.c: Use __builtin_alloca, require
effective target support for alloca, drop include of alloca.h.
* gcc.target/i386/pr80969-3.c: Likewise.
* gcc.target/sparc/setjmp-1.c: Likewise.
* gcc.target/x86_64/abi/ms-sysv/gen.cc: Likewise.
* gcc.target/x86_64/abi/ms-sysv/ms-sysv.c: Likewise.
From-SVN: r274558
Alexandre Oliva [Fri, 16 Aug 2019 03:38:23 +0000 (03:38 +0000)]
Match ld besides collect2 in gcov test
The regexp that checks that -lgcov is linked in when --coverage is
passed to the compiler driver requires the command line to match
'/collect2'. Some of our targets don't match that, but they match /ld
or ${target_alias}-ld depending on the testing scenario, so I'd like
to tweak the test to match those as well.
for gcc/testsuite/ChangeLog
* gcc.misc-tests/options.exp: Match /ld and -ld besides
/collect2.
From-SVN: r274557
Alexandre Oliva [Fri, 16 Aug 2019 03:38:09 +0000 (03:38 +0000)]
address change
Oops, I forgot to update the MAINTAINERS file a couple of months ago,
when the address there stopped working.
Honestly, I haven't really had much involvement with the frv, mn10300
or sh ports for almost 15 years, so I wouldn't mind if someone else
stepped up and took over, but until someone does, I don't mind
reviewing the occasional patch, so it's best if it can reach me ;-)
for ChangeLog
* MAINTAINERS: aoliva from @redhat.com to @gcc.gnu.org.
From-SVN: r274556
GCC Administrator [Fri, 16 Aug 2019 00:16:16 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r274555
Thomas Koenig [Thu, 15 Aug 2019 22:52:40 +0000 (22:52 +0000)]
re PR fortran/91443 (-Wargument-mismatch does not catch mismatch for global procedure)
2019-08-15 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/91443
* frontend-passes.c (check_externals_expr): New function.
(check_externals_code): New function.
(gfc_check_externals): New function.
* gfortran.h (debug): Add prototypes for gfc_symbol * and
gfc_expr *.
(gfc_check_externals): Add prototype.
* interface.c (compare_actual_formal): Do not complain about
alternate returns if the formal argument is optional.
(gfc_procedure_use): Handle cases when an error has been issued
previously. Break long line.
* parse.c (gfc_parse_file): Call gfc_check_externals for all
external procedures.
* resolve.c (resolve_global_procedure): Remove checking of
argument list.
2019-08-15 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/91443
* gfortran.dg/argument_checking_19.f90: New test.
* gfortran.dg/altreturn_10.f90: Change dg-warning to dg-error.
* gfortran.dg/dec_union_11.f90: Add -std=legacy.
* gfortran.dg/hollerith8.f90: Likewise. Remove warning for
Hollerith constant.
* gfortran.dg/integer_exponentiation_2.f90: New subroutine gee_i8;
use it to avoid type mismatches.
* gfortran.dg/pr41011.f: Add -std=legacy.
* gfortran.dg/whole_file_1.f90: Change warnings to errors.
* gfortran.dg/whole_file_2.f90: Likewise.
From-SVN: r274551
Jason Merrill [Thu, 15 Aug 2019 21:55:19 +0000 (17:55 -0400)]
PR c++/90393 - ICE with thow in ?:
My previous patch for 64372 was incomplete: it only stopped making the
non-throw argument into an rvalue, lvalue_kind still considered the ?:
expression to be an rvalue, leaving us worse than before.
PR c++/64372, DR 1560 - Gratuitous lvalue-to-rvalue conversion in ?:
* tree.c (lvalue_kind): Handle throw in one arm.
* typeck.c (rationalize_conditional_expr): Likewise.
(cp_build_modify_expr): Likewise.
From-SVN: r274550
H.J. Lu [Thu, 15 Aug 2019 18:15:33 +0000 (18:15 +0000)]
i386: Separate costs of pseudo registers from hard registers
processor_costs has costs of RTL expressions with pseudo registers and
and costs of hard register moves:
1. Costs of RTL expressions are used to generate the most efficient RTL
operations with pseudo registers.
2. Costs of hard register moves are used by register allocator to
decide how to allocate and move hard registers.
Since relative costs of pseudo register load and store versus pseudo
register moves in RTL expressions can be different from relative costs
of hard registers, we should separate costs of RTL expressions with
pseudo registers from costs of hard registers so that register allocator
and RTL expressions can be improved independently.
This patch moves costs of hard register moves to the new hard_register
field and duplicates costs of moves which are also used for costs of RTL
expressions.
PR target/90878
* config/i386/i386.c (inline_memory_move_cost): Use hard_register
for costs of hard register moves.
(ix86_register_move_cost): Likewise.
* config/i386/i386.h (processor_costs): Move costs of hard
register moves to hard_register. Add int_load, int_store,
xmm_move, ymm_move, zmm_move, sse_to_integer, integer_to_sse,
sse_load, sse_store, sse_unaligned_load and sse_unaligned_store
for costs of RTL expressions.
* config/i386/x86-tune-costs.h: Move costs of hard register
moves to hard_register. Duplicate int_load, int_store,
xmm_move, ymm_move, zmm_move, sse_to_integer, integer_to_sse,
sse_load, sse_store for costs of RTL expressions.
From-SVN: r274543
Jonathan Wakely [Thu, 15 Aug 2019 16:07:27 +0000 (17:07 +0100)]
PR libstdc++/91456 make INVOKE<R> work with uncopyable prvalues
In C++17 a function can return a prvalue of a type that cannot be moved
or copied. The current implementation of std::is_invocable_r uses
std::is_convertible to test the conversion to R required by INVOKE<R>.
That fails for non-copyable prvalues, because std::is_convertible is
defined in terms of std::declval which uses std::add_rvalue_reference.
In C++17 conversion from R to R involves no copies and so is not the
same as conversion from R&& to R.
This commit changes std::is_invocable_r to check the conversion without
using std::is_convertible.
std::function also contains a similar check using std::is_convertible,
which can be fixed by simply reusing std::is_invocable_r (but because
std::is_invocable_r is not defined for C++11 it uses the underlying
std::__is_invocable_impl trait directly).
PR libstdc++/91456
* include/bits/std_function.h (__check_func_return_type): Remove.
(function::_Callable): Use std::__is_invocable_impl instead of
__check_func_return_type.
* include/std/type_traits (__is_invocable_impl): Add another defaulted
template parameter. Define a separate partial specialization for
INVOKE and INVOKE<void>. For INVOKE<R> replace is_convertible check
with a check that models delayed temporary materialization.
* testsuite/20_util/function/91456.cc: New test.
* testsuite/20_util/is_invocable/91456.cc: New test.
From-SVN: r274542
Martin Liska [Thu, 15 Aug 2019 15:32:46 +0000 (17:32 +0200)]
Add r274540 to LOCAL_PATCHES.
2019-08-15 Martin Liska <mliska@suse.cz>
* LOCAL_PATCHES: Add r274540
From-SVN: r274541
Martin Liska [Thu, 15 Aug 2019 15:31:46 +0000 (17:31 +0200)]
Reapply missing patch for libsanitizer.
2019-08-15 Martin Liska <mliska@suse.cz>
* tsan/tsan_rtl_ppc64.S: Reapply.
From-SVN: r274540
Richard Sandiford [Thu, 15 Aug 2019 14:26:14 +0000 (14:26 +0000)]
Remove TARGET_SETUP_INCOMING_VARARG_BOUNDS
TARGET_SETUP_INCOMING_VARARG_BOUNDS seems to be an unused vestige of the
MPX support.
2019-08-15 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* target.def (setup_incoming_vararg_bounds): Remove.
* doc/tm.texi.in (TARGET_SETUP_INCOMING_VARARG_BOUNDS): Remove.
* doc/tm.texi: Regenerate.
* targhooks.c (default_setup_incoming_vararg_bounds): Delete.
* targhooks.h (default_setup_incoming_vararg_bounds): Likewise.
* config/i386/i386.c (ix86_setup_incoming_vararg_bounds): Likewise.
(TARGET_SETUP_INCOMING_VARARG_BOUNDS): Likewise.
From-SVN: r274539
Iain Sandoe [Thu, 15 Aug 2019 14:13:10 +0000 (14:13 +0000)]
[libsanitizer] Fix PR bootstrap/91455
If a target does not support libbacktrace, it might still the include
for $(top_srcdir).
Regenerate the built files using automake-1.15.1
libsanitizer/
2019-08-15 Iain Sandoe <iain@sandoe.co.uk>
PR bootstrap/91455
* Makefile.in: Regenerated.
* aclocal.m4: Likewise.
* asan/Makefile.in: Likewise.
* configure: Likewise.
* interception/Makefile.in: Likewise.
* libbacktrace/Makefile.in: Likewise.
* lsan/Makefile.in: Likewise.
* sanitizer_common/Makefile.am: Include top_srcdir unconditionally.
* sanitizer_common/Makefile.in: Regenerated.
* tsan/Makefile.in: Likewise.
* ubsan/Makefile.in: Likewise.
From-SVN: r274538
Jozef Lawrynowicz [Thu, 15 Aug 2019 12:59:04 +0000 (12:59 +0000)]
MSP430: Fix lines over 80 characters long in config/msp430/*.{c,h} files
2019-08-15 Jozef Lawrynowicz <jozef.l@mittosystems.com>
MSP430: Fix lines over 80 characters long in
config/msp430/*.{c,h} files
* config/msp430/driver-msp430.c (msp430_select_cpu): Fix format
specifier in string.
(msp430_select_hwmult_lib): Split line more than 80 characters long.
* config/msp430/msp430-devices.c (msp430_extract_mcu_data): Remove
redundant old comment.
* config/msp430/msp430-protos.h (msp430_output_aligned_decl_common):
Split line more than 80 characters long.
* config/msp430/msp430.c (msp430_option_override): Likewise.
(msp430_return_in_memory): Likewise.
(msp430_gimplify_va_arg_expr): Likewise.
(TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P): Likewise.
(msp430_legitimate_constant): Likewise.
(TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS): Likewise.
(msp430_attr): Likewise.
(msp430_data_attr): Likewise.
(msp430_start_function): Likewise.
(gen_prefix): Likewise.
(msp430_init_sections): Likewise.
(msp430_select_section): Likewise.
(msp430_function_section): Likewise.
(msp430_unique_section): Likewise.
(msp430_output_aligned_decl_common): Likewise.
(msp430_do_not_relax_short_jumps): Likewise.
(msp430_init_builtins): Likewise.
(msp430_expand_delay_cycles): Likewise.
(msp430_expand_prologue): Likewise.
(msp430_expand_epilogue): Likewise.
(msp430_expand_helper): Likewise.
(msp430_split_movsi): Likewise.
(msp430_print_operand): Likewise.
(msp430_return_addr_rtx): Likewise.
(msp430x_extendhisi): Likewise.
* config/msp430/msp430.h (STARTFILE_SPEC): Likewise.
(ASM_SPEC): Likewise.
Remove very obvious comments.
(LIB_SPEC): Split line more than 80 characters long.
(EH_RETURN_HANDLER_RTX): Likewise.
(HARD_REGNO_CALLER_SAVE_MODE): Likewise.
From-SVN: r274537
Jozef Lawrynowicz [Thu, 15 Aug 2019 12:55:33 +0000 (12:55 +0000)]
MSP430: Fix whitespace errors and incorrect indentation in config/msp430/*.{c,h} files
2019-08-15 Jozef Lawrynowicz <jozef.l@mittosystems.com>
MSP430: Fix whitespace errors and incorrect indentation in
config/msp430/*.{c,h} files
* config/msp430/driver-msp430.c (msp430_select_cpu): Fix indentation.
(msp430_select_hwmult_lib): Likewise.
* config/msp430/msp430-devices.c (parse_devices_csv_1): Likewise.
(msp430_extract_mcu_data): Likewise.
(struct t_msp430_mcu_data): Likewise.
* config/msp430/msp430.c (struct machine_function): Remove whitespace
before left square bracket.
(msp430_option_override): Fix indentation.
(msp430_hard_regno_nregs_with_padding): Likewise.
(msp430_initial_elimination_offset): Likewise.
(msp430_special_register_convention_p): Remove whitespace before left
square bracket and after exclamation mark.
(msp430_evaluate_arg): Likewise.
(msp430_callee_copies): Fix indentation.
(msp430_gimplify_va_arg_expr): Likewise.
(msp430_function_arg_advance): Remove whitespace before left square
bracket.
(reg_ok_for_addr): Likewise.
(msp430_preserve_reg_p): Likewise.
(msp430_compute_frame_info): Likewise.
(msp430_asm_output_addr_const_extra): Add space between function name
and open parenthesis.
(has_section_name): Fix indentation.
(msp430_attr): Remove trailing whitespace.
(msp430_section_attr): Likewise.
(msp430_data_attr): Likewise.
(struct msp430_attribute_table): Fix comment and whitespace.
(msp430_start_function): Remove whitespace before left square bracket.
Add space between function name and open parenthesis.
(msp430_select_section): Remove trailing whitespace.
(msp430_section_type_flags): Remove trailing whitespace.
(msp430_unique_section): Remove space before closing parenthesis.
(msp430_output_aligned_decl_common): Change 8 spaces to a tab.
(msp430_builtins): Remove whitespace before left square bracket.
(msp430_init_builtins): Fix indentation.
(msp430_expand_prologue): Remove whitespace before left square bracket.
Remove space before closing parenthesis.
(msp430_expand_epilogue): Remove whitespace before left square bracket.
(msp430_split_movsi): Remove space before closing parenthesis.
(helper_function_name_mappings): Fix indentation.
(msp430_use_f5_series_hwmult): Fix whitespace.
(use_32bit_hwmult): Likewise.
(msp430_no_hwmult): Likewise.
(msp430_output_labelref): Remove whitespace before left square bracket.
(msp430_print_operand_raw): Likewise.
(msp430_print_operand_addr): Likewise.
(msp430_print_operand): Add two spaces after '.' in comment.
Fix trailing whitespace.
(msp430x_extendhisi): Fix indentation.
* config/msp430/msp430.h (TARGET_CPU_CPP_BUILTINS): Change 8 spaces to
tab.
(PC_REGNUM): Likewise.
(STACK_POINTER_REGNUM): Likewise.
(CC_REGNUM): Likewise.
From-SVN: r274536
Richard Biener [Thu, 15 Aug 2019 12:44:23 +0000 (12:44 +0000)]
re PR target/91454 (ICE in get_attr_avx_partial_xmm_update, at config/i386/i386.md:1804 since r274481)
2019-08-15 Richard Biener <rguenther@suse.de>
PR target/91454
* config/i386/i386-features.c (gen_gpr_to_xmm_move_src): New
helper.
(general_scalar_chain::make_vector_copies): Use it.
From-SVN: r274535
Jason Merrill [Thu, 15 Aug 2019 12:38:50 +0000 (08:38 -0400)]
Implement P0848R3, Conditionally Trivial Special Member Functions.
With Concepts, overloads of special member functions can differ in
constraints, and this paper clarifies how that affects class properties: if
a class has a more constrained trivial copy constructor and a less
constrained non-trivial copy constructor, it is still trivially copyable.
* tree.c (special_memfn_p): New.
* class.c (add_method): When overloading, hide ineligible special
member fns.
(check_methods): Set TYPE_HAS_COMPLEX_* here.
* decl.c (grok_special_member_properties): Not here.
* name-lookup.c (push_class_level_binding_1): Move overloaded
functions case down, accept FUNCTION_DECL as target_decl.
From-SVN: r274534
Richard Biener [Thu, 15 Aug 2019 12:05:31 +0000 (12:05 +0000)]
re PR tree-optimization/91445 (After memset, logical && operator produces false result, optimization level >=O1)
2019-08-15 Richard Biener <rguenther@suse.de>
PR tree-optimization/91445
* gcc.dg/torture/pr91445.c: New testcase.
From-SVN: r274533
Bernd Edlinger [Thu, 15 Aug 2019 11:37:21 +0000 (11:37 +0000)]
function.c (assign_parm_setup_reg): Handle misaligned stack arguments.
2019-08-15 Bernd Edlinger <bernd.edlinger@hotmail.de>
* function.c (assign_parm_setup_reg): Handle misaligned stack arguments.
From-SVN: r274531
Martin Liska [Thu, 15 Aug 2019 11:29:37 +0000 (13:29 +0200)]
Clean up dead condition for operators in DCE.
2019-08-15 Martin Liska <mliska@suse.cz>
* tree-ssa-dce.c (propagate_necessity): We can't reach now
operators with no arguments.
(eliminate_unnecessary_stmts): Likewise here.
From-SVN: r274529
Richard Biener [Thu, 15 Aug 2019 11:26:19 +0000 (11:26 +0000)]
c-common.c (c_stddef_cpp_builtins): When the GIMPLE FE is enabled, define __SIZETYPE__.
2019-08-15 Richard Biener <rguenther@suse.de>
c-family/
* c-common.c (c_stddef_cpp_builtins): When the GIMPLE FE is
enabled, define __SIZETYPE__.
* gcc.dg/pr80170.c: Adjust to use __SIZETYPE__.
From-SVN: r274528
Uros Bizjak [Thu, 15 Aug 2019 11:09:38 +0000 (13:09 +0200)]
* config/i386/i386.c (convertible_comparison_p): Fix argument declaration.
From-SVN: r274527
Uros Bizjak [Thu, 15 Aug 2019 10:55:52 +0000 (12:55 +0200)]
i386-features.c (general_scalar_chain::convert_insn): Revert 2019-08-14 change.
* config/i386/i386-features.c (general_scalar_chain::convert_insn)
<case COMPARE>: Revert 2019-08-14 change.
(convertible_comparison_p): Revert 2019-08-14 change. Return false
for (TARGET_64BIT || mode != DImode).
From-SVN: r274526
Aldy Hernandez [Thu, 15 Aug 2019 10:45:41 +0000 (10:45 +0000)]
Enforce canonicalization in value_range.
From-SVN: r274525
Richard Sandiford [Thu, 15 Aug 2019 09:23:06 +0000 (09:23 +0000)]
Add missing check for BUILT_IN_MD (PR 91444)
In this PR we were passing an ordinary non-built-in function to
targetm.vectorize.builtin_md_vectorized_function, which is only
supposed to handle BUILT_IN_MD.
2019-08-15 Richard Sandiford <richard.sandiford@arm.com>
gcc/
PR middle-end/91444
* tree-vect-stmts.c (vectorizable_call): Check that the function
is a BUILT_IN_MD function before passing it to
targetm.vectorize.builtin_md_vectorized_function.
From-SVN: r274524
Richard Sandiford [Thu, 15 Aug 2019 09:00:22 +0000 (09:00 +0000)]
[AArch64] Add a aarch64_sve_mode_p query
This patch adds an exported function for testing whether a mode is
an SVE mode. The ACLE will make more use of it, but there's already
one place that can benefit.
2019-08-15 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/aarch64-protos.h (aarch64_sve_mode_p): Declare.
* config/aarch64/aarch64.c (aarch64_sve_mode_p): New function.
(aarch64_select_early_remat_modes): Use it.
From-SVN: r274523
Richard Sandiford [Thu, 15 Aug 2019 08:57:29 +0000 (08:57 +0000)]
[AArch64] Fix predicate alignment for fixed-length SVE
aarch64_simd_vector_alignment was only giving predicates 16-bit
alignment in VLA mode, not VLS mode. I think the problem is latent
because we can't yet create an ABI predicate type, but it seemed worth
fixing in a standalone patch rather than as part of the main ACLE series.
The ACLE patches have tests for this.
2019-08-15 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/aarch64.c (aarch64_simd_vector_alignment): Return
16 for SVE predicates even if they are fixed-length.
From-SVN: r274522
Richard Sandiford [Thu, 15 Aug 2019 08:55:00 +0000 (08:55 +0000)]
[AArch64] Tweak operand choice for SVE predicate AND
SVE defines an assembly alias:
MOV pa.B, pb/Z, pc.B -> AND pa.B. pb/Z, pc.B, pc.B
Our and<mode>3 pattern was instead using the functionally-equivalent:
AND pa.B. pb/Z, pb.B, pc.B
^^^^
This patch duplicates pc.B instead so that the alias can be seen
in disassembly.
I wondered about using the alias in the pattern instead, but using AND
explicitly seems to fit better with the pattern name and surrounding code.
2019-08-15 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/aarch64-sve.md (and<PRED_ALL:mode>3): Make the
operand order match the MOV /Z alias.
From-SVN: r274521
Richard Sandiford [Thu, 15 Aug 2019 08:52:28 +0000 (08:52 +0000)]
[AArch64] Pass a pattern to aarch64_output_sve_cnt_immediate
This patch makes us always pass an explicit vector pattern to
aarch64_output_sve_cnt_immediate, rather than assuming it's ALL.
The ACLE patches need to be able to pass in other values.
2019-08-15 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/aarch64.c (aarch64_output_sve_cnt_immediate): Take
the vector pattern as an aarch64_svpattern argument. Update the
overloaded caller accordingly.
(aarch64_output_sve_scalar_inc_dec): Update call accordingly.
(aarch64_output_sve_vector_inc_dec): Likewise.
From-SVN: r274520
Richard Sandiford [Thu, 15 Aug 2019 08:50:00 +0000 (08:50 +0000)]
[AArch64] Optimise aarch64_add_offset for SVE VL constants
aarch64_add_offset contains code to decompose all SVE VL-based constants
into native operations. The worst-case fallback is to load the number
of SVE elements into a register and use a general multiplication.
This patch improves that fallback by reusing expand_mult if
can_create_pseudo_p, rather than emitting a MULT pattern directly.
In order to increase the chances of being able to use a simple
add-and-shift, the patch also tries to compute VG * the lowest set
bit of the multiplier, rather than always using CNTD as the basis
for the multiplication path.
This is tested by the ACLE patches but is really an independent
improvement.
2019-08-15 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/aarch64.c (aarch64_add_offset): In the fallback
multiplication case, try to compute VG * (lowest set bit) directly
rather than always basing the multiplication on VG. Use
expand_mult for the multiplication if we can.
gcc/testsuite/
* gcc.target/aarch64/sve/loop_add_4.c: Expect 10 INCWs and
INCDs rather than 8.
From-SVN: r274519
Richard Sandiford [Thu, 15 Aug 2019 08:47:25 +0000 (08:47 +0000)]
[AArch64] Rework SVE INC/DEC handling
The scalar addition patterns allowed all the VL constants that
ADDVL and ADDPL allow, but wrote the instructions as INC or DEC
if possible (i.e. adding or subtracting a number of elements * [1, 16]
when the source and target registers the same). That works for the
cases that the autovectoriser needs, but there are a few constants
that INC and DEC can handle but ADDPL and ADDVL can't. E.g.:
inch x0, all, mul #9
is not a multiple of the number of bytes in an SVE register, and so
can't use ADDVL. It represents 36 times the number of bytes in an
SVE predicate, putting it outside the range of ADDPL.
This patch therefore adds separate alternatives for INC and DEC,
tied to a new Uai constraint. It also adds an explicit "scalar"
or "vector" to the function names, to avoid a clash with the
existing support for vector INC and DEC.
2019-08-15 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/aarch64-protos.h
(aarch64_sve_scalar_inc_dec_immediate_p): Declare.
(aarch64_sve_inc_dec_immediate_p): Rename to...
(aarch64_sve_vector_inc_dec_immediate_p): ...this.
(aarch64_output_sve_addvl_addpl): Take a single rtx argument.
(aarch64_output_sve_scalar_inc_dec): Declare.
(aarch64_output_sve_inc_dec_immediate): Rename to...
(aarch64_output_sve_vector_inc_dec): ...this.
* config/aarch64/aarch64.c (aarch64_sve_scalar_inc_dec_immediate_p)
(aarch64_output_sve_scalar_inc_dec): New functions.
(aarch64_output_sve_addvl_addpl): Remove the base and offset
arguments. Only handle true ADDVL and ADDPL instructions;
don't emit an INC or DEC.
(aarch64_sve_inc_dec_immediate_p): Rename to...
(aarch64_sve_vector_inc_dec_immediate_p): ...this.
(aarch64_output_sve_inc_dec_immediate): Rename to...
(aarch64_output_sve_vector_inc_dec): ...this. Update call to
aarch64_sve_vector_inc_dec_immediate_p.
* config/aarch64/predicates.md (aarch64_sve_scalar_inc_dec_immediate)
(aarch64_sve_plus_immediate): New predicates.
(aarch64_pluslong_operand): Accept aarch64_sve_plus_immediate
rather than aarch64_sve_addvl_addpl_immediate.
(aarch64_sve_inc_dec_immediate): Rename to...
(aarch64_sve_vector_inc_dec_immediate): ...this. Update call to
aarch64_sve_vector_inc_dec_immediate_p.
(aarch64_sve_add_operand): Update accordingly.
* config/aarch64/constraints.md (Uai): New constraint.
(vsi): Update call to aarch64_sve_vector_inc_dec_immediate_p.
* config/aarch64/aarch64.md (add<GPI:mode>3): Don't force the second
operand into a register if it satisfies aarch64_sve_plus_immediate.
(*add<GPI:mode>3_aarch64, *add<GPI:mode>3_poly_1): Add an alternative
for Uai. Update calls to aarch64_output_sve_addvl_addpl.
* config/aarch64/aarch64-sve.md (add<mode>3): Call
aarch64_output_sve_vector_inc_dec instead of
aarch64_output_sve_inc_dec_immediate.
From-SVN: r274518
Richard Sandiford [Thu, 15 Aug 2019 08:43:36 +0000 (08:43 +0000)]
[AArch64] Rework SVE REV[BHW] patterns
The current SVE REV patterns follow the AArch64 scheme, in which
UNSPEC_REV<NN> reverses elements within an <NN>-bit granule.
E.g. UNSPEC_REV64 on VNx8HI reverses the four 16-bit elements
within each 64-bit granule.
The native SVE scheme is the other way around: UNSPEC_REV64 is seen
as an operation on 64-bit elements, with REVB swapping bytes within
the elements, REVH swapping halfwords, and so on. This fits SVE more
naturally because the operation can then be predicated per <NN>-bit
granule/element.
Making the patterns use the Advanced SIMD scheme was more natural
when all we cared about were permutes, since we could then use
the source and target of the permute in their original modes.
However, the ACLE does need patterns that follow the native scheme,
treating them as operations on integer elements. This patch defines
the patterns that way instead and updates the existing uses to match.
This also brings in a couple of helper routines from the ACLE branch.
2019-08-15 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/iterators.md (UNSPEC_REVB, UNSPEC_REVH)
(UNSPEC_REVW): New constants.
(elem_bits): New mode attribute.
(SVE_INT_UNARY): New int iterator.
(optab): Handle UNSPEC_REV[BHW].
(sve_int_op): New int attribute.
(min_elem_bits): Handle VNx16QI and the predicate modes.
* config/aarch64/aarch64-sve.md (*aarch64_sve_rev64<mode>)
(*aarch64_sve_rev32<mode>, *aarch64_sve_rev16vnx16qi): Delete.
(@aarch64_pred_<SVE_INT_UNARY:optab><SVE_I:mode>): New pattern.
* config/aarch64/aarch64.c (aarch64_sve_data_mode): New function.
(aarch64_sve_int_mode, aarch64_sve_rev_unspec): Likewise.
(aarch64_split_sve_subreg_move): Use UNSPEC_REV[BHW] instead of
unspecs based on the total width of the reversed data.
(aarch64_evpc_rev_local): Likewise (for SVE only). Use a
reinterpret followed by a subreg on big-endian targets.
gcc/testsuite/
* gcc.target/aarch64/sve/revb_1.c: Restrict to little-endian targets.
Avoid including stdint.h.
* gcc.target/aarch64/sve/revh_1.c: Likewise.
* gcc.target/aarch64/sve/revw_1.c: Likewise.
* gcc.target/aarch64/sve/revb_2.c: New big-endian test.
* gcc.target/aarch64/sve/revh_2.c: Likewise.
* gcc.target/aarch64/sve/revw_2.c: Likewise.
From-SVN: r274517
Richard Sandiford [Thu, 15 Aug 2019 08:39:42 +0000 (08:39 +0000)]
[AArch64] Add more SVE FMLA and FMAD /z alternatives
This patch makes the floating-point conditional FMA patterns provide the
same /z alternatives as the integer patterns added by a previous patch.
We can handle cases in which individual inputs are allocated to the same
register as the output, so we don't need to force all registers to be
different.
2019-08-15 Richard Sandiford <richard.sandiford@arm.com>
Kugan Vivekanandarajah <kugan.vivekanandarajah@linaro.org>
gcc/
* config/aarch64/aarch64-sve.md
(*cond_<SVE_COND_FP_TERNARY:optab><SVE_F:mode>_any): Add /z
alternatives in which one of the inputs is in the same register
as the output.
gcc/testsuite/
* gcc.target/aarch64/sve/cond_mla_5.c: Allow FMAD as well as FMLA
and FMSB as well as FMLS.
Co-Authored-By: Kugan Vivekanandarajah <kuganv@linaro.org>
From-SVN: r274516
Richard Sandiford [Thu, 15 Aug 2019 08:37:14 +0000 (08:37 +0000)]
[AArch64] Add MOVPRFX alternatives for SVE EXT patterns
We use EXT both to implement vec_extract for large indices and as a
permute. In both cases we can use MOVPRFX to handle the case in which
the first input and output can't be tied.
2019-08-15 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/aarch64-sve.md (*vec_extract<mode><Vel>_ext)
(*aarch64_sve_ext<mode>): Add MOVPRFX alternatives.
gcc/testsuite/
* gcc.target/aarch64/sve/ext_2.c: Expect a MOVPRFX.
* gcc.target/aarch64/sve/ext_3.c: New test.
From-SVN: r274515
Richard Sandiford [Thu, 15 Aug 2019 08:34:40 +0000 (08:34 +0000)]
[AArch64] Remove unneeded FSUB alternatives and add a new one
The floating-point subtraction patterns don't need to handle
subtraction of constants, since those go through the addition
patterns instead. There was a missing MOVPRFX alternative for
FSUBR though.
2019-08-15 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/aarch64-sve.md (*sub<SVE_F:mode>3): Remove immediate
FADD and FSUB alternatives. Add a MOVPRFX alternative for FSUBR.
From-SVN: r274514
Richard Sandiford [Thu, 15 Aug 2019 08:32:07 +0000 (08:32 +0000)]
[AArch64] Add more unpredicated MOVPRFX alternatives
FABD and some immediate instructions were missing MOVPRFX alternatives.
This is tested by the ACLE patches but is really an independent improvement.
2019-08-15 Richard Sandiford <richard.sandiford@arm.com>
Kugan Vivekanandarajah <kugan.vivekanandarajah@linaro.org>
gcc/
* config/aarch64/aarch64-sve.md (add<SVE_I:mode>3, sub<SVE_I:mode>3)
(<LOGICAL:optab><SVE_I:mode>3, *add<SVE_F:mode>3, *mul<SVE_F:mode>3)
(*fabd<SVE_F:mode>3): Add more MOVPRFX alternatives.
Co-Authored-By: Kugan Vivekanandarajah <kuganv@linaro.org>
From-SVN: r274513
Richard Sandiford [Thu, 15 Aug 2019 08:29:11 +0000 (08:29 +0000)]
[AArch64] Use SVE reversed shifts in preference to MOVPRFX
This patch makes us use reversed SVE shifts when the first operand
can't be tied to the output but the second can. This is tested
more thoroughly by the ACLE patches but is really an independent
improvement.
2019-08-15 Richard Sandiford <richard.sandiford@arm.com>
Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
gcc/
* config/aarch64/aarch64-sve.md (*v<ASHIFT:optab><SVE_I:mode>3):
Add an alternative that uses reversed shifts.
gcc/testsuite/
* gcc.target/aarch64/sve/shift_1.c: Accept reversed shifts.
Co-Authored-By: Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
From-SVN: r274512
Kyrylo Tkachov [Thu, 15 Aug 2019 08:26:50 +0000 (08:26 +0000)]
[aarch64] Use neoversen1 tuning struct for -mcpu=cortex-a76
The neoversen1 tuning struct gives better performance on the Cortex-A76, so use that.
The only difference from the current tuning is the function and label alignment settings.
This gives about 1.3% improvement on SPEC2006 int and 0.3% on SPEC2006 fp.
* config/aarch64/aarch64-cores.def (cortex-a76): Use neoversen1 tuning
struct.
From-SVN: r274511
Richard Sandiford [Thu, 15 Aug 2019 08:25:47 +0000 (08:25 +0000)]
[AArch64] Add a commutativity marker to the SVE [SU]ABD patterns
This will be tested by the ACLE patches, but it's really an
independent improvement.
2019-08-15 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/aarch64-sve.md (aarch64_<su>abd<mode>_3): Add
a commutativity marker.
From-SVN: r274510
Richard Sandiford [Thu, 15 Aug 2019 08:22:07 +0000 (08:22 +0000)]
[AArch64] Use SVE MLA, MLS, MAD and MSB for conditional arithmetic
This patch uses predicated MLA, MLS, MAD and MSB to implement
conditional "FMA"s on integers. This also requires providing
the unpredicated optabs (fma and fnma) since otherwise
tree-ssa-math-opts.c won't try to use the conditional forms.
We still want to use shifts and adds in preference to multiplications,
so the patch makes the optab expanders check for that.
The tests cover floating-point types too, which are already handled,
and which were already tested to some extent by gcc.dg/vect.
2019-08-15 Richard Sandiford <richard.sandiford@arm.com>
Kugan Vivekanandarajah <kugan.vivekanandarajah@linaro.org>
gcc/
* config/aarch64/aarch64-protos.h (aarch64_prepare_sve_int_fma)
(aarch64_prepare_sve_cond_int_fma): Declare.
* config/aarch64/aarch64.c (aarch64_convert_mult_to_shift)
(aarch64_prepare_sve_int_fma): New functions.
(aarch64_prepare_sve_cond_int_fma): Likewise.
* config/aarch64/aarch64-sve.md
(cond_<SVE_INT_BINARY:optab><SVE_I:mode>): Add a "@" marker.
(fma<SVE_I:mode>4, cond_fma<SVE_I:mode>, *cond_fma<SVE_I:mode>_2)
(*cond_fma<SVE_I:mode>_4, *cond_fma<SVE_I:mode>_any, fnma<SVE_I:mode>4)
(cond_fnma<SVE_I:mode>, *cond_fnma<SVE_I:mode>_2)
(*cond_fnma<SVE_I:mode>_4, *cond_fnma<SVE_I:mode>_any): New patterns.
(*madd<mode>): Rename to...
(*fma<mode>4): ...this.
(*msub<mode>): Rename to...
(*fnma<mode>4): ...this.
gcc/testsuite/
* gcc.target/aarch64/sve/cond_mla_1.c: New test.
* gcc.target/aarch64/sve/cond_mla_1_run.c: Likewise.
* gcc.target/aarch64/sve/cond_mla_2.c: Likewise.
* gcc.target/aarch64/sve/cond_mla_2_run.c: Likewise.
* gcc.target/aarch64/sve/cond_mla_3.c: Likewise.
* gcc.target/aarch64/sve/cond_mla_3_run.c: Likewise.
* gcc.target/aarch64/sve/cond_mla_4.c: Likewise.
* gcc.target/aarch64/sve/cond_mla_4_run.c: Likewise.
* gcc.target/aarch64/sve/cond_mla_5.c: Likewise.
* gcc.target/aarch64/sve/cond_mla_5_run.c: Likewise.
* gcc.target/aarch64/sve/cond_mla_6.c: Likewise.
* gcc.target/aarch64/sve/cond_mla_6_run.c: Likewise.
* gcc.target/aarch64/sve/cond_mla_7.c: Likewise.
* gcc.target/aarch64/sve/cond_mla_7_run.c: Likewise.
* gcc.target/aarch64/sve/cond_mla_8.c: Likewise.
* gcc.target/aarch64/sve/cond_mla_8_run.c: Likewise.
Co-Authored-By: Kugan Vivekanandarajah <kuganv@linaro.org>
From-SVN: r274509
Richard Sandiford [Thu, 15 Aug 2019 08:18:03 +0000 (08:18 +0000)]
[AArch64] Use SVE binary immediate instructions for conditional arithmetic
This patch lets us use the immediate forms of FADD, FSUB, FSUBR,
FMUL, FMAXNM and FMINNM for conditional arithmetic. (We already
use them for normal unconditional arithmetic.)
2019-08-15 Richard Sandiford <richard.sandiford@arm.com>
Kugan Vivekanandarajah <kugan.vivekanandarajah@linaro.org>
gcc/
* config/aarch64/aarch64.c (aarch64_print_vector_float_operand):
Print 2.0 naturally.
(aarch64_sve_float_mul_immediate_p): Return true for 2.0.
* config/aarch64/predicates.md
(aarch64_sve_float_negated_arith_immediate): New predicate,
renamed from aarch64_sve_float_arith_with_sub_immediate.
(aarch64_sve_float_arith_with_sub_immediate): Test for both
positive and negative constants.
(aarch64_sve_float_arith_with_sub_operand): Redefine as a register
or an aarch64_sve_float_arith_with_sub_immediate.
* config/aarch64/constraints.md (vsN): Use
aarch64_sve_float_negated_arith_immediate.
* config/aarch64/iterators.md (SVE_COND_FP_BINARY_I1): New int
iterator.
(sve_pred_fp_rhs2_immediate): New int attribute.
* config/aarch64/aarch64-sve.md
(cond_<SVE_COND_FP_BINARY:optab><SVE_F:mode>): Use
sve_pred_fp_rhs1_operand and sve_pred_fp_rhs2_operand.
(*cond_<SVE_COND_FP_BINARY_I1:optab><SVE_F:mode>_2_const)
(*cond_<SVE_COND_FP_BINARY_I1:optab><SVE_F:mode>_any_const)
(*cond_add<SVE_F:mode>_2_const, *cond_add<SVE_F:mode>_any_const)
(*cond_sub<mode>_3_const, *cond_sub<mode>_any_const): New patterns.
gcc/testsuite/
* gcc.target/aarch64/sve/cond_fadd_1.c: New test.
* gcc.target/aarch64/sve/cond_fadd_1_run.c: Likewise.
* gcc.target/aarch64/sve/cond_fadd_2.c: Likewise.
* gcc.target/aarch64/sve/cond_fadd_2_run.c: Likewise.
* gcc.target/aarch64/sve/cond_fadd_3.c: Likewise.
* gcc.target/aarch64/sve/cond_fadd_3_run.c: Likewise.
* gcc.target/aarch64/sve/cond_fadd_4.c: Likewise.
* gcc.target/aarch64/sve/cond_fadd_4_run.c: Likewise.
* gcc.target/aarch64/sve/cond_fsubr_1.c: Likewise.
* gcc.target/aarch64/sve/cond_fsubr_1_run.c: Likewise.
* gcc.target/aarch64/sve/cond_fsubr_2.c: Likewise.
* gcc.target/aarch64/sve/cond_fsubr_2_run.c: Likewise.
* gcc.target/aarch64/sve/cond_fsubr_3.c: Likewise.
* gcc.target/aarch64/sve/cond_fsubr_3_run.c: Likewise.
* gcc.target/aarch64/sve/cond_fsubr_4.c: Likewise.
* gcc.target/aarch64/sve/cond_fsubr_4_run.c: Likewise.
* gcc.target/aarch64/sve/cond_fmaxnm_1.c: Likewise.
* gcc.target/aarch64/sve/cond_fmaxnm_1_run.c: Likewise.
* gcc.target/aarch64/sve/cond_fmaxnm_2.c: Likewise.
* gcc.target/aarch64/sve/cond_fmaxnm_2_run.c: Likewise.
* gcc.target/aarch64/sve/cond_fmaxnm_3.c: Likewise.
* gcc.target/aarch64/sve/cond_fmaxnm_3_run.c: Likewise.
* gcc.target/aarch64/sve/cond_fmaxnm_4.c: Likewise.
* gcc.target/aarch64/sve/cond_fmaxnm_4_run.c: Likewise.
* gcc.target/aarch64/sve/cond_fminnm_1.c: Likewise.
* gcc.target/aarch64/sve/cond_fminnm_1_run.c: Likewise.
* gcc.target/aarch64/sve/cond_fminnm_2.c: Likewise.
* gcc.target/aarch64/sve/cond_fminnm_2_run.c: Likewise.
* gcc.target/aarch64/sve/cond_fminnm_3.c: Likewise.
* gcc.target/aarch64/sve/cond_fminnm_3_run.c: Likewise.
* gcc.target/aarch64/sve/cond_fminnm_4.c: Likewise.
* gcc.target/aarch64/sve/cond_fminnm_4_run.c: Likewise.
* gcc.target/aarch64/sve/cond_fmul_1.c: Likewise.
* gcc.target/aarch64/sve/cond_fmul_1_run.c: Likewise.
* gcc.target/aarch64/sve/cond_fmul_2.c: Likewise.
* gcc.target/aarch64/sve/cond_fmul_2_run.c: Likewise.
* gcc.target/aarch64/sve/cond_fmul_3.c: Likewise.
* gcc.target/aarch64/sve/cond_fmul_3_run.c: Likewise.
* gcc.target/aarch64/sve/cond_fmul_4.c: Likewise.
* gcc.target/aarch64/sve/cond_fmul_4_run.c: Likewise.
Co-Authored-By: Kugan Vivekanandarajah <kuganv@linaro.org>
From-SVN: r274508