1. 20 Aug, 2019 19 commits
    • 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
    • Daily bump. · 876013aa
      From-SVN: r274689
      GCC Administrator committed
  2. 19 Aug, 2019 21 commits
    • compiler: new debugging output methods/functions · 5582fc15
          
          Add new hooks for dumping named objects, package bindings,
          and top level Gogo package list.
          
          Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/190877
      
      From-SVN: r274682
      Ian Lance Taylor committed
    • runtime: be more strict in GC · 4f6bdb08
          
          With CL 190599, along with what we do in greyobject, we ensure
          that we only mark allocated heap objects. As a result we can be
          more strict in GC:
          
          - Enable "sweep increased allocation count" check, which checks
            that the number of mark bits set are no more than the number of
            allocation bits.
          
          - Enable invalid pointer check on heap scan. We only trace
            allocated heap objects, which should not contain invalid
            pointer.
          
          This also makes the libgo runtime more convergent with the gc
          runtime.
          
          Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/190797
      
      From-SVN: r274678
      Ian Lance Taylor committed
    • [AArch64] Use scvtf fbits option where appropriate · 188d0079
      gcc/ChangeLog:
      2019-08-19  Joel Hutton  <Joel.Hutton@arm.com>
      
      	* config/aarch64/aarch64-protos.h (aarch64_fpconst_pow2_recip): New prototype
      	* config/aarch64/aarch64.c (aarch64_fpconst_pow2_recip): New function
      	* config/aarch64/aarch64.md (*aarch64_<su_optab>cvtf<fcvt_target><GPF:mode>2_mult): New pattern
      	(*aarch64_<su_optab>cvtf<fcvt_iesize><GPF:mode>2_mult): New pattern
      	* config/aarch64/constraints.md (Dt): New constraint
      	* config/aarch64/predicates.md (aarch64_fpconst_pow2_recip): New predicate
      
      gcc/testsuite/ChangeLog:
      2019-08-19  Joel Hutton  <Joel.Hutton@arm.com>
      
      	* gcc.target/aarch64/fmul_scvtf_1.c: New test.
      
      From-SVN: r274676
      Joel Hutton committed
    • Add --with-static-standard-libraries to the top level · aac9103b
      gdb should normally not be linked with -static-libstdc++.  Currently
      this has not caused problems, but it's incompatible with catching an
      exception thrown from a shared library -- and a subsequent patch
      changes gdb to do just this.
      
      This patch adds a new --with-static-standard-libraries flag to the
      top-level configure.  It defaults to "auto", which means enabled if
      gcc is being built, and disabled otherwise.
      
      ChangeLog
      2019-08-19  Tom Tromey  <tom@tromey.com>
      
      	* configure: Rebuild.
      	* configure.ac: Add --with-static-standard-libraries.
      
      From-SVN: r274673
      Tom Tromey committed
    • re PR tree-optimization/91403 (GCC fails with ICE.) · 3bbc329b
      2019-08-19  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/91403
      	* tree-scalar-evolution.c (follow_ssa_edge_binary): Inline
      	cases we can handle with tail-recursion...
      	(follow_ssa_edge_expr): ... here.  Do so.
      
      From-SVN: r274672
      Richard Biener committed
    • PR c++/91264 - detect modifying const objects in constexpr. · 04e1749c
      	* constexpr.c (modifying_const_object_error): New function.
      	(cxx_eval_call_expression): Set TREE_READONLY on a CONSTRUCTOR of
      	a const-qualified object after it's been fully constructed.
      	(modifying_const_object_p): New function.
      	(cxx_eval_store_expression): Detect modifying a const object
      	during constant expression evaluation.
      	(cxx_eval_increment_expression): Use a better location when building
      	up the store.
      	(cxx_eval_constant_expression) <case DECL_EXPR>: Mark a constant
      	object's constructor TREE_READONLY.
      
      	* g++.dg/cpp1y/constexpr-tracking-const1.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const2.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const3.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const4.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const5.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const6.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const7.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const8.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const9.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const10.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const11.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const12.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const13.C: New test.
      	* g++.dg/cpp1y/constexpr-tracking-const14.C: New test.
      
      From-SVN: r274671
      Marek Polacek committed
    • Update BOZ constant documentation. · 5a9ea4ff
      In the section "BOZ Literal constants" delete paragraph about integer
      overload errors when initialising integer variables with BOZ constants
      as these no longer occur.
      
      From-SVN: r274667
      Mark Eggleston committed
    • [Ada] Fix documentation for stream oriented attributes · 8fd97fcd
      2019-08-19  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* doc/gnat_rm/implementation_advice.rst: Fix documentation for
      	stream oriented attributes.
      	* gnat_rm.texi: Regenerate.
      
      From-SVN: r274666
      Bob Duff committed
    • [Ada] Einfo: update comments for E_Function and E_Procedure · c27a8bce
      2019-08-19  Gary Dismukes  <dismukes@adacore.com>
      
      gcc/ada/
      
      	* einfo.ads (E_Function, E_Procedure): Update comments to
      	reflect that Renamed_Entity is also used for nongeneric
      	subprograms.
      
      From-SVN: r274665
      Gary Dismukes committed
    • [Ada] Fix bogus compilation error with Elaborate_Body and -gnatN · 8fafa0b4
      This fixes a bogus compilation error when a unit with SPARK_Mode
      containing a pragma Elaborate_Body is with-ed by a generic unit
      containing an inlined subprogram, and front-end inlining is enabled.
      
      2019-08-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.adb (Is_Before_First_Decl): Deal with rewritten
      	pragmas.
      
      gcc/testsuite/
      
      	* gnat.dg/elab8.adb, gnat.dg/elab8_gen.adb,
      	gnat.dg/elab8_gen.ads, gnat.dg/elab8_pkg.adb,
      	gnat.dg/elab8_pkg.ads: New testcase.
      
      From-SVN: r274664
      Eric Botcazou committed
    • [Ada] Suppress warnings on unreferenced parameters of dispatching ops · bfa6962f
      If the -gnatwf switch is used to activate warnings on unreferenced
      formal parameters, the warning is no longer given if the subprogram is
      dispatching, because such warnings tend to be noise. It is quite common
      to have a parameter that is necessary just because the subprogram is
      overriding, or just because we need a controlling parameter for the
      dispatch.
      
      2019-08-19  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_warn.adb (Warn_On_Unreferenced_Entity): Suppress warning
      	on formal parameters of dispatching operations.
      
      gcc/testsuite/
      
      	* gnat.dg/warn29.adb, gnat.dg/warn29.ads: New testcase.
      
      From-SVN: r274663
      Bob Duff committed
    • [Ada] Crash on object initialization that is call to expression function · fcef060c
      This patch fixes a compiler abort on an object declaration for a
      class-wide type whose expression is a call to an expression function
      that returns type extension.
      
      2019-08-19  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_res.adb (Resolve_Call): A call to an expression function
      	freezes when expander is active, unless the call appears within
      	the body of another expression function,
      
      gcc/testsuite/
      
      	* gnat.dg/expr_func9.adb: New testcase.
      
      From-SVN: r274662
      Ed Schonberg committed
    • [Ada] Conversion routines between GNAT.OS_Lib.OS_Time and long integer · c7022038
      The new routines convert back and forth between private type OS_Time and
      a long integer which can be used in package Ada.Calendar.Conversions
      routines to convert to Ada.Calendar.Time.
      
      2019-08-19  Dmitriy Anisimkov  <anisimko@adacore.com>
      
      gcc/ada/
      
      	* libgnat/s-os_lib.ads, libgnat/s-os_lib.adb (To_Ada, To_C): New
      	routines.
      
      From-SVN: r274661
      Dmitriy Anisimkov committed
    • [Ada] Incorrect code for -gnateV switch · 382b0e97
      This patch corrects the code generated by the -gnateV switch in the case
      of a private type whose full type is a modular type, removing spurious
      run-time failures.
      
      In addition, this corrects the initialization of exception occurrences
      in exception handlers to avoid leaving data uninitialized, which caused
      -gnateV to raise spurious errors.
      
      2019-08-19  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* exp_attr.adb (Attribute_Valid): Correct the handling of
      	private types where the full type is modular. System.Address is
      	an example. Otherwise, we convert uncheckedly to a signed type,
      	so we get an incorrect range 0 .. -1, for which all values will
      	fail.  The 'Valid attribute is illegal for such types, but we
      	generate such illegal attribute_references for 'Valid_Scalars,
      	and we generate 'Valid_Scalars when the -gnateV switch is used.
      	Rename Btyp --> PBtyp to avoid hiding the outer Btyp, which was
      	confusing.
      	* libgnat/a-except.adb: Set the Exception_Raised component.
      	Otherwise, we have incorrect reads of invalid data.
      
      gcc/testsuite/
      
      	* gnat.dg/valid_scalars2.adb: New testcase.
      
      From-SVN: r274660
      Bob Duff committed
    • [Ada] Import documentation from the RM for various runtime units · 27ebda19
      2019-08-19  Pierre-Marie de Rodat  <derodat@adacore.com>
      
      gcc/ada/
      
      	* libgnat/a-cgaaso.ads, libgnat/a-cgarso.ads,
      	libgnat/a-cogeso.ads, libgnat/a-contai.ads,
      	libgnat/a-locale.ads: Import documentation from the RM.
      
      From-SVN: r274659
      Pierre-Marie de Rodat committed
    • [Ada] Generate ada_target_properties · bd0feb3c
      Generate target-dependent info into a file named ada_target_properties.
      This information is used by tools for static analysis: they need to know
      the size of standard types for a given run-time library. This metadata
      is meant to be saved at the root of the run-time directory.
      
      2019-08-19  Jerome Guitton  <guitton@adacore.com>
      
      gcc/ada/
      
      	* Makefile.rtl (system.o): New target to add generation of
      	target properties.
      	* gcc-interface/Makefile.in (install-gnatlib): Install
      	ada_target_properties.
      
      From-SVN: r274658
      Jerome Guitton committed
    • [Ada] Lift restriction on instantiations that are compilation units · 6c87c83b
      This change lifts the restriction that was still present in the new
      on-demand instantiation scheme for the body of generics instantiated in
      non-main units.
      
      The instantiations that are compilation units were still dealt with in
      the old-fashioned way, that is to say the decision of instantiating the
      body was still made up front during the analysis of the instance
      declaration, instead of being deferred until after a call to an inlined
      subprogram is encountered.
      
      This should save a few more cycles when full inlining across units is
      enabled, but there should otherwise be no functional changes.
      
      2019-08-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* inline.adb (Add_Inlined_Body): Do not special-case instances
      	that are compilation units.
      	(Add_Pending_Instantiation): Likewise.
      	(Instantiate_Body): Skip instantiations that are compilation
      	units and have already been performed.
      	* sem_ch12.adb (Needs_Body_Instantiated): Do not special-case
      	instances that are compilation units.
      	(Load_Parent_Of_Generic): Be prepared for parent that is a
      	compilation unit but whose instantiation node has not been
      	replaced.
      
      gcc/testsuite/
      
      	* gnat.dg/generic_inst12.adb, gnat.dg/generic_inst12_pkg1.adb,
      	gnat.dg/generic_inst12_pkg1.ads,
      	gnat.dg/generic_inst12_pkg2.ads: New testcase.
      
      From-SVN: r274657
      Eric Botcazou committed
    • [Ada] Further cleanup in inlining machinery · 92b635e5
      This adds missing boilerplate stuff.  No functional changes.
      
      2019-08-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* inline.adb (Initialize, Lock): Deal with
      	Called_Pending_Instantiations.
      
      From-SVN: r274656
      Eric Botcazou committed
    • [Ada] Legality of protected subp. implementing interface operations · 432c8cdd
      This patch refines the predicate that implements rule in RM 9.4 (11.9/2)
      
      Compiling b94.ads must yield:
      
         b94.ads:11:17: illegal overriding of subprogram inherited from interface
         b94.ads:11:17: first formal of "N" declared at line 8 must be of mode
           "out", "in out" or access-to-variable
      
      ----
      package B94 is
      
         type Prot2_Int is protected interface;
         procedure  J (PI : in     Prot2_Int; N : in Integer)  is null;
         procedure  K (PI : in out Prot2_Int; N : in Integer)  is null;
         procedure  L (PI :    out Prot2_Int; N : in Integer)  is null;
         procedure  M (PI : access Prot2_Int; N : in Integer)  is null;
         procedure  N (PI : access constant Prot2_Int; N : in Integer)  is null;
      
         protected type Protected_2 is new Prot2_Int with
            procedure N (N : in Integer);                   -- ERROR: {7;1}
         end Protected_2;
      
      end B94;
      
      2019-08-19  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch6.adb (Check_Synchronized_Overriding): Complete
      	predicate that applies legality check in 9.4 (11.9/2): if an
      	inherited subprogram is implemented by a protected procedure or
      	entry, its first paarameter must be out, in_out or
      	access_to_varible.
      
      From-SVN: r274655
      Ed Schonberg committed
    • [Ada] Buffer reading overflow in dispatch table initialization · bd5ed03a
      For tagged types not defined at library level that derive from library
      level tagged types the compiler may generate code to initialize their
      dispatch table of predefined primitives copying from the parent type
      data stored in memory after the dispatch table of the parent; that is,
      at runtime the initialization of dispatch tables overflows reading the
      parent dispatch table.
      
      This problem does not affect the execution of the program since the
      target dispatch table always has enough space to store the extra data,
      and after such copy the compiler generates code to complete the
      initialization of the dispatch table.
      
      The following test must compile and execute without errors.
      
      package pkg_a is
         type Root is tagged null record;
      end pkg_a;
      
      with pkg_a;
      procedure main is
         type Derived is new pkg_a.Root with null record;  -- Test
      begin
         null;
      end main;
      
      Command: gnatmake -q main -fsanitize=address; ./main
      
      2019-08-19  Javier Miranda  <miranda@adacore.com>
      
      gcc/ada/
      
      	PR ada/65696
      	* exp_atag.ads, exp_atag.adb (Build_Inherit_Predefined_Prims):
      	Adding formal to specify how many predefined primitives are
      	inherited from the parent type.
      	* exp_disp.adb (Number_Of_Predefined_Prims): New subprogram.
      	(Make_Secondary_DT): Compute the number of predefined primitives
      	of all tagged types (including tagged types not defined at
      	library level).  Previously we unconditionally relied on the
      	Max_Predef_Prims constant value when building the dispatch
      	tables of tagged types not defined at library level (thus
      	consuming more memory for their dispatch tables than required).
      	(Make_DT): Compute the number of predefined primitives that must
      	be inherited from their parent type when building the dispatch
      	tables of tagged types not defined at library level. Previously
      	we unconditionally relied on the Max_Predef_Prims constant value
      	when building the dispatch tables of tagged types not defined at
      	library level (thus copying more data than required from the
      	parent type).
      
      From-SVN: r274654
      Javier Miranda committed
    • [Ada] Process type extensions for -gnatw.h · d403cfad
      This patch enables gap detection in type extensions.
      
      With the -gnatw.h switch, on 64-bit machines,
      the following test should get warnings:
      
      gcc -c gaps.ads -gnatw.h
      gaps.ads:16:07: warning: 48-bit gap before component "Comp2"
      gaps.ads:17:07: warning: 8-bit gap before component "Comp3"
      
      package Gaps is
         type Integer_16 is mod 2**16;
      
         type TestGap is tagged record
            Comp1 : Integer_16;
         end record;
         for TestGap use record
            Comp1 at 0 + 8 range 0..15;
         end record;
      
         type TestGap2 is new TestGap with record
            Comp2  : Integer_16;
            Comp3  : Integer_16;
         end record;
         for TestGap2 use record
            Comp2 at 08 + 8 range 0..15;
            Comp3 at 11 + 8 range 0..15;
         end record;
      
      end Gaps;
      
      2019-08-19  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Record_Hole_Check): Procedure to check for holes
      	that incudes processing type extensions. A type extension is
      	processed by first calling Record_Hole_Check recursively on the
      	parent type to compute the bit number after the last component
      	of the parent.
      
      From-SVN: r274653
      Bob Duff committed