gcc.git
7 years agore PR target/82108 (Wrong vectorized code generated for x86_64)
Richard Biener [Wed, 6 Sep 2017 12:31:52 +0000 (12:31 +0000)]
re PR target/82108 (Wrong vectorized code generated for x86_64)

2017-09-06  Richard Biener  <rguenther@suse.de>

PR tree-optimization/82108
* tree-vect-stmts.c (vectorizable_load): Fix pointer adjustment
for gap in the non-permutation SLP case.

* gcc.dg/vect/pr82108.c: New testcase.

From-SVN: r251790

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 12:27:15 +0000 (14:27 +0200)]
[multiple changes]

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* sem_prag.adb (Check_Postcondition_Use_In_Inlined_Subprogram):
Do not warn on conditions that are not obeyed for Inline_Always
subprograms, when assertions are not enabled.

2017-09-06  Arnaud Charlet  <charlet@adacore.com>

* sem_util.adb (Unique_Entity): For abstract states return their
non-limited view.

2017-09-06  Bob Duff  <duff@adacore.com>

* sem_ch12.adb (Copy_Generic_Node): When we copy a node
that is a proper body corresponding to a stub, we defer the
adjustment of the sloc until after the correct adjustment has
been computed. Otherwise, Adjust_Instantiation_Sloc will ignore
the adjustment, because it will be outside the range in (the old,
incorrect) S_Adjustment.
* inline.adb: Use named notation for readability and uniformity.
* sinput-l.adb: Minor improvements to debugging output printed
for Debug_Flag_L.
* sinput-l.ads (Create_Instantiation_Source): Minor comment
correction.

2017-09-06  Vincent Celier  <celier@adacore.com>

* make.adb: Do not invoke gprbuild for -bargs -P.

2017-09-06  Sylvain Dailler  <dailler@adacore.com>

* sem_eval.adb (Compile_Time_Known_Value_Or_Aggr): Adding a
case when Op is of kind N_Qualified_Expression. In this case,
the function is called recursively on the subexpression like in
other cases.
* make.adb: Minor reformatting

2017-09-06  Justin Squirek  <squirek@adacore.com>

* einfo.adb (Set_Linker_Section_Pragma): Modify
Set_Linker_Section_Pragma to be consistant with the "getter"
Linker_Section_Pragma.
* exp_ch5.adb (Expand_Formal_Container_Loop): Add proper error
checking for container loops so that the index cursor is not
directly changable by the user with the use of E_Loop_Parameter.
* sem_ch5.adb (Analyze_Block_Statement): Revert previous change.
* sem_warn.adb (Check_References): Revert previous change.

From-SVN: r251789

7 years agotrans.c (gnat_to_gnu): Try again to translate the prefix after the field if it is...
Eric Botcazou [Wed, 6 Sep 2017 12:23:36 +0000 (12:23 +0000)]
trans.c (gnat_to_gnu): Try again to translate the prefix after the field if it is incomplete.

2017-09-06  Eric Botcazou  <ebotcazou@adacore.com>

* gcc-interface/trans.c (gnat_to_gnu) <N_Selected_Component>: Try
again to translate the prefix after the field if it is incomplete.

From-SVN: r251788

7 years agoMakefile.in: Remove the Project Manager from the GNAT tools.
Vincent Celier [Wed, 6 Sep 2017 12:18:24 +0000 (12:18 +0000)]
Makefile.in: Remove the Project Manager from the GNAT tools.

2017-09-06  Vincent Celier  <celier@adacore.com>

        * gcc-interface/Makefile.in: Remove the Project Manager from the GNAT
tools.

From-SVN: r251787

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 12:16:32 +0000 (14:16 +0200)]
[multiple changes]

2017-09-06  Bob Duff  <duff@adacore.com>

* exp_util.adb (Is_Displace_Call): Make sure it works for indirect
calls and the like.

2017-09-06  Yannick Moy  <moy@adacore.com>

* sem_prag.adb (Analyze_Depends_Global): Reinforce test on object
declarations to only consider valid uses of Global/Depends those on
single concurrent objects.

2017-09-06  Eric Botcazou  <ebotcazou@adacore.com>

* sem_ch13.adb (Check_Record_Representation_Clause): Give an
error as soon as one of the specified components overlaps the
parent field.

2017-09-06  Arnaud Charlet  <charlet@adacore.com>

* sem_prag.ads: minor fix typo in comment.

2017-09-06  Justin Squirek  <squirek@adacore.com>

* sem_ch5.adb (Analyze_Block_Statement): Verify a block comes
from source before checking source references.
* sem_warn.adb (Check_References): Add check for internal block
before recursing.

2017-09-06  Vincent Celier  <celier@adacore.com>

* make.adb, makeusg.adb, switch-m.adb, switch-m.ads, make_util.adb,
make_util.ads, sinput.adb, sinput.ads, clean.adb, gnatls.adb,
gnatname.adb: Remove the Project Manager from the GNAT tools.

2017-09-06  Bob Duff  <duff@adacore.com>

* sem_util.ads: Minor comment fix.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* sem_ch12.adb (Analyze_Associations, case of Formal_Package):
Generate a freeze node for the actual of a formal package, if
the actual is declared in the same unit and has a corresponding
body, to prevent the current instance from being frozen before
the actual is.

From-SVN: r251786

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 12:05:48 +0000 (14:05 +0200)]
[multiple changes]

2017-09-06  Eric Botcazou  <ebotcazou@adacore.com>

* sem_ch7.adb (Entity_Table_Size): Change to nearest prime number.

2017-09-06  Yannick Moy  <moy@adacore.com>

* sem_warn.adb: Minor refactoring.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* einfo.ads, einfo.adb (Get_Classwwide_Pragma): New utility,
to retrieve the inherited classwide precondition/postcondition
of a subprogram.
* freeze.adb (Freeze_Entity): Use Get_Classwide_Pragma when
freezing a subprogram, to complete the generation of the
corresponding checking code.

2017-09-06  Eric Botcazou  <ebotcazou@adacore.com>

* inline.adb (Analyze_Inlined_Bodies): Remove restriction on
loading of parent body with a with clause for the main unit.
* gcc-interface/decl.c (defer_limited_with_list): Document
new usage.
(gnat_to_gnu_entity) <E_Access_Type>: Handle
completed Taft Amendment types declared in external units like
types from limited with clauses.  Adjust final processing of
defer_limited_with_list accordingly.

2017-09-06  Hristian Kirtchev  <kirtchev@adacore.com>

* exp_util.adb (Is_Controlled_Indexing): New routine.
(Is_Displace_Call): Use routine Strip to remove indirections.
(Is_Displacement_Of_Object_Or_Function_Result): Code clean up. Add a
missing case of controlled generalized indexing.
(Is_Source_Object): Use routine Strip to remove indirections.
(Strip): New routine.

2017-09-06  Bob Duff  <duff@adacore.com>

* sysdep.c (__gnat_has_cap_sys_nice): If HAVE_CAPABILITY is defined,
we include the proper header. Otherwise, we just declare the necessary
things from the capabilities library. This is so we can build on
machines without that library, while still enabling that library.
At run time, we're using weak symbols, so __gnat_has_cap_sys_nice will
simply return 0 if the library is not present, or not included
in the link.

2017-09-06  Pierre-Marie de Rodat  <derodat@adacore.com>

* exp_dbug.adb (Debug_Renaming_Declaration): Do not create an encoding
for renamings that involve function calls in prefix form.

2017-09-06  Bob Duff  <duff@adacore.com>

* sem_ch3.adb (Analyze_Subtype_Declaration):
Set Has_Delayed_Freeze on a subtype of an incomplete type.

2017-09-06  Pierre-Marie de Rodat  <derodat@adacore.com>

* par_sco.adb (Extend_Statement_Sequence): When the accept statement
has no parameter specification and no entry index, use the entry name
as the end of the generated SCO statement.

From-SVN: r251785

7 years agoexp_util.adb (Side_Effect_Free): For CodePeer (only) treat uses of 'Image and related...
Steve Baird [Wed, 6 Sep 2017 12:01:13 +0000 (12:01 +0000)]
exp_util.adb (Side_Effect_Free): For CodePeer (only) treat uses of 'Image and related attributes as having side...

2017-09-06  Steve Baird  <baird@adacore.com>

* exp_util.adb (Side_Effect_Free): For CodePeer (only) treat
uses of 'Image and related attributes as having side effects in
order to avoid replicating such uses.
* pprint.ads (Expression_Image) Add new generic formal flag
Hide_Temp_Derefs.  The flag defaults to False; CodePeer will
(eventually) override the default.
* pprint.adb (Expression_Image) If the new flag is set, then
suppress the ".all" suffix when displaying a dereference whose
prefix is a use of a value-capturing compiler temp of the sort
generated by Expr_Util.Remove_Side_Effects .
* exp_attr.adb, g-catiio.adb, inline.adb, sem_attr.adb, sem_ch13.adb,
sem_ch7.adb, sem_dim.adb, sem_util.adb, sem_util.ads, sem_warn.adb:
Minor reformatting.
* inline.adb: Minor wording change.

From-SVN: r251784

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 11:56:31 +0000 (13:56 +0200)]
[multiple changes]

2017-09-06  Eric Botcazou  <ebotcazou@adacore.com>

* sem_ch7.adb: Update comment.

2017-09-06  Yannick Moy  <moy@adacore.com>

* einfo.adb, einfo.ads (Is_Subprogram_Or_Entry): New predicate.
* inline.adb (Can_Be_Inlined_In_GNATprove_Mode): Use new function.
* sem_util.adb, sem_util.ads (Within_Protected_Type): Renaming
with slight modification from Is_Subp_Or_Entry_Inside_Protected,
so that applies to any entity.

2017-09-06  Yannick Moy  <moy@adacore.com>

* sem_ch3.adb (Derived_Type_Declaration): Use
Incomplete_Or_Partial_View rather than local Find_Partial_View.

2017-09-06  Javier Miranda  <miranda@adacore.com>

* g-catiio.ads, g-catiio.adb (Value): Extended to parse an UTC time
following ISO-8861.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* sem_dim.adb (Analyze_Dimension): In an instance, a type
conversion takes its dimensions from the expression, not from
the context type.
(Dimensions_Of_Operand): Ditto.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* exp_ch6.adb (Expand_Call_Helper): Do not optimize calls to
null procedures when GNAT coverage is used, so that their (empty)
bodies are properly covered.

2017-09-06  Bob Duff  <duff@adacore.com>

* sem_ch13.adb (Resolve_Aspect_Expressions): If
the entity is a type with discriminants, make the discriminants
directly visible in aspect clauses.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* sem_res.adb (Resolve_Arithmentic_Op): If both operands are
Universal_Real and the context is a floating-point type, resolve
both operands to the target type.

From-SVN: r251783

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 11:52:28 +0000 (13:52 +0200)]
[multiple changes]

2017-09-06  Hristian Kirtchev  <kirtchev@adacore.com>

* a-comlin.adb, exp_aggr.adb, exp_ch6.adb, frontend.adb, gnatbind.adb,
sem_ch3.adb, sem_util.adb: Minor reformatting.

2017-09-06  Yannick Moy  <moy@adacore.com>

* freeze.adb (Check_Inherited_Conditions): Rewriting
of inherited preconditions and postconditions should only occur
in GNATprove mode, that is, when GNATprove_Mode is True, not to
be confused with SPARK_Mode being On.

2017-09-06  Yannick Moy  <moy@adacore.com>

* sem_warn.adb (Check_References): Take into
account possibility of attribute reference as original node.

2017-09-06  Yannick Moy  <moy@adacore.com>

* exp_attr.adb (Expand_N_Attribute_Reference): Protect against invalid
use of attribute.

2017-09-06  Eric Botcazou  <ebotcazou@adacore.com>

* inline.adb (Split_Unconstrained_Function): Also set Is_Inlined
on the procedure created to encapsulate the body.
* sem_ch7.adb: Add with clause for GNAT.HTable.
(Entity_Table_Size): New constant.
(Entity_Hash): New function.
(Subprogram_Table): New instantiation of GNAT.Htable.Simple_HTable.
(Is_Subprogram_Ref): Rename into...
(Scan_Subprogram_Ref): ...this. Record references to subprograms in
the table instead of bailing out on them. Scan the value of constants
if it is not known at compile time.
(Contains_Subprograms_Refs): Rename into...
(Scan_Subprogram_Refs): ...this.
(Has_Referencer): Scan the body of all inlined subprograms. Reset the
Is_Public flag on subprograms if they are not actually referenced.
(Hide_Public_Entities): Beef up comment on the algorithm.
Reset the table of subprograms on entry.

From-SVN: r251781

7 years agoname-lookup.h (lookup_fnfields_slot_nolazy, [...]): Rename to ...
Nathan Sidwell [Wed, 6 Sep 2017 11:17:54 +0000 (11:17 +0000)]
name-lookup.h (lookup_fnfields_slot_nolazy, [...]): Rename to ...

* name-lookup.h (lookup_fnfields_slot_nolazy,
lookup_fnfields_slot): Rename to ...
(get_class_binding_direct, get_class_binding): ... here.
* name-lookup.c (lookup_fnfields_slot_nolazy,
lookup_fnfields_slot): Rename to ...
(get_class_binding_direct, get_class_binding): ... here.
* cp-tree.h (CLASSTYPE_CONSTRUCTORS, CLASSTYPE_DESTRUCTOR): Adjust.
* call.c (build_user_type_conversion_1): Adjust.
(has_trivial_copy_assign_p): Adjust.
(has_trivial_copy_p): Adjust.
* class.c (get_basefndecls) Adjust.
(vbase_has_user_provided_move_assign) Adjust.
(classtype_has_move_assign_or_move_ctor_p): Adjust.
(type_build_ctor_call, type_build_dtor_call): Adjust.
* decl.c (register_dtor_fn): Adjust.
* decl2.c (check_classfn): Adjust.
* pt.c (retrieve_specialization): Adjust.
(check_explicit_specialization): Adjust.
(do_class_deduction): Adjust.
* search.c (lookup_field_r): Adjust.
(look_for_overrides_here, lookup_conversions_r): Adjust.
* semantics.c (classtype_has_nothrow_assign_or_copy_p): Adjust.
* tree.c (type_has_nontrivial_copy_init): Adjust.
* method.c (lazily_declare_fn): Adjust comment.

From-SVN: r251780

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 11:02:33 +0000 (13:02 +0200)]
[multiple changes]

2017-09-06  Yannick Moy  <moy@adacore.com>

* inline.adb: Add comments to Can_Be_Inlined_In_GNATprove_Mode.

2017-09-06  Javier Miranda  <miranda@adacore.com>

* exp_aggr.adb (Component_Not_OK_For_Backend): The C backend
cannot handle a type conversion of an array as an aggregate
component.

2017-09-06  Bob Duff  <duff@adacore.com>

* g-comlin.adb (Try_Help): Remove ".exe" so we
get the same results on windows and unix.

2017-09-06  Justin Squirek  <squirek@adacore.com>

* exp_imgv.adb (Expand_Image_Attribute),
(Expand_Wide_Image_Attribute), (Expand_Wide_Wide_Image_Attribute):
Added case to handle new-style 'Image expansion
(Rewrite_Object_Image): Moved from exp_attr.adb
* exp_attr.adb (Expand_N_Attribute_Reference): Modified Image
attribute cases so that the relevant subprograms in exp_imgv.adb
handle all expansion.
(Rewrite_Object_Reference_Image): Moved to exp_imgv.adb
* sem_attr.adb (Analyze_Attribute): Modified Image attribute
cases to call common function Analyze_Image_Attribute.
(Analyze_Image_Attribute): Created as a common path for all
image attributes (Check_Object_Reference_Image): Removed
* sem_util.ads, sem_util.adb (Is_Image_Applied_To_Object):
Removed and refactored into Is_Object_Image (Is_Object_Image):
Created as a replacement for Is_Image_Applied_To_Object

From-SVN: r251779

7 years agosem_prag.adb (Analyze_Depends_In_Decl_Part): Add continuation message for missing...
Yannick Moy [Wed, 6 Sep 2017 10:50:12 +0000 (10:50 +0000)]
sem_prag.adb (Analyze_Depends_In_Decl_Part): Add continuation message for missing input.

2017-09-06  Yannick Moy  <moy@adacore.com>

* sem_prag.adb (Analyze_Depends_In_Decl_Part): Add continuation
message for missing input.

