1. 04 Sep, 2017 22 commits
    • 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
  2. 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
  3. 02 Sep, 2017 1 commit
  4. 01 Sep, 2017 12 commits
    • re PR libquadmath/81848 (Add PowerPC support to libquadmath) · 0c949f0a
      2017-09-01  Michael Meissner  <meissner@linux.vnet.ibm.com>
      
      	PR libquadmath/81848
      	* configure.ac (powerpc*-linux*): Use attribute mode KC to create
      	complex __float128 on PowerPC instead of attribute mode TC.
      	* quadmath.h (__complex128): Likewise.
      	* configure: Regenerate.
      	* math/cbrtq.c (CBRT2): Use __float128 not long double.
      	(CBRT4): Likewise.
      	(CBRT2I): Likewise.
      	(CBRT4I): Likewise.
      	* math/j0q.c (U0): Likewise.
      	* math/sqrtq.c (sqrtq): Don't depend on implicit conversion
      	between __float128, instead explicitly convert the __float128
      	value to long double because the PowerPC does not allow __float128
      	and long double in the same expression.
      
      From-SVN: r251613
      Michael Meissner committed
    • cp-tree.h (resort_type_method_vec): Move declaration to ... · fe920c2d
      	* cp-tree.h (resort_type_method_vec): Move declaration to ...
      	* name-lookup.h (resort_type_method_vec): ... here.
      	(set_class_bindings): Lose 2nd arg.
      	* class.c (finish_struct_1, finish_struct): Adjust
      	set_class_bindings call.  Don't call finish_struct_methods.
      	(resort_data, method_name_cmp, resort_method_name_cmp,
      	resort_type_method_vec, finish_struct_methods): Move to ...
      	* name-lookup.c (resort_data, method_name_cmp,
      	resort_method_name_cmp, resort_type_method_vec): ... here.
      	(set_class_bindings): Lose fields arg.  Swallow finish_struct_methods.
      
      From-SVN: r251609
      Nathan Sidwell committed
    • class.c (finish_struct): Call set_class_bindings for the template case too. · 61abf964
      	* class.c (finish_struct): Call set_class_bindings for the
      	template case too.
      
      From-SVN: r251608
      Nathan Sidwell committed
    • combine: Fix for PR82024 · dbe4e3f4
      With the testcase in the PR, with all the command line options mentioned
      there, a (comparison) instruction becomes dead in fwprop1 but is not
      deleted until all the way in rtl_dce.
      
      Before combine this insn look like:
      
      20: flags:CC=cmp(r106:DI,0xffffffffffffffff)
            REG_DEAD r106:DI
            REG_UNUSED flags:CC
            REG_EQUAL cmp(0,0xffffffffffffffff)
      
      (note the only output is unused).
      
      Combining some earlier insns gives
      
      13: r106:DI=0
      14: r105:DI=r101:DI+r103:DI
      
      14+13+20 then gives
      
      (parallel [
              (set (reg:CC 17 flags)
                  (compare:CC (const_int 0 [0])
                      (const_int -1 [0xffffffffffffffff])))
              (set (reg:DI 105)
                  (plus:DI (reg/v:DI 101 [ e ])
                      (reg:DI 103)))
          ])
      
      which doesn't match; but the set of flags is dead, so combine makes the
      set of r105 the whole new instruction, which it then places at i3.  But
      that is wrong, because r105 is used after i2 but before i3!  We forget
      to check for that in this case.
      
      This patch fixes it.
      
      
      	PR rtl-optimization/82024
      	* combine.c (try_combine): If the combination result is a PARALLEL,
      	and we only need to retain the SET in there that would be placed
      	at I2, check that we can place that at I3 instead, before doing so.
      
      From-SVN: r251607
      Segher Boessenkool committed
    • re PR target/81766 (ICE in maybe_add_or_update_dep_1, at sched-deps.c:924 caused by r250815) · bff0050a
      	PR target/81766
      	* config/i386/i386.c (ix86_init_large_pic_reg): Return label instead of void.
      	(ix86_init_pic_reg): Remember label from ix86_init_large_pic_reg, if non-NULL
      	and preceded by NOTE_INSN_BASIC_BLOCK, swap the note and label.
      
      	* gcc.target/i386/pr81766.c: New test.
      
      From-SVN: r251606
      Jakub Jelinek committed
    • c-opts.c (c_common_finish): Write dependency information even if there are errors. · de7c2c6a
      	* c-opts.c (c_common_finish): Write dependency information even if
      	there are errors.
      
      From-SVN: r251605
      Boris Kolpackov committed
    • class.c (finish_struct_methods): Done clear DECL_IN_AGGR_P here. · beb8b5c1
      	* class.c (finish_struct_methods): Done clear DECL_IN_AGGR_P here.
      	Don't call maybe_warn_about_overly_private_class here.
      	(warn_hidden): Cleanup declarations and comments.
      	(type_has_user_provided_constructor): No need to check
      	CLASSTYPE_METHOD_VEC.
      	(type_has_user_provided_or_explicit_constructor): Likewise.
      	(classtype_has_move_assign_or_move_ctor_p): Likewise.
      	(check_bases_and_members): Don't call finish_struct_methods here.
      	(finish_struct_1): Call finish_struct_methods and
      	set_class_bindings immediately after layout.  Clear DECL_IN_AGGR_P
      	here.
      	(finish_struct): For templates process USING_DECLS and clear
      	DECL_IN_AGGR_P before calling finish_struct_methods. Call
      	maybe_warn_about_overly_private_class here.
      
      From-SVN: r251604
      Nathan Sidwell committed
    • Fix excess precision handling of compound assignments (PR c/82071). · e035be33
      PR c/82071 reports how compound assignment operators such as += handle
      excess precision inconsistently with the same operation done with a
      plain assignment and binary operator.
      
      There were (at least) two problems with how compound assignments
      handled excess precision.  The EXCESS_PRECISION_EXPR for an argument
      with excess precision was removed too early, resulting in
      build_binary_op being called with an rhs operand whose type reflected
      the evaluation format, so not having sufficient information to achieve
      the intended semantics in all cases, and then the code called
      c_fully_fold on the results of build_binary_op without allowing for
      the possibility of an EXCESS_PRECISION_EXPR as the result, so leading
      to double rounding of the result (first to its semantic type, then to
      the type of the LHS of the assignment) instead of the intended single
      rounding.
      
      This patch fixes those problems by keeping EXCESS_PRECISION_EXPRs
      further through build_modify_expr (and build_atomic_assign which it
      calls) and only removing them locally where appropriate.
      
      Note that while this patch should achieve *consistency*, that's
      consistency with the understanding of C99 semantics that I originally
      intended to implement.  For the particular case in the testcase, C11
      semantics (from N1531) differ from that understanding of C99
      semantics, in that an implicit conversion of an integer to floating
      point can have excess precision.  I intend to implement those C11
      semantics separately (conditional on flag_isoc11) (which will also
      mean that building conditional expressions can produce a result with
      excess precision even when the arguments lack excess precision, where
      previously it could not), and not to close the bug until that is also
      done.
      
      Tested for x86_64-pc-linux-gnu.
      
      	PR c/82071
      gcc/c:
      	* c-typeck.c (build_atomic_assign): Handle argument with excess
      	precision.  Ensure any EXCESS_PRECISION_EXPR is present in
      	argument passed to build_binary_op and convert_for_assignment but
      	not for call to c_fully_fold.
      	(build_modify_expr): Do not remove EXCESS_PRECISION_EXPR early.
      	Ensure build_binary_op is called with argument with original
      	semantic type.  Avoid calling c_fully_fold with an
      	EXCESS_PRECISION_EXPR from build_binary_op.
      
      gcc/testsuite:
      	* gcc.target/i386/excess-precision-7.c: New test.
      
      From-SVN: r251603
      Joseph Myers committed
    • varasm.c (bss_initializer_p): Do not put constants into .bss · 2ec399d8
      	* varasm.c (bss_initializer_p): Do not put constants into .bss
      	(categorize_decl_for_section): Handle bss_initializer_p returning
      	false when DECL_INITIAL is NULL.
      
      	* gcc.target/i386/const-in-bss.c: New test.
      
      From-SVN: r251602
      Joerg Sonnenberger committed
    • S/390: PR82012: Implement CAN_INLINE_P target hook. · db6bb1ec
      TARGET_CAN_INLINE_P must be implemented when supporting target
      attributes.
      
      gcc/ChangeLog:
      
      2017-09-01  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
      
      	PR target/82012
      	* config/s390/s390.c (s390_can_inline_p): New function.
      
      gcc/testsuite/ChangeLog:
      
      2017-09-01  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
      
      	PR target/82012
      	* gcc.target/s390/target-attribute/pr82012.c: New test.
      
      From-SVN: r251601
      Andreas Krebbel committed
    • re PR tree-optimization/82052 (ICE with "-O3 -m32" on x86_64-linux-gnu (internal… · 0e34f6d8
      re PR tree-optimization/82052 (ICE with "-O3 -m32" on x86_64-linux-gnu (internal compiler error: in pop_to_marker, at tree-ssa-scopedtables.c:71))
      
      	PR tree-optimization/82052
      	* tree-ssa-scopedtables.c (avail_exprs_stack::lookup_avail_expr):
      	Always initialize the returned slot after a hash table miss
      	when INSERT is true.
      
      	PR tree-optimization/82052
      	* gcc.c-torture/compile/pr82052.c: New test.
      
      From-SVN: r251600
      Jeff Law committed
    • retire mem_signal_fence pattern · 44acb9ba
      	* config/s390/s390.md (mem_signal_fence): Remove.
      	* doc/md.texi (mem_signal_fence): Remove.
      	* optabs.c (expand_mem_signal_fence): Remove uses of mem_signal_fence.
      	Update comments.
      	* target-insns.def (mem_signal_fence): Remove.
      
      From-SVN: r251597
      Alexander Monakov committed