1. 20 Aug, 2019 40 commits
    • [Ada] Fix propagation of compiler internal flag · b08f42ae
      No change in behavior for GCC-based compilations.
      
      2019-08-20  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch3.adb (Analyze_Object_Declaration): If actual type is
      	private and distinct from nominal type in declaration, propagate
      	flags Is_Constr_Subt_For_U_Nominal and _UN_Aliased to full view
      	of private type.
      
      From-SVN: r274735
      Ed Schonberg committed
    • [Ada] Crash on Loop_Entry for while_loop involving substrings · b6b011dd
      When expanding a loop entry attribute for a while_loop we construct a
      function that incorporates the expanded condition of the loop. The
      itypes that may be generated in that expansion must carry the scope of
      the constructed function for proper handling in the backend.
      
      2019-08-20  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* exp_attr.adb (Expand_Loop_Entry_Attribute): When expanding a
      	loop entry attribute for a while_loop we construct a function
      	that incorporates the expanded condition of the loop. The itypes
      	that may be generated in that expansion must carry the scope of
      	the constructed function for proper handling in gigi.
      
      gcc/testsuite/
      
      	* gnat.dg/loop_entry2.adb: New testcase.
      
      From-SVN: r274734
      Ed Schonberg committed
    • [Ada] Spurious error in dispatching call with class-wide precondition · 1233757a
      This patch fixes a spurious visibility error on a dispatching call to
      a subprogram with a classwide precondition, when the call qppears in
      the same declarative part as the subprogram declaration itself.
      
      2019-08-20  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* exp_disp.adb (Build_Class_Wide_Check, Replace_Formals): When a
      	dispatching call tp a subprogram with a class-wide precondition
      	occurrs in the same declarative part as the ancestor subprogram
      	being called, the`expression for the precondition has not been
      	analyzed yet. Such a call may appear, e.g. in an expression
      	function. In that case, the replacement of formals by actuals in
      	the call cannot use the formal entities of the subprogram being
      	called, and the occurrence of the formals in the expression must
      	be located by name (Chars fields) as would be done at a later
      	freeze point, when the expression is resolved in the context of
      	the subprogram itself.
      
      gcc/testsuite/
      
      	* gnat.dg/tagged5.adb, gnat.dg/tagged5.ads: New testcase.
      
      From-SVN: r274733
      Ed Schonberg committed
    • [Ada] Suppress Initialize_Scalars for Persistent_BSS · 9740c244
      If a variable has pragma Persistent_BSS, the compiler now automatically
      suppresses implicit initializations caused by Initialize_Scalars and
      Normalize_Scalars. Variables with Persistent_BSS cannot be initialized,
      and previously a pragma Suppress_Initialization was required before the
      pragma Persistent_BSS.
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.adb (Persistent_BSS): If an initialization is present
      	because of Initialize_Scalars or Normalize_Scalars, generate an
      	implicit pragma Suppress_Initialization to remove that, because
      	initialization is not allowed for these variables. Other
      	initializations remain illegal.
      
      From-SVN: r274732
      Bob Duff committed
    • [Ada] Illegal limited function call accepted in a type conversion · e0ea5d16
      It's illegal to call a function with a result of an immutably limited
      type inside a type conversion that's used in one of the special contexts
      that allow such a function call by itself (see RM 7.5 (2.1-2.10)), such
      as in the initialization expression of an object declaration. The
      compiler was recursively applying OK_For_Limited_Init_In_05 to the
      expression inside of a rewritten type conversion, rather than directly
      to the Original_Node itself (which is what was cased on to get to the
      type conversion case alternative), which allowed such illegal
      initialization, and that's corrected by this fix. However, when the
      expression is not a rewriting of a user-written conversion, the
      recursive call to OK_For_Limited_Init_In_05 must be applied to the
      Expression of the conversion.
      
      2019-08-20  Gary Dismukes  <dismukes@adacore.com>
      
      gcc/ada/
      
      	* sem_ch3.adb (OK_For_Limited_Init_In_05): In the case of type
      	conversions, apply the recursive call to the Original_Node of
      	the expression Exp rather than the Expression of the
      	Original_Node, in the case where Exp has been rewritten;
      	otherwise, when Original_Node is the same as Exp, apply the
      	recursive call to the Expression.
      	(Check_Initialization): Revise condition for special check on
      	type conversions of limited function calls to test Original_Node
      	(avoiding spurious errors on expanded unchecked conversions
      	applied to build-in-place dispatching calls).
      
      gcc/testsuite/
      
      	* gnat.dg/type_conv2.adb, gnat.dg/type_conv2.ads: New testcase.
      
      From-SVN: r274731
      Gary Dismukes committed
    • [Ada] New pragma Aggregate_Individually_Assign · efc00a88
      Where possible GNAT will store the binary representation of a record
      aggregate in memory for space and performance reasons. This
      configuration pragma changes this behaviour so that record aggregates
      are instead always converted into individual assignment statements.
      
      The following package pack.ads:
      
      -- pack.ads
      
      pragma Aggregate_Individually_Assign;
      pragma Restrictions (No_Multiple_Elaboration);
      
      package Pack is
         type A_Rec is record
            A, B, C, D : Boolean;
         end record;
      
         A : A_Rec := (True, False, True, True);
      end Pack;
      
      when compiled with
      
      gcc -c -gnatdg pack.ads
      
      should produce the following output:
      
      Source recreated from tree for Pack (spec)
      ------------------------------------------
      
      pragma aggregate_individually_assign;
      pragma restrictions (no_multiple_elaboration);
      
      package pack is
         type pack__a_rec is record
            a : boolean;
            b : boolean;
            c : boolean;
            d : boolean;
         end record;
         freeze pack__a_rec [
            procedure pack__a_recIP (_init : out pack__a_rec) is
            begin
               %push_constraint_error_label ()
               %push_program_error_label ()
               %push_storage_error_label ()
               null;
               %pop_constraint_error_label
               %pop_program_error_label
               %pop_storage_error_label
               return;
            end pack__a_recIP;
         ]
         pack__a : pack__a_rec := (
            a => true,
            b => false,
            c => true,
            d => true);
         pack__a.a := true;
         pack__a.b := false;
         pack__a.c := true;
         pack__a.d := true;
         null;
      end pack;
      
      2019-08-20  Patrick Bernardi  <bernardi@adacore.com>
      
      gcc/ada/
      
      	* exp_aggr.adb (Expand_Record_Aggregate): Always convert a
      	record Aggregate to assignment statements if the option
      	Aggregate_Individually_Assign is set.
      	* opt.ads (Aggregate_Individually_Assign): New option.
      	* par-prag.adb (Prag): Add Pragma_Aggregate_Individually_Assign.
      	* sem_prag.adb (Analyze_Pragma): Likewise.
      	* snames.ads-tmpl: Add Pragma_Aggregate_Individually_Assign and
      	Name_Aggregate_Individually_Assign.
      	* doc/gnat_rm/implementation_defined_pragmas.rst: Document
      	pragma Aggregate_Individually_Assign.
      	* gnat_rm.texi: Regenerate.
      
      From-SVN: r274730
      Patrick Bernardi committed
    • [Ada] Enable delta_aggregate only in Ada 2020 mode · 32501d71
      If the delta_aggregate feature is used, the -gnat2020 or -gnatX switch
      must be given.
      
      The following test must get an error if neither
      -gnat2020 nor -gnatX is specified:
      
      gcc -c delta_aggregate.ads -gnat2012
      
      delta_aggregate.ads:4:18: delta_aggregate is an Ada 202x feature
      delta_aggregate.ads:4:18: compile with -gnatX
      
      package Delta_Aggregate is
      
         X : String := "Hello";
         Y : String := (X with delta 1 => 'h');
      
      end Delta_Aggregate;
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* par-ch4.adb: Minor wording change in error messages.
      	* sem_aggr.adb (Resolve_Delta_Aggregate): Emit an error for Ada
      	versions prior to Ada 2020.
      
      From-SVN: r274729
      Bob Duff committed
    • [Ada] Improve generated code for initialization of atomics · 7e7f0b0a
      This patch makes the temp for initialization of an atomic variable be
      constant.
      
      No change in behavior; no test.
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* freeze.adb (Is_Atomic_VFA_Aggregate): Make the temp for
      	initialization of the atomic variable be constant. This is
      	cleaner, and might improve efficiency.
      
      From-SVN: r274728
      Bob Duff committed
    • [Ada] More complete information level for -gnatR4 output · 76ccee8f
      This instructs -gnatR4 to also list the Etype of a user-declared record
      subtype if it is compiler-generated, for example in:
      
      package P is
      
         type U_Arr is array (Integer range <>) of Character;
      
         type Rec1 (D1, D2 : Integer) is record
            C : U_Arr (D1 .. D2);
         end record;
      
         type Rec_N is new Rec1 (1, 2);
      
      end P;
      
      2019-08-20  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* repinfo.adb (List_Record_Info): In -gnatR4 mode, set the
      	relevant flag on the implicit base type of a record subtype.
      
      From-SVN: r274727
      Eric Botcazou committed
    • [Ada] Fix a folding issue with System'To_Address · f2a35a2f
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_eval.adb (Expr_Value): Implement the case of an unchecked
      	conversion of a static expression.
      
      From-SVN: r274726
      Bob Duff committed
    • [Ada] Warn on Unchecked_Conversion to zero-sized array · d21ae867
      The compiler usually warns on Unchecked_Conversion between types with
      mismatched sizes. This warning is now extended to the case where the
      target type is a zero-sized array.
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Is_Null_Array): New function, used to detect the
      	null array case; used to warn about uncheckedly converting to a
      	zero-sized array.  It is unfortunate that we can't just check
      	the size, and warn on all cases of converting from a
      	nonzero-sized type to a zero-sized one. That's because "0" means
      	two different things: "size is zero" and "size is unknown".
      	Until we fix that design flaw, we need this more targeted fix.
      
      gcc/testsuite/
      
      	* gnat.dg/unchecked_convert14.adb: New testcase.
      
      From-SVN: r274725
      Bob Duff committed
    • [Ada] Efficiency improvement in bounded ordered containers · cbdb0df1
      The Delete operations in the bounded ordered containers have been
      substantially sped up.  No change in semantics, so no test.
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* libgnat/a-cborma.adb, libgnat/a-cborse.adb (Clear): Repeatedly
      	call Delete. This avoids clearing the free list, which
      	substantially speeds up future Delete operations.
      
      From-SVN: r274724
      Bob Duff committed
    • [Ada] Warning for out-of-order record representation clauses · 94f76dc1
      The compiler can now warn for out-of-order record representation
      clauses. A warning is given if the order of component declarations,
      component clauses, and bit-level layout do not all agree.  The warning
      is disabled by default, and may be enabled by the -gnatw_r switch.
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Component_Order_Check): New procedure to check
      	for out-of-order clauses.
      	* warnsw.ads, warnsw.adb: New -gnatw_r switch.
      	* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
      	Document new switch.
      	* gnat_ugn.texi: Regenerate.
      
      From-SVN: r274723
      Bob Duff committed
    • [Ada] Object_Size clause specifying 0 bits is illegal · afdc7598
      The patch gives an error message on "for T'Object_Size use 0;".
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Object_Size): Give an error for zero. It really
      	rubs me the wrong way that we don't honor "for T'Object_Size use
      	0;", but it's not important enough to fix. In any case, if we're
      	not going to obey the clause, we should give an error.
      
      gcc/testsuite/
      
      	* gnat.dg/object_size1.adb: New testcase.
      
      From-SVN: r274722
      Bob Duff committed
    • [Ada] Pragma Warning_As_Error works for style warnings · 6cd8f5b0
      Pragma Warning_As_Error now works for style warnings (messages that
      start with "(style)", enabled by -gnaty) the same way it works for
      regular warnings enabled by -gnatw.
      
      The following test should fail to build with style checks:
      
      gnat.adc:
      
      pragma Warning_As_Error ("two spaces required");
      
      style.adb:
      
      procedure Style is
         X : Integer;
      begin
         null;
         --Hello
      end;
      
      gnatmake -q -f -g style.adb -gnaty
      
      should get:
      
      style.adb:2:04: warning: variable "X" is never read and never assigned
      style.adb:5:06: error: (style) two spaces required [warning-as-error]
      style.adb:6:01: (style) "end Style" required
      gnatmake: "style.adb" compilation error
      
      and no executable should be created.
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* errout.adb (Error_Msg_Internal): Set Warn_Err in case of
      	Is_Style_Msg.
      	* erroutc.adb (Output_Msg_Text): Do Warnings_Treated_As_Errors
      	processing and [warning-as-error] modification for style
      	messages.  Clean up code, simplify, remove unnecessary block
      	statement, add renaming of table entry.
      	* erroutc.ads (Warning_Treated_As_Error): Fix comment: no such
      	thing as Set_Warning_As_Error.
      	* opt.ads: Clean up comments and move related declarations near
      	each other.
      	* par-prag.adb: Process Warning_As_Error. This is necessary
      	because many style warning happen during parsing.
      	* sem_prag.adb: Use new Acquire_Warning_Match_String.
      	* sem_util.ads, sem_util.adb (Acquire_Warning_Match_String): New
      	function shared by par-prag.adb and sem_prag.adb. Replaces the
      	procedure in sem_prag.adb. Avoid use of global variables.
      	* stringt.ads, stringt.adb (To_String): New function to convert
      	String_Id to String.
      	* doc/gnat_rm/implementation_defined_pragmas.rst: Document the
      	new feature.
      	* gnat_rm.texi: Regenerate.
      
      From-SVN: r274721
      Bob Duff committed
    • [Ada] Get rid of linear searches in Lib · 98cbc7e4
      This change is aimed at removing a couple of linear searches in the
      units management code that can become problematic performance-wise when
      the number of loaded units is in the several hundreds, which can happen
      for large files even at -O0 without any inlining.
      
      It introduces an auxiliary hash table to record a mapping between the
      name of units and their entry in the units table, and then replaces the
      linear searches by lookups in this names table.  This can save up to 2%
      of the compilation time spent in the front-end in some cases.
      
      There should be no functional changes, except in the error message
      issued for circular unit dependencies in very peculiar and convoluted
      cases.
      
      2019-08-20  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* lib.ads: Add with clause for GNAT.HTable.
      	Add pragma Inline for Is_Loaded and alphabetize the list.
      	(Unit_Name_Table_Size): New constant.
      	(Unit_Name_Header_Num): New subtype.
      	(Unit_Name_Hash): New function declaration.
      	(Unit_Names): New simple hash table.
      	(Init_Unit_Name): New procedure declaration.
      	* lib.adb (Set_Unit_Name): Unregister the old name in the table,
      	if any, and then register the new name.
      	(Init_Unit_Name): New procedure.
      	(Is_Loaded): Reimplement using a lookup in the names table.
      	(Remove_Unit): Unregister the name.
      	(Unit_Name_Hash): New function.
      	* lib-load.adb (Create_Dummy_Package_Unit): Call Init_Unit_Name.
      	(Load_Unit): Use a lookup in the names table to find out whether
      	the unit has already been loaded.  Call Init_Unit_Name and then
      	Remove_Unit if the loading has failed.
      	(Make_Child_Decl_Unit): Call Init_Unit_Name.
      	(Make_Instance_Unit): Likewise.
      	* lib-writ.adb (Ensure_System_Dependency): Likewise.
      
      From-SVN: r274720
      Eric Botcazou committed
    • [Ada] Sem_Ch13: fix uninitialized parameter static analysis warning · a89a0dd3
      No functional change.
      
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Record_Hole_Check): Initialize After_Last.
      
      From-SVN: r274719
      Bob Duff committed
    • [Ada] Revert change for gnatprove that is no longer needed · b6ad3c08
      Years ago, we adapted Get_Kind_Of_Unit so that gnatprove could use it to
      detect both bodies and specs of predefined units.
      
      However, this wasn't really needed: gnatprove could simply reuse
      Lib.In_Predefined_Unit and now it does. This patch simply reverts two
      commits mentioned above.
      
      No frontend test provided, because the removed comment is clear that this
      doesn't affect the compiler. Other tools similarly should not be affected
      (at least they were not when this change was introduced in 2012).
      
      2019-08-20  Piotr Trojanek  <trojanek@adacore.com>
      
      gcc/ada/
      
      	* impunit.adb (Get_Kind_Of_Unit): Revert change for adapting
      	this routine for gnatprove.
      
      From-SVN: r274718
      Piotr Trojanek committed
    • [Ada] Document requirements for Pragma Lock_Free · 2beee64a
      2019-08-20  Arnaud Charlet  <charlet@adacore.com>
      
      gcc/ada/
      
      	* doc/gnat_rm/implementation_defined_pragmas.rst: Document
      	requirements for Pragma Lock_Free.
      	* gnat_rm.texi: Regenerate.
      
      From-SVN: r274717
      Arnaud Charlet committed
    • [Ada] Initialize gnat_argc/gnat_argv only the first time · fdacd614
      2019-08-20  Philippe Gil  <gil@adacore.com>
      
      gcc/ada/
      
      	* bindgen.adb (Gen_Main): Set gnat_argc/gnat_argv to argc/argv
      	only when still uninitialized.
      
      From-SVN: r274716
      Philippe Gil committed
    • [Ada] Fix documentation for GNAT.Command_Line.Exit_From_Command_Line · e1976249
      2019-08-20  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* libgnat/g-comlin.ads (Exit_From_Command_Line): Fix
      	documentation for GNAT.Command_Line.
      
      From-SVN: r274715
      Bob Duff committed
    • [Ada] Add missing dot at the end of lang.opt doc for -fdump-scos · ca19ff23
      2019-08-20  Pierre-Marie de Rodat  <derodat@adacore.com>
      
      gcc/ada/
      
      	PR ada/91492
      	* gcc-interface/lang.opt (-fdump-scos): Add missing dot at the
      	end of the documentation.
      
      From-SVN: r274714
      Pierre-Marie de Rodat committed
    • re PR rtl-optimization/91347 (hppa: wrong code generated with tail call optimisation) · 7ee98586
      	PR rtl-optimization/91347
      	* dse.c (scan_insn): Call add_wild_read for non-const/memset tail calls
      	before reload if HARD_FRAME_POINTER_IS_ARG_POINTER.
      
      From-SVN: r274708
      Eric Botcazou committed
    • Add a pass_by_reference flag to function_arg_info · 257caa55
      This patch adds a flag that tells targets whether an argument
      has been converted to pass-by-reference form.  This replaces
      assign_parm_data_one::passed_pointer in function.c.
      
      The flag is set automatically for places that call
      apply_pass_by_reference_rules.  Places that apply
      pass-by-reference manually need to set it themselves.
      
      (After previous changes, no targets apply pass-by-reference
      manually.  They all go through apply_pass_by_reference_rules.)
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* calls.h (function_arg_info): Add a pass_by_reference field,
      	defaulting to false.
      	* calls.c (apply_pass_by_reference_rules): Set pass_by_reference
      	when applying pass-by-reference semantics.
      	(initialize_argument_information): Likewise.
      	(emit_library_call_value_1): Likewise.
      	* function.c (assign_parm_data_one): Remove passed_pointer field.
      	(assign_parm_find_data_types): Don't set it.
      	(assign_parm_find_stack_rtl, assign_parm_adjust_stack_rtl)
      	(assign_parm_setup_reg, assign_parms, gimplify_parameters): Use
      	arg.pass_by_reference instead of passed_pointer.
      
      From-SVN: r274707
      Richard Sandiford committed
    • Make calls.c use function_arg_info internally · cf0d189e
      This patch makes the two main calls.c argument-processing
      routines track the state of the argument in a function_arg_info
      instead of using separate mode variables.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* calls.c (emit_library_call_value_1): Merge arg and orig_arg
      	into a single function_arg_info, updating its fields when we
      	apply pass-by-reference and promotion semantics.  Use the
      	function_arg_info to track the mode rather than keeping it in
      	a separate local variable.
      	(initialize_argument_information): Likewise.  Base the final
      	arg_to_skip on this new function_arg_info rather than creating
      	a new one from scratch.
      
      From-SVN: r274706
      Richard Sandiford committed
    • Make function.c use function_arg_info internally · 634afa05
      This patch adds a function_arg_info field to assign_parm_data_one,
      so that:
      
        - passed_type -> arg.type
        - promoted_mode -> arg.mode
        - named_arg -> arg.named
      
      We can then pass this function_arg_info directly to the converted
      hooks.
      
      Between the initialisation of the assign_parm_data_one and the
      application of promotion rules (which is a state internal to
      assign_parm_find_data_types), arg.mode is equivalent to passed_mode
      (i.e. to TYPE_MODE).
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* function.c (assign_parm_data_one): Replace passed_type,
      	promoted_mode and named_arg with a function_arg_info field.
      	(assign_parm_find_data_types): Remove local variables and
      	assign directly to "data".  Make data->passed_mode shadow
      	data->arg.mode until promotion, then assign the promoted
      	mode to data->arg.mode.
      	(assign_parms_setup_varargs, assign_parm_find_entry_rtl)
      	(assign_parm_find_stack_rtl, assign_parm_adjust_entry_rtl)
      	(assign_parm_remove_parallels, assign_parm_setup_block_p)
      	(assign_parm_setup_block, assign_parm_setup_reg)
      	(assign_parm_setup_stack, assign_parms, gimplify_parameters): Use
      	arg.mode instead of promoted_mode, arg.type instead of passed_type
      	and arg.named instead of named_arg.  Use data->arg for
      	function_arg_info structures that had the field values passed_type,
      	promoted_mode and named_arg.  Base other function_arg_infos on
      	data->arg, changing the necessary properties.
      
      From-SVN: r274705
      Richard Sandiford committed
    • Add a apply_pass_by_reference_rules helper · b12cdd6e
      This patch adds a helper routine that applies pass-by-reference
      semantics to an existing function_arg_info.
      
      The c6x part means that c6x_function_arg and c6x_function_arg_advance
      see the same "named" value as pass_by_reference did, rather than
      pass_by_reference seeing "true" and the others seeing "false".
      This doesn't matter because the c6x port doesn't care about namedness.
      
      The rs6000.c patch removes an assignment to "type", but the only
      later code to use it was the patched promote_mode line.
      
      (The reason for patching these places despite the above is that
      often target code gets used as a basis for new targets or changes
      to existing ones.)
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* calls.h (apply_pass_by_reference_rules): Declare.
      	* calls.c (apply_pass_by_reference_rules): New function.
      	* config/c6x/c6x.c (c6x_call_saved_register_used): Use it.
      	* config/rs6000/rs6000-call.c (rs6000_parm_needs_stack): Likewise.
      	* config/s390/s390.c (s390_call_saved_register_used): Likewise.
      	* function.c (assign_parm_find_data_types): Likewise.
      	* var-tracking.c (prepare_call_arguments): Likewise.
      
      From-SVN: r274704
      Richard Sandiford committed
    • Use function_arg_info for TARGET_MUST_PASS_IN_STACK · 0ffef200
      The hook is passed the promoted mode instead of the original type mode.
      
      The expr.h reference in the documentation is no longer correct, but
      pointing to calls.h or calls.c doesn't help much either.  I just left
      this as-is since it's not related to the point of the series.
      
      After previous changes, most places already pass arg.mode and arg.type.
      Only i386 and mcore needed to construct a new one out of nothing.
      rs6000 needs to construct one slightly earlier than before.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* target.def (must_pass_in_stack): Take a function_arg_info instead
      	of a mode and a type.
      	* doc/tm.texi: Regenerate.
      	* calls.h (must_pass_in_stack_var_size): Take a function_arg_info
      	instead of a mode and a type.
      	(must_pass_in_stack_var_size_or_pad): Likewise.
      	* calls.c (must_pass_in_stack_var_size): Likewise.
      	(must_pass_in_stack_var_size_or_pad): Likewise.
      	(initialize_argument_information): Update call to
      	targetm.calls.must_pass_in_stack.
      	(must_pass_va_arg_on_stack): Likewise.
      	* function.c (assign_parm_find_entry_rtl): Likewise.
      	* targhooks.c (hook_pass_by_reference_must_pass_in_stack): Likewise.
      	* config/alpha/alpha.c (alpha_function_arg): Likewise.
      	(alpha_function_arg_advance): Likewise.
      	* config/cr16/cr16.c (cr16_function_arg): Likewise.
      	(cr16_function_arg_advance): Likewise.
      	* config/cris/cris.c (cris_pass_by_reference): Likewise.
      	(cris_arg_partial_bytes): Likewise.
      	* config/iq2000/iq2000.c (iq2000_pass_by_reference): Likewise.
      	* config/lm32/lm32.c (lm32_function_arg): Likewise.
      	* config/mcore/mcore.c (mcore_num_arg_regs): Likewise.
      	(mcore_function_arg, mcore_arg_partial_bytes): Likewise.
      	* config/mips/mips.c (mips_pass_by_reference): Likewise.
      	* config/mmix/mmix.c (mmix_function_arg_advance): Likewise.
      	(mmix_function_arg_1, mmix_pass_by_reference): Likewise.
      	* config/sh/sh.c (sh_pass_by_reference): Likewise.
      	* config/stormy16/stormy16.c (xstormy16_function_arg): Likewise.
      	* config/xtensa/xtensa.c (xtensa_function_arg_advance): Likewise.
      	* config/arm/arm.c (arm_must_pass_in_stack): Take a function_arg_info
      	instead of a mode and a type.
      	* config/fr30/fr30.c (fr30_must_pass_in_stack): Likewise.
      	(fr30_num_arg_regs): Likewise.
      	(fr30_setup_incoming_varargs): Update calls accordingly.
      	(fr30_arg_partial_bytes, fr30_function_arg): Likewise.
      	(fr30_function_arg_advance): Likewise.
      	* config/frv/frv.c (frv_must_pass_in_stack): Take a function_arg_info
      	instead of a mode and a type.
      	* config/gcn/gcn.c (num_arg_regs): Likewise.
      	(gcn_function_arg, gcn_function_arg_advance): Update calls to
      	num_arg_regs and targetm.calls.must_pass_in_stack.
      	(gcn_arg_partial_bytes): Likewise.
      	* config/i386/i386.c (ix86_must_pass_in_stack): Take a
      	function_arg_info instead of a mode and a type.
      	(classify_argument): Update call accordingly.
      	* config/nds32/nds32.c (nds32_must_pass_in_stack): Take a
      	function_arg_info instead of a mode and a type.
      	* config/rs6000/rs6000-internal.h (rs6000_must_pass_in_stack):
      	Likewise.
      	* config/rs6000/rs6000-call.c (rs6000_must_pass_in_stack): Likewise.
      	(rs6000_parm_needs_stack): Update call accordingly.
      	(setup_incoming_varargs): Likewise.
      
      From-SVN: r274703
      Richard Sandiford committed
    • Use function_arg_info for TARGET_CALLEE_COPIES · 7256c719
      The hook is passed the unpromoted type mode instead of the promoted mode.
      
      The aarch64 definition is redundant, but worth keeping for emphasis.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* target.def (callee_copies): Take a function_arg_info instead
      	of a mode, type and named flag.
      	* doc/tm.texi: Regenerate.
      	* targhooks.h (hook_callee_copies_named): Take a function_arg_info
      	instead of a mode, type and named flag.
      	(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false): Delete.
      	(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true): Likewise.
      	(hook_bool_CUMULATIVE_ARGS_arg_info_true): New function.
      	* targhooks.c (hook_callee_copies_named): Take a function_arg_info
      	instead of a mode, type and named flag.
      	(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false): Delete.
      	(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true): Likewise.
      	(hook_bool_CUMULATIVE_ARGS_arg_info_true): New function.
      	* calls.h (reference_callee_copied): Take a function_arg_info
      	instead of a mode, type and named flag.
      	* calls.c (reference_callee_copied): Likewise.
      	(initialize_argument_information): Update call accordingly.
      	(emit_library_call_value_1): Likewise.
      	* function.c (gimplify_parameters): Likewise.
      	* config/aarch64/aarch64.c (TARGET_CALLEE_COPIES): Define to
      	hook_bool_CUMULATIVE_ARGS_arg_info_false instead of
      	hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false.
      	* config/c6x/c6x.c (c6x_callee_copies): Delete.
      	(TARGET_CALLEE_COPIES): Define to
      	hook_bool_CUMULATIVE_ARGS_arg_info_true instead.
      	* config/epiphany/epiphany.c (TARGET_CALLEE_COPIES): Define to
      	hook_bool_CUMULATIVE_ARGS_arg_info_true instead of
      	hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true.
      	* config/mips/mips.c (mips_callee_copies): Take a function_arg_info
      	instead of a mode, type and named flag.
      	* config/mmix/mmix.c (TARGET_CALLEE_COPIES): Define to
      	hook_bool_CUMULATIVE_ARGS_arg_info_true instead of
      	hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true.
      	* config/mn10300/mn10300.c (TARGET_CALLEE_COPIES): Likewise.
      	* config/msp430/msp430.c (msp430_callee_copies): Delete.
      	(TARGET_CALLEE_COPIES): Define to
      	hook_bool_CUMULATIVE_ARGS_arg_info_true instead.
      	* config/pa/pa.c (pa_callee_copies): Take a function_arg_info
      	instead of a mode, type and named flag.
      	* config/sh/sh.c (sh_callee_copies): Likewise.
      	* config/v850/v850.c (TARGET_CALLEE_COPIES): Define to
      	hook_bool_CUMULATIVE_ARGS_arg_info_true instead of
      	hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true.
      
      From-SVN: r274702
      Richard Sandiford committed
    • Use function_arg_info for TARGET_FUNCTION_ARG_ADVANCE · 6930c98c
      There seems to be a bit of confusion around this one.  Almost all
      callers pass the same arguments as TARGET_FUNCTION_ARG, meaning
      that the mode is the promoted mode rather than the type mode.
      But the calls.c handling for normal typed arguments instead passes
      the unpromoted TYPE_MODE (despite passing the promoted mode to
      TARGET_FUNCTION_ARG).  I've kept this behaviour with a ??? comment.
      
      (The calls.c handling of libgcc functions does pass the promoted
      mode though, as does the function.c handling of incoming arguments.)
      
      Also, a couple of the arm callers don't seem to be using the hook
      correctly.  Again I kept the current choices and added a ??? comment.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* target.def (function_arg_advance): Take a function_arg_info instead
      	of a mode, type and named flag.
      	* doc/tm.texi: Regenerate.
      	* targhooks.h (default_function_arg_advance): Take a function_arg_info
      	instead of a mode, type and named flag.
      	* targhooks.c (default_function_arg_advance): Likewise.
      	* calls.c (initialize_argument_information): Update call to
      	targetm.calls.function_arg_advance.
      	(emit_library_call_value_1): Likewise.
      	* dse.c (get_call_args): Likewise.
      	* expr.c (block_move_libcall_safe_for_call_parm): Likewise.
      	* function.c (assign_parms, gimplify_parameters): Likewise.
      	* var-tracking.c (prepare_call_arguments): Likewise.
      	* config/aarch64/aarch64.c (aarch64_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(aarch64_setup_incoming_varargs): Update call accordingly.
      	* config/alpha/alpha.c (alpha_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(alpha_setup_incoming_varargs): Update call accordingly.
      	* config/arc/arc.c (arc_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(arc_setup_incoming_varargs): Update call accordingly.
      	* config/arm/arm.c (arm_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(cmse_func_args_or_return_in_stack): Update call accordingly.
      	(arm_function_ok_for_sibcall): Likewise.
      	(cmse_nonsecure_call_clear_caller_saved): Likewise.
      	* config/avr/avr.c (avr_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/bfin/bfin.c (bfin_function_arg_advance): Likewise.
      	* config/c6x/c6x.c (c6x_function_arg_advance): Likewise.
      	(c6x_call_saved_register_used): Update call accordingly.
      	* config/cr16/cr16.c (cr16_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/cris/cris.c (cris_function_arg_advance): Likewise.
      	* config/csky/csky.c (csky_function_arg_advance): Likewise.
      	(csky_setup_incoming_varargs): Update call accordingly.
      	* config/epiphany/epiphany.c (epiphany_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/fr30/fr30.c (fr30_function_arg_advance): Likewise.
      	* config/frv/frv.c (frv_function_arg_advance): Likewise.
      	* config/ft32/ft32.c (ft32_function_arg_advance): Likewise.
      	* config/gcn/gcn.c (gcn_function_arg_advance): Likewise.
      	* config/h8300/h8300.c (h8300_function_arg_advance): Likewise.
      	* config/i386/i386.c (ix86_function_arg_advance): Likewise.
      	(ix86_setup_incoming_varargs): Update call accordingly.
      	* config/ia64/ia64.c (ia64_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(ia64_setup_incoming_varargs): Update call accordingly.
      	* config/iq2000/iq2000.c (iq2000_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(iq2000_expand_prologue): Update call accordingly.
      	* config/lm32/lm32.c (lm32_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/m32c/m32c.c (m32c_function_arg_advance): Likewise.
      	* config/m32r/m32r.c (m32r_function_arg_advance): Likewise.
      	* config/m68k/m68k.c (m68k_function_arg_advance): Likewise.
      	* config/mcore/mcore.c (mcore_function_arg_advance): Likewise.
      	* config/microblaze/microblaze.c (microblaze_function_arg_advance):
      	Likewise.
      	(microblaze_expand_prologue): Update call accordingly.
      	* config/mips/mips.c (mips_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(mips_setup_incoming_varargs): Update call accordingly.
      	(mips_output_args_xfer): Likewise.
      	* config/mmix/mmix.c (mmix_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/mn10300/mn10300.c (mn10300_function_arg_advance): Likewise.
      	* config/moxie/moxie.c (moxie_function_arg_advance): Likewise.
      	* config/msp430/msp430.c (msp430_function_arg_advance): Likewise.
      	* config/nds32/nds32.c (nds32_function_arg_advance): Likewise.
      	* config/nios2/nios2.c (nios2_function_arg_advance): Likewise.
      	(nios2_setup_incoming_varargs): Update call accordingly.
      	* config/nvptx/nvptx.c (nvptx_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/or1k/or1k.c (or1k_function_arg_advance): Likewise.
      	* config/pa/pa.c (pa_function_arg_advance): Likewise.
      	* config/pdp11/pdp11.c (pdp11_function_arg_advance): Likewise.
      	* config/pru/pru.c (pru_function_arg_advance): Likewise.
      	* config/riscv/riscv.c (riscv_function_arg_advance): Likewise.
      	(riscv_setup_incoming_varargs): Update call accordingly.
      	* config/rl78/rl78.c (rl78_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/rs6000/rs6000-internal.h (rs6000_function_arg_advance):
      	Likewise.
      	* config/rs6000/rs6000-call.c (rs6000_function_arg_advance): Likewise.
      	(rs6000_parm_needs_stack): Update call accordingly.
      	* config/rx/rx.c (rx_function_arg_advance): Take a function_arg_info
      	instead of a mode, type and named flag.
      	* config/s390/s390.c (s390_function_arg_advance): Likewise.
      	(s390_call_saved_register_used): Update call accordingly.
      	* config/sh/sh.c (sh_function_arg_advance): Take a function_arg_info
      	instead of a mode, type and named flag.
      	(sh_output_mi_thunk): Update call accordingly.
      	* config/sparc/sparc.c (sparc_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/spu/spu.c (spu_function_arg_advance): Likewise.
      	(spu_setup_incoming_varargs): Update call accordingly.
      	* config/stormy16/stormy16.c (xstormy16_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/tilegx/tilegx.c (tilegx_function_arg_advance): Likewise.
      	(tilegx_setup_incoming_varargs): Update call accordingly.
      	* config/tilepro/tilepro.c (tilepro_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(tilegx_setup_incoming_varargs): Update call accordingly.
      	* config/v850/v850.c (v850_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/vax/vax.c (vax_function_arg_advance): Likewise.
      	* config/visium/visium.c (visium_function_arg_advance): Likewise.
      	(visium_setup_incoming_varargs): Update call accordingly.
      	* config/xtensa/xtensa.c (xtensa_function_arg_advance): Take a
      	function_arg_info instead of a mode, type and named flag.
      
      From-SVN: r274701
      Richard Sandiford committed
    • Use function_arg_info for TARGET_FUNCTION_(INCOMING_)ARG · 6783fdb7
      This patch makes both TARGET_FUNCTION_ARG and
      TARGET_FUNCTION_INCOMING_ARG take a function_arg_info.
      They have to be done together since many targets use the
      same function for both.
      
      The hooks are passed the promoted mode instead of the original type mode.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* target.def (function_arg, function_incoming_arg): Take a
      	function_arg_info instead of a mode, tree and named flag.
      	* doc/tm.texi: Regenerate.
      	* targhooks.h (default_function_arg): Take a function_arg_info
      	instead of a mode, tree and named flag.
      	(default_function_incoming_arg): Likewise.
      	* targhooks.c (default_function_arg): Likewise.
      	(default_function_incoming_arg): Likewise.
      	* calls.h (function_arg_info::end_marker_p): New function.
      	(function_arg_info::end_marker): Likewise.
      	* calls.c (prepare_call_address, initialize_argument_information)
      	(expand_call, emit_library_call_value_1): Update calls to
      	targetm.calls.function_arg and targetm.calls.function_incoming_arg.
      	* dse.c: Include calls.h.
      	(get_call_args): Update call to targetm.calls.function_arg.
      	* expr.c (block_move_libcall_safe_for_call_parm): Likewise.
      	* var-tracking.c (prepare_call_arguments): Likewise.
      	* function.c (assign_parm_find_entry_rtl): Update call to
      	targetm.calls.function_incoming_arg.
      	* config/aarch64/aarch64.c (aarch64_function_arg): Take a
      	function_arg_info instead of a mode, tree and named flag.
      	* config/alpha/alpha.c (alpha_function_arg): Likewise.
      	* config/arc/arc.c (arc_function_arg): Likewise.
      	* config/arm/arm.c (arm_function_arg): Likewise.
      	(cmse_func_args_or_return_in_stack): Update call accordingly.
      	(arm_function_ok_for_sibcall): Likewise.
      	(cmse_nonsecure_call_clear_caller_saved): Likewise.
      	* config/avr/avr.c (avr_function_arg): Take a function_arg_info
      	instead of a mode, tree and named flag.
      	* config/bfin/bfin.c (bfin_function_arg): Likewise.
      	* config/c6x/c6x.c (c6x_function_arg): Likewise.
      	(c6x_call_saved_register_used): Update call accordingly.
      	* config/cr16/cr16.c (cr16_function_arg): Take a function_arg_info
      	instead of a mode, tree and named flag.
      	* config/cris/cris.c (cris_function_arg, cris_function_incoming_arg)
      	(cris_function_arg_1): Likewise.
      	* config/csky/csky.c (csky_function_arg): Likewise.
      	* config/epiphany/epiphany.c (epiphany_function_arg): Likewise.
      	* config/fr30/fr30.c (fr30_function_arg): Likewise.
      	* config/frv/frv.c (frv_function_arg, frv_function_incoming_arg)
      	(frv_function_arg_1): Likewise.
      	* config/ft32/ft32.c (ft32_function_arg): Likewise.
      	* config/gcn/gcn.c (gcn_function_arg): Likewise.
      	* config/h8300/h8300.c (h8300_function_arg): Likewise.
      	* config/i386/i386.c (ix86_function_arg): Likewise.
      	* config/ia64/ia64.c (ia64_function_arg, ia64_function_incoming_arg)
      	(ia64_function_arg_1): Likewise.
      	* config/iq2000/iq2000.c (iq2000_function_arg): Likewise.
      	(iq2000_expand_prologue, iq2000_pass_by_reference): Update call
      	accordingly.
      	* config/lm32/lm32.c (lm32_function_arg): Take a function_arg_info
      	instead of a mode, tree and named flag.
      	* config/m32c/m32c.c (m32c_function_arg): Likewise.
      	* config/m32r/m32r.c (m32r_function_arg): Likewise.
      	* config/m68k/m68k.c (m68k_function_arg): Likewise.
      	* config/mcore/mcore.c (mcore_function_arg): Likewise.
      	* config/microblaze/microblaze.c (microblaze_function_arg): Likewise.
      	(microblaze_expand_prologue): Update call accordingly.
      	* config/mips/mips.c (mips_function_arg): Take a function_arg_info
      	instead of a mode, tree and named flag.
      	* config/mmix/mmix.c (mmix_function_incoming_arg, mmix_function_arg)
      	(mmix_function_arg_1): Likewise.
      	* config/mn10300/mn10300.c (mn10300_function_arg): Likewise.
      	* config/moxie/moxie.c (moxie_function_arg): Likewise.
      	* config/msp430/msp430.c (msp430_function_arg): Likewise.
      	* config/nds32/nds32.c (nds32_function_arg): Likewise.
      	* config/nios2/nios2.c (nios2_function_arg): Likewise.
      	* config/nvptx/nvptx.c (nvptx_function_arg): Likewise.
      	(nvptx_function_incoming_arg): Likewise.
      	* config/or1k/or1k.c (or1k_function_arg): Likewise.
      	* config/pa/pa.c (pa_function_arg): Likewise.
      	* config/pdp11/pdp11.c (pdp11_function_arg): Likewise.
      	* config/pru/pru.c (pru_function_arg): Likewise.
      	* config/riscv/riscv.c (riscv_function_arg): Likewise.
      	* config/rl78/rl78.c (rl78_function_arg): Likewise.
      	* config/rs6000/rs6000-internal.h (rs6000_function_arg): Likewise.
      	* config/rs6000/rs6000-call.c (rs6000_function_arg): Likewise.
      	(rs6000_parm_needs_stack): Update call accordingly.
      	* config/rx/rx.c (rx_function_arg): Take a function_arg_info
      	instead of a mode, tree and named flag.
      	* config/s390/s390.c (s390_function_arg): Likewise.
      	(s390_call_saved_register_used): Update call accordingly.
      	* config/sh/sh.c (sh_function_arg): Take a function_arg_info
      	instead of a mode, tree and named flag.
      	(sh_output_mi_thunk): Update call accordingly.
      	* config/sparc/sparc.c (sparc_function_arg_1, sparc_function_arg)
      	(sparc_function_incoming_arg): Take a function_arg_info instead of
      	a mode, tree and named flag.
      	* config/spu/spu.c (spu_function_arg): Likewise.
      	* config/stormy16/stormy16.c (xstormy16_function_arg): Likewise.
      	* config/tilegx/tilegx.c (tilegx_function_arg): Likewise.
      	* config/tilepro/tilepro.c (tilepro_function_arg): Likewise.
      	* config/v850/v850.c (v850_function_arg): Likewise.
      	* config/vax/vax.c (vax_function_arg): Likewise.
      	* config/visium/visium.c (visium_function_arg): Likewise.
      	* config/xtensa/xtensa.c (xtensa_function_arg_1, xtensa_function_arg)
      	(xtensa_function_incoming_arg): Likewise.
      
      From-SVN: r274700
      Richard Sandiford committed
    • Use function_arg_info for TARGET_SETUP_INCOMING_ARGS · e7056ca4
      The hook is passed the promoted mode instead of the original type mode.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* target.def (setup_incoming_varargs): Take a function_arg_info
      	instead of a mode and tree.
      	* doc/tm.texi: Regenerate.
      	* targhooks.h (default_setup_incoming_varargs): Take a
      	function_arg_info instead of a mode and tree.
      	* targhooks.c (default_setup_incoming_varargs): Likewise.
      	* config/aarch64/aarch64.c (aarch64_setup_incoming_varargs): Likewise.
      	* config/alpha/alpha.c (alpha_setup_incoming_varargs): Likewise.
      	* config/arc/arc.c (arc_setup_incoming_varargs): Likewise.
      	* config/arm/arm.c (arm_setup_incoming_varargs): Likewise.
      	* config/bfin/bfin.c (setup_incoming_varargs): Likewise.
      	* config/cris/cris.c (cris_setup_incoming_varargs): Likewise.
      	* config/csky/csky.c (csky_setup_incoming_varargs): Likewise.
      	* config/epiphany/epiphany.c (epiphany_setup_incoming_varargs):
      	Likewise.
      	* config/fr30/fr30.c (fr30_setup_incoming_varargs): Likewise.
      	* config/frv/frv.c (frv_setup_incoming_varargs): Likewise.
      	* config/ft32/ft32.c (ft32_setup_incoming_varargs): Likewise.
      	* config/i386/i386.c (ix86_setup_incoming_varargs): Likewise.
      	* config/ia64/ia64.c (ia64_setup_incoming_varargs): Likewise.
      	* config/iq2000/iq2000.c (iq2000_setup_incoming_varargs): Likewise.
      	* config/lm32/lm32.c (lm32_setup_incoming_varargs): Likewise.
      	* config/m32r/m32r.c (m32r_setup_incoming_varargs): Likewise.
      	* config/mcore/mcore.c (mcore_setup_incoming_varargs): Likewise.
      	* config/mips/mips.c (mips_setup_incoming_varargs): Likewise.
      	* config/mmix/mmix.c (mmix_setup_incoming_varargs): Likewise.
      	* config/moxie/moxie.c (moxie_setup_incoming_varargs): Likewise.
      	* config/nds32/nds32.c (nds32_setup_incoming_varargs): Likewise.
      	* config/nios2/nios2.c (nios2_setup_incoming_varargs): Likewise.
      	* config/riscv/riscv.c (riscv_setup_incoming_varargs): Likewise.
      	* config/rs6000/rs6000-internal.h (setup_incoming_varargs): Likewise.
      	* config/rs6000/rs6000-call.c (setup_incoming_varargs): Likewise.
      	* config/sh/sh.c (sh_setup_incoming_varargs): Likewise.
      	* config/spu/spu.c (spu_setup_incoming_varargs): Likewise.
      	* config/tilegx/tilegx.c (tilegx_setup_incoming_varargs): Likewise.
      	* config/tilepro/tilepro.c (tilepro_setup_incoming_varargs): Likewise.
      	* config/visium/visium.c (visium_setup_incoming_varargs): Likewise.
      	* function.c (assign_parms_setup_varargs): Update call to
      	targetm.calls.setup_incoming_varargs.
      
      From-SVN: r274699
      Richard Sandiford committed
    • Use function_arg_info for TARGET_PASS_BY_REFERENCE · 52090e4d
      The hook is passed the unpromoted type mode instead of the promoted mode.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* target.def (pass_by_reference): Take a function_arg_info instead
      	of a mode, type and named flag.
      	* doc/tm.texi: Regenerate.
      	* targhooks.h (hook_pass_by_reference_must_pass_in_stack): Update
      	accordingly.
      	(hook_bool_CUMULATIVE_ARGS_arg_info_false): Declare.
      	* targhooks.c (hook_pass_by_reference_must_pass_in_stack): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(hook_bool_CUMULATIVE_ARGS_arg_info_false): New function.
      	* calls.h (pass_by_reference): Take a function_arg_info instead of a
      	mode, type and named flag.
      	* calls.c (pass_by_reference): Likewise.
      	(pass_va_arg_by_reference): Update call accordingly.
      	(initialize_argument_information): Likewise.
      	(emit_library_call_value_1): Likewise.
      	* function.c (assign_parm_find_data_types): Likewise.
      	* var-tracking.c (prepare_call_arguments): Likewise.
      	* stor-layout.c: Include calls.h.
      	(compute_record_mode): Update call to targetm.calls.pass_by_reference.
      	* config/aarch64/aarch64.c (aarch64_pass_by_reference): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/alpha/alpha.c (alpha_pass_by_reference): Likewise.
      	* config/arc/arc.c (arc_pass_by_reference): Likewise.
      	* config/arm/arm.c (arm_pass_by_reference): Likewise.
      	* config/bfin/bfin.c (bfin_pass_by_reference): Likewise.
      	* config/c6x/c6x.c (c6x_pass_by_reference): Likewise.
      	(c6x_call_saved_register_used): Update call to pass_by_reference.
      	* config/cris/cris.c (cris_pass_by_reference): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/epiphany/epiphany.c (epiphany_pass_by_reference): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(epiphany_arg_partial_bytes): Update call accordingly.
      	* config/ft32/ft32.c (ft32_pass_by_reference): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(ft32_arg_partial_bytes): Update call accordingly.
      	* config/i386/i386.c (ix86_pass_by_reference): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/iq2000/iq2000.c (iq2000_pass_by_reference): Likewise.
      	* config/m32c/m32c.c (m32c_pass_by_reference): Likewise.
      	* config/m32r/m32r.c (m32r_pass_by_reference): Likewise.
      	(m32r_return_in_memory): Update call accordingly.
      	* config/mips/mips.c (mips_pass_by_reference): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/mmix/mmix.c (mmix_pass_by_reference): Likewise.
      	* config/mn10300/mn10300.c (mn10300_pass_by_reference): Likewise.
      	* config/moxie/moxie.c (moxie_pass_by_reference): Likewise.
      	(moxie_arg_partial_bytes): Update call accordingly.
      	* config/msp430/msp430.c (msp430_pass_by_reference): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/nvptx/nvptx.c (nvptx_pass_by_reference): Likewise.
      	* config/or1k/or1k.c (or1k_pass_by_reference): Likewise.
      	* config/pa/pa.c (pa_pass_by_reference): Likewise.
      	* config/riscv/riscv.c (riscv_pass_by_reference): Likewise.
      	(riscv_return_in_memory): Update call accordingly.
      	* config/rs6000/rs6000-internal.h (rs6000_pass_by_reference): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/rs6000/rs6000-call.c (rs6000_pass_by_reference): Likewise.
      	(rs6000_parm_needs_stack): Update call to pass_by_reference.
      	* config/s390/s390.c (s390_pass_by_reference): Take a
      	function_arg_info instead of a mode, type and named flag.
      	(s390_call_saved_register_used): Update call accordingly.
      	* config/sh/sh.c (sh_pass_by_reference): Take a function_arg_info
      	instead of a mode, type and named flag.
      	* config/sparc/sparc.c (sparc_pass_by_reference): Likewise.
      	* config/spu/spu.c (spu_pass_by_reference): Likewise.
      	* config/tilegx/tilegx.c (tilegx_pass_by_reference): Likewise.
      	* config/tilepro/tilepro.c (tilepro_pass_by_reference): Likewise.
      	* config/v850/v850.c (v850_pass_by_reference): Likewise.
      	* config/visium/visium.c (visium_pass_by_reference): Likewise.
      
      gcc/ada/
      	* gcc-interface/misc.c (default_pass_by_ref): Update call to
      	pass_by_reference.
      
      From-SVN: r274698
      Richard Sandiford committed
    • Use function_arg_info for TARGET_ARG_PARTIAL_BYTES · a7c81bc1
      This patch adds the function_arg_info class and uses it for
      TARGET_ARG_PARTIAL_BYTES.
      
      The hook is passed the promoted mode instead of the original type mode.
      
      The arguments aren't mentioned in the documentation, which is why the
      target.def change is so small.
      
      The patch changes "true" to "arg.named" in:
      
        gcc_assert (!epiphany_pass_by_reference (cum, mode, type, /* named */ true));
      
      but epiphany_pass_by_reference doesn't care about the named flag.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* target.def (arg_partial_bytes): Take a function_arg_info instead
      	of a mode, type and named flag.
      	* doc/tm.texi: Regenerate.
      	* target.h (function_arg_info): Declare.
      	* calls.h (function_arg_info): New class.
      	* targhooks.h (hook_int_CUMULATIVE_ARGS_mode_tree_bool_0): Delete.
      	(hook_int_CUMULATIVE_ARGS_arg_info_0): Declare.
      	* targhooks.c (hook_int_CUMULATIVE_ARGS_mode_tree_bool_0): Delete.
      	(hook_int_CUMULATIVE_ARGS_arg_info_0): New function.
      	* calls.c (initialize_argument_information): Update call to
      	targetm.calls.partial_bytes.
      	(emit_library_call_value_1): Likewise.
      	* expr.c (block_move_libcall_safe_for_call_parm): Likewise.
      	* function.c (assign_parm_find_entry_rtl): Likewise.
      	* config/alpha/alpha.c (alpha_arg_partial_bytes): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/arc/arc.c (arc_arg_partial_bytes): Likewise.
      	* config/arm/arm.c (arm_arg_partial_bytes): Likewise.
      	(cmse_func_args_or_return_in_stack): Update accordingly.
      	* config/bfin/bfin.c (bfin_arg_partial_bytes): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/cris/cris.c (cris_arg_partial_bytes): Likewise.
      	* config/csky/csky.c (csky_arg_partial_bytes): Likewise.
      	* config/epiphany/epiphany.c (epiphany_arg_partial_bytes): Likewise.
      	* config/fr30/fr30.c: Include calls.h.
      	(fr30_arg_partial_bytes): Take a function_arg_info instead of a mode,
      	type and named flag.
      	* config/frv/frv.c: Include calls.h.
      	(frv_arg_partial_bytes): Take a function_arg_info instead of a mode,
      	type and named flag.
      	* config/ft32/ft32.c (ft32_arg_partial_bytes): Likewise.
      	* config/gcn/gcn.c (gcn_arg_partial_bytes): Likewise.
      	* config/ia64/ia64.c (ia64_arg_partial_bytes): Likewise.
      	* config/iq2000/iq2000.c (iq2000_arg_partial_bytes): Likewise.
      	* config/m32r/m32r.c (m32r_arg_partial_bytes): Likewise.
      	* config/mcore/mcore.c (mcore_arg_partial_bytes): Likewise.
      	* config/microblaze/microblaze.c (function_arg_partial_bytes):
      	Likewise.
      	* config/mips/mips.c (mips_arg_partial_bytes): Likewise.
      	* config/mn10300/mn10300.c (mn10300_arg_partial_bytes): Likewise.
      	* config/moxie/moxie.c (moxie_arg_partial_bytes): Likewise.
      	* config/msp430/msp430.c (msp430_arg_partial_bytes): Likewise.
      	* config/nds32/nds32.c (nds32_arg_partial_bytes): Likewise.
      	* config/nios2/nios2.c (nios2_arg_partial_bytes): Likewise.
      	* config/pa/pa.c (pa_arg_partial_bytes): Likewise.
      	* config/pru/pru.c (pru_arg_partial_bytes): Likewise.
      	* config/riscv/riscv.c (riscv_arg_partial_bytes): Likewise.
      	* config/rs6000/rs6000-internal.h (rs6000_arg_partial_bytes): Likewise.
      	* config/rs6000/rs6000-call.c (rs6000_arg_partial_bytes): Likewise.
      	(rs6000_parm_needs_stack): Update call accordingly.
      	* config/sh/sh.c (sh_arg_partial_bytes): Take a
      	function_arg_info instead of a mode, type and named flag.
      	* config/sparc/sparc.c (sparc_arg_partial_bytes): Likewise.
      	* config/v850/v850.c (v850_arg_partial_bytes): Likewise.
      
      From-SVN: r274697
      Richard Sandiford committed
    • Add must_pass_va_arg_in_stack · 4f53599c
      This patch splits out another idiom from the va_arg gimplification
      routines, so that there's only one place to update later.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* calls.h (must_pass_va_arg_in_stack): Declare.
      	* calls.c (must_pass_va_arg_in_stack): New function.
      	* config/alpha/alpha.c (alpha_gimplify_va_arg_1): Use it.
      	* config/sh/sh.c (sh_gimplify_va_arg_expr): Likewise.
      	* config/stormy16/stormy16.c (xstormy16_gimplify_va_arg_expr):
      	Likewise.
      	* config/xtensa/xtensa.c (xtensa_gimplify_va_arg_expr): Likewise.
      
      From-SVN: r274696
      Richard Sandiford committed
    • Add pass_va_arg_by_reference · fde65a89
      This patch splits out a common idiom from the va_arg gimplification
      routines, so that there's only one place to update later.
      
      2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* calls.h (pass_va_arg_by_reference): Declare.
      	* calls.c (pass_va_arg_by_reference): New function.
      	* config/aarch64/aarch64.c (aarch64_gimplify_va_arg_expr): Use it.
      	* config/alpha/alpha.c (alpha_gimplify_va_arg): Likewise.
      	* config/gcn/gcn.c (gcn_gimplify_va_arg_expr): Likewise.
      	* config/i386/i386.c (ix86_gimplify_va_arg): Likewise.
      	* config/ia64/ia64.c (ia64_gimplify_va_arg): Likewise.
      	* config/mips/mips.c (mips_std_gimplify_va_arg_expr): Likewise.
      	(mips_gimplify_va_arg_expr): Likewise.
      	* config/msp430/msp430.c (msp430_gimplify_va_arg_expr): Likewise.
      	* config/pa/pa.c (hppa_gimplify_va_arg_expr): Likewise.
      	* config/rs6000/rs6000-call.c (rs6000_gimplify_va_arg): Likewise.
      	* config/s390/s390.c (s390_gimplify_va_arg): Likewise.
      	* config/sparc/sparc.c (sparc_gimplify_va_arg): Likewise.
      	* config/spu/spu.c (spu_gimplify_va_arg_expr): Likewise.
      	* config/tilegx/tilegx.c (tilegx_gimplify_va_arg_expr): Likewise.
      	* config/tilepro/tilepro.c (tilepro_gimplify_va_arg_expr): Likewise.
      	* config/visium/visium.c (visium_gimplify_va_arg): Likewise.
      	* config/xtensa/xtensa.c (xtensa_gimplify_va_arg_expr): Likewise.
      	* targhooks.c (std_gimplify_va_arg_expr): Likewise.
      
      From-SVN: r274695
      Richard Sandiford committed
    • re PR target/91498 (STV change in r274481 causes 300.twolf regression on Haswell) · f386ca41
      2019-08-20  Richard Biener  <rguenther@suse.de>
      
      	PR target/91498
      	* config/i386/i386-features.c (general_scalar_chain::convert_op):
      	Use (vec_merge (vec_duplicate..)) style vector from scalar move.
      	(convert_scalars_to_vector): Add timode_p parameter and use it
      	to guard TImode-only operation.
      	(pass_stv::gate): Adjust so STV runs twice for TARGET_64BIT.
      	(pass_stv::execute): Pass down timode_p.
      
      	* gcc.target/i386/minmax-7.c: New testcase.
      
      From-SVN: r274694
      Richard Biener committed
    • Add TIGERLAKE and COOPERLAKE to GCC. · a9fcfec3
      2019-08-20  Lili Cui  <lili.cui@intel.com>
      
      gcc/
      	* common/config/i386/i386-common.c
      	(processor_names): Add tigerlake and cooperlake.
      	(processor_alias_table): Add tigerlake and cooperlake.
      	* config.gcc: Add -march=tigerlake and cooperlake.
      	* config/i386/driver-i386.c
      	(host_detect_local_cpu): Detect tigerlake and cooperlake.
      	Add "has_avx" to classify processor.
      	* config/i386/i386-builtins.c (processor_model):
      	Add M_INTEL_COREI7_TIGERLAKE and M_INTEL_COREI7_COOPERLAKE.
      	(arch_names_table): Add tigerlake and cooperlake.
      	(get_builtin_code_for_version) : Handle PROCESSOR_TIGERLAKE and
      	PROCESSOR_COOPERLAKE.
      	* config/i386/i386-c.c
      	(ix86_target_macros_internal): Handle tigerlake and cooperlake.
      	* config/i386/i386-options.c
      	(m_TIGERLAKE)  : Define.
      	(m_COOPERLAKE) : Ditto.
      	(m_CORE_AVX512): Ditto.
      	(processor_cost_table): Add cascadelake.
      	(ix86_option_override_internal): Hadle PTA_MOVDIRI, PTA_MOVDIR64B.
      	* config/i386/i386.h
      	(ix86_size_cost) : Define TARGET_TIGERLAKE and TARGET_COOPERLAKE.
      	(processor_type) : Add PROCESSOR_TIGERLAKE and PROCESSOR_COOPERLAKE.
      	(PTA_MOVDIRI): Ditto.
      	(PTA_MOVDIR64B): Ditto.
      	(PTA_COOPERLAKE) : Ditto.
      	(PTA_TIGERLAKE)  : Ditto.
      	(processor_type) : Add PROCESSOR_TIGERLAKE and PROCESSOR_COOPERLAKE.
      	* doc/extend.texi: Add tigerlake and cooperlake.
      	* doc/invoke.texi: Add tigerlake and cooperlake.
      
      gcc/testsuite/
      	* gcc.target/i386/funcspec-56.inc: Handle new march.
      	* g++.target/i386/mv16.C: Handle new march
      
      libgcc/
      	* config/i386/cpuinfo.h: Add INTEL_COREI7_TIGERLAKE and
      	INTEL_COREI7_COOPERLAKE.
      
      From-SVN: r274693
      Hongtao Liu committed
    • install.texi (Specific, alpha): Remove note to use binutils 2.11.2 or later. · 607a71e8
      	* doc/install.texi (Specific, alpha): Remove note to use
      	binutils 2.11.2 or later.
      
      From-SVN: r274692
      Gerald Pfeifer committed
    • re PR middle-end/89544 (Argument marshalling incorrectly assumes stack slots are… · 1bcec8df
      re PR middle-end/89544 (Argument marshalling incorrectly assumes stack slots are naturally aligned.)
      
      2019-08-20  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              PR middle-end/89544
              * function.c (assign_parm_find_stack_rtl): Use larger alignment
              when possible.
      
      testsuite:
      2019-08-20  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              PR middle-end/89544
              * gcc.target/arm/unaligned-argument-1.c: New test.
              * gcc.target/arm/unaligned-argument-2.c: New test.
      
      From-SVN: r274691
      Bernd Edlinger committed