2017-09-06  Yannick Moy  <moy@adacore.com>

* inline.adb (Can_Be_Inlined_In_GNATprove_Mode): Prevent inlining
of protected subprograms and entries.
* sem_util.adb, sem_util.ads (Is_Subp_Or_Entry_Inside_Protected):
New function to detect when a subprogram of entry is defined
inside a protected object.

From-SVN: r251778

7 years agosysdep.c (__gnat_has_cap_sys_nice): New function to determine whether the current...
Bob Duff [Wed, 6 Sep 2017 10:49:05 +0000 (10:49 +0000)]
sysdep.c (__gnat_has_cap_sys_nice): New function to determine whether the current process has the CAP_SYS_NICE...

2017-09-06  Bob Duff  <duff@adacore.com>

* sysdep.c (__gnat_has_cap_sys_nice): New function to determine
whether the current process has the CAP_SYS_NICE capability.
* s-taprop-linux.adb (Get_Ceiling_Support): Update this to allow
ceiling priorities if the current process has the CAP_SYS_NICE
capability.

From-SVN: r251777

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 10:41:57 +0000 (12:41 +0200)]
[multiple changes]

2017-09-06  Bob Duff  <duff@adacore.com>

* a-comlin.ads, a-comlin.adb (Argument): Move the constraint
check back to the body, because SPARK is not yet ready for
"or else raise Constraint_Error".

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* exp_ch6.adb (Expand_Call_Helper): Replace call to null
procedure by a single null statement, after evaluating the
actuals that require it.

2017-09-06  Javier Miranda  <miranda@adacore.com>

* exp_aggr.adb (Backend_Processing_Possible.Component_Check):
Generating C code improve the code that checks the use of nested
aggregates to initialize object declarations.

2017-09-06  Yannick Moy  <moy@adacore.com>

* sem_ch3.adb (Derived_Type_Declaration): Detect
violations of new rule SPARK RM 3.4(1).  Also refactor existing
check to use the new function Find_Partial_View.

2017-09-06  Vincent Celier  <celier@adacore.com>

* gnatcmd.adb: gnat ls -V -P... invokes gprls -V -P... The code
from the Prj hierarchy has been removed from the GNAT driver.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* sem_type.adb (Interface_Present_In_Ancestor): Within an
expression function, or within a spec expression (default value,
etc) a reference to an incomplete type is legal: legality of
the operation will be checked when some related entity (type,
object or subprogram) is frozen.

From-SVN: r251776

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 10:38:38 +0000 (12:38 +0200)]
[multiple changes]

2017-09-06  Gary Dismukes  <dismukes@adacore.com>

* exp_ch5.adb, s-diinio.ads, sem_ch4.adb, s-diflio.ads: Minor spelling
adjustments and a typo fix.

2017-09-06  Yannick Moy  <moy@adacore.com>

* sem_res.adb (Resolve_Call): Do not issue info
message about inlining of calls to functions in assertions,
for functions whose body has not been seen yet.

2017-09-06  Bob Duff  <duff@adacore.com>

* a-comlin.ads, a-comlin.adb (Argument): Simplify the code, now that
we can use modern Ada in this package.
* s-resfil.ads, s-resfil.adb, a-clrefi.ads, a-clrefi.adb:
Move Ada.Command_Line.Response_File to System.Response_File,
and make Ada.Command_Line.Response_File into a rename of
System.Response_File. This is to avoid having gnatbind depend
Ada.Command_Line, which would damage the bootstrap process now
that Ada.Command_Line contains modern Ada (the raise expression).
* gnatbind.adb: Avoid dependence on
Ada.Command_Line. Depend on System.Response_File instead
of Ada.Command_Line.Response_File. Change one call to
Ada.Command_Line.Command_Name to use Fill_Arg. Change one call
to Ada.Command_Line.Argument_Count to use Arg_Count.
* gcc-interface/Make-lang.in, Makefile.rtl: Take note of the new files.

From-SVN: r251775

7 years agofrontend.adb (Frontend): Skip -gnatec=gnat.adc switch, because we've already read...
Bob Duff [Wed, 6 Sep 2017 10:29:47 +0000 (10:29 +0000)]
frontend.adb (Frontend): Skip -gnatec=gnat.adc switch, because we've already read gnat.adc by default.

2017-09-06  Bob Duff  <duff@adacore.com>

* frontend.adb (Frontend): Skip -gnatec=gnat.adc
switch, because we've already read gnat.adc by default.

2017-09-06  Bob Duff  <duff@adacore.com>

* exp_ch5.adb (Get_Default_Iterator): Replace
"Assert(False)" with "return Iter", because if an iterable
type is derived from a noniterable one, then we won't find an
overriding or inherited default iterator.

From-SVN: r251774

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 10:27:22 +0000 (12:27 +0200)]
[multiple changes]

2017-09-06  Yannick Moy  <moy@adacore.com>

* sem_warn.adb (Warn_On_Suspicious_Index): Improve warning when the
literal index used to access a string is null or negative.

2017-09-06  Hristian Kirtchev  <kirtchev@adacore.com>

* einfo.adb (Status_Flag_Or_Transient_Decl): The attribute is now
allowed on loop parameters.
(Set_Status_Flag_Or_Transient_Decl): The attribute is now allowed
on loop parameters.
(Write_Field15_Name): Update the output for
Status_Flag_Or_Transient_Decl.
* einfo.ads: Attribute Status_Flag_Or_Transient_Decl now applies
to loop parameters. Update the documentation of the attribute
and the E_Loop_Parameter entity.
* exp_ch7.adb (Process_Declarations): Remove the bogus guard
which assumes that cursors can never be controlled.
* exp_util.adb (Requires_Cleanup_Actions): Remove the bogus
guard which assumes that cursors can never be controlled.

From-SVN: r251773

7 years agoexp_attr.adb, [...]: Minor reformatting.
Hristian Kirtchev [Wed, 6 Sep 2017 10:21:28 +0000 (10:21 +0000)]
exp_attr.adb, [...]: Minor reformatting.

2017-09-06  Hristian Kirtchev  <kirtchev@adacore.com>

* exp_attr.adb, sem_util.adb, sem_attr.adb, sem_ch6.adb, sem_ch8.adb,
sem_warn.adb: Minor reformatting.

From-SVN: r251772

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 10:19:44 +0000 (12:19 +0200)]
[multiple changes]

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* sem_warn.adb (Warn_On_Overlapping_Actuals): Refine previous
fix and preserve older GNAT warning on overlapping actuals that
are not elementary types.

2017-09-06  Justin Squirek  <squirek@adacore.com>

* sem_attr.adb: Comment correction.

From-SVN: r251771

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 10:18:12 +0000 (12:18 +0200)]
[multiple changes]

2017-09-06  Gary Dismukes  <dismukes@adacore.com>

* sem_util.adb: Minor reformatting.

2017-09-06  Yannick Moy  <moy@adacore.com>

* a-comlin.ads (Argument): Add precondition for analysis.

From-SVN: r251770

7 years agoMinor reformatting.
Arnaud Charlet [Wed, 6 Sep 2017 10:09:55 +0000 (12:09 +0200)]
Minor reformatting.

From-SVN: r251769

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 10:09:23 +0000 (12:09 +0200)]
[multiple changes]

2017-09-06  Yannick Moy  <moy@adacore.com>

* sem_res.adb (Resolve): Update message for function call as statement.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* sem_ch6.adb (Check_Returns): Clean up warnings coming from
generated bodies for renamings that are completions, when renamed
procedure is No_Return.
* sem_ch8.adb (Analyze_Subprogram_Renaming): Implement legality
rule in 6.5.1 (7/2): if a renaming is a completion of a subprogram
with No_Return, the renamed entity must be No_Return as well.

From-SVN: r251768

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 10:07:16 +0000 (12:07 +0200)]
[multiple changes]

2017-09-06  Hristian Kirtchev  <kirtchev@adacore.com>

* exp_ch5.adb, freeze.adb, exp_ch4.adb, exp_ch6.adb, lib-xref.adb:
Minor reformatting.

2017-09-06  Justin Squirek  <squirek@adacore.com>

* exp_attr.adb (Expand_N_Attribute_Reference): Modified Image
attribute cases (Rewrite_Object_Reference_Image): Created to
aid the rewriting of new-style 'Image attributes.
* sem_attr.adb (Analyze_Attribute): Modified Image attribute cases
(Check_Object_Reference_Image): Created to handle verification of
'Image with object-references as prefixes.
* sem_util.ads, sem_util.adb (Is_Image_Applied_To_Object):
Create predicate to identify cases where an 'Image attribute's
prefix applies to an object reference.

From-SVN: r251767

7 years agofreeze.adb (Freeze_Entity): Do not generate a freeze node for a generic unit...
Ed Schonberg [Wed, 6 Sep 2017 10:04:20 +0000 (10:04 +0000)]
freeze.adb (Freeze_Entity): Do not generate a freeze node for a generic unit...

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* freeze.adb (Freeze_Entity): Do not generate a freeze
node for a generic unit, even if it includes delayed aspect
specifications. Freeze nodes for generic entities must never
appear in the tree that reaches the back-end of the compiler.

From-SVN: r251766

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 10:01:58 +0000 (12:01 +0200)]
[multiple changes]

2017-09-06  Yannick Moy  <moy@adacore.com>

* treepr.adb (Print_Entity_Info): Do not print empty Elist.

2017-09-06  Yannick Moy  <moy@adacore.com>

* inline.adb (Can_Be_Inlined_In_GNATprove_Mode): Do not consider calls
to subprograms in other units as possibly inlined.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* freeze.adb (Freeze_Entity): For a derived type that has no
explicit delayed aspects but may inherit delayed aspects from its
parent type, analyze aspect at freeze point for proper capture
of an inherited aspect.

2017-09-06  Arnaud Charlet  <charlet@adacore.com>

* lib-xref.adb (Get_Through_Renamings): Get through subprogram
renamings; also, avoid repeated calls to Renamed_Object when getting
through object renamings.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* sem_ch3.adb (Array_Type_Declaration): Handle properly an
array type declaration in a private part, when an index is a
subtype indication of a discrete type with a private partial view.

2017-09-06  Javier Miranda  <miranda@adacore.com>

* exp_ch4.adb (Expand_Modular_Op): Force generating
temporary to improve the generated code.

2017-09-06  Tristan Gingold  <gingold@adacore.com>

* s-fatgen.adb: Minor typo fix in comment.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* exp_ch5.adb (Make_Field_Assign): If the type
of the right-hand side has stored constraint, use its values
(except for those that are renamings of parent discriminants)
to produce additional assignments for the discriminants of the
left-hand side, which are invisible in the righ-hand side and
not retrievable as selected components.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* sem_util.adb (Needs_One_Formal): The first formal of such a
function must be a controlling formal, so that Obj.F (X, Y)
can have the interpretation F(Obj)(X, Y).
* sem_util.ads: Clarify documentation.

2017-09-06  Eric Botcazou  <ebotcazou@adacore.com>

* table.ads, table.adb: Restore original implementation.
* namet.h (Names_Ptr): Adjust back.
(Name_Chars_Ptr): Likewise.
* uintp.h (Uints_Ptr): Likewise.
(Udigits_Ptr): Likewise.
* g-table.ads: Remove pragma Compiler_Unit_Warning.
* par_sco.adb: Do not with GNAT.Table and use Table consistently.
* scos.ads: Replace GNAT.Table with Table and adjust instantiations.
* spark_xrefs.ads: Likewise.
* scos.h: Undo latest changes.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* sem_ch12.adb (Analyze_Subprogram_Instantiation): Propagate
No_Return flag to instance if pragma applies to generic unit. This
must be done explicitly because the pragma does not appear
directly in the generic declaration (unlike the corresponding
aspect specification).

From-SVN: r251765

7 years agoFix typo.
Arnaud Charlet [Wed, 6 Sep 2017 09:55:11 +0000 (11:55 +0200)]
Fix typo.

From-SVN: r251764

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 09:54:26 +0000 (11:54 +0200)]
[multiple changes]

2017-09-06  Eric Botcazou  <ebotcazou@adacore.com>

* sem_ch7.adb (Has_Referencer): Move up and expand comment
explaining the test used to detect inlining.  Use same test
in second occurrence.
(Analyze_Package_Body_Helper): Minor formatting fixes.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* exp_ch4.adb (Handle_Changed_Representation): For an untagged
derived type with a mixture of renamed and constrained parent
discriminants, the constraint for the target must obtain the
discriminant values from both the operand and from the stored
constraint for it, given that the constrained discriminants are
not visible in the object.
* exp_ch5.adb (Make_Field_Assign): The type of the right-hand
side may be derived from that of the left-hand side (as in the
case of an assignment with a change of representation) so the
discriminant to be used in the retrieval of the value of the
component must be the entity in the type of the right-hand side.

From-SVN: r251763

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 09:51:24 +0000 (11:51 +0200)]
[multiple changes]

2017-09-06  Hristian Kirtchev  <kirtchev@adacore.com>

* sem_ch3.adb, sem_ch7.adb, sem_util.adb, g-debpoo.adb, sem_ch4.adb,
sem_ch6.adb, sem_ch8.adb: Minor reformatting.
* exp_util.adb (Is_Source_Object): Account for
the cases where the source object may appear as a dereference
or within a type conversion.
* exp_ch6.adb: Fix missing space in error message.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* sem_prag.adb: Update description of Eliminate.

From-SVN: r251762

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 09:47:50 +0000 (11:47 +0200)]
[multiple changes]

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* sem_attr.adb (Analyze_Attribute, case 'Loop_Entry): Handle
properly an attribute reference 'Loop_Entry that appears in the
list of indices of an indexed expression, to prevent an infinite
loop in the compiler.

2017-09-06  Bob Duff  <duff@adacore.com>

* s-fileio.adb (Name): Do not raise Use_Error for temp files.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* sem_ch4.adb (Analyze_Set_Membership):  If an alternative
in a set membership is an overloaded enumeration literal, and
the type of the alternative is resolved from a previous one,
replace the entity of the alternative as well as the type,
to prevent inconsistencies between the entity and the type.

From-SVN: r251761

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 09:44:29 +0000 (11:44 +0200)]
[multiple changes]

2017-09-06  Eric Botcazou  <ebotcazou@adacore.com>

* ali.ads (ALIs_Record): Add No_Component_Reordering component.
(No_Component_Reordering_Specified): New switch.
* ali.adb (Initialize_ALI): Set No_Component_Reordering_Specified.
(Scan_ALI): Set No_Component_Reordering and deal with NC marker.
* bcheck.adb (Check_Consistent_No_Component_Reordering):
New check.
(Check_Configuration_Consistency): Invoke it.
* debug.adb (d.r): Toggle the effect of the switch.
(d.v): Change to no-op.
* einfo.ads (Has_Complex_Representation):
Restrict to record types.
(No_Reordering): New alias for Flag239.
(OK_To_Reorder_Components): Delete.
(No_Reordering): Declare.
(Set_No_Reordering): Likewise.
(OK_To_Reorder_Components): Delete.
(Set_OK_To_Reorder_Components): Likewise.
* einfo.adb (Has_Complex_Representation): Expect record types.
(No_Reordering): New function.
(OK_To_Reorder_Components): Delete.
(Set_Has_Complex_Representation): Expect base record types.
(Set_No_Reordering): New procedure.
(Set_OK_To_Reorder_Components): Delete.
(Write_Entity_Flags): Adjust to above change.
* fe.h (Debug_Flag_Dot_R): New macro and declaration.
* freeze.adb (Freeze_Record_Type): Remove conditional code setting
OK_To_Reorder_Components on record types with convention Ada.
* lib-writ.adb (Write_ALI): Deal with NC marker.
* opt.ads (No_Component_Reordering): New flag.
(No_Component_Reordering_Config): Likewise.
(Config_Switches_Type): Add No_Component_Reordering component.
* opt.adb (Register_Opt_Config_Switches): Copy
No_Component_Reordering onto No_Component_Reordering_Config.
(Restore_Opt_Config_Switches): Restore No_Component_Reordering.
(Save_Opt_Config_Switches): Save No_Component_Reordering.
(Set_Opt_Config_Switches): Set No_Component_Reordering.
* par-prag.adb (Prag): Deal with Pragma_No_Component_Reordering.
* sem_ch3.adb (Analyze_Private_Extension_Declaration): Also set the
No_Reordering flag from the default.
(Build_Derived_Private_Type): Likewise.
(Build_Derived_Record_Type): Likewise. Then inherit it
for untagged types and clean up handling of similar flags.
(Record_Type_Declaration): Likewise.
* sem_ch13.adb (Same_Representation): Deal with No_Reordering and
remove redundant test on Is_Tagged_Type.
* sem_prag.adb (Analyze_Pragma): Handle No_Component_Reordering.
(Sig_Flags): Likewise.
* snames.ads-tmpl (Name_No_Component_Reordering): New name.
(Pragma_Id): Add Pragma_No_Component_Reordering value.
* warnsw.adb (Set_GNAT_Mode_Warnings): Enable -gnatw.q as well.
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Record_Type>:
Copy the layout of the parent type only if the No_Reordering
settings match.
(components_to_record): Reorder record types with
convention Ada by default unless No_Reordering is set or -gnatd.r
is specified and do not warn if No_Reordering is set in GNAT mode.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* sem_util.ads, sem_util.adb (Check_Previous_Null_Procedure):
new predicate to reject declarations that can be completions,
when there is a visible prior homograph that is a null procedure.
* sem_ch6.adb (Analyze_Null_Procedure): use it.
* sem_ch8.adb (Analyze_Subprogram_Renaming): ditto.

