1. 05 Sep, 2017 1 commit
    • Make more use of int_mode_for_size · f4b31647
      This patch converts more places that could use int_mode_for_size instead
      of mode_for_size.  This is in preparation for an upcoming patch that
      makes mode_for_size itself return an opt_mode.
      
      require () seems like the right choice in expand_builtin_powi
      because we have got past the point of backing out.  We go on to do:
      
        op1 = expand_expr (arg1, NULL_RTX, mode2, EXPAND_NORMAL);
        if (GET_MODE (op1) != mode2)
          op1 = convert_to_mode (mode2, op1, 0);
      
      which would be invalid for (and have failed for) BLKmode.
      
      In get_builtin_sync_mode and expand_ifn_atomic_compare_exchange,
      the possible bitsizes are {8, 16, 32, 64, 128}, all of which give
      target-independent integer modes (up to TImode).  The comment above
      the call in get_builtin_sync_mode makes clear that an integer mode
      must be found.
      
      We can use require () in expand_builtin_atomic_clear and
      expand_builtin_atomic_test_and_set because there's always an integer
      mode for the boolean type.  The same goes for the POINTER_SIZE request
      in layout_type.  Similarly we can use require () in combine_instructions
      and gen_lowpart_common because there's always an integer mode for
      HOST_BITS_PER_WIDE_INT (DImode when BITS_PER_UNIT == 8), and
      HOST_BITS_PER_DOUBLE_INT (TImode).
      
      The calls in aarch64_function_value, arm_function_value,
      aapcs_allocate_return_reg and mips_function_value_1 are handling
      cases in which a big-endian target passes or returns values at
      the most significant end of a register.  In each case the ABI
      constrains the size to a small amount and does not handle
      non-power-of-2 sizes wider than a word.
      
      The calls in c6x_expand_movmem, i386.c:emit_memset,
      lm32_block_move_inline, microblaze_block_move_straight and
      mips_block_move_straight are dealing with expansions of
      block memory operations using register-wise operations,
      and those registers must have non-BLK mode.
      
      The reason for using require () in ix86_expand_sse_cmp,
      mips_expand_ins_as_unaligned_store, spu.c:adjust_operand and
      spu_emit_branch_and_set is that we go on to emit non-call
      instructions that use registers of that mode, which wouldn't
      be valid for BLKmode.
      
      2017-09-05  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* builtins.c (expand_builtin_powi): Use int_mode_for_size.
      	(get_builtin_sync_mode): Likewise.
      	(expand_ifn_atomic_compare_exchange): Likewise.
      	(expand_builtin_atomic_clear): Likewise.
      	(expand_builtin_atomic_test_and_set): Likewise.
      	(fold_builtin_atomic_always_lock_free): Likewise.
      	* calls.c (compute_argument_addresses): Likewise.
      	(emit_library_call_value_1): Likewise.
      	(store_one_arg): Likewise.
      	* combine.c (combine_instructions): Likewise.
      	* config/aarch64/aarch64.c (aarch64_function_value): Likewise.
      	* config/arm/arm.c (arm_function_value): Likewise.
      	(aapcs_allocate_return_reg): Likewise.
      	* config/c6x/c6x.c (c6x_expand_movmem): Likewise.
      	* config/i386/i386.c (construct_container): Likewise.
      	(ix86_gimplify_va_arg): Likewise.
      	(ix86_expand_sse_cmp): Likewise.
      	(emit_memmov): Likewise.
      	(emit_memset): Likewise.
      	(expand_small_movmem_or_setmem): Likewise.
      	(ix86_expand_pextr): Likewise.
      	(ix86_expand_pinsr): Likewise.
      	* config/lm32/lm32.c (lm32_block_move_inline): Likewise.
      	* config/microblaze/microblaze.c (microblaze_block_move_straight):
      	Likewise.
      	* config/mips/mips.c (mips_function_value_1) Likewise.
      	(mips_block_move_straight): Likewise.
      	(mips_expand_ins_as_unaligned_store): Likewise.
      	* config/powerpcspe/powerpcspe.c
      	(rs6000_darwin64_record_arg_advance_flush): Likewise.
      	(rs6000_darwin64_record_arg_flush): Likewise.
      	* config/rs6000/rs6000.c
      	(rs6000_darwin64_record_arg_advance_flush): Likewise.
      	(rs6000_darwin64_record_arg_flush): Likewise.
      	* config/sparc/sparc.c (sparc_function_arg_1): Likewise.
      	(sparc_function_value_1): Likewise.
      	* config/spu/spu.c (adjust_operand): Likewise.
      	(spu_emit_branch_or_set): Likewise.
      	(arith_immediate_p): Likewise.
      	* emit-rtl.c (gen_lowpart_common): Likewise.
      	* expr.c (expand_expr_real_1): Likewise.
      	* function.c (assign_parm_setup_block): Likewise.
      	* gimple-ssa-store-merging.c (encode_tree_to_bitpos): Likewise.
      	* reload1.c (alter_reg): Likewise.
      	* stor-layout.c (mode_for_vector): Likewise.
      	(layout_type): Likewise.
      
      gcc/ada/
      	* gcc-interface/utils2.c (build_load_modify_store):
      	Use int_mode_for_size.
      
      From-SVN: r251726
      Richard Sandiford committed
  2. 04 Sep, 2017 1 commit
    • Turn FUNCTION_ARG_PADDING into a target hook · 76b0cbf8
      This involved renaming the rather general-sounding "enum direction" to
      "enum pad_direction" to avoid a conflict with the Fortran frontend.
      
      2017-09-04  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* coretypes.h (pad_direction): New enum.
      	* defaults.h (DEFAULT_FUNCTION_ARG_PADDING): Delete.
      	(FUNCTION_ARG_PADDING): Likewise.
      	* target.def (function_arg_padding): New hook.
      	* targhooks.h (default_function_arg_padding): Declare.
      	* targhooks.c (default_function_arg_padding): New function.
      	* doc/tm.texi.in (FUNCTION_ARG_PADDING): Replace with...
      	(TARGET_FUNCTION_ARG_PADDING): ...this.
      	* doc/tm.texi: Regenerate.
      	* calls.c (store_unaligned_arguments_into_pseudos): Use pad_direction
      	instead of direction.
      	(compute_argument_addresses): Likewise.
      	(load_register_parameters): Likewise.
      	(emit_library_call_value_1): Likewise.
      	(store_one_arg): Use targetm.calls.function_arg_padding instead
      	of FUNCTION_ARG_PADDING.
      	(must_pass_in_stack_var_size_or_pad): Likewise.
      	* expr.c (emit_group_load_1): Use pad_direction instead of direction.
      	(emit_group_store): Likewise.
      	(emit_single_push_insn_1): Use targetm.calls.function_arg_padding
      	instead of FUNCTION_ARG_PADDING.
      	(emit_push_insn): Likewise, and propagate enum change throughout
      	function.
      	* function.h (direction): Delete.
      	(locate_and_pad_arg_data::where_pad): Use pad_direction instead
      	of direction.
      	* function.c (assign_parm_find_stack_rtl): Likewise.
      	(assign_parm_setup_block_p): Likewise.
      	(assign_parm_setup_block): Likewise.
      	(gimplify_parameters): Likewise.
      	(locate_and_pad_parm): Use targetm.calls.function_arg_padding
      	instead of FUNCTION_ARG_PADDING, and propagate enum change throughout
      	function.
      	* config/aarch64/aarch64.h (FUNCTION_ARG_PADDING): Delete.
      	(BLOCK_REG_PADDING): Use pad_direction instead of direction.
      	* config/aarch64/aarch64-protos.h (aarch64_pad_arg_upward): Delete.
      	* config/aarch64/aarch64.c (aarch64_pad_arg_upward): Replace with...
      	(aarch64_function_arg_padding): ...this new function.
      	(aarch64_gimplify_va_arg_expr): Use pad_direction instead of direction.
      	(TARGET_FUNCTION_ARG_PADDING): Redefine.
      	* config/arm/arm.h (FUNCTION_ARG_PADDING): Delete.
      	(BLOCK_REG_PADDING): Use pad_direction instead of direction.
      	* config/arm/arm-protos.h (arm_pad_arg_upward): Delete.
      	* config/arm/arm.c (TARGET_FUNCTION_ARG_PADDING): Redefine.
      	(arm_pad_arg_upward): Replace with...
      	(arm_function_arg_padding): ...this new function.
      	* config/c6x/c6x.h (BLOCK_REG_PADDING): Use pad_direction instead
      	of direction.
      	* config/ia64/hpux.h (FUNCTION_ARG_PADDING): Delete.
      	* config/ia64/ia64-protos.h (ia64_hpux_function_arg_padding): Delete.
      	* config/ia64/ia64.c (TARGET_FUNCTION_ARG_PADDING): Redefine.
      	(ia64_hpux_function_arg_padding): Replace with...
      	(ia64_function_arg_padding): ...this new function.  Use pad_direction
      	instead of direction.  Check for TARGET_HPUX.
      	* config/iq2000/iq2000.h (FUNCTION_ARG_PADDING): Delete.
      	* config/iq2000/iq2000.c (TARGET_FUNCTION_ARG_PADDING): Redefine.
      	(iq2000_function_arg_padding): New function.
      	* config/mips/mips-protos.h (mips_pad_arg_upward): Delete.
      	* config/mips/mips.c (mips_pad_arg_upward): Replace with...
      	(mips_function_arg_padding): ...this new function.
      	(mips_pad_reg_upward): Update accordingly.
      	(TARGET_FUNCTION_ARG_PADDING): Redefine.
      	* config/mips/mips.h (PAD_VARARGS_DOWN): Use
      	targetm.calls.function_arg_padding.
      	(FUNCTION_ARG_PADDING): Delete.
      	(BLOCK_REG_PADDING): Use pad_direction instead of direction.
      	* config/nios2/nios2.h (FUNCTION_ARG_PADDING): Delete.
      	(PAD_VARARGS_DOWN): Use targetm.calls.function_arg_padding.
      	* config/nios2/nios2-protos.h (nios2_function_arg_padding): Delete.
      	(nios2_block_reg_padding): Return pad_direction instead of direction.
      	* config/nios2/nios2.c (nios2_block_reg_padding): Return pad_direction
      	instead of direction.
      	(nios2_function_arg_padding): Likewise.  Make static.
      	(TARGET_FUNCTION_ARG_PADDING): Redefine.
      	* config/pa/pa.h (FUNCTION_ARG_PADDING): Delete.
      	(BLOCK_REG_PADDING): Use targetm.calls.function_arg_padding.
      	* config/pa/pa-protos.h (pa_function_arg_padding): Delete.
      	* config/pa/pa.c (TARGET_FUNCTION_ARG_PADDING): Redefine.
      	(pa_function_arg_padding): Make static.  Return pad_direction instead
      	of direction.
      	* config/powerpcspe/powerpcspe.h (FUNCTION_ARG_PADDING): Delete.
      	(PAD_VARARGS_DOWN): Use targetm.calls.function_arg_padding.
      	* config/powerpcspe/aix.h (BLOCK_REG_PADDING): Use pad_direction
      	instead of direction.  Use targetm.calls.function_arg_padding.
      	* config/powerpcspe/darwin.h (BLOCK_REG_PADDING): Likewise.
      	* config/powerpcspe/freebsd64.h (BLOCK_REG_PADDING): Likewise.
      	* config/powerpcspe/linux64.h (BLOCK_REG_PADDING): Likewise.
      	* config/powerpcspe/powerpcspe-protos.h (function_arg_padding): Delete.
      	* config/powerpcspe/powerpcspe.c (TARGET_FUNCTION_ARG_PADDING):
      	Redefine.
      	(function_arg_padding): Rename to...
      	(rs6000_function_arg_padding): ...this.  Make static.  Return
      	pad_direction instead of direction.
      	(rs6000_return_in_msb): Use rs6000_function_arg_padding.
      	* config/rs6000/rs6000.h (FUNCTION_ARG_PADDING): Delete.
      	(PAD_VARARGS_DOWN): Use targetm.calls.function_arg_padding.
      	* config/rs6000/aix.h (BLOCK_REG_PADDING): Use pad_direction
      	instead of direction.  Use targetm.calls.function_arg_padding.
      	* config/rs6000/darwin.h (BLOCK_REG_PADDING): Likewise.
      	* config/rs6000/freebsd64.h (BLOCK_REG_PADDING): Likewise.
      	* config/rs6000/linux64.h (BLOCK_REG_PADDING): Likewise.
      	* config/rs6000/rs6000-protos.h (function_arg_padding): Delete.
      	* config/rs6000/rs6000.c (TARGET_FUNCTION_ARG_PADDING): Redefine.
      	(function_arg_padding): Rename to...
      	(rs6000_function_arg_padding): ...this.  Make static.  Return
      	pad_direction instead of direction.
      	(rs6000_return_in_msb): Use rs6000_function_arg_padding.
      	* config/s390/s390.h (FUNCTION_ARG_PADDING): Delete.
      	* config/s390/s390.c (s390_function_arg_padding): New function.
      	(TARGET_FUNCTION_ARG_PADDING): Redefine.
      	* config/sparc/sparc.h (FUNCTION_ARG_PADDING): Delete.
      	* config/sparc/sparc-protos.h (function_arg_padding): Delete.
      	* config/sparc/sparc.c (TARGET_FUNCTION_ARG_PADDING): Redefine.
      	(function_arg_padding): Rename to...
      	(sparc_function_arg_padding): ...this.  Make static.  Return
      	pad_direction instead of direction.
      	* config/spu/spu.h (FUNCTION_ARG_PADDING): Delete.
      	* config/spu/spu.c (spu_function_arg_padding): New function.
      	(TARGET_FUNCTION_ARG_PADDING): Redefine.
      	* system.h (FUNCTION_ARG_PADDING): Poison.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r251648
      Richard Sandiford committed
  3. 30 Aug, 2017 4 commits
    • Add a partial_subreg_p predicate · bd4288c0
      This patch adds a partial_subreg_p predicate to go alongside
      paradoxical_subreg_p.
      
      Like the paradoxical_subreg_p patch, this one replaces some tests that
      were based on GET_MODE_SIZE rather than GET_MODE_PRECISION.  In each
      case the change should be a no-op or an improvement.
      
      The regcprop.c patch prevents some replacements of the 82-bit RFmode
      with the 80-bit XFmode on ia64.  I don't understand the target details
      here particularly well, but from the way the modes are described in
      ia64-modes.def, it isn't valid to assume that an XFmode can carry an
      RFmode payload.  A comparison of the testsuite assembly output for one
      target per CPU showed no other differences.
      
      Some of the places changed here are tracking the widest access mode
      found for a register.  The series tries to standardise on:
      
        if (partial_subreg_p (widest_seen, new_mode))
          widest_seen = new_mode;
      
      rather than:
      
        if (paradoxical_subreg_p (new_mode, widest_seen))
          widest_seen = new_mode;
      
      Either would have been OK.
      
      2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* rtl.h (partial_subreg_p): New function.
      	* caller-save.c (save_call_clobbered_regs): Use it.
      	* calls.c (expand_call): Likewise.
      	* combine.c (combinable_i3pat): Likewise.
      	(simplify_set): Likewise.
      	(make_extraction): Likewise.
      	(make_compound_operation_int): Likewise.
      	(gen_lowpart_or_truncate): Likewise.
      	(force_to_mode): Likewise.
      	(make_field_assignment): Likewise.
      	(reg_truncated_to_mode): Likewise.
      	(record_truncated_value): Likewise.
      	(move_deaths): Likewise.
      	* cse.c (record_jump_cond): Likewise.
      	(cse_insn): Likewise.
      	* cselib.c (cselib_lookup_1): Likewise.
      	* expmed.c (extract_bit_field_using_extv): Likewise.
      	* function.c (assign_parm_setup_reg): Likewise.
      	* ifcvt.c (noce_convert_multiple_sets): Likewise.
      	* ira-build.c (create_insn_allocnos): Likewise.
      	* lra-coalesce.c (merge_pseudos): Likewise.
      	* lra-constraints.c (match_reload): Likewise.
      	(simplify_operand_subreg): Likewise.
      	(curr_insn_transform): Likewise.
      	* lra-lives.c (process_bb_lives): Likewise.
      	* lra.c (new_insn_reg): Likewise.
      	(lra_substitute_pseudo): Likewise.
      	* regcprop.c (mode_change_ok): Likewise.
      	(maybe_mode_change): Likewise.
      	(copyprop_hardreg_forward_1): Likewise.
      	* reload.c (push_reload): Likewise.
      	(find_reloads): Likewise.
      	(find_reloads_subreg_address): Likewise.
      	* reload1.c (alter_reg): Likewise.
      	(eliminate_regs_1): Likewise.
      	* simplify-rtx.c (simplify_unary_operation_1): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r251536
      Richard Sandiford committed
    • [77/77] Add a complex_mode class · a97390bf
      This patch adds another machine_mode wrapper for modes that are
      known to be COMPLEX_MODE_P.  There aren't yet many places that make
      use of it, but that might change in future.
      
      2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* coretypes.h (complex_mode): New type.
      	* gdbhooks.py (build_pretty_printer): Handle it.
      	* machmode.h (complex_mode): New class.
      	(complex_mode::includes_p): New function.
      	(is_complex_int_mode): Likewise.
      	(is_complex_float_mode): Likewise.
      	* genmodes.c (get_mode_class): Handle complex mode classes.
      	* function.c (expand_function_end): Use is_complex_int_mode.
      
      gcc/go/
      	* go-lang.c (go_langhook_type_for_mode): Use is_complex_float_mode.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r251527
      Richard Sandiford committed
    • [64/77] Add a scalar_mode class · d21cefc2
      This patch adds a scalar_mode class that can hold any scalar mode,
      specifically:
      
        - scalar integers
        - scalar floating-point values
        - scalar fractional modes
        - scalar accumulator modes
        - pointer bounds modes
      
      To start with this patch uses this type for GET_MODE_INNER.
      Later patches add more uses.
      
      2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* coretypes.h (scalar_mode): New class.
      	* machmode.h (scalar_mode): Likewise.
      	(scalar_mode::includes_p): New function.
      	(mode_to_inner): Return a scalar_mode rather than a machine_mode.
      	* gdbhooks.py (build_pretty_printers): Handle scalar_mode.
      	* genmodes.c (get_mode_class): Handle remaining scalar modes.
      	* cfgexpand.c (expand_debug_expr): Use scalar_mode.
      	* expmed.c (store_bit_field_1): Likewise.
      	(extract_bit_field_1): Likewise.
      	* expr.c (write_complex_part): Likewise.
      	(read_complex_part): Likewise.
      	(emit_move_complex_push): Likewise.
      	(expand_expr_real_2): Likewise.
      	* function.c (assign_parm_setup_reg): Likewise.
      	(assign_parms_unsplit_complex): Likewise.
      	* optabs.c (expand_binop): Likewise.
      	* rtlanal.c (subreg_get_info): Likewise.
      	* simplify-rtx.c (simplify_immed_subreg): Likewise.
      	* varasm.c (output_constant_pool_2): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r251515
      Richard Sandiford committed
    • [35/77] Add uses of as_a <scalar_int_mode> · c7ad039d
      This patch adds asserting as_a <scalar_int_mode> conversions
      to contexts in which the input is known to be a scalar integer mode.
      
      In expand_divmod, op1 is always a scalar_int_mode if
      op1_is_constant (but might not be otherwise).
      
      In expand_binop, the patch reverses a < comparison in order to
      avoid splitting a long line.
      
      gcc/
      2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      	* cfgexpand.c (convert_debug_memory_address): Use
      	as_a <scalar_int_mode>.
      	* combine.c (expand_compound_operation): Likewise.
      	(make_extraction): Likewise.
      	(change_zero_ext): Likewise.
      	(simplify_comparison): Likewise.
      	* cse.c (cse_insn): Likewise.
      	* dwarf2out.c (minmax_loc_descriptor): Likewise.
      	(mem_loc_descriptor): Likewise.
      	(loc_descriptor): Likewise.
      	* expmed.c (init_expmed_one_mode): Likewise.
      	(synth_mult): Likewise.
      	(emit_store_flag_1): Likewise.
      	(expand_divmod): Likewise.  Use HWI_COMPUTABLE_MODE_P instead
      	of a comparison with size.
      	* expr.c (expand_assignment): Use as_a <scalar_int_mode>.
      	(reduce_to_bit_field_precision): Likewise.
      	* function.c (expand_function_end): Likewise.
      	* internal-fn.c (expand_arith_overflow_result_store): Likewise.
      	* loop-doloop.c (doloop_modify): Likewise.
      	* optabs.c (expand_binop): Likewise.
      	(expand_unop): Likewise.
      	(expand_copysign_absneg): Likewise.
      	(prepare_cmp_insn): Likewise.
      	(maybe_legitimize_operand): Likewise.
      	* recog.c (const_scalar_int_operand): Likewise.
      	* rtlanal.c (get_address_mode): Likewise.
      	* simplify-rtx.c (simplify_unary_operation_1): Likewise.
      	(simplify_cond_clz_ctz): Likewise.
      	* tree-nested.c (get_nl_goto_field): Likewise.
      	* tree.c (build_vector_type_for_mode): Likewise.
      	* var-tracking.c (use_narrower_mode): Likewise.
      
      gcc/c-family/
      2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      	* c-common.c (c_common_type_for_mode): Use as_a <scalar_int_mode>.
      
      gcc/lto/
      2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      	* lto-lang.c (lto_type_for_mode): Use as_a <scalar_int_mode>.
      
      From-SVN: r251487
      Richard Sandiford committed
  4. 23 Aug, 2017 1 commit
    • function.c (fndecl_name): Use verbosity 1 (no arguments) for lang_hooks.decl_printable_name. · 60591d4e
      2017-08-23  Richard Biener  <rguenther@suse.de>
      
      	* function.c (fndecl_name): Use verbosity 1 (no arguments) for
      	lang_hooks.decl_printable_name.
      	* print-rtl-function.c (print_rtx_function): Likewise.
      	* tree-pretty-print.c (dump_function_header): Likewise.
      
      	* g++.dg/cpp1y/constexpr-instantiate.C: Adjust.
      	* g++.dg/tree-ssa/pr45605.C: Likewise.
      	* gnat.dg/noinline2.ad: Likewise.b
      	* gnat.dg/renaming6.ad: Likewise.b
      	* gnat.dg/renaming6.ad: Likewise.s
      	* gnat.dg/specs/noinline3.ad: Likewise.s
      
      From-SVN: r251308
      Richard Biener committed
  5. 21 Aug, 2017 1 commit
    • Simplify pad_below implementation · b66fd4fc
      This patch simplifies the alignment calculations in pad_below.
      The first arm of the "if" was:
      
      - taking GET_MODE_BITSIZE (always equal to GET_MODE_SIZE * BITS_PER_UNIT),
      - rounding up to the next multiple of PARM_BOUNDARY
      - converting bits to bytes and
      - subtracting the GET_MODE_SIZE
      
      so was in effect calculating the number of bytes needed to round
      GET_MODE_SIZE up to (PARM_BOUNDARY / BITS_PER_UNIT).  That can be
      done more directly as -size & (align - 1), which is easier to
      convert to variable-sized modes.
      
      2017-08-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* function.c (pad_below): Simplify padding calculation.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r251233
      Richard Sandiford committed
  6. 08 Aug, 2017 1 commit
    • trans.c: Include header files. · 314e6352
      .
      2017-08-08  Martin Liska  <mliska@suse.cz>
      
      	* gcc-interface/trans.c: Include header files.
      2017-08-08  Martin Liska  <mliska@suse.cz>
      
      	* objc-gnu-runtime-abi-01.c: Include header files.
      	* objc-next-runtime-abi-01.c: Likewise.
      	* objc-next-runtime-abi-02.c: Likewise.
      2017-08-08  Martin Liska  <mliska@suse.cz>
      
      	* asan.c: Include header files.
      	* attribs.c (build_decl_attribute_variant): New function moved
      	from tree.[ch].
      	(build_type_attribute_qual_variant): Likewise.
      	(cmp_attrib_identifiers): Likewise.
      	(simple_cst_list_equal): Likewise.
      	(omp_declare_simd_clauses_equal): Likewise.
      	(attribute_value_equal): Likewise.
      	(comp_type_attributes): Likewise.
      	(build_type_attribute_variant): Likewise.
      	(lookup_ident_attribute): Likewise.
      	(remove_attribute): Likewise.
      	(merge_attributes): Likewise.
      	(merge_type_attributes): Likewise.
      	(merge_decl_attributes): Likewise.
      	(merge_dllimport_decl_attributes): Likewise.
      	(handle_dll_attribute): Likewise.
      	(attribute_list_equal): Likewise.
      	(attribute_list_contained): Likewise.
      	* attribs.h (lookup_attribute): New function moved from tree.[ch].
      	(lookup_attribute_by_prefix): Likewise.
      	* bb-reorder.c: Include header files.
      	* builtins.c: Likewise.
      	* calls.c: Likewise.
      	* cfgexpand.c: Likewise.
      	* cgraph.c: Likewise.
      	* cgraphunit.c: Likewise.
      	* convert.c: Likewise.
      	* dwarf2out.c: Likewise.
      	* final.c: Likewise.
      	* fold-const.c: Likewise.
      	* function.c: Likewise.
      	* gimple-expr.c: Likewise.
      	* gimple-fold.c: Likewise.
      	* gimple-pretty-print.c: Likewise.
      	* gimple.c: Likewise.
      	* gimplify.c: Likewise.
      	* hsa-common.c: Likewise.
      	* hsa-gen.c: Likewise.
      	* internal-fn.c: Likewise.
      	* ipa-chkp.c: Likewise.
      	* ipa-cp.c: Likewise.
      	* ipa-devirt.c: Likewise.
      	* ipa-fnsummary.c: Likewise.
      	* ipa-inline.c: Likewise.
      	* ipa-visibility.c: Likewise.
      	* ipa.c: Likewise.
      	* lto-cgraph.c: Likewise.
      	* omp-expand.c: Likewise.
      	* omp-general.c: Likewise.
      	* omp-low.c: Likewise.
      	* omp-offload.c: Likewise.
      	* omp-simd-clone.c: Likewise.
      	* opts-global.c: Likewise.
      	* passes.c: Likewise.
      	* predict.c: Likewise.
      	* sancov.c: Likewise.
      	* sanopt.c: Likewise.
      	* symtab.c: Likewise.
      	* toplev.c: Likewise.
      	* trans-mem.c: Likewise.
      	* tree-chkp.c: Likewise.
      	* tree-eh.c: Likewise.
      	* tree-into-ssa.c: Likewise.
      	* tree-object-size.c: Likewise.
      	* tree-parloops.c: Likewise.
      	* tree-profile.c: Likewise.
      	* tree-ssa-ccp.c: Likewise.
      	* tree-ssa-live.c: Likewise.
      	* tree-ssa-loop.c: Likewise.
      	* tree-ssa-sccvn.c: Likewise.
      	* tree-ssa-structalias.c: Likewise.
      	* tree-ssa.c: Likewise.
      	* tree-streamer-in.c: Likewise.
      	* tree-vectorizer.c: Likewise.
      	* tree-vrp.c: Likewise.
      	* tsan.c: Likewise.
      	* ubsan.c: Likewise.
      	* varasm.c: Likewise.
      	* varpool.c: Likewise.
      	* tree.c: Remove functions moved to attribs.[ch].
      	* tree.h: Likewise.
      	* config/aarch64/aarch64.c: Add attrs.h header file.
      	* config/alpha/alpha.c: Likewise.
      	* config/arc/arc.c: Likewise.
      	* config/arm/arm.c: Likewise.
      	* config/avr/avr.c: Likewise.
      	* config/bfin/bfin.c: Likewise.
      	* config/c6x/c6x.c: Likewise.
      	* config/cr16/cr16.c: Likewise.
      	* config/cris/cris.c: Likewise.
      	* config/darwin.c: Likewise.
      	* config/epiphany/epiphany.c: Likewise.
      	* config/fr30/fr30.c: Likewise.
      	* config/frv/frv.c: Likewise.
      	* config/ft32/ft32.c: Likewise.
      	* config/h8300/h8300.c: Likewise.
      	* config/i386/winnt.c: Likewise.
      	* config/ia64/ia64.c: Likewise.
      	* config/iq2000/iq2000.c: Likewise.
      	* config/lm32/lm32.c: Likewise.
      	* config/m32c/m32c.c: Likewise.
      	* config/m32r/m32r.c: Likewise.
      	* config/m68k/m68k.c: Likewise.
      	* config/mcore/mcore.c: Likewise.
      	* config/microblaze/microblaze.c: Likewise.
      	* config/mips/mips.c: Likewise.
      	* config/mmix/mmix.c: Likewise.
      	* config/mn10300/mn10300.c: Likewise.
      	* config/moxie/moxie.c: Likewise.
      	* config/msp430/msp430.c: Likewise.
      	* config/nds32/nds32-isr.c: Likewise.
      	* config/nds32/nds32.c: Likewise.
      	* config/nios2/nios2.c: Likewise.
      	* config/nvptx/nvptx.c: Likewise.
      	* config/pa/pa.c: Likewise.
      	* config/pdp11/pdp11.c: Likewise.
      	* config/powerpcspe/powerpcspe.c: Likewise.
      	* config/riscv/riscv.c: Likewise.
      	* config/rl78/rl78.c: Likewise.
      	* config/rx/rx.c: Likewise.
      	* config/s390/s390.c: Likewise.
      	* config/sh/sh.c: Likewise.
      	* config/sol2.c: Likewise.
      	* config/sparc/sparc.c: Likewise.
      	* config/spu/spu.c: Likewise.
      	* config/stormy16/stormy16.c: Likewise.
      	* config/tilegx/tilegx.c: Likewise.
      	* config/tilepro/tilepro.c: Likewise.
      	* config/v850/v850.c: Likewise.
      	* config/vax/vax.c: Likewise.
      	* config/visium/visium.c: Likewise.
      	* config/xtensa/xtensa.c: Likewise.
      2017-08-08  Martin Liska  <mliska@suse.cz>
      
      	* call.c: Include header files.
      	* cp-gimplify.c: Likewise.
      	* cp-ubsan.c: Likewise.
      	* cvt.c: Likewise.
      	* init.c: Likewise.
      	* search.c: Likewise.
      	* semantics.c: Likewise.
      	* typeck.c: Likewise.
      2017-08-08  Martin Liska  <mliska@suse.cz>
      
      	* lto-lang.c: Include header files.
      	* lto-symtab.c: Likewise.
      2017-08-08  Martin Liska  <mliska@suse.cz>
      
      	* c-convert.c: Include header files.
      	* c-typeck.c: Likewise.
      2017-08-08  Martin Liska  <mliska@suse.cz>
      
      	* c-ada-spec.c: Include header files.
      	* c-ubsan.c: Likewise.
      	* c-warn.c: Likewise.
      2017-08-08  Martin Liska  <mliska@suse.cz>
      
      	* trans-types.c: Include header files.
      
      From-SVN: r250946
      Martin Liska committed
  7. 02 Aug, 2017 1 commit
  8. 26 Jul, 2017 1 commit
  9. 21 Jul, 2017 1 commit
    • Remove TYPE_METHODS. · 5aaa8fb4
      	gcc/
      	Remove TYPE_METHODS.
      	* tree.h (TYPE_METHODS): Delete.
      	* dwarf2out.c (gen_member_die): Member fns are on TYPE_FIELDS.
      	* dbxout.c (dbxout_type_fields): Ignore FUNCTION_DECLs.
      	(dbxout_type_methods): Scan TYPE_FIELDS.
      	(dbxout_type): Don't check TYPE_METHODS here.
      	* function.c (use_register_for_decl): Always ignore register for
      	class types when not optimizing.
      	* ipa-devirt.c (odr_types_equivalent_p): Delete TYPE_METHODS scan.
      	* tree.c (free_lang_data_in_type): Stitch out member functions and
      	templates from TYPE_FIELDS.
      	(build_distinct_type_copy, verify_type_variant,
      	verify_type): Member fns are on TYPE_FIELDS.
      	* tree-dump.c (dequeue_and_dump): No TYPE_METHODS.
      	* tree-pretty-print.c (dump_generic_node): Likewise.
      
      	gcc/cp/
      	Remove TYPE_METHODS.
      	* class.c (maybe_warn_about_overly_private_class,
      	finish_struct_methods, one_inheriting_sig, count_fields,
      	add_fields_to_record_type, check_field_decls, check_methods,
      	clone_function_decl, set_method_tm_attributes,
      	finalize_literal_type_property, check_bases_and_members,
      	create_vtable_ptr, determine_key_method,
      	unreverse_member_declarations, finish_struct,
      	add_vcall_offset_vtbl_entries_1): Member fns are on TYPE_FIELDS.
      	* decl.c (fixup_anonymous_aggr): Likewise.
      	* decl2.c (reset_type_linkage_2): Likewise.
      	* method.c (after_nsdmi_defaulted_late_checks,
      	lazily_declare_fn): Likewise.
      	* optimize.c (maybe_thunk_body, maybe_clone_body): Likewise.
      	* pt.c (instantiate_class_template_1, tsubst_expr,
      	do_type_instantiation, instantiate_pending_templates): Likewise.
      	* search.c (lookup_field_1): Likewise.
      	* semantics.c (finish_member_declaration,
      	finish_omp_declare_simd_methods): Likewise.
      
      	gcc/c-family/
      	Remove TYPE_METHODS.
      	* c-ada-spec.c (is_tagged_type, has_nontrivial_methods,
      	dump_ada_template, print_ada_methods,
      	print_ada_declaration): Member fns are on TYPE_FIELDS.
      
      	gcc/objc/
      	Remove TYPE_METHODS.
      	* objc-runtime-shared-support.c (build_ivar_list_initializer):
      	Don't presume first item is a FIELD_DECL.
      
      	gcc/testsuite/
      	* g++.dg/ext/anon-struct6.C: Adjust diag.
      	* g++.old-deja/g++.other/anon4.C: Adjust diag.
      
      	libcc1/
      	Remove TYPE_METHODS.
      	* libcp1plugin.cc (plugin_build_decl): Member fns are on TYPE_FIELDS.
      
      From-SVN: r250413
      Nathan Sidwell committed
  10. 13 Jan, 2017 1 commit
    • Reload global options when strict aliasing is dropped (PR ipa/79043). · 77719b06
      2017-01-13  Martin Liska  <mliska@suse.cz>
      
      	PR ipa/79043
      	* function.c (set_cfun): Add new argument force.
      	* function.h (set_cfun): Likewise.
      	* ipa-inline-transform.c (inline_call): Use the function when
      	strict alising from is dropped for function we inline to.
      2017-01-13  Martin Liska  <mliska@suse.cz>
      
      	PR ipa/79043
      	* gcc.c-torture/execute/pr79043.c: New test.
      
      From-SVN: r244435
      Martin Liska committed
  11. 05 Jan, 2017 1 commit
    • Introduce RTL function reader · 51b86113
      This is the combination of these patches:
      - [8a/9] Introduce class function_reader (v8)
      - Add ASSERT_RTX_PTR_EQ
      - [8b/9] Add target-independent selftests of RTL function reader (v2)
      - [8c/9] Add aarch64-specific selftests for RTL function reader (v2)
      - [8d/9] Add x86_64-specific selftests for RTL function reader (v2)
      
      gcc/ChangeLog:
      	* Makefile.in (OBJS): Add read-md.o, read-rtl.o,
      	read-rtl-function.o, and selftest-rtl.o.
      	* config/aarch64/aarch64.c: Include selftest.h and
      	selftest-rtl.h.
      	(selftest::aarch64_test_loading_full_dump): New function.
      	(selftest::aarch64_run_selftests): New function.
      	(TARGET_RUN_TARGET_SELFTESTS): Wire it up to
      	selftest::aarch64_run_selftests.
      	* config/i386/i386.c
      	(selftest::ix86_test_loading_dump_fragment_1): New function.
      	(selftest::ix86_test_loading_call_insn): New function.
      	(selftest::ix86_test_loading_full_dump): New function.
      	(selftest::ix86_test_loading_unspec): New function.
      	(selftest::ix86_run_selftests): Call the new functions.
      	* emit-rtl.c (maybe_set_max_label_num): New function.
      	* emit-rtl.h (maybe_set_max_label_num): New decl.
      	* function.c (instantiate_decls): Guard call to
      	instantiate_decls_1 with if (DECL_INITIAL (fndecl)).
      	* function-tests.c (selftest::verify_three_block_rtl_cfg): Remove
      	"static".
      	* gensupport.c (gen_reader::gen_reader): Pass "false"
      	for new "compact" param of rtx_reader.
      	* print-rtl.c (rtx_writer::print_rtx_operand): Print "(nil)"
      	rather than an empty string for NULL strings.
      	* read-md.c: Potentially include config.h rather than bconfig.h.
      	Wrap include of errors.h with #ifdef GENERATOR_FILE.
      	(have_error): New global, copied from errors.c.
      	(md_reader::read_name): Rename to...
      	(md_reader::read_name_1): ...this, adding "out_loc" param,
      	and converting "missing name or number" to returning false, rather
      	than failing.
      	(md_reader::read_name): Reimplement in terms of read_name_1.
      	(md_reader::read_name_or_nil): New function.
      	(md_reader::read_string): Handle "(nil)" by returning NULL.
      	(md_reader::md_reader): Add new param "compact".
      	(md_reader::read_md_files): Wrap with #ifdef GENERATOR_FILE.
      	(md_reader::read_file): New method.
      	* read-md.h (md_reader::md_reader): Add new param "compact".
      	(md_reader::read_file): New method.
      	(md_reader::is_compact): New accessor.
      	(md_reader::read_name): Convert return type from void to
      	file_location.
      	(md_reader::read_name_or_nil): New decl.
      	(md_reader::read_name_1): New decl.
      	(md_reader::m_compact): New field.
      	(noop_reader::noop_reader): Pass "false" for new "compact" param
      	of rtx_reader.
      	(rtx_reader::rtx_reader): Add new "compact" param.
      	(rtx_reader::read_rtx_operand): Make virtual and convert return
      	type from void to rtx.
      	(rtx_reader::read_until): New decl.
      	(rtx_reader::handle_any_trailing_information): New virtual
      	function.
      	(rtx_reader::postprocess): New virtual function.
      	(rtx_reader::finalize_string): New virtual function.
      	(rtx_reader::m_in_call_function_usage): New field.
      	(rtx_reader::m_reuse_rtx_by_id): New field.
      	* read-rtl-function.c: New file.
      	* selftest-rtl.c (selftest::assert_rtx_ptr_eq_at): New function.
      	* selftest-rtl.h (ASSERT_RTX_PTR_EQ): New macro.
      	(selftest::verify_three_block_rtl_cfg): New decl.
      	* read-rtl-function.h: New file.
      	* read-rtl.c: Potentially include config.h rather than bconfig.h.
      	For host, include function.h, memmodel.h, and emit-rtl.h.
      	(one_time_initialization): New function.
      	(struct compact_insn_name): New struct.
      	(compact_insn_names): New array.
      	(find_code): Handle insn codes in compact dumps.
      	(apply_subst_iterator): Wrap with #ifdef GENERATOR_FILE.
      	(bind_subst_iter_and_attr): Likewise.
      	(add_condition_to_string): Likewise.
      	(add_condition_to_rtx): Likewise.
      	(apply_attribute_uses): Likewise.
      	(add_current_iterators): Likewise.
      	(apply_iterators): Likewise.
      	(initialize_iterators): Guard usage of apply_subst_iterator with
      	#ifdef GENERATOR_FILE.
      	(read_conditions): Wrap with #ifdef GENERATOR_FILE.
      	(md_reader::read_mapping): Likewise.
      	(add_define_attr_for_define_subst): Likewise.
      	(add_define_subst_attr): Likewise.
      	(read_subst_mapping): Likewise.
      	(check_code_iterator): Likewise.
      	(rtx_reader::read_rtx): Likewise.  Move one-time initialization
      	logic to...
      	(one_time_initialization): New function.
      	(rtx_reader::read_until): New method.
      	(read_flags): New function.
      	(parse_reg_note_name): New function.
      	(rtx_reader::read_rtx_code): Initialize "iterator" to NULL.
      	Handle reuse_rtx ids.
      	Wrap iterator lookup within #ifdef GENERATOR_FILE.
      	Add parsing support for RTL dumps, mirroring the special-cases in
      	print_rtx, by calling read_flags, reading REG_NOTE names, INSN_UID
      	values, and calling handle_any_trailing_information.
      	(rtx_reader::read_rtx_operand): Convert return type from void
      	to rtx, returning return_rtx.  Handle case 'e'.  Call
      	finalize_string on XSTR and XTMPL fields.
      	(rtx_reader::read_nested_rtx):  Handle dumps in which trailing
      	 "(nil)" values were omitted.  Call the postprocess vfunc on the
      	return_rtx.
      	(rtx_reader::rtx_reader): Add new "compact" param and pass to base
      	class ctor.  Initialize m_in_call_function_usage.  Call
      	one_time_initialization.
      	* rtl-tests.c (selftest::test_uncond_jump): Call
      	set_new_first_and_last_insn.
      	* rtl.h (read_rtx): Wrap decl with #ifdef GENERATOR_FILE.
      	* selftest-rtl.c: New file.
      	* selftest-rtl.h (class selftest::rtl_dump_test): New class.
      	(selftest::get_insn_by_uid): New decl.
      	* selftest-run-tests.c (selftest::run_tests): Call
      	read_rtl_function_c_tests.
      	* selftest.h  (selftest::read_rtl_function_c_tests): New decl.
      	* tree-dfa.c (ssa_default_def): Return NULL_TREE for rtl function
      	dumps.
      
      gcc/testsuite/ChangeLog:
      	* selftests/asr_div1.rtl: New file.
      	* selftests/aarch64: New subdirectory.
      	* selftests/aarch64/times-two.rtl: New file.
      	* selftests/bb-index.rtl: New file.
      	* selftests/cfg-test.rtl: New file.
      	* selftests/const-int.rtl: New file.
      	* selftests/example-labels.rtl: New file.
      	* selftests/insn-with-mode.rtl: New file.
      	* selftests/jump-to-label-ref.rtl: New file.
      	* selftests/jump-to-return.rtl: New file.
      	* selftests/jump-to-simple-return.rtl: New file.
      	* selftests/mem.rtl: New file.
      	* selftests/note-insn-deleted.rtl: New file.
      	* selftests/note_insn_basic_block.rtl: New file.
      	* selftests/simple-cse.rtl: New file.
      	* selftests/symbol-ref.rtl: New file.
      	* selftests/x86_64: New subdirectory.
      	* selftests/x86_64/call-insn.rtl: New file.
      	* selftests/x86_64/copy-hard-reg-into-frame.rtl: New file.
      	* selftests/x86_64/times-two.rtl: New file.
      	* selftests/x86_64/unspec.rtl: New file.
      
      From-SVN: r244110
      David Malcolm committed
  12. 01 Jan, 2017 1 commit
  13. 29 Nov, 2016 1 commit
  14. 25 Nov, 2016 1 commit
    • Tweak LRA handling of shared spill slots · 83d0488b
      The previous code processed the users of a stack slot in order of
      decreasing size and allocated the slot based on the first user.
      This seems a bit dangerous, since the ordering is based on the
      mode of the biggest reference while the allocation is based also
      on the size of the register itself (which I think could be larger).
      
      That scheme doesn't scale well to polynomial sizes, since there's
      no guarantee that the order of the sizes is known at compile time.
      This patch instead records an upper bound on the size required
      by all users of a slot.  It also records the maximum alignment
      requirement.
      
      gcc/
      2016-11-15  Richard Sandiford  <richard.sandiford@arm.com>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      	* function.h (spill_slot_alignment): Declare.
      	* function.c (spill_slot_alignment): New function.
      	* lra-spills.c (slot): Add align and size fields.
      	(assign_mem_slot): Use them in the call to assign_stack_local.
      	(add_pseudo_to_slot): Update the fields.
      	(assign_stack_slot_num_and_sort_pseudos): Initialise the fields.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r242863
      Richard Sandiford committed
  15. 21 Nov, 2016 1 commit
  16. 18 Nov, 2016 1 commit
    • Add SET_DECL_MODE · 899ca90e
      This may no longer be necessary with the current version
      of the SVE patches, but it does at least make things consistent
      with the TYPE_MODE/SET_TYPE_MODE split.
      
      gcc/ada/
      2016-11-16  Richard Sandiford  <richard.sandiford@arm.com>
       	    Alan Hayward  <alan.hayward@arm.com>
       	    David Sherwood  <david.sherwood@arm.com>
      
      	* gcc-interface/utils.c (create_label_decl): Use SET_DECL_MODE.
      
      gcc/c/
      2016-11-16  Richard Sandiford  <richard.sandiford@arm.com>
       	    Alan Hayward  <alan.hayward@arm.com>
       	    David Sherwood  <david.sherwood@arm.com>
      
      	* c-decl.c (merge_decls): Use SET_DECL_MODE.
      	(make_label, finish_struct): Likewise.
      
      gcc/cp/
      2016-11-16  Richard Sandiford  <richard.sandiford@arm.com>
       	    Alan Hayward  <alan.hayward@arm.com>
       	    David Sherwood  <david.sherwood@arm.com>
      
      	* class.c (finish_struct_bits): Use SET_DECL_MODE.
      	(build_base_field_1, layout_class_type, finish_struct_1): Likewise.
      	* decl.c (make_label_decl): Likewise.
      	* pt.c (tsubst_decl): Likewise.
      
      gcc/fortran/
      2016-11-16  Richard Sandiford  <richard.sandiford@arm.com>
       	    Alan Hayward  <alan.hayward@arm.com>
       	    David Sherwood  <david.sherwood@arm.com>
      
      	* trans-common.c (build_common_decl): Use SET_DECL_MODE.
      	* trans-decl.c (gfc_build_label_decl): Likewise.
      	* trans-types.c (gfc_get_array_descr_info): Likewise.
      
      gcc/lto/
      2016-11-16  Richard Sandiford  <richard.sandiford@arm.com>
       	    Alan Hayward  <alan.hayward@arm.com>
       	    David Sherwood  <david.sherwood@arm.com>
      
      	* lto.c (offload_handle_link_vars): Use SET_DECL_MODE.
      
      gcc/
      2016-11-16  Richard Sandiford  <richard.sandiford@arm.com>
       	    Alan Hayward  <alan.hayward@arm.com>
       	    David Sherwood  <david.sherwood@arm.com>
      
      	* tree.h (SET_DECL_MODE): New macro.
      	* cfgexpand.c (avoid_deep_ter_for_debug): Use SET_DECL_MODE.
      	(expand_gimple_basic_block): Likewise.
      	* function.c (split_complex_args): Likeise.
      	* ipa-prop.c (ipa_modify_call_arguments): Likewise.
      	* omp-simd-clone.c (ipa_simd_modify_stmt_ops): Likewise.
      	* stor-layout.c (layout_decl, relayout_decl): Likewise.
      	(finish_bitfield_representative): Likewise.
      	* tree.c (make_node_stat): Likewise.
      	* tree-inline.c (remap_ssa_name): Likewise.
      	(tree_function_versioning): Likewise.
      	* tree-into-ssa.c (rewrite_debug_stmt_uses): Likewise.
      	* tree-sra.c (sra_ipa_reset_debug_stmts): Likewise.
      	* tree-ssa-ccp.c (optimize_atomic_bit_test_and): Likewise.
      	* tree-ssa-loop-ivopts.c (remove_unused_ivs): Likewise.
      	* tree-ssa.c (insert_debug_temp_for_var_def): Likewise.
      	* tree-streamer-in.c (unpack_ts_decl_common_value_fields): Likewise.
      	* varasm.c (make_debug_expr_from_rtl): Likewise.
      
      libcc1/
      2016-11-16  Richard Sandiford  <richard.sandiford@arm.com>
       	    Alan Hayward  <alan.hayward@arm.com>
       	    David Sherwood  <david.sherwood@arm.com>
      
      	* plugin.cc (plugin_build_add_field): Use SET_DECL_MODE.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r242585
      Richard Sandiford committed
  17. 28 Oct, 2016 1 commit
    • sched: Do not mix prologue and epilogue insns · 64f6e1e1
      This patch makes scheduling not reorder prologue insns relative to
      epilogue insns and vice versa.  This fixes PR78029.
      
      The problem in that PR:
      We have two insns, in this order:
      
      (insn/f 300 299 267 8 (set (reg:DI 65 lr)
              (reg:DI 0 0)) 579 {*movdi_internal64}
           (expr_list:REG_DEAD (reg:DI 0 0)
              (expr_list:REG_CFA_RESTORE (reg:DI 65 lr)
                  (nil))))
      ...
      (insn/f 310 268 134 8 (set (mem/c:DI (plus:DI (reg/f:DI 1 1)
                      (const_int 144 [0x90])) [6  S8 A8])
              (reg:DI 0 0)) 579 {*movdi_internal64}
           (expr_list:REG_DEAD (reg:DI 0 0)
              (expr_list:REG_CFA_OFFSET (set (mem/c:DI (plus:DI (reg/f:DI 1 1)
                              (const_int 144 [0x90])) [6  S8 A8])
                      (reg:DI 65 lr))
                  (nil))))
      
      and sched swaps them (when compiling for power6, it tries to put memory
      stores together, so insn 310 is moved up past 300 to go together with
      some other store).  But the REG_CFA_RESTORE and REG_CFA_OFFSET cannot be
      swapped (they both say where the orig value of LR now lives).
      
      
      	PR rtl-optimization/78029
      	* function.c (prologue_contains, epilogue_contains): New functions.
      	(record_prologue_seq, record_epilogue_seq): New functions.
      	* function.h (prologue_contains, epilogue_contains,
      	record_prologue_seq, record_epilogue_seq): New declarations.
      	* sched-deps.c (sched_analyze_insn): Make dependencies to prevent
      	mixing prologue and epilogue insns.
      	(init_deps): Initialize the new fields in struct deps_desc.
      	* sched-int.h (struct deps_desc): New fields last_prologue,
      	last_epilogue, and last_logue_was_epilogue.
      	* shrink-wrap.c (emit_common_heads_for_components): Record all
      	emitted prologue and epilogue insns.
      	(emit_common_tails_for_components): Ditto.
      	(insert_prologue_epilogue_for_components): Ditto.
      
      From-SVN: r241650
      Segher Boessenkool committed
  18. 13 Oct, 2016 3 commits
    • Create the *logue in the same order as before (PR77962) · 7dca85bf
      PR77962 shows Go failing on 32-bit x86.  This happens because the i386
      port requires the split stack prologue to be created before the normal
      prologue, and my previous patch changed it to be the other way around.
      
      This patch changes it back.  Things will be exactly as before for targets
      that do not do shrink-wrapping for separate components.  For targets
      that *do* support it, all three prologue/epilogue creation functions
      will now be called twice for functions that have anything wrapped
      separately (instead of just the prologue created twice).
      
      
      	PR bootstrap/77962
      	* function.c (thread_prologue_and_epilogue_insns): Call all
      	make_*logue_seq in the same order as traditional.  Call them
      	all a second time if shrink_wrapped-separate.
      
      From-SVN: r241135
      Segher Boessenkool committed
    • Move MEMMODEL_* from coretypes.h to memmodel.h · 4d0cdd0c
      2016-10-13  Thomas Preud'homme  <thomas.preudhomme@arm.com>
      
          gcc/
          * coretypes.h: Move MEMMODEL_* macros and enum memmodel definition
          into ...
          * memmodel.h: This file.
          * alias.c, asan.c, auto-inc-dec.c, bb-reorder.c, bt-load.c,
            caller-save.c, calls.c, ccmp.c, cfgbuild.c, cfgcleanup.c,
            cfgexpand.c, cfgloopanal.c, cfgrtl.c, cilk-common.c, combine.c,
            combine-stack-adj.c, common/config/aarch64/aarch64-common.c,
            common/config/arm/arm-common.c, common/config/bfin/bfin-common.c,
            common/config/c6x/c6x-common.c, common/config/i386/i386-common.c,
            common/config/ia64/ia64-common.c, common/config/nvptx/nvptx-common.c,
            compare-elim.c, config/aarch64/aarch64-builtins.c,
            config/aarch64/aarch64-c.c, config/aarch64/cortex-a57-fma-steering.c,
            config/arc/arc.c, config/arc/arc-c.c, config/arm/arm-builtins.c,
            config/arm/arm-c.c, config/avr/avr.c, config/avr/avr-c.c,
            config/avr/avr-log.c, config/bfin/bfin.c, config/c6x/c6x.c,
            config/cr16/cr16.c, config/cris/cris.c, config/darwin-c.c,
            config/darwin.c, config/epiphany/epiphany.c,
            config/epiphany/mode-switch-use.c,
            config/epiphany/resolve-sw-modes.c, config/fr30/fr30.c,
            config/frv/frv.c, config/ft32/ft32.c, config/h8300/h8300.c,
            config/i386/i386-c.c, config/i386/winnt.c, config/iq2000/iq2000.c,
            config/lm32/lm32.c, config/m32c/m32c.c, config/m32r/m32r.c,
            config/m68k/m68k.c, config/mcore/mcore.c,
            config/microblaze/microblaze.c, config/mmix/mmix.c,
            config/mn10300/mn10300.c, config/moxie/moxie.c,
            config/msp430/msp430.c, config/nds32/nds32-cost.c,
            config/nds32/nds32-intrinsic.c, config/nds32/nds32-md-auxiliary.c,
            config/nds32/nds32-memory-manipulation.c,
            config/nds32/nds32-predicates.c, config/nds32/nds32.c,
            config/nios2/nios2.c, config/nvptx/nvptx.c, config/pa/pa.c,
            config/pdp11/pdp11.c, config/rl78/rl78.c, config/rs6000/rs6000-c.c,
            config/rx/rx.c, config/s390/s390-c.c, config/s390/s390.c,
            config/sh/sh.c, config/sh/sh-c.c, config/sh/sh-mem.cc,
            config/sh/sh_treg_combine.cc, config/sol2.c, config/spu/spu.c,
            config/stormy16/stormy16.c, config/tilegx/tilegx.c,
            config/tilepro/tilepro.c, config/v850/v850.c, config/vax/vax.c,
            config/visium/visium.c, config/vms/vms-c.c, config/xtensa/xtensa.c,
            coverage.c, cppbuiltin.c, cprop.c, cse.c, cselib.c, dbxout.c, dce.c,
            df-core.c, df-problems.c, df-scan.c, dojump.c, dse.c, dwarf2asm.c,
            dwarf2cfi.c, dwarf2out.c, emit-rtl.c, except.c, explow.c, expmed.c,
            expr.c, final.c, fold-const.c, function.c, fwprop.c, gcse.c,
            ggc-page.c, haifa-sched.c, hsa-brig.c, hsa-gen.c, hw-doloop.c,
            ifcvt.c, init-regs.c, internal-fn.c, ira-build.c, ira-color.c,
            ira-conflicts.c, ira-costs.c, ira-emit.c, ira-lives.c, ira.c, jump.c,
            loop-doloop.c, loop-invariant.c, loop-iv.c, loop-unroll.c,
            lower-subreg.c, lra.c, lra-assigns.c, lra-coalesce.c,
            lra-constraints.c, lra-eliminations.c, lra-lives.c, lra-remat.c,
            lra-spills.c, mode-switching.c, modulo-sched.c, omp-low.c, passes.c,
            postreload-gcse.c, postreload.c, predict.c, print-rtl-function.c,
            recog.c, ree.c, reg-stack.c, regcprop.c, reginfo.c, regrename.c,
            reload.c, reload1.c, reorg.c, resource.c, rtl-chkp.c, rtl-tests.c,
            rtlanal.c, rtlhooks.c, sched-deps.c, sched-rgn.c, sdbout.c,
            sel-sched-ir.c, sel-sched.c, shrink-wrap.c, simplify-rtx.c,
            stack-ptr-mod.c, stmt.c, stor-layout.c, target-globals.c,
            targhooks.c, toplev.c, tree-nested.c, tree-outof-ssa.c,
            tree-profile.c, tree-ssa-coalesce.c, tree-ssa-ifcombine.c,
            tree-ssa-loop-ivopts.c, tree-ssa-loop.c, tree-ssa-reassoc.c,
            tree-ssa-sccvn.c, tree-vect-data-refs.c, ubsan.c, valtrack.c,
            var-tracking.c, varasm.c: Include memmodel.h.
          * genattrtab.c (write_header): Include memmodel.h in generated file.
          * genautomata.c (main): Likewise.
          * gengtype.c (open_base_files): Likewise.
          * genopinit.c (main): Likewise.
          * genconditions.c (write_header): Include memmodel.h earlier in
          generated file.
          * genemit.c (main): Likewise.
          * genoutput.c (output_prologue): Likewise.
          * genpeep.c (main): Likewise.
          * genpreds.c (write_insn_preds_c): Likewise.
          * genrecog.c (write_header): Likewise.
          * Makefile.in (PLUGIN_HEADERS): Include memmodel.h
      
          gcc/ada/
          * gcc-interface/utils2.c: Include memmodel.h.
      
          gcc/c-family/
          * c-cppbuiltin.c: Include memmodel.h.
          * c-opts.c: Likewise.
          * c-pragma.c: Likewise.
          * c-warn.c: Likewise.
      
          gcc/c/
          * c-typeck.c: Include memmodel.h.
      
          gcc/cp/
          * decl2.c: Include memmodel.h.
          * rtti.c: Likewise.
      
          gcc/fortran/
          * trans-intrinsic.c: Include memmodel.h.
      
          gcc/go/
          * go-backend.c: Include memmodel.h.
      
          libgcc/
          * libgcov-profiler.c: Replace MEMMODEL_* macros by their __ATOMIC_*
          equivalent.
          * config/tilepro/atomic.c: Likewise and stop casting model to
          enum memmodel.
      
      From-SVN: r241121
      Thomas Preud'homme committed
    • re PR target/77957 (Undefined .LCTOC0 with -fstack-protector-strong -mminimal-toc -O0 on ppc64) · 1202f33e
      	PR target/77957
      	* hooks.h (hook_tree_void_null): Declare.
      	* hooks.c (hook_tree_void_null): New function.
      	* langhooks.c (lhd_return_null_tree_v): Remove.
      	* langhooks-def.h (lhd_return_null_tree_v): Remove.
      	* cfgexpand.c (stack_protect_prologue): If guard_decl is NULL,
      	set y to const0_rtx.
      	* function.c (stack_protect_epilogue): Likewise.
      	* config/tilepro/tilepro.c (TARGET_STACK_PROTECT_GUARD): Redefine
      	if TARGET_THREAD_SSP_OFFSET is defined.
      	* config/s390/s390.c (TARGET_STACK_PROTECT_GUARD): Likewise.
      	* config/sparc/sparc.c (TARGET_STACK_PROTECT_GUARD): Likewise.
      	* config/tilegx/tilegx.c (TARGET_STACK_PROTECT_GUARD): Likewise.
      	* config/rs6000/rs6000.c (TARGET_STACK_PROTECT_GUARD): Likewise.
      	* config/i386/i386.c (TARGET_STACK_PROTECT_GUARD): Likewise.
      	(ix86_stack_protect_guard): New function.
      c/
      	* c-objc-common.h (LANG_HOOKS_GETDECLS): Use hook_tree_void_null
      	instead of lhd_return_null_tree_v.
      ada/
      	* gcc-interface/misc.c (LANG_HOOKS_GETDECLS): Use hook_tree_void_null
      	instead of lhd_return_null_tree_v.
      
      From-SVN: r241087
      Jakub Jelinek committed
  19. 12 Oct, 2016 1 commit
    • shrink-wrap: Shrink-wrapping for separate components · c997869f
      This is the main substance of this patch series.
      
      Instead of doing all of the prologue and epilogue in one spot, it often
      is better to do components of it at different places, so that they are
      executed less frequently.
      
      What exactly is a component is completely up to the target; this code
      treats it all abstractly, and uses hooks for the target to handle the
      more concrete things.  Commonly there is one component for each callee-
      saved register, for example.
      
      Components can be executed more than once per function execution.  This
      pass makes sure that a component's epilogue is not called more often
      than the corresponding prologue has been, at any point in time; that the
      prologue is called more often, wherever the prologue's effect is needed;
      and that the epilogue is called as often as the prologue has been, when
      the function exits.  It does this by first deciding which blocks need
      which components active, and then placing prologue and epilogue
      components to make that exactly true.
      
      Deciding what blocks should run with a certain component active so that
      the total cost of executing the prologues (and epilogues) is optimal, is
      not a computationally feasible problem.  Instead, for each basic block,
      we estimate the cost of putting a prologue right before the block, and
      if that is cheaper than the total cost of putting prologues optimally
      (according to the estimated cost) in the dominator subtrees strictly
      dominated by this first block, place it at the first block instead.
      This simple procedure places the components optimally for any dominator
      sub tree where the root node's cost does not depend on anything outside
      its subtree.
      
      The cost is the execution frequency of all edges into the block coming
      from blocks that do not have this component active.  The estimated cost
      is the execution frequency of the block, minus the execution frequency
      of any backedges (which by definition are coming from subtrees, so if
      the "head" block gets a prologue, the source block of any backedge has
      that component active as well).
      
      Currently, the epilogues are placed as late as possible, given the
      constraints.  This does not matter for execution cost, but we could
      save a little bit of code size by placing the epilogues in a smarter
      way.  This is a possible future optimisation.
      
      Now all that is left is inserting prologues and epilogues on all edges
      that jump into resp. out of the "active" set of blocks.  Often we need
      to insert some components' prologues (or epilogues) on all edges into
      (or out of) a block.  In theory cross-jumping can unify all such, but
      in practice that often fails; besides, that is a lot of work.  So in
      this case we insert the prologue and epilogue components at the "head"
      or "tail" of a block, instead.
      
      As a final optimisation, if a block needs a prologue and its immediate
      dominator has the block as a post-dominator, that immediate dominator
      gets the prologue as well.
      
      
      	* function.c (thread_prologue_and_epilogue_insns): Call
      	try_shrink_wrapping_separate.  Compute the prologue_seq afterwards,
      	if it has possibly changed.  Compute the split_prologue_seq and
      	epilogue_seq later, too.
      	* shrink-wrap.c: #include cfgbuild.h and insn-config.h.
      	(dump_components): New function.
      	(struct sw): New struct.
      	(SW): New function.
      	(init_separate_shrink_wrap): New function.
      	(fini_separate_shrink_wrap): New function.
      	(place_prologue_for_one_component): New function.
      	(spread_components): New function.
      	(disqualify_problematic_components): New function.
      	(emit_common_heads_for_components): New function.
      	(emit_common_tails_for_components): New function.
      	(insert_prologue_epilogue_for_components): New function.
      	(try_shrink_wrapping_separate): New function.
      	* shrink-wrap.h: Declare try_shrink_wrapping_separate.
      
      From-SVN: r241063
      Segher Boessenkool committed
  20. 09 Oct, 2016 1 commit
    • tree-ssa.c (target_for_debug_bind, [...]): Use VAR_P and/or VAR_OR_FUNCTION_DECL_P macros. · 8813a647
      	* tree-ssa.c (target_for_debug_bind, verify_phi_args,
      	ssa_undefined_value_p, maybe_optimize_var): Use VAR_P and/or
      	VAR_OR_FUNCTION_DECL_P macros.
      	* tree-chkp.c (chkp_register_var_initializer, chkp_make_static_bounds,
      	chkp_get_bounds_for_decl_addr, chkp_parse_array_and_component_ref,
      	chkp_find_bounds_1): Likewise.
      	* ipa-polymorphic-call.c (decl_maybe_in_construction_p): Likewise.
      	* hsa-gen.c (get_symbol_for_decl): Likewise.
      	* cgraphunit.c (check_global_declaration, analyze_functions,
      	handle_alias_pairs, thunk_adjust, cgraph_node::expand_thunk):
      	Likewise.
      	* gimple-fold.c (can_refer_decl_in_current_unit_p,
      	canonicalize_constructor_val, gimple_get_virt_method_for_vtable):
      	Likewise.
      	* tree.c (set_decl_section_name, copy_node_stat,
      	need_assembler_name_p, free_lang_data_in_decl, find_decls_types_r,
      	merge_dllimport_decl_attributes, handle_dll_attribute,
      	decl_init_priority_insert, auto_var_in_fn_p, array_at_struct_end_p,
      	verify_type): Likewise.
      	* gimple-ssa-isolate-paths.c (find_implicit_erroneous_behavior,
      	find_explicit_erroneous_behavior): Likewise.
      	* sdbout.c (sdbout_toplevel_data, sdbout_late_global_decl): Likewise.
      	* ipa.c (process_references): Likewise.
      	* tree-chkp-opt.c (chkp_get_check_result): Likewise.
      	* varasm.c (get_block_for_decl, use_blocks_for_decl_p, make_decl_rtl,
      	notice_global_symbol, assemble_variable, mark_decl_referenced,
      	build_constant_desc, output_constant_def_contents, do_assemble_alias,
      	make_decl_one_only, default_section_type_flags,
      	categorize_decl_for_section, default_encode_section_info): Likewise.
      	* trans-mem.c (requires_barrier): Likewise.
      	* gimple-expr.c (mark_addressable): Likewise.
      	* cfgexpand.c (add_scope_conflicts_1, expand_one_var,
      	expand_used_vars_for_block, clear_tree_used, stack_protect_decl_p,
      	expand_debug_expr): Likewise.
      	* tree-dump.c (dequeue_and_dump): Likewise.
      	* ubsan.c (instrument_bool_enum_load): Likewise.
      	* tree-pretty-print.c (print_declaration): Likewise.
      	* simplify-rtx.c (delegitimize_mem_from_attrs): Likewise.
      	* tree-ssa-uninit.c (warn_uninitialized_vars): Likewise.
      	* asan.c (asan_protect_global, instrument_derefs): Likewise.
      	* tree-into-ssa.c (rewrite_stmt, maybe_register_def,
      	pass_build_ssa::execute): Likewise.
      	* var-tracking.c (var_debug_decl, track_expr_p): Likewise.
      	* tree-ssa-loop-ivopts.c (force_expr_to_var_cost, split_address_cost):
      	Likewise.
      	* ipa-split.c (test_nonssa_use, consider_split, mark_nonssa_use):
      	Likewise.
      	* tree-inline.c (insert_debug_decl_map, remap_ssa_name,
      	can_be_nonlocal, remap_decls, copy_debug_stmt,
      	initialize_inlined_parameters, add_local_variables,
      	reset_debug_binding, replace_locals_op): Likewise.
      	* dse.c (can_escape): Likewise.
      	* ipa-devirt.c (compare_virtual_tables, referenced_from_vtable_p):
      	Likewise.
      	* tree-diagnostic.c (default_tree_printer): Likewise.
      	* tree-streamer-in.c (unpack_ts_decl_common_value_fields,
      	unpack_ts_decl_with_vis_value_fields,
      	lto_input_ts_decl_common_tree_pointers): Likewise.
      	* builtins.c (builtin_save_expr, fold_builtin_expect,
      	readonly_data_expr): Likewise.
      	* tree-ssa-structalias.c (new_var_info, get_constraint_for_ssa_var,
      	create_variable_info_for, set_uids_in_ptset, visit_loadstore):
      	Likewise.
      	* gimple-streamer-out.c (output_gimple_stmt): Likewise.
      	* gimplify.c (force_constant_size, gimplify_bind_expr,
      	gimplify_decl_expr, gimplify_var_or_parm_decl,
      	gimplify_compound_lval, gimplify_init_constructor,
      	gimplify_modify_expr, gimplify_asm_expr, gimplify_oacc_declare,
      	gimplify_type_sizes): Likewise.
      	* cgraphbuild.c (record_reference, record_type_list, mark_address,
      	mark_load, mark_store, pass_build_cgraph_edges::execute): Likewise.
      	* tree-ssa-live.c (mark_all_vars_used_1, remove_unused_scope_block_p,
      	remove_unused_locals): Likewise.
      	* tree-ssa-alias.c (ptr_deref_may_alias_decl_p, ptrs_compare_unequal,
      	ref_maybe_used_by_call_p_1, call_may_clobber_ref_p_1): Likewise.
      	* function.c (instantiate_expr, instantiate_decls_1,
      	setjmp_vars_warning, add_local_decl): Likewise.
      	* alias.c (ao_ref_from_mem, get_alias_set, compare_base_symbol_refs):
      	Likewise.
      	* tree-stdarg.c (find_va_list_reference, va_list_counter_struct_op,
      	va_list_ptr_read, va_list_ptr_write, check_all_va_list_escapes,
      	optimize_va_list_gpr_fpr_size): Likewise.
      	* tree-nrv.c (pass_nrv::execute): Likewise.
      	* tsan.c (instrument_expr): Likewise.
      	* tree-ssa-dce.c (remove_dead_stmt): Likewise.
      	* vtable-verify.c (verify_bb_vtables): Likewise.
      	* tree-dfa.c (ssa_default_def, set_ssa_default_def,
      	get_ref_base_and_extent): Likewise.
      	* toplev.c (wrapup_global_declaration_1, wrapup_global_declaration_2):
      	Likewise.
      	* tree-sra.c (static bool constant_decl_p, find_var_candidates,
      	analyze_all_variable_accesses): Likewise.
      	* tree-nested.c (get_nonlocal_debug_decl,
      	convert_nonlocal_omp_clauses, note_nonlocal_vla_type,
      	note_nonlocal_block_vlas, convert_nonlocal_reference_stmt,
      	get_local_debug_decl, convert_local_omp_clauses,
      	convert_local_reference_stmt, nesting_copy_decl, remap_vla_decls):
      	Likewise.
      	* tree-vect-data-refs.c (vect_can_force_dr_alignment_p): Likewise.
      	* stmt.c (decl_overlaps_hard_reg_set_p): Likewise.
      	* dbxout.c (dbxout_late_global_decl, dbxout_type_fields,
      	dbxout_symbol, dbxout_common_check): Likewise.
      	* expr.c (expand_assignment, expand_expr_real_2, expand_expr_real_1,
      	string_constant): Likewise.
      	* hsa.c (hsa_get_declaration_name): Likewise.
      	* passes.c (rest_of_decl_compilation): Likewise.
      	* tree-ssanames.c (make_ssa_name_fn): Likewise.
      	* tree-streamer-out.c (pack_ts_decl_common_value_fields,
      	pack_ts_decl_with_vis_value_fields,
      	write_ts_decl_common_tree_pointers): Likewise.
      	* stor-layout.c (place_field): Likewise.
      	* symtab.c (symtab_node::maybe_create_reference,
      	symtab_node::verify_base, symtab_node::make_decl_local,
      	symtab_node::copy_visibility_from,
      	symtab_node::can_increase_alignment_p): Likewise.
      	* dwarf2out.c (add_var_loc_to_decl, tls_mem_loc_descriptor,
      	decl_by_reference_p, reference_to_unused, rtl_for_decl_location,
      	fortran_common, add_location_or_const_value_attribute,
      	add_scalar_info, add_linkage_name, set_block_abstract_flags,
      	local_function_static, gen_variable_die, dwarf2out_late_global_decl,
      	optimize_one_addr_into_implicit_ptr,
      	optimize_location_into_implicit_ptr): Likewise.
      	* gimple-low.c (record_vars_into): Likewise.
      	* ipa-visibility.c (update_vtable_references): Likewise.
      	* tree-ssa-address.c (fixed_address_object_p, copy_ref_info):
      	Likewise.
      	* lto-streamer-out.c (tree_is_indexable, get_symbol_initial_value,
      	DFS::DFS_write_tree_body, write_symbol): Likewise.
      	* langhooks.c (lhd_warn_unused_global_decl,
      	lhd_set_decl_assembler_name): Likewise.
      	* attribs.c (decl_attributes): Likewise.
      	* except.c (output_ttype): Likewise.
      	* varpool.c (varpool_node::get_create, ctor_for_folding,
      	varpool_node::assemble_decl, varpool_node::create_alias): Likewise.
      	* fold-const.c (fold_unary_loc): Likewise.
      	* ipa-prop.c (ipa_compute_jump_functions_for_edge,
      	ipa_find_agg_cst_from_init): Likewise.
      	* omp-low.c (expand_omp_regimplify_p, expand_omp_taskreg,
      	expand_omp_target, lower_omp_regimplify_p,
      	grid_reg_assignment_to_local_var_p, grid_remap_prebody_decls,
      	find_link_var_op): Likewise.
      	* tree-chrec.c (chrec_contains_symbols): Likewise.
      	* tree-cfg.c (verify_address, verify_expr, verify_expr_location_1,
      	gimple_duplicate_bb, move_stmt_op, replace_block_vars_by_duplicates,
      	execute_fixup_cfg): Likewise.
      
      From-SVN: r240900
      Jakub Jelinek committed
  21. 16 Sep, 2016 1 commit
    • Add inline functions for various bitwise operations. · 146ec50f
      	* hwint.h (least_bit_hwi, pow2_or_zerop, pow2p_hwi, ctz_or_zero):
      	New.
      	* hwint.c (exact_log2): Use pow2p_hwi.
      	(ctz_hwi, ffs_hwi): Use least_bit_hwi.
      	* alias.c (memrefs_conflict_p): Use pow2_or_zerop.
      	* builtins.c (get_object_alignment_2, get_object_alignment)
      	(get_pointer_alignment, fold_builtin_atomic_always_lock_free): Use
      	least_bit_hwi.
      	* calls.c (compute_argument_addresses, store_one_arg): Use
      	least_bit_hwi.
      	* cfgexpand.c (expand_one_stack_var_at): Use least_bit_hwi.
      	* combine.c (force_to_mode): Use least_bit_hwi.
      	* emit-rtl.c (set_mem_attributes_minus_bitpos, adjust_address_1):
      	Use least_bit_hwi.
      	* expmed.c (synth_mult, expand_divmod): Use ctz_or_zero, ctz_hwi.
      	(init_expmed_one_conv): Use pow2p_hwi.
      	* fold-const.c (round_up_loc, round_down_loc): Use pow2_or_zerop.
      	(fold_binary_loc): Use pow2p_hwi.
      	* function.c (assign_parm_find_stack_rtl): Use least_bit_hwi.
      	* gimple-fold.c (gimple_fold_builtin_memory_op): Use pow2p_hwi.
      	* gimple-ssa-strength-reduction.c (replace_ref): Use least_bit_hwi.
      	* hsa-gen.c (gen_hsa_addr_with_align, hsa_bitmemref_alignment):
      	Use least_bit_hwi.
      	* ipa-cp.c (ipcp_alignment_lattice::meet_with_1): Use least_bit_hwi.
      	* ipa-prop.c (ipa_modify_call_arguments): Use least_bit_hwi.
      	* omp-low.c (oacc_loop_fixed_partitions)
      	(oacc_loop_auto_partitions): Use least_bit_hwi.
      	* rtlanal.c (nonzero_bits1): Use ctz_or_zero.
      	* stor-layout.c (place_field): Use least_bit_hwi.
      	* tree-pretty-print.c (dump_generic_node): Use pow2p_hwi.
      	* tree-sra.c (build_ref_for_offset): Use least_bit_hwi.
      	* tree-ssa-ccp.c (ccp_finalize): Use least_bit_hwi.
      	* tree-ssa-math-opts.c (bswap_replace): Use least_bit_hwi.
      	* tree-ssa-strlen.c (handle_builtin_memcmp): Use pow2p_hwi.
      	* tree-vect-data-refs.c (vect_analyze_group_access_1)
      	(vect_grouped_store_supported, vect_grouped_load_supported)
      	(vect_permute_load_chain, vect_shift_permute_load_chain)
      	(vect_transform_grouped_load): Use pow2p_hwi.
      	* tree-vect-generic.c (expand_vector_divmod): Use ctz_or_zero.
      	* tree-vect-patterns.c (vect_recog_divmod_pattern): Use ctz_or_zero.
      	* tree-vect-stmts.c (vectorizable_mask_load_store): Use
      	least_bit_hwi.
      	* tsan.c (instrument_expr): Use least_bit_hwi.
      	* var-tracking.c (negative_power_of_two_p): Use pow2_or_zerop.
      
      From-SVN: r240194
      Jason Merrill committed
  22. 28 Aug, 2016 1 commit
    • make stack_slot_list a vec<rtx> · 8c39f8ae
      gcc/ChangeLog:
      
      2016-08-27  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
      
      	* emit-rtl.h (struct rtl_data): Make stack_slot_list a vector.
      	* emit-rtl.c (unshare_all_rtl_1): Adjust.
      	(unshare_all_rtl_again): Likewise.
      	* function.c (assign_stack_local_1): Likewise.
      	(assign_stack_temp_for_type): Likewise.
      
      From-SVN: r239801
      Trevor Saunders committed
  23. 26 Jul, 2016 1 commit
    • use auto_sbitmap in various places · 7ba9e72d
      gcc/ChangeLog:
      
      2016-07-26  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
      
      	* bt-load.c (compute_out): Use auto_sbitmap class.
      	(link_btr_uses): Likewise.
      	* cfganal.c (mark_dfs_back_edges): Likewise.
      	(post_order_compute): Likewise.
      	(inverted_post_order_compute): Likewise.
      	(pre_and_rev_post_order_compute_fn): Likewise.
      	(single_pred_before_succ_order): Likewise.
      	* cfgexpand.c (pass_expand::execute): Likewise.
      	* cfgloop.c (verify_loop_structure): Likewise.
      	* cfgloopmanip.c (fix_bb_placements): Likewise.
      	(remove_path): Likewise.
      	(update_dominators_in_loop): Likewise.
      	* cfgrtl.c (break_superblocks): Likewise.
      	* ddg.c (check_sccs): Likewise.
      	(create_ddg_all_sccs): Likewise.
      	* df-core.c (df_worklist_dataflow): Likewise.
      	* dse.c (dse_step3): Likewise.
      	* except.c (eh_region_outermost): Likewise.
      	* function.c (thread_prologue_and_epilogue_insns): Likewise.
      	* gcse.c (prune_expressions): Likewise.
      	(prune_insertions_deletions): Likewise.
      	* gimple-ssa-backprop.c (backprop::~backprop): Likewise.
      	* graph.c (draw_cfg_nodes_no_loops): Likewise.
      	* ira-lives.c (remove_some_program_points_and_update_live_ranges): Likewise.
      	* lcm.c (compute_earliest): Likewise.
      	(compute_farthest): Likewise.
      	* loop-unroll.c (unroll_loop_constant_iterations): Likewise.
      	(unroll_loop_runtime_iterations): Likewise.
      	(unroll_loop_stupid): Likewise.
      	* lower-subreg.c (decompose_multiword_subregs): Likewise.
      	* lra-lives.c: Likewise.
      	* lra.c (lra): Likewise.
      	* modulo-sched.c (schedule_reg_moves): Likewise.
      	(optimize_sc): Likewise.
      	(get_sched_window): Likewise.
      	(sms_schedule_by_order): Likewise.
      	(check_nodes_order): Likewise.
      	(order_nodes_of_sccs): Likewise.
      	(order_nodes_in_scc): Likewise.
      	* recog.c (split_all_insns): Likewise.
      	* regcprop.c (pass_cprop_hardreg::execute): Likewise.
      	* reload1.c (reload): Likewise.
      	* sched-rgn.c (haifa_find_rgns): Likewise.
      	(split_edges): Likewise.
      	(compute_trg_info): Likewise.
      	* sel-sched.c (init_seqno): Likewise.
      	* store-motion.c (remove_reachable_equiv_notes): Likewise.
      	* tree-into-ssa.c (update_ssa): Likewise.
      	* tree-ssa-live.c (live_worklist): Likewise.
      	* tree-ssa-loop-im.c (fill_always_executed_in): Likewise.
      	* tree-ssa-loop-ivcanon.c (try_unroll_loop_completely):
      	* Likewise.
      	(try_peel_loop): Likewise.
      	* tree-ssa-loop-manip.c (tree_transform_and_unroll_loop):
      	* Likewise.
      	* tree-ssa-pre.c (compute_antic): Likewise.
      	* tree-ssa-reassoc.c (undistribute_ops_list): Likewise.
      	* tree-stdarg.c (reachable_at_most_once): Likewise.
      	* tree-vect-slp.c (vect_attempt_slp_rearrange_stmts): Likewise.
      	* var-tracking.c (vt_find_locations): Likewise.
      
      From-SVN: r238748
      Trevor Saunders committed
  24. 19 Jul, 2016 1 commit
    • builtins.c: Use HOST_WIDE_INT_1 instead of (HOST_WIDE_INT) 1... · fecfbfa4
      	* builtins.c: Use HOST_WIDE_INT_1 instead of (HOST_WIDE_INT) 1,
      	HOST_WIDE_INT_1U instead of (unsigned HOST_WIDE_INT) 1,
      	HOST_WIDE_INT_M1 instead of (HOST_WIDE_INT) -1 and
      	HOST_WIDE_INT_M1U instead of (unsigned HOST_WIDE_INT) -1.
      	* combine.c: Ditto.
      	* cse.c: Ditto.
      	* dojump.c: Ditto.
      	* double-int.c: Ditto.
      	* dse.c: Ditto.
      	* dwarf2out.c: Ditto.
      	* expmed.c: Ditto.
      	* expr.c: Ditto.
      	* fold-const.c: Ditto.
      	* function.c: Ditto.
      	* fwprop.c: Ditto.
      	* genmodes.c: Ditto.
      	* hwint.c: Ditto.
      	* hwint.h: Ditto.
      	* ifcvt.c: Ditto.
      	* loop-doloop.c: Ditto.
      	* loop-invariant.c: Ditto.
      	* loop-iv.c: Ditto.
      	* match.pd: Ditto.
      	* optabs.c: Ditto.
      	* real.c: Ditto.
      	* reload.c: Ditto.
      	* rtlanal.c: Ditto.
      	* simplify-rtx.c: Ditto.
      	* stor-layout.c: Ditto.
      	* toplev.c: Ditto.
      	* tree-ssa-loop-ivopts.c: Ditto.
      	* tree-vect-generic.c: Ditto.
      	* tree-vect-patterns.c: Ditto.
      	* tree.c: Ditto.
      	* tree.h: Ditto.
      	* ubsan.c: Ditto.
      	* varasm.c: Ditto.
      	* wide-int-print.cc: Ditto.
      	* wide-int.cc: Ditto.
      	* wide-int.h: Ditto.
      
      From-SVN: r238481
      Uros Bizjak committed
  25. 22 Jun, 2016 1 commit
  26. 02 Jun, 2016 1 commit
    • Update TARGET_FUNCTION_INCOMING_ARG documentation · 4a235312
      On x86, interrupt handlers are only called by processors which push
      interrupt data onto stack at the address where the normal return address
      is.  Since interrupt handlers must access interrupt data via pointers so
      that they can update interrupt data, the pointer argument is passed as
      "argument pointer - word".
      
      TARGET_FUNCTION_INCOMING_ARG defines how callee sees its argument.
      Normally it returns REG, NULL, or CONST_INT.  This patch adds arbitrary
      address computation based on hard register, which can be forced into a
      register, to the list.
      
      When copying an incoming argument onto stack, assign_parm_setup_stack
      has:
      
      if (argument in memory)
        copy argument in memory to stack
      else
        move argument to stack
      
      Since an arbitrary address computation may be passed as an argument, we
      change it to:
      
      if (argument in memory)
        copy argument in memory to stack
      else
        {
          if (argument isn't in register)
            force argument into a register
          move argument to stack
        }
      
      	* function.c (assign_parm_setup_stack): Force source into a
      	register if needed.
      	* target.def (function_incoming_arg): Update documentation to
      	allow arbitrary address computation based on hard register.
      	* doc/tm.texi: Regenerated.
      
      Co-Authored-By: Julia Koval <julia.koval@intel.com>
      
      From-SVN: r237037
      H.J. Lu committed
  27. 20 May, 2016 1 commit
  28. 19 May, 2016 2 commits
    • function: Restructure *logue insertion · 33fec8d5
      This patch restructures how the prologues/epilogues are inserted.  Sibcalls
      that run without prologue are now handled in shrink-wrap.c; it communicates
      what is already handled by setting the EDGE_IGNORE flag.  The
      try_shrink_wrapping function then doesn't need to be passed the bb_flags
      anymore.
      
      
      	* function.c (make_epilogue_seq): Remove epilogue_end parameter.
      	(thread_prologue_and_epilogue_insns): Remove bb_flags.  Restructure
      	code.  Ignore sibcalls on EDGE_IGNORE edges.
      	* shrink-wrap.c (handle_simple_exit): New function.  Set EDGE_IGNORE
      	on edges for sibcalls that run without prologue.  The rest of the
      	function is combined from...
      	(fix_fake_fallthrough_edge): ... this, and ...
      	(try_shrink_wrapping): ... a part of this.  Remove the bb_with
      	function argument, make it a local variable.
      
      From-SVN: r236491
      Segher Boessenkool committed
    • function: A fix for my previous commit · cc1f86f3
      It failed for targets that have an eh_return pattern with a splitter
      gated by epilogue_done.
      
      
              * function.c (thread_prologue_and_epilogue_insn): Move the
              "goto epilogue_done" one block later.
      
      From-SVN: r236441
      Segher Boessenkool committed
  29. 18 May, 2016 2 commits
  30. 04 May, 2016 1 commit
    • shrink-wrap: Remove complicated simple_return manipulations · d07d2177
      Now that cfgcleanup knows how to optimize with return statements, the
      epilogue insertion code doesn't have to deal with it itself anymore.
      
      
      	* function.c (emit_use_return_register_into_block): Delete.
      	(gen_return_pattern): Delete.
      	(emit_return_into_block): Delete.
      	(active_insn_between): Delete.
      	(convert_jumps_to_returns): Delete.
      	(emit_return_for_exit): Delete.
      	(thread_prologue_and_epilogue_insns): Delete all code dealing with
      	simple_return for shrink-wrapped blocks.
      	* shrink-wrap.c (try_shrink_wrapping): Insert simple_return at the
      	end of blocks that need one.
      	(get_unconverted_simple_return): Delete.
      	(convert_to_simple_return): Delete.
      	* shrink-wrap.c (get_unconverted_simple_return): Delete declaration.
      	(convert_to_simple_return): Ditto.
      
      From-SVN: r235905
      Segher Boessenkool committed
  31. 18 Apr, 2016 1 commit
    • tree.h (TYPE_ALIGN, DECL_ALIGN): Return shifted amount. · fe37c7af
      	* tree.h (TYPE_ALIGN, DECL_ALIGN): Return shifted amount.
      	(SET_TYPE_ALIGN, SET_DECL_ALIGN): New.
      	* tree-core.h (tree_type_common.align): Use bit-field.
      	(tree_type_common.spare): New.
      	(tree_decl_common.off_align): Make smaller.
      	(tree_decl_common.align): Use bit-field.
      
      	* expr.c (expand_expr_addr_expr_1): Use SET_TYPE_ALIGN.
      	* omp-low.c (install_var_field): Use SET_DECL_ALIGN.
      	(scan_sharing_clauses): Ditto.
      	(finish_taskreg_scan): Use SET_DECL_ALIGN and SET_TYPE_ALIGN.
      	(omp_finish_file): Ditto.
      	* stor-layout.c (do_type_align): Use SET_DECL_ALIGN.
      	(layout_decl): Ditto.
      	(relayout_decl): Ditto.
      	(finalize_record_size): Use SET_TYPE_ALIGN.
      	(finalize_type_size): Ditto.
      	(finish_builtin_struct): Ditto.
      	(layout_type): Ditto.
      	(initialize_sizetypes): Ditto.
      	* targhooks.c (std_gimplify_va_arg_expr): Use SET_TYPE_ALIGN.
      	* tree-nested.c (insert_field_into_struct): Use SET_TYPE_ALIGN.
      	(lookup_field_for_decl): Use SET_DECL_ALIGN.
      	(get_chain_field): Ditto.
      	(get_trampoline_type): Ditto.
      	(get_nl_goto_field): Ditto.
      	* tree-streamer-in.c (unpack_ts_decl_common_value_fields): Use
      	SET_DECL_ALIGN.
      	(unpack_ts_type_common_value_fields): Use SET_TYPE_ALIGN.
      	* gimple-expr.c (copy_var_decl): Use SET_DECL_ALIGN.
      	* tree.c (make_node_stat): Use SET_DECL_ALIGN and SET_TYPE_ALIGN.
      	(build_qualified_type): Use SET_TYPE_ALIGN.
      	(build_aligned_type, build_range_type_1): Ditto.
      	(build_atomic_base): Ditto.
      	(build_common_tree_nodes): Ditto.
      	* cfgexpand.c (align_local_variable): Use SET_DECL_ALIGN.
      	(expand_one_stack_var_at): Ditto.
      	* coverage.c (build_var): Use SET_DECL_ALIGN.
      	* except.c (init_eh): Ditto.
      	* function.c (assign_parm_setup_block): Ditto.
      	* symtab.c (increase_alignment_1): Ditto.
      	* tree-ssa-ccp.c (fold_builtin_alloca_with_align): Ditto.
      	* tree-vect-stmts.c (ensure_base_align): Ditto.
      	* varasm.c (align_variable): Ditto.
      	(assemble_variable): Ditto.
      	(build_constant_desc): Ditto.
      	(output_constant_def_contents): Ditto.
      
      	* config/arm/arm.c (arm_relayout_function): Use SET_DECL_ALIGN.
      	* config/avr/avr.c (avr_adjust_type_node): Use SET_TYPE_ALIGN.
      	* config/mips/mips.c (mips_std_gimplify_va_arg_expr): Ditto.
      	* config/msp430/msp430.c (msp430_gimplify_va_arg_expr): Ditto.
      	* config/spu/spu.c (spu_build_builtin_va_list): Use SET_DECL_ALIGN.
      
      ada/
      	* gcc-interface/decl.c (gnat_to_gnu_entity): Use SET_TYPE_ALIGN.
      	(gnat_to_gnu_field): Ditto.
      	(components_to_record): Ditto.
      	(create_variant_part_from): Ditto.
      	(copy_and_substitute_in_size): Ditto.
      	(substitute_in_type): Ditto.
      	* gcc-interface/utils.c (make_aligning_type): Use SET_TYPE_ALIGN.
      	(make_packable_type): Ditto.
      	(maybe_pad_type): Ditto.
      	(finish_fat_pointer_type): Ditto.
      	(finish_record_type): Ditto and use SET_DECL_ALIGN.
      	(rest_of_record_type_compilation): Use SET_TYPE_ALIGN.
      	(create_field_decl): Use SET_DECL_ALIGN.
      
      c-family/
      	* c-common.c (handle_aligned_attribute): Use SET_TYPE_ALIGN
      	and SET_DECL_ALIGN.
      
      c/
      	* c-decl.c (merge_decls): Use SET_DECL_ALIGN and SET_TYPE_ALIGN.
      	(grokdeclarator, parser_xref_tag, finish_enum): Use SET_TYPE_ALIGN.
      
      cp/
      	* class.c (build_vtable): Use SET_DECL_ALIGN and SET_TYPE_ALIGN.
      	(layout_class_type): Ditto.
      	(build_base_field): Use SET_DECL_ALIGN.
      	(fixup_attribute_variants): Use SET_TYPE_ALIGN.
      	* decl.c (duplicate_decls): Use SET_DECL_ALIGN.
      	(record_unknown_type): Use SET_TYPE_ALIGN.
      	(cxx_init_decl_processing): Ditto.
      	(copy_type_enum): Ditto.
      	(grokfndecl): Use SET_DECL_ALIGN.
      	(copy_type_enum): Use SET_TYPE_ALIGN.
      	* pt.c (instantiate_class_template_1): Use SET_TYPE_ALIGN.
      	(tsubst): Ditto.
      	* tree.c (cp_build_qualified_type_real): Use SET_TYPE_ALIGN.
      	* lambda.c (maybe_add_lambda_conv_op): Use SET_DECL_ALIGN.
      	* method.c (implicitly_declare_fn): Use SET_DECL_ALIGN.
      	* rtti.c (emit_tinfo_decl): Ditto.
      
      fortran/
      	* trans-io.c (gfc_build_io_library_fndecls): Use SET_TYPE_ALIGN.
      	* trans-common.c (build_common_decl): Use SET_DECL_ALIGN.
      	* trans-types.c (gfc_add_field_to_struct): Use SET_DECL_ALIGN.
      
      go/
      	* go-gcc.cc (Gcc_backend::implicit_variable): Use SET_DECL_ALIGN.
      
      java/
      	* class.c (add_method_1): Use SET_DECL_ALIGN.
      	(make_class_data): Ditto.
      	(emit_register_classes_in_jcr_section): Ditto.
      	* typeck.c (build_java_array_type): Ditto.
      
      objc/
      	* objc-act.c (objc_build_struct): Use SET_DECL_ALIGN.
      
      libcc1/
      	* plugin.cc (plugin_finish_record_or_union): Use SET_TYPE_ALIGN.
      
      From-SVN: r235172
      Michael Matz committed
  32. 08 Jan, 2016 1 commit
    • PR c++/68983 (BE) · 45177337
      	PR c++/67557
      gcc/
      	* function.c (assign_temp): Guard against TREE_ADDRESSABLE types here.
      	* expr.c (store_field): Not here.
      	* tree-cfgcleanup.c (fixup_noreturn_call): Don't clear LHS of a
      	call with TREE_ADDRESSABLE type.
      	* tree-cfg.c (verify_gimple_call): Adjust.
      gcc/cp/
      	* cvt.c (convert_to_void): Don't strip a TARGET_EXPR of
      	TREE_ADDRESSABLE type.
      
      From-SVN: r232167
      Jason Merrill committed
  33. 04 Jan, 2016 1 commit