platform/upstream/gcc.git
6 years agore PR target/82662 (ifcvt is not performed on double-word compare)
Uros Bizjak [Mon, 23 Oct 2017 19:01:38 +0000 (21:01 +0200)]
re PR target/82662 (ifcvt is not performed on double-word compare)

PR target/82662
* gcc.target/i386/pr82662.c: New test.

From-SVN: r254020

6 years agorl78.md: New define_expand "subdi3".
Sebastian Perta [Mon, 23 Oct 2017 17:54:02 +0000 (17:54 +0000)]
rl78.md: New define_expand "subdi3".

* config/rl78/rl78.md: New define_expand "subdi3".
* config/rl78/subdi3.S: New assembly file.
* config/rl78/t-rl78: Added subdi3.S to LIB2ADD.

From-SVN: r254019

6 years agoForgot to add the new file :-P 2017-10-13 Sebastian Perta <sebastian.perta@renesas...
Sebastian Perta [Mon, 23 Oct 2017 17:30:22 +0000 (13:30 -0400)]
Forgot to add the new file :-P 2017-10-13 Sebastian Perta <sebastian.perta@renesas.com>

Forgot to add the new file :-P
2017-10-13  Sebastian Perta  <sebastian.perta@renesas.com>
* config/rl78/adddi3.S: New assembly file.
* config/rl78/t-rl78: Added adddi3.S to LIB2ADD.

From-SVN: r254016

6 years agore PR c/82681 (c-warn.c:1218: typo in warning message)
Marek Polacek [Mon, 23 Oct 2017 17:03:11 +0000 (17:03 +0000)]
re PR c/82681 (c-warn.c:1218: typo in warning message)

PR c/82681
* c-warn.c (warnings_for_convert_and_check): Fix typos.

* gcc.dg/c90-const-expr-11.c: Fix typos in dg-warning.
* gcc.dg/overflow-warn-5.c: Likewise.
* gcc.dg/overflow-warn-8.c: Likewise.

From-SVN: r254014

6 years agoi386: Skip DF_REF_INSN if DF_REF_INSN_INFO is false
H.J. Lu [Mon, 23 Oct 2017 15:49:19 +0000 (15:49 +0000)]
i386: Skip DF_REF_INSN if DF_REF_INSN_INFO is false

We should check DF_REF_INSN_INFO before accessing DF_REF_INSN.

gcc/

PR target/82673
* config/i386/i386.c (ix86_finalize_stack_frame_flags): Skip
DF_REF_INSN if DF_REF_INSN_INFO is false.

gcc/testsuite/

PR target/82673
* gcc.target/i386/pr82673.c: New test.

From-SVN: r254013

6 years agoi386.c (dimode_scalar_chain::compute_convert_gain): Use xmm_move instead of sse_move.
Jan Hubicka [Mon, 23 Oct 2017 15:10:09 +0000 (17:10 +0200)]
i386.c (dimode_scalar_chain::compute_convert_gain): Use xmm_move instead of sse_move.

* i386.c (dimode_scalar_chain::compute_convert_gain): Use
xmm_move instead of sse_move.
(sse_store_index): New function.
(ix86_register_move_cost): Be more sensible about mismatch stall;
model AVX moves correctly; make difference between sse->integer and
integer->sse.
(ix86_builtin_vectorization_cost): Model correctly aligned and unaligned
moves; make difference between SSE and AVX.
* i386.h (processor_costs): Remove sse_move; add xmm_move, ymm_move
and zmm_move. Increase size of sse load and store tables;
add unaligned load and store tables; add ssemmx_to_integer.
* x86-tune-costs.h: Update all entries according to real
move latencies from Agner Fog's manual and chip documentation.

From-SVN: r254012