2017-09-06  Thomas Quinot  <quinot@adacore.com>

* s-regpat.adb (Compile.Parse_Literal): Fix handling of literal
run of 253 characters or more.

From-SVN: r251760

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 09:34:30 +0000 (11:34 +0200)]
[multiple changes]

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* einfo.adb (Designated_Type): Use Is_Incomplete_Type to handle
properly incomplete subtypes that may be created by explicit or
implicit declarations.
(Is_Base_Type): Take E_Incomplete_Subtype into account.
(Subtype_Kind): Ditto.
* sem_ch3.adb (Build_Discriminated_Subtype): Set properly the
Ekind of a subtype of a discriminated incomplete type.
(Fixup_Bad_Constraint): Use Subtype_Kind in all cases, including
incomplete types, to preserve error reporting.
(Process_Incomplete_Dependents): Do not create a subtype
declaration for an incomplete subtype that is created internally.
* sem_ch7.adb (Analyze_Package_Specification): Handle properly
incomplete subtypes that do not require a completion, either
because they are limited views, of they are generic actuals.

2017-09-06  Hristian Kirtchev  <kirtchev@adacore.com>

* checks.adb (Insert_Valid_Check): Remove the
suspicious manipulation of the Do_Range_Check flag as ths is
no linger needed. Suppress validity check when analysing the
validation variable.

2017-09-06  Philippe Gil  <gil@adacore.com>

* g-debpoo.adb: adapt GNAT.Debug_Pools to allow safe thread
GNATCOLL.Memory

2017-09-06  Bob Duff  <duff@adacore.com>

* sem_elim.adb: Minor comment fix.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* sem_util.adb (Is_Object_Reference): A function call is an
object reference, and thus attribute references for attributes
that are functions (such as Pred and Succ) as well as predefined
operators are legal in contexts that require an object, such as
the prefix of attribute Img and the Ada2020 version of 'Image.

From-SVN: r251759

7 years agoexp_util.adb, [...]: Minor reformatting.
Hristian Kirtchev [Wed, 6 Sep 2017 09:31:46 +0000 (09:31 +0000)]
exp_util.adb, [...]: Minor reformatting.

2017-09-06  Hristian Kirtchev  <kirtchev@adacore.com>

* exp_util.adb, einfo.adb, sem_attr.adb, exp_ch4.adb, gnatls.adb,
exp_ch3.adb, xoscons.adb: Minor reformatting.

From-SVN: r251758

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 09:27:45 +0000 (11:27 +0200)]
[multiple changes]

2017-09-06  Raphael Amiard  <amiard@adacore.com>

* a-chtgop.ads, a-chtgop.adb: Add versions of First and Next with
Position parameter. If supplied, use it to provide efficient iteration.
* a-cohase.ads, a-cohase.adb, a-cihama.ads, a-cihama.adb,
a-cohama.ads, a-cohama.adb: Add/Use Position to provide efficient
iteration.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* exp_util.adb (Build_Allocate_Deallocate_Proc): If the
designated type is class-wide and the expression is an unchecked
conversion, preserve the conversion when checking the tag of the
designated object, to prevent spurious semantic errors when the
expression in the conversion has an untagged type (for example
an address attribute).

From-SVN: r251757

7 years agoEnqueue all SRA links for write flag propagation
Martin Jambor [Wed, 6 Sep 2017 09:25:00 +0000 (11:25 +0200)]
Enqueue all SRA links for write flag propagation

2017-09-06  Martin Jambor  <mjambor@suse.cz>

PR tree-optimization/82078
gcc/
* tree-sra.c (sort_and_splice_var_accesses): Move call to
add_access_to_work_queue...
(build_accesses_from_assign): ...here.
(propagate_all_subaccesses): Make sure racc is the group
representative, if there is one.

gcc/testsuite/
* gcc.dg/tree-ssa/pr82078.c: New test.

From-SVN: r251756

7 years ago[multiple changes]
Arnaud Charlet [Wed, 6 Sep 2017 09:22:50 +0000 (11:22 +0200)]
[multiple changes]

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* sem_res.adb (Resolve_Entry_Call): Check whether a protected
operation is subject to a pragma Eliminate.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* sem_elim.ads, exp_ch4.adb: Minor reformatting.

2017-09-06  Eric Botcazou  <ebotcazou@adacore.com>

* fe.h (Eliminate_Error_Msg): Remove.

From-SVN: r251755

7 years agore PR middle-end/82095 (ICE in tree_nop_conversion at tree.c:11793 on ppc64le)
Jakub Jelinek [Wed, 6 Sep 2017 09:10:26 +0000 (11:10 +0200)]
re PR middle-end/82095 (ICE in tree_nop_conversion at tree.c:11793 on ppc64le)

PR middle-end/82095
* varasm.c (categorize_decl_for_section): Use SECCAT_TBSS for TLS vars with
NULL DECL_INITIAL.

* gcc.dg/tls/pr82095.c: New test.

From-SVN: r251754

7 years ago2017-09-06 Richard Biener <rguenther@suse.de>
Richard Biener [Wed, 6 Sep 2017 07:49:37 +0000 (07:49 +0000)]
2017-09-06  Richard Biener  <rguenther@suse.de>

* gimple-ssa-strength-reduction.c
(find_candidates_dom_walker::before_doom_children): Use a
type and not a mode check.

From-SVN: r251753

7 years agore PR target/77308 (surprisingly large stack usage for sha512 on arm)
Bernd Edlinger [Wed, 6 Sep 2017 07:47:52 +0000 (07:47 +0000)]
re PR target/77308 (surprisingly large stack usage for sha512 on arm)

2017-09-06  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR target/77308
        * config/arm/predicates.md (arm_general_adddi_operand): Create new
        non-vfp predicate.
        * config/arm/arm.md (*arm_adddi3, *arm_subdi3): Use new predicates.

From-SVN: r251752

7 years agore PR tree-optimization/64910 (tree reassociation results in poor code)
Jeff Law [Wed, 6 Sep 2017 05:20:25 +0000 (23:20 -0600)]
re PR tree-optimization/64910 (tree reassociation results in poor code)

PR tree-optimization/64910
* tree-ssa-reassoc.c (reassociate_bb): Restrict last change to
cases where we have 3 or more operands.

From-SVN: r251751

