1. 23 Oct, 2017 9 commits
    • PR libstdc++/82644 document IS 29124 support · 908d1d3a
      Also fix declarations of special functions in C++17, to import them into
      the global namespace in <math.h>, and to prevent defining the
      non-standard hypergeometric functions in strict mode.
      
      	PR libstdc++/82644
      	* doc/xml/manual/intro.xml: Include new section.
      	* doc/xml/manual/status_cxxis29124.xml: New section on IS 29124
      	status.
      	* include/bits/specfun.h [__STRICT_ANSI__] (hyperg, hypergf, hypergl)
      	(conf_hyperg, conf_hypergf, conf_hypergl): Don't declare.
      	* include/c_compatibility/math.h: Import special functions into
      	global namespace for C++17.
      	* testsuite/26_numerics/headers/cmath/82644.cc: New test.
      	* testsuite/26_numerics/headers/cmath/functions_global_c++17.cc: New
      	test.
      
      From-SVN: r254004
      Jonathan Wakely committed
    • Convert STARTING_FRAME_OFFSET to a hook · 2a31c321
      I took the documentation of the FRAME_GROWS_DOWNWARD behaviour from the
      version that was in most header files, since the one in the manual seemed
      less clear.
      
      The patch deliberately keeps FIRST_PARM_OFFSET(FNDECL) in
      microblaze_starting_frame_offset; this seems to be a port-local
      convention and takes advantage of the fact that FIRST_PARM_OFFSET
      doesn't read FNDECL.
      
      2017-10-23  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* target.def (starting_frame_offset): New hook.
      	* doc/tm.texi (STARTING_FRAME_OFFSET): Remove in favor of...
      	(TARGET_STARTING_FRAME_OFFSET): ...this new hook.
      	* doc/tm.texi.in: Regenerate.
      	* hooks.h (hook_hwi_void_0): Declare.
      	* hooks.c (hook_hwi_void_0): New function.
      	* doc/rtl.texi: Refer to TARGET_STARTING_FRAME_OFFSET instead of
      	STARTING_FRAME_OFFSET.
      	* builtins.c (expand_builtin_setjmp_receiver): Likewise.
      	* reload1.c (reload): Likewise.
      	* cfgexpand.c (expand_used_vars): Use targetm.starting_frame_offset
      	instead of STARTING_FRAME_OFFSET.
      	* function.c (try_fit_stack_local): Likewise.
      	(assign_stack_local_1): Likewise
      	(instantiate_virtual_regs): Likewise.
      	* rtlanal.c (rtx_addr_can_trap_p_1): Likewise.
      	* config/avr/avr.md (nonlocal_goto_receiver): Likewise.
      	* config/aarch64/aarch64.h (STARTING_FRAME_OFFSET): Delete.
      	* config/alpha/alpha.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/arc/arc.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/arm/arm.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/bfin/bfin.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/c6x/c6x.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/cr16/cr16.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/cris/cris.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/fr30/fr30.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/frv/frv.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/ft32/ft32.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/h8300/h8300.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/i386/i386.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/ia64/ia64.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/m32c/m32c.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/m68k/m68k.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/mcore/mcore.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/mn10300/mn10300.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/moxie/moxie.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/msp430/msp430.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/nds32/nds32.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/nios2/nios2.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/nvptx/nvptx.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/pdp11/pdp11.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/riscv/riscv.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/rl78/rl78.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/rx/rx.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/s390/s390.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/sh/sh.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/sparc/sparc.c (sparc_compute_frame_size): Likewise.
      	* config/sparc/sparc.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/spu/spu.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/stormy16/stormy16.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/tilegx/tilegx.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/tilepro/tilepro.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/v850/v850.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/visium/visium.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/avr/avr.h (STARTING_FRAME_OFFSET): Likewise.
      	* config/avr/avr-protos.h (avr_starting_frame_offset): Likewise.
      	* config/avr/avr.c (avr_starting_frame_offset): Make static and
      	return a HOST_WIDE_INT.
      	(avr_builtin_setjmp_frame_value): Use it instead of
      	STARTING_FRAME_OFFSET.
      	(TARGET_STARTING_FRAME_OFFSET): Redefine.
      	* config/epiphany/epiphany.h (STARTING_FRAME_OFFSET): Delete.
      	* config/epiphany/epiphany.c (epiphany_starting_frame_offset):
      	New function.
      	(TARGET_STARTING_FRAME_OFFSET): Redefine.
      	* config/iq2000/iq2000.h (STARTING_FRAME_OFFSET): Delete.
      	* config/iq2000/iq2000.c (iq2000_starting_frame_offset): New function.
      	(TARGET_CONSTANT_ALIGNMENT): Redefine.
      	* config/lm32/lm32.h (STARTING_FRAME_OFFSET): Delete.
      	* config/lm32/lm32.c (lm32_starting_frame_offset): New function.
      	(TARGET_STARTING_FRAME_OFFSET): Redefine.
      	* config/m32r/m32r.h (STARTING_FRAME_OFFSET): Delete.
      	* config/m32r/m32r.c (m32r_starting_frame_offset): New function.
      	(TARGET_STARTING_FRAME_OFFSET): Redefine.
      	* config/microblaze/microblaze.h (STARTING_FRAME_OFFSET): Delete.
      	* config/microblaze/microblaze.c (microblaze_starting_frame_offset):
      	New function.
      	(TARGET_STARTING_FRAME_OFFSET): Redefine.
      	* config/mips/mips.h (STARTING_FRAME_OFFSET): Delete.
      	* config/mips/mips.c (mips_compute_frame_info): Refer to
      	TARGET_STARTING_FRAME_OFFSET instead of STARTING_FRAME_OFFSET.
      	(mips_starting_frame_offset): New function.
      	(TARGET_STARTING_FRAME_OFFSET): Redefine.
      	* config/mmix/mmix.h (STARTING_FRAME_OFFSET): Delete.
      	* config/mmix/mmix-protos.h (mmix_starting_frame_offset): Delete.
      	* config/mmix/mmix.c (mmix_starting_frame_offset): Make static
      	and return a HOST_WIDE_INT.
      	(TARGET_STARTING_FRAME_OFFSET): Redefine.
      	(mmix_initial_elimination_offset): Refer to
      	TARGET_STARTING_FRAME_OFFSET instead of STARTING_FRAME_OFFSET.
      	* config/pa/pa.h (STARTING_FRAME_OFFSET): Delete.
      	* config/pa/pa.c (pa_starting_frame_offset): New function.
      	(pa_compute_frame_size): Use it instead of STARTING_FRAME_OFFSET.
      	(pa_expand_prologue): Likewise.
      	(TARGET_STARTING_FRAME_OFFSET): Redefine.
      	* config/powerpcspe/aix.h (STARTING_FRAME_OFFSET): Split out
      	!FRAME_GROWS_DOWNWARD handling to...
      	(RS6000_STARTING_FRAME_OFFSET): ...this new macro.
      	* config/powerpcspe/darwin.h (STARTING_FRAME_OFFSET): Split out
      	!FRAME_GROWS_DOWNWARD handling to...
      	(RS6000_STARTING_FRAME_OFFSET): ...this new macro.
      	* config/powerpcspe/powerpcspe.h (STARTING_FRAME_OFFSET): Split out
      	!FRAME_GROWS_DOWNWARD handling to...
      	(RS6000_STARTING_FRAME_OFFSET): ...this new macro.
      	* config/powerpcspe/powerpcspe.c (TARGET_STARTING_FRAME_OFFSET):
      	Redefine.
      	(rs6000_starting_frame_offset): New function.
      	* config/rs6000/aix.h (STARTING_FRAME_OFFSET): Split out
      	!FRAME_GROWS_DOWNWARD handling to...
      	(RS6000_STARTING_FRAME_OFFSET): ...this new macro.
      	* config/rs6000/darwin.h (STARTING_FRAME_OFFSET): Split out
      	!FRAME_GROWS_DOWNWARD handling to...
      	(RS6000_STARTING_FRAME_OFFSET): ...this new macro.
      	* config/rs6000/rs6000.h (STARTING_FRAME_OFFSET): Split out
      	!FRAME_GROWS_DOWNWARD handling to...
      	(RS6000_STARTING_FRAME_OFFSET): ...this new macro.
      	* config/rs6000/rs6000.c (TARGET_STARTING_FRAME_OFFSET): Refine.
      	(rs6000_starting_frame_offset): New function.
      	* config/vax/elf.h (STARTING_FRAME_OFFSET): Delete.
      	* config/vax/vax.h (STARTING_FRAME_OFFSET): Delete.
      	* config/vax/vax.c (vax_starting_frame_offset): New function.
      	(vax_expand_prologue): Use it instead of STARTING_FRAME_OFFSET.
      	(TARGET_STARTING_FRAME_OFFSET): Redefine.
      	* config/xtensa/xtensa.h (STARTING_FRAME_OFFSET): Delete.
      	* config/xtensa/xtensa.c (xtensa_starting_frame_offset): New function.
      	(TARGET_STARTING_FRAME_OFFSET): Redefine.
      	* system.h (STARTING_FRAME_OFFSET): Poison.
      
      From-SVN: r254003
      Richard Sandiford committed
    • Use SCALAR_TYPE_MODE in vect_create_epilog_for_reduction · 3ec43c5e
      This follows on from similar changes a couple of months ago and
      is needed when general modes have variable size.
      
      2017-10-23  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* tree-vect-loop.c (vect_create_epilog_for_reduction): Use
      	SCALAR_TYPE_MODE instead of TYPE_MODE.
      
      From-SVN: r254002
      Richard Sandiford committed
    • Use SCALAR_INT_TYPE_MODE in loc_list_from_tree_1 · 1fc50bea
      This follows on from similar changes a couple of months ago and
      is needed when general modes have variable size.
      
      2017-10-23  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* dwarf2out.c (loc_list_from_tree_1): Use SCALAR_INT_TYPE_MODE
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r254001
      Richard Sandiford committed
    • Use scalar_int/float_mode in brig_langhook_type_for_mode · 4603941e
      This follows on from similar changes a couple of months ago and
      is needed when general modes have variable size.
      
      2017-10-23  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/brig/
      	* brig-lang.c (brig_langhook_type_for_mode): Use scalar_int_mode
      	and scalar_float_mode.
      
      From-SVN: r254000
      Richard Sandiford committed
    • Use scalar_mode in expand_shift_1 · a85cf8e9
      Since this function handles scalar and vector shifts:
      
        machine_mode scalar_mode = mode;
        if (VECTOR_MODE_P (mode))
          scalar_mode = GET_MODE_INNER (mode);
      
      is equivalent to:
      
        scalar_mode = GET_MODE_INNER (mode);
      
      2017-10-23  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* expmed.c (expand_shift_1): Use scalar_mode for scalar_mode.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r253999
      Richard Sandiford committed
    • re PR tree-optimization/82129 (ICE in compute_antic, at tree-ssa-pre.c:2447) · eb0e98f8
      2017-10-23  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/82129
      	* tree-ssa-pre.c (bitmap_set_and): Remove.
      	(compute_antic_aux): Compute ANTIC_OUT intersection in a way
      	canonicalizing expressions in the set to those with lowest
      	ID rather than taking that from the first edge.
      
      	* gcc.dg/torture/pr82129.c: New testcase.
      
      From-SVN: r253998
      Richard Biener committed
    • Fix HWI + -unsigned in combine.c · 735d873d
      rtx_equal_for_field_assignment_p had:
      
       	x = adjust_address_nv (x, GET_MODE (y),
      			       -subreg_lowpart_offset (GET_MODE (x),
      						       GET_MODE (y)));
      
      But subreg_lowpart_offset returns an unsigned int and
      adjust_address_nv takes a HWI, so a subreg offset of 4 would
      give a memory offset of 0x00000000fffffffffc.
      
      2017-10-23  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* combine.c (rtx_equal_for_field_assignment_p): Use
      	byte_lowpart_offset.
      
      From-SVN: r253997
      Richard Sandiford committed
    • Daily bump. · 431c4417
      From-SVN: r253996
      GCC Administrator committed
  2. 22 Oct, 2017 11 commits
    • i386.c (ix86_builtin_vectorization_cost): Use existing rtx_cost latencies… · f802eb66
      i386.c (ix86_builtin_vectorization_cost): Use existing rtx_cost latencies instead of having separate table...
      
      
      	* i386.c (ix86_builtin_vectorization_cost): Use existing rtx_cost
      	latencies instead of having separate table; make difference between
      	integer and float costs.
      	* i386.h (processor_costs): Remove scalar_stmt_cost,
      	scalar_load_cost, scalar_store_cost, vec_stmt_cost, vec_to_scalar_cost,
      	scalar_to_vec_cost, vec_align_load_cost, vec_unalign_load_cost,
      	vec_store_cost.
      	* x86-tune-costs.h: Remove entries which has been removed in
      	procesor_costs from all tables; make cond_taken_branch_cost
      	and cond_not_taken_branch_cost COST_N_INSNS based.
      
      From-SVN: r253993
      Jan Hubicka committed
    • SUBREG_PROMOTED_VAR_P handling in expand_direct_optab_fn · b7753f75
      This is needed by the later SVE LAST reductions, where an 8-bit
      or 16-bit result is zero- rather than sign-extended to 32 bits.
      I think it could occur in other situations too.
      
      2017-09-19  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* internal-fn.c (expand_direct_optab_fn): Don't assign directly
      	to a SUBREG_PROMOTED_VAR.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r253992
      Richard Sandiford committed
    • Make more use of GET_MODE_UNIT_PRECISION · bb06a2d8
      This patch is like the earlier GET_MODE_UNIT_SIZE one,
      but for precisions rather than sizes.  There is one behavioural
      change in expand_debug_expr: we shouldn't use lowpart subregs
      for non-scalar truncations, since that would just reinterpret
      some of the scalars and drop the rest.  (This probably doesn't
      trigger in practice.)  Using TRUNCATE is fine for scalars,
      since simplify_gen_unary knows when a subreg can be used.
      
      2017-10-22  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* cfgexpand.c (expand_debug_expr): Use GET_MODE_UNIT_PRECISION.
      	(expand_debug_source_expr): Likewise.
      	* combine.c (combine_simplify_rtx): Likewise.
      	* cse.c (fold_rtx): Likewise.
      	* optabs.c (expand_float): Likewise.
      	* simplify-rtx.c (simplify_unary_operation_1): Likewise.
      	(simplify_binary_operation_1): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r253991
      Richard Sandiford committed
    • Make more use of HWI_COMPUTABLE_MODE_P · 1e3734f5
      This patch uses HWI_COMPUTABLE_MODE_P (X) instead of
      GET_MODE_PRECISION (X) <= HOST_BITS_PER_WIDE_INT in cases
      where X also needs to be a scalar integer.
      
      2017-10-22  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* combine.c (simplify_comparison): Use HWI_COMPUTABLE_MODE_P.
      	(record_promoted_value): Likewise.
      	* expr.c (expand_expr_real_2): Likewise.
      	* ree.c (update_reg_equal_equiv_notes): Likewise.
      	(combine_set_extension): Likewise.
      	* rtlanal.c (low_bitmask_len): Likewise.
      	* simplify-rtx.c (neg_const_int): Likewise.
      	(simplify_binary_operation_1): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r253990
      Richard Sandiford committed
    • Make more use of subreg_size_lowpart_offset · e10326ff
      This patch uses subreg_size_lowpart_offset in places that open-coded
      the calculation.  The reload use (and the LRA one that was based on it)
      seemed to ignore the BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN case; it's not
      obvious whether that was deliberate or an oversight.
      
      2017-10-22  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* lra-spills.c (assign_mem_slot): Use subreg_size_lowpart_offset.
      	* regcprop.c (maybe_mode_change): Likewise.
      	* reload1.c (alter_reg): Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r253989
      Richard Sandiford committed
    • Add wide_int version of inchash::hash::add_wide_int · cae115d6
      This patch adds an inchash hasher for wide_int-based types.
      It means that hash_tree no longer hashes TREE_INT_CST_EXT_NUNITS,
      but that was redundant with hashing the type.
      
      2017-10-22  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* inchash.h (inchash::hash::add_wide_int): New function.
      	* lto-streamer-out.c (hash_tree): Use it.
      
      From-SVN: r253988
      Richard Sandiford committed
    • Rename inchash::hash::add_wide_int · 449e9a33
      The name inchash::add_wide_int is a bit misleading, since it sounds
      like it's hashing a wide_int.  This patch renames it to add_hwi instead.
      
      2017-10-22  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* inchash.h (inchash::hash::add_wide_int): Rename to...
      	(inchash::hash::add_hwi): ...this.
      	* ipa-devirt.c (hash_odr_vtable): Update accordingly.
      	(polymorphic_call_target_hasher::hash): Likewise.
      	* ipa-icf.c (sem_function::get_hash, sem_function::init): Likewise.
      	(sem_item::add_expr, sem_item::add_type, sem_variable::get_hash)
      	(sem_item_optimizer::update_hash_by_addr_refs): Likewise.
      	* lto-streamer-out.c (hash_tree): Likewise.
      	* optc-save-gen.awk: Likewise.
      	* tree.c (add_expr): Likewise.
      
      From-SVN: r253987
      Richard Sandiford committed
    • re PR target/52451 (gcc w/i387 float generates fucom rather than fcom for… · ef1e3836
      re PR target/52451 (gcc w/i387 float generates fucom rather than fcom for floating point comparsons)
      
      	PR target/52451
      	* config/i386/i386.c (ix86_fp_compare_mode): Return CCFPmode
      	for ordered inequality comparisons even with TARGET_IEEE_FP.
      
      testsuite/ChangeLog:
      
      	PR target/52451
      	* gcc.dg/torture/pr52451.c: New test.
      
      From-SVN: r253986
      Uros Bizjak committed
    • re PR rtl-optimization/82628 (wrong code at -Os on x86_64-linux-gnu in the 32-bit mode) · 8cc857f9
      	PR target/82628
      	* config/i386/i386.md (cmp<dwi>_doubleword): New pattern.
      	* config/i386/i386.c (ix86_expand_branch) <case E_TImode>:
      	Expand with cmp<dwi>_doubleword.
      
      testsuite/ChangeLog:
      
      	PR target/82628
      	* gcc.dg/torture/pr82628.c: New test.
      
      
      Co-Authored-By: Jakub Jelinek <jakub@redhat.com>
      
      From-SVN: r253985
      Uros Bizjak committed
    • Move 2 tests from c-c++-common/ to gcc.target/i386/ directory. · 00c378a9
      	* c-c++-common/attr-nocf-check-1a.c: Remove test.
      	* c-c++-common/attr-nocf-check-3a.c: Likewise.
      	* gcc.target/i386/attr-nocf-check-1a.c: Add test.
      	* gcc.target/i386/attr-nocf-check-3a.c: Likewise.
      
      From-SVN: r253984
      Igor Tsimbalist committed
    • Daily bump. · 77a657bf
      From-SVN: r253982
      GCC Administrator committed
  3. 21 Oct, 2017 11 commits
    • Add x86 tests for Intel CET implementation. · 9ae222ad
      gcc/testsuite/
      
      	* c-c++-common/attr-nocf-check-1.c: Shorten a cheking message.
      	* c-c++-common/attr-nocf-check-3.c: Likewise.
      	* c-c++-common/fcf-protection-1.c: Add x86 specific message.
      	* c-c++-common/fcf-protection-2.c: Likewise.
      	* c-c++-common/fcf-protection-3.c: Likewise.
      	* c-c++-common/fcf-protection-5.c: Likewise.
      	* c-c++-common/attr-nocf-check-1a.c: New test.
      	* c-c++-common/attr-nocf-check-3a.c: Likewise.
      	* g++.dg/cet-notrack-1.C: Likewise.
      	* gcc.target/i386/cet-intrin-1.c: Likewise.
      	* gcc.target/i386/cet-intrin-10.c: Likewise.
      	* gcc.target/i386/cet-intrin-2.c: Likewise.
      	* gcc.target/i386/cet-intrin-3.c: Likewise.
      	* gcc.target/i386/cet-intrin-4.c: Likewise.
      	* gcc.target/i386/cet-intrin-5.c: Likewise.
      	* gcc.target/i386/cet-intrin-6.c: Likewise.
      	* gcc.target/i386/cet-intrin-7.c: Likewise.
      	* gcc.target/i386/cet-intrin-8.c: Likewise.
      	* gcc.target/i386/cet-intrin-9.c: Likewise.
      	* gcc.target/i386/cet-label.c: Likewise.
      	* gcc.target/i386/cet-notrack-1a.c: Likewise.
      	* gcc.target/i386/cet-notrack-1b.c: Likewise.
      	* gcc.target/i386/cet-notrack-2a.c: Likewise.
      	* gcc.target/i386/cet-notrack-2b.c: Likewise.
      	* gcc.target/i386/cet-notrack-3.c: Likewise.
      	* gcc.target/i386/cet-notrack-4a.c: Likewise.
      	* gcc.target/i386/cet-notrack-4b.c: Likewise.
      	* gcc.target/i386/cet-notrack-5a.c: Likewise.
      	* gcc.target/i386/cet-notrack-5b.c: Likewise.
      	* gcc.target/i386/cet-notrack-6a.c: Likewise.
      	* gcc.target/i386/cet-notrack-6b.c: Likewise.
      	* gcc.target/i386/cet-notrack-7.c: Likewise.
      	* gcc.target/i386/cet-property-1.c: Likewise.
      	* gcc.target/i386/cet-property-2.c: Likewise.
      	* gcc.target/i386/cet-rdssp-1.c: Likewise.
      	* gcc.target/i386/cet-sjlj-1.c: Likewise.
      	* gcc.target/i386/cet-sjlj-2.c: Likewise.
      	* gcc.target/i386/cet-sjlj-3.c: Likewise.
      	* gcc.target/i386/cet-switch-1.c: Likewise.
      	* gcc.target/i386/cet-switch-2.c: Likewise.
      	* lib/target-supports.exp (check_effective_target_cet): New
      	proc.
      
      From-SVN: r253979
      Igor Tsimbalist committed
    • Add x86 CET documentation. · ccdf009d
      gcc/doc/
      	* extend.texi: Add x86 specific to 'nocf_check' attribute.
      	List CET intrinsics.
      	* invoke.texi: Add -mcet, -mibt, -mshstk options.  Add x86
      	specific to -fcf-protection option.
      
      From-SVN: r253978
      Igor Tsimbalist committed
    • Update x86 backend to enable Intel CET. · 2a25448c
      All platforms except i386 will report the error and do no
      instrumentation with -finstrument-control-flow option. i386
      will provide the implementation based on a specification
      published by Intel for a new technology called Control-flow
      Enforcement Technology (CET). The spec is available at
      
      https://software.intel.com/sites/default/files/managed/4d/2a/control-flow-enforcement-technology-preview.pdf
      
      The implementation in this patch:
      1) enables Control-flow Enforcement Technology (CET), published by
      Intel. This part introduces i386 specific options -mcet, -mibt and
      -mshstk, new instructions and intrinsics;
      
      2) provides support for -fcf-protection option and 'nocf_check'
      attribute by doing needed code instrumentation, which is based on
      CET features.
      
      gcc/
      
      	* common/config/i386/i386-common.c (OPTION_MASK_ISA_IBT_SET): New.
      	(OPTION_MASK_ISA_SHSTK_SET): Likewise.
      	(OPTION_MASK_ISA_IBT_UNSET): Likewise.
      	(OPTION_MASK_ISA_SHSTK_UNSET): Likewise.
      	(ix86_handle_option): Add -mibt, -mshstk, -mcet handling.
      	* config.gcc (extra_headers): Add cetintrin.h for x86 targets.
      	(extra_objs): Add cet.o for Linux/x86 targets.
      	(tmake_file): Add i386/t-cet for Linux/x86 targets.
      	* config/i386/cet.c: New file.
      	* config/i386/cetintrin.h: Likewise.
      	* config/i386/t-cet: Likewise.
      	* config/i386/cpuid.h (bit_SHSTK): New.
      	(bit_IBT): Likewise.
      	* config/i386/driver-i386.c (host_detect_local_cpu): Detect and
      	pass IBT and SHSTK bits.
      	* config/i386/i386-builtin-types.def
      	(VOID_FTYPE_UNSIGNED_PVOID): New.
      	(VOID_FTYPE_UINT64_PVOID): Likewise.
      	* config/i386/i386-builtin.def: Add CET intrinsics.
      	* config/i386/i386-c.c (ix86_target_macros_internal): Add
      	OPTION_MASK_ISA_IBT, OPTION_MASK_ISA_SHSTK handling.
      	* config/i386/i386-passes.def: Add pass_insert_endbranch pass.
      	* config/i386/i386-protos.h (make_pass_insert_endbranch): New
      	prototype.
      	* config/i386/i386.c (rest_of_insert_endbranch): New.
      	(pass_data_insert_endbranch): Likewise.
      	(pass_insert_endbranch): Likewise.
      	(make_pass_insert_endbranch): Likewise.
      	(ix86_notrack_prefixed_insn_p): Likewise.
      	(ix86_target_string): Add -mibt, -mshstk flags.
      	(ix86_option_override_internal): Add flag_cf_protection
      	processing.
      	(ix86_valid_target_attribute_inner_p): Set OPT_mibt, OPT_mshstk.
      	(ix86_print_operand): Add 'notrack' prefix output.
      	(ix86_init_mmx_sse_builtins): Add CET intrinsics.
      	(ix86_expand_builtin): Expand CET intrinsics.
      	(x86_output_mi_thunk): Add 'endbranch' instruction.
      	* config/i386/i386.h (TARGET_IBT): New.
      	(TARGET_IBT_P): Likewise.
      	(TARGET_SHSTK): Likewise.
      	(TARGET_SHSTK_P): Likewise.
      	   * config/i386/i386.md (unspecv): Add UNSPECV_NOP_RDSSP,
      	UNSPECV_INCSSP, UNSPECV_SAVEPREVSSP, UNSPECV_RSTORSSP,
      	UNSPECV_WRSS, UNSPECV_WRUSS, UNSPECV_SETSSBSY, UNSPECV_CLRSSBSY.
      	(builtin_setjmp_setup): New pattern.
      	(builtin_longjmp): Likewise.
      	(rdssp<mode>): Likewise.
      	(incssp<mode>): Likewise.
      	(saveprevssp): Likewise.
      	(rstorssp): Likewise.
      	(wrss<mode>): Likewise.
      	(wruss<mode>): Likewise.
      	(setssbsy): Likewise.
      	(clrssbsy): Likewise.
      	(nop_endbr): Likewise.
      	* config/i386/i386.opt: Add -mcet, -mibt, -mshstk and -mcet-switch
      	options.
      	* config/i386/immintrin.h: Include <cetintrin.h>.
      	* config/i386/linux-common.h
      	(file_end_indicate_exec_stack_and_cet): New prototype.
      	(TARGET_ASM_FILE_END): New.
      
      From-SVN: r253977
      Igor Tsimbalist committed
    • pr79683.c: Disable costmodel. · f6fd8f2b
      
      	* gcc.target/i386/pr79683.c: Disable costmodel.
      	* i386.c (ix86_builtin_vectorization_cost): Use existing rtx_cost
      	latencies instead of having separate table; make difference between
      	integer and float costs.
      	* i386.h (processor_costs): Remove scalar_stmt_cost,
      	scalar_load_cost, scalar_store_cost, vec_stmt_cost, vec_to_scalar_cost,
      	scalar_to_vec_cost, vec_align_load_cost, vec_unalign_load_cost,
      	vec_store_cost.
      	* x86-tune-costs.h: Remove entries which has been removed in
      	procesor_costs from all tables; make cond_taken_branch_cost
      	and cond_not_taken_branch_cost COST_N_INSNS based.
      Index: testsuite/gcc.target/i386/pr79683.c
      ===================================================================
      --- testsuite/gcc.target/i386/pr79683.c	(revision 253957)
      +++ testsuite/gcc.target/i386/pr79683.c	(working copy)
      @@ -1,5 +1,5 @@
       /* { dg-do compile } */
      -/* { dg-options "-O3 -msse2" } */
      +/* { dg-options "-O3 -msse2 -fvect-cost-model=unlimited" } */
       
       struct s {
           __INT64_TYPE__ a;
      Index: config/i386/i386.c
      ===================================================================
      --- config/i386/i386.c	(revision 253957)
      +++ config/i386/i386.c	(working copy)
      @@ -44051,37 +44051,61 @@ static int
       ix86_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost,
                                        tree vectype, int)
       {
      +  bool fp = false;
      +  machine_mode mode = TImode;
      +  if (vectype != NULL)
      +    {
      +      fp = FLOAT_TYPE_P (vectype);
      +      mode = TYPE_MODE (vectype);
      +    }
      +
         switch (type_of_cost)
           {
             case scalar_stmt:
      -        return ix86_cost->scalar_stmt_cost;
      +        return fp ? ix86_cost->addss : COSTS_N_INSNS (1);
       
             case scalar_load:
      -        return ix86_cost->scalar_load_cost;
      +	/* load/store costs are relative to register move which is 2. Recompute
      + 	   it to COSTS_N_INSNS so everything have same base.  */
      +        return COSTS_N_INSNS (fp ? ix86_cost->sse_load[0]
      +			      : ix86_cost->int_load [2]) / 2;
       
             case scalar_store:
      -        return ix86_cost->scalar_store_cost;
      +        return COSTS_N_INSNS (fp ? ix86_cost->sse_store[0]
      +			      : ix86_cost->int_store [2]) / 2;
       
             case vector_stmt:
      -        return ix86_cost->vec_stmt_cost;
      +        return ix86_vec_cost (mode,
      +			      fp ? ix86_cost->addss : ix86_cost->sse_op,
      +			      true);
       
             case vector_load:
      -        return ix86_cost->vec_align_load_cost;
      +        return ix86_vec_cost (mode,
      +			      COSTS_N_INSNS (ix86_cost->sse_load[2]) / 2,
      +			      true);
       
             case vector_store:
      -        return ix86_cost->vec_store_cost;
      +        return ix86_vec_cost (mode,
      +			      COSTS_N_INSNS (ix86_cost->sse_store[2]) / 2,
      +			      true);
       
             case vec_to_scalar:
      -        return ix86_cost->vec_to_scalar_cost;
      -
             case scalar_to_vec:
      -        return ix86_cost->scalar_to_vec_cost;
      +        return ix86_vec_cost (mode, ix86_cost->sse_op, true);
       
      +      /* We should have separate costs for unaligned loads and gather/scatter.
      +	 Do that incrementally.  */
             case unaligned_load:
      -      case unaligned_store:
             case vector_gather_load:
      +        return ix86_vec_cost (mode,
      +			      COSTS_N_INSNS (ix86_cost->sse_load[2]),
      +			      true);
      +
      +      case unaligned_store:
             case vector_scatter_store:
      -        return ix86_cost->vec_unalign_load_cost;
      +        return ix86_vec_cost (mode,
      +			      COSTS_N_INSNS (ix86_cost->sse_store[2]),
      +			      true);
       
             case cond_branch_taken:
               return ix86_cost->cond_taken_branch_cost;
      @@ -44091,10 +44115,11 @@ ix86_builtin_vectorization_cost (enum ve
       
             case vec_perm:
             case vec_promote_demote:
      -        return ix86_cost->vec_stmt_cost;
      +        return ix86_vec_cost (mode,
      +			      ix86_cost->sse_op, true);
       
             case vec_construct:
      -	return ix86_cost->vec_stmt_cost * (TYPE_VECTOR_SUBPARTS (vectype) - 1);
      +	return ix86_vec_cost (mode, ix86_cost->sse_op, false);
       
             default:
               gcc_unreachable ();
      Index: config/i386/i386.h
      ===================================================================
      --- config/i386/i386.h	(revision 253957)
      +++ config/i386/i386.h	(working copy)
      @@ -277,18 +277,6 @@ struct processor_costs {
       				   parallel.  See also
       				   ix86_reassociation_width.  */
         struct stringop_algs *memcpy, *memset;
      -  const int scalar_stmt_cost;   /* Cost of any scalar operation, excluding
      -				   load and store.  */
      -  const int scalar_load_cost;   /* Cost of scalar load.  */
      -  const int scalar_store_cost;  /* Cost of scalar store.  */
      -  const int vec_stmt_cost;      /* Cost of any vector operation, excluding
      -                                   load, store, vector-to-scalar and
      -                                   scalar-to-vector operation.  */
      -  const int vec_to_scalar_cost;    /* Cost of vect-to-scalar operation.  */
      -  const int scalar_to_vec_cost;    /* Cost of scalar-to-vector operation.  */
      -  const int vec_align_load_cost;   /* Cost of aligned vector load.  */
      -  const int vec_unalign_load_cost; /* Cost of unaligned vector load.  */
      -  const int vec_store_cost;        /* Cost of vector store.  */
         const int cond_taken_branch_cost;    /* Cost of taken branch for vectorizer
       					  cost model.  */
         const int cond_not_taken_branch_cost;/* Cost of not taken branch for
      Index: config/i386/x86-tune-costs.h
      ===================================================================
      --- config/i386/x86-tune-costs.h	(revision 253958)
      +++ config/i386/x86-tune-costs.h	(working copy)
      @@ -79,17 +79,8 @@ struct processor_costs ix86_size_cost =
         1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         ix86_size_memcpy,
         ix86_size_memset,
      -  1,					/* scalar_stmt_cost.  */
      -  1,					/* scalar load_cost.  */
      -  1,					/* scalar_store_cost.  */
      -  1,					/* vec_stmt_cost.  */
      -  1,					/* vec_to_scalar_cost.  */
      -  1,					/* scalar_to_vec_cost.  */
      -  1,					/* vec_align_load_cost.  */
      -  1,					/* vec_unalign_load_cost.  */
      -  1,					/* vec_store_cost.  */
      -  1,					/* cond_taken_branch_cost.  */
      -  1,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_BYTES (1),			/* cond_taken_branch_cost.  */
      +  COSTS_N_BYTES (1),			/* cond_not_taken_branch_cost.  */
       };
       
       /* Processor costs (relative to an add) */
      @@ -167,17 +158,8 @@ struct processor_costs i386_cost = {	/*
         1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         i386_memcpy,
         i386_memset,
      -  1,					/* scalar_stmt_cost.  */
      -  1,					/* scalar load_cost.  */
      -  1,					/* scalar_store_cost.  */
      -  1,					/* vec_stmt_cost.  */
      -  1,					/* vec_to_scalar_cost.  */
      -  1,					/* scalar_to_vec_cost.  */
      -  1,					/* vec_align_load_cost.  */
      -  2,					/* vec_unalign_load_cost.  */
      -  1,					/* vec_store_cost.  */
      -  3,					/* cond_taken_branch_cost.  */
      -  1,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (3),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (1),			/* cond_not_taken_branch_cost.  */
       };
       
       static stringop_algs i486_memcpy[2] = {
      @@ -256,17 +238,8 @@ struct processor_costs i486_cost = {	/*
         1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         i486_memcpy,
         i486_memset,
      -  1,					/* scalar_stmt_cost.  */
      -  1,					/* scalar load_cost.  */
      -  1,					/* scalar_store_cost.  */
      -  1,					/* vec_stmt_cost.  */
      -  1,					/* vec_to_scalar_cost.  */
      -  1,					/* scalar_to_vec_cost.  */
      -  1,					/* vec_align_load_cost.  */
      -  2,					/* vec_unalign_load_cost.  */
      -  1,					/* vec_store_cost.  */
      -  3,					/* cond_taken_branch_cost.  */
      -  1,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (3),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (1),			/* cond_not_taken_branch_cost.  */
       };
       
       static stringop_algs pentium_memcpy[2] = {
      @@ -343,17 +316,8 @@ struct processor_costs pentium_cost = {
         1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         pentium_memcpy,
         pentium_memset,
      -  1,					/* scalar_stmt_cost.  */
      -  1,					/* scalar load_cost.  */
      -  1,					/* scalar_store_cost.  */
      -  1,					/* vec_stmt_cost.  */
      -  1,					/* vec_to_scalar_cost.  */
      -  1,					/* scalar_to_vec_cost.  */
      -  1,					/* vec_align_load_cost.  */
      -  2,					/* vec_unalign_load_cost.  */
      -  1,					/* vec_store_cost.  */
      -  3,					/* cond_taken_branch_cost.  */
      -  1,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (3),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (1),			/* cond_not_taken_branch_cost.  */
       };
       
       static const
      @@ -423,17 +387,8 @@ struct processor_costs lakemont_cost = {
         1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         pentium_memcpy,
         pentium_memset,
      -  1,					/* scalar_stmt_cost.  */
      -  1,					/* scalar load_cost.  */
      -  1,					/* scalar_store_cost.  */
      -  1,					/* vec_stmt_cost.  */
      -  1,					/* vec_to_scalar_cost.  */
      -  1,					/* scalar_to_vec_cost.  */
      -  1,					/* vec_align_load_cost.  */
      -  2,					/* vec_unalign_load_cost.  */
      -  1,					/* vec_store_cost.  */
      -  3,					/* cond_taken_branch_cost.  */
      -  1,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (3),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (1),			/* cond_not_taken_branch_cost.  */
       };
       
       /* PentiumPro has optimized rep instructions for blocks aligned by 8 bytes
      @@ -518,17 +473,8 @@ struct processor_costs pentiumpro_cost =
         1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         pentiumpro_memcpy,
         pentiumpro_memset,
      -  1,					/* scalar_stmt_cost.  */
      -  1,					/* scalar load_cost.  */
      -  1,					/* scalar_store_cost.  */
      -  1,					/* vec_stmt_cost.  */
      -  1,					/* vec_to_scalar_cost.  */
      -  1,					/* scalar_to_vec_cost.  */
      -  1,					/* vec_align_load_cost.  */
      -  2,					/* vec_unalign_load_cost.  */
      -  1,					/* vec_store_cost.  */
      -  3,					/* cond_taken_branch_cost.  */
      -  1,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (3),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (1),			/* cond_not_taken_branch_cost.  */
       };
       
       static stringop_algs geode_memcpy[2] = {
      @@ -605,17 +551,8 @@ struct processor_costs geode_cost = {
         1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         geode_memcpy,
         geode_memset,
      -  1,					/* scalar_stmt_cost.  */
      -  1,					/* scalar load_cost.  */
      -  1,					/* scalar_store_cost.  */
      -  1,					/* vec_stmt_cost.  */
      -  1,					/* vec_to_scalar_cost.  */
      -  1,					/* scalar_to_vec_cost.  */
      -  1,					/* vec_align_load_cost.  */
      -  2,					/* vec_unalign_load_cost.  */
      -  1,					/* vec_store_cost.  */
      -  3,					/* cond_taken_branch_cost.  */
      -  1,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (3),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (1),			/* cond_not_taken_branch_cost.  */
       };
       
       static stringop_algs k6_memcpy[2] = {
      @@ -694,17 +631,8 @@ struct processor_costs k6_cost = {
         1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         k6_memcpy,
         k6_memset,
      -  1,					/* scalar_stmt_cost.  */
      -  1,					/* scalar load_cost.  */
      -  1,					/* scalar_store_cost.  */
      -  1,					/* vec_stmt_cost.  */
      -  1,					/* vec_to_scalar_cost.  */
      -  1,					/* scalar_to_vec_cost.  */
      -  1,					/* vec_align_load_cost.  */
      -  2,					/* vec_unalign_load_cost.  */
      -  1,					/* vec_store_cost.  */
      -  3,					/* cond_taken_branch_cost.  */
      -  1,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (3),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (1),			/* cond_not_taken_branch_cost.  */
       };
       
       /* For some reason, Athlon deals better with REP prefix (relative to loops)
      @@ -784,17 +712,8 @@ struct processor_costs athlon_cost = {
         1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         athlon_memcpy,
         athlon_memset,
      -  1,					/* scalar_stmt_cost.  */
      -  1,					/* scalar load_cost.  */
      -  1,					/* scalar_store_cost.  */
      -  1,					/* vec_stmt_cost.  */
      -  1,					/* vec_to_scalar_cost.  */
      -  1,					/* scalar_to_vec_cost.  */
      -  1,					/* vec_align_load_cost.  */
      -  2,					/* vec_unalign_load_cost.  */
      -  1,					/* vec_store_cost.  */
      -  3,					/* cond_taken_branch_cost.  */
      -  1,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (3),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (1),			/* cond_not_taken_branch_cost.  */
       };
       
       /* K8 has optimized REP instruction for medium sized blocks, but for very
      @@ -883,17 +802,8 @@ struct processor_costs k8_cost = {
         1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         k8_memcpy,
         k8_memset,
      -  4,					/* scalar_stmt_cost.  */
      -  2,					/* scalar load_cost.  */
      -  2,					/* scalar_store_cost.  */
      -  5,					/* vec_stmt_cost.  */
      -  0,					/* vec_to_scalar_cost.  */
      -  2,					/* scalar_to_vec_cost.  */
      -  2,					/* vec_align_load_cost.  */
      -  3,					/* vec_unalign_load_cost.  */
      -  3,					/* vec_store_cost.  */
      -  3,					/* cond_taken_branch_cost.  */
      -  2,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (3),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (2),			/* cond_not_taken_branch_cost.  */
       };
       
       /* AMDFAM10 has optimized REP instruction for medium sized blocks, but for
      @@ -989,17 +899,8 @@ struct processor_costs amdfam10_cost = {
         1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         amdfam10_memcpy,
         amdfam10_memset,
      -  4,					/* scalar_stmt_cost.  */
      -  2,					/* scalar load_cost.  */
      -  2,					/* scalar_store_cost.  */
      -  6,					/* vec_stmt_cost.  */
      -  0,					/* vec_to_scalar_cost.  */
      -  2,					/* scalar_to_vec_cost.  */
      -  2,					/* vec_align_load_cost.  */
      -  2,					/* vec_unalign_load_cost.  */
      -  2,					/* vec_store_cost.  */
      -  2,					/* cond_taken_branch_cost.  */
      -  1,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (2),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (1),			/* cond_not_taken_branch_cost.  */
       };
       
       /*  BDVER1 has optimized REP instruction for medium sized blocks, but for
      @@ -1097,17 +998,8 @@ const struct processor_costs bdver1_cost
         1, 2, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         bdver1_memcpy,
         bdver1_memset,
      -  6,					/* scalar_stmt_cost.  */
      -  4,					/* scalar load_cost.  */
      -  4,					/* scalar_store_cost.  */
      -  6,					/* vec_stmt_cost.  */
      -  0,					/* vec_to_scalar_cost.  */
      -  2,					/* scalar_to_vec_cost.  */
      -  4,					/* vec_align_load_cost.  */
      -  4,					/* vec_unalign_load_cost.  */
      -  4,					/* vec_store_cost.  */
      -  4,					/* cond_taken_branch_cost.  */
      -  2,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (4),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (2),			/* cond_not_taken_branch_cost.  */
       };
       
       /*  BDVER2 has optimized REP instruction for medium sized blocks, but for
      @@ -1206,17 +1098,8 @@ const struct processor_costs bdver2_cost
         1, 2, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         bdver2_memcpy,
         bdver2_memset,
      -  6,					/* scalar_stmt_cost.  */
      -  4,					/* scalar load_cost.  */
      -  4,					/* scalar_store_cost.  */
      -  6,					/* vec_stmt_cost.  */
      -  0,					/* vec_to_scalar_cost.  */
      -  2,					/* scalar_to_vec_cost.  */
      -  4,					/* vec_align_load_cost.  */
      -  4,					/* vec_unalign_load_cost.  */
      -  4,					/* vec_store_cost.  */
      -  4,					/* cond_taken_branch_cost.  */
      -  2,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (4),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (2),			/* cond_not_taken_branch_cost.  */
       };
       
       
      @@ -1306,17 +1189,8 @@ struct processor_costs bdver3_cost = {
         1, 2, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         bdver3_memcpy,
         bdver3_memset,
      -  6,					/* scalar_stmt_cost.  */
      -  4,					/* scalar load_cost.  */
      -  4,					/* scalar_store_cost.  */
      -  6,					/* vec_stmt_cost.  */
      -  0,					/* vec_to_scalar_cost.  */
      -  2,					/* scalar_to_vec_cost.  */
      -  4,					/* vec_align_load_cost.  */
      -  4,					/* vec_unalign_load_cost.  */
      -  4,					/* vec_store_cost.  */
      -  4,					/* cond_taken_branch_cost.  */
      -  2,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (4),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (2),			/* cond_not_taken_branch_cost.  */
       };
       
       /*  BDVER4 has optimized REP instruction for medium sized blocks, but for
      @@ -1405,17 +1279,8 @@ struct processor_costs bdver4_cost = {
         1, 2, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         bdver4_memcpy,
         bdver4_memset,
      -  6,					/* scalar_stmt_cost.  */
      -  4,					/* scalar load_cost.  */
      -  4,					/* scalar_store_cost.  */
      -  6,					/* vec_stmt_cost.  */
      -  0,					/* vec_to_scalar_cost.  */
      -  2,					/* scalar_to_vec_cost.  */
      -  4,					/* vec_align_load_cost.  */
      -  4,					/* vec_unalign_load_cost.  */
      -  4,					/* vec_store_cost.  */
      -  4,					/* cond_taken_branch_cost.  */
      -  2,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (4),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (2),			/* cond_not_taken_branch_cost.  */
       };
       
       
      @@ -1524,17 +1389,8 @@ struct processor_costs znver1_cost = {
         4, 4, 3, 6,				/* reassoc int, fp, vec_int, vec_fp.  */
         znver1_memcpy,
         znver1_memset,
      -  6,					/* scalar_stmt_cost.  */
      -  4,					/* scalar load_cost.  */
      -  4,					/* scalar_store_cost.  */
      -  6,					/* vec_stmt_cost.  */
      -  0,					/* vec_to_scalar_cost.  */
      -  2,					/* scalar_to_vec_cost.  */
      -  4,					/* vec_align_load_cost.  */
      -  4,					/* vec_unalign_load_cost.  */
      -  4,					/* vec_store_cost.  */
      -  4,					/* cond_taken_branch_cost.  */
      -  2,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (4),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (2),			/* cond_not_taken_branch_cost.  */
       };
       
         /* BTVER1 has optimized REP instruction for medium sized blocks, but for
      @@ -1624,17 +1480,8 @@ const struct processor_costs btver1_cost
         1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         btver1_memcpy,
         btver1_memset,
      -  4,					/* scalar_stmt_cost.  */
      -  2,					/* scalar load_cost.  */
      -  2,					/* scalar_store_cost.  */
      -  6,					/* vec_stmt_cost.  */
      -  0,					/* vec_to_scalar_cost.  */
      -  2,					/* scalar_to_vec_cost.  */
      -  2,					/* vec_align_load_cost.  */
      -  2,					/* vec_unalign_load_cost.  */
      -  2,					/* vec_store_cost.  */
      -  2,					/* cond_taken_branch_cost.  */
      -  1,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (2),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (1),			/* cond_not_taken_branch_cost.  */
       };
       
       static stringop_algs btver2_memcpy[2] = {
      @@ -1721,17 +1568,8 @@ const struct processor_costs btver2_cost
         1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         btver2_memcpy,
         btver2_memset,
      -  4,					/* scalar_stmt_cost.  */
      -  2,					/* scalar load_cost.  */
      -  2,					/* scalar_store_cost.  */
      -  6,					/* vec_stmt_cost.  */
      -  0,					/* vec_to_scalar_cost.  */
      -  2,					/* scalar_to_vec_cost.  */
      -  2,					/* vec_align_load_cost.  */
      -  2,					/* vec_unalign_load_cost.  */
      -  2,					/* vec_store_cost.  */
      -  2,					/* cond_taken_branch_cost.  */
      -  1,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (2),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (1),			/* cond_not_taken_branch_cost.  */
       };
       
       static stringop_algs pentium4_memcpy[2] = {
      @@ -1809,17 +1647,8 @@ struct processor_costs pentium4_cost = {
         1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         pentium4_memcpy,
         pentium4_memset,
      -  1,					/* scalar_stmt_cost.  */
      -  1,					/* scalar load_cost.  */
      -  1,					/* scalar_store_cost.  */
      -  1,					/* vec_stmt_cost.  */
      -  1,					/* vec_to_scalar_cost.  */
      -  1,					/* scalar_to_vec_cost.  */
      -  1,					/* vec_align_load_cost.  */
      -  2,					/* vec_unalign_load_cost.  */
      -  1,					/* vec_store_cost.  */
      -  3,					/* cond_taken_branch_cost.  */
      -  1,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (3),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (1),			/* cond_not_taken_branch_cost.  */
       };
       
       static stringop_algs nocona_memcpy[2] = {
      @@ -1900,17 +1729,8 @@ struct processor_costs nocona_cost = {
         1, 1, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         nocona_memcpy,
         nocona_memset,
      -  1,					/* scalar_stmt_cost.  */
      -  1,					/* scalar load_cost.  */
      -  1,					/* scalar_store_cost.  */
      -  1,					/* vec_stmt_cost.  */
      -  1,					/* vec_to_scalar_cost.  */
      -  1,					/* scalar_to_vec_cost.  */
      -  1,					/* vec_align_load_cost.  */
      -  2,					/* vec_unalign_load_cost.  */
      -  1,					/* vec_store_cost.  */
      -  3,					/* cond_taken_branch_cost.  */
      -  1,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (3),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (1),			/* cond_not_taken_branch_cost.  */
       };
       
       static stringop_algs atom_memcpy[2] = {
      @@ -1989,17 +1809,8 @@ struct processor_costs atom_cost = {
         2, 2, 2, 2,				/* reassoc int, fp, vec_int, vec_fp.  */
         atom_memcpy,
         atom_memset,
      -  1,					/* scalar_stmt_cost.  */
      -  1,					/* scalar load_cost.  */
      -  1,					/* scalar_store_cost.  */
      -  1,					/* vec_stmt_cost.  */
      -  1,					/* vec_to_scalar_cost.  */
      -  1,					/* scalar_to_vec_cost.  */
      -  1,					/* vec_align_load_cost.  */
      -  2,					/* vec_unalign_load_cost.  */
      -  1,					/* vec_store_cost.  */
      -  3,					/* cond_taken_branch_cost.  */
      -  1,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (3),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (1),			/* cond_not_taken_branch_cost.  */
       };
       
       static stringop_algs slm_memcpy[2] = {
      @@ -2078,17 +1889,8 @@ struct processor_costs slm_cost = {
         1, 2, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         slm_memcpy,
         slm_memset,
      -  1,					/* scalar_stmt_cost.  */
      -  1,					/* scalar load_cost.  */
      -  1,					/* scalar_store_cost.  */
      -  1,					/* vec_stmt_cost.  */
      -  4,					/* vec_to_scalar_cost.  */
      -  1,					/* scalar_to_vec_cost.  */
      -  1,					/* vec_align_load_cost.  */
      -  2,					/* vec_unalign_load_cost.  */
      -  1,					/* vec_store_cost.  */
      -  3,					/* cond_taken_branch_cost.  */
      -  1,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (3),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (1),			/* cond_not_taken_branch_cost.  */
       };
       
       static stringop_algs intel_memcpy[2] = {
      @@ -2167,17 +1969,8 @@ struct processor_costs intel_cost = {
         1, 4, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         intel_memcpy,
         intel_memset,
      -  1,					/* scalar_stmt_cost.  */
      -  1,					/* scalar load_cost.  */
      -  1,					/* scalar_store_cost.  */
      -  1,					/* vec_stmt_cost.  */
      -  4,					/* vec_to_scalar_cost.  */
      -  1,					/* scalar_to_vec_cost.  */
      -  1,					/* vec_align_load_cost.  */
      -  2,					/* vec_unalign_load_cost.  */
      -  1,					/* vec_store_cost.  */
      -  3,					/* cond_taken_branch_cost.  */
      -  1,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (3),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (1),			/* cond_not_taken_branch_cost.  */
       };
       
       /* Generic should produce code tuned for Core-i7 (and newer chips)
      @@ -2265,17 +2058,8 @@ struct processor_costs generic_cost = {
         1, 2, 1, 1,				/* reassoc int, fp, vec_int, vec_fp.  */
         generic_memcpy,
         generic_memset,
      -  1,					/* scalar_stmt_cost.  */
      -  1,					/* scalar load_cost.  */
      -  1,					/* scalar_store_cost.  */
      -  1,					/* vec_stmt_cost.  */
      -  1,					/* vec_to_scalar_cost.  */
      -  1,					/* scalar_to_vec_cost.  */
      -  1,					/* vec_align_load_cost.  */
      -  2,					/* vec_unalign_load_cost.  */
      -  1,					/* vec_store_cost.  */
      -  3,					/* cond_taken_branch_cost.  */
      -  1,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (3),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (1),			/* cond_not_taken_branch_cost.  */
       };
       
       /* core_cost should produce code tuned for Core familly of CPUs.  */
      @@ -2366,16 +2150,7 @@ struct processor_costs core_cost = {
         1, 4, 2, 2,				/* reassoc int, fp, vec_int, vec_fp.  */
         core_memcpy,
         core_memset,
      -  1,					/* scalar_stmt_cost.  */
      -  1,					/* scalar load_cost.  */
      -  1,					/* scalar_store_cost.  */
      -  1,					/* vec_stmt_cost.  */
      -  1,					/* vec_to_scalar_cost.  */
      -  1,					/* scalar_to_vec_cost.  */
      -  1,					/* vec_align_load_cost.  */
      -  2,					/* vec_unalign_load_cost.  */
      -  1,					/* vec_store_cost.  */
      -  3,					/* cond_taken_branch_cost.  */
      -  1,					/* cond_not_taken_branch_cost.  */
      +  COSTS_N_INSNS (3),			/* cond_taken_branch_cost.  */
      +  COSTS_N_INSNS (1),			/* cond_not_taken_branch_cost.  */
       };
      
      From-SVN: r253975
      Jan Hubicka committed
    • Fix typos · 8c282aba
      From-SVN: r253972
      Eric Botcazou committed
    • utils.c (pad_type_hash): Use hashval_t for hash value. · f330b1ec
      	* gcc-interface/utils.c (pad_type_hash): Use hashval_t for hash value.
      	(convert): Do not use an unchecked conversion for converting from a
      	type to another type padding it.
      
      From-SVN: r253971
      Eric Botcazou committed
    • re PR fortran/82586 ([PDT] ICE: write_symbol(): bad module symbol) · de624bee
      2017-10-21  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/82586
      	* decl.c (gfc_get_pdt_instance): Remove the error message that
      	the parameter does not have a corresponding component since
      	this is now taken care of when the derived type is resolved. Go
      	straight to error return instead.
      	(gfc_match_formal_arglist): Make the PDT relevant errors
      	immediate so that parsing of the derived type can continue.
      	(gfc_match_derived_decl): Do not check the match status on
      	return from gfc_match_formal_arglist for the same reason.
      	* resolve.c (resolve_fl_derived0): Check that each type
      	parameter has a corresponding component.
      
      	PR fortran/82587
      	* resolve.c (resolve_generic_f): Check that the derived type
      	can be used before resolving the struture constructor.
      
      	PR fortran/82589
      	* symbol.c (check_conflict): Add the conflicts involving PDT
      	KIND and LEN attributes.
      
      2017-10-21  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/82586
      	* gfortran.dg/pdt_16.f03 : New test.
      	* gfortran.dg/pdt_4.f03 : Catch the changed messages.
      	* gfortran.dg/pdt_8.f03 : Ditto.
      
      	PR fortran/82587
      	* gfortran.dg/pdt_17.f03 : New test.
      
      	PR fortran/82589
      	* gfortran.dg/pdt_18.f03 : New test.
      
      From-SVN: r253970
      Paul Thomas committed
    • Fix wording · aa93ca09
      From-SVN: r253969
      Eric Botcazou committed
    • Fix invalid path::iterator test · dfdf2839
      	* testsuite/experimental/filesystem/path/itr/traversal.cc: Do not
      	increment past-the-end iterators.
      
      From-SVN: r253967
      Jonathan Wakely committed
    • Daily bump. · f154c1fa
      From-SVN: r253966
      GCC Administrator committed
  4. 20 Oct, 2017 9 commits
    • Update value of __cpp_lib_chrono feature-test macro · 233fa165
      	* include/std/chrono (__cpp_lib_chrono): Update macro value to
      	indicate support for P0505R0.
      	* testsuite/20_util/duration/arithmetic/constexpr_c++17.cc: Check
      	for updated macro.
      
      From-SVN: r253959
      Jonathan Wakely committed
    • * x86-tune-costs.h (intel_cost, generic_cost): Fix move costs. · af863030
      From-SVN: r253958
      Jan Hubicka committed
    • debug/dwarf: support 64-bit DWARF in byte order check · 001cbba0
          
          Also fix 64-bit DWARF to read a 64-bit abbrev offset in the
          compilation unit.
          
          This is a backport of https://golang.org/cl/71171, which will be in
          the Go 1.10 release, to the gofrontend copy. Doing it now because AIX
          is pretty much the only system that uses 64-bit DWARF.
          
          Reviewed-on: https://go-review.googlesource.com/72250
      
      From-SVN: r253955
      Ian Lance Taylor committed
    • [C++ PATCH] AS_BASETYPE · 9401eb07
      https://gcc.gnu.org/ml/gcc-patches/2017-10/msg01376.html
      	* class.c (layout_class_type): Cleanup as-base creation, determine
      	mode here.
      	(finish_struct_1): ... not here.
      
      From-SVN: r253954
      Nathan Sidwell committed
    • Define __cpp_lib_byte feature-test macro · 253e8d21
      	* include/c_global/cstddef: Define __cpp_lib_byte feature-test macro.
      	* testsuite/18_support/byte/requirements.cc: Check macro.
      
      From-SVN: r253952
      Jonathan Wakely committed
    • Add tests for -fcf-protection option and nocf_check attribute. · b0926447
      	* c-c++-common/fcf-protection-1.c: New test.
      	* c-c++-common/fcf-protection-2.c: Likewise.
      	* c-c++-common/fcf-protection-3.c: Likewise.
      	* c-c++-common/fcf-protection-4.c: Likewise.
      	* c-c++-common/fcf-protection-5.c: Likewise.
      	* c-c++-common/attr-nocf-check-1.c: Likewise.
      	* c-c++-common/attr-nocf-check-2.c: Likewise.
      	* c-c++-common/attr-nocf-check-3.c: Likewise.
      
      From-SVN: r253949
      Igor Tsimbalist committed
    • s-osinte__linux.ads (Relative_Timed_Wait): Add variable needed for using monotonic clock. · c840bf9b
      gcc/ada/
      
      2017-10-20  Doug Rupp  <rupp@adacore.com>
      
      	* libgnarl/s-osinte__linux.ads (Relative_Timed_Wait): Add variable
      	needed for using monotonic clock.
      	* libgnarl/s-taprop__linux.adb: Revert previous monotonic clock
      	changes.
      	* libgnarl/s-taprop__linux.adb, s-taprop__posix.adb: Unify and factor
      	out monotonic clock related functions body.
      	(Timed_Sleep, Timed_Delay, Montonic_Clock, RT_Resolution,
      	Compute_Deadline): Move to...
      	* libgnarl/s-tpopmo.adb: ... here. New separate package body.
      
      2017-10-20  Ed Schonberg  <schonberg@adacore.com>
      
      	* sem_util.adb (Is_Controlling_Limited_Procedure): Handle properly the
      	case where the controlling formal is an anonymous access to interface
      	type.
      	* exp_ch9.adb (Extract_Dispatching_Call): If controlling actual is an
      	access type, handle properly the the constructed dereference that
      	designates the object used in the rewritten synchronized call.
      	(Parameter_Block_Pack): If the type of the actual is by-copy, its
      	generated declaration in the parameter block does not need an
      	initialization even if the type is a null-excluding access type,
      	because it will be initialized with the value of the actual later on.
      	(Parameter_Block_Pack): Do not add controlling actual to parameter
      	block when its type is by-copy.
      
      2017-10-20  Justin Squirek  <squirek@adacore.com>
      
      	* sem_ch8.adb (Update_Use_Clause_Chain): Add sanity check to verify
      	scope stack traversal into the context clause.
      
      gcc/testsuite/
      
      2017-10-20  Ed Schonberg  <schonberg@adacore.com>
      
      	* gnat.dg/sync_iface_call.adb, gnat.dg/sync_iface_call_pkg.ads,
      	gnat.dg/sync_iface_call_pkg2.adb, gnat.dg/sync_iface_call_pkg2.ads:
      	New testcase.
      
      From-SVN: r253948
      Pierre-Marie de Rodat committed
    • [multiple changes] · 8ce62196
      2017-10-20  Bob Duff  <duff@adacore.com>
      
      	* sinfo.ads: Fix a comment typo.
      
      2017-10-20  Eric Botcazou  <ebotcazou@adacore.com>
      
      	* doc/gnat_ugn/building_executable_programs_with_gnat.rst (-flto): Add
      	warning against usage in conjunction with -gnatn.
      	(-fdump-xref): Delete entry.
      	* doc/gnat_ugn/gnat_utility_programs.rst (--ext): Remove mention of
      	-fdump-xref switch.
      	* gnat_ugn.texi: Regenerate.
      
      2017-10-20  Hristian Kirtchev  <kirtchev@adacore.com>
      
      	* sem_type.adb, exp_util.adb, sem_util.adb, sem_dim.adb, sem_elab.adb:
      	Minor reformatting.
      
      From-SVN: r253947
      Pierre-Marie de Rodat committed
    • Add ChangeLog entries, missing from last commit · 5664fd68
      From-SVN: r253946
      Pierre-Marie de Rodat committed