1. 05 Sep, 2017 11 commits
  2. 04 Sep, 2017 24 commits
    • mpx-os-support.h: New file. · bc394e5a
      	* gcc.target/i386/mpx/mpx-os-support.h: New file.
      	* gcc.target/i386/mpx/mpx-check.h: Include mpx-os-support.h.
      
      From-SVN: r251683
      Uros Bizjak committed
    • re PR target/82098 (internal compiler error: in elimination_costs_in_insn, at… · fc3664b1
      re PR target/82098 (internal compiler error: in elimination_costs_in_insn, at reload1.c:3616, -march=i686)
      
      	PR target/82098
      	* config/i386/i386.md (*<btsc><mode>_mask): Add
      	TARGET_USE_BT to insn constraint.
      	(*btr<mode>_mask): Ditto.
      
      From-SVN: r251682
      Uros Bizjak committed
    • Fix ldrd offsets · c9244494
      Fix the ldrd offsets of Thumb-2 - for TARGET_LDRD the range is +-1020,
      without -252..4096.  This reduces the number of addressing instructions
      when using DI mode operations (such as in PR77308).
      
          gcc/
      	* config/arm/arm.c (arm_legitimate_index_p): Add comment.
      	(thumb2_legitimate_index_p): Use correct range for DI/DF mode.
      
      From-SVN: r251681
      Wilco Dijkstra committed
    • PR libstdc++/79162 implement LWG 2946 and LWG 2758 · df66af3b
      2017-09-04  Daniel Kruegler  <daniel.kruegler@gmail.com>
      
      	PR libstdc++/79162
      	Implement LWG 2946, LWG 2758's resolution missed further corrections
      	* include/bits/basic_string.h (basic_string::compare): Add missing
      	required noexcept specifications.
      	(basic_string): Introduce internal _S_to_string_view and __sv_wrapper
      	for implicit string_view conversion.
      	(basic_string::basic_string): Fix explicit string_view conversion by
      	implicit conversion using _S_to_string_view and __sv_wrapper.
      	(basic_string): Introduce internal basic_string(__sv_wrapper, Alloc)
      	constructor.
      	(basic_string): Fix operator=(T) template by operator=(const T&)
      	template for uncopyable types (PR 79162).
      	(basic_string::operator+=, basic_string::append, basic_string::assign)
      	(basic_string::insert, basic_string::replace, basic_string::find)
      	(basic_string::rfind, basic_string::find_first_of)
      	(basic_string::find_last_of, basic_string::find_first_not_of)
      	(basic_string::find_last_not_of, basic_string::compare): Replace
      	__sv_type argument by template const T& (LWG 2946) and correct
      	documentation describing __sv_type argument.
      	(basic_string::find, basic_string::rfind, basic_string::find_first_of)
      	(basic_string::find_last_of, basic_string::find_first_not_of)
      	(basic_string::find_last_not_of, basic_string::compare): Replace
      	unconditional noexcept specification by conditional noexcept
      	specification to partially balance the removal of noexcept by LWG 2946.
      	* testsuite/21_strings/basic_string/79162.cc: New.
      	* testsuite/21_strings/basic_string/lwg2946.cc: New.
      
      From-SVN: r251664
      Daniel Kruegler committed
    • re PR target/77308 (surprisingly large stack usage for sha512 on arm) · 9afacf39
      2017-09-04  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              PR target/77308
              * config/arm/arm.md (*arm_adddi3, *arm_subdi3): Split early except for
              TARGET_NEON and TARGET_IWMMXT.
              (anddi3, iordi3, xordi3, one_cmpldi2): Split while expanding except for
              TARGET_NEON and TARGET_IWMMXT.
              (*one_cmpldi2_insn): Moved the body of one_cmpldi2 here.
      
      testsuite:
      2017-09-04  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              PR target/77308
              * gcc.target/arm/pr77308-1.c: New test.
      
      From-SVN: r251663
      Bernd Edlinger committed
    • * config/i386/i386-protos.h (ix86_tls_address_pattern_p) New prototype. · f3648f7d
      	(ix86_rewrite_tls_address): Ditto.
      	* config/i386/i386.c (ix86_tls_address_pattern_p) New function.
      	(ix86_rewrite_tls_address_1): Ditto.
      	(ix86_rewrite_tls_address): Ditto.
      	* config/i386/predicates.md (tls_address_pattern): New predicate.
      	* config/i386/i386.md (TLS address splitter): New splitter.
      
      From-SVN: r251662
      Uros Bizjak committed
    • re PR c++/82084 (ICE: constructing wstring with -O3) · 11a82e25
      2017-09-04  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/82084
      	* fold-const.h (can_native_encode_string_p): Declare.
      	* fold-const.c (can_native_encode_string_p): Factor out from ...
      	(native_encode_string): ... here.
      	* tree-vect-stmts.c (vectorizable_store): Call it to avoid
      	vectorizing stores from constants we later cannot handle.
      
      	* g++.dg/torture/pr82084.C: New testcase.
      
      From-SVN: r251661
      Richard Biener committed
    • re PR c/81783 (-Wtautological-compare could do better) · bc7fe952
      	PR c/81783
      	* c-warn.c (warn_tautological_bitwise_comparison): New function.
      	(warn_tautological_cmp): Call it.
      
      	* doc/invoke.texi: Update -Wtautological-compare documentation.
      
      	* c-c++-common/Wtautological-compare-5.c: New test.
      
      From-SVN: r251660
      Marek Polacek committed
    • re PR tree-optimization/64910 (tree reassociation results in poor code) · 8713d0f1
      2017-09-03  Jeff Law  <law@redhat.com>
      
      	PR tree-optimization/64910
      	* tree-ssa-reassoc.c (reassociate_bb): For bitwise binary ops,
      	swap the first and last operand if the last is a constant.
      
      	PR tree-optimization/64910
      	* gcc.dg/tree-ssa/pr64910-2.c: New test.
      
      From-SVN: r251659
      Jeff Law committed
    • re PR sanitizer/82072 (sanitizer does not detect an overflow from LLONG_MIN) · 8d2b48ae
      	PR sanitizer/82072
      	* convert.c (do_narrow): When sanitizing signed integer overflows,
      	bail out for signed types.
      	(convert_to_integer_1) <case NEGATE_EXPR>: Likewise.
      
      	* c-c++-common/ubsan/pr82072.c: New test.
      
      From-SVN: r251651
      Marek Polacek committed
    • re PR tree-optimization/82060 (ICE in refs_may_alias_p_1 with devirtualization enabled) · e910a9b1
      2017-09-04  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/82060
      	* tree-ssa-pre.c (eliminate_dom_walker::before_dom_children):
      	Move devirtualization after stmt folding and before EH/AB/noreturn
      	cleanup to get the stmt refs canonicalized.  Use a bool instead
      	of gimple_modified_p since that doesn't work for NOPs.  Schedule
      	NOPs generated by folding for removal.
      
      	* g++.dg/torture/pr82060.C: New testcase.
      
      From-SVN: r251650
      Richard Biener committed
    • 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
    • Turn MODES_TIEABLE_P into a target hook · 99e1629f
      2017-09-04  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* target.def (modes_tieable_p): New hook.
      	* doc/tm.texi (MODES_TIEABLE_P): Replace with...
      	(TARGET_MODES_TIEABLE_P): ...this.
      	* doc/tm.texi.in: Regenerate.
      	* hooks.h (hook_bool_mode_mode_true): Declare.
      	* hooks.c (hook_bool_mode_mode_true): New function.
      	* combine.c (subst): Use targetm.modes_tieable_p instead of
      	MODES_TIEABLE_P.
      	* dse.c (find_shift_sequence): Likewise.
      	* expmed.c (extract_low_bits): Likewise.
      	* lower-subreg.c: Include target.h.
      	(find_decomposable_subregs): Use targetm.modes_tieable_p instead of
      	MODES_TIEABLE_P.
      	* rtlanal.c (rtx_cost): Likewise.
      	* config/aarch64/aarch64.h (MODES_TIEABLE_P): Delete.
      	* config/aarch64/aarch64-protos.h (aarch64_modes_tieable_p): Delete.
      	* config/aarch64/aarch64.c (aarch64_modes_tieable_p): Make static.
      	(TARGET_MODES_TIEABLE_P): Redefine.
      	* config/alpha/alpha.h (MODES_TIEABLE_P): Delete.
      	* config/alpha/alpha.c (alpha_modes_tieable_p): New function.
      	(TARGET_MODES_TIEABLE_P): Redefine.
      	* config/arc/arc.h (MODES_TIEABLE_P): Delete.
      	* config/arc/arc.c (TARGET_MODES_TIEABLE_P): Redefine.
      	(arc_modes_tieable_p): New function.
      	* config/arm/arm.h (MODES_TIEABLE_P): Delete.
      	* config/arm/arm-protos.h (arm_modes_tieable_p): Delete.
      	* config/arm/arm.c (TARGET_MODES_TIEABLE_P): Redefine.
      	(arm_modes_tieable_p): Make static.
      	* config/avr/avr.h (MODES_TIEABLE_P): Delete.
      	* config/bfin/bfin.h (MODES_TIEABLE_P): Delete.
      	* config/bfin/bfin.c (bfin_modes_tieable_p): New function.
      	(TARGET_MODES_TIEABLE_P): Redefine.
      	* config/c6x/c6x.h (MODES_TIEABLE_P): Delete.
      	* config/c6x/c6x.c (c6x_modes_tieable_p): New function.
      	(TARGET_MODES_TIEABLE_P): Redefine.
      	* config/cr16/cr16.h (MODES_TIEABLE_P): Delete.
      	* config/cr16/cr16.c (TARGET_MODES_TIEABLE_P): Redefine.
      	(cr16_modes_tieable_p): New function.
      	* config/cris/cris.h (MODES_TIEABLE_P): Delete.
      	* config/epiphany/epiphany.h (MODES_TIEABLE_P): Delete.
      	* config/fr30/fr30.h (MODES_TIEABLE_P): Delete.
      	(TRULY_NOOP_TRUNCATION): Update comment.
      	* config/frv/frv.h (MODES_TIEABLE_P): Delete.
      	(TRULY_NOOP_TRUNCATION): Update comment.
      	* config/frv/frv.c (TARGET_MODES_TIEABLE_P): Redefine.
      	(frv_modes_tieable_p): New function.
      	* config/ft32/ft32.h (MODES_TIEABLE_P): Delete.
      	* config/h8300/h8300.h (MODES_TIEABLE_P): Delete.
      	* config/h8300/h8300.c (h8300_modes_tieable_p): New function.
      	(TARGET_MODES_TIEABLE_P): Redefine.
      	* config/i386/i386.h (MODES_TIEABLE_P): Delete.
      	* config/i386/i386-protos.h (ix86_modes_tieable_p): Delete.
      	* config/i386/i386.c (ix86_modes_tieable_p): Make static.
      	(TARGET_MODES_TIEABLE_P): Redefine.
      	* config/ia64/ia64.h (MODES_TIEABLE_P): Delete.
      	* config/ia64/ia64.c (TARGET_MODES_TIEABLE_P): Redefine.
      	(ia64_modes_tieable_p): New function.
      	* config/iq2000/iq2000.h (MODES_TIEABLE_P): Delete.
      	* config/iq2000/iq2000.c (TARGET_MODES_TIEABLE_P): Redefine.
      	(iq2000_modes_tieable_p): New function.
      	* config/lm32/lm32.h (MODES_TIEABLE_P): Delete.
      	* config/lm32/lm32.c (TARGET_MODES_TIEABLE_P): Redefine.
      	(lm32_modes_tieable_p): New function.
      	* config/m32c/m32c.h (MODES_TIEABLE_P): Delete.
      	* config/m32c/m32c-protos.h (m32c_modes_tieable_p): Delete.
      	* config/m32c/m32c.c (m32c_modes_tieable_p): Make static.
      	(TARGET_MODES_TIEABLE_P): Redefine.
      	* config/m32r/m32r.h (MODES_TIEABLE_P): Delete.
      	* config/m32r/m32r.c (TARGET_MODES_TIEABLE_P): Redefine.
      	(m32r_modes_tieable_p): New function.
      	* config/m68k/m68k.h (MODES_TIEABLE_P): Delete.
      	* config/m68k/m68k.c (TARGET_MODES_TIEABLE_P): Redefine.
      	(m68k_modes_tieable_p): New function.
      	* config/mcore/mcore.h (MODES_TIEABLE_P): Delete.
      	* config/mcore/mcore.c (TARGET_MODES_TIEABLE_P): Redefine.
      	(mcore_modes_tieable_p): New function.
      	* config/microblaze/microblaze.h (MODES_TIEABLE_P): Delete.
      	* config/microblaze/microblaze.c (microblaze_modes_tieable_p): New
      	function.
      	(TARGET_MODES_TIEABLE_P): Redefine.
      	* config/mips/mips.h (MODES_TIEABLE_P): Delete.
      	* config/mips/mips-protos.h (mips_modes_tieable_p): Delete.
      	* config/mips/mips.c (mips_modes_tieable_p): Make static.
      	(TARGET_MODES_TIEABLE_P): Redefine.
      	* config/mmix/mmix.h (MODES_TIEABLE_P): Delete.
      	* config/mn10300/mn10300.h (MODES_TIEABLE_P): Delete.
      	* config/mn10300/mn10300-protos.h (mn10300_modes_tieable): Delete.
      	* config/mn10300/mn10300.c (mn10300_modes_tieable): Rename to...
      	(mn10300_modes_tieable_p): ...this and make static.
      	(TARGET_MODES_TIEABLE_P): Redefine.
      	* config/moxie/moxie.h (MODES_TIEABLE_P): Delete.
      	* config/msp430/msp430.h (MODES_TIEABLE_P): Delete.
      	* config/msp430/msp430-protos.h (msp430_modes_tieable_p): Delete.
      	* config/msp430/msp430.c (TARGET_MODES_TIEABLE_P): Redefine.
      	(msp430_modes_tieable_p): Make static.
      	* config/nds32/nds32.h (MODES_TIEABLE_P): Delete.
      	* config/nds32/nds32.c (nds32_modes_tieable_p): New function.
      	(TARGET_MODES_TIEABLE_P): Redefine.
      	* config/nios2/nios2.h (MODES_TIEABLE_P): Delete.
      	* config/nvptx/nvptx.h (MODES_TIEABLE_P): Delete.
      	* config/nvptx/nvptx.c (nvptx_modes_tieable_p): New function.
      	(TARGET_MODES_TIEABLE_P): Redefine.
      	* config/pa/pa.h (MODES_TIEABLE_P): Delete.
      	* config/pa/pa-protos.h (pa_modes_tieable_p): Delete.
      	* config/pa/pa.c (pa_modes_tieable_p): Make static.
      	(TARGET_MODES_TIEABLE_P): Redefine.
      	* config/pdp11/pdp11.h (MODES_TIEABLE_P): Delete.
      	* config/pdp11/pdp11.c (TARGET_MODES_TIEABLE_P): Redefine.
      	(pdp11_modes_tieable_p): New function.
      	* config/powerpcspe/powerpcspe.h (MODES_TIEABLE_P): Delete.
      	* config/powerpcspe/powerpcspe.c (TARGET_MODES_TIEABLE_P): Redefine.
      	(rs6000_modes_tieable_p): New function.
      	(rs6000_debug_reg_global): Use it instead of MODES_TIEABLE_P.
      	* config/powerpcspe/powerpcspe.md: Update comment.
      	* config/riscv/riscv.h (MODES_TIEABLE_P): Delete.
      	* config/riscv/riscv.c (riscv_modes_tieable_p): New function.
      	(TARGET_MODES_TIEABLE_P): Redefine.
      	* config/rl78/rl78.h (MODES_TIEABLE_P): Delete.
      	* config/rl78/rl78.c (TARGET_MODES_TIEABLE_P): Redefine.
      	(rl78_modes_tieable_p): New function.
      	* config/rs6000/rs6000.h (MODES_TIEABLE_P): Delete.
      	* config/rs6000/rs6000.c (TARGET_MODES_TIEABLE_P): Redefine.
      	(rs6000_modes_tieable_p): New function.
      	(rs6000_debug_reg_global): Use it instead of MODES_TIEABLE_P.
      	* config/rs6000/rs6000.md: Update comment.
      	* config/rx/rx.h (MODES_TIEABLE_P): Delete.
      	* config/rx/rx.c (rx_modes_tieable_p): New function.
      	(TARGET_MODES_TIEABLE_P): Redefine.
      	* config/s390/s390.h (MODES_TIEABLE_P): Delete.
      	* config/s390/s390.c (s390_modes_tieable_p): New function.
      	(TARGET_MODES_TIEABLE_P): Redefine.
      	* config/sh/sh.h (MODES_TIEABLE_P): Delete.
      	* config/sh/sh.c (TARGET_MODES_TIEABLE_P): Redefine.
      	(sh_modes_tieable_p): New function.
      	* config/sparc/sparc.h (MODES_TIEABLE_P): Delete.
      	* config/sparc/sparc-protos.h (sparc_modes_tieable_p): Delete.
      	* config/sparc/sparc.c (TARGET_MODES_TIEABLE_P): Redefine.
      	(sparc_modes_tieable_p): Make static.
      	* config/spu/spu.h (MODES_TIEABLE_P): Delete.
      	* config/spu/spu.c (spu_modes_tieable_p): New function.
      	(TARGET_MODES_TIEABLE_P): Redefine.
      	* config/stormy16/stormy16.h (MODES_TIEABLE_P): Delete.
      	* config/stormy16/stormy16.c (xstormy16_modes_tieable_p): New function.
      	(TARGET_MODES_TIEABLE_P): Redefine.
      	* config/tilegx/tilegx.h (MODES_TIEABLE_P): Delete.
      	* config/tilepro/tilepro.h (MODES_TIEABLE_P): Delete.
      	* config/v850/v850.h (MODES_TIEABLE_P): Delete.
      	* config/v850/v850.c (v850_modes_tieable_p): New function.
      	(TARGET_MODES_TIEABLE_P): Redefine.
      	* config/vax/vax.h (MODES_TIEABLE_P): Delete.
      	* config/visium/visium.h (MODES_TIEABLE_P): Delete.
      	* config/visium/visium.c (TARGET_MODES_TIEABLE_P): Redefine.
      	(visium_modes_tieable_p): New function.
      	* config/xtensa/xtensa.h (MODES_TIEABLE_P): Delete.
      	* config/xtensa/xtensa.c (TARGET_MODES_TIEABLE_P): Redefine.
      	(xtensa_modes_tieable_p): New function.
      	* system.h (MODES_TIEABLE_P): Poison.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r251647
      Richard Sandiford committed
    • Turn HARD_REGNO_MODE_OK into a target hook · f939c3e6
      2017-09-04  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* target.def (hard_regno_mode_ok): New hook.
      	* doc/tm.texi (HARD_REGNO_MODE_OK): Replace with...
      	(TARGET_HARD_REGNO_MODE_OK): ...this.
      	* doc/tm.texi.in: Regenerate.
      	* hooks.h (hook_bool_uint_mode_true): Declare.
      	* hooks.c (hook_bool_uint_mode_true): New function.
      	* doc/md.texi: Refer to targetm.hard_regno_mode_ok instead of
      	HARD_REGNO_MODE_OK.
      	* genpreds.c (write_insn_preds_c): Add an include of target.h.
      	* alias.c (init_alias_target): Use targetm.hard_regno_mode_ok
      	instead of HARD_REGNO_MODE_OK.
      	* caller-save.c: Include target.h.
      	(reg_save_code): Use targetm.hard_regno_mode_ok instead of
      	HARD_REGNO_MODE_OK.
      	* combine.c (can_combine_p): Likewise.
      	(combinable_i3pat): Likewise.
      	(can_change_dest_mode): Likewise.
      	* expr.c (init_expr_target): Likewise.
      	(convert_move): Likewise.
      	(convert_modes): Likewise.
      	* ira.c (setup_prohibited_class_mode_regs): Likewise.
      	(setup_prohibited_mode_move_regs): Likewise.
      	* ira.h (target_ira): Likewise.
      	* lra-assigns.c (find_hard_regno_for_1): Likewise.
      	* lra-constraints.c (process_alt_operands): Likewise.
      	(split_reg): Likewise.
      	* recog.c (peep2_find_free_register): Likewise.
      	* ree.c (combine_reaching_defs): Likewise.
      	* regcprop.c (maybe_mode_change): Likewise.
      	* reginfo.c (init_reg_sets_1): Likewise.
      	(choose_hard_reg_mode): Likewise.
      	(simplifiable_subregs): Likewise.
      	* regrename.c (check_new_reg_p): Likewise.
      	* reload.c (find_valid_class): Likewise.
      	(find_valid_class_1): Likewise.
      	(reload_inner_reg_of_subreg): Likewise.
      	(push_reload): Likewise.
      	(combine_reloads): Likewise.
      	(find_dummy_reload): Likewise.
      	(find_reloads): Likewise.
      	* reload1.c (find_reg): Likewise.
      	(set_reload_reg): Likewise.
      	(allocate_reload_reg): Likewise.
      	(choose_reload_regs): Likewise.
      	(reload_adjust_reg_for_temp): Likewise.
      	* rtlanal.c (subreg_size_offset_from_lsb): Likewise.
      	(simplify_subreg_regno): Likewise.
      	* sel-sched.c (init_regs_for_mode): Likewise.
      	* varasm.c (make_decl_rtl): Likewise.
      	* config/aarch64/aarch64.h (HARD_REGNO_MODE_OK): Delete.
      	(MODES_TIEABLE_P): Use targetm.hard_regno_mode_ok instead of
      	HARD_REGNO_MODE_OK.
      	* config/aarch64/aarch64-protos.h (aarch64_hard_regno_mode_ok): Delete.
      	* config/aarch64/aarch64.c (aarch64_hard_regno_mode_ok): Make static.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	* config/alpha/alpha.h (HARD_REGNO_MODE_OK): Delete.
      	* config/alpha/alpha.c (alpha_hard_regno_mode_ok): New function.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	* config/arc/arc.h (arc_hard_regno_mode_ok): Delete.
      	(arc_mode_class): Delete.
      	(HARD_REGNO_MODE_OK): Delete.
      	* config/arc/arc.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(arc_hard_regno_mode_ok): Rename old array to...
      	(arc_hard_regno_mode_ok_modes): ...this.
      	(arc_conditional_register_usage): Update accordingly.
      	(arc_mode_class): Make static.
      	(arc_hard_regno_mode_ok): New function.
      	* config/arm/arm.h (HARD_REGNO_MODE_OK): Delete.
      	* config/arm/arm-protos.h (arm_hard_regno_mode_ok): Delete.
      	* config/arm/arm.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(arm_hard_regno_mode_ok): Make static.
      	* config/arm/arm.md (movdi): Use targetm.hard_regno_mode_ok instead of
      	HARD_REGNO_MODE_OK.
      	* config/avr/avr-protos.h (avr_hard_regno_mode_ok): Delete.
      	* config/avr/avr.h (HARD_REGNO_MODE_OK): Delete.
      	* config/avr/avr.c (avr_hard_regno_mode_ok): Make static and
      	return a bool.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	* config/bfin/bfin-protos.h (hard_regno_mode_ok): Delete.
      	* config/bfin/bfin.h (HARD_REGNO_MODE_OK): Delete.
      	* config/bfin/bfin.c (hard_regno_mode_ok): Rename to...
      	(bfin_hard_regno_mode_ok): ...this.  Make static and return a bool.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	* config/bfin/predicates.md (valid_reg_operand): Use
      	targetm.hard_regno_mode_ok instead of HARD_REGNO_MODE_OK.
      	* config/c6x/c6x.h (HARD_REGNO_MODE_OK): Delete.
      	* config/c6x/c6x.c (c6x_hard_regno_mode_ok): New function.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	* config/cr16/cr16.h (HARD_REGNO_MODE_OK): Delete.
      	* config/cr16/cr16-protos.h (cr16_hard_regno_mode_ok): Delete.
      	* config/cr16/cr16.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(cr16_hard_regno_mode_ok): Make static and return a bool.
      	* config/cris/cris.h (HARD_REGNO_MODE_OK): Delete.
      	* config/cris/cris.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(cris_hard_regno_mode_ok): New function.
      	* config/epiphany/epiphany.h (epiphany_hard_regno_mode_ok): Delete.
      	(epiphany_mode_class): Delete.
      	(HARD_REGNO_MODE_OK): Delete.
      	* config/epiphany/epiphany-protos.h (hard_regno_mode_ok): Delete.
      	* config/epiphany/epiphany.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(hard_regno_mode_ok): Rename to...
      	(epiphany_hard_regno_mode_ok): ...this.  Make static and return a bool.
      	* config/fr30/fr30.h (HARD_REGNO_MODE_OK): Delete.
      	* config/fr30/fr30.md: Refer to targetm.hard_regno_mode_ok instead of
      	HARD_REGNO_MODE_OK.
      	* config/frv/frv.h (HARD_REGNO_MODE_OK): Delete.
      	* config/frv/frv-protos.h (frv_hard_regno_mode_ok): Delete.
      	* config/frv/frv.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(frv_hard_regno_mode_ok): Make static and return a bool.
      	* config/frv/frv.md: Refer to targetm.hard_regno_mode_ok instead of
      	HARD_REGNO_MODE_OK.
      	* config/ft32/ft32.h (HARD_REGNO_MODE_OK): Delete.
      	* config/h8300/h8300.h (HARD_REGNO_MODE_OK): Delete.
      	* config/h8300/h8300-protos.h (h8300_hard_regno_mode_ok): Delete.
      	* config/h8300/h8300.c (h8300_hard_regno_mode_ok): Make static
      	and return a bool.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	* config/i386/i386.h (HARD_REGNO_MODE_OK): Delete.
      	* config/i386/i386-protos.h (ix86_hard_regno_mode_ok): Delete.
      	* config/i386/i386.c (ix86_hard_regno_mode_ok): Make static and
      	return a bool.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	* config/ia64/ia64.h (HARD_REGNO_MODE_OK): Delete.
      	* config/ia64/ia64.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(ia64_hard_regno_mode_ok): New function.
      	* config/iq2000/iq2000.h (HARD_REGNO_MODE_OK): Delete.
      	* config/iq2000/iq2000.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(iq2000_hard_regno_mode_ok): New function.
      	* config/lm32/lm32.h (HARD_REGNO_MODE_OK): Delete.
      	* config/lm32/lm32.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(lm32_hard_regno_mode_ok): New function.
      	* config/m32c/m32c.h (HARD_REGNO_MODE_OK): Delete.
      	* config/m32c/m32c-protos.h (m32c_hard_regno_ok): Delete.
      	* config/m32c/m32c.c (class_can_hold_mode): Use m32c_hard_regno_mode_ok
      	instead of HARD_REGNO_MODE_OK.
      	(m32c_hard_regno_ok): Rename to...
      	(m32c_hard_regno_mode_ok): ...this.  Make static and return a bool.
      	(m32c_cannot_change_mode_class): Update accordingly.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	* config/m32r/m32r.h (m32r_hard_regno_mode_ok): Delete.
      	(m32r_mode_class): Delete.
      	(HARD_REGNO_MODE_OK): Delete.
      	* config/m32r/m32r.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(m32r_hard_regno_mode_ok): Rename to...
      	(m32r_hard_regno_modes): ...this.
      	(m32r_mode_class): Make static.
      	(m32r_hard_regno_mode_ok): New function.
      	* config/m68k/m68k.h (HARD_REGNO_MODE_OK): Delete.
      	* config/m68k/m68k-protos.h (m68k_regno_mode_ok): Delete.
      	* config/m68k/m68k.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(m68k_hard_regno_mode_ok): Make static.
      	* config/mcore/mcore.h (HARD_REGNO_MODE_OK): Delete.
      	* config/mcore/mcore.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(mcore_hard_regno_mode_ok): New function.
      	* config/microblaze/microblaze.h (microblaze_hard_regno_mode_ok)
      	(HARD_REGNO_MODE_OK): Delete.
      	* config/microblaze/microblaze.c (microblaze_hard_regno_mode_ok):
      	Rename to...
      	(microblaze_hard_regno_mode_ok_p): ...this and make static.
      	(microblaze_hard_regno_mode_ok): New function.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	* config/mips/mips.h (HARD_REGNO_MODE_OK): Delete.
      	(mips_hard_regno_mode_ok): Delete.
      	* config/mips/mips.c (mips_hard_regno_mode_ok): Rename to...
      	(mips_hard_regno_mode_ok_p): ...this and make static.
      	(mips_hard_regno_mode_ok_p): Rename to...
      	(mips_hard_regno_mode_ok_uncached): ...this.
      	(mips_hard_regno_mode_ok): New function.
      	(mips_class_max_nregs): Use mips_hard_regno_mode_ok instead
      	of HARD_REGNO_MODE_OK.
      	(mips_option_override): Update after above name changes.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	* config/mmix/mmix.h (HARD_REGNO_MODE_OK): Delete.
      	* config/mn10300/mn10300.h (HARD_REGNO_MODE_OK): Delete.
      	* config/mn10300/mn10300-protos.h (mn10300_hard_regno_mode_ok): Delete.
      	* config/mn10300/mn10300.c (mn10300_hard_regno_mode_ok): Make static.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	* config/moxie/moxie.h (HARD_REGNO_MODE_OK): Delete.
      	* config/msp430/msp430.h (HARD_REGNO_MODE_OK): Delete.
      	* config/msp430/msp430-protos.h (msp430_hard_regno_mode_ok): Delete.
      	* config/msp430/msp430.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(msp430_hard_regno_mode_ok): Make static and return a bool.
      	* config/nds32/nds32.h (HARD_REGNO_MODE_OK): Delete.
      	* config/nds32/nds32-protos.h (nds32_hard_regno_mode_ok): Delete.
      	* config/nds32/nds32.c (nds32_hard_regno_mode_ok): Make static
      	and return a bool.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	* config/nios2/nios2.h (HARD_REGNO_MODE_OK): Delete.
      	* config/nvptx/nvptx.h (HARD_REGNO_MODE_OK): Delete.
      	* config/pa/pa.h (MODES_TIEABLE_P): Update commentary.
      	* config/pa/pa32-regs.h (HARD_REGNO_MODE_OK): Rename to...
      	(PA_HARD_REGNO_MODE_OK): ...this
      	* config/pa/pa64-regs.h (HARD_REGNO_MODE_OK): Rename to...
      	(PA_HARD_REGNO_MODE_OK): ...this.
      	* config/pa/pa.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(pa_hard_regno_mode_ok): New function.
      	* config/pdp11/pdp11.h (HARD_REGNO_MODE_OK): Delete.
      	* config/pdp11/pdp11.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(pdp11_hard_regno_mode_ok): New function.
      	* config/powerpcspe/powerpcspe.h (HARD_REGNO_MODE_OK): Delete.
      	* config/powerpcspe/powerpcspe-protos.h (rs6000_hard_regno_mode_ok_p):
      	Delete.
      	* config/powerpcspe/powerpcspe.c (rs6000_hard_regno_mode_ok_p):
      	Make static.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(rs6000_hard_regno_mode_ok): Rename to...
      	(rs6000_hard_regno_mode_ok_uncached): ...this.
      	(rs6000_init_hard_regno_mode_ok): Update accordingly.
      	(rs6000_hard_regno_mode_ok): New function.
      	* config/riscv/riscv.h (HARD_REGNO_MODE_OK): Delete.
      	* config/riscv/riscv-protos.h (riscv_hard_regno_mode_ok_p): Delete.
      	* config/riscv/riscv.c (riscv_hard_regno_mode_ok_p): Rename to...
      	(riscv_hard_regno_mode_ok): ...this and make static.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	* config/rl78/rl78.h (HARD_REGNO_MODE_OK): Delete.
      	* config/rl78/rl78-protos.h (rl78_hard_regno_mode_ok): Delete.
      	* config/rl78/rl78.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(rl78_hard_regno_mode_ok): Make static and return bool.
      	* config/rs6000/rs6000.h (HARD_REGNO_MODE_OK): Delete.
      	* config/rs6000/rs6000-protos.h (rs6000_hard_regno_mode_ok_p):
      	Delete.
      	* config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok_p): Make static.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(rs6000_hard_regno_mode_ok): Rename to...
      	(rs6000_hard_regno_mode_ok_uncached): ...this.
      	(rs6000_init_hard_regno_mode_ok): Update accordingly.
      	(rs6000_hard_regno_mode_ok): New function.
      	* config/rx/rx.h (HARD_REGNO_MODE_OK): Delete.
      	* config/rx/rx.c (rx_hard_regno_mode_ok): New function.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	* config/s390/s390.h (HARD_REGNO_MODE_OK): Delete.
      	* config/s390/s390-protos.h (s390_hard_regno_mode_ok): Delete.
      	* config/s390/s390.c (s390_hard_regno_mode_ok): Make static.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	* config/sh/sh.h (HARD_REGNO_MODE_OK): Delete.
      	* config/sh/sh-protos.h (sh_hard_regno_mode_ok): Delete.
      	* config/sh/sh.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(sh_hard_regno_mode_ok): Make static.
      	* config/sparc/constraints.md: Refer to targetm.hard_regno_mode_ok
      	instead of HARD_REGNO_MODE_OK.
      	* config/sparc/sparc.h (hard_regno_mode_classes): Delete.
      	(sparc_mode_class): Delete.
      	(HARD_REGNO_MODE_OK): Delete.
      	* config/sparc/sparc.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(hard_regno_mode_classes): Make static.
      	(sparc_mode_class): Likewise.
      	(sparc_hard_regno_mode_ok): New function.
      	* config/spu/spu.h (HARD_REGNO_MODE_OK): Delete.
      	* config/stormy16/stormy16.h (HARD_REGNO_MODE_OK): Delete.
      	* config/stormy16/stormy16.c (xstormy16_hard_regno_mode_ok): New
      	function.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	* config/tilegx/tilegx.h (HARD_REGNO_MODE_OK): Delete.
      	* config/tilepro/tilepro.h (HARD_REGNO_MODE_OK): Delete.
      	* config/v850/v850.h (HARD_REGNO_MODE_OK): Delete.
      	* config/v850/v850.c (v850_hard_regno_mode_ok): New function.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	* config/vax/vax.h (HARD_REGNO_MODE_OK): Delete.
      	* config/visium/visium.h (HARD_REGNO_MODE_OK): Delete.
      	* config/visium/visium.c (TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(visium_hard_regno_mode_ok): New function.
      	* config/visium/visium.md: Refer to targetm.hard_regno_mode_ok
      	instead of HARD_REGNO_MODE_OK.
      	* config/xtensa/xtensa.h (xtensa_hard_regno_mode_ok): Delete.
      	(HARD_REGNO_MODE_OK): Delete.
      	* config/xtensa/xtensa.c (xtensa_hard_regno_mode_ok): Rename to...
      	(xtensa_hard_regno_mode_ok_p): ...this and make static.
      	(xtensa_option_override): Update accordingly.
      	(TARGET_HARD_REGNO_MODE_OK): Redefine.
      	(xtensa_hard_regno_mode_ok): New function.
      	* system.h (HARD_REGNO_MODE_OK): Poison.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r251646
      Richard Sandiford committed
    • Turn HARD_REGNO_CALL_PART_CLOBBERED into a target hook · 80ec73f4
      The SVE patches change the size of a machine_mode from a compile-time
      constant to a runtime invariant.  However, target-specific code can
      continue to treat the modes as constant-sized if the target only has
      constant-sized modes.
      
      The main snag with this approach is that target-independent code still
      uses macros from the target .h file.  This patch is one of several that
      converts a target macro to a hook.
      
      2017-09-04  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* target.def (hard_regno_call_part_clobbered): New hook.
      	* doc/tm.texi.in (HARD_REGNO_CALL_PART_CLOBBERED): Replace with...
      	(TARGET_HARD_REGNO_CALL_PART_CLOBBERED): ...this hook.
      	* doc/tm.texi: Regenerate.
      	* hooks.h (hook_bool_uint_mode_false): Declare.
      	* hooks.c (hook_bool_uint_mode_false): New function.
      	* regs.h (HARD_REGNO_CALL_PART_CLOBBERED): Delete.
      	* cselib.c (cselib_process_insn): Use
      	targetm.hard_regno_call_part_clobbered instead of
      	HARD_REGNO_CALL_PART_CLOBBERED.
      	* ira-conflicts.c (ira_build_conflicts): Likewise.
      	* ira-costs.c (ira_tune_allocno_costs): Likewise.
      	* lra-constraints.c (need_for_call_save_p): Likewise.
      	* lra-lives.c: Include target.h.
      	(check_pseudos_live_through_calls): Use
      	targetm.hard_regno_call_part_clobbered instead of
      	HARD_REGNO_CALL_PART_CLOBBERED.
      	* regcprop.c: Include target.h.
      	(copyprop_hardreg_forward_1): Use
      	targetm.hard_regno_call_part_clobbered instead of
      	HARD_REGNO_CALL_PART_CLOBBERED.
      	* reginfo.c (choose_hard_reg_mode): Likewise.
      	* regrename.c (check_new_reg_p): Likewise.
      	* reload.c (find_equiv_reg): Likewise.
      	* reload1.c (emit_reload_insns): Likewise.
      	* sched-deps.c (deps_analyze_insn): Likewise.
      	* sel-sched.c (init_regs_for_mode): Likewise.
      	(mark_unavailable_hard_regs): Likewise.
      	* targhooks.c (default_dwarf_frame_reg_mode): Likewise.
      	* config/aarch64/aarch64.h (HARD_REGNO_CALL_PART_CLOBBERED): Delete.
      	* config/aarch64/aarch64.c (aarch64_hard_regno_call_part_clobbered):
      	New function.
      	(TARGET_HARD_REGNO_CALL_PART_CLOBBERED): Redefine.
      	* config/avr/avr.h (HARD_REGNO_CALL_PART_CLOBBERED): Delete.
      	* config/avr/avr-protos.h (avr_hard_regno_call_part_clobbered):
      	Delete.
      	* config/avr/avr.c (avr_hard_regno_call_part_clobbered): Make static
      	and return a bool.
      	(TARGET_HARD_REGNO_CALL_PART_CLOBBERED): Redefine.
      	* config/i386/i386.h (HARD_REGNO_CALL_PART_CLOBBERED): Delete.
      	* config/i386/i386.c (ix86_hard_regno_call_part_clobbered): New
      	function.
      	(TARGET_HARD_REGNO_CALL_PART_CLOBBERED): Redefine.
      	* config/mips/mips.h (HARD_REGNO_CALL_PART_CLOBBERED): Delete.
      	* config/mips/mips.c (mips_hard_regno_call_part_clobbered): New
      	function.
      	(TARGET_HARD_REGNO_CALL_PART_CLOBBERED): Redefine.
      	* config/powerpcspe/powerpcspe.h (HARD_REGNO_CALL_PART_CLOBBERED):
      	Delete.
      	* config/powerpcspe/powerpcspe.c
      	(rs6000_hard_regno_call_part_clobbered): New function.
      	(TARGET_HARD_REGNO_CALL_PART_CLOBBERED): Redefine.
      	* config/rs6000/rs6000.h (HARD_REGNO_CALL_PART_CLOBBERED): Delete.
      	* config/rs6000/rs6000.c (rs6000_hard_regno_call_part_clobbered):
      	New function.
      	(TARGET_HARD_REGNO_CALL_PART_CLOBBERED): Redefine.
      	* config/s390/s390.h (HARD_REGNO_CALL_PART_CLOBBERED): Delete.
      	* config/s390/s390.c (s390_hard_regno_call_part_clobbered): New
      	function.
      	(TARGET_HARD_REGNO_CALL_PART_CLOBBERED): Redefine.
      	* config/sh/sh.h (HARD_REGNO_CALL_PART_CLOBBERED): Delete.
      	* system.h (HARD_REGNO_CALL_PART_CLOBBERED): Poison.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r251645
      Richard Sandiford committed
    • Add subreg_memory_offset helper functions · 3d09ba95
      This patch adds routines for converting a SUBREG_BYTE offset into a
      memory address offset.  The two only differ for paradoxical subregs,
      where SUBREG_BYTE is always 0 but the memory address offset can be
      negative.
      
      2017-09-04  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* rtl.h (subreg_memory_offset): Declare.
      	* emit-rtl.c (subreg_memory_offset): New function.
      	* expmed.c (store_bit_field_1): Use it.
      	* expr.c (undefined_operand_subword_p): Likewise.
      	* simplify-rtx.c (simplify_subreg): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r251644
      Richard Sandiford committed
    • optabs: ensure atomic_load/stores have compiler barriers · d8c40eff
      	PR rtl-optimization/57448
      	PR target/67458
      	PR target/81316
      	* optabs.c (expand_atomic_load): Place compiler memory barriers if
      	using atomic_load pattern.
      	(expand_atomic_store): Likewise.
      testsuite/
      	* gcc.dg/atomic/pr80640-2.c: New testcase.
      	* gcc.dg/atomic/pr81316.c: New testcase.
      
      From-SVN: r251643
      Alexander Monakov committed
    • Fix call arguments mismatch in gcc.c-torture/compile/pr82052.c · 1fda57cb
      2017-09-04  Tom de Vries  <tom@codesourcery.com>
      
      	PR tree-optimization/82052
      	* gcc.c-torture/compile/pr82052.c (fn2): Add parameters corresponding to
      	call in fn11.
      
      From-SVN: r251642
      Tom de Vries committed
    • re PR sanitizer/81981 (-fsanitize=undefined makes a -Wmaybe-uninitialized warning disappear) · ca1150f0
      	PR sanitizer/81981
      	* gimple-fold.c (gimple_fold_call): Optimize away useless UBSAN_PTR
      	and UBSAN_BOUNDS internal calls.  Clean up IFN_UBSAN_OBJECT_SIZE
      	handling.  Use replace_call_with_value with NULL instead of
      	gsi_replace, unlink_stmt_vdef and release_defs.
      
      	* gcc.dg/ubsan/pr81981.c: New test.
      
      From-SVN: r251641
      Jakub Jelinek committed
    • gdbhooks.py (OptMachineModePrinter.to_string): Use 8 spaces instead of tab. · 40008742
      	* gdbhooks.py (OptMachineModePrinter.to_string): Use 8 spaces
      	instead of tab.
      
      From-SVN: r251640
      Jakub Jelinek committed
    • * lra-remat.c (reg_overlap_for_remat_p): Fix a pasto. · 8eb587b6
      From-SVN: r251639
      Jakub Jelinek committed
    • re PR tree-optimization/70043 (The compiler hangs in a fortran test-case with… · 792ce29f
      re PR tree-optimization/70043 (The compiler hangs in a fortran test-case with -Ofast -g -march=haswell)
      
      	PR tree-optimization/70043
      	PR testsuite/82093
      	* gfortran.dg/vect/pr70043.f90 (fn1): Start loop from 1 instead of 0.
      
      From-SVN: r251638
      Jakub Jelinek committed
    • PR82045: Avoid passing machine modes through "..." · db69559b
      PR82045 is about a bootstrap failure on sparc-sun-solaris2.11.
      The problem was that we were passing the new machine_mode wrapper
      classes through "..."  to emit_library_call(_value), which then
      read them back as ints instead.
      
      The simplest fix seemed to be replace "..." with an array of
      rtx_mode_ts, then provide wrappers for the common cases.  This
      bulks out rtl.h a bit, but it does make things a bit more typesafe.
      
      2017-09-04  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	PR bootstrap/82045
      	* rtl.h (emit_library_call_value_1): Declare.
      	(emit_library_call): Replace declaration with a series of overloads.
      	Remove the parameter count argument.
      	(emit_library_call_value): Likewise.
      	* calls.c (emit_library_call_value_1): Make global.  Replace varargs
      	with an "rtx_mode_t *".
      	(emit_library_call_value): Delete.
      	(emit_library_call): Likewise.
      	* asan.c (asan_emit_stack_protection): Update calls accordingly.
      	(asan_emit_allocas_unpoison): Likewise.
      	* builtins.c (expand_builtin_powi): Likewise.
      	(expand_asan_emit_allocas_unpoison): Likewise.
      	* cfgexpand.c (expand_main_function): Likewise.
      	* config/aarch64/aarch64.c (aarch64_trampoline_init): Likewise.
      	* config/aarch64/aarch64.h (PROFILE_HOOK): Likewise.
      	* config/alpha/alpha.c (alpha_trampoline_init): Likewise.
      	* config/arm/arm.c (arm_trampoline_init): Likewise.
      	(arm_call_tls_get_addr): Likewise.
      	(arm_expand_divmod_libfunc): Likewise.
      	* config/bfin/bfin.md (umulsi3_highpart): Likewise.
      	(smulsi3_highpart): Likewise.
      	* config/c6x/c6x.c (c6x_initialize_trampoline): Likewise.
      	(c6x_expand_compare): Likewise.
      	(c6x_expand_movmem): Likewise.
      	* config/frv/frv.c (frv_trampoline_init): Likewise.
      	* config/i386/i386.c (ix86_trampoline_init): Likewise.
      	(ix86_expand_divmod_libfunc): Likewise.
      	* config/ia64/ia64.c (ia64_expand_tls_address): Likewise.
      	(ia64_expand_compare): Likewise.
      	(ia64_profile_hook): Likewise.
      	* config/ia64/ia64.md (save_stack_nonlocal): Likewise.
      	(nonlocal_goto): Likewise.
      	(restore_stack_nonlocal): Likewise.
      	* config/m32r/m32r.c (block_move_call): Likewise.
      	(m32r_trampoline_init): Likewise.
      	* config/m68k/linux.h (FINALIZE_TRAMPOLINE): Likewise.
      	* config/m68k/m68k.c (m68k_call_tls_get_addr): Likewise.
      	(m68k_call_m68k_read_tp): Likewise.
      	* config/microblaze/microblaze.c (microblaze_call_tls_get_addr)
      	(microblaze_expand_divide): Likewise.
      	* config/mips/mips.h (mips_args): Likewise.
      	* config/mips/sdemtk.h (mips_sync_icache): Likewise.
      	(MIPS_ICACHE_SYNC): Likewise.
      	* config/nios2/nios2.c (nios2_emit_expensive_div): Likewise.
      	(nios2_trampoline_init): Likewise.
      	* config/pa/pa.c (hppa_tls_call): Likewise.
      	(pa_trampoline_init): Likewise.
      	* config/pa/pa.md (canonicalize_funcptr_for_compare): Likewise.
      	* config/powerpcspe/powerpcspe.c (rs6000_legitimize_tls_address)
      	(expand_strn_compare): Likewise.
      	(rs6000_generate_compare): Likewise.
      	(rs6000_expand_float128_convert): Likewise.
      	(output_profile_hook): Likewise.
      	(rs6000_trampoline_init): Likewise.
      	* config/powerpcspe/powerpcspe.md (neg<mode>2): Likewise.
      	* config/riscv/riscv.h (PROFILE_HOOK): Likewise.
      	* config/rs6000/rs6000-string.c (expand_strn_compare): Likewise.
      	* config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Likewise.
      	(rs6000_generate_compare): Likewise.
      	(rs6000_expand_float128_convert): Likewise.
      	(output_profile_hook): Likewise.
      	(rs6000_trampoline_init): Likewise.
      	* config/rs6000/rs6000.md (neg<mode>2): Likewise.
      	* config/sh/sh.c (sh_trampoline_init): Likewise.
      	* config/sparc/sparc.c (emit_soft_tfmode_libcall): Likewise.
      	(sparc_emit_float_lib_cmp): Likewise.
      	(sparc32_initialize_trampoline): Likewise.
      	(sparc64_initialize_trampoline): Likewise.
      	(sparc_profile_hook): Likewise.
      	* config/spu/spu.c (ea_load_store): Likewise.
      	* config/spu/spu.md (floatunssidf2): Likewise.
      	* config/tilegx/tilegx.c (tilegx_trampoline_init): Likewise.
      	* config/tilepro/tilepro.c (tilepro_trampoline_init): Likewise.
      	* config/visium/visium.c (expand_block_move_4): Likewise.
      	(expand_block_move_2): Likewise.
      	(expand_block_move_1): Likewise.
      	(expand_block_set_4): Likewise.
      	(expand_block_set_2): Likewise.
      	(expand_block_set_1): Likewise.
      	(visium_trampoline_init): Likewise.
      	(visium_profile_hook): Likewise.
      	* config/xtensa/xtensa.c (xtensa_expand_nonlocal_goto): Likewise.
      	(xtensa_setup_frame_addresses): Likewise.
      	(xtensa_trampoline_init): Likewise.
      	* except.c (sjlj_emit_function_enter): Likewise.
      	(sjlj_emit_function_exit): Likewise.
      	* explow.c (allocate_dynamic_stack_space): Likewise.
      	(probe_stack_range): Likewise.
      	* expr.c (convert_mode_scalar): Likewise.
      	* optabs.c (expand_binop): Likewise.
      	(expand_twoval_binop_libfunc): Likewise.
      	(expand_unop): Likewise.
      	(prepare_cmp_insn): Likewise.
      	(prepare_float_lib_cmp): Likewise.
      	(expand_float): Likewise.
      	(expand_fix): Likewise.
      	(expand_fixed_convert): Likewise.
      	(maybe_emit_sync_lock_test_and_set): Likewise.
      	(expand_atomic_compare_and_swap): Likewise.
      	(expand_mem_thread_fence): Likewise.
      	(expand_atomic_fetch_op): Likewise.
      
      From-SVN: r251637
      Richard Sandiford committed
    • Daily bump. · 77701e23
      From-SVN: r251633
      GCC Administrator committed
  3. 03 Sep, 2017 5 commits
    • adx-check.h (main): Use __get_cpuid_count. · 83982f26
      	* gcc.target/i386/adx-check.h (main): Use __get_cpuid_count.
      	* gcc.target/i386/bmi-check.h (main): Ditto.
      	* gcc.target/i386/bmi2-check.h (main): Ditto.
      	* gcc.target/i386/rtm-check.h (main): Ditto.
      	* gcc.target/i386/sha-check.h (main): Ditto.
      	* gcc.target/i386/avx2-check.h (check_osxsave): New function.
      	(main): Use __get_cpuid_count.  Use check_osxsave.
      	* gcc.target/i386/avx512-check.h (check_osxsave): New function.
      	(main): Use __get_cpuid_count.  Use check_osxsave.  Reorder conditions.
      	* gcc.target/i386/mpx/mpx-check.h (check_osxsave): New function.
      	(main): Use check_osxsave.
      
      From-SVN: r251629
      Uros Bizjak committed
    • mpx-check.h (main): Use __get_cpuid_count and return NORUNRES on failure. · f36b315d
      	* gcc.target/i386/mpx/mpx-check.h (main): Use __get_cpuid_count
      	and return NORUNRES on failure.
      	* gcc.target/i386/mpx/va-arg-pack-1-lbv.c (foo1): Use
      	__builtin_va_arg_pack instead of __va_arg_pack.
      	* gcc.target/i386/mpx/va-arg-pack-1-nov.c (foo1): Ditto.
      	* gcc.target/i386/mpx/va-arg-pack-1-ubv.c (foo1): Ditto.
      	* gcc.target/i386/mpx/va-arg-pack-2-lbv.c (foo1): Ditto.
      	* gcc.target/i386/mpx/va-arg-pack-2-nov.c (foo1): Ditto.
      	* gcc.target/i386/mpx/va-arg-pack-2-ubv.c (foo1): Ditto.
      
      From-SVN: r251627
      Uros Bizjak committed
    • generic.texi (OpenACC): Adjust URL. · 22140cb0
      	* doc/generic.texi (OpenACC): Adjust URL.
      	* doc/invoke.texi (C Dialect Options): Ditto.
      
      From-SVN: r251626
      Gerald Pfeifer committed
    • i386.md (*bt<mode>): Use nonimmediate_operand predicate for operand 1. · 6b643efd
      	* config/i386/i386.md (*bt<mode>): Use nonimmediate_operand
      	predicate for operand 1.  Add (m,<S>) constraint.
      	(*jcc_bt<mode>): Use nonimmediate_operand predicate for operand 1.
      	Prevent memory operand 1 with register operand 2.
      
      From-SVN: r251625
      Uros Bizjak committed
    • Daily bump. · 9c32e72d
      From-SVN: r251624
      GCC Administrator committed