7 years agoDaily bump.
GCC Administrator [Wed, 6 Sep 2017 00:16:18 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r251750

7 years agore PR middle-end/81768 (error: control flow in the middle of basic block)
Jakub Jelinek [Tue, 5 Sep 2017 21:32:35 +0000 (23:32 +0200)]
re PR middle-end/81768 (error: control flow in the middle of basic block)

PR middle-end/81768
* omp-low.c (lower_omp_for): Recompute tree invariant if
gimple_omp_for_initial/final is ADDR_EXPR.

* gcc.dg/gomp/pr81768-2.c: New test.

From-SVN: r251742

7 years agore PR middle-end/81768 (error: control flow in the middle of basic block)
Jakub Jelinek [Tue, 5 Sep 2017 21:31:39 +0000 (23:31 +0200)]
re PR middle-end/81768 (error: control flow in the middle of basic block)

PR middle-end/81768
* omp-expand.c (expand_omp_simd): Force second operands of COND_EXPR
into gimple val before gimplification fo the COND_EXPR.

* gcc.dg/gomp/pr81768-1.c: New test.

From-SVN: r251741

7 years agotree-ssa-threadupdate.c (duplicate_thread_path): Remove unused REGION_COPY argument.
Aldy Hernandez [Tue, 5 Sep 2017 20:48:25 +0000 (20:48 +0000)]
tree-ssa-threadupdate.c (duplicate_thread_path): Remove unused REGION_COPY argument.

* tree-ssa-threadupdate.c (duplicate_thread_path): Remove unused
REGION_COPY argument.
(thread_through_all_blocks): Remove unused argument to
duplicate_thread_path.

From-SVN: r251740

7 years agoname-lookup.c (do_class_using_decl): Elide read-once temps.
Nathan Sidwell [Tue, 5 Sep 2017 20:21:01 +0000 (20:21 +0000)]
name-lookup.c (do_class_using_decl): Elide read-once temps.

* name-lookup.c (do_class_using_decl): Elide read-once temps.
Move declarations to initializations.

From-SVN: r251738

7 years agoclass.c (add_method): Move slot search and insertion to ...
Nathan Sidwell [Tue, 5 Sep 2017 20:13:10 +0000 (20:13 +0000)]
class.c (add_method): Move slot search and insertion to ...

* class.c (add_method): Move slot search and insertion to ...
* name-lookup.c (get_method_slot): ... this new function.
(lookup_fnfields_slot_nolazy): Cope with NULL slot.
* name-lookup.h (get_method_slot): Declare.
* decl.c (cxx_init_decl_processinng): Give conv_op_marker a more
realistic type.
(grok_special_member_properties): Set
TYPE_HAS_CONVERSION. Expicitly look at DECL_NAME for specialness.
Improve TYPE_HAS_CONSTEXPR_CTOR setting.

From-SVN: r251737

7 years ago[75/77] Use scalar_mode in the AArch64 port
Richard Sandiford [Tue, 5 Sep 2017 20:08:41 +0000 (20:08 +0000)]
[75/77] Use scalar_mode in the AArch64 port

Similar to the previous scalar_int_mode patch.

2017-09-05  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* config/aarch64/aarch64-protos.h (aarch64_gen_adjusted_ldpstp):
Take a scalar_mode rather than a machine_mode.
(aarch64_operands_adjust_ok_for_ldpstp): Likewise.
* config/aarch64/aarch64.c (aarch64_simd_container_mode): Likewise.
(aarch64_operands_adjust_ok_for_ldpstp): Likewise.
(aarch64_gen_adjusted_ldpstp): Likewise.
(aarch64_expand_vector_init): Use scalar_mode instead of machine_mode.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r251736

7 years ago[61/77] Use scalar_int_mode in the AArch64 port
Richard Sandiford [Tue, 5 Sep 2017 20:08:17 +0000 (20:08 +0000)]
[61/77] Use scalar_int_mode in the AArch64 port

This patch makes the AArch64 port use scalar_int_mode in various places.
Other ports won't need this kind of change; we only need it for AArch64
because of the variable-sized SVE modes.

The only change in functionality is in the rtx_costs handling
of CONST_INT.  If the caller doesn't supply a mode, we now pass
word_mode rather than VOIDmode to aarch64_internal_mov_immediate.
aarch64_movw_imm will therefore not now truncate large constants
in this situation.

2017-09-05  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* config/aarch64/aarch64-protos.h (aarch64_is_extend_from_extract):
Take a scalar_int_mode instead of a machine_mode.
(aarch64_mask_and_shift_for_ubfiz_p): Likewise.
(aarch64_output_scalar_simd_mov_immediate): Likewise.
(aarch64_simd_scalar_immediate_valid_for_move): Likewise.
(aarch64_simd_attr_length_rglist): Delete.
* config/aarch64/aarch64.c (aarch64_is_extend_from_extract): Take
a scalar_int_mode instead of a machine_mode.
(aarch64_add_offset): Likewise.
(aarch64_internal_mov_immediate): Likewise
(aarch64_add_constant_internal): Likewise.
(aarch64_add_constant): Likewise.
(aarch64_movw_imm): Likewise.
(aarch64_rtx_arith_op_extract_p): Likewise.
(aarch64_mask_and_shift_for_ubfiz_p): Likewise.
(aarch64_simd_scalar_immediate_valid_for_move): Likewise.
Remove assert that the mode isn't a vector.
(aarch64_output_scalar_simd_mov_immediate): Likewise.
(aarch64_expand_mov_immediate): Update calls after above changes.
(aarch64_output_casesi): Use as_a <scalar_int_mode>.
(aarch64_and_bitmask_imm): Check for scalar integer modes.
(aarch64_move_imm): Likewise.
(aarch64_can_const_movi_rtx_p): Likewise.
(aarch64_strip_extend): Likewise.
(aarch64_extr_rtx_p): Likewise.
(aarch64_rtx_costs): Likewise, using wode_mode as the mode of
a CONST_INT when the mode parameter is VOIDmode.
(aarch64_float_const_rtx_p): Use scalar_int_mode for a temporary.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r251735

7 years agocp-tree.h (lang_decl_base): Rename template_conv_p to unknown_bound_p.
Nathan Sidwell [Tue, 5 Sep 2017 20:02:04 +0000 (20:02 +0000)]
cp-tree.h (lang_decl_base): Rename template_conv_p to unknown_bound_p.

* cp-tree.h (lang_decl_base): Rename template_conv_p to
unknown_bound_p.
(DECL_CONV_FN_P): Don't check NULL DECL_NAME.
(DECL_CONV_FN_TYPE): FN must be conv op.
(DECL_TEMPLATE_CONV_FN_P): Delete.
(VAR_HAD_UNKNOWN_BOUND, SET_VAR_HAD_UNKNOWN_BOUND): Adjust.
* pt.c (push_template_decl_real): Delete DECL_TEMPLATE_CONV_FN_P

From-SVN: r251734

7 years agoMake bitsize_mode_for_mode return an opt_mode
Richard Sandiford [Tue, 5 Sep 2017 19:58:04 +0000 (19:58 +0000)]
Make bitsize_mode_for_mode return an opt_mode

2017-09-05  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* machmode.h (bitwise_mode_for_mode): Return opt_mode.
* stor-layout.c (bitwise_mode_for_mode): Likewise.
(bitwise_type_for_mode): Update accordingly.

From-SVN: r251733

7 years agoMake mode_for_size_tree return an opt_mode
Richard Sandiford [Tue, 5 Sep 2017 19:57:56 +0000 (19:57 +0000)]
Make mode_for_size_tree return an opt_mode

...for consistency with mode_for_size

2017-09-05  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* stor-layout.h (mode_for_size_tree): Return an opt_mode.
* stor-layout.c (mode_for_size_tree): Likewise.
(mode_for_array): Update accordingly.
(layout_decl): Likewise.
(compute_record_mode): Likewise.  Only set the mode once.

gcc/ada/
* gcc-interface/utils.c (make_packable_type): Update call to
mode_for_size_tree.

From-SVN: r251732

7 years agoMake targetm.get_mask_mode return an opt_mode
Richard Sandiford [Tue, 5 Sep 2017 19:57:47 +0000 (19:57 +0000)]
Make targetm.get_mask_mode return an opt_mode

...for consistency with mode_for_vector.

2017-09-05  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* target.def (get_mask_mode): Change return type to opt_mode.
Expand commentary.
* doc/tm.texi: Regenerate.
* targhooks.h (default_get_mask_mode): Return an opt_mode.
* targhooks.c (default_get_mask_mode): Likewise.
* config/i386/i386.c (ix86_get_mask_mode): Likewise.
* optabs-query.c (can_vec_mask_load_store_p): Update use of
targetm.get_mask_mode.
* tree.c (build_truth_vector_type): Likewise.

From-SVN: r251731

7 years agoMake mode_for_vector return an opt_mode
Richard Sandiford [Tue, 5 Sep 2017 19:57:39 +0000 (19:57 +0000)]
Make mode_for_vector return an opt_mode

...following on from the mode_for_size change.  The patch also removes
machmode.h versions of the stor-layout.c comments, since the comments
in the .c file are more complete.

2017-09-05  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* machmode.h (mode_for_vector): Return an opt_mode.
* stor-layout.c (mode_for_vector): Likewise.
(mode_for_int_vector): Update accordingly.
(layout_type): Likewise.
* config/i386/i386.c (emit_memmov): Likewise.
(ix86_expand_set_or_movmem): Likewise.
(ix86_expand_vector_init): Likewise.
(ix86_get_mask_mode): Likewise.
* config/powerpcspe/powerpcspe.c (rs6000_expand_vec_perm_const_1):
Likewise.
* config/rs6000/rs6000.c (rs6000_expand_vec_perm_const_1): Likewise.
* expmed.c (extract_bit_field_1): Likewise.
* expr.c (expand_expr_real_2): Likewise.
* optabs-query.c (can_vec_perm_p): Likewise.
(can_vec_mask_load_store_p): Likewise.
* optabs.c (expand_vec_perm): Likewise.
* targhooks.c (default_get_mask_mode): Likewise.
* tree-vect-stmts.c (vectorizable_store): Likewise.
(vectorizable_load): Likewise.
(get_vectype_for_scalar_type_and_size): Likewise.

From-SVN: r251730

7 years agoAdd mode_for_int_vector helper functions
Richard Sandiford [Tue, 5 Sep 2017 19:57:28 +0000 (19:57 +0000)]
Add mode_for_int_vector helper functions

There are at least a few places that want to create an integer vector
with a specified element size and element count, or to create the
integer equivalent of an existing mode.  This patch adds helpers
for doing that.

The require ()s are all used in functions that go on to emit
instructions that use the result as a vector mode.

2017-09-05  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* machmode.h (mode_for_int_vector): New function.
* stor-layout.c (mode_for_int_vector): Likewise.
* config/aarch64/aarch64.c (aarch64_emit_approx_sqrt): Use it.
* config/powerpcspe/powerpcspe.c (rs6000_do_expand_vec_perm): Likewise.
* config/rs6000/rs6000.c (rs6000_do_expand_vec_perm): Likewise.
* config/s390/s390.c (s390_expand_vec_compare_cc): Likewise.
(s390_expand_vcond): Likewise.

From-SVN: r251729

7 years agoMake mode_for_size return an opt_mode
Richard Sandiford [Tue, 5 Sep 2017 19:57:18 +0000 (19:57 +0000)]
Make mode_for_size return an opt_mode

...to make it consistent with int_mode_for_size etc.

require () seems like the right choice in replace_reg_with_saved_mem
because we use the chosen mode for saving and restoring registers,
which cannot be done in BLKmode.  Similarly require () seems like
the right choice in calls related to secondary memory reloads (the ones
in config/, and in get_secondary_mem) because the reload must always
have a defined mode, which e.g. determines the size of the slot.

We can use require () in simplify_subreg_concatn and assemble_integer
because it isn't meaningful to create a subreg with BLKmode (for one
thing, we couldn't tell then whether it was partial, paradoxical, etc.).

make_fract_type and make_accum_type must find a mode because that's
what distinguishes accumulator FIXED_POINT_TYPEs from fractional
FIXED_POINT_TYPEs.

2017-09-05  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* machmode.h (opt_machine_mode): New type.
(opt_mode<T>): Allow construction from anything that can be
converted to a T.
(is_a, as_a, dyn_cast): Add overloads for opt_mode.
(mode_for_size): Return an opt_machine_mode.
* stor-layout.c (mode_for_size): Likewise.
(mode_for_size_tree): Update call accordingly.
(bitwise_mode_for_mode): Likewise.
(make_fract_type): Likewise.
(make_accum_type): Likewise.
* caller-save.c (replace_reg_with_saved_mem): Update call
accordingly.
* config/alpha/alpha.h (SECONDARY_MEMORY_NEEDED_MODE): Likewise.
* config/i386/i386.h (SECONDARY_MEMORY_NEEDED_MODE): Likewise.
* config/s390/s390.h (SECONDARY_MEMORY_NEEDED_MODE): Likewise.
* config/sparc/sparc.h (SECONDARY_MEMORY_NEEDED_MODE): Likewise.
* expmed.c (extract_bit_field_1): Likewise.
* reload.c (get_secondary_mem): Likewise.
* varasm.c (assemble_integer): Likewise.
* lower-subreg.c (simplify_subreg_concatn): Likewise.  Move
early-out.

From-SVN: r251728

7 years ago(decimal_)float_mode_for_size in real.h
Richard Sandiford [Tue, 5 Sep 2017 19:57:09 +0000 (19:57 +0000)]
(decimal_)float_mode_for_size in real.h

This patch makes the binary float macros in real.h use
float_mode_for_size and adds a corresponding decimal_float_mode_for_size
for the decimal macros.

2017-09-05  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* machmode.h (decimal_float_mode_for_size): New function.
* real.h (REAL_VALUE_TO_TARGET_LONG_DOUBLE): Use float_mode_for_size.
(REAL_VALUE_TO_TARGET_DOUBLE): Likewise.
(REAL_VALUE_TO_TARGET_SINGLE): Likewise.
(REAL_VALUE_TO_TARGET_DECIMAL128): Use decimal_float_mode_for_size.
(REAL_VALUE_TO_TARGET_DECIMAL64): Likewise.
(REAL_VALUE_TO_TARGET_DECIMAL32): Likewise.

From-SVN: r251727

7 years agoMake more use of int_mode_for_size
Richard Sandiford [Tue, 5 Sep 2017 19:57:01 +0000 (19:57 +0000)]
Make more use of int_mode_for_size

This patch converts more places that could use int_mode_for_size instead
of mode_for_size.  This is in preparation for an upcoming patch that
makes mode_for_size itself return an opt_mode.

require () seems like the right choice in expand_builtin_powi
because we have got past the point of backing out.  We go on to do:

  op1 = expand_expr (arg1, NULL_RTX, mode2, EXPAND_NORMAL);
  if (GET_MODE (op1) != mode2)
    op1 = convert_to_mode (mode2, op1, 0);

which would be invalid for (and have failed for) BLKmode.

In get_builtin_sync_mode and expand_ifn_atomic_compare_exchange,
the possible bitsizes are {8, 16, 32, 64, 128}, all of which give
target-independent integer modes (up to TImode).  The comment above
the call in get_builtin_sync_mode makes clear that an integer mode
must be found.

We can use require () in expand_builtin_atomic_clear and
expand_builtin_atomic_test_and_set because there's always an integer
mode for the boolean type.  The same goes for the POINTER_SIZE request
in layout_type.  Similarly we can use require () in combine_instructions
and gen_lowpart_common because there's always an integer mode for
HOST_BITS_PER_WIDE_INT (DImode when BITS_PER_UNIT == 8), and
HOST_BITS_PER_DOUBLE_INT (TImode).

The calls in aarch64_function_value, arm_function_value,
aapcs_allocate_return_reg and mips_function_value_1 are handling
cases in which a big-endian target passes or returns values at
the most significant end of a register.  In each case the ABI
constrains the size to a small amount and does not handle
non-power-of-2 sizes wider than a word.

The calls in c6x_expand_movmem, i386.c:emit_memset,
lm32_block_move_inline, microblaze_block_move_straight and
mips_block_move_straight are dealing with expansions of
block memory operations using register-wise operations,
and those registers must have non-BLK mode.

The reason for using require () in ix86_expand_sse_cmp,
mips_expand_ins_as_unaligned_store, spu.c:adjust_operand and
spu_emit_branch_and_set is that we go on to emit non-call
instructions that use registers of that mode, which wouldn't
be valid for BLKmode.

2017-09-05  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* builtins.c (expand_builtin_powi): Use int_mode_for_size.
(get_builtin_sync_mode): Likewise.
(expand_ifn_atomic_compare_exchange): Likewise.
(expand_builtin_atomic_clear): Likewise.
(expand_builtin_atomic_test_and_set): Likewise.
(fold_builtin_atomic_always_lock_free): Likewise.
* calls.c (compute_argument_addresses): Likewise.
(emit_library_call_value_1): Likewise.
(store_one_arg): Likewise.
* combine.c (combine_instructions): Likewise.
* config/aarch64/aarch64.c (aarch64_function_value): Likewise.
* config/arm/arm.c (arm_function_value): Likewise.
(aapcs_allocate_return_reg): Likewise.
* config/c6x/c6x.c (c6x_expand_movmem): Likewise.
* config/i386/i386.c (construct_container): Likewise.
(ix86_gimplify_va_arg): Likewise.
(ix86_expand_sse_cmp): Likewise.
(emit_memmov): Likewise.
(emit_memset): Likewise.
(expand_small_movmem_or_setmem): Likewise.
(ix86_expand_pextr): Likewise.
(ix86_expand_pinsr): Likewise.
* config/lm32/lm32.c (lm32_block_move_inline): Likewise.
* config/microblaze/microblaze.c (microblaze_block_move_straight):
Likewise.
* config/mips/mips.c (mips_function_value_1) Likewise.
(mips_block_move_straight): Likewise.
(mips_expand_ins_as_unaligned_store): Likewise.
* config/powerpcspe/powerpcspe.c
(rs6000_darwin64_record_arg_advance_flush): Likewise.
(rs6000_darwin64_record_arg_flush): Likewise.
* config/rs6000/rs6000.c
(rs6000_darwin64_record_arg_advance_flush): Likewise.
(rs6000_darwin64_record_arg_flush): Likewise.
* config/sparc/sparc.c (sparc_function_arg_1): Likewise.
(sparc_function_value_1): Likewise.
* config/spu/spu.c (adjust_operand): Likewise.
(spu_emit_branch_or_set): Likewise.
(arith_immediate_p): Likewise.
* emit-rtl.c (gen_lowpart_common): Likewise.
* expr.c (expand_expr_real_1): Likewise.
* function.c (assign_parm_setup_block): Likewise.
* gimple-ssa-store-merging.c (encode_tree_to_bitpos): Likewise.
* reload1.c (alter_reg): Likewise.
* stor-layout.c (mode_for_vector): Likewise.
(layout_type): Likewise.

gcc/ada/
* gcc-interface/utils2.c (build_load_modify_store):
Use int_mode_for_size.

From-SVN: r251726

7 years agoMake more use of int_mode_for_mode
Richard Sandiford [Tue, 5 Sep 2017 19:56:49 +0000 (19:56 +0000)]
Make more use of int_mode_for_mode

This patch converts more places that could use int_mode_for_mode
instead of mode_for_size.  This is in preparation for an upcoming
patch that makes mode_for_size itself return an opt_mode.

The reason for using required () in exp2_immediate_p is that
we go on to do:

    trunc_int_for_mode (..., int_mode)

which would be invalid for (and have failed for) BLKmode.

The reason for using required () in spu_convert_move and
resolve_simple_move is that we go on to use registers of
the returned mode in non-call rtl instructions, which would
be invalid for BLKmode.

2017-09-05  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* config/spu/spu.c (exp2_immediate_p): Use int_mode_for_mode.
(spu_convert_move): Likewise.
* lower-subreg.c (resolve_simple_move): Likewise.

From-SVN: r251725

7 years agoclass.c (unreverse_member_declarations): Remove extraneous if.
Nathan Sidwell [Tue, 5 Sep 2017 19:52:56 +0000 (19:52 +0000)]
class.c (unreverse_member_declarations): Remove extraneous if.

* class.c (unreverse_member_declarations): Remove extraneous if.
* pt.c (push_template_decl_real): Use string concatenation, not
\<newline>.  Add %<..%>.

From-SVN: r251724

7 years agore PR target/81833 (PowerPC: VSX: Miscompiles ffmpeg's scalarproduct_int16_vsx at...
Bill Schmidt [Tue, 5 Sep 2017 19:41:55 +0000 (19:41 +0000)]
re PR target/81833 (PowerPC: VSX: Miscompiles ffmpeg's scalarproduct_int16_vsx at -O1)

[gcc]

2017-09-05  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

PR target/81833
* config/rs6000/altivec.md (altivec_vsum2sws): Convert from a
define_insn to a define_expand.
(altivec_vsum2sws_direct): New define_insn.
(altivec_vsumsws): Convert from a define_insn to a define_expand.

[gcc/testsuite]

2017-09-05  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

PR target/81833
* gcc.target/powerpc/pr81833-1.c: New file.
* gcc.target/powerpc/pr81833-2.c: New file.

From-SVN: r251723

7 years agoImprove max_insns_skipped logic
Wilco Dijkstra [Tue, 5 Sep 2017 17:22:51 +0000 (17:22 +0000)]
Improve max_insns_skipped logic

Improve the logic when setting max_insns_skipped.  Limit the maximum size of IT
to MAX_INSN_PER_IT_BLOCK as otherwise multiple IT instructions are needed,
increasing codesize.  Given 4 works well for Thumb-2, use the same limit for ARM
for consistency.

    gcc/
* config/arm/arm.c (arm_option_params_internal): Improve setting of
max_insns_skipped.

From-SVN: r251720

7 years agoi386: Avoid stack realignment if possible
H.J. Lu [Tue, 5 Sep 2017 16:39:24 +0000 (16:39 +0000)]
i386: Avoid stack realignment if possible

ix86_finalize_stack_frame_flags has been extended to eliminate frame
pointer when the new stack frame isn't needed with and without
-maccumulate-outgoing-args as well as -fomit-frame-pointer.  Since stack
access with larger alignment may be optimized out, to decide if stack
realignment is needed, we need to not only check for stack frame access,
but also verify the alignment of stack frame access.  Since alignment of
memory access via arg_pointer is set up by caller, not by callee, we
should find the maximum stack alignment from the stack frame access
instructions via stack pointer and frame pointrer to avoid stack
realignment when stack alignment needed is less than incoming stack
boundary.

gcc/

PR target/59501
PR target/81624
PR target/81769
* config/i386/i386.c (ix86_finalize_stack_frame_flags): Don't
realign stack if stack alignment needed is less than incoming
stack boundary.

gcc/testsuite/

PR target/59501
PR target/81624
PR target/81769
* gcc.target/i386/pr59501-4a.c: Remove xfail.
* gcc.target/i386/pr81769-1a.c: New test.
* gcc.target/i386/pr81769-1b.c: Likewise.
* gcc.target/i386/pr81769-2.c: Likewise.

From-SVN: r251718

7 years agore PR sanitizer/82072 (sanitizer does not detect an overflow from LLONG_MIN)
Marek Polacek [Tue, 5 Sep 2017 15:55:04 +0000 (15:55 +0000)]
re PR sanitizer/82072 (sanitizer does not detect an overflow from LLONG_MIN)

PR sanitizer/82072
* convert.c (convert_to_integer_1) <case NEGATE_EXPR>: Move the ubsan
check earlier.

* c-c++-common/ubsan/pr82072-2.c: New test.

From-SVN: r251717

7 years agore PR c++/81942 (ICE on empty constexpr constructor with C++14)
Paolo Carlini [Tue, 5 Sep 2017 13:33:44 +0000 (13:33 +0000)]
re PR c++/81942 (ICE on empty constexpr constructor with C++14)

/cp
2017-09-05  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/81942
* cp-tree.h (LABEL_DECL_CDTOR): Add and document.
* decl.c (start_preparsed_function): Set LABEL_DECL_CDTOR when
creating cdtor_label.
* constexpr.c (returns): Add the case of a constructor/destructor
returning via a LABEL_DECL_CDTOR label.
(cxx_eval_constant_expression, case [GOTO_EXPR]): Likewise.

/testsuite
2017-09-05  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/81942
* g++.dg/cpp1y/constexpr-return3.C: New.

From-SVN: r251714

7 years agoImprove alloca alignment
Wilco Dijkstra [Tue, 5 Sep 2017 13:27:58 +0000 (13:27 +0000)]
Improve alloca alignment

This patch improves alloca alignment.  Currently alloca reserves
too much space as it aligns twice, and generates unnecessary stack
alignment code.

When the requested alignment is lower than the stack alignment, no
extra alignment is needed.  If the requested alignment is higher,
we need to increase the size by the difference of the requested
alignment and the stack alignment.  As a result, the alloca alignment
is exactly as expected:

alloca (16):
sub sp, sp, #16
mov x1, sp

alloca (x):
add x0, x0, 15
and x0, x0, -16
sub sp, sp, x0
mov x0, sp

__builtin_alloca_with_align (x, 512):
add x0, x0, 63
and x0, x0, -16
sub sp, sp, x0
add x0, sp, 63
and x0, x0, -64

    gcc/
* explow.c (get_dynamic_stack_size): Improve dynamic alignment.

From-SVN: r251713

7 years agore PR c++/82084 (ICE: constructing wstring with -O3)
Richard Biener [Tue, 5 Sep 2017 12:58:00 +0000 (12:58 +0000)]
re PR c++/82084 (ICE: constructing wstring with -O3)

2017-09-05  Richard Biener  <rguenther@suse.de>

PR tree-optimization/82084
* fold-const.c (can_native_encode_string_p): Handle wide characters.

From-SVN: r251711

7 years agore PR ada/62235 (segmentation fault on Ada 2012 code)
Eric Botcazou [Tue, 5 Sep 2017 09:47:21 +0000 (09:47 +0000)]
re PR ada/62235 (segmentation fault on Ada 2012 code)

PR ada/62235
* gcc-interface/decl.c (gnat_to_gnu_entity): Skip regular processing
for Itypes that are E_Record_Subtype with a cloned subtype.
<E_Record_Subtype>: Use the DECL of the cloned type directly, if any.

From-SVN: r251706

7 years agotrans.c (convert_with_check): Use a custom base type if the base type of the expressi...
Eric Botcazou [Tue, 5 Sep 2017 09:28:21 +0000 (09:28 +0000)]
trans.c (convert_with_check): Use a custom base type if the base type of the expression has a different...

* gcc-interface/trans.c (convert_with_check): Use a custom base type
if the base type of the expression has a different machine mode.
Rename a couple of parameters and local variable.

From-SVN: r251705

7 years agotrans.c (Attribute_to_gnu): Do not strip conversions around prefixes that are not...
Eric Botcazou [Tue, 5 Sep 2017 09:22:21 +0000 (09:22 +0000)]
trans.c (Attribute_to_gnu): Do not strip conversions around prefixes that are not references.

* gcc-interface/trans.c (Attribute_to_gnu) <Attr_Address>: Do not strip
conversions around prefixes that are not references.

From-SVN: r251704

7 years agoutils.c (unchecked_convert): When the result type is a non-biased integral type with...
Eric Botcazou [Tue, 5 Sep 2017 09:12:07 +0000 (09:12 +0000)]
utils.c (unchecked_convert): When the result type is a non-biased integral type with size 0...

* gcc-interface/utils.c (unchecked_convert): When the result type is a
non-biased integral type with size 0, set the result to 0 directly.

From-SVN: r251701

7 years agogigi.h (renaming_from_generic_instantiation_p): Turn to
Eric Botcazou [Tue, 5 Sep 2017 09:02:07 +0000 (09:02 +0000)]
gigi.h (renaming_from_generic_instantiation_p): Turn to

* gcc-interface/gigi.h (renaming_from_generic_instantiation_p): Turn to
(renaming_from_instantiation_p): ...this.
* gcc-interface/decl.c (gnat_to_gnu_entity): Use inline predicate
instead of explicit tests on kind of entities.  Adjust for renaming.
(gnat_to_gnu_profile_type): Likewise.
(gnat_to_gnu_subprog_type): Likewise.
* gcc-interface/trans.c (Identifier_to_gnu): Likewise.
(Case_Statement_to_gnu): Likewise.
(gnat_to_gnu): Likewise.
(process_freeze_entity): Likewise.
(process_type): Likewise.
(add_stmt_with_node): Adjust for renaming.
* gcc-interface/utils.c (gnat_pushdecl): Adjust for renaming.
(renaming_from_generic_instantiation_p): Rename to...
(renaming_from_instantiation_p): ...this.  Use inline predicate.
(pad_type_hasher::keep_cache_entry): Fold.

From-SVN: r251700

7 years agotrans.c (adjust_for_implicit_deref): New function.
Eric Botcazou [Tue, 5 Sep 2017 08:54:14 +0000 (08:54 +0000)]
trans.c (adjust_for_implicit_deref): New function.

* gcc-interface/trans.c (adjust_for_implicit_deref): New function.
(gnat_to_gnu) <N_Explicit_Dereference>: Translate result type first.
(N_Indexed_Component): Invoke adjust_for_implicit_deref on the prefix.
(N_Slice): Likewise.
(N_Selected_Component): Likewise.  Do not try again to translate it.
(N_Free_Statement): Invoke adjust_for_implicit_deref on the expression.

From-SVN: r251699

7 years agorepinfo.ads: Document new treatment of dynamic values.
Eric Botcazou [Tue, 5 Sep 2017 08:40:09 +0000 (08:40 +0000)]
repinfo.ads: Document new treatment of dynamic values.

* repinfo.ads: Document new treatment of dynamic values.
(TCode): Bump upper bound to 29.
(Dynamic_Val): New constant set to 29.
* repinfo.adb (Print_Expr) <Dynamic_Val>: New case.
(Rep_Value)  <Dynamic_Val>: Likewise.
* repinfo.h (Dynamic_Val): New macro.
* gcc-interface/decl.c (annotate_value): Tidy up and cache result for
DECL_P nodes too.
<INTEGER_CST>: Set TCODE instead of recursing.
<COMPONENT_REF>: Set TCODE instead of calling Create_Node manually.
<VAR_DECL>: New case.
<MULT_EXPR, PLUS_EXPR>: Fold conversions into inner operations.
<BIT_AND_EXPR>: Adjust.
<CALL_EXPR>: Do not fall through.

From-SVN: r251698

7 years agotrans.c (Call_to_gnu): If this is a function call and there is no target...
Eric Botcazou [Tue, 5 Sep 2017 08:28:20 +0000 (08:28 +0000)]
trans.c (Call_to_gnu): If this is a function call and there is no target...

* gcc-interface/trans.c (Call_to_gnu): If this is a function call and
there is no target, do not create a temporary for the return value for
an allocator either.

From-SVN: r251695

7 years agore PR tree-optimization/82102 (ICE: Segmentation fault in /home/arnd/git/gcc/gcc...
Richard Biener [Tue, 5 Sep 2017 08:15:21 +0000 (08:15 +0000)]
re PR tree-optimization/82102 (ICE: Segmentation fault in /home/arnd/git/gcc/gcc/tree-ssa-pre.c:4863)

2017-09-05  Richard Biener  <rguenther@suse.de>

PR tree-optimization/82102
* tree-ssa-pre.c (fini_eliminate): Check if lhs is NULL.

* gcc.dg/torture/pr82102.c: New testcase.

From-SVN: r251692

7 years agotrans.c (pos_to_constructor): Skip conversions to an unconstrained array type.
Eric Botcazou [Tue, 5 Sep 2017 08:14:35 +0000 (08:14 +0000)]
trans.c (pos_to_constructor): Skip conversions to an unconstrained array type.

* gcc-interface/trans.c (pos_to_constructor): Skip conversions to an
unconstrained array type.

From-SVN: r251691

7 years agoLearn CFG cleanup to transform single case switches to gcond.
Martin Liska [Tue, 5 Sep 2017 08:12:27 +0000 (10:12 +0200)]
Learn CFG cleanup to transform single case switches to gcond.

2017-09-05  Martin Liska  <mliska@suse.cz>

PR tree-optimization/82032
* tree-cfg.c (generate_range_test): New function.
* tree-cfg.h (generate_range_test): Declared here.
* tree-cfgcleanup.c (convert_single_case_switch): New function.
(cleanup_control_expr_graph): Use it.
* tree-switch-conversion.c (try_switch_expansion): Remove
assert.
(emit_case_nodes): Use generate_range_test.
2017-09-05  Martin Liska  <mliska@suse.cz>

PR tree-optimization/82032
* g++.dg/other/pr82032.C: New test.
* gcc.dg/tree-ssa/pr68198.c: Update scanned pattern.
* gcc.dg/tree-ssa/vrp34.c: Likewise.
* gcc.dg/switch-10.c: Likewise.

From-SVN: r251690

7 years agoDaily bump.
GCC Administrator [Tue, 5 Sep 2017 00:16:16 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r251689

7 years agompx-os-support.h: New file.
Uros Bizjak [Mon, 4 Sep 2017 18:34:06 +0000 (20:34 +0200)]
mpx-os-support.h: New file.

* gcc.target/i386/mpx/mpx-os-support.h: New file.
* gcc.target/i386/mpx/mpx-check.h: Include mpx-os-support.h.

From-SVN: r251683

7 years agore PR target/82098 (internal compiler error: in elimination_costs_in_insn, at reload1...
Uros Bizjak [Mon, 4 Sep 2017 18:28:20 +0000 (20:28 +0200)]
re PR target/82098 (internal compiler error: in elimination_costs_in_insn, at reload1.c:3616, -march=i686)

PR target/82098
* config/i386/i386.md (*<btsc><mode>_mask): Add
TARGET_USE_BT to insn constraint.
(*btr<mode>_mask): Ditto.

From-SVN: r251682

7 years agoFix ldrd offsets
Wilco Dijkstra [Mon, 4 Sep 2017 17:23:01 +0000 (17:23 +0000)]
Fix ldrd offsets

Fix the ldrd offsets of Thumb-2 - for TARGET_LDRD the range is +-1020,
without -252..4096.  This reduces the number of addressing instructions
when using DI mode operations (such as in PR77308).

    gcc/
* config/arm/arm.c (arm_legitimate_index_p): Add comment.
(thumb2_legitimate_index_p): Use correct range for DI/DF mode.

From-SVN: r251681

7 years agoPR libstdc++/79162 implement LWG 2946 and LWG 2758
Daniel Kruegler [Mon, 4 Sep 2017 15:48:47 +0000 (15:48 +0000)]
PR libstdc++/79162 implement LWG 2946 and LWG 2758

2017-09-04  Daniel Kruegler  <daniel.kruegler@gmail.com>

PR libstdc++/79162
Implement LWG 2946, LWG 2758's resolution missed further corrections
* include/bits/basic_string.h (basic_string::compare): Add missing
required noexcept specifications.
(basic_string): Introduce internal _S_to_string_view and __sv_wrapper
for implicit string_view conversion.
(basic_string::basic_string): Fix explicit string_view conversion by
implicit conversion using _S_to_string_view and __sv_wrapper.
(basic_string): Introduce internal basic_string(__sv_wrapper, Alloc)
constructor.
(basic_string): Fix operator=(T) template by operator=(const T&)
template for uncopyable types (PR 79162).
(basic_string::operator+=, basic_string::append, basic_string::assign)
(basic_string::insert, basic_string::replace, basic_string::find)
(basic_string::rfind, basic_string::find_first_of)
(basic_string::find_last_of, basic_string::find_first_not_of)
(basic_string::find_last_not_of, basic_string::compare): Replace
__sv_type argument by template const T& (LWG 2946) and correct
documentation describing __sv_type argument.
(basic_string::find, basic_string::rfind, basic_string::find_first_of)
(basic_string::find_last_of, basic_string::find_first_not_of)
(basic_string::find_last_not_of, basic_string::compare): Replace
unconditional noexcept specification by conditional noexcept
specification to partially balance the removal of noexcept by LWG 2946.
* testsuite/21_strings/basic_string/79162.cc: New.
* testsuite/21_strings/basic_string/lwg2946.cc: New.

From-SVN: r251664

7 years agore PR target/77308 (surprisingly large stack usage for sha512 on arm)
Bernd Edlinger [Mon, 4 Sep 2017 15:25:59 +0000 (15:25 +0000)]
re PR target/77308 (surprisingly large stack usage for sha512 on arm)

2017-09-04  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR target/77308
        * config/arm/arm.md (*arm_adddi3, *arm_subdi3): Split early except for
        TARGET_NEON and TARGET_IWMMXT.
        (anddi3, iordi3, xordi3, one_cmpldi2): Split while expanding except for
        TARGET_NEON and TARGET_IWMMXT.
        (*one_cmpldi2_insn): Moved the body of one_cmpldi2 here.

testsuite:
2017-09-04  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR target/77308
        * gcc.target/arm/pr77308-1.c: New test.

From-SVN: r251663

7 years ago* config/i386/i386-protos.h (ix86_tls_address_pattern_p) New prototype.
Uros Bizjak [Mon, 4 Sep 2017 15:11:42 +0000 (17:11 +0200)]
* config/i386/i386-protos.h (ix86_tls_address_pattern_p) New prototype.

(ix86_rewrite_tls_address): Ditto.
* config/i386/i386.c (ix86_tls_address_pattern_p) New function.
(ix86_rewrite_tls_address_1): Ditto.
(ix86_rewrite_tls_address): Ditto.
* config/i386/predicates.md (tls_address_pattern): New predicate.
* config/i386/i386.md (TLS address splitter): New splitter.

From-SVN: r251662

7 years agore PR c++/82084 (ICE: constructing wstring with -O3)
Richard Biener [Mon, 4 Sep 2017 14:10:11 +0000 (14:10 +0000)]
re PR c++/82084 (ICE: constructing wstring with -O3)

2017-09-04  Richard Biener  <rguenther@suse.de>

PR tree-optimization/82084
* fold-const.h (can_native_encode_string_p): Declare.
* fold-const.c (can_native_encode_string_p): Factor out from ...
(native_encode_string): ... here.
* tree-vect-stmts.c (vectorizable_store): Call it to avoid
vectorizing stores from constants we later cannot handle.

* g++.dg/torture/pr82084.C: New testcase.

From-SVN: r251661

7 years agore PR c/81783 (-Wtautological-compare could do better)
Marek Polacek [Mon, 4 Sep 2017 14:05:01 +0000 (14:05 +0000)]
re PR c/81783 (-Wtautological-compare could do better)

PR c/81783
* c-warn.c (warn_tautological_bitwise_comparison): New function.
(warn_tautological_cmp): Call it.

* doc/invoke.texi: Update -Wtautological-compare documentation.

* c-c++-common/Wtautological-compare-5.c: New test.

From-SVN: r251660

7 years agore PR tree-optimization/64910 (tree reassociation results in poor code)
Jeff Law [Mon, 4 Sep 2017 14:00:29 +0000 (08:00 -0600)]
re PR tree-optimization/64910 (tree reassociation results in poor code)

2017-09-03  Jeff Law  <law@redhat.com>

PR tree-optimization/64910
* tree-ssa-reassoc.c (reassociate_bb): For bitwise binary ops,
swap the first and last operand if the last is a constant.

PR tree-optimization/64910
* gcc.dg/tree-ssa/pr64910-2.c: New test.

From-SVN: r251659

7 years agore PR sanitizer/82072 (sanitizer does not detect an overflow from LLONG_MIN)
Marek Polacek [Mon, 4 Sep 2017 11:30:26 +0000 (11:30 +0000)]
re PR sanitizer/82072 (sanitizer does not detect an overflow from LLONG_MIN)

PR sanitizer/82072
* convert.c (do_narrow): When sanitizing signed integer overflows,
bail out for signed types.
(convert_to_integer_1) <case NEGATE_EXPR>: Likewise.

* c-c++-common/ubsan/pr82072.c: New test.

From-SVN: r251651

7 years agore PR tree-optimization/82060 (ICE in refs_may_alias_p_1 with devirtualization enabled)
Richard Biener [Mon, 4 Sep 2017 10:57:20 +0000 (10:57 +0000)]
re PR tree-optimization/82060 (ICE in refs_may_alias_p_1 with devirtualization enabled)

2017-09-04  Richard Biener  <rguenther@suse.de>

PR tree-optimization/82060
* tree-ssa-pre.c (eliminate_dom_walker::before_dom_children):
Move devirtualization after stmt folding and before EH/AB/noreturn
cleanup to get the stmt refs canonicalized.  Use a bool instead
of gimple_modified_p since that doesn't work for NOPs.  Schedule
NOPs generated by folding for removal.

* g++.dg/torture/pr82060.C: New testcase.

From-SVN: r251650

7 years agoTurn FUNCTION_ARG_PADDING into a target hook
Richard Sandiford [Mon, 4 Sep 2017 10:50:38 +0000 (10:50 +0000)]
Turn FUNCTION_ARG_PADDING into a target hook

This involved renaming the rather general-sounding "enum direction" to
"enum pad_direction" to avoid a conflict with the Fortran frontend.

2017-09-04  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* coretypes.h (pad_direction): New enum.
* defaults.h (DEFAULT_FUNCTION_ARG_PADDING): Delete.
(FUNCTION_ARG_PADDING): Likewise.
* target.def (function_arg_padding): New hook.
* targhooks.h (default_function_arg_padding): Declare.
* targhooks.c (default_function_arg_padding): New function.
* doc/tm.texi.in (FUNCTION_ARG_PADDING): Replace with...
(TARGET_FUNCTION_ARG_PADDING): ...this.
* doc/tm.texi: Regenerate.
* calls.c (store_unaligned_arguments_into_pseudos): Use pad_direction
instead of direction.
(compute_argument_addresses): Likewise.
(load_register_parameters): Likewise.
(emit_library_call_value_1): Likewise.
(store_one_arg): Use targetm.calls.function_arg_padding instead
of FUNCTION_ARG_PADDING.
(must_pass_in_stack_var_size_or_pad): Likewise.
* expr.c (emit_group_load_1): Use pad_direction instead of direction.
(emit_group_store): Likewise.
(emit_single_push_insn_1): Use targetm.calls.function_arg_padding
instead of FUNCTION_ARG_PADDING.
(emit_push_insn): Likewise, and propagate enum change throughout
function.
* function.h (direction): Delete.
(locate_and_pad_arg_data::where_pad): Use pad_direction instead
of direction.
* function.c (assign_parm_find_stack_rtl): Likewise.
(assign_parm_setup_block_p): Likewise.
(assign_parm_setup_block): Likewise.
(gimplify_parameters): Likewise.
(locate_and_pad_parm): Use targetm.calls.function_arg_padding
instead of FUNCTION_ARG_PADDING, and propagate enum change throughout
function.
* config/aarch64/aarch64.h (FUNCTION_ARG_PADDING): Delete.
(BLOCK_REG_PADDING): Use pad_direction instead of direction.
* config/aarch64/aarch64-protos.h (aarch64_pad_arg_upward): Delete.
* config/aarch64/aarch64.c (aarch64_pad_arg_upward): Replace with...
(aarch64_function_arg_padding): ...this new function.
(aarch64_gimplify_va_arg_expr): Use pad_direction instead of direction.
(TARGET_FUNCTION_ARG_PADDING): Redefine.
* config/arm/arm.h (FUNCTION_ARG_PADDING): Delete.
(BLOCK_REG_PADDING): Use pad_direction instead of direction.
* config/arm/arm-protos.h (arm_pad_arg_upward): Delete.
* config/arm/arm.c (TARGET_FUNCTION_ARG_PADDING): Redefine.
(arm_pad_arg_upward): Replace with...
(arm_function_arg_padding): ...this new function.
* config/c6x/c6x.h (BLOCK_REG_PADDING): Use pad_direction instead
of direction.
* config/ia64/hpux.h (FUNCTION_ARG_PADDING): Delete.
* config/ia64/ia64-protos.h (ia64_hpux_function_arg_padding): Delete.
* config/ia64/ia64.c (TARGET_FUNCTION_ARG_PADDING): Redefine.
(ia64_hpux_function_arg_padding): Replace with...
(ia64_function_arg_padding): ...this new function.  Use pad_direction
instead of direction.  Check for TARGET_HPUX.
* config/iq2000/iq2000.h (FUNCTION_ARG_PADDING): Delete.
* config/iq2000/iq2000.c (TARGET_FUNCTION_ARG_PADDING): Redefine.
(iq2000_function_arg_padding): New function.
* config/mips/mips-protos.h (mips_pad_arg_upward): Delete.
* config/mips/mips.c (mips_pad_arg_upward): Replace with...
(mips_function_arg_padding): ...this new function.
(mips_pad_reg_upward): Update accordingly.
(TARGET_FUNCTION_ARG_PADDING): Redefine.
* config/mips/mips.h (PAD_VARARGS_DOWN): Use
targetm.calls.function_arg_padding.
(FUNCTION_ARG_PADDING): Delete.
(BLOCK_REG_PADDING): Use pad_direction instead of direction.
* config/nios2/nios2.h (FUNCTION_ARG_PADDING): Delete.
(PAD_VARARGS_DOWN): Use targetm.calls.function_arg_padding.
* config/nios2/nios2-protos.h (nios2_function_arg_padding): Delete.
(nios2_block_reg_padding): Return pad_direction instead of direction.
* config/nios2/nios2.c (nios2_block_reg_padding): Return pad_direction
instead of direction.
(nios2_function_arg_padding): Likewise.  Make static.
(TARGET_FUNCTION_ARG_PADDING): Redefine.
* config/pa/pa.h (FUNCTION_ARG_PADDING): Delete.
(BLOCK_REG_PADDING): Use targetm.calls.function_arg_padding.
* config/pa/pa-protos.h (pa_function_arg_padding): Delete.
* config/pa/pa.c (TARGET_FUNCTION_ARG_PADDING): Redefine.
(pa_function_arg_padding): Make static.  Return pad_direction instead
of direction.
* config/powerpcspe/powerpcspe.h (FUNCTION_ARG_PADDING): Delete.
(PAD_VARARGS_DOWN): Use targetm.calls.function_arg_padding.
* config/powerpcspe/aix.h (BLOCK_REG_PADDING): Use pad_direction
instead of direction.  Use targetm.calls.function_arg_padding.
* config/powerpcspe/darwin.h (BLOCK_REG_PADDING): Likewise.
* config/powerpcspe/freebsd64.h (BLOCK_REG_PADDING): Likewise.
* config/powerpcspe/linux64.h (BLOCK_REG_PADDING): Likewise.
* config/powerpcspe/powerpcspe-protos.h (function_arg_padding): Delete.
* config/powerpcspe/powerpcspe.c (TARGET_FUNCTION_ARG_PADDING):
Redefine.
(function_arg_padding): Rename to...
(rs6000_function_arg_padding): ...this.  Make static.  Return
pad_direction instead of direction.
(rs6000_return_in_msb): Use rs6000_function_arg_padding.
* config/rs6000/rs6000.h (FUNCTION_ARG_PADDING): Delete.
(PAD_VARARGS_DOWN): Use targetm.calls.function_arg_padding.
* config/rs6000/aix.h (BLOCK_REG_PADDING): Use pad_direction
instead of direction.  Use targetm.calls.function_arg_padding.
* config/rs6000/darwin.h (BLOCK_REG_PADDING): Likewise.
* config/rs6000/freebsd64.h (BLOCK_REG_PADDING): Likewise.
* config/rs6000/linux64.h (BLOCK_REG_PADDING): Likewise.
* config/rs6000/rs6000-protos.h (function_arg_padding): Delete.
* config/rs6000/rs6000.c (TARGET_FUNCTION_ARG_PADDING): Redefine.
(function_arg_padding): Rename to...
(rs6000_function_arg_padding): ...this.  Make static.  Return
pad_direction instead of direction.
(rs6000_return_in_msb): Use rs6000_function_arg_padding.
* config/s390/s390.h (FUNCTION_ARG_PADDING): Delete.
* config/s390/s390.c (s390_function_arg_padding): New function.
(TARGET_FUNCTION_ARG_PADDING): Redefine.
* config/sparc/sparc.h (FUNCTION_ARG_PADDING): Delete.
* config/sparc/sparc-protos.h (function_arg_padding): Delete.
* config/sparc/sparc.c (TARGET_FUNCTION_ARG_PADDING): Redefine.
(function_arg_padding): Rename to...
(sparc_function_arg_padding): ...this.  Make static.  Return
pad_direction instead of direction.
* config/spu/spu.h (FUNCTION_ARG_PADDING): Delete.
* config/spu/spu.c (spu_function_arg_padding): New function.
(TARGET_FUNCTION_ARG_PADDING): Redefine.
* system.h (FUNCTION_ARG_PADDING): Poison.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r251648

7 years agoTurn MODES_TIEABLE_P into a target hook
Richard Sandiford [Mon, 4 Sep 2017 10:50:23 +0000 (10:50 +0000)]
Turn MODES_TIEABLE_P into a target hook

2017-09-04  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* target.def (modes_tieable_p): New hook.
* doc/tm.texi (MODES_TIEABLE_P): Replace with...
(TARGET_MODES_TIEABLE_P): ...this.
* doc/tm.texi.in: Regenerate.
* hooks.h (hook_bool_mode_mode_true): Declare.
* hooks.c (hook_bool_mode_mode_true): New function.
* combine.c (subst): Use targetm.modes_tieable_p instead of
MODES_TIEABLE_P.
* dse.c (find_shift_sequence): Likewise.
* expmed.c (extract_low_bits): Likewise.
* lower-subreg.c: Include target.h.
(find_decomposable_subregs): Use targetm.modes_tieable_p instead of
MODES_TIEABLE_P.
* rtlanal.c (rtx_cost): Likewise.
* config/aarch64/aarch64.h (MODES_TIEABLE_P): Delete.
* config/aarch64/aarch64-protos.h (aarch64_modes_tieable_p): Delete.
* config/aarch64/aarch64.c (aarch64_modes_tieable_p): Make static.
(TARGET_MODES_TIEABLE_P): Redefine.
* config/alpha/alpha.h (MODES_TIEABLE_P): Delete.
* config/alpha/alpha.c (alpha_modes_tieable_p): New function.
(TARGET_MODES_TIEABLE_P): Redefine.
* config/arc/arc.h (MODES_TIEABLE_P): Delete.
* config/arc/arc.c (TARGET_MODES_TIEABLE_P): Redefine.
(arc_modes_tieable_p): New function.
* config/arm/arm.h (MODES_TIEABLE_P): Delete.
* config/arm/arm-protos.h (arm_modes_tieable_p): Delete.
* config/arm/arm.c (TARGET_MODES_TIEABLE_P): Redefine.
(arm_modes_tieable_p): Make static.
* config/avr/avr.h (MODES_TIEABLE_P): Delete.
* config/bfin/bfin.h (MODES_TIEABLE_P): Delete.
* config/bfin/bfin.c (bfin_modes_tieable_p): New function.
(TARGET_MODES_TIEABLE_P): Redefine.
* config/c6x/c6x.h (MODES_TIEABLE_P): Delete.
* config/c6x/c6x.c (c6x_modes_tieable_p): New function.
(TARGET_MODES_TIEABLE_P): Redefine.
* config/cr16/cr16.h (MODES_TIEABLE_P): Delete.
* config/cr16/cr16.c (TARGET_MODES_TIEABLE_P): Redefine.
(cr16_modes_tieable_p): New function.
* config/cris/cris.h (MODES_TIEABLE_P): Delete.
* config/epiphany/epiphany.h (MODES_TIEABLE_P): Delete.
* config/fr30/fr30.h (MODES_TIEABLE_P): Delete.
(TRULY_NOOP_TRUNCATION): Update comment.
* config/frv/frv.h (MODES_TIEABLE_P): Delete.
(TRULY_NOOP_TRUNCATION): Update comment.
* config/frv/frv.c (TARGET_MODES_TIEABLE_P): Redefine.
(frv_modes_tieable_p): New function.
* config/ft32/ft32.h (MODES_TIEABLE_P): Delete.
* config/h8300/h8300.h (MODES_TIEABLE_P): Delete.
* config/h8300/h8300.c (h8300_modes_tieable_p): New function.
(TARGET_MODES_TIEABLE_P): Redefine.
* config/i386/i386.h (MODES_TIEABLE_P): Delete.
* config/i386/i386-protos.h (ix86_modes_tieable_p): Delete.
* config/i386/i386.c (ix86_modes_tieable_p): Make static.
(TARGET_MODES_TIEABLE_P): Redefine.
* config/ia64/ia64.h (MODES_TIEABLE_P): Delete.
* config/ia64/ia64.c (TARGET_MODES_TIEABLE_P): Redefine.
(ia64_modes_tieable_p): New function.
* config/iq2000/iq2000.h (MODES_TIEABLE_P): Delete.
* config/iq2000/iq2000.c (TARGET_MODES_TIEABLE_P): Redefine.
(iq2000_modes_tieable_p): New function.
* config/lm32/lm32.h (MODES_TIEABLE_P): Delete.
* config/lm32/lm32.c (TARGET_MODES_TIEABLE_P): Redefine.
(lm32_modes_tieable_p): New function.
* config/m32c/m32c.h (MODES_TIEABLE_P): Delete.
* config/m32c/m32c-protos.h (m32c_modes_tieable_p): Delete.
* config/m32c/m32c.c (m32c_modes_tieable_p): Make static.
(TARGET_MODES_TIEABLE_P): Redefine.
* config/m32r/m32r.h (MODES_TIEABLE_P): Delete.
* config/m32r/m32r.c (TARGET_MODES_TIEABLE_P): Redefine.
(m32r_modes_tieable_p): New function.
* config/m68k/m68k.h (MODES_TIEABLE_P): Delete.
* config/m68k/m68k.c (TARGET_MODES_TIEABLE_P): Redefine.
(m68k_modes_tieable_p): New function.
* config/mcore/mcore.h (MODES_TIEABLE_P): Delete.
* config/mcore/mcore.c (TARGET_MODES_TIEABLE_P): Redefine.
(mcore_modes_tieable_p): New function.
* config/microblaze/microblaze.h (MODES_TIEABLE_P): Delete.
* config/microblaze/microblaze.c (microblaze_modes_tieable_p): New
function.
(TARGET_MODES_TIEABLE_P): Redefine.
* config/mips/mips.h (MODES_TIEABLE_P): Delete.
* config/mips/mips-protos.h (mips_modes_tieable_p): Delete.
* config/mips/mips.c (mips_modes_tieable_p): Make static.
(TARGET_MODES_TIEABLE_P): Redefine.
* config/mmix/mmix.h (MODES_TIEABLE_P): Delete.
* config/mn10300/mn10300.h (MODES_TIEABLE_P): Delete.
* config/mn10300/mn10300-protos.h (mn10300_modes_tieable): Delete.
* config/mn10300/mn10300.c (mn10300_modes_tieable): Rename to...
(mn10300_modes_tieable_p): ...this and make static.
(TARGET_MODES_TIEABLE_P): Redefine.
* config/moxie/moxie.h (MODES_TIEABLE_P): Delete.
* config/msp430/msp430.h (MODES_TIEABLE_P): Delete.
* config/msp430/msp430-protos.h (msp430_modes_tieable_p): Delete.
* config/msp430/msp430.c (TARGET_MODES_TIEABLE_P): Redefine.
(msp430_modes_tieable_p): Make static.
* config/nds32/nds32.h (MODES_TIEABLE_P): Delete.
* config/nds32/nds32.c (nds32_modes_tieable_p): New function.
(TARGET_MODES_TIEABLE_P): Redefine.
* config/nios2/nios2.h (MODES_TIEABLE_P): Delete.
* config/nvptx/nvptx.h (MODES_TIEABLE_P): Delete.
* config/nvptx/nvptx.c (nvptx_modes_tieable_p): New function.
(TARGET_MODES_TIEABLE_P): Redefine.
* config/pa/pa.h (MODES_TIEABLE_P): Delete.
* config/pa/pa-protos.h (pa_modes_tieable_p): Delete.
* config/pa/pa.c (pa_modes_tieable_p): Make static.
(TARGET_MODES_TIEABLE_P): Redefine.
* config/pdp11/pdp11.h (MODES_TIEABLE_P): Delete.
* config/pdp11/pdp11.c (TARGET_MODES_TIEABLE_P): Redefine.
(pdp11_modes_tieable_p): New function.
* config/powerpcspe/powerpcspe.h (MODES_TIEABLE_P): Delete.
* config/powerpcspe/powerpcspe.c (TARGET_MODES_TIEABLE_P): Redefine.
(rs6000_modes_tieable_p): New function.
(rs6000_debug_reg_global): Use it instead of MODES_TIEABLE_P.
* config/powerpcspe/powerpcspe.md: Update comment.
* config/riscv/riscv.h (MODES_TIEABLE_P): Delete.
* config/riscv/riscv.c (riscv_modes_tieable_p): New function.
(TARGET_MODES_TIEABLE_P): Redefine.
* config/rl78/rl78.h (MODES_TIEABLE_P): Delete.
* config/rl78/rl78.c (TARGET_MODES_TIEABLE_P): Redefine.
(rl78_modes_tieable_p): New function.
* config/rs6000/rs6000.h (MODES_TIEABLE_P): Delete.
* config/rs6000/rs6000.c (TARGET_MODES_TIEABLE_P): Redefine.
(rs6000_modes_tieable_p): New function.
(rs6000_debug_reg_global): Use it instead of MODES_TIEABLE_P.
* config/rs6000/rs6000.md: Update comment.
* config/rx/rx.h (MODES_TIEABLE_P): Delete.
* config/rx/rx.c (rx_modes_tieable_p): New function.
(TARGET_MODES_TIEABLE_P): Redefine.
* config/s390/s390.h (MODES_TIEABLE_P): Delete.
* config/s390/s390.c (s390_modes_tieable_p): New function.
(TARGET_MODES_TIEABLE_P): Redefine.
* config/sh/sh.h (MODES_TIEABLE_P): Delete.
* config/sh/sh.c (TARGET_MODES_TIEABLE_P): Redefine.
(sh_modes_tieable_p): New function.
* config/sparc/sparc.h (MODES_TIEABLE_P): Delete.
* config/sparc/sparc-protos.h (sparc_modes_tieable_p): Delete.
* config/sparc/sparc.c (TARGET_MODES_TIEABLE_P): Redefine.
(sparc_modes_tieable_p): Make static.
* config/spu/spu.h (MODES_TIEABLE_P): Delete.
* config/spu/spu.c (spu_modes_tieable_p): New function.
(TARGET_MODES_TIEABLE_P): Redefine.
* config/stormy16/stormy16.h (MODES_TIEABLE_P): Delete.
* config/stormy16/stormy16.c (xstormy16_modes_tieable_p): New function.
(TARGET_MODES_TIEABLE_P): Redefine.
* config/tilegx/tilegx.h (MODES_TIEABLE_P): Delete.
* config/tilepro/tilepro.h (MODES_TIEABLE_P): Delete.
* config/v850/v850.h (MODES_TIEABLE_P): Delete.
* config/v850/v850.c (v850_modes_tieable_p): New function.
(TARGET_MODES_TIEABLE_P): Redefine.
* config/vax/vax.h (MODES_TIEABLE_P): Delete.
* config/visium/visium.h (MODES_TIEABLE_P): Delete.
* config/visium/visium.c (TARGET_MODES_TIEABLE_P): Redefine.
(visium_modes_tieable_p): New function.
* config/xtensa/xtensa.h (MODES_TIEABLE_P): Delete.
* config/xtensa/xtensa.c (TARGET_MODES_TIEABLE_P): Redefine.
(xtensa_modes_tieable_p): New function.
* system.h (MODES_TIEABLE_P): Poison.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r251647

7 years agoTurn HARD_REGNO_MODE_OK into a target hook
Richard Sandiford [Mon, 4 Sep 2017 10:49:59 +0000 (10:49 +0000)]
Turn HARD_REGNO_MODE_OK into a target hook

2017-09-04  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* target.def (hard_regno_mode_ok): New hook.
* doc/tm.texi (HARD_REGNO_MODE_OK): Replace with...
(TARGET_HARD_REGNO_MODE_OK): ...this.
* doc/tm.texi.in: Regenerate.
* hooks.h (hook_bool_uint_mode_true): Declare.
* hooks.c (hook_bool_uint_mode_true): New function.
* doc/md.texi: Refer to targetm.hard_regno_mode_ok instead of
HARD_REGNO_MODE_OK.
* genpreds.c (write_insn_preds_c): Add an include of target.h.
* alias.c (init_alias_target): Use targetm.hard_regno_mode_ok
instead of HARD_REGNO_MODE_OK.
* caller-save.c: Include target.h.
(reg_save_code): Use targetm.hard_regno_mode_ok instead of
HARD_REGNO_MODE_OK.
* combine.c (can_combine_p): Likewise.
(combinable_i3pat): Likewise.
(can_change_dest_mode): Likewise.
* expr.c (init_expr_target): Likewise.
(convert_move): Likewise.
(convert_modes): Likewise.
* ira.c (setup_prohibited_class_mode_regs): Likewise.
(setup_prohibited_mode_move_regs): Likewise.
* ira.h (target_ira): Likewise.
* lra-assigns.c (find_hard_regno_for_1): Likewise.
* lra-constraints.c (process_alt_operands): Likewise.
(split_reg): Likewise.
* recog.c (peep2_find_free_register): Likewise.
* ree.c (combine_reaching_defs): Likewise.
* regcprop.c (maybe_mode_change): Likewise.
* reginfo.c (init_reg_sets_1): Likewise.
(choose_hard_reg_mode): Likewise.
(simplifiable_subregs): Likewise.
* regrename.c (check_new_reg_p): Likewise.
* reload.c (find_valid_class): Likewise.
(find_valid_class_1): Likewise.
(reload_inner_reg_of_subreg): Likewise.
(push_reload): Likewise.
(combine_reloads): Likewise.
(find_dummy_reload): Likewise.
(find_reloads): Likewise.
* reload1.c (find_reg): Likewise.
(set_reload_reg): Likewise.
(allocate_reload_reg): Likewise.
(choose_reload_regs): Likewise.
(reload_adjust_reg_for_temp): Likewise.
* rtlanal.c (subreg_size_offset_from_lsb): Likewise.
(simplify_subreg_regno): Likewise.
* sel-sched.c (init_regs_for_mode): Likewise.
* varasm.c (make_decl_rtl): Likewise.
* config/aarch64/aarch64.h (HARD_REGNO_MODE_OK): Delete.
(MODES_TIEABLE_P): Use targetm.hard_regno_mode_ok instead of
HARD_REGNO_MODE_OK.
* config/aarch64/aarch64-protos.h (aarch64_hard_regno_mode_ok): Delete.
* config/aarch64/aarch64.c (aarch64_hard_regno_mode_ok): Make static.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
* config/alpha/alpha.h (HARD_REGNO_MODE_OK): Delete.
* config/alpha/alpha.c (alpha_hard_regno_mode_ok): New function.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
* config/arc/arc.h (arc_hard_regno_mode_ok): Delete.
(arc_mode_class): Delete.
(HARD_REGNO_MODE_OK): Delete.
* config/arc/arc.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
(arc_hard_regno_mode_ok): Rename old array to...
(arc_hard_regno_mode_ok_modes): ...this.
(arc_conditional_register_usage): Update accordingly.
(arc_mode_class): Make static.
(arc_hard_regno_mode_ok): New function.
* config/arm/arm.h (HARD_REGNO_MODE_OK): Delete.
* config/arm/arm-protos.h (arm_hard_regno_mode_ok): Delete.
* config/arm/arm.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
(arm_hard_regno_mode_ok): Make static.
* config/arm/arm.md (movdi): Use targetm.hard_regno_mode_ok instead of
HARD_REGNO_MODE_OK.
* config/avr/avr-protos.h (avr_hard_regno_mode_ok): Delete.
* config/avr/avr.h (HARD_REGNO_MODE_OK): Delete.
* config/avr/avr.c (avr_hard_regno_mode_ok): Make static and
return a bool.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
* config/bfin/bfin-protos.h (hard_regno_mode_ok): Delete.
* config/bfin/bfin.h (HARD_REGNO_MODE_OK): Delete.
* config/bfin/bfin.c (hard_regno_mode_ok): Rename to...
(bfin_hard_regno_mode_ok): ...this.  Make static and return a bool.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
* config/bfin/predicates.md (valid_reg_operand): Use
targetm.hard_regno_mode_ok instead of HARD_REGNO_MODE_OK.
* config/c6x/c6x.h (HARD_REGNO_MODE_OK): Delete.
* config/c6x/c6x.c (c6x_hard_regno_mode_ok): New function.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
* config/cr16/cr16.h (HARD_REGNO_MODE_OK): Delete.
* config/cr16/cr16-protos.h (cr16_hard_regno_mode_ok): Delete.
* config/cr16/cr16.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
(cr16_hard_regno_mode_ok): Make static and return a bool.
* config/cris/cris.h (HARD_REGNO_MODE_OK): Delete.
* config/cris/cris.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
(cris_hard_regno_mode_ok): New function.
* config/epiphany/epiphany.h (epiphany_hard_regno_mode_ok): Delete.
(epiphany_mode_class): Delete.
(HARD_REGNO_MODE_OK): Delete.
* config/epiphany/epiphany-protos.h (hard_regno_mode_ok): Delete.
* config/epiphany/epiphany.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
(hard_regno_mode_ok): Rename to...
(epiphany_hard_regno_mode_ok): ...this.  Make static and return a bool.
* config/fr30/fr30.h (HARD_REGNO_MODE_OK): Delete.
* config/fr30/fr30.md: Refer to targetm.hard_regno_mode_ok instead of
HARD_REGNO_MODE_OK.
* config/frv/frv.h (HARD_REGNO_MODE_OK): Delete.
* config/frv/frv-protos.h (frv_hard_regno_mode_ok): Delete.
* config/frv/frv.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
(frv_hard_regno_mode_ok): Make static and return a bool.
* config/frv/frv.md: Refer to targetm.hard_regno_mode_ok instead of
HARD_REGNO_MODE_OK.
* config/ft32/ft32.h (HARD_REGNO_MODE_OK): Delete.
* config/h8300/h8300.h (HARD_REGNO_MODE_OK): Delete.
* config/h8300/h8300-protos.h (h8300_hard_regno_mode_ok): Delete.
* config/h8300/h8300.c (h8300_hard_regno_mode_ok): Make static
and return a bool.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
* config/i386/i386.h (HARD_REGNO_MODE_OK): Delete.
* config/i386/i386-protos.h (ix86_hard_regno_mode_ok): Delete.
* config/i386/i386.c (ix86_hard_regno_mode_ok): Make static and
return a bool.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
* config/ia64/ia64.h (HARD_REGNO_MODE_OK): Delete.
* config/ia64/ia64.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
(ia64_hard_regno_mode_ok): New function.
* config/iq2000/iq2000.h (HARD_REGNO_MODE_OK): Delete.
* config/iq2000/iq2000.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
(iq2000_hard_regno_mode_ok): New function.
* config/lm32/lm32.h (HARD_REGNO_MODE_OK): Delete.
* config/lm32/lm32.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
(lm32_hard_regno_mode_ok): New function.
* config/m32c/m32c.h (HARD_REGNO_MODE_OK): Delete.
* config/m32c/m32c-protos.h (m32c_hard_regno_ok): Delete.
* config/m32c/m32c.c (class_can_hold_mode): Use m32c_hard_regno_mode_ok
instead of HARD_REGNO_MODE_OK.
(m32c_hard_regno_ok): Rename to...
(m32c_hard_regno_mode_ok): ...this.  Make static and return a bool.
(m32c_cannot_change_mode_class): Update accordingly.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
* config/m32r/m32r.h (m32r_hard_regno_mode_ok): Delete.
(m32r_mode_class): Delete.
(HARD_REGNO_MODE_OK): Delete.
* config/m32r/m32r.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
(m32r_hard_regno_mode_ok): Rename to...
(m32r_hard_regno_modes): ...this.
(m32r_mode_class): Make static.
(m32r_hard_regno_mode_ok): New function.
* config/m68k/m68k.h (HARD_REGNO_MODE_OK): Delete.
* config/m68k/m68k-protos.h (m68k_regno_mode_ok): Delete.
* config/m68k/m68k.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
(m68k_hard_regno_mode_ok): Make static.
* config/mcore/mcore.h (HARD_REGNO_MODE_OK): Delete.
* config/mcore/mcore.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
(mcore_hard_regno_mode_ok): New function.
* config/microblaze/microblaze.h (microblaze_hard_regno_mode_ok)
(HARD_REGNO_MODE_OK): Delete.
* config/microblaze/microblaze.c (microblaze_hard_regno_mode_ok):
Rename to...
(microblaze_hard_regno_mode_ok_p): ...this and make static.
(microblaze_hard_regno_mode_ok): New function.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
* config/mips/mips.h (HARD_REGNO_MODE_OK): Delete.
(mips_hard_regno_mode_ok): Delete.
* config/mips/mips.c (mips_hard_regno_mode_ok): Rename to...
(mips_hard_regno_mode_ok_p): ...this and make static.
(mips_hard_regno_mode_ok_p): Rename to...
(mips_hard_regno_mode_ok_uncached): ...this.
(mips_hard_regno_mode_ok): New function.
(mips_class_max_nregs): Use mips_hard_regno_mode_ok instead
of HARD_REGNO_MODE_OK.
(mips_option_override): Update after above name changes.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
* config/mmix/mmix.h (HARD_REGNO_MODE_OK): Delete.
* config/mn10300/mn10300.h (HARD_REGNO_MODE_OK): Delete.
* config/mn10300/mn10300-protos.h (mn10300_hard_regno_mode_ok): Delete.
* config/mn10300/mn10300.c (mn10300_hard_regno_mode_ok): Make static.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
* config/moxie/moxie.h (HARD_REGNO_MODE_OK): Delete.
* config/msp430/msp430.h (HARD_REGNO_MODE_OK): Delete.
* config/msp430/msp430-protos.h (msp430_hard_regno_mode_ok): Delete.
* config/msp430/msp430.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
(msp430_hard_regno_mode_ok): Make static and return a bool.
* config/nds32/nds32.h (HARD_REGNO_MODE_OK): Delete.
* config/nds32/nds32-protos.h (nds32_hard_regno_mode_ok): Delete.
* config/nds32/nds32.c (nds32_hard_regno_mode_ok): Make static
and return a bool.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
* config/nios2/nios2.h (HARD_REGNO_MODE_OK): Delete.
* config/nvptx/nvptx.h (HARD_REGNO_MODE_OK): Delete.
* config/pa/pa.h (MODES_TIEABLE_P): Update commentary.
* config/pa/pa32-regs.h (HARD_REGNO_MODE_OK): Rename to...
(PA_HARD_REGNO_MODE_OK): ...this
* config/pa/pa64-regs.h (HARD_REGNO_MODE_OK): Rename to...
(PA_HARD_REGNO_MODE_OK): ...this.
* config/pa/pa.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
(pa_hard_regno_mode_ok): New function.
* config/pdp11/pdp11.h (HARD_REGNO_MODE_OK): Delete.
* config/pdp11/pdp11.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
(pdp11_hard_regno_mode_ok): New function.
* config/powerpcspe/powerpcspe.h (HARD_REGNO_MODE_OK): Delete.
* config/powerpcspe/powerpcspe-protos.h (rs6000_hard_regno_mode_ok_p):
Delete.
* config/powerpcspe/powerpcspe.c (rs6000_hard_regno_mode_ok_p):
Make static.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
(rs6000_hard_regno_mode_ok): Rename to...
(rs6000_hard_regno_mode_ok_uncached): ...this.
(rs6000_init_hard_regno_mode_ok): Update accordingly.
(rs6000_hard_regno_mode_ok): New function.
* config/riscv/riscv.h (HARD_REGNO_MODE_OK): Delete.
* config/riscv/riscv-protos.h (riscv_hard_regno_mode_ok_p): Delete.
* config/riscv/riscv.c (riscv_hard_regno_mode_ok_p): Rename to...
(riscv_hard_regno_mode_ok): ...this and make static.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
* config/rl78/rl78.h (HARD_REGNO_MODE_OK): Delete.
* config/rl78/rl78-protos.h (rl78_hard_regno_mode_ok): Delete.
* config/rl78/rl78.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
(rl78_hard_regno_mode_ok): Make static and return bool.
* config/rs6000/rs6000.h (HARD_REGNO_MODE_OK): Delete.
* config/rs6000/rs6000-protos.h (rs6000_hard_regno_mode_ok_p):
Delete.
* config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok_p): Make static.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
(rs6000_hard_regno_mode_ok): Rename to...
(rs6000_hard_regno_mode_ok_uncached): ...this.
(rs6000_init_hard_regno_mode_ok): Update accordingly.
(rs6000_hard_regno_mode_ok): New function.
* config/rx/rx.h (HARD_REGNO_MODE_OK): Delete.
* config/rx/rx.c (rx_hard_regno_mode_ok): New function.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
* config/s390/s390.h (HARD_REGNO_MODE_OK): Delete.
* config/s390/s390-protos.h (s390_hard_regno_mode_ok): Delete.
* config/s390/s390.c (s390_hard_regno_mode_ok): Make static.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
* config/sh/sh.h (HARD_REGNO_MODE_OK): Delete.
* config/sh/sh-protos.h (sh_hard_regno_mode_ok): Delete.
* config/sh/sh.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
(sh_hard_regno_mode_ok): Make static.
* config/sparc/constraints.md: Refer to targetm.hard_regno_mode_ok
instead of HARD_REGNO_MODE_OK.
* config/sparc/sparc.h (hard_regno_mode_classes): Delete.
(sparc_mode_class): Delete.
(HARD_REGNO_MODE_OK): Delete.
* config/sparc/sparc.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
(hard_regno_mode_classes): Make static.
(sparc_mode_class): Likewise.
(sparc_hard_regno_mode_ok): New function.
* config/spu/spu.h (HARD_REGNO_MODE_OK): Delete.
* config/stormy16/stormy16.h (HARD_REGNO_MODE_OK): Delete.
* config/stormy16/stormy16.c (xstormy16_hard_regno_mode_ok): New
function.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
* config/tilegx/tilegx.h (HARD_REGNO_MODE_OK): Delete.
* config/tilepro/tilepro.h (HARD_REGNO_MODE_OK): Delete.
* config/v850/v850.h (HARD_REGNO_MODE_OK): Delete.
* config/v850/v850.c (v850_hard_regno_mode_ok): New function.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
* config/vax/vax.h (HARD_REGNO_MODE_OK): Delete.
* config/visium/visium.h (HARD_REGNO_MODE_OK): Delete.
* config/visium/visium.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
(visium_hard_regno_mode_ok): New function.
* config/visium/visium.md: Refer to targetm.hard_regno_mode_ok
instead of HARD_REGNO_MODE_OK.
* config/xtensa/xtensa.h (xtensa_hard_regno_mode_ok): Delete.
(HARD_REGNO_MODE_OK): Delete.
* config/xtensa/xtensa.c (xtensa_hard_regno_mode_ok): Rename to...
(xtensa_hard_regno_mode_ok_p): ...this and make static.
(xtensa_option_override): Update accordingly.
(TARGET_HARD_REGNO_MODE_OK): Redefine.
(xtensa_hard_regno_mode_ok): New function.
* system.h (HARD_REGNO_MODE_OK): Poison.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r251646

7 years agoTurn HARD_REGNO_CALL_PART_CLOBBERED into a target hook
Richard Sandiford [Mon, 4 Sep 2017 10:49:21 +0000 (10:49 +0000)]
Turn HARD_REGNO_CALL_PART_CLOBBERED into a target hook

The SVE patches change the size of a machine_mode from a compile-time
constant to a runtime invariant.  However, target-specific code can
continue to treat the modes as constant-sized if the target only has
constant-sized modes.

The main snag with this approach is that target-independent code still
uses macros from the target .h file.  This patch is one of several that
converts a target macro to a hook.

2017-09-04  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* target.def (hard_regno_call_part_clobbered): New hook.
* doc/tm.texi.in (HARD_REGNO_CALL_PART_CLOBBERED): Replace with...
(TARGET_HARD_REGNO_CALL_PART_CLOBBERED): ...this hook.
* doc/tm.texi: Regenerate.
* hooks.h (hook_bool_uint_mode_false): Declare.
* hooks.c (hook_bool_uint_mode_false): New function.
* regs.h (HARD_REGNO_CALL_PART_CLOBBERED): Delete.
* cselib.c (cselib_process_insn): Use
targetm.hard_regno_call_part_clobbered instead of
HARD_REGNO_CALL_PART_CLOBBERED.
* ira-conflicts.c (ira_build_conflicts): Likewise.
* ira-costs.c (ira_tune_allocno_costs): Likewise.
* lra-constraints.c (need_for_call_save_p): Likewise.
* lra-lives.c: Include target.h.
(check_pseudos_live_through_calls): Use
targetm.hard_regno_call_part_clobbered instead of
HARD_REGNO_CALL_PART_CLOBBERED.
* regcprop.c: Include target.h.
(copyprop_hardreg_forward_1): Use
targetm.hard_regno_call_part_clobbered instead of
HARD_REGNO_CALL_PART_CLOBBERED.
* reginfo.c (choose_hard_reg_mode): Likewise.
* regrename.c (check_new_reg_p): Likewise.
* reload.c (find_equiv_reg): Likewise.
* reload1.c (emit_reload_insns): Likewise.
* sched-deps.c (deps_analyze_insn): Likewise.
* sel-sched.c (init_regs_for_mode): Likewise.
(mark_unavailable_hard_regs): Likewise.
* targhooks.c (default_dwarf_frame_reg_mode): Likewise.
* config/aarch64/aarch64.h (HARD_REGNO_CALL_PART_CLOBBERED): Delete.
* config/aarch64/aarch64.c (aarch64_hard_regno_call_part_clobbered):
New function.
(TARGET_HARD_REGNO_CALL_PART_CLOBBERED): Redefine.
* config/avr/avr.h (HARD_REGNO_CALL_PART_CLOBBERED): Delete.
* config/avr/avr-protos.h (avr_hard_regno_call_part_clobbered):
Delete.
* config/avr/avr.c (avr_hard_regno_call_part_clobbered): Make static
and return a bool.
(TARGET_HARD_REGNO_CALL_PART_CLOBBERED): Redefine.
* config/i386/i386.h (HARD_REGNO_CALL_PART_CLOBBERED): Delete.
* config/i386/i386.c (ix86_hard_regno_call_part_clobbered): New
function.
(TARGET_HARD_REGNO_CALL_PART_CLOBBERED): Redefine.
* config/mips/mips.h (HARD_REGNO_CALL_PART_CLOBBERED): Delete.
* config/mips/mips.c (mips_hard_regno_call_part_clobbered): New
function.
(TARGET_HARD_REGNO_CALL_PART_CLOBBERED): Redefine.
* config/powerpcspe/powerpcspe.h (HARD_REGNO_CALL_PART_CLOBBERED):
Delete.
* config/powerpcspe/powerpcspe.c
(rs6000_hard_regno_call_part_clobbered): New function.
(TARGET_HARD_REGNO_CALL_PART_CLOBBERED): Redefine.
* config/rs6000/rs6000.h (HARD_REGNO_CALL_PART_CLOBBERED): Delete.
* config/rs6000/rs6000.c (rs6000_hard_regno_call_part_clobbered):
New function.
(TARGET_HARD_REGNO_CALL_PART_CLOBBERED): Redefine.
* config/s390/s390.h (HARD_REGNO_CALL_PART_CLOBBERED): Delete.
* config/s390/s390.c (s390_hard_regno_call_part_clobbered): New
function.
(TARGET_HARD_REGNO_CALL_PART_CLOBBERED): Redefine.
* config/sh/sh.h (HARD_REGNO_CALL_PART_CLOBBERED): Delete.
* system.h (HARD_REGNO_CALL_PART_CLOBBERED): Poison.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r251645

7 years agoAdd subreg_memory_offset helper functions
Richard Sandiford [Mon, 4 Sep 2017 10:48:40 +0000 (10:48 +0000)]
Add subreg_memory_offset helper functions

This patch adds routines for converting a SUBREG_BYTE offset into a
memory address offset.  The two only differ for paradoxical subregs,
where SUBREG_BYTE is always 0 but the memory address offset can be
negative.

2017-09-04  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* rtl.h (subreg_memory_offset): Declare.
* emit-rtl.c (subreg_memory_offset): New function.
* expmed.c (store_bit_field_1): Use it.
* expr.c (undefined_operand_subword_p): Likewise.
* simplify-rtx.c (simplify_subreg): Likewise.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r251644

7 years agooptabs: ensure atomic_load/stores have compiler barriers
Alexander Monakov [Mon, 4 Sep 2017 10:16:37 +0000 (13:16 +0300)]
optabs: ensure atomic_load/stores have compiler barriers

PR rtl-optimization/57448
PR target/67458
PR target/81316
* optabs.c (expand_atomic_load): Place compiler memory barriers if
using atomic_load pattern.
(expand_atomic_store): Likewise.
testsuite/
* gcc.dg/atomic/pr80640-2.c: New testcase.
* gcc.dg/atomic/pr81316.c: New testcase.

From-SVN: r251643

7 years agoFix call arguments mismatch in gcc.c-torture/compile/pr82052.c
Tom de Vries [Mon, 4 Sep 2017 09:00:35 +0000 (09:00 +0000)]
Fix call arguments mismatch in gcc.c-torture/compile/pr82052.c

2017-09-04  Tom de Vries  <tom@codesourcery.com>

PR tree-optimization/82052
* gcc.c-torture/compile/pr82052.c (fn2): Add parameters corresponding to
call in fn11.

From-SVN: r251642

7 years agore PR sanitizer/81981 (-fsanitize=undefined makes a -Wmaybe-uninitialized warning...
Jakub Jelinek [Mon, 4 Sep 2017 08:11:44 +0000 (10:11 +0200)]
re PR sanitizer/81981 (-fsanitize=undefined makes a -Wmaybe-uninitialized warning disappear)

PR sanitizer/81981
* gimple-fold.c (gimple_fold_call): Optimize away useless UBSAN_PTR
and UBSAN_BOUNDS internal calls.  Clean up IFN_UBSAN_OBJECT_SIZE
handling.  Use replace_call_with_value with NULL instead of
gsi_replace, unlink_stmt_vdef and release_defs.

* gcc.dg/ubsan/pr81981.c: New test.

From-SVN: r251641

7 years agogdbhooks.py (OptMachineModePrinter.to_string): Use 8 spaces instead of tab.
Jakub Jelinek [Mon, 4 Sep 2017 08:10:51 +0000 (10:10 +0200)]
gdbhooks.py (OptMachineModePrinter.to_string): Use 8 spaces instead of tab.

* gdbhooks.py (OptMachineModePrinter.to_string): Use 8 spaces
instead of tab.

From-SVN: r251640

7 years ago* lra-remat.c (reg_overlap_for_remat_p): Fix a pasto.
Jakub Jelinek [Mon, 4 Sep 2017 08:10:03 +0000 (10:10 +0200)]
* lra-remat.c (reg_overlap_for_remat_p): Fix a pasto.

From-SVN: r251639

7 years agore PR tree-optimization/70043 (The compiler hangs in a fortran test-case with -Ofast...
Jakub Jelinek [Mon, 4 Sep 2017 07:52:06 +0000 (09:52 +0200)]
re PR tree-optimization/70043 (The compiler hangs in a fortran test-case with -Ofast -g -march=haswell)

PR tree-optimization/70043
PR testsuite/82093
* gfortran.dg/vect/pr70043.f90 (fn1): Start loop from 1 instead of 0.

From-SVN: r251638

7 years agoPR82045: Avoid passing machine modes through "..."
Richard Sandiford [Mon, 4 Sep 2017 07:30:53 +0000 (07:30 +0000)]
PR82045: Avoid passing machine modes through "..."

PR82045 is about a bootstrap failure on sparc-sun-solaris2.11.
The problem was that we were passing the new machine_mode wrapper
classes through "..."  to emit_library_call(_value), which then
read them back as ints instead.

The simplest fix seemed to be replace "..." with an array of
rtx_mode_ts, then provide wrappers for the common cases.  This
bulks out rtl.h a bit, but it does make things a bit more typesafe.

2017-09-04  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
PR bootstrap/82045
* rtl.h (emit_library_call_value_1): Declare.
(emit_library_call): Replace declaration with a series of overloads.
Remove the parameter count argument.
(emit_library_call_value): Likewise.
* calls.c (emit_library_call_value_1): Make global.  Replace varargs
with an "rtx_mode_t *".
(emit_library_call_value): Delete.
(emit_library_call): Likewise.
* asan.c (asan_emit_stack_protection): Update calls accordingly.
(asan_emit_allocas_unpoison): Likewise.
* builtins.c (expand_builtin_powi): Likewise.
(expand_asan_emit_allocas_unpoison): Likewise.
* cfgexpand.c (expand_main_function): Likewise.
* config/aarch64/aarch64.c (aarch64_trampoline_init): Likewise.
* config/aarch64/aarch64.h (PROFILE_HOOK): Likewise.
* config/alpha/alpha.c (alpha_trampoline_init): Likewise.
* config/arm/arm.c (arm_trampoline_init): Likewise.
(arm_call_tls_get_addr): Likewise.
(arm_expand_divmod_libfunc): Likewise.
* config/bfin/bfin.md (umulsi3_highpart): Likewise.
(smulsi3_highpart): Likewise.
* config/c6x/c6x.c (c6x_initialize_trampoline): Likewise.
(c6x_expand_compare): Likewise.
(c6x_expand_movmem): Likewise.
* config/frv/frv.c (frv_trampoline_init): Likewise.
* config/i386/i386.c (ix86_trampoline_init): Likewise.
(ix86_expand_divmod_libfunc): Likewise.
* config/ia64/ia64.c (ia64_expand_tls_address): Likewise.
(ia64_expand_compare): Likewise.
(ia64_profile_hook): Likewise.
* config/ia64/ia64.md (save_stack_nonlocal): Likewise.
(nonlocal_goto): Likewise.
(restore_stack_nonlocal): Likewise.
* config/m32r/m32r.c (block_move_call): Likewise.
(m32r_trampoline_init): Likewise.
* config/m68k/linux.h (FINALIZE_TRAMPOLINE): Likewise.
* config/m68k/m68k.c (m68k_call_tls_get_addr): Likewise.
(m68k_call_m68k_read_tp): Likewise.
* config/microblaze/microblaze.c (microblaze_call_tls_get_addr)
(microblaze_expand_divide): Likewise.
* config/mips/mips.h (mips_args): Likewise.
* config/mips/sdemtk.h (mips_sync_icache): Likewise.
(MIPS_ICACHE_SYNC): Likewise.
* config/nios2/nios2.c (nios2_emit_expensive_div): Likewise.
(nios2_trampoline_init): Likewise.
* config/pa/pa.c (hppa_tls_call): Likewise.
(pa_trampoline_init): Likewise.
* config/pa/pa.md (canonicalize_funcptr_for_compare): Likewise.
* config/powerpcspe/powerpcspe.c (rs6000_legitimize_tls_address)
(expand_strn_compare): Likewise.
(rs6000_generate_compare): Likewise.
(rs6000_expand_float128_convert): Likewise.
(output_profile_hook): Likewise.
(rs6000_trampoline_init): Likewise.
* config/powerpcspe/powerpcspe.md (neg<mode>2): Likewise.
* config/riscv/riscv.h (PROFILE_HOOK): Likewise.
* config/rs6000/rs6000-string.c (expand_strn_compare): Likewise.
* config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Likewise.
(rs6000_generate_compare): Likewise.
(rs6000_expand_float128_convert): Likewise.
(output_profile_hook): Likewise.
(rs6000_trampoline_init): Likewise.
* config/rs6000/rs6000.md (neg<mode>2): Likewise.
* config/sh/sh.c (sh_trampoline_init): Likewise.
* config/sparc/sparc.c (emit_soft_tfmode_libcall): Likewise.
(sparc_emit_float_lib_cmp): Likewise.
(sparc32_initialize_trampoline): Likewise.
(sparc64_initialize_trampoline): Likewise.
(sparc_profile_hook): Likewise.
* config/spu/spu.c (ea_load_store): Likewise.
* config/spu/spu.md (floatunssidf2): Likewise.
* config/tilegx/tilegx.c (tilegx_trampoline_init): Likewise.
* config/tilepro/tilepro.c (tilepro_trampoline_init): Likewise.
* config/visium/visium.c (expand_block_move_4): Likewise.
(expand_block_move_2): Likewise.
(expand_block_move_1): Likewise.
(expand_block_set_4): Likewise.
(expand_block_set_2): Likewise.
(expand_block_set_1): Likewise.
(visium_trampoline_init): Likewise.
(visium_profile_hook): Likewise.
* config/xtensa/xtensa.c (xtensa_expand_nonlocal_goto): Likewise.
(xtensa_setup_frame_addresses): Likewise.
(xtensa_trampoline_init): Likewise.
* except.c (sjlj_emit_function_enter): Likewise.
(sjlj_emit_function_exit): Likewise.
* explow.c (allocate_dynamic_stack_space): Likewise.
(probe_stack_range): Likewise.
* expr.c (convert_mode_scalar): Likewise.
* optabs.c (expand_binop): Likewise.
(expand_twoval_binop_libfunc): Likewise.
(expand_unop): Likewise.
(prepare_cmp_insn): Likewise.
(prepare_float_lib_cmp): Likewise.
(expand_float): Likewise.
(expand_fix): Likewise.
(expand_fixed_convert): Likewise.
(maybe_emit_sync_lock_test_and_set): Likewise.
(expand_atomic_compare_and_swap): Likewise.
(expand_mem_thread_fence): Likewise.
(expand_atomic_fetch_op): Likewise.

From-SVN: r251637