6 years agore PR rtl-optimization/82628 (wrong code at -Os on x86_64-linux-gnu in the 32-bit...
Jakub Jelinek [Mon, 23 Oct 2017 14:58:23 +0000 (16:58 +0200)]
re PR rtl-optimization/82628 (wrong code at -Os on x86_64-linux-gnu in the 32-bit mode)

PR target/82628
* config/i386/predicates.md (x86_64_dwzext_immediate_operand): New.
* config/i386/constraints.md (Wf): New constraint.
* config/i386/i386.md (UNSPEC_SBB): New unspec.
(cmp<dwi>_doubleword): Removed.
(sub<mode>3_carry_ccc, *sub<mode>3_carry_ccc_1): New patterns.
(sub<mode>3_carry_ccgz): Use unspec instead of compare.
* config/i386/i386.c (ix86_expand_branch) <case E_TImode>: Don't
expand with cmp<dwi>_doubleword.  For LTU and GEU use
sub<mode>3_carry_ccc instead of sub<mode>3_carry_ccgz and use CCCmode.

From-SVN: r254011

6 years agocommon.opt (gcolumn-info): Enable by default.
Jakub Jelinek [Mon, 23 Oct 2017 14:10:36 +0000 (16:10 +0200)]
common.opt (gcolumn-info): Enable by default.

* common.opt (gcolumn-info): Enable by default.
* doc/invoke.texi (gcolumn-info): Document new default.

* lib/scanasm.exp (dg-function-on-line): Accept optional column info.
* gcc.dg/debug/dwarf2/pr53948.c: Likewise.
* g++.dg/debug/dwarf2/pr77363.C: Likewise.
* gcc.dg/debug/dwarf2/asm-line1.c: Add -gno-column-info to dg-options.
* gcc.dg/debug/dwarf2/discriminator.c: Likewise.
* g++.dg/debug/dwarf2/typedef6.C: Likewise.

From-SVN: r254010

6 years agore PR tree-optimization/82672 ([GRAPHITE] ICE in verify_gimple_in_cfg)
Richard Biener [Mon, 23 Oct 2017 13:49:24 +0000 (13:49 +0000)]
re PR tree-optimization/82672 ([GRAPHITE] ICE in verify_gimple_in_cfg)

2017-10-23  Richard Biener  <rguenther@suse.de>

PR tree-optimization/82672
* graphite-isl-ast-to-gimple.c (graphite_copy_stmts_from_block):
Fold the stmt if we propagated into it.

* gfortran.dg/graphite/pr82672.f90: New testcase.

From-SVN: r254009

6 years agoImplement C++17 Filesystem library
Jonathan Wakely [Mon, 23 Oct 2017 12:11:22 +0000 (13:11 +0100)]
Implement C++17 Filesystem library

Based on Filesystem TS implementation, with the changes applied by:

- P0219R1 Relative Paths for Filesystem
- P0317R1 Directory Entry Caching for Filesystem
- P0492R2 Resolution of C++17 National Body Comments

Where appropriate code is shared between the TS and C++17
implementations.

* include/Makefile.am: Add new headers for C++17 filesystem library.
* include/Makefile.in: Regenerate.
* include/bits/fs_dir.h: New header, based on Filesystem TS code in
include/experimental/bits directory.
* include/bits/fs_fwd.h: Likewise.
* include/bits/fs_ops.h: Likewise.
* include/bits/fs_path.h: Likewise.
* include/experimental/bits/fs_dir.h: Rename Doxygen group.
* include/experimental/bits/fs_fwd.h: Likewise.
* include/experimental/bits/fs_ops.h: Likewise.
* include/experimental/bits/fs_path.h: Likewise.
* include/experimental/filesystem (filesystem_error::_M_gen_what):
Remove inline definition.
* include/precompiled/stdc++.h: Add <filesystem> to precompiled
header.
* include/std/filesystem: New header.
* python/libstdcxx/v6/printers.py: Enable printer for std::filesystem
paths.
* src/filesystem/Makefile.am: Add new files. Compile as C++17.
* src/filesystem/Makefile.in: Regenerate.
* src/filesystem/cow-dir.cc: Update comment.
* src/filesystem/cow-ops.cc: Likewise.
* src/filesystem/cow-path.cc: Likewise.
* src/filesystem/cow-std-dir.cc: New file.
* src/filesystem/cow-std-ops.cc: New file.
* src/filesystem/cow-std-path.cc: New file.
* src/filesystem/dir-common.h (_Dir_base, get_file_type): New header
for common code.
* src/filesystem/dir.cc (_Dir): Derive from _Dir_base.
(open_dir): Move to _Dir_base constructor.
(get_file_type): Move to dir-common.h.
(recurse): Move to _Dir_base::should_recurse.
* src/filesystem/ops-common.h: New header for common code.
* src/filesystem/ops.cc (is_set, make_file_type, make_file_status)
(is_not_found_errno, file_time, do_copy_file): Move to ops-common.h.
* src/filesystem/path.cc (filesystem_error::_M_gen_what): Define.
* src/filesystem/std-dir.cc: New file, based on Filesystem TS code.
* src/filesystem/std-ops.cc: Likewise.
* src/filesystem/std-dir.cc: Likewise.
* testsuite/27_io/filesystem/iterators/directory_iterator.cc: New
test.
* testsuite/27_io/filesystem/iterators/pop.cc: New test.
* testsuite/27_io/filesystem/iterators/recursive_directory_iterator.cc:
New test.
* testsuite/27_io/filesystem/operations/absolute.cc: New test.
* testsuite/27_io/filesystem/operations/canonical.cc: New test.
* testsuite/27_io/filesystem/operations/copy.cc: New test.
* testsuite/27_io/filesystem/operations/copy_file.cc: New test.
* testsuite/27_io/filesystem/operations/create_directories.cc: New
test.
* testsuite/27_io/filesystem/operations/create_directory.cc: New test.
* testsuite/27_io/filesystem/operations/create_symlink.cc: New test.
* testsuite/27_io/filesystem/operations/current_path.cc: New test.
* testsuite/27_io/filesystem/operations/equivalent.cc: New test.
* testsuite/27_io/filesystem/operations/exists.cc: New test.
* testsuite/27_io/filesystem/operations/file_size.cc: New test.
* testsuite/27_io/filesystem/operations/is_empty.cc: New test.
* testsuite/27_io/filesystem/operations/last_write_time.cc: New test.
* testsuite/27_io/filesystem/operations/permissions.cc: New test.
* testsuite/27_io/filesystem/operations/proximate.cc: New test.
* testsuite/27_io/filesystem/operations/read_symlink.cc: New test.
* testsuite/27_io/filesystem/operations/relative.cc: New test.
* testsuite/27_io/filesystem/operations/remove_all.cc: New test.
* testsuite/27_io/filesystem/operations/space.cc: New test.
* testsuite/27_io/filesystem/operations/status.cc: New test.
* testsuite/27_io/filesystem/operations/symlink_status.cc: New test.
* testsuite/27_io/filesystem/operations/temp_directory_path.cc: New
test.
* testsuite/27_io/filesystem/operations/weakly_canonical.cc: New test.
* testsuite/27_io/filesystem/path/append/path.cc: New test.
* testsuite/27_io/filesystem/path/assign/assign.cc: New test.
* testsuite/27_io/filesystem/path/assign/copy.cc: New test.
* testsuite/27_io/filesystem/path/compare/compare.cc: New test.
* testsuite/27_io/filesystem/path/compare/path.cc: New test.
* testsuite/27_io/filesystem/path/compare/strings.cc: New test.
* testsuite/27_io/filesystem/path/concat/path.cc: New test.
* testsuite/27_io/filesystem/path/concat/strings.cc: New test.
* testsuite/27_io/filesystem/path/construct/copy.cc: New test.
* testsuite/27_io/filesystem/path/construct/default.cc: New test.
* testsuite/27_io/filesystem/path/construct/locale.cc: New test.
* testsuite/27_io/filesystem/path/construct/range.cc: New test.
* testsuite/27_io/filesystem/path/construct/string_view.cc: New test.
* testsuite/27_io/filesystem/path/decompose/extension.cc: New test.
* testsuite/27_io/filesystem/path/decompose/filename.cc: New test.
* testsuite/27_io/filesystem/path/decompose/parent_path.cc: New test.
* testsuite/27_io/filesystem/path/decompose/relative_path.cc: New
test.
* testsuite/27_io/filesystem/path/decompose/root_directory.cc: New
test.
* testsuite/27_io/filesystem/path/decompose/root_name.cc: New test.
* testsuite/27_io/filesystem/path/decompose/root_path.cc: New test.
* testsuite/27_io/filesystem/path/decompose/stem.cc: New test.
* testsuite/27_io/filesystem/path/generation/normal.cc: New test.
* testsuite/27_io/filesystem/path/generation/proximate.cc: New test.
* testsuite/27_io/filesystem/path/generation/relative.cc: New test.
* testsuite/27_io/filesystem/path/generic/generic_string.cc: New test.
* testsuite/27_io/filesystem/path/itr/traversal.cc: New test.
* testsuite/27_io/filesystem/path/modifiers/clear.cc: New test.
* testsuite/27_io/filesystem/path/modifiers/make_preferred.cc: New
test.
* testsuite/27_io/filesystem/path/modifiers/remove_filename.cc: New
test.
* testsuite/27_io/filesystem/path/modifiers/replace_extension.cc: New
test.
* testsuite/27_io/filesystem/path/modifiers/replace_filename.cc: New
test.
* testsuite/27_io/filesystem/path/modifiers/swap.cc: New test.
* testsuite/27_io/filesystem/path/native/string.cc: New test.
* testsuite/27_io/filesystem/path/nonmember/hash_value.cc: New test.
* testsuite/27_io/filesystem/path/query/empty.cc: New test.
* testsuite/27_io/filesystem/path/query/has_extension.cc: New test.
* testsuite/27_io/filesystem/path/query/has_filename.cc: New test.
* testsuite/27_io/filesystem/path/query/has_parent_path.cc: New test.
* testsuite/27_io/filesystem/path/query/has_relative_path.cc: New
test.
* testsuite/27_io/filesystem/path/query/has_root_directory.cc: New
test.
* testsuite/27_io/filesystem/path/query/has_root_name.cc: New test.
* testsuite/27_io/filesystem/path/query/has_root_path.cc: New test.
* testsuite/27_io/filesystem/path/query/has_stem.cc: New test.
* testsuite/27_io/filesystem/path/query/is_relative.cc: New test.
* testsuite/experimental/filesystem/path/construct/string_view.cc:
Define USE_FILESYSTEM_TS.
* testsuite/util/testsuite_fs.h: Allow use with C++17 paths as well
as Filesystem TS.

From-SVN: r254008

6 years agotree-ssa-pre.c (bitmap_remove_from_set): Rename to...
Richard Biener [Mon, 23 Oct 2017 12:01:11 +0000 (12:01 +0000)]
tree-ssa-pre.c (bitmap_remove_from_set): Rename to...

2017-10-23  Richard Biener  <rguenther@suse.de>

* tree-ssa-pre.c (bitmap_remove_from_set): Rename to...
(bitmap_remove_expr_from_set): ... this.  All callers call this
for non-constant values.
(bitmap_set_subtract): Rename to...
(bitmap_set_subtract_expressions): ... this.  Adjust and
optimize.
(bitmap_set_contains_value): Remove superfluous check.
(bitmap_set_replace_value): Inline into single caller ...
(bitmap_value_replace_in_set): ... here and simplify.
(dependent_clean): Merge into ...
(clean): ... this using an overload.  Adjust.
(prune_clobbered_mems): Adjust.
(compute_antic_aux): Likewise.
(compute_partial_antic_aux): Likewise.

From-SVN: r254007

6 years agore PR c++/77555 (unused inline function in-function static variable accessed from...
Paolo Carlini [Mon, 23 Oct 2017 11:39:20 +0000 (11:39 +0000)]
re PR c++/77555 (unused inline function in-function static variable accessed from outside leads to linker error)

2017-10-23  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/77555
* g++.dg/torture/pr77555.C: New.

From-SVN: r254006

6 years agore PR tree-optimization/82129 (ICE in compute_antic, at tree-ssa-pre.c:2447)
Richard Biener [Mon, 23 Oct 2017 11:14:40 +0000 (11:14 +0000)]
re PR tree-optimization/82129 (ICE in compute_antic, at tree-ssa-pre.c:2447)

2017-10-23  Richard Biener  <rguenther@suse.de>

PR tree-optimization/82129
Revert
2017-08-01  Richard Biener  <rguenther@suse.de>

PR tree-optimization/81181
* tree-ssa-pre.c (compute_antic_aux): Defer clean() to ...
(compute_antic): ... end of iteration here.

From-SVN: r254005

6 years agoPR libstdc++/82644 document IS 29124 support
Jonathan Wakely [Mon, 23 Oct 2017 11:10:28 +0000 (12:10 +0100)]
PR libstdc++/82644 document IS 29124 support

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

6 years agoConvert STARTING_FRAME_OFFSET to a hook
Richard Sandiford [Mon, 23 Oct 2017 09:48:31 +0000 (09:48 +0000)]
Convert STARTING_FRAME_OFFSET to a hook

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

6 years agoUse SCALAR_TYPE_MODE in vect_create_epilog_for_reduction
Richard Sandiford [Mon, 23 Oct 2017 09:40:51 +0000 (09:40 +0000)]
Use SCALAR_TYPE_MODE in vect_create_epilog_for_reduction

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

6 years agoUse SCALAR_INT_TYPE_MODE in loc_list_from_tree_1
Richard Sandiford [Mon, 23 Oct 2017 09:38:30 +0000 (09:38 +0000)]
Use SCALAR_INT_TYPE_MODE in loc_list_from_tree_1

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

6 years agoUse scalar_int/float_mode in brig_langhook_type_for_mode
Richard Sandiford [Mon, 23 Oct 2017 09:36:12 +0000 (09:36 +0000)]
Use scalar_int/float_mode in brig_langhook_type_for_mode

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

6 years agoUse scalar_mode in expand_shift_1
Richard Sandiford [Mon, 23 Oct 2017 09:32:31 +0000 (09:32 +0000)]
Use scalar_mode in expand_shift_1

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

6 years agore PR tree-optimization/82129 (ICE in compute_antic, at tree-ssa-pre.c:2447)
Richard Biener [Mon, 23 Oct 2017 09:20:14 +0000 (09:20 +0000)]
re PR tree-optimization/82129 (ICE in compute_antic, at tree-ssa-pre.c:2447)

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

6 years agoFix HWI + -unsigned in combine.c
Richard Sandiford [Mon, 23 Oct 2017 06:07:26 +0000 (06:07 +0000)]
Fix HWI + -unsigned in combine.c

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

6 years agoDaily bump.
GCC Administrator [Mon, 23 Oct 2017 00:16:14 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r253996

6 years agoi386.c (ix86_builtin_vectorization_cost): Use existing rtx_cost latencies instead...
Jan Hubicka [Sun, 22 Oct 2017 22:09:47 +0000 (22:09 +0000)]
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

6 years agoSUBREG_PROMOTED_VAR_P handling in expand_direct_optab_fn
Richard Sandiford [Sun, 22 Oct 2017 21:41:57 +0000 (21:41 +0000)]
SUBREG_PROMOTED_VAR_P handling in expand_direct_optab_fn

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

6 years agoMake more use of GET_MODE_UNIT_PRECISION
Richard Sandiford [Sun, 22 Oct 2017 21:39:29 +0000 (21:39 +0000)]
Make more use of GET_MODE_UNIT_PRECISION

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

6 years agoMake more use of HWI_COMPUTABLE_MODE_P
Richard Sandiford [Sun, 22 Oct 2017 21:11:01 +0000 (21:11 +0000)]
Make more use of HWI_COMPUTABLE_MODE_P

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

6 years agoMake more use of subreg_size_lowpart_offset
Richard Sandiford [Sun, 22 Oct 2017 21:07:50 +0000 (21:07 +0000)]
Make more use of subreg_size_lowpart_offset

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

6 years agoAdd wide_int version of inchash::hash::add_wide_int
Richard Sandiford [Sun, 22 Oct 2017 21:04:02 +0000 (21:04 +0000)]
Add wide_int version of inchash::hash::add_wide_int

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

6 years agoRename inchash::hash::add_wide_int
Richard Sandiford [Sun, 22 Oct 2017 20:42:06 +0000 (20:42 +0000)]
Rename inchash::hash::add_wide_int

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

6 years agore PR target/52451 (gcc w/i387 float generates fucom rather than fcom for floating...
Uros Bizjak [Sun, 22 Oct 2017 19:04:36 +0000 (21:04 +0200)]
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

6 years agore PR rtl-optimization/82628 (wrong code at -Os on x86_64-linux-gnu in the 32-bit...
Uros Bizjak [Sun, 22 Oct 2017 18:05:17 +0000 (20:05 +0200)]
re PR rtl-optimization/82628 (wrong code at -Os on x86_64-linux-gnu in the 32-bit mode)

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

6 years agoMove 2 tests from c-c++-common/ to gcc.target/i386/ directory.
Igor Tsimbalist [Sun, 22 Oct 2017 16:32:08 +0000 (18:32 +0200)]
Move 2 tests from c-c++-common/ to gcc.target/i386/ directory.

* 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

6 years agoDaily bump.
GCC Administrator [Sun, 22 Oct 2017 00:16:14 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r253982

6 years agoAdd x86 tests for Intel CET implementation.
Igor Tsimbalist [Sat, 21 Oct 2017 21:33:41 +0000 (23:33 +0200)]
Add x86 tests for Intel CET implementation.

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

6 years agoAdd x86 CET documentation.
Igor Tsimbalist [Sat, 21 Oct 2017 21:16:32 +0000 (23:16 +0200)]
Add x86 CET documentation.

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

6 years agoUpdate x86 backend to enable Intel CET.
Igor Tsimbalist [Sat, 21 Oct 2017 21:09:53 +0000 (23:09 +0200)]
Update x86 backend to enable Intel CET.

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

6 years agopr79683.c: Disable costmodel.
Jan Hubicka [Sat, 21 Oct 2017 11:53:33 +0000 (13:53 +0200)]
pr79683.c: Disable costmodel.

* 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

6 years ago* gcc-interface/Makefile.in: Remove bogus settings for VxWorks.
Eric Botcazou [Sat, 21 Oct 2017 10:40:08 +0000 (10:40 +0000)]
* gcc-interface/Makefile.in: Remove bogus settings for VxWorks.

From-SVN: r253973

6 years agoFix typos
Eric Botcazou [Sat, 21 Oct 2017 10:05:33 +0000 (10:05 +0000)]
Fix typos

From-SVN: r253972

6 years agoutils.c (pad_type_hash): Use hashval_t for hash value.
Eric Botcazou [Sat, 21 Oct 2017 09:53:50 +0000 (09:53 +0000)]
utils.c (pad_type_hash): Use hashval_t for hash value.

* 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

6 years agore PR fortran/82586 ([PDT] ICE: write_symbol(): bad module symbol)
Paul Thomas [Sat, 21 Oct 2017 09:02:17 +0000 (09:02 +0000)]
re PR fortran/82586 ([PDT] ICE: write_symbol(): bad module symbol)

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

6 years agoFix wording
Eric Botcazou [Sat, 21 Oct 2017 08:25:13 +0000 (08:25 +0000)]
Fix wording

From-SVN: r253969

6 years agoFix invalid path::iterator test
Jonathan Wakely [Sat, 21 Oct 2017 01:16:43 +0000 (02:16 +0100)]
Fix invalid path::iterator test

* testsuite/experimental/filesystem/path/itr/traversal.cc: Do not
increment past-the-end iterators.

From-SVN: r253967

6 years agoDaily bump.
GCC Administrator [Sat, 21 Oct 2017 00:16:17 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r253966

6 years agoUpdate value of __cpp_lib_chrono feature-test macro
Jonathan Wakely [Fri, 20 Oct 2017 21:05:11 +0000 (22:05 +0100)]
Update value of __cpp_lib_chrono feature-test macro

* 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

6 years ago* x86-tune-costs.h (intel_cost, generic_cost): Fix move costs.
Jan Hubicka [Fri, 20 Oct 2017 20:51:50 +0000 (22:51 +0200)]
* x86-tune-costs.h (intel_cost, generic_cost): Fix move costs.

From-SVN: r253958

6 years agodebug/dwarf: support 64-bit DWARF in byte order check
Ian Lance Taylor [Fri, 20 Oct 2017 18:34:36 +0000 (18:34 +0000)]
debug/dwarf: support 64-bit DWARF in byte order check

    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

6 years ago[C++ PATCH] AS_BASETYPE
Nathan Sidwell [Fri, 20 Oct 2017 18:30:48 +0000 (18:30 +0000)]
[C++ PATCH] AS_BASETYPE

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

6 years agoDefine __cpp_lib_byte feature-test macro
Jonathan Wakely [Fri, 20 Oct 2017 18:02:19 +0000 (19:02 +0100)]
Define __cpp_lib_byte feature-test macro

* include/c_global/cstddef: Define __cpp_lib_byte feature-test macro.
* testsuite/18_support/byte/requirements.cc: Check macro.

From-SVN: r253952

6 years agoAdd tests for -fcf-protection option and nocf_check attribute.
Igor Tsimbalist [Fri, 20 Oct 2017 17:29:02 +0000 (19:29 +0200)]
Add tests for -fcf-protection option and nocf_check attribute.

* 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

6 years agos-osinte__linux.ads (Relative_Timed_Wait): Add variable needed for using monotonic...
Pierre-Marie de Rodat [Fri, 20 Oct 2017 17:02:37 +0000 (17:02 +0000)]
s-osinte__linux.ads (Relative_Timed_Wait): Add variable needed for using monotonic clock.

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

6 years ago[multiple changes]
Pierre-Marie de Rodat [Fri, 20 Oct 2017 16:27:32 +0000 (16:27 +0000)]
[multiple changes]

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

6 years agoAdd ChangeLog entries, missing from last commit
Pierre-Marie de Rodat [Fri, 20 Oct 2017 16:20:40 +0000 (16:20 +0000)]
Add ChangeLog entries, missing from last commit

From-SVN: r253946

6 years agosem_dim.adb (Analyze_Dimension_Binary_Op): Accept with a warning to compare a dimensi...
Pierre-Marie de Rodat [Fri, 20 Oct 2017 16:05:28 +0000 (16:05 +0000)]
sem_dim.adb (Analyze_Dimension_Binary_Op): Accept with a warning to compare a dimensioned expression with a literal.

gcc/ada/

2017-10-20  Yannick Moy  <moy@adacore.com>

* sem_dim.adb (Analyze_Dimension_Binary_Op): Accept with a warning to
compare a dimensioned expression with a literal.
(Dim_Warning_For_Numeric_Literal): Do not issue a warning for the
special value zero.
* doc/gnat_ugn/gnat_and_program_execution.rst: Update description of
dimensionality system in GNAT.
* gnat_ugn.texi: Regenerate.

2017-10-20  Yannick Moy  <moy@adacore.com>

* sem_ch6.adb (Analyze_Expression_Function.Freeze_Expr_Types): Remove
inadequate silencing of errors.
* sem_util.adb (Check_Part_Of_Reference): Do not issue an error when
checking the subprogram body generated from an expression function,
when this is done as part of the preanalysis done on expression
functions, as the subprogram body may not yet be attached in the AST.
The error if any will be issued later during the analysis of the body.
(Is_Aliased_View): Trivial rewrite with Is_Formal_Object.

2017-10-20  Arnaud Charlet  <charlet@adacore.com>

* sem_ch8.adb (Update_Chain_In_Scope): Add missing [-gnatwu] marker for
warning on ineffective use clause.

2017-10-20  Eric Botcazou  <ebotcazou@adacore.com>

* exp_ch11.ads (Warn_If_No_Local_Raise): Declare.
* exp_ch11.adb (Expand_Exception_Handlers): Use Warn_If_No_Local_Raise
to issue the warning on the absence of local raise.
(Possible_Local_Raise): Do not issue the warning for Call_Markers.
(Warn_If_No_Local_Raise): New procedure to issue the warning on the
absence of local raise.
* sem_elab.adb: Add with and use clauses for Exp_Ch11.
(Record_Elaboration_Scenario): Call Possible_Local_Raise in the cases
where a scenario could give rise to raising Program_Error.
* sem_elab.adb: Typo fixes.
* fe.h (Warn_If_No_Local_Raise): Declare.
* gcc-interface/gigi.h (get_exception_label): Change return type.
* gcc-interface/trans.c (gnu_constraint_error_label_stack): Change to
simple vector of Entity_Id.
(gnu_storage_error_label_stack): Likewise.
(gnu_program_error_label_stack): Likewise.
(gigi): Adjust to above changes.
(Raise_Error_to_gnu): Likewise.
(gnat_to_gnu) <N_Goto_Statement>: Set TREE_USED on the label.
(N_Push_Constraint_Error_Label): Push the label onto the stack.
(N_Push_Storage_Error_Label): Likewise.
(N_Push_Program_Error_Label): Likewise.
(N_Pop_Constraint_Error_Label): Pop the label from the stack and issue
a warning on the absence of local raise.
(N_Pop_Storage_Error_Label): Likewise.
(N_Pop_Program_Error_Label): Likewise.
(push_exception_label_stack): Delete.
(get_exception_label): Change return type to Entity_Id and adjust.
* gcc-interface/utils2.c (build_goto_raise): Change type of first
parameter to Entity_Id and adjust.  Set TREE_USED on the label.
(build_call_raise): Adjust calls to get_exception_label and also
build_goto_raise.
(build_call_raise_column): Likewise.
(build_call_raise_range): Likewise.
* doc/gnat_ugn/building_executable_programs_with_gnat.rst (-gnatw.x):
Document actual default behavior.

2017-10-20  Piotr Trojanek  <trojanek@adacore.com>

* einfo.ads: Minor consistent punctuation in comment.  All numbered
items in the comment of Is_Internal are now terminated with a period.

2017-10-20  Piotr Trojanek  <trojanek@adacore.com>

* exp_util.adb (Build_Temporary): Mark created temporary entity as
internal.

2017-10-20  Piotr Trojanek  <trojanek@adacore.com>

* sem_type.adb (In_Generic_Actual): Simplified.

2017-10-20  Justin Squirek  <squirek@adacore.com>

* sem_ch12.adb (Check_Formal_Package_Instance): Add sanity check to
verify a renaming exists for a generic formal before comparing it to
the actual as defaulted formals will not have a renamed_object.

2017-10-20  Javier Miranda  <miranda@adacore.com>

* exp_ch6.adb (Replace_Returns): Fix wrong management of
N_Block_Statement nodes.

gcc/testsuite/

2017-10-20  Justin Squirek  <squirek@adacore.com>

* gnat.dg/default_pkg_actual.adb, gnat.dg/default_pkg_actual2.adb: New
testcases.

From-SVN: r253945

6 years agoexp_aggr.adb (Initialize_Array_Component): Avoid adjusting a component of an array...
Pierre-Marie de Rodat [Fri, 20 Oct 2017 15:08:36 +0000 (15:08 +0000)]
exp_aggr.adb (Initialize_Array_Component): Avoid adjusting a component of an array aggregate if...

gcc/ada/

2017-10-20  Bob Duff  <duff@adacore.com>

* exp_aggr.adb (Initialize_Array_Component): Avoid adjusting a
component of an array aggregate if it is initialized by a
build-in-place function call.
* exp_ch6.adb (Is_Build_In_Place_Result_Type): Use -gnatd.9 to disable
bip for nonlimited types.
* debug.adb: Document -gnatd.9.

2017-10-20  Bob Duff  <duff@adacore.com>

* sem_ch12.adb: Remove redundant setting of Parent.

2017-10-20  Eric Botcazou  <ebotcazou@adacore.com>

* sem_ch4.adb (Find_Concatenation_Types): Filter out operators if one
of the operands is a string literal.

2017-10-20  Bob Duff  <duff@adacore.com>

* einfo.ads: Comment fix.

2017-10-20  Clement Fumex  <fumex@adacore.com>

* switch-c.adb: Remove -gnatwm from the switches triggered by -gnateC.

2017-10-20  Ed Schonberg  <schonberg@adacore.com>

* sem_dim.adb (Extract_Power): Accept dimension values that are not
non-negative integers when the dimensioned base type is an Integer
type.

gcc/testsuite/

2017-10-20  Ed Schonberg  <schonberg@adacore.com>

* gnat.dg/dimensions.adb, gnat.dg/dimensions.ads: New testcase.

From-SVN: r253941

6 years agosinfo.ads, sinfo.adb (Alloc_For_BIP_Return): New flag to indicate that an allocator...
Bob Duff [Fri, 20 Oct 2017 14:51:32 +0000 (14:51 +0000)]
sinfo.ads, sinfo.adb (Alloc_For_BIP_Return): New flag to indicate that an allocator came from a b-i-p return statement.

2017-10-20  Bob Duff  <duff@adacore.com>

* sinfo.ads, sinfo.adb (Alloc_For_BIP_Return): New flag to indicate
that an allocator came from a b-i-p return statement.
* exp_ch4.adb (Expand_Allocator_Expression): Avoid adjusting the return
object of a nonlimited build-in-place function call.
* exp_ch6.adb (Expand_N_Extended_Return_Statement): Set the
Alloc_For_BIP_Return flag on generated allocators.
* sem_ch5.adb (Analyze_Assignment): Move Assert to where it can't fail.
If the N_Assignment_Statement has been transformed into something else,
then Should_Transform_BIP_Assignment won't work.
* exp_ch3.adb (Expand_N_Object_Declaration): A previous revision said,
"Remove Adjust if we're building the return object of an extended
return statement in place." Back out that part of the change, because
the Alloc_For_BIP_Return flag is now used for that.

From-SVN: r253940

6 years agoi386.md (isa): Remove fma_avx512f.
Jakub Jelinek [Fri, 20 Oct 2017 14:31:03 +0000 (16:31 +0200)]
i386.md (isa): Remove fma_avx512f.

* config/i386/i386.md (isa): Remove fma_avx512f.
* config/i386/sse.md (<avx512>_fmadd_<mode>_mask<round_name>,
<avx512>_fmadd_<mode>_mask3<round_name>,
<avx512>_fmsub_<mode>_mask<round_name>,
<avx512>_fmsub_<mode>_mask3<round_name>,
<avx512>_fnmadd_<mode>_mask<round_name>,
<avx512>_fnmadd_<mode>_mask3<round_name>,
<avx512>_fnmsub_<mode>_mask<round_name>,
<avx512>_fnmsub_<mode>_mask3<round_name>,
<avx512>_fmaddsub_<mode>_mask<round_name>,
<avx512>_fmaddsub_<mode>_mask3<round_name>,
<avx512>_fmsubadd_<mode>_mask<round_name>,
<avx512>_fmsubadd_<mode>_mask3<round_name>): Remove isa attribute.
(*vec_widen_umult_even_v16si<mask_name>,
*vec_widen_smult_even_v16si<mask_name>): Likewise.
(<mask_codefor>avx512bw_dbpsadbw<mode><mask_name>): Likewise.

From-SVN: r253939

6 years agoAdd documentation for fcf-protection option and nocf_check attribute
Igor Tsimbalist [Fri, 20 Oct 2017 14:03:07 +0000 (16:03 +0200)]
Add documentation for fcf-protection option and nocf_check attribute

gcc/doc/
* extend.texi: Add 'nocf_check' documentation.
* gimple.texi: Add second parameter to gimple_build_call_from_tree.
* invoke.texi: Add -fcf-protection documentation.
* rtl.texi: Add REG_CALL_NOTRACK documenation.

From-SVN: r253938

6 years agore PR tree-optimization/82473 (ICE in vect_get_vec_def_for_stmt_copy, at tree-vect...
Richard Biener [Fri, 20 Oct 2017 13:43:47 +0000 (13:43 +0000)]
re PR tree-optimization/82473 (ICE in vect_get_vec_def_for_stmt_copy, at tree-vect-stmts.c:1524)

2017-10-20  Richard Biener  <rguenther@suse.de>

PR tree-optimization/82473
* tree-vect-loop.c (vectorizable_reduction): Properly get at
the largest input type.

* gcc.dg/torture/pr82473.c: New testcase.

From-SVN: r253937

6 years agoAdd generic part for Intel CET enabling. The spec is available at
Igor Tsimbalist [Fri, 20 Oct 2017 13:09:38 +0000 (15:09 +0200)]
Add generic part for Intel CET enabling. The spec is available at

https://software.intel.com/sites/default/files/managed/4d/2a/control-flow-enforcement-technology-preview.pdf

A proposal is to introduce a target independent flag
-fcf-protection=[none|branch|return|full] with a semantic to
instrument a code to control validness or integrity of control-flow
transfers using jump and call instructions. The main goal is to detect
and block a possible malware execution through transfer the execution
to unknown target address. Implementation could be either software or
target based. Any target platforms can provide their implementation
for instrumentation under this option.

The compiler should instrument any control-flow transfer points in a
program (ex. call/jmp/ret) as well as any landing pads, which are
targets of control-flow transfers.

A new 'nocf_check' attribute is introduced to provide hand tuning
support. The attribute directs the compiler to skip a call to a
function and a function's landing pad from instrumentation. The
attribute can be used for function and pointer to function types,
otherwise it will be ignored.

Currently all platforms except i386 will report the error and do no
instrumentation. i386 will provide the implementation based on a
specification published by Intel for a new technology called
Control-flow Enforcement Technology (CET).

gcc/c-family/
* c-attribs.c (handle_nocf_check_attribute): New function.
(c_common_attribute_table): Add 'nocf_check' handling.

gcc/c/
* gimple-parser.c: Add second argument NULL to
gimple_build_call_from_tree.

gcc/
* attrib.c (comp_type_attributes): Check nocf_check attribute.
* cfgexpand.c (expand_call_stmt): Set REG_CALL_NOCF_CHECK for
call insn.
* combine.c (distribute_notes): Add REG_CALL_NOCF_CHECK handling.
* common.opt: Add fcf-protection flag.
* emit-rtl.c (try_split): Add REG_CALL_NOCF_CHECK handling.
* flag-types.h: Add enum cf_protection_level.
* gimple.c (gimple_build_call_from_tree): Add second parameter.
Add 'nocf_check' attribute propagation to gimple call.
* gimple.h (gf_mask): Add GF_CALL_NOCF_CHECK.
(gimple_build_call_from_tree): Update prototype.
(gimple_call_nocf_check_p): New function.
(gimple_call_set_nocf_check): Likewise.
* gimplify.c: Add second argument to gimple_build_call_from_tree.
* ipa-icf.c: Add nocf_check attribute in statement hash.
* recog.c (peep2_attempt): Add REG_CALL_NOCF_CHECK handling.
* reg-notes.def: Add REG_NOTE (CALL_NOCF_CHECK).
* toplev.c (process_options): Add flag_cf_protection handling.

From-SVN: r253936

6 years ago[arm] Fix architecture selection when building libatomic with automatic FPU selection
Richard Earnshaw [Fri, 20 Oct 2017 12:33:39 +0000 (12:33 +0000)]
[arm] Fix architecture selection when building libatomic with automatic FPU selection

Libatomic builds a few functions for Arm with an explicit -march
option.  This option does not specify an FPU, which can lead to
problems when targeting a hard-float or softfp environment since the
architecture appears to be incompatible with the selected ABI.

The fix is simple enough, just add +fp (the minimum floating point
option) to the architecture.  We don't use anything from the FP
architecture, so it shouldn't really change anything; and if we are
building for -mfloat-abi=soft the canonicalization process will remove
the unnecessary fp attributes anyway.

* Makefile.am: (IFUNC_OPTIONS): Set the architecture to
-march=armv7-a+fp on Linux/Arm.
* Makefile.in: Regenerated.

From-SVN: r253935

6 years ago* x86-tune-costs.h (core_cost): Fix div, move and sqrt latencies.
Jan Hubicka [Fri, 20 Oct 2017 12:25:18 +0000 (14:25 +0200)]
* x86-tune-costs.h (core_cost): Fix div, move and sqrt latencies.

From-SVN: r253934

6 years agore PR tree-optimization/82603 (ICE in ifcvt_local_dce w/ -O2 -ftree-loop-vectorize)
Richard Biener [Fri, 20 Oct 2017 11:21:11 +0000 (11:21 +0000)]
re PR tree-optimization/82603 (ICE in ifcvt_local_dce w/ -O2 -ftree-loop-vectorize)

2017-10-20  Richard Biener  <rguenther@suse.de>

PR tree-optimization/82603
* tree-if-conv.c (predicate_mem_writes): Make sure to only
remove false predicated stores.

* gcc.dg/torture/pr82603.c: New testcase.

From-SVN: r253933

6 years ago2017-10-20 Richard Biener <rguenther@suse.de>
Richard Biener [Fri, 20 Oct 2017 10:49:24 +0000 (10:49 +0000)]
2017-10-20  Richard Biener  <rguenther@suse.de>

* graphite-isl-ast-to-gimple.c
(translate_isl_ast_to_gimple::graphite_copy_stmts_from_block):
Remove return value and simplify, dump copied stmt after lhs
adjustment.
(translate_isl_ast_to_gimple::translate_isl_ast_node_user):
Reduce dump verbosity.
(gsi_insert_earliest): Likewise.
(translate_isl_ast_to_gimple::copy_bb_and_scalar_dependences): Adjust.
* graphite.c (print_global_statistics): Adjust dumping.
(print_graphite_scop_statistics): Likewise.
(print_graphite_statistics): Do not dump loops here.
(graphite_transform_loops): But here.

From-SVN: r253930

6 years agoReduce stack size in gcc.dg/tree-ssa/ldist-27.c
Tom de Vries [Fri, 20 Oct 2017 10:02:49 +0000 (10:02 +0000)]
Reduce stack size in gcc.dg/tree-ssa/ldist-27.c

2017-10-20  Tom de Vries  <tom@codesourcery.com>

* gcc.dg/tree-ssa/ldist-27.c: Remove dg-require-stack-size.
(main): Move s ...
(s): ... here.

From-SVN: r253929

6 years agoconfigure.ac (ACX_PROG_GNAT): Append "libgnat" to the include dir.
Nicolas Roche [Fri, 20 Oct 2017 09:29:35 +0000 (09:29 +0000)]
configure.ac (ACX_PROG_GNAT): Append "libgnat" to the include dir.

* configure.ac (ACX_PROG_GNAT): Append "libgnat" to the include dir.
* configure: Regenerate.

From-SVN: r253928

6 years agore PR target/82158 (_Noreturn functions that do return clobber caller's registers...
Jakub Jelinek [Fri, 20 Oct 2017 07:35:48 +0000 (09:35 +0200)]
re PR target/82158 (_Noreturn functions that do return clobber caller's registers on ARM32 (but not other arches))

PR target/82158
* tree-cfg.c (pass_warn_function_return::execute): In noreturn
functions when optimizing replace GIMPLE_RETURN stmts with
calls to __builtin_unreachable ().

* gcc.dg/tree-ssa/noreturn-1.c: New test.

From-SVN: r253926

6 years agore PR sanitizer/82595 (bootstrap fails in libsanitizer on powerpc64-unknown-linux...
Jakub Jelinek [Fri, 20 Oct 2017 07:32:35 +0000 (09:32 +0200)]
re PR sanitizer/82595 (bootstrap fails in libsanitizer on powerpc64-unknown-linux-gnu)

PR sanitizer/82595
* config/gnu-user.h (LIBTSAN_EARLY_SPEC): Add libtsan_preinit.o
for -fsanitize=thread link of executables.
(LIBLSAN_EARLY_SPEC): Add liblsan_preinit.o for -fsanitize=leak
link of executables.

* lsan/lsan.h (__lsan_init): Add SANITIZER_INTERFACE_ATTRIBUTE.
* lsan/Makefile.am (nodist_toolexeclib_HEADERS): Add
liblsan_preinit.o.
(lsan_files): Remove lsan_preinit.cc.
(liblsan_preinit.o): New rule.
* lsan/Makefile.in: Regenerated.

From-SVN: r253925

6 years agore PR target/82370 (AVX512 can use a memory operand for immediate-count vpsrlw, but...
Jakub Jelinek [Fri, 20 Oct 2017 07:30:33 +0000 (09:30 +0200)]
re PR target/82370 (AVX512 can use a memory operand for immediate-count vpsrlw, but gcc doesn't.)

PR target/82370
* config/i386/sse.md (VI248_AVX2, VI248_AVX512BW, VI248_AVX512BW_2):
New mode iterators.
(<shift_insn><mode>3<mask_name>): Change the last of the 3
define_insns for logical vector shifts to use VI248_AVX512BW
iterator instead of VI48_AVX512, remove <mask_mode512bit_condition>
condition, useless isa and prefix attributes.  Change the first
2 of these define_insns to ...
(<mask_codefor><shift_insn><mode>3<mask_name>): ... this, new
define_insn for avx512vl.
(<shift_insn><mode>3): ... and this, new define_insn without
masking for non-avx512vl.

* gcc.target/i386/avx-pr82370.c: New test.
* gcc.target/i386/avx2-pr82370.c: New test.
* gcc.target/i386/avx512f-pr82370.c: New test.
* gcc.target/i386/avx512bw-pr82370.c: New test.
* gcc.target/i386/avx512vl-pr82370.c: New test.
* gcc.target/i386/avx512vlbw-pr82370.c: New test.

From-SVN: r253924

6 years agore PR target/82370 (AVX512 can use a memory operand for immediate-count vpsrlw, but...
Jakub Jelinek [Fri, 20 Oct 2017 07:28:25 +0000 (09:28 +0200)]
re PR target/82370 (AVX512 can use a memory operand for immediate-count vpsrlw, but gcc doesn't.)

PR target/82370
* config/i386/sse.md (*andnot<mode>3,
<mask_codefor><code><mode>3<mask_name>, *<code><mode>3): Split
(=v,v,vm) alternative into (=x,x,xm) and (=v,v,vm), for 128-bit
and 256-bit vectors, the (=x,x,xm) alternative and when mask is
not applied use empty suffix even for TARGET_AVX512VL.
* config/i386/subst.md (mask_prefix3, mask_prefix4): When mask
is applied, supply evex,evex or evex,evex,evex instead of just
evex.

From-SVN: r253923

6 years agoAdd GFNI command line options and macros
Julia Koval [Fri, 20 Oct 2017 06:31:33 +0000 (08:31 +0200)]
Add GFNI command line options and macros

gcc/
* common/config/i386/i386-common.c (OPTION_MASK_ISA_GFNI_SET,
(OPTION_MASK_ISA_GFNI_UNSET): New.
(ix86_handle_option): Handle OPT_mgfni.
* config/i386/cpuid.h (bit_GFNI): New.
* config/i386/driver-i386.c (host_detect_local_cpu): Detect gfni.
* config/i386/i386-c.c (ix86_target_macros_internal): Define __GFNI__.
* config/i386/i386.c (ix86_target_string): Add -mgfni.
(ix86_valid_target_attribute_inner_p): Add OPT_mgfni.
* config/i386/i386.h (TARGET_GFNI, TARGET_GFNI_P): New.
* config/i386/i386.opt: Add mgfni.

From-SVN: r253922

6 years agomsp430.c (msp430_option_override): Disable -fdelete-null-pointer-checks.
Orlando Arias [Fri, 20 Oct 2017 04:49:57 +0000 (04:49 +0000)]
msp430.c (msp430_option_override): Disable -fdelete-null-pointer-checks.

* config/msp430/msp430.c (msp430_option_override): Disable
-fdelete-null-pointer-checks.
* doc/invoke.text (-fdelete-null-pointer-checks): Document that.

* lib/target-supports.exp (check_effective_target_keeps_null_pointer_checks):
Add msp430 to the list.

From-SVN: r253921

6 years agore PR c++/82308 ([C++17] deduction of template arguments results in internal compiler...
Paolo Carlini [Fri, 20 Oct 2017 00:30:41 +0000 (00:30 +0000)]
re PR c++/82308 ([C++17] deduction of template arguments results in internal compiler error)

2017-10-19  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/82308
* g++.dg/cpp1z/class-deduction45.C: New.

From-SVN: r253920

6 years agoDaily bump.
GCC Administrator [Fri, 20 Oct 2017 00:16:15 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r253919

6 years agoexp_ch6.adb (Is_Build_In_Place_Result_Type): Fix silly bug -- "Typ" should be "T".
Bob Duff [Thu, 19 Oct 2017 23:12:27 +0000 (23:12 +0000)]
exp_ch6.adb (Is_Build_In_Place_Result_Type): Fix silly bug -- "Typ" should be "T".

2017-10-19  Bob Duff  <duff@adacore.com>

* exp_ch6.adb (Is_Build_In_Place_Result_Type): Fix silly bug -- "Typ"
should be "T".  Handle case of a subtype of a class-wide type.

From-SVN: r253916

6 years ago[multiple changes]
Pierre-Marie de Rodat [Thu, 19 Oct 2017 23:08:29 +0000 (23:08 +0000)]
[multiple changes]

2017-10-19  Bob Duff  <duff@adacore.com>

* exp_util.adb: (Process_Statements_For_Controlled_Objects): Clarify
which node kinds can legitimately be ignored, and raise Program_Error
for others.

2017-10-19  Hristian Kirtchev  <kirtchev@adacore.com>

* sem_elab.adb (Compilation_Unit): Handle the case of a subprogram
instantiation that acts as a compilation unit.
(Find_Code_Unit): Reimplemented.
(Find_Top_Unit): Reimplemented.
(Find_Unit_Entity): New routine.
(Process_Instantiation_SPARK): Correct the elaboration requirement a
package instantiation imposes on a unit.

2017-10-19  Bob Duff  <duff@adacore.com>

* exp_ch6.adb (Is_Build_In_Place_Result_Type): Enable build-in-place
for a narrow set of controlled types.

2017-10-19  Eric Botcazou  <ebotcazou@adacore.com>

* sinput.ads (Line_Start): Add pragma Inline.
* widechar.ads (Is_Start_Of_Wide_Char): Likewise.

2017-10-19  Bob Duff  <duff@adacore.com>

* exp_attr.adb (Expand_N_Attribute_Reference): Disable
Make_Build_In_Place_Call_... for F(...)'Old, where F(...) is a
build-in-place function call so that the temp is declared in the right
place.

From-SVN: r253915

6 years agoPR82575, lto debugobj references __gnu_lto_slim, ld test liblto-17 fails
Alan Modra [Thu, 19 Oct 2017 23:06:20 +0000 (09:36 +1030)]
PR82575, lto debugobj references __gnu_lto_slim, ld test liblto-17 fails

If __gnu_lto_slim is global, undefined, default visibility in the
early debug object, then it finds its way into .dynsym when creating
shared libraries.  __gnu_lto_slim in a symbol table (.dynsym or
.symtab) signals nm and other binutils that the object is an LTO
object needing a plugin, but that isn't the case for the ld liblti-17
tests.  So, make __gnu_lto_slim hidden to prevent it becoming
dynamic.  Further, make it weak because some linkers may warn on
finding an undefined global non-default visibility symbol.

PR lto/82575
* simple-object-elf.c (simple_object_elf_copy_lto_debug_sections):
Make discarded non-local symbols weak and hidden.

From-SVN: r253914

6 years agox86-tune-costs.h (generic_cost, core_cost): Correct costs of x87 and SSE instructions.
Jan Hubicka [Thu, 19 Oct 2017 20:43:30 +0000 (22:43 +0200)]
x86-tune-costs.h (generic_cost, core_cost): Correct costs of x87 and SSE instructions.

* x86-tune-costs.h (generic_cost, core_cost): Correct costs
of x87 and SSE instructions.

From-SVN: r253911

6 years agoasan.c (create_cond_insert_point): Do not update edge count.
Jan Hubicka [Thu, 19 Oct 2017 20:19:15 +0000 (22:19 +0200)]
asan.c (create_cond_insert_point): Do not update edge count.

* asan.c (create_cond_insert_point): Do not update edge count.
* auto-profile.c (afdo_propagate_edge): Update for edge count removal.
(afdo_propagate_circuit): Likewise.
(afdo_calculate_branch_prob): Likewise.
(afdo_annotate_cfg): Likewise.
* basic-block.h (struct edge_def): Remove count.
(edge_def::count): New accessor.
* bb-reorder.c (rotate_loop): Update.
(find_traces_1_round): Update.
(connect_traces): Update.
(sanitize_hot_paths): Update.
* cfg.c (unchecked_make_edge): Update.
(make_single_succ_edge): Update.
(check_bb_profile): Update.
(dump_edge_info): Update.
(update_bb_profile_for_threading): Update.
(scale_bbs_frequencies_int): Update.
(scale_bbs_frequencies_gcov_type): Update.
(scale_bbs_frequencies_profile_count): Update.
(scale_bbs_frequencies): Update.
* cfganal.c (connect_infinite_loops_to_exit): Update.
* cfgbuild.c (compute_outgoing_frequencies): Update.
(find_many_sub_basic_blocks): Update.
* cfgcleanup.c (try_forward_edges): Update.
(try_crossjump_to_edge): Update
* cfgexpand.c (expand_gimple_cond): Update
(expand_gimple_tailcall): Update
(construct_exit_block): Update
* cfghooks.c (verify_flow_info): Update
(redirect_edge_succ_nodup): Update
(split_edge): Update
(make_forwarder_block): Update
(duplicate_block): Update
(account_profile_record): Update
* cfgloop.c (find_subloop_latch_edge_by_profile): Update.
* cfgloopanal.c (expected_loop_iterations_unbounded): Update.
* cfgloopmanip.c (scale_loop_profile): Update.
(loopify): Update.
(lv_adjust_loop_entry_edge): Update.
* cfgrtl.c (try_redirect_by_replacing_jump): Update.
(force_nonfallthru_and_redirect): Update.
(purge_dead_edges): Update.
(rtl_flow_call_edges_add): Update.
* cgraphunit.c (init_lowered_empty_function): Update.
(cgraph_node::expand_thunk): Update.
* gimple-pretty-print.c (dump_probability): Update.
(dump_edge_probability): Update.
* gimple-ssa-isolate-paths.c (isolate_path): Update.
* haifa-sched.c (sched_create_recovery_edges): Update.
* hsa-gen.c (convert_switch_statements): Update.
* ifcvt.c (dead_or_predicable): Update.
* ipa-inline-transform.c (inline_transform): Update.
* ipa-split.c (split_function): Update.
* ipa-utils.c (ipa_merge_profiles): Update.
* loop-doloop.c (add_test): Update.
* loop-unroll.c (unroll_loop_runtime_iterations): Update.
* lto-streamer-in.c (input_cfg): Update.
(input_function): Update.
* lto-streamer-out.c (output_cfg): Update.
* modulo-sched.c (sms_schedule): Update.
* postreload-gcse.c (eliminate_partially_redundant_load): Update.
* predict.c (maybe_hot_edge_p): Update.
(unlikely_executed_edge_p): Update.
(probably_never_executed_edge_p): Update.
(dump_prediction): Update.
(drop_profile): Update.
(propagate_unlikely_bbs_forward): Update.
(determine_unlikely_bbs): Update.
(force_edge_cold): Update.
* profile.c (compute_branch_probabilities): Update.
* reg-stack.c (better_edge): Update.
* shrink-wrap.c (handle_simple_exit): Update.
* tracer.c (better_p): Update.
* trans-mem.c (expand_transaction): Update.
(split_bb_make_tm_edge): Update.
* tree-call-cdce.c: Update.
* tree-cfg.c (gimple_find_sub_bbs): Update.
(gimple_split_edge): Update.
(gimple_duplicate_sese_region): Update.
(gimple_duplicate_sese_tail): Update.
(gimple_flow_call_edges_add): Update.
(insert_cond_bb): Update.
(execute_fixup_cfg): Update.
* tree-cfgcleanup.c (cleanup_control_expr_graph): Update.
* tree-complex.c (expand_complex_div_wide): Update.
* tree-eh.c (lower_resx): Update.
(unsplit_eh): Update.
(cleanup_empty_eh_move_lp): Update.
* tree-inline.c (copy_edges_for_bb): Update.
(freqs_to_counts): Update.
(copy_cfg_body): Update.
* tree-ssa-dce.c (remove_dead_stmt): Update.
* tree-ssa-ifcombine.c (update_profile_after_ifcombine): Update.
* tree-ssa-loop-im.c (execute_sm_if_changed): Update.
* tree-ssa-loop-ivcanon.c (remove_exits_and_undefined_stmts): Update.
(unloop_loops): Update.
* tree-ssa-loop-manip.c (tree_transform_and_unroll_loop): Update.
* tree-ssa-loop-split.c (connect_loops): Update.
(split_loop): Update.
* tree-ssa-loop-unswitch.c (hoist_guard): Update.
* tree-ssa-phionlycprop.c (propagate_rhs_into_lhs): Update.
* tree-ssa-phiopt.c (replace_phi_edge_with_variable): Update.
* tree-ssa-reassoc.c (branch_fixup): Update.
* tree-ssa-tail-merge.c (replace_block_by): Update.
* tree-ssa-threadupdate.c (remove_ctrl_stmt_and_useless_edges): Update.
(compute_path_counts): Update.
(update_profile): Update.
(recompute_probabilities): Update.
(update_joiner_offpath_counts): Update.
(estimated_freqs_path): Update.
(freqs_to_counts_path): Update.
(clear_counts_path): Update.
(ssa_fix_duplicate_block_edges): Update.
(duplicate_thread_path): Update.
* tree-switch-conversion.c (hoist_edge_and_branch_if_true): Update.
(case_bit_test_cmp): Update.
(collect_switch_conv_info): Update.
(gen_inbound_check): Update.
(do_jump_if_equal): Update.
(emit_cmp_and_jump_insns): Update.
* tree-tailcall.c (decrease_profile): Update.
(eliminate_tail_call): Update.
* tree-vect-loop-manip.c (slpeel_add_loop_guard): Update.
(vect_do_peeling): Update.
* tree-vect-loop.c (scale_profile_for_vect_loop): Update.
* ubsan.c (ubsan_expand_null_ifn): Update.
(ubsan_expand_ptr_ifn): Update.
* value-prof.c (gimple_divmod_fixed_value): Update.
(gimple_mod_pow2): Update.
(gimple_mod_subtract): Update.
(gimple_ic): Update.
(gimple_stringop_fixed_value): Update.

From-SVN: r253910

6 years agoFix oversights
Eric Botcazou [Thu, 19 Oct 2017 19:14:41 +0000 (19:14 +0000)]
Fix oversights

From-SVN: r253909

6 years agore PR target/82618 (Inefficient double-word subtraction on x86_64)
Uros Bizjak [Thu, 19 Oct 2017 17:35:39 +0000 (19:35 +0200)]
re PR target/82618 (Inefficient double-word subtraction on x86_64)

PR target/82618
* config/i386/i386.md (sub to cmp): New peephole2 pattern.

testsuite/ChangeLog:

PR target/82618
* gcc.target/i386/pr82618.c: New test.

Co-Authored-By: Jakub Jelinek <jakub@redhat.com>
From-SVN: r253905

6 years agoira-color: fix allocno_priority_compare_func for qsort (PR 82395)
Alexander Monakov [Thu, 19 Oct 2017 16:48:34 +0000 (19:48 +0300)]
ira-color: fix allocno_priority_compare_func for qsort (PR 82395)

PR rtl-optimization/82395
* ira-color.c (allocno_priority_compare_func): Fix comparison step
based on non_spilled_static_chain_regno_p.

From-SVN: r253904

6 years agoi386.c (output_387_binary_op): Rewrite SSE part.
Uros Bizjak [Thu, 19 Oct 2017 16:32:55 +0000 (18:32 +0200)]
i386.c (output_387_binary_op): Rewrite SSE part.

* config/i386/i386.c (output_387_binary_op): Rewrite SSE part.
(ix86_emit_mode_set): Rewrite insn mnemonic construction.
(ix86_prepare_fp_compare_args): Redefine is_sse as bool.

From-SVN: r253903

6 years agoPR tree-optimization/82596 - missing -Warray-bounds on an out-of-bounds
Martin Sebor [Thu, 19 Oct 2017 16:03:07 +0000 (16:03 +0000)]
PR tree-optimization/82596 - missing -Warray-bounds on an out-of-bounds

PR tree-optimization/82596 - missing -Warray-bounds on an out-of-bounds
  index into string literal

gcc/ChangeLog:
* tree.c (array_at_struct_end_p): Handle STRING_CST.

gcc/testsuite/ChangeLog:
* gcc/testsuite/gcc.dg/pr82596.c: New test.

From-SVN: r253902

6 years agoasan.c (handle_builtin_alloca): Deal with all alloca variants.
Eric Botcazou [Thu, 19 Oct 2017 15:58:05 +0000 (15:58 +0000)]
asan.c (handle_builtin_alloca): Deal with all alloca variants.

* asan.c (handle_builtin_alloca): Deal with all alloca variants.
(get_mem_refs_of_builtin_call): Likewise.
* builtins.c (expand_builtin_apply): Adjust call to
allocate_dynamic_stack_space.
(expand_builtin_alloca): For __builtin_alloca_with_align_and_max, pass
the third argument to allocate_dynamic_stack_space, otherwise -1.
(expand_builtin): Deal with all alloca variants.
(is_inexpensive_builtin): Likewise.
* builtins.def (BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX): New.
* calls.c (special_function_p): Deal with all alloca variants.
(initialize_argument_information): Adjust call to
allocate_dynamic_stack_space.
(expand_call): Likewise.
* cfgexpand.c (expand_call_stmt): Deal with all alloca variants.
* doc/extend.texi (Built-ins): Add __builtin_alloca_with_align_and_max
* explow.c (allocate_dynamic_stack_space): Add MAX_SIZE parameter and
use it for the stack usage computation.
* explow.h (allocate_dynamic_stack_space): Adjust prototype.
* function.c (gimplify_parameters): Turn BUILT_IN_ALLOCA_WITH_ALIGN
into BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX and pass maximum size.
* gimple-ssa-warn-alloca.c (alloca_call_type): Simplify control flow.
Take into account 3rd argument of __builtin_alloca_with_align_and_max.
(in_loop_p): Remove first argument and useless check.
(pass_walloca::execute): Remove useless test and adjust call to above.
* gimple.c (gimple_build_call_from_tree): Deal with all alloc variants
* gimplify.c (gimplify_vla_decl): Turn BUILT_IN_ALLOCA_WITH_ALIGN into
BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX and pass maximum size.
(gimplify_call_expr): Deal with all alloca variants.
* hsa-gen.c (gen_hsa_alloca): Likewise.
(gen_hsa_insns_for_call): Likewise.
* ipa-pure-const.c (special_builtin_state): Likewise.
* tree-chkp.c (chkp_build_returned_bound): Likewise.
* tree-object-size.c (alloc_object_size): Likewise.
* tree-ssa-alias.c (ref_maybe_used_by_call_p_1): Likewise.
(call_may_clobber_ref_p_1): Likewise.
* tree-ssa-ccp.c (evaluate_stmt): Likewise.
(ccp_fold_stmt): Likewise.
(optimize_stack_restore): Likewise.
* tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Likewise.
(mark_all_reaching_defs_necessary_1): Likewise.
(propagate_necessity): Likewise.
(eliminate_unnecessary_stmts): Likewise.
* tree.c (build_common_builtin_nodes): Build
BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX.
* tree.h (ALLOCA_FUNCTION_CODE_P): New macro.
(CASE_BUILT_IN_ALLOCA): Likewise.
* varasm.c (incorporeal_function_p): Deal with all alloca variants.
c-family/
* c-common.c (check_builtin_function_arguments): Also check arguments
of __builtin_alloca_with_align_and_max.

From-SVN: r253901

6 years agore PR c++/82600 (Address of local variable returned [-Werror=return-local-addr] when...
Jakub Jelinek [Thu, 19 Oct 2017 14:24:39 +0000 (16:24 +0200)]
re PR c++/82600 (Address of local variable returned [-Werror=return-local-addr] when building mozilla-central)

PR c++/82600
* typeck.c (check_return_expr): Don't call
maybe_warn_about_returning_address_of_local in templates.

* g++.dg/warn/Wreturn-local-addr-4.C: New test.

From-SVN: r253899

6 years agoImprove tests for error reporting in Filesystem TS
Jonathan Wakely [Thu, 19 Oct 2017 13:57:10 +0000 (14:57 +0100)]
Improve tests for error reporting in Filesystem TS

* testsuite/experimental/filesystem/iterators/
recursive_directory_iterator.cc: Ensure that error_code arguments are
cleared when required.
* testsuite/experimental/filesystem/operations/create_directory.cc:
Remove redundant check.
* testsuite/experimental/filesystem/operations/temp_directory_path.cc:
Ensure that error_code argument is cleared when required.

From-SVN: r253897

6 years agoFix path::iterator post-increment and post-decrement
Jonathan Wakely [Thu, 19 Oct 2017 13:57:06 +0000 (14:57 +0100)]
Fix path::iterator post-increment and post-decrement

* include/experimental/bits/fs_path.h (path::iterator++(int))
(path::iterator--(int)): Fix for paths with only one component.
* testsuite/experimental/filesystem/path/itr/traversal.cc: Test
post-increment and post-decrement.

From-SVN: r253896

6 years agoUpdate references to C++17 in libstdc++ manual
Jonathan Wakely [Thu, 19 Oct 2017 13:57:02 +0000 (14:57 +0100)]
Update references to C++17 in libstdc++ manual

* doc/xml/manual/status_cxx2017.xml: Update references to C++17
section numbers.

From-SVN: r253895

6 years agoUse __LONG_LONG_MAX__ instead of LONG_LONG_MAX in test
Jonathan Wakely [Thu, 19 Oct 2017 13:56:55 +0000 (14:56 +0100)]
Use __LONG_LONG_MAX__ instead of LONG_LONG_MAX in test

* testsuite/decimal/conversion-to-integral.cc: Use predefined macro
instead of non-standard glibc one.

From-SVN: r253894

6 years agore PR debug/82509 (DW_AT_endianity issues with attribute scalar_storage_order)
Eric Botcazou [Thu, 19 Oct 2017 13:50:10 +0000 (13:50 +0000)]
re PR debug/82509 (DW_AT_endianity issues with attribute scalar_storage_order)

PR debug/82509
* dwarf2out.c (new_die_raw): New static inline function.
(new_die): Use it to create the DIE.
(add_AT_external_die_ref): Likewise.
(clone_die): Likewise.
(clone_as_declaration): Likewise.
(dwarf2out_vms_debug_main_pointer): Likewise.
(base_type_die): Likewise.  Remove early return for corner cases.
Do not call add_pubtype on the DIE here.
(is_base_type): Remove ERROR_MARK and return 0 for VOID_TYPE.
(modified_type_die): Adjust the lookup for reverse order DIEs.  Skip
typedefs for base types with DW_AT_endianity.  Make sure a DIE with
native order exists for base types, attach the DIE manually and call
add_pubtype on it.  Do not equate a reverse order DIE to the type.

From-SVN: r253893

6 years ago[ARM] PR 82445 - suppress 32-bit aligned ldrd/strd peepholing with -mno-unaligned...
Richard Earnshaw [Thu, 19 Oct 2017 13:10:42 +0000 (13:10 +0000)]
[ARM] PR 82445 - suppress 32-bit aligned ldrd/strd peepholing with -mno-unaligned-access

Peephole patterns exist in the arm backend to spot load/store
operations to adjacent memory operations in order to convert them into
ldrd/strd instructions.  However, when we have strict alignment
enforced, then we can only do this if the accesses are known to be
64-bit aligned; this is unlikely to be the case for most loads.  The
patch adds some alignment checking to the code that validates the
addresses for use in the peephole patterns.  This should also fix
incorrect generation of ldrd/strd with unaligned accesses that could
previously have occurred on ARMv5e where all such operations must be
64-bit aligned.

I've added some new tests as well.  In doing so I discovered that the
ldrd/strd peephole tests could never fail since they would match the
source file name in the scanned assembly as well as any instructions
of the intended type.  I've fixed those by tightening the scan results
slightly.

gcc:

* config/arm/arm.c (align_ok_ldrd_strd): New function.
(mem_ok_for_ldrd_strd): New parameter align.  Extract the alignment of the
mem into it.
(gen_operands_ldrd_strd): Validate the alignment of the accesses.

testsuite:

* gcc.target/arm/peep-ldrd-1.c: Tighten test scan pattern.
* gcc.target/arm/peep-strd-1.c: Likewise.
* gcc.target/arm/peep-ldrd-2.c: New test.
* gcc.target/arm/peep-strd-2.c: New test.

From-SVN: r253890

6 years agoflag-types.h (enum sanitize_code): Add SANITIZE_BUILTIN.
Jakub Jelinek [Thu, 19 Oct 2017 12:09:52 +0000 (14:09 +0200)]
flag-types.h (enum sanitize_code): Add SANITIZE_BUILTIN.

* flag-types.h (enum sanitize_code): Add SANITIZE_BUILTIN.  Or
SANITIZE_BUILTIN into SANITIZE_UNDEFINED.
* sanitizer.def (BUILT_IN_UBSAN_HANDLE_INVALID_BUILTIN,
BUILT_IN_UBSAN_HANDLE_INVALID_BUILTIN_ABORT): New builtins.
* opts.c (sanitizer_opts): Add builtin.
* ubsan.c (instrument_builtin): New function.
(pass_ubsan::execute): Call it.
(pass_ubsan::gate): Enable even for SANITIZE_BUILTIN.
* doc/invoke.texi: Document -fsanitize=builtin.

* c-c++-common/ubsan/builtin-1.c: New test.

From-SVN: r253888

6 years agoubsan.c (ubsan_expand_null_ifn): Use _v1 suffixed type mismatch builtins...
Jakub Jelinek [Thu, 19 Oct 2017 11:23:59 +0000 (13:23 +0200)]
ubsan.c (ubsan_expand_null_ifn): Use _v1 suffixed type mismatch builtins...

* ubsan.c (ubsan_expand_null_ifn): Use _v1 suffixed type mismatch
builtins, store max (log2 (align), 0) into uchar field instead of
align into uptr field.
(ubsan_expand_objsize_ifn): Use _v1 suffixed type mismatch builtins,
store uchar 0 field instead of uptr 0 field.
(instrument_nonnull_return): Use _v1 suffixed nonnull return builtin,
instead of passing one address of struct with 2 locations pass
two addresses of structs with 1 location each.
* sanitizer.def (BUILT_IN_UBSAN_HANDLE_TYPE_MISMATCH,
BUILT_IN_UBSAN_HANDLE_TYPE_MISMATCH_ABORT,
BUILT_IN_UBSAN_HANDLE_NONNULL_RETURN,
BUILT_IN_UBSAN_HANDLE_NONNULL_RETURN_ABORT): Removed.
(BUILT_IN_UBSAN_HANDLE_TYPE_MISMATCH_V1,
BUILT_IN_UBSAN_HANDLE_TYPE_MISMATCH_V1_ABORT,
BUILT_IN_UBSAN_HANDLE_NONNULL_RETURN_V1,
BUILT_IN_UBSAN_HANDLE_NONNULL_RETURN_V1_ABORT): New builtins.

* c-c++-common/ubsan/float-cast-overflow-1.c: Drop value keyword
from expected output regexps.
* c-c++-common/ubsan/float-cast-overflow-2.c: Likewise.
* c-c++-common/ubsan/float-cast-overflow-3.c: Likewise.
* c-c++-common/ubsan/float-cast-overflow-4.c: Likewise.
* c-c++-common/ubsan/float-cast-overflow-5.c: Likewise.
* c-c++-common/ubsan/float-cast-overflow-6.c: Likewise.
* c-c++-common/ubsan/float-cast-overflow-8.c: Likewise.
* c-c++-common/ubsan/float-cast-overflow-9.c: Likewise.
* c-c++-common/ubsan/float-cast-overflow-10.c: Likewise.
* g++.dg/ubsan/float-cast-overflow-bf.C: Likewise.
* gcc.dg/ubsan/float-cast-overflow-bf.c: Likewise.
* g++.dg/asan/default-options-1.C (__asan_default_options): Add
used attribute.
* g++.dg/asan/asan_test.C: Run with ASAN_OPTIONS=handle_segv=2
in the environment.

* All source files: Merge from upstream 315899.
        * asan/Makefile.am (nodist_saninclude_HEADERS): Add
include/sanitizer/tsan_interface.h.
        * asan/libtool-version: Bump the libasan SONAME.
* lsan/Makefile.am (sanitizer_lsan_files): Add lsan_common_mac.cc.
(lsan_files): Add lsan_linux.cc, lsan_mac.cc and lsan_malloc_mac.cc.
        * sanitizer_common/Makefile.am (sanitizer_common_files): Add
sancov_flags.cc, sanitizer_allocator_checks.cc,
sanitizer_coverage_libcdep_new.cc, sanitizer_errno.cc,
sanitizer_file.cc, sanitizer_mac_libcdep.cc and
sanitizer_stoptheworld_mac.cc.  Remove sanitizer_coverage_libcdep.cc
and sanitizer_coverage_mapping_libcdep.cc.
        * tsan/Makefile.am (tsan_files): Add tsan_external.cc.
* ubsan/Makefile.am (DEFS): Add -DUBSAN_CAN_USE_CXXABI=1.
(ubsan_files): Add ubsan_init_standalone.cc and
ubsan_signals_standalone.cc.
* ubsan/libtool-version: Bump the libubsan SONAME.
        * asan/Makefile.in: Regenerate.
        * lsan/Makefile.in: Regenerate.
        * sanitizer_common/Makefile.in: Regenerate.
        * tsan/Makefile.in: Regenerate.
* ubsan/Makefile.in: Regenerate.

From-SVN: r253887

6 years agoRevert r238089 (PR driver/81829).
Martin Liska [Thu, 19 Oct 2017 11:08:28 +0000 (13:08 +0200)]
Revert r238089 (PR driver/81829).

2017-10-19  Martin Liska  <mliska@suse.cz>

PR driver/81829
* file-find.c (remove_prefix): Remove.
* file-find.h (remove_prefix): Likewise.
* gcc-ar.c: Remove smartness of lookup.

From-SVN: r253886

6 years agors6000: Fix "missing mode" on UNSPEC_TOCSLOT
Segher Boessenkool [Thu, 19 Oct 2017 10:55:51 +0000 (12:55 +0200)]
rs6000: Fix "missing mode" on UNSPEC_TOCSLOT

Currently gen* warn about a missing mode on an UNSPEC_TOCSLOT unspec in
some call patterns.  Those unspecs are created from rs6000.c, with Pmode
always.  This patch fixes the patterns to say :P as well.

* config/rs6000/rs6000.md (*call_indirect_aix<mode>,
*call_value_indirect_aix<mode>, *call_indirect_elfv2<mode>,
*call_value_indirect_elfv2<mode>): Add correct mode to the unspec.

From-SVN: r253885

6 years agore PR target/82580 (Optimize comparisons for __int128 on x86-64)
Jakub Jelinek [Thu, 19 Oct 2017 08:37:04 +0000 (10:37 +0200)]
re PR target/82580 (Optimize comparisons for __int128 on x86-64)

PR target/82580
* config/i386/i386.md (setcc + movzbl to xor + setcc): New peephole2.
(setcc + and to xor + setcc): New peephole2.

* gcc.target/i386/pr82580.c: Use {\msbb} instead of "sbb" in
scan-assembler-times.  Check that there are no movzb* instructions
if lp64.

From-SVN: r253884

6 years agoSpecify required stack size for gcc.dg/tree-ssa/ldist-27.c
Tom de Vries [Thu, 19 Oct 2017 08:24:26 +0000 (08:24 +0000)]
Specify required stack size for gcc.dg/tree-ssa/ldist-27.c

2017-10-19  Tom de Vries  <tom@codesourcery.com>

* gcc.dg/tree-ssa/ldist-27.c: Use dg-require-stack-size.

From-SVN: r253883

6 years agoAdd dg-require-stack-size
Tom de Vries [Thu, 19 Oct 2017 08:11:26 +0000 (08:11 +0000)]
Add dg-require-stack-size

2017-10-19  Tom de Vries  <tom@codesourcery.com>

* lib/target-supports-dg.exp (dg-require-stack-size): New proc.
* gcc.c-torture/execute/20030209-1.c: Use dg-require-stack-size.
* gcc.c-torture/execute/20040805-1.c: Same.
* gcc.c-torture/execute/920410-1.c: Same.
* gcc.c-torture/execute/921113-1.c: Same.
* gcc.c-torture/execute/921208-2.c: Same.
* gcc.c-torture/execute/comp-goto-1.c: Same.
* gcc.c-torture/execute/pr20621-1.c: Same.
* gcc.c-torture/execute/pr28982b.c: Same.
* gcc.dg/tree-prof/comp-goto-1.c: Same.

* doc/sourcebuild.texi (Test Directives, Variants of
dg-require-support): Add dg-require-stack-size.

From-SVN: r253882

6 years agoDerive interface buffers from max name length
Bernhard Reutner-Fischer [Thu, 19 Oct 2017 07:55:43 +0000 (09:55 +0200)]
Derive interface buffers from max name length

2017-10-19  Bernhard Reutner-Fischer  <aldot@gcc.gnu.org>

* interface.c (check_sym_interfaces, check_uop_interfaces,
gfc_check_interfaces): Base interface_name buffer off
GFC_MAX_SYMBOL_LEN.

From-SVN: r253881