gcc.git
6 years agoCorrect subreg no-op handling for big-endian vec_select.
Tamar Christina [Thu, 5 Jul 2018 10:35:00 +0000 (10:35 +0000)]
Correct subreg no-op handling for big-endian vec_select.

gcc/

PR target/84711
* rtlanal.c (set_noop_p): Constrain on mode change,
include hard-reg-set.h

gcc/testuite/

PR target/84711
* gcc.dg/vect/pr84711.c: New.

From-SVN: r262435

6 years agoSimplify movmem code by always doing overlapping copies when larger than 8 bytes...
Tamar Christina [Thu, 5 Jul 2018 10:31:04 +0000 (10:31 +0000)]
Simplify movmem code by always doing overlapping copies when larger than 8 bytes on AArch64.

This changes the movmem code in AArch64 that does copy for data between 4 and 7
bytes to use the smallest possible mode capable of copying the remaining bytes in one
go and then overlapping the reads if needed.

This means that if we're copying 5 bytes we would issue an SImode and QImode
load instead of two SImode loads.

This does smaller memory accesses but also gives the mid-end a chance to realise
that it can CSE the loads in certain circumstances. e.g. when you have something
like

return foo;

where foo is a struct. This would be transformed by the mid-end into SSA form as

D.XXXX = foo;

return D.XXXX;

This movmem routine will handle the first copy, but it's usually not needed,
the mid-end would do SImode and QImode stores into X0 for the 5 bytes example
but without the first copies being in the same mode, it doesn't know it doesn't
need the stores at all.

From-SVN: r262434

6 years agoRevert
Jakub Jelinek [Thu, 5 Jul 2018 09:47:05 +0000 (11:47 +0200)]
Revert
2018-07-04  Maxim Ostapenko  <m.ostapenko@samsung.com>

PR sanitizer/84250
* config/gnu-user.h (LIBASAN_EARLY_SPEC): Pass -lstdc++ for static
libasan.
* gcc.c: Do not pass LIBUBSAN_SPEC if ASan is enabled with UBSan.

* Makefile.am: Reorder libs.
* Makefile.in: Regenerate.
* asan/Makefile.am: Define DCAN_SANITIZE_UB=1, add dependancy from
libsanitizer_ubsan.la.
* asan/Makefile.in: Regenerate.
* ubsan/Makefile.am: Define new libsanitizer_ubsan.la library.
* ubsan/Makefile.in: Regenerate.

From-SVN: r262433

6 years ago[testsuite] Remove 'note:' from scan-tree-dump directives
Christophe Lyon [Thu, 5 Jul 2018 09:10:55 +0000 (09:10 +0000)]
[testsuite] Remove 'note:' from scan-tree-dump directives

2018-07-05  Christophe Lyon  <christophe.lyon@linaro.org>

* c-c++-common/unroll-1.c: Remove 'note:' in matching string.
* c-c++-common/unroll-2.c: Likewise.
* g++.dg/cdce3.C: Likewise.
* g++.dg/ext/unroll-1.C: Likewise.
* g++.dg/ext/unroll-2.C: Likewise.
* g++.dg/ext/unroll-3.C: Likewise.
* gcc.dg/cdce1.c: Likewise.
* gcc.dg/cdce2.c: Likewise.
* gcc.dg/gomp/pr68128-1.c: Likewise.
* gcc.dg/vect/pr46032.c: Likewise.
* gcc.dg/vect/vect-cond-10.c: Likewise.
* gcc.dg/vect/vect-cond-8.c: Likewise.
* gcc.dg/vect/vect-cond-9.c: Likewise.
* gcc.dg/vect/vect-mask-load-1.c: Likewise.
* gcc.dg/vect/vect-mask-loadstore-1.c: Likewise.
* gcc.target/i386/avx-cvt-2.c: Likewise.
* gcc.target/i386/avx-cvt-3.c: Likewise.
* gcc.target/i386/avx2-cvt-2.c: Likewise.
* gcc.target/i386/avx2-gather-2.c: Likewise.
* gcc.target/i386/avx2-gather-6.c: Likewise.
* gcc.target/i386/avx512f-gather-2.c: Likewise.
* gcc.target/i386/sse2-cvt-2.c: Likewise.
* gfortran.dg/directive_unroll_1.f90: Likewise.
* gfortran.dg/directive_unroll_2.f90: Likewise.
* gnat.dg/unroll2.adb: Likewise.
* gnat.dg/unroll3.adb: Likewise.

From-SVN: r262432

6 years ago[testsuite] Simplify dg-final
Tom de Vries [Thu, 5 Jul 2018 08:19:15 +0000 (08:19 +0000)]
[testsuite] Simplify dg-final

2018-07-05  Tom de Vries  <tdevries@suse.de>

* lib/gcc-dg.exp (dg-final): Simplify tcl code.

From-SVN: r262431

6 years agoFix my yesterday ChangeLog entry.
François Dumont [Thu, 5 Jul 2018 04:57:52 +0000 (04:57 +0000)]
Fix my yesterday ChangeLog entry.

From-SVN: r262429

6 years agoDaily bump.
GCC Administrator [Thu, 5 Jul 2018 00:16:59 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262428

6 years agoP0646R1 Improving the Return Value of Erase-Like Algorithms I
Jonathan Wakely [Wed, 4 Jul 2018 20:15:01 +0000 (21:15 +0100)]
P0646R1 Improving the Return Value of Erase-Like Algorithms I

In C++2a the remove, remove_if and unique members of std::list and
std::forward_list have been changed to return the number of elements
removed. This is an ABI change for the remove members and the
non-template unique members, so an abi-tag is used to give those symbols
new mangled names in C++2a mode. For the function templates the return
type is part of the mangled name so no abi-tag is needed.

* include/bits/forward_list.h (__cpp_lib_list_remove_return_type):
Define.
(forward_list::__remove_return_type): Define typedef as size_type or
void, according to __cplusplus value.
(_GLIBCXX_FWDLIST_REMOVE_RETURN_TYPE_TAG): Define macro as abi-tag or
empty, according to __cplusplus value.
(forward_list::remove, forward_list::unique): Use typedef and macro
to change return type and add abi-tag for C++2a.
(forward_list::remove_if<Pred>, forward_list::unique<BinPred>): Use
typedef to change return type for C++2a.
* include/bits/forward_list.tcc (_GLIBCXX20_ONLY): Define macro.
(forward_list::remove, forward_list::remove_if<Pred>)
(forward_list::unique<BinPred>): Return number of removed elements
for C++2a.
* include/bits/list.tcc (_GLIBCXX20_ONLY): Define macro.
(list::remove, list::unique, list::remove_if<Predicate>)
(list::unique<BinaryPredicate>): Return number of removed elements
for C++2a.
* include/bits/stl_list.h (__cpp_lib_list_remove_return_type): Define.
(list::__remove_return_type): Define typedef as size_type or
void, according to __cplusplus value.
(_GLIBCXX_LIST_REMOVE_RETURN_TYPE_TAG): Define macro as abi-tag or
empty, according to __cplusplus value.
(list::remove, list::unique): Use typedef and macro to change return
type and add abi-tag for C++2a.
(list::remove_if<Predicate>, list::unique<BinaryPredicate>): Use
typedef to change return type for C++2a.
* include/std/version (__cpp_lib_list_remove_return_type): Define.
* testsuite/23_containers/forward_list/operations/
remove_cxx20_return.cc: New.
* testsuite/23_containers/forward_list/operations/
unique_cxx20_return.cc: New.

From-SVN: r262423

6 years agore PR sanitizer/84250 (Symbol collision when using both Address and Undefined Behavio...
Maxim Ostapenko [Wed, 4 Jul 2018 19:49:06 +0000 (19:49 +0000)]
re PR sanitizer/84250 (Symbol collision when using both Address and Undefined Behavior sanitizers (-fsanitize=address,undefined))

gcc/

2018-07-04  Maxim Ostapenko  <m.ostapenko@samsung.com>

PR sanitizer/84250
* config/gnu-user.h (LIBASAN_EARLY_SPEC): Pass -lstdc++ for static
libasan.
* gcc.c: Do not pass LIBUBSAN_SPEC if ASan is enabled with UBSan.

libsanitizer/

2018-07-04  Maxim Ostapenko  <m.ostapenko@samsung.com>

PR sanitizer/84250
* Makefile.am: Reorder libs.
* Makefile.in: Regenerate.
* asan/Makefile.am: Define DCAN_SANITIZE_UB=1, add dependancy from
libsanitizer_ubsan.la.
* asan/Makefile.in: Regenerate.
* ubsan/Makefile.am: Define new libsanitizer_ubsan.la library.
* ubsan/Makefile.in: Regenerate.

From-SVN: r262421

6 years agore PR c++/86398 (is_trivially_constructible always returns true even when is_construc...
Ville Voutilainen [Wed, 4 Jul 2018 19:21:38 +0000 (22:21 +0300)]
re PR c++/86398 (is_trivially_constructible always returns true even when is_constructible returns false)

PR c++/86398

gcc/cp/

PR c++/86398
* method.c (is_trivially_xible): Return false
if is_xible_helper returns a NULL_TREE.

testsuite/

PR c++/86398
* g++.dg/ext/is_trivially_constructible1.C: Add new tests.

From-SVN: r262420

6 years agore PR tree-optimization/86274 (SEGFAULT when logging std::to_string(NAN))
Martin Sebor [Wed, 4 Jul 2018 18:58:51 +0000 (18:58 +0000)]
re PR tree-optimization/86274 (SEGFAULT when logging std::to_string(NAN))

gcc/testsuite/ChangeLog:

PR tree-optimization/86274
* gcc.dg/tree-ssa/builtin-sprintf-9.c: Fix typo.

From-SVN: r262419

6 years agoP0458R2 Checking for Existence of an Element in Associative Containers
Jonathan Wakely [Wed, 4 Jul 2018 18:16:26 +0000 (19:16 +0100)]
P0458R2 Checking for Existence of an Element in Associative Containers

* include/bits/stl_map.h (map::contains): Add for C++2a.
* include/bits/stl_multimap.h (multimap::contains): Likewise.
* include/bits/stl_multiset.h (multiset::contains): Likewise.
* include/bits/stl_set.h (set::contains): Likewise.
* include/bits/stl_tree.h (__has_is_transparent_t): Define alias.
(_Rb_tree::_M_find_tr, _Rb_tree::_M_count_tr)
(_Rb_tree::_M_lower_bound_tr, _Rb_tree::_M_upper_bound_tr)
(_Rb_tree::_M_equal_range_tr): Use __has_is_transparent_t.
* include/bits/unordered_map.h (unordered_map::contains)
(unordered_multimap::contains): Add for C++2a.
* include/bits/unordered_set.h (unordered_set::contains)
(unordered_multiset::contains): Likewise.
* testsuite/23_containers/map/operations/contains.cc: New.
* testsuite/23_containers/multimap/operations/contains.cc: New.
* testsuite/23_containers/multiset/operations/contains.cc: New.
* testsuite/23_containers/set/operations/contains.cc: New.
* testsuite/23_containers/unordered_map/operations/contains.cc: New.
* testsuite/23_containers/unordered_multimap/operations/contains.cc:
New.
* testsuite/23_containers/unordered_multiset/operations/contains.cc:
New.
* testsuite/23_containers/unordered_set/operations/contains.cc: New.

From-SVN: r262418

6 years agore PR libstdc++/86272 (__gnu_debug::string uses undefined __glibcxx_check_insert_range2)
François Dumont [Wed, 4 Jul 2018 18:13:11 +0000 (18:13 +0000)]
re PR libstdc++/86272 (__gnu_debug::string uses undefined __glibcxx_check_insert_range2)

2018-07-04  François Dumont  <fdumont@gcc.gnu.org>

PR libstdc++/86272
* include/debug/string
(__gnu_debug::basic_string<>::insert<_Ite>(const_iterator, _Ite, _Ite)):
Use __glibcxx_check_insert_range.
* 21_strings/basic_string/cons/char/1.cc: Adapt test to use
__gnu_debug::string when _GLIBCXX_DEBUG.
* 21_strings/basic_string/init-list.cc: Likewise.
* 21_strings/basic_string/modifiers/insert/char/1.cc: Likewise.
* 21_strings/basic_string/modifiers/insert/char/2.cc: Likewise.
* 21_strings/basic_string/modifiers/insert/char/83328.cc: Likewise.
* 21_strings/basic_string/types/1.cc: Likewise.

From-SVN: r262417

6 years agore PR fortran/82009 ([F08] ICE with block construct)
Jerry DeLisle [Wed, 4 Jul 2018 18:08:16 +0000 (18:08 +0000)]
re PR fortran/82009 ([F08] ICE with block construct)

2018-07-04  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR fortran/82009
* trans-decl.c (gfc_process_block_locals): Delete assert and set
saved_local_decls = NULL_TREE.

* gfortran.dg/block_16.f08. New test.

From-SVN: r262416

6 years agoDefine "random_device" effective target
Jonathan Wakely [Wed, 4 Jul 2018 16:56:21 +0000 (17:56 +0100)]
Define "random_device" effective target

Currently only matches targets where _GLIBCXX_USE_RANDOM_TR1 is defined,
which means /dev/random and /dev/urandom are usable.

* testsuite/25_algorithms/make_heap/complexity.cc: Require effective
target for std::random_device.
* testsuite/26_numerics/random/random_device/cons/default.cc:
Likewise.
* testsuite/experimental/algorithm/sample-2.cc: Likewise.
* testsuite/experimental/algorithm/shuffle.cc: Likewise.
* testsuite/experimental/random/randint.cc: Likewise.
* testsuite/lib/libstdc++.exp
(check_effective_target_random_device): New proc.

From-SVN: r262415

6 years agoFix std::__rotl and std::__rotr
Jonathan Wakely [Wed, 4 Jul 2018 14:31:56 +0000 (15:31 +0100)]
Fix std::__rotl and std::__rotr

2018-07-04  Jonathan Wakely  <jwakely@redhat.com>
    Jakub Jelinek  <jakub@redhat.com>

* include/std/bit (__rotl, __rotr): Fix for non-power of two sizes.

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

6 years agore PR middle-end/86380 (incorrect comparison in function choose_multiplier)
Eric Botcazou [Wed, 4 Jul 2018 12:56:48 +0000 (12:56 +0000)]
re PR middle-end/86380 (incorrect comparison in function choose_multiplier)

PR middle-end/86380
* expmed.c (choose_multiplier): Fix incorrect comparison with mask.

From-SVN: r262401

6 years agoRemove spurious $HOME include from BRIG FE Makefile
Martin Jambor [Wed, 4 Jul 2018 12:08:16 +0000 (14:08 +0200)]
Remove spurious $HOME include from BRIG FE Makefile

2018-07-04  Martin Jambor  <mjambor@suse.cz>

PR hsa/86371
* Make-lang.in (BRIGINCLUDES): Remove erroneous include path in $HOME.

From-SVN: r262398

6 years agotree-vrp.c (extract_range_from_binary_expr_1): Initialze neg_*_op* variables.
Aldy Hernandez [Wed, 4 Jul 2018 09:03:35 +0000 (09:03 +0000)]
tree-vrp.c (extract_range_from_binary_expr_1): Initialze neg_*_op* variables.

       * tree-vrp.c (extract_range_from_binary_expr_1): Initialze
       neg_*_op* variables.

From-SVN: r262380

6 years agoPR libstdc++/86398 fix std::is_trivially_constructible regression
Jonathan Wakely [Wed, 4 Jul 2018 09:03:18 +0000 (10:03 +0100)]
PR libstdc++/86398 fix std::is_trivially_constructible regression

The intrinsic doesn't check for allowed conversions between scalar
types, so restore the std::is_constructible check.

Also make some trivial whitespace changes.

PR libstdc++/86398
* include/std/type_traits (is_trivially_constructible): Check
is_constructible before __is_trivially_constructible.
* testsuite/20_util/is_trivially_constructible/value.cc: Add more
tests, including negative cases.
* testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Use
zero for dg-error lineno.
* testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
Likewise.

From-SVN: r262379

6 years agoOptimize std::rotl and std::rotr, add test for std::popcount
Jonathan Wakely [Wed, 4 Jul 2018 08:07:23 +0000 (09:07 +0100)]
Optimize std::rotl and std::rotr, add test for std::popcount

* include/std/bit (__rotl, __rotr): Avoid branch.
(_If_is_unsigned_integer): Use remove_cv_t.
* testsuite/26_numerics/bit/bitops.count/popcount.cc: New.

From-SVN: r262378

6 years agossa-dom-thread-7.c: Adjust test because aarch64 has a slightly different IL that...
Aldy Hernandez [Wed, 4 Jul 2018 08:04:55 +0000 (08:04 +0000)]
ssa-dom-thread-7.c: Adjust test because aarch64 has a slightly different IL that provides more...

* gcc.dg/tree-ssa/ssa-dom-thread-7.c: Adjust test because aarch64
has a slightly different IL that provides more threading
opportunities.

From-SVN: r262377

6 years agoFix bootstrap on ia64 with old GCC version.
Martin Liska [Wed, 4 Jul 2018 07:53:05 +0000 (09:53 +0200)]
Fix bootstrap on ia64 with old GCC version.

2018-07-04  Martin Liska  <mliska@suse.cz>

* tree-switch-conversion.c: Define
        max_ratio_for_speed and max_ratio_for_size constants.

From-SVN: r262376

6 years ago[multiple changes]
Martin Liska [Wed, 4 Jul 2018 07:51:08 +0000 (07:51 +0000)]
[multiple changes]

2018-07-04  Denys Vlasenko  <dvlasenk@redhat.com>
    Martin Liska  <mliska@suse.cz>

PR middle-end/66240
PR target/45996
PR c/84100
* common.opt: Rename align options with 'str_' prefix.
* common/config/i386/i386-common.c (set_malign_value): New
function.
(ix86_handle_option): Use it to set -falign-* options/
* config/aarch64/aarch64-protos.h (struct tune_params): Change
type from int to string.
* config/aarch64/aarch64.c: Update default values from int
to string.
* config/alpha/alpha.c (alpha_override_options_after_change):
Likewise.
* config/arm/arm.c (arm_override_options_after_change_1): Likewise.
* config/i386/dragonfly.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Print
max skip conditionally.
* config/i386/freebsd.h (SUBALIGN_LOG): New.
(ASM_OUTPUT_MAX_SKIP_ALIGN): Print
max skip conditionally.
* config/i386/gas.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Print
max skip conditionally.
* config/i386/gnu-user.h (SUBALIGN_LOG): New.
(ASM_OUTPUT_MAX_SKIP_ALIGN): Print
max skip conditionally.
* config/i386/i386.c (struct ptt): Change type from int to
string.
(ix86_default_align): Set default values.
* config/i386/i386.h (ASM_OUTPUT_MAX_SKIP_PAD): Print
max skip conditionally.
* config/i386/iamcu.h (SUBALIGN_LOG): New.
(ASM_OUTPUT_MAX_SKIP_ALIGN):
* config/i386/lynx.h (ASM_OUTPUT_MAX_SKIP_ALIGN):
* config/i386/netbsd-elf.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Print
max skip conditionally.
* config/i386/openbsdelf.h (SUBALIGN_LOG): New.
(ASM_OUTPUT_MAX_SKIP_ALIGN) Print max skip conditionally.:
* config/i386/x86-64.h (SUBALIGN_LOG): New.
(ASM_OUTPUT_MAX_SKIP_ALIGN): Print
max skip conditionally.
(ASM_OUTPUT_MAX_SKIP_PAD): Likewise.
* config/ia64/ia64.c (ia64_option_override): Set default values
        for alignment options.
* config/m68k/m68k.c: Handle new str_align_* options.
* config/mips/mips.c (mips_set_compression_mode): Change
type of constants.
(mips_option_override): Set default values for options.
* config/powerpcspe/powerpcspe.c (rs6000_option_override_internal):
        Likewise.
* config/rs6000/rs6000.c (rs6000_option_override_internal):
Likewise.
* config/rx/rx.c (rx_option_override): Likewise.
* config/rx/rx.h (JUMP_ALIGN): Use align_jumps_log.
(LABEL_ALIGN): Use align_labels_log.
(LOOP_ALIGN): Use align_loops_align.
* config/s390/s390.c (s390_asm_output_function_label): Use new
        macros.
* config/sh/sh.c (sh_override_options_after_change):
Change type of constants.
* config/spu/spu.c (spu_sched_init): Likewise.
* config/sparc/sparc.c (sparc_option_override): Set default
        values for options.
* config/visium/visium.c (visium_option_override): Likewise.
* config/visium/visium.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Do not
        emit p2align format with last argument if it's not needed.
* doc/invoke.texi: Document extended format of -falign-*.
* final.c: Use align_labels alignment.
* flags.h (struct target_flag_state): Change type to use
align_flags.
(struct align_flags_tuple): New.
(struct align_flags): Likewise.
(align_loops_log): Redefine macro to use new types.
(align_loops_max_skip): Redefine macro to use new types.
(align_jumps_log): Redefine macro to use new types.
(align_jumps_max_skip): Redefine macro to use new types.
(align_labels_log): Redefine macro to use new types.
(align_labels_max_skip): Redefine macro to use new types.
(align_functions_log): Redefine macro to use new types.
(align_loops): Redefine macro to use new types.
(align_jumps): Redefine macro to use new types.
(align_labels): Redefine macro to use new types.
(align_functions): Redefine macro to use new types.
(align_functions_max_skip): Redefine macro to use new types.
(align_loops_value): New macro.
(align_jumps_value): New macro.
(align_labels_value): New macro.
(align_functions_value): New macro.
* function.c (invoke_set_current_function_hook): Propagate
alignment values from flags to global variables default in
topleev.h.
* ipa-icf.c (sem_function::equals_wpa): Use
cl_optimization_option_eq instead of memcmp.
* lto-streamer.h (cl_optimization_stream_out): Support streaming
of string types.
(cl_optimization_stream_in): Likewise.
* optc-save-gen.awk: Support strings in cl_optimization.
* opth-gen.awk: Likewise.
* opts.c (finish_options): Remove error checking of invalid
value ranges.
(MAX_CODE_ALIGN): Remove.
(MAX_CODE_ALIGN_VALUE): Likewise.
(parse_and_check_align_values): New function.
(check_alignment_argument): Likewise.
(common_handle_option): Use check_alignment_argument.
* opts.h (parse_and_check_align_values): Declare.
* toplev.c (init_alignments): Remove.
(read_log_maxskip): New.
(parse_N_M): Likewise.
(parse_alignment_opts): Likewise.
(backend_init_target): Remove usage of init_alignments.
* toplev.h (parse_alignment_opts): Declare.
* tree-streamer-in.c (streamer_read_tree_bitfields): Add new
argument.
* tree-streamer-out.c (streamer_write_tree_bitfields): Likewise.
* tree.c (cl_option_hasher::equal): New.
* varasm.c: Use new global macros.
2018-07-04  Martin Liska  <mliska@suse.cz>

PR middle-end/66240
PR target/45996
PR c/84100
* lto.c (compare_tree_sccs_1): Use cl_optimization_option_eq
instead of memcmp.
2018-07-04  Martin Liska  <mliska@suse.cz>

PR middle-end/66240
PR target/45996
PR c/84100
* gcc.dg/pr84100.c (foo):
* gcc.target/i386/falign-functions-2.c: New test.
* gcc.target/i386/falign-functions.c: New test.

From-SVN: r262375

6 years agoTemporary remove "at least 8 byte alignment" code from x86
Denys Vlasenko [Wed, 4 Jul 2018 07:35:37 +0000 (07:35 +0000)]
Temporary remove "at least 8 byte alignment" code from x86

2018-07-04  Denys Vlasenko  <dvlasenk@redhat.com>

* config/i386/dragonfly.h: (ASM_OUTPUT_MAX_SKIP_ALIGN):
Use a simpler align directive also if MAXSKIP = ALIGN-1.
* config/i386/gas.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.
* config/i386/lynx.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.
* config/i386/netbsd-elf.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.
* config/i386/i386.h (ASM_OUTPUT_MAX_SKIP_PAD): Likewise.
* config/i386/freebsd.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Remove "If N
is large, do at least 8 byte alignment" code. Add SUBALIGN_LOG
define. Use a simpler align directive also if MAXSKIP = ALIGN-1.
* config/i386/gnu-user.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.
* config/i386/iamcu.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.
* config/i386/openbsdelf.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.
* config/i386/x86-64.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.

From-SVN: r262374

6 years agoFix DOS-based system build and fix documentation.
Martin Liska [Wed, 4 Jul 2018 07:32:16 +0000 (09:32 +0200)]
Fix DOS-based system build and fix documentation.

2018-07-04  Martin Liska  <mliska@suse.cz>
            Jonathan Wakely  <jwakely@redhat.com>

* coverage.c: Use correct type.
* doc/invoke.texi: Language correction.

Co-Authored-By: Jonathan Wakely <jwakely@redhat.com>
From-SVN: r262373

6 years agoRemove legacy testcase for -fprofile-generate=./
Martin Liska [Wed, 4 Jul 2018 07:31:27 +0000 (09:31 +0200)]
Remove legacy testcase for -fprofile-generate=./

2018-07-04  Martin Liska  <mliska@suse.cz>

* gcc.dg/pr47793.c: Remove.

From-SVN: r262372

6 years agoFix typo in bb-slp-over-widen-*.c
Richard Sandiford [Wed, 4 Jul 2018 07:18:04 +0000 (07:18 +0000)]
Fix typo in bb-slp-over-widen-*.c

2018-07-04  Richard Sandiford  <richard.sandiford@arm.com>

gcc/testsuite/
* gcc.dg/vect/bb-slp-over-widen-1.c: Fix name of dump file for
final scan test.
* gcc.dg/vect/bb-slp-over-widen-2.c: Likewise.

From-SVN: r262371

6 years agoi386: Add indirect_return function attribute
H.J. Lu [Wed, 4 Jul 2018 03:01:33 +0000 (03:01 +0000)]
i386: Add indirect_return function attribute

On x86, swapcontext may return via indirect branch when shadow stack
is enabled.  To support code instrumentation of control-flow transfers
with -fcf-protection, add indirect_return function attribute to inform
compiler that a function may return via indirect branch.

Note: Unlike setjmp, swapcontext only returns once.  Mark it return
twice will unnecessarily disable compiler optimization as shown in
the testcase here.

gcc/

PR target/85620
* config/i386/i386.c (rest_of_insert_endbranch): Also generate
ENDBRANCH for non-tail call which may return via indirect branch.
* doc/extend.texi: Document indirect_return attribute.

gcc/testsuite/

PR target/85620
* gcc.target/i386/pr85620-1.c: New test.
* gcc.target/i386/pr85620-2.c: Likewise.
* gcc.target/i386/pr85620-3.c: Likewise.
* gcc.target/i386/pr85620-4.c: Likewise.

From-SVN: r262370

6 years agoh8300.md (logical<mode>3_sn, [...]): Merge into a single pattern.
Jeff Law [Wed, 4 Jul 2018 02:22:35 +0000 (20:22 -0600)]
h8300.md (logical<mode>3_sn, [...]): Merge into a single pattern.

        * config/h8300/h8300.md (logical<mode>3_sn, logical<mode>3): Merge
        into a single pattern.

From-SVN: r262369

6 years agoPR tree-optimization/86274 - SEGFAULT when logging std::to_string(NAN)
Martin Sebor [Wed, 4 Jul 2018 02:19:35 +0000 (02:19 +0000)]
PR tree-optimization/86274 - SEGFAULT when logging std::to_string(NAN)

gcc/ChangeLog:

PR tree-optimization/86274
* gimple-ssa-sprintf.c (fmtresult::type_max_digits): Verify
precondition.
(format_floating): Correct handling of infinities and NaNs.

gcc/testsuite/ChangeLog:

PR tree-optimization/86274
* gcc.dg/tree-ssa/builtin-sprintf-9.c: New test.
* gcc.dg/tree-ssa/builtin-sprintf-warn-1.c: Adjust.
* gcc.dg/tree-ssa/builtin-sprintf-warn-10.c: Same.
* gcc.dg/tree-ssa/builtin-sprintf-warn-15.c: Same.
* gcc.dg/tree-ssa/builtin-sprintf-warn-7.c: Same.
* gcc.dg/tree-ssa/builtin-sprintf.c: Same.
* gcc.dg/tree-ssa/pr83198.c: Same.

From-SVN: r262368

6 years agoprint-tree.c (print_real_cst): New function.
Martin Sebor [Wed, 4 Jul 2018 02:14:16 +0000 (02:14 +0000)]
print-tree.c (print_real_cst): New function.

gcc/ChangeLog:

* print-tree.c (print_real_cst): New function.
(print_node_brief): Call it.
(print_node): Ditto.

From-SVN: r262367

6 years agoh8300.md (ors code_iterator): New.
Jeff Law [Wed, 4 Jul 2018 01:03:52 +0000 (19:03 -0600)]
h8300.md (ors code_iterator): New.

* config/h8300/h8300.md (ors code_iterator): New.
(bsetqi_msx, bnotqi_msx patterns and splitters): Consolidate into
a single pattern and single splitter.
(bsethi_msx, bnothi_msx patterns): Consolidate into a single pattern.
(iorqi3_1, xorqi3_1): Likewise.
(iorqi3, xorqi3 expanders): Similarly.

From-SVN: r262366

6 years agoh8300.md (movmd_internal_normal): Consolidated with (movmd_internal) into a single...
Jeff Law [Wed, 4 Jul 2018 00:27:38 +0000 (18:27 -0600)]
h8300.md (movmd_internal_normal): Consolidated with (movmd_internal) into a single pattern using the P mode iterator.

* config/h8300/h8300.md (movmd_internal_normal): Consolidated with
(movmd_internal) into a single pattern using the P mode iterator.
(movmd splitters): Similarly.
(stpcpy_internal_normal, stpcpy_internal): Similarly for thes patterns.
(movsd splitters): Similarly.

From-SVN: r262365

6 years agoDaily bump.
GCC Administrator [Wed, 4 Jul 2018 00:17:01 +0000 (00:17 +0000)]
Daily bump.

From-SVN: r262364

6 years agoP0556R3 Integral power-of-2 operations, P0553R2 Bit operations
Jonathan Wakely [Tue, 3 Jul 2018 21:04:45 +0000 (22:04 +0100)]
P0556R3 Integral power-of-2 operations, P0553R2 Bit operations

P0553R2 is not in the C++2a working draft yet, but is likely to be
approved soon. Neither proposal supports std::byte but this adds
overloads of each function for std::byte, assuming that will also get
added.

* include/Makefile.am: Add new header.
* include/Makefile.in: Regenerate.
* include/precompiled/stdc++.h: Include new header.
* include/std/bit: New header.
(__rotl, __rotr, __countl_zero, __countl_one, __countr_zero)
(__countr_one, __popcount, __ispow2, __ceil2, __floor2, __log2p1):
Define for C++14.
[!__STRICT_ANSI__] (rotl, rotr, countl_zero, countl_one, countr_zero)
(countr_one, popcount): Define for C++2a. Also overload for std::byte.
(ispow2, ceil2, floor2, log2p1): Define for C++2a.
[!__STRICT_ANSI__] (ispow2, ceil2, floor2, log2p1): Overload for
std::byte.
* testsuite/26_numerics/bit/bit.pow.two/ceil2.cc: New.
* testsuite/26_numerics/bit/bit.pow.two/floor2.cc: New.
* testsuite/26_numerics/bit/bit.pow.two/ispow2.cc: New.
* testsuite/26_numerics/bit/bit.pow.two/log2p1.cc: New.
* testsuite/26_numerics/bit/bitops.rot/rotl.cc: New.
* testsuite/26_numerics/bit/bitops.rot/rotr.cc: New.
* testsuite/26_numerics/bit/bitops.count/countl_one.cc: New.
* testsuite/26_numerics/bit/bitops.count/countl_zero.cc: New.
* testsuite/26_numerics/bit/bitops.count/countr_one.cc: New.
* testsuite/26_numerics/bit/bitops.count/countr_zero.cc: New.

From-SVN: r262360

6 years agoRemove redundant #if conditional
Jonathan Wakely [Tue, 3 Jul 2018 21:04:37 +0000 (22:04 +0100)]
Remove redundant #if conditional

The whole file is guarded by the same check already.

* include/bits/alloc_traits.h: Remove redundant preprocessor
condition.

From-SVN: r262359

6 years agodecl.c (min_location): New.
Paolo Carlini [Tue, 3 Jul 2018 21:03:51 +0000 (21:03 +0000)]
decl.c (min_location): New.

/cp
2018-07-03  Paolo Carlini  <paolo.carlini@oracle.com>

* decl.c (min_location): New.
(smallest_type_quals_location): Use the latter.
(check_concept_fn): Use DECL_SOURCE_LOCATION.
(grokdeclarator): Use accurate locations in a number of error
messages involving ds_thread, ds_storage_class, ds_virtual,
ds_constexpr, ds_typedef and ds_friend; exploit min_location.

/testsuite
2018-07-03  Paolo Carlini  <paolo.carlini@oracle.com>

* g++.dg/other/locations1.C: New.
* g++.dg/tls/locations1.C: Likewise.
* g++.dg/diagnostic/virtual-constexpr.C: Likewise.
* g++.dg/diagnostic/virtual-static.C: Likewise.
* g++.dg/concepts/fn-concept2.C: Test the locations too.
* g++.dg/cpp0x/constexpr-virtual5.C: Likewise.
* g++.dg/cpp0x/pr51463.C: Likewise.
* g++.dg/other/typedef1.C: Likewise.
* g++.dg/parse/dtor13.C: Likewise.
* g++.dg/template/error44.C: Likewise.
* g++.dg/template/typedef4.C: Likewise.
* g++.dg/template/typedef5.C: Likewise.
* g++.dg/tls/diag-2.C: Likewise.
* g++.old-deja/g++.brendan/crash11.C: Likewise.

From-SVN: r262358

6 years agoh8300.c (h8300_insn_length_from_table): Consolidate ADDB...
Jeff Law [Tue, 3 Jul 2018 19:37:41 +0000 (13:37 -0600)]
h8300.c (h8300_insn_length_from_table): Consolidate ADDB...

* config/h8300/h8300.c (h8300_insn_length_from_table): Consolidate
ADDB, ADDW and ADDL into a single ADD attribute which selects the
right table based on the size of the operand.
* config/h8300/h8300.md (length_table): Corresponding changes. All
references to "addb", "addw" and "addl" changed to "add".
(btst patterns): Merge two variants into a single pattern.
(tstqi, tsthi): Likewise.
(addhi3_incdec, addsi3_incdec): Likewise.
(subhi3_h8300hs, subsi3_h8300hs): Likewise.
(mulhi3, mulsi3): Likewise.
(udivhi3, udivsi3): Likewise.
(divhi3, divsi3): Likewise.
(andorqi3, andorhi3, andorsi3): Likewise.

From-SVN: r262357

6 years agore PR tree-optimization/85694 (Generation of vectorized AVG (Average) instruction)
Uros Bizjak [Tue, 3 Jul 2018 17:33:28 +0000 (19:33 +0200)]
re PR tree-optimization/85694 (Generation of vectorized AVG (Average) instruction)

PR target/85694
* config/i386/sse.md (uavg<mode>3_ceil): New expander.
(<sse2_avx2>_uavg<mode>3<mask_name>): Simplify expander.

testsuite/ChangeLog:

PR target/85694
* gcc.target/i386/pr85694.c: New test.

From-SVN: r262354

6 years agore PR c++/86201 (ICE: Error reporting routines re-entered)
Marek Polacek [Tue, 3 Jul 2018 16:38:16 +0000 (16:38 +0000)]
re PR c++/86201 (ICE: Error reporting routines re-entered)

PR c++/86201
* typeck.c (cp_build_binary_op): Check c_inhibit_evaluation_warnings.

* g++.dg/diagnostic/pr86201.C: New test.

From-SVN: r262353

6 years agostl_algobase.h (__niter_wrap): New.
François Dumont [Tue, 3 Jul 2018 15:50:12 +0000 (15:50 +0000)]
stl_algobase.h (__niter_wrap): New.

2018-07-03  François Dumont  <fdumont@gcc.gnu.org>

* include/bits/stl_algobase.h (__niter_wrap): New.
(__copy_move_a2(_II, _II, _OI)): Use latter.
(__copy_move_backward_a2(_BI1, _BI1, _BI2)): Likewise.
(fill_n(_OI, _Size, const _Tp&)): Likewise.
(equal(_II1, _II1, _II2)): Use __glibcxx_requires_can_increment.
* include/debug/stl_iterator.h
(std::__niter_base(const __gnu_cxx::_Safe_iterator<
__gnu_cxx::__normal_iterator<>, _Sequence>&)): New declaration.
* include/debug/vector (__niter_base(const __gnu_cxx::_Safe_iterator<
__gnu_cxx::__normal_iterator<>, _Sequence>&)): New.

From-SVN: r262349

6 years agoReorg line_map data structures for better packing.
Nathan Sidwell [Tue, 3 Jul 2018 14:47:11 +0000 (14:47 +0000)]
Reorg line_map data structures for better packing.

* include/line-map.h (enum lc_reason): Add LC_HWM.
(LINE_MAP_MAX_LOCATION): Define here.
(struct line_map): Move reason field to line_map_ordinary.  Adjust
GTY tagging.
(struct line_map_ordinary): Reorder fields for less padding.
(struct line_map_macro): Likewise.
(MAP_ORDINARY_P): New.
(linemap_check_ordinary, linemap_check_macro): Adjust.
* line-map.c (LINE_MAP_MAX_SOURCE_LOCATION): Delete.
(new_linemap): Take start_location, not reason.  Adjust.
(linemap_add, linemap_enter_macro): Adjust.
(linemap_line_start): Likewise.
(linemap_macro_expansion_map_p): Use MAP_ORDINARY_P.
(linemap_macro_loc_to_spelling_point): Likewise.
(linemap_macro_loc_to_def_point): Likewise.
(linemap_dump): Likewise.

From-SVN: r262348

6 years ago[17/n] PR85694: AArch64 support for AVG_FLOOR/CEIL
Richard Sandiford [Tue, 3 Jul 2018 14:27:28 +0000 (14:27 +0000)]
[17/n] PR85694: AArch64 support for AVG_FLOOR/CEIL

This patch adds AArch64 patterns for the new AVG_FLOOR/CEIL operations.
AVG_FLOOR is [SU]HADD and AVG_CEIL is [SU]RHADD.

2018-07-03  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
PR tree-optimization/85694
* config/aarch64/iterators.md (HADD, RHADD): New int iterators.
(u): Handle UNSPEC_SHADD, UNSPEC_UHADD, UNSPEC_SRHADD and
UNSPEC_URHADD.
* config/aarch64/aarch64-simd.md (<u>avg<mode>3_floor)
(<u>avg<mode>3_ceil): New patterns.

gcc/testsuite/
PR tree-optimization/85694
* lib/target-supports.exp (check_effective_target_vect_avg_qi):
Return true for AArch64 without SVE.
* gcc.target/aarch64/vect_hadd_1.h: New file.
* gcc.target/aarch64/vect_shadd_1.c: New test.
* gcc.target/aarch64/vect_srhadd_1.c: Likewise.
* gcc.target/aarch64/vect_uhadd_1.c: Likewise.
* gcc.target/aarch64/vect_urhadd_1.c: Likewise.

From-SVN: r262347

6 years agoRemove "note: " prefix from some scan-tree-dump directives
David Malcolm [Tue, 3 Jul 2018 14:26:56 +0000 (14:26 +0000)]
Remove "note: " prefix from some scan-tree-dump directives

gcc/testsuite/ChangeLog:
* gcc.dg/vect/slp-perm-1.c: Remove "note: " prefix from
scan-tree-dump directive.
* gcc.dg/vect/slp-perm-2.c: Likewise.
* gcc.dg/vect/slp-perm-3.c: Likewise.
* gcc.dg/vect/slp-perm-5.c: Likewise.
* gcc.dg/vect/slp-perm-6.c: Likewise.
* gcc.dg/vect/slp-perm-7.c: Likewise.
* gcc.dg/vect/slp-perm-8.c: Likewise.

From-SVN: r262346

6 years agore PR c++/84306 (Wrong overload selected with -std=c++17, explicit and {})
Marek Polacek [Tue, 3 Jul 2018 14:25:38 +0000 (14:25 +0000)]
re PR c++/84306 (Wrong overload selected with -std=c++17, explicit and {})

PR c++/84306
* g++.dg/overload/conv-op3.C: New test.

From-SVN: r262345

6 years agore PR middle-end/86202 (ICE in get_range_info calling an invalid memcpy() declaration)
Marek Polacek [Tue, 3 Jul 2018 14:21:15 +0000 (14:21 +0000)]
re PR middle-end/86202 (ICE in get_range_info calling an invalid memcpy() declaration)

PR middle-end/86202
* gimple-fold.c (size_must_be_zero_p): Check the type of the size.

* gcc.dg/Wint-conversion-2.c: New test.

From-SVN: r262344

6 years agoPR c++/86378 - functional cast in noexcept-specifier.
Jason Merrill [Tue, 3 Jul 2018 14:13:02 +0000 (10:13 -0400)]
PR c++/86378 - functional cast in noexcept-specifier.

* tree.c (strip_typedefs_expr) [TREE_LIST]: Fix iteration.

From-SVN: r262343

6 years agoh8300.md (HSI, [...]): New mode iterators.
Jeff Law [Tue, 3 Jul 2018 13:59:06 +0000 (07:59 -0600)]
h8300.md (HSI, [...]): New mode iterators.

* config/h8300/h8300.md (HSI, QHSI, QHSIF): New mode iterators.
(shifts): New code iterator.
(movqi, movhi, movsi, movsf expanders): Consolidate into a single
expander.  Fix HImode handling on H8/SX.
(addqi3, addhi3, addsi3 expanders): Consolidate into a single expander.
(subqi3, subhi3, subsi3 expanders): Likewise.
(andqi3, andhi3, andsi3 expanders): Likewise.
(iorqi3, iorhi3, iorsi3 expanders): Likewise.
(xorqi3, xorhi3, xorsi3 expanders): Likewise.
(negqi2, neghi2, negsi2, negsf2 expanders): Likewise.
(one_cmplqi2, one_cmplhi2, one_cmplsi2): Likewise.
(zero_extendqihi2, zero_extendqisi2): Likewise.
(extendqihi2, extendqisi2): Likewise.
(rotlqi3, rotlhi3, rotlsi3): Likewise.
(neghi2_h8300, negsi2_h8300): Likewise for these patterns.
(rotlqi3_1, rotlhi3_1): Likewise.
(logicalhi3_sn, logicalsi3_sn): Likewise.
(logicalhi3, logicalsi3): Likewise.

From-SVN: r262342

6 years agore PR ipa/86389 (execute FAILs with -fipa-pta)
Richard Biener [Tue, 3 Jul 2018 13:56:58 +0000 (13:56 +0000)]
re PR ipa/86389 (execute FAILs with -fipa-pta)

2018-07-03  Richard Biener  <rguenther@suse.de>

PR ipa/86389
* tree-ssa-structalias.c (find_func_clobbers): Properly
handle indirect calls.

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

From-SVN: r262341

6 years agoRemove powerpc-linux_paired from config-list.mk
Segher Boessenkool [Tue, 3 Jul 2018 11:22:24 +0000 (13:22 +0200)]
Remove powerpc-linux_paired from config-list.mk

The target has been removed, so we shouldn't try to build it.

PR target/86382
* contrib/config-list.mk: Remove powerpc-linux_paired.

From-SVN: r262340

6 years agoPass more vector types to append_pattern_def_seq
Richard Sandiford [Tue, 3 Jul 2018 10:04:28 +0000 (10:04 +0000)]
Pass more vector types to append_pattern_def_seq

The PR85694 series added a vectype argument to append_pattern_def_seq.
This patch makes more callers use it.

2018-07-03  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-vect-patterns.c (vect_recog_rotate_pattern)
(vect_recog_vector_vector_shift_pattern, vect_recog_divmod_pattern)
(vect_recog_mixed_size_cond_pattern, adjust_bool_pattern_cast)
(adjust_bool_pattern, vect_recog_bool_pattern): Pass the vector
type to append_pattern_def_seq instead of creating a stmt_vec_info
directly.
(build_mask_conversion): Likewise.  Remove vinfo argument.
(vect_add_conversion_to_patterm): Likewise, renaming to...
(vect_add_conversion_to_pattern): ...this.
(vect_recog_mask_conversion_pattern): Update call to
build_mask_conversion.  Pass the vector type to
append_pattern_def_seq here too.
(vect_recog_gather_scatter_pattern): Update call to
vect_add_conversion_to_pattern.

From-SVN: r262338

6 years agoEnsure PATTERN_DEF_SEQ is empty before recognising patterns
Richard Sandiford [Tue, 3 Jul 2018 10:04:20 +0000 (10:04 +0000)]
Ensure PATTERN_DEF_SEQ is empty before recognising patterns

Various recognisers set PATTERN_DEF_SEQ to null before adding
statements to it, but it should always be null at that point anyway.
This patch asserts for that in vect_pattern_recog_1 and removes
the redundant code.

2018-07-03  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-vect-patterns.c (new_pattern_def_seq): Delete.
(vect_recog_dot_prod_pattern, vect_recog_sad_pattern)
(vect_recog_widen_op_pattern, vect_recog_over_widening_pattern)
(vect_recog_rotate_pattern, vect_synth_mult_by_constant): Don't set
STMT_VINFO_PATTERN_DEF_SEQ to null here.
(vect_recog_pow_pattern, vect_recog_vector_vector_shift_pattern)
(vect_recog_mixed_size_cond_pattern, vect_recog_bool_pattern): Use
append_pattern_def_seq instead of new_pattern_def_seq.
(vect_recog_divmod_pattern): Do both of the above.
(vect_pattern_recog_1): Assert that STMT_VINO_PATTERN_DEF_SEQ
is null.

From-SVN: r262337

6 years agoClean up interface to vector pattern recognisers
Richard Sandiford [Tue, 3 Jul 2018 10:04:09 +0000 (10:04 +0000)]
Clean up interface to vector pattern recognisers

The PR85694 series removed the only cases in which a pattern recogniser
could attach patterns to more than one statement.  I think it would be
better to avoid adding any new instances of that, since it interferes
with the normal matching order.

This patch therefore switches the interface back to passing a single
statement instead of a vector.  It also gets rid of the clearing of
STMT_VINFO_RELATED_STMT on failure, since no recognisers use it now.

2018-07-03  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-vect-patterns.c (vect_recog_dot_prod_pattern):
(vect_recog_sad_pattern, vect_recog_widen_op_pattern)
(vect_recog_widen_mult_pattern, vect_recog_pow_pattern):
(vect_recog_widen_sum_pattern, vect_recog_over_widening_pattern)
(vect_recog_average_pattern, vect_recog_cast_forwprop_pattern)
(vect_recog_widen_shift_pattern, vect_recog_rotate_pattern)
(vect_recog_vector_vector_shift_pattern, vect_synth_mult_by_constant)
(vect_recog_mult_pattern, vect_recog_divmod_pattern)
(vect_recog_mixed_size_cond_pattern, vect_recog_bool_pattern)
(vect_recog_mask_conversion_pattern): Replace vec<gimple *>
parameter with a single stmt_vec_info.
(vect_recog_func_ptr): Likewise.
(vect_recog_gather_scatter_pattern): Likewise, folding in...
(vect_try_gather_scatter_pattern): ...this.
(vect_pattern_recog_1): Remove stmts_to_replace and just pass
the stmt_vec_info of the statement to be matched.  Don't clear
STMT_VINFO_RELATED_STMT.
(vect_pattern_recog): Update call accordingly.

From-SVN: r262336

6 years ago[16/n] PR85694: Add detection of averaging operations
Richard Sandiford [Tue, 3 Jul 2018 10:03:44 +0000 (10:03 +0000)]
[16/n] PR85694: Add detection of averaging operations

This patch adds detection of average instructions:

       a = (((wide) b + (wide) c) >> 1);
   --> a = (wide) .AVG_FLOOR (b, c);

       a = (((wide) b + (wide) c + 1) >> 1);
   --> a = (wide) .AVG_CEIL (b, c);

in cases where users of "a" need only the low half of the result,
making the cast to (wide) redundant.  The heavy lifting was done by
earlier patches.

This showed up another problem in vectorizable_call: if the call is a
pattern definition statement rather than the main pattern statement,
the type of vectorised call might be different from the type of the
original statement.

2018-07-03  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
PR tree-optimization/85694
* doc/md.texi (avgM3_floor, uavgM3_floor, avgM3_ceil)
(uavgM3_ceil): Document new optabs.
* doc/sourcebuild.texi (vect_avg_qi): Document new target selector.
* internal-fn.def (IFN_AVG_FLOOR, IFN_AVG_CEIL): New internal
functions.
* optabs.def (savg_floor_optab, uavg_floor_optab, savg_ceil_optab)
(savg_ceil_optab): New optabs.
* tree-vect-patterns.c (vect_recog_average_pattern): New function.
(vect_vect_recog_func_ptrs): Add it.
* tree-vect-stmts.c (vectorizable_call): Get the type of the zero
constant directly from the associated lhs.

gcc/testsuite/
PR tree-optimization/85694
* lib/target-supports.exp (check_effective_target_vect_avg_qi): New
proc.
* gcc.dg/vect/vect-avg-1.c: New test.
* gcc.dg/vect/vect-avg-2.c: Likewise.
* gcc.dg/vect/vect-avg-3.c: Likewise.
* gcc.dg/vect/vect-avg-4.c: Likewise.
* gcc.dg/vect/vect-avg-5.c: Likewise.
* gcc.dg/vect/vect-avg-6.c: Likewise.
* gcc.dg/vect/vect-avg-7.c: Likewise.
* gcc.dg/vect/vect-avg-8.c: Likewise.
* gcc.dg/vect/vect-avg-9.c: Likewise.
* gcc.dg/vect/vect-avg-10.c: Likewise.
* gcc.dg/vect/vect-avg-11.c: Likewise.
* gcc.dg/vect/vect-avg-12.c: Likewise.
* gcc.dg/vect/vect-avg-13.c: Likewise.
* gcc.dg/vect/vect-avg-14.c: Likewise.

From-SVN: r262335

6 years ago[15/n] PR85694: Try to split existing casts in widened patterns
Richard Sandiford [Tue, 3 Jul 2018 10:03:17 +0000 (10:03 +0000)]
[15/n] PR85694: Try to split existing casts in widened patterns

The main over-widening patch can introduce quite a few extra casts,
and in many cases those casts simply "tap into" an intermediate
point in an existing extension.  E.g. if we have:

    unsigned char a;
    int ax = (int) a;

and a later operation using ax is shortened to "unsigned short",
we would need:

    unsigned short ax' = (unsigned short) a;

The a->ax extension requires one set of unpacks to get to unsigned
short and another set of unpacks to get to int.  The first set are
then duplicated for ax'.  If both ax and ax' are needed, the a->ax'
extension would end up counting twice during cost calculations.

This patch rewrites the original:

    int ax = (int) a;

into a pattern:

    unsigned short ax' = (unsigned short) a;
    int ax = (int) ax';

so that each extension only counts once.

2018-07-03  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-vect-patterns.c (vect_split_statement): New function.
(vect_convert_input): Use it to try to split an existing cast.

gcc/testsuite/
* gcc.dg/vect/vect-over-widen-5.c: Test that the extensions
get split into two for use by the over-widening pattern.
* gcc.dg/vect/vect-over-widen-6.c: Likewise.
* gcc.dg/vect/vect-over-widen-7.c: Likewise.
* gcc.dg/vect/vect-over-widen-8.c: Likewise.
* gcc.dg/vect/vect-over-widen-9.c: Likewise.
* gcc.dg/vect/vect-over-widen-10.c: Likewise.
* gcc.dg/vect/vect-over-widen-11.c: Likewise.
* gcc.dg/vect/vect-over-widen-12.c: Likewise.
* gcc.dg/vect/vect-over-widen-13.c: Likewise.
* gcc.dg/vect/vect-over-widen-14.c: Likewise.
* gcc.dg/vect/vect-over-widen-15.c: Likewise.
* gcc.dg/vect/vect-over-widen-16.c: Likewise.
* gcc.dg/vect/vect-over-widen-22.c: New test.

From-SVN: r262334

6 years ago[14/n] PR85694: Rework overwidening detection
Richard Sandiford [Tue, 3 Jul 2018 09:59:37 +0000 (09:59 +0000)]
[14/n] PR85694: Rework overwidening detection

This patch is the main part of PR85694.  The aim is to recognise at least:

  signed char *a, *b, *c;
  ...
  for (int i = 0; i < 2048; i++)
    c[i] = (a[i] + b[i]) >> 1;

as an over-widening pattern, since the addition and shift can be done
on shorts rather than ints.  However, it ended up being a lot more
general than that.

The current over-widening pattern detection is limited to a few simple
cases: logical ops with immediate second operands, and shifts by a
constant.  These cases are enough for common pixel-format conversion
and can be detected in a peephole way.

The loop above requires two generalisations of the current code: support
for addition as well as logical ops, and support for non-constant second
operands.  These are harder to detect in the same peephole way, so the
patch tries to take a more global approach.

The idea is to get information about the minimum operation width
in two ways:

(1) by using the range information attached to the SSA_NAMEs
    (effectively a forward walk, since the range info is
    context-independent).

(2) by back-propagating the number of output bits required by
    users of the result.

As explained in the comments, there's a balance to be struck between
narrowing an individual operation and fitting in with the surrounding
code.  The approach is pretty conservative: if we could narrow an
operation to N bits without changing its semantics, it's OK to do that if:

- no operations later in the chain require more than N bits; or

- all internally-defined inputs are extended from N bits or fewer,
  and at least one of them is single-use.

See the comments for the rationale.

I didn't bother adding STMT_VINFO_* wrappers for the new fields
since the code seemed more readable without.

2018-06-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* poly-int.h (print_hex): New function.
* dumpfile.h (dump_dec, dump_hex): Declare.
* dumpfile.c (dump_dec, dump_hex): New poly_wide_int functions.
* tree-vectorizer.h (_stmt_vec_info): Add min_output_precision,
min_input_precision, operation_precision and operation_sign.
* tree-vect-patterns.c (vect_get_range_info): New function.
(vect_same_loop_or_bb_p, vect_single_imm_use)
(vect_operation_fits_smaller_type): Delete.
(vect_look_through_possible_promotion): Add an optional
single_use_p parameter.
(vect_recog_over_widening_pattern): Rewrite to use new
stmt_vec_info infomration.  Handle one operation at a time.
(vect_recog_cast_forwprop_pattern, vect_narrowable_type_p)
(vect_truncatable_operation_p, vect_set_operation_type)
(vect_set_min_input_precision): New functions.
(vect_determine_min_output_precision_1): Likewise.
(vect_determine_min_output_precision): Likewise.
(vect_determine_precisions_from_range): Likewise.
(vect_determine_precisions_from_users): Likewise.
(vect_determine_stmt_precisions, vect_determine_precisions): Likewise.
(vect_vect_recog_func_ptrs): Put over_widening first.
Add cast_forwprop.
(vect_pattern_recog): Call vect_determine_precisions.

gcc/testsuite/
* gcc.dg/vect/vect-widen-mult-u8-u32.c: Check specifically for a
widen_mult pattern.
* gcc.dg/vect/vect-over-widen-1.c: Update the scan tests for new
over-widening messages.
* gcc.dg/vect/vect-over-widen-1-big-array.c: Likewise.
* gcc.dg/vect/vect-over-widen-2.c: Likewise.
* gcc.dg/vect/vect-over-widen-2-big-array.c: Likewise.
* gcc.dg/vect/vect-over-widen-3.c: Likewise.
* gcc.dg/vect/vect-over-widen-3-big-array.c: Likewise.
* gcc.dg/vect/vect-over-widen-4.c: Likewise.
* gcc.dg/vect/vect-over-widen-4-big-array.c: Likewise.
* gcc.dg/vect/bb-slp-over-widen-1.c: New test.
* gcc.dg/vect/bb-slp-over-widen-2.c: Likewise.
* gcc.dg/vect/vect-over-widen-5.c: Likewise.
* gcc.dg/vect/vect-over-widen-6.c: Likewise.
* gcc.dg/vect/vect-over-widen-7.c: Likewise.
* gcc.dg/vect/vect-over-widen-8.c: Likewise.
* gcc.dg/vect/vect-over-widen-9.c: Likewise.
* gcc.dg/vect/vect-over-widen-10.c: Likewise.
* gcc.dg/vect/vect-over-widen-11.c: Likewise.
* gcc.dg/vect/vect-over-widen-12.c: Likewise.
* gcc.dg/vect/vect-over-widen-13.c: Likewise.
* gcc.dg/vect/vect-over-widen-14.c: Likewise.
* gcc.dg/vect/vect-over-widen-15.c: Likewise.
* gcc.dg/vect/vect-over-widen-16.c: Likewise.
* gcc.dg/vect/vect-over-widen-17.c: Likewise.
* gcc.dg/vect/vect-over-widen-18.c: Likewise.
* gcc.dg/vect/vect-over-widen-19.c: Likewise.
* gcc.dg/vect/vect-over-widen-20.c: Likewise.
* gcc.dg/vect/vect-over-widen-21.c: Likewise.

From-SVN: r262333

6 years agoAvoid matching the same pattern statement twice
Richard Sandiford [Tue, 3 Jul 2018 09:58:47 +0000 (09:58 +0000)]
Avoid matching the same pattern statement twice

r262275 allowed pattern matching on pattern statements.  Testing for
SVE on more benchmarks showed a case where this interacted badly
with 14/n.

The new over-widening detection could narrow a COND_EXPR A to another
COND_EXPR B, which mixed_size_cond could then match.  This was working
as expected.  However, we left B (now dead) in the pattern definition
sequence with a non-null PATTERN_DEF_SEQ.  mask_conversion also
matched B, and unlike most recognisers, didn't clear PATTERN_DEF_SEQ
before adding statements to it.  This meant that the statements
created by mixed_size_cond appeared in two supposedy separate
sequences, causing much confusion.

This patch removes pattern statements that are replaced by further
pattern statements.  As a belt-and-braces fix, it also nullifies
PATTERN_DEF_SEQ on failure, in the same way Richard B. did recently
for RELATED_STMT.

I have patches to clean up the PATTERN_DEF_SEQ handling, but they
only apply after the complete PR85694 sequence, whereas this needs
to go in before 14/n.

2018-07-03  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-vect-patterns.c (vect_mark_pattern_stmts): Remove pattern
statements that have been replaced by further pattern statements.
(vect_pattern_recog_1): Clear STMT_VINFO_PATTERN_DEF_SEQ on failure.

gcc/testsuite/
* gcc.dg/vect/vect-mixed-size-cond-1.c: New test.

From-SVN: r262332

6 years agotree-vect-stmts.c (vect_is_simple_use): Consolidate dumping, always set *dt.
Richard Biener [Tue, 3 Jul 2018 09:39:59 +0000 (09:39 +0000)]
tree-vect-stmts.c (vect_is_simple_use): Consolidate dumping, always set *dt.

2018-07-03  Richard Biener  <rguenther@suse.de>

* tree-vect-stmts.c (vect_is_simple_use): Consolidate dumping,
always set *dt.  Dump vectype in vectype overload.
* dumpfile.h (dump_gimple_expr): New function.
(dump_gimple_expr_loc): Likewise.
* dumpfile.c (dump_gimple_expr): New function.
(dump_gimple_expr_loc): Likewise.

From-SVN: r262330

6 years agoh8300.md (movqi_h8300, [...]): Consolidate the H8/300, H8/300H and H8/S variants...
Jeff Law [Tue, 3 Jul 2018 05:14:10 +0000 (23:14 -0600)]
h8300.md (movqi_h8300, [...]): Consolidate the H8/300, H8/300H and H8/S variants into a single pattern.

* config/h8300/h8300.md (movqi_h8300, movqi_h8300hs): Consolidate
the H8/300, H8/300H and H8/S variants into a single pattern.
(movhi_h8300, movqi_h8300hs): Similarly.
(pushqi_h8300hs, pushhi_h8300hs): Consolidate into a single pattern.
(QHI mode iterator): New.

From-SVN: r262329

6 years ago* config/h8300/h8300.md: Remove trailing whitespace.
Jeff Law [Tue, 3 Jul 2018 03:39:56 +0000 (21:39 -0600)]
* config/h8300/h8300.md: Remove trailing whitespace.

From-SVN: r262328

6 years agoRISC-V: Fix interrupt support for -g.
Jim Wilson [Tue, 3 Jul 2018 00:19:59 +0000 (00:19 +0000)]
RISC-V: Fix interrupt support for -g.

gcc/
* config/riscv/riscv.c (riscv_expand_epilogue): Use emit_jump_insn
instead of emit_insn for interrupt returns.
* config/riscv/riscv.md (riscv_met): Add (return) to rtl.
(riscv_sret, riscv_uret): Likewise.

gcc/testsuite/
* gcc.target/riscv/interrupt-debug.c: New.

From-SVN: r262327

6 years agoDaily bump.
GCC Administrator [Tue, 3 Jul 2018 00:16:40 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262326

6 years agoP0758R1 Implicit conversion traits
Jonathan Wakely [Mon, 2 Jul 2018 22:09:25 +0000 (23:09 +0100)]
P0758R1 Implicit conversion traits

Extend __is_convertible_helper to also detect whether the conversion is
non-throwing, for std::is_nothrow_convertible in C++2a,

* include/std/type_traits [__cplusplus > 201703]
(__is_convertible_helper::__is_nothrow_type): Define new member.
(__is_convertible_helper<_From, _To, false>::__test_aux1): Add
noexcept.
(__is_convertible_helper<_From, _To, false>::__test_nothrow)
(__is_convertible_helper<_From, _To, false>::__is_nothrow_type): Add
new members.
(is_nothrow_convertible, is_nothrow_convertible_v): Define for C++2a.
* testsuite/20_util/is_nothrow_convertible/value.cc: New.
* testsuite/20_util/is_nothrow_convertible/requirements/
explicit_instantiation.cc: New.
* testsuite/20_util/is_nothrow_convertible/requirements/typedefs.cc:
New.

From-SVN: r262322

6 years agoparser.c (set_and_check_decl_spec_loc): Use rich_location::add_range in error message...
Paolo Carlini [Mon, 2 Jul 2018 21:42:10 +0000 (21:42 +0000)]
parser.c (set_and_check_decl_spec_loc): Use rich_location::add_range in error message about __thread and thread_local...

/cp
2018-07-02  Paolo Carlini  <paolo.carlini@oracle.com>

* parser.c (set_and_check_decl_spec_loc): Use rich_location::add_range
in error message about __thread and thread_local at the same time.

/testsuite
2018-07-02  Paolo Carlini  <paolo.carlini@oracle.com>

* g++.dg/diagnostic/thread-thread_local.C: New.

From-SVN: r262321

6 years agoP0887R1 The identity metafunction
Jonathan Wakely [Mon, 2 Jul 2018 21:05:08 +0000 (22:05 +0100)]
P0887R1 The identity metafunction

* include/std/type_traits (type_identity, type_identity_t): Define
        for C++2a.
* testsuite/20_util/type_identity/requirements/alias_decl.cc: New.
* testsuite/20_util/type_identity/requirements/
explicit_instantiation.cc:New.
* testsuite/20_util/type_identity/requirements/typedefs.cc: New.

From-SVN: r262319

6 years agoOptimize std::sub_match comparisons using string_view-like type
Jonathan Wakely [Mon, 2 Jul 2018 20:31:11 +0000 (21:31 +0100)]
Optimize std::sub_match comparisons using string_view-like type

Avoid creation of unnecessary basic_string objects by using a simplified
string_view type and performing comparisons on that type instead. A
temporary basic_string object is still used when the sub_match's
iterators are not contiguous, in order to get an object that the
__string_view can reference.

* include/bits/regex.h (sub_match::operator string_type): Call str().
(sub_match::compare): Use _M_str() instead of str().
(sub_match::_M_compare): New public function.
(sub_match::__string_view): New helper type.
(sub_match::_M_str): New overloaded functions to avoid creating a
string_type object when not needed.
(operator==, operator!=, operator<, operator>, operator<=, operator>=):
Use sub_match::_M_compare instead of creating string_type objects.
Fix Doxygen comments.
* include/bits/regex_compiler.h (__has_contiguous_iter): Remove.
(__is_contiguous_normal_iter): Rename to __is_contiguous_iter and
simplify.
(__enable_if_contiguous_iter, __disable_if_contiguous_iter): Use
__enable_if_t.
* include/std/type_traits (__enable_if_t): Define for C++11.
* testsuite/28_regex/sub_match/compare.cc: New.
* testsuite/util/testsuite_iterators.h (remove_cv): Add transformation
trait.
(input_iterator_wrapper): Use remove_cv for value_type argument of
std::iterator base class.

From-SVN: r262318

6 years agoselftest: introduce class auto_fix_quotes
David Malcolm [Mon, 2 Jul 2018 20:05:21 +0000 (20:05 +0000)]
selftest: introduce class auto_fix_quotes

This patch moves a workaround for locale differences from a
selftest in pretty-print.c to selftest.h/c to make it reusable; I need
this for a selftest in a followup patch.

gcc/ChangeLog:
* pretty-print.c (selftest::test_pp_format): Move save and restore
of quotes to class auto_fix_quotes, and add an instance.
* selftest.c: Include "intl.h".
(selftest::auto_fix_quotes::auto_fix_quotes): New ctor.
(selftest::auto_fix_quotes::~auto_fix_quotes): New dtor.
* selftest.h (selftest::auto_fix_quotes): New class.

From-SVN: r262317

6 years agore PR go/86331 (the gccgo's "go" tool looks like failing to invoke any sub go command)
Ian Lance Taylor [Mon, 2 Jul 2018 16:28:43 +0000 (16:28 +0000)]
re PR go/86331 (the gccgo's "go" tool looks like failing to invoke any sub go command)

PR go/86331
    os: check return value as well as error from waitid

    https://gcc.gnu.org/PR86331 indicates that if a signal handler runs it
    is possible for syscall.Syscall6 to return a non-zero errno value even
    if no error occurs. That is a problem in general, but this fix will
    let us work around the general problem for the specific case of
    calling waitid.

    Reviewed-on: https://go-review.googlesource.com/121595

From-SVN: r262313

6 years agoaarch64: Add movprfx patterns alternatives
Richard Henderson [Mon, 2 Jul 2018 15:29:16 +0000 (15:29 +0000)]
aarch64: Add movprfx patterns alternatives

    * config/aarch64/aarch64-protos.h, config/aarch64/aarch64.c
    (aarch64_sve_prepare_conditional_op): Remove.
    * config/aarch64/aarch64-sve.md (cond_<SVE_INT_BINARY><SVE_I>):
    Allow aarch64_simd_reg_or_zero as select operand; remove
    the aarch64_sve_prepare_conditional_op call.
    (cond_<SVE_INT_BINARY_SD><SVE_SDI>): Likewise.
    (cond_<SVE_COND_FP_BINARY><SVE_F>): Likewise.
    (*cond_<SVE_INT_BINARY><SVE_I>_z): New pattern.
    (*cond_<SVE_INT_BINARY_SD><SVE_SDI>_z): New pattern.
    (*cond_<SVE_COND_FP_BINARY><SVE_F>_z): New pattern.
    (*cond_<SVE_INT_BINARY><SVE_I>_any): New pattern.
    (*cond_<SVE_INT_BINARY_SD><SVE_SDI>_any): New pattern.
    (*cond_<SVE_COND_FP_BINARY><SVE_F>_any): New pattern
    and a splitters to match all of the *_any patterns.
    * config/aarch64/predicates.md (aarch64_sve_any_binary_operator): New.

    * config/aarch64/iterators.md (SVE_INT_BINARY_REV): Remove.
    (SVE_COND_FP_BINARY_REV): Remove.
    (sve_int_op_rev, sve_fp_op_rev): New.
    * config/aarch64/aarch64-sve.md (*cond_<SVE_INT_BINARY><SVE_I>_0): New.
    (*cond_<SVE_INT_BINARY_SD><SVE_SDI>_0): New.
    (*cond_<SVE_COND_FP_BINARY><SVE_F>_0): New.
    (*cond_<SVE_INT_BINARY><SVE_I>_2): Rename, add movprfx alternative.
    (*cond_<SVE_INT_BINARY_SD><SVE_SDI>_2): Similarly.
    (*cond_<SVE_COND_FP_BINARY><SVE_F>_2): Similarly.
    (*cond_<SVE_INT_BINARY><SVE_I>_3): Similarly; use sve_int_op_rev.
    (*cond_<SVE_INT_BINARY_SD><SVE_SDI>_3): Similarly.
    (*cond_<SVE_COND_FP_BINARY><SVE_F>_3): Similarly; use sve_fp_op_rev.

    * config/aarch64/aarch64-sve.md (cond_<SVE_COND_FP_BINARY><SVE_F>):
    Remove match_dup 1 from the inner unspec.
    (*cond_<SVE_COND_FP_BINARY><SVE_F>): Likewise.

    * config/aarch64/aarch64.md (movprfx): New attr.
    (length): Default movprfx to 8.
    * config/aarch64/aarch64-sve.md (*mul<SVE_I>3): Add movprfx alt.
    (*madd<SVE_I>, *msub<SVE_I): Likewise.
    (*<su>mul<SVE_I>3_highpart): Likewise.
    (*<SVE_INT_BINARY_SD><SVE_SDI>3): Likewise.
    (*v<ASHIFT><SVE_I>3): Likewise.
    (*<su><MAXMIN><SVE_I>3): Likewise.
    (*<su><MAXMIN><SVE_F>3): Likewise.
    (*fma<SVE_F>4, *fnma<SVE_F>4): Likewise.
    (*fms<SVE_F>4, *fnms<SVE_F>4): Likewise.
    (*div<SVE_F>4): Likewise.

From-SVN: r262312

6 years agoFix GCOV scan pattern (PR testsuite/86366).
Martin Liska [Mon, 2 Jul 2018 14:54:07 +0000 (16:54 +0200)]
Fix GCOV scan pattern (PR testsuite/86366).

2018-07-02  Martin Liska  <mliska@suse.cz>

        PR testsuite/86366
* gcc.dg/profile-dir-1.c: Fix scanned pattern.
* gcc.dg/profile-dir-2.c: Likewise.
* gcc.dg/profile-dir-3.c: Likewise.

From-SVN: r262311

6 years ago[ARM][testsuite] Fix arm-soft-strd-even.c
Christophe Lyon [Mon, 2 Jul 2018 14:23:19 +0000 (14:23 +0000)]
[ARM][testsuite] Fix arm-soft-strd-even.c

2018-07-02  Christophe Lyon  <christophe.lyon@linaro.org>

* gcc.target/arm/arm-soft-strd-even.c: Skip if -mfloat-abi is
overriden.

From-SVN: r262309

6 years agoFix typo in vect_recog_widen_shift_pattern
Richard Sandiford [Mon, 2 Jul 2018 13:34:49 +0000 (13:34 +0000)]
Fix typo in vect_recog_widen_shift_pattern

Noticed by Christophe on arm-none-linux-gnueabihf.

2018-07-02  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-vect-patterns.c (vect_recog_widen_shift_pattern): Fix typo
in dump string.

From-SVN: r262308

6 years agore PR tree-optimization/86363 (wrong code with __builtin_memset() at -O1)
Richard Biener [Mon, 2 Jul 2018 13:32:26 +0000 (13:32 +0000)]
re PR tree-optimization/86363 (wrong code with __builtin_memset() at -O1)

2018-07-02  Richard Biener  <rguenther@suse.de>

PR tree-optimization/86363
* tree-ssa-sccvn.c (vn_reference_lookup_3): Check the
memset argument refers to a non-variable address.

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

From-SVN: r262307

6 years agoAbstract a lot of the {PLUS,MINUS}_EXPR code in
Aldy Hernandez [Mon, 2 Jul 2018 12:18:00 +0000 (12:18 +0000)]
Abstract a lot of the {PLUS,MINUS}_EXPR code in
extract_range_from_binary_expr_1 into separate functions.

From-SVN: r262306

6 years agotree-vrp.c (extract_range_from_unary_expr): Abstract ABS_EXPR code...
Aldy Hernandez [Mon, 2 Jul 2018 12:17:47 +0000 (12:17 +0000)]
tree-vrp.c (extract_range_from_unary_expr): Abstract ABS_EXPR code...

* tree-vrp.c (extract_range_from_unary_expr): Abstract ABS_EXPR
code...
(extract_range_from_abs_expr): ...here.

From-SVN: r262305

6 years agoAdd new tests for --completion option.
Martin Liska [Mon, 2 Jul 2018 10:30:43 +0000 (12:30 +0200)]
Add new tests for --completion option.

2018-07-02  Martin Liska  <mliska@suse.cz>

* gcc.dg/completion-1.c: New test.
* gcc.dg/completion-2.c: New test.
* gcc.dg/completion-3.c: New test.

From-SVN: r262304

6 years agoi386.c (ix86_finalize_stack_frame_flags): Do not overrule -fno-omit-frame-pointer...
Eric Botcazou [Mon, 2 Jul 2018 10:15:42 +0000 (10:15 +0000)]
i386.c (ix86_finalize_stack_frame_flags): Do not overrule -fno-omit-frame-pointer when not optimizing.

* config/i386/i386.c (ix86_finalize_stack_frame_flags): Do not overrule
-fno-omit-frame-pointer when not optimizing.

From-SVN: r262302

6 years agore PR lto/86321 (ICE: in splice_child_die, at dwarf2out.c:5693 for several Fortran...
Richard Biener [Mon, 2 Jul 2018 08:00:47 +0000 (08:00 +0000)]
re PR lto/86321 (ICE:  in splice_child_die, at dwarf2out.c:5693 for several Fortran tests with -g -flto)

2018-07-02  Richard Biener  <rguenther@suse.de>

PR lto/86321
* trans-types.c (gfc_get_array_type_bounds): Unshare TYPE_FIELDs
for the distinct type copy.

From-SVN: r262301

6 years agore PR fortran/45305 (Array-valued calles to elementals are not simplified)
Paul Thomas [Mon, 2 Jul 2018 07:24:43 +0000 (07:24 +0000)]
re PR fortran/45305 (Array-valued calles to elementals are not simplified)

2018-07-02  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/45305
* expr.c : Add a prototype for scalarize_intrinsic_call.
(gfc_simplify_expr): Use scalarize_intrinsic_call for elemental
intrinsic function calls.
(scalarize_intrinsic_call): Add 'init_flag' argument. Check if
the expression or any of the actual argument expressions are
NULL. Before calling gfc_check_init_expr, check 'init_flag'.
Only simplify the scalarized expressions if there are no errors
on the stack.
(gfc_check_init_expr): Set 'init_flag' true in the call to
scalarize_intrinsic_call.

2018-07-02  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/45305
* gfortran.dg/scalarize_parameter_array_2.f90: New test.

From-SVN: r262300

6 years agore PR fortran/45305 (Array-valued calles to elementals are not simplified)
Paul Thomas [Mon, 2 Jul 2018 07:20:27 +0000 (07:20 +0000)]
re PR fortran/45305 (Array-valued calles to elementals are not simplified)

2018-07-02  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/45305
* expr.c : Add a prototype for scalarize_intrinsic_call.
(gfc_simplify_expr): Use scalarize_intrinsic_call for elemental
intrinsic function calls.
(scalarize_intrinsic_call): Add 'init_flag' argument. Check if
the expression or any of the actual argument expressions are
NULL. Before calling gfc_check_init_expr, check 'init_flag'.
Only simplify the scalarized expressions if there are no errors
on the stack.
(gfc_check_init_expr): Set 'init_flag' true in the call to
scalarize_intrinsic_call.

2018-07-02  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/45305
* gfortran.dg/scalarize_parameter_array_2.f90: New test.

From-SVN: r262299

6 years agoRevert 2 ::get to ::get_create for IPA summaries (PR ipa/86279).
Martin Liska [Mon, 2 Jul 2018 07:04:20 +0000 (09:04 +0200)]
Revert 2 ::get to ::get_create for IPA summaries (PR ipa/86279).

2018-07-02  Martin Liska  <mliska@suse.cz>

        PR ipa/86279
* ipa-pure-const.c (malloc_candidate_p): Revert usage of ::get.
(propagate_nothrow): Likewise.
2018-07-02  Martin Liska  <mliska@suse.cz>

        PR ipa/86279
* gcc.dg/ipa/pr86279.c: New test.

From-SVN: r262298

6 years agoRevert one ipa_call_summaries::get to get_create (PR ipa/86323).
Martin Liska [Mon, 2 Jul 2018 07:04:01 +0000 (09:04 +0200)]
Revert one ipa_call_summaries::get to get_create (PR ipa/86323).

2018-07-02  Martin Liska  <mliska@suse.cz>

        PR ipa/86323
* ipa-inline.c (early_inliner): Revert wrongly added ::get call.
2018-07-02  Martin Liska  <mliska@suse.cz>

        PR ipa/86323
* g++.dg/ipa/pr86323.C: New test.

From-SVN: r262297

6 years agoBump libgnat to 9.
Martin Liska [Mon, 2 Jul 2018 07:03:23 +0000 (09:03 +0200)]
Bump libgnat to 9.

2018-07-02  Martin Liska  <mliska@suse.cz>

* gnatvsn.ads: Bump Library_Version to 9.

From-SVN: r262296

6 years agoReinstate dump_generic_expr_loc
David Malcolm [Mon, 2 Jul 2018 03:39:48 +0000 (03:39 +0000)]
Reinstate dump_generic_expr_loc

gcc/ChangeLog:
* dumpfile.c (dump_generic_expr_loc): Undo removal of this
function in r262149, changing "loc" param from source_location to
const dump_location_t &.
* dumpfile.h (dump_generic_expr_loc): Undo removal of this
declaration, as above.

From-SVN: r262295

6 years agoDaily bump.
GCC Administrator [Mon, 2 Jul 2018 00:16:24 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262294

6 years agoRevert "[testsuite/guality] Prevent optimization of local in vla-1.c"
Tom de Vries [Sun, 1 Jul 2018 20:25:55 +0000 (20:25 +0000)]
Revert "[testsuite/guality] Prevent optimization of local in vla-1.c"

2018-07-01  Tom de Vries  <tdevries@suse.de>

revert:
2018-07-01  Tom de Vries  <tdevries@suse.de>

* gcc.dg/guality/prevent-optimization.h (VOLATILE): Define.
* gcc.dg/guality/vla-1.c (f1): Mark local vla a as VOLATILE.

From-SVN: r262290

6 years agoAdd -mgnu-asm; change -mdec-asm to generate DEC assembler
Paul Koning [Sun, 1 Jul 2018 19:19:39 +0000 (15:19 -0400)]
Add -mgnu-asm; change -mdec-asm to generate DEC assembler
        compatible output.

* common/config/pdp11/pdp11-common.c (pdp11_handle_option): Handle
-munit-asm, -mgnu-asm, -mdec-asm.
* config/pdp11/pdp11-protos.h (pdp11_gen_int_label): New.
(pdp11_output_labelref): New.
(pdp11_output_def): New.
(pdp11_output_addr_vec_elt): New.
* config/pdp11/pdp11.c: Use tab between opcode and operands.  Use
%# and %@ format codes.
(pdp11_option_override): New.
(TARGET_ASM_FILE_START_FILE_DIRECTIVE): Define.
(pdp11_output_ident): New.
(pdp11_asm_named_section): New.
(pdp11_asm_init_sections): New.
(pdp11_file_start): New.
(pdp11_file_end): New.
(output_ascii): Use .ascii/.asciz for -mdec-asm.
(pdp11_asm_print_operand): Update %# and %$ for -mdec-asm.  Add
%o, like %c but octal.
(pdp11_option_override): New.
* config/pdp11/pdp11.h (TEXT_SECTION_ASM_OP): Update for
-mdec-asm.
(DATA_SECTION_ASM_OP): Ditto.
(READONLY_DATA_SECTION_ASM_OP): New.
(IS_ASM_LOGICAL_LINE_SEPARATOR): New.
(ASM_GENERATE_INTERNAL_LABEL): Use new function.
(ASM_OUTPUT_LABELREF): Ditto.
(ASM_OUTPUT_DEF): Ditto.
(ASM_OUTPUT_EXTERNAL): New.
(ASM_OUTPUT_SOURCE_FILENAME): New.
(ASM_OUTPUT_ADDR_VEC_ELT): Use new function.
(ASM_OUTPUT_SKIP): Update for -mdec-asm.
* config/pdp11/pdp11.md: Use tab between opcode and operands.  Use
%# and %@ format codes.
* config/pdp11/pdp11.opt (mgnu-asm): New.
(mdec-asm): Conflicts with -mgnu-asm and -munix-asm.
(munix-asm): Conflicts with -mdec-asm and -mgnu-asm.
* doc/invoke.txt (PDP-11 Options): Add -mgnu-asm.

From-SVN: r262289

6 years ago[testsuite/guality] Use @main as bp loc instead of line nrs in const-volatile.c
Tom de Vries [Sun, 1 Jul 2018 18:28:24 +0000 (18:28 +0000)]
[testsuite/guality] Use @main as bp loc instead of line nrs in const-volatile.c

2018-07-01  Tom de Vries  <tdevries@suse.de>

* lib/gcc-gdb-test.exp (gdb-test): Handle '@' prefix in line number
argument.
* gcc.dg/guality/const-volatile.c: Replace gdb-test line nrs 50 and 58
with @main.

From-SVN: r262288

6 years ago[testsuite/guality] Prevent optimization of local in vla-1.c
Tom de Vries [Sun, 1 Jul 2018 15:54:48 +0000 (15:54 +0000)]
[testsuite/guality] Prevent optimization of local in vla-1.c

2018-07-01  Tom de Vries  <tdevries@suse.de>

* gcc.dg/guality/prevent-optimization.h (VOLATILE): Define.
* gcc.dg/guality/vla-1.c (f1): Mark local vla a as VOLATILE.

From-SVN: r262287

6 years ago[testsuite/guality] Use relative line numbers in vla-1.c
Tom de Vries [Sun, 1 Jul 2018 15:54:38 +0000 (15:54 +0000)]
[testsuite/guality] Use relative line numbers in vla-1.c

2018-07-01  Tom de Vries  <tdevries@suse.de>

* lib/gcc-dg.exp (get-absolute-line): Handle '.'.
* gcc.dg/guality/vla-1.c: Use relative line numbers.

From-SVN: r262286

6 years ago[testsuite] Fix get-absolute-line error handling
Tom de Vries [Sun, 1 Jul 2018 14:56:09 +0000 (14:56 +0000)]
[testsuite] Fix get-absolute-line error handling

2018-07-01  Tom de Vries  <tdevries@suse.de>

* gcc.dg-selftests/dg-final.exp (verify_call_1): Factor out of ...
(verify_call): ... here.  Move to toplevel.
(verify_call_np, dg_final_directive_check_utils): New proc.
(toplevel): Call dg_final_directive_check_utils.
* lib/gcc-dg.exp (get-absolute-line): Fix typo in variable reference.

From-SVN: r262284

6 years agoAllow jump threading of multiple paths that start from the same BB.
Aldy Hernandez [Sun, 1 Jul 2018 10:54:45 +0000 (10:54 +0000)]
Allow jump threading of multiple paths that start from the same BB.

From-SVN: r262283

6 years agoDaily bump.
GCC Administrator [Sun, 1 Jul 2018 00:16:18 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262282

6 years agoRISC-V: Add patterns to convert AND mask to two shifts.
Jim Wilson [Sat, 30 Jun 2018 21:52:01 +0000 (21:52 +0000)]
RISC-V: Add patterns to convert AND mask to two shifts.

gcc/
* config/riscv/predicates.md (p2m1_shift_operand): New.
(high_mask_shift_operand): New.
* config/riscv/riscv.md (lshrsi3_zero_extend_3+1): New combiner
pattern using p2m1_shift_operand.
(lshsi3_zero_extend_3+2): New combiner pattern using
high_mask_shift_operand.

gcc/testsuite/
* gcc.target/riscv/shift-shift-1.c: New.
* gcc.target/riscv/shift-shift-2.c: New.
* gcc.target/riscv/shift-shift-3.c: New.

From-SVN: r262278

6 years ago[13/n] PR85694: Try to avoid vectorising casts of invariants
Richard Sandiford [Sat, 30 Jun 2018 13:56:34 +0000 (13:56 +0000)]
[13/n] PR85694: Try to avoid vectorising casts of invariants

vect_recog_rotate_pattern had code to prevent operations
on invariants being vectorised unnecessarily:

  if (dt == vect_external_def
      && TREE_CODE (oprnd1) == SSA_NAME
      && is_a <loop_vec_info> (vinfo))
    {
      struct loop *loop = as_a <loop_vec_info> (vinfo)->loop;
      ext_def = loop_preheader_edge (loop);
      if (!SSA_NAME_IS_DEFAULT_DEF (oprnd1))
        {
          basic_block bb = gimple_bb (SSA_NAME_DEF_STMT (oprnd1));
          if (bb == NULL
              || !dominated_by_p (CDI_DOMINATORS, ext_def->dest, bb))
            ext_def = NULL;
        }
    }
  [..]
      if (ext_def)
        {
          basic_block new_bb
            = gsi_insert_on_edge_immediate (ext_def, def_stmt);
          gcc_assert (!new_bb);
        }

This patch reuses the same idea for casts of invariants created
during widening optimisations.

One hitch was that vect_loop_versioning asserted that the vector loop
preheader was still empty, although the cfg transformation it's doing
should be correct either way.

2018-06-30  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-vect-patterns.c (vect_get_external_def_edge): New function,
split out from...
(vect_recog_rotate_pattern): ...here.
(vect_convert_input): Try to insert casts of invariants in the
preheader.
* tree-vect-loop-manip.c (vect_loop_versioning): Don't require the
preheader to be empty.

gcc/testsuite/
* gcc.dg/vect/vect-widen-mult-extern-1.c: New test.

From-SVN: r262277

6 years ago[12/n] PR85694: Rework detection of widened operations
Richard Sandiford [Sat, 30 Jun 2018 12:49:06 +0000 (12:49 +0000)]
[12/n] PR85694: Rework detection of widened operations

This patch adds helper functions for detecting widened operations and
generalises the existing code to handle more cases.

One of the main changes is to recognise multi-stage type conversions,
which are possible even in the original IR and can also occur as a
result of earlier pattern matching (especially after the main
over-widening patch).  E.g. for:

  unsigned int res = 0;
  for (__INTPTR_TYPE__ i = 0; i < N; ++i)
    {
      int av = a[i];
      int bv = b[i];
      short diff = av - bv;
      unsigned short abs = diff < 0 ? -diff : diff;
      res += abs;
    }

we have:

  _9 = _7 - _8;
  diff_20 = (short int) _9;
  _10 = (int) diff_20;
  _11 = ABS_EXPR <_10>;

where the first cast establishes the sign of the promotion done
by the second cast.

vect_recog_sad_pattern didn't handle this kind of intermediate promotion
between the MINUS_EXPR and the ABS_EXPR.  Sign extensions and casts from
unsigned to signed are both OK there.  Unsigned promotions aren't, and
need to be rejected, but should have been folded away earlier anyway.

Also, the dot_prod and widen_sum patterns both required the promotions
to be from one signedness to the same signedness, rather than say signed
char to unsigned int.  That shouldn't be necessary, since it's only the
sign of the input to the promotion that matters.  Nothing requires the
narrow and wide types in a DOT_PROD_EXPR or WIDEN_SUM_EXPR to have the
same sign (and IMO that's a good thing).

Fixing these fixed an XFAIL in gcc.dg/vect/vect-widen-mult-sum.c.

vect_widened_op_tree is a bit more general than the current patch needs,
since it copes with a tree of operations rather than a single statement.
This is used by the later average-detection patch.

The patch also uses a common routine to handle both the WIDEN_MULT_EXPR
and WIDEN_LSHIFT_EXPR patterns.  I hope this could be reused for other
similar operations in future.

Also, the patch means we recognise the index calculations in
vect-mult-const-pattern*.c as widening multiplications, whereas the
scan test was expecting them to be recognised as mult patterns instead.
The patch makes the tests check specifically for the multiplication we
care about.

2018-06-30  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-vect-patterns.c (append_pattern_def_seq): Take an optional
vector type.  If given, install it in the new statement's
STMT_VINFO_VECTYPE.
(vect_element_precision): New function.
(vect_unpromoted_value): New struct.
(vect_unpromoted_value::vect_unpromoted_value): New function.
(vect_unpromoted_value::set_op): Likewise.
(vect_look_through_possible_promotion): Likewise.
(vect_joust_widened_integer, vect_joust_widened_type): Likewise.
(vect_widened_op_tree, vect_convert_input): Likewise.
(vect_convert_inputs, vect_convert_output): Likewise.
(vect_recog_dot_prod_pattern): Use vect_look_through_possible_promotion
to handle the optional cast of the multiplication result and
vect_widened_op_tree to detect the widened multiplication itself.
Do not require the input and output of promotion casts to have
the same sign, but base the signedness of the operation on the
input rather than the result.  If the pattern includes two
promotions, check that those promotions have the same sign.
Do not restrict the MULT_EXPR handling to a double-width result;
handle quadruple-width results and wider.  Use vect_convert_inputs
to convert the inputs to the common type.
(vect_recog_sad_pattern):  Use vect_look_through_possible_promotion
to handle the optional cast of the ABS result.  Also allow a sign
change or a sign extension between the ABS and MINUS.
Use vect_widened_op_tree to detect the widened subtraction and use
vect_convert_inputs to convert the inputs to the common type.
(vect_handle_widen_op_by_const): Delete.
(vect_recog_widen_op_pattern): New function.
(vect_recog_widen_mult_pattern): Use it.
(vect_recog_widen_shift_pattern): Likewise.
(vect_recog_widen_sum_pattern): Use
vect_look_through_possible_promotion to handle the promoted
PLUS_EXPR operand.

gcc/testsuite/
* gcc.dg/vect/vect-widen-mult-sum.c: Remove xfail.
* gcc.dg/vect/no-scevccp-outer-6.c: Don't match widened multiplications
by 4 in the computation of a[i].
* gcc.dg/vect/vect-mult-const-pattern-1.c: Test specifically for the
main multiplication constant.
* gcc.dg/vect/vect-mult-const-pattern-2.c: Likewise.
* gcc.dg/vect/vect-widen-mult-const-s16.c: Likewise.
* gcc.dg/vect/vect-widen-mult-const-u16.c: Likewise.  Expect the
pattern to cast the result to int.
* gcc.dg/vect/vect-reduc-dot-1.c: New test.
* gcc.dg/vect/vect-reduc-dot-2.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-3.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-4.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-5.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-6.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-7.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-8.c: Likewise.
* gcc.dg/vect/vect-reduc-sad-1.c: Likewise.
* gcc.dg/vect/vect-reduc-sad-2.c: Likewise.
* gcc.dg/vect/vect-reduc-sad-3.c: Likewise.
* gcc.dg/vect/vect-reduc-sad-4.c: Likewise.
* gcc.dg/vect/vect-reduc-sad-5.c: Likewise.
* gcc.dg/vect/vect-reduc-sad-6.c: Likewise.
* gcc.dg/vect/vect-reduc-sad-7.c: Likewise.
* gcc.dg/vect/vect-reduc-sad-8.c: Likewise.
* gcc.dg/vect/vect-widen-mult-1.c: Likewise.
* gcc.dg/vect/vect-widen-mult-2.c: Likewise.
* gcc.dg/vect/vect-widen-mult-3.c: Likewise.
* gcc.dg/vect/vect-widen-mult-4.c: Likewise.

From-SVN: r262276

6 years ago[11/n] PR85694: Apply pattern matching to pattern definition statements
Richard Sandiford [Sat, 30 Jun 2018 12:48:51 +0000 (12:48 +0000)]
[11/n] PR85694: Apply pattern matching to pattern definition statements

Although the first pattern match wins in the sense that no later
function can match the *old* gimple statement, it still seems worth
letting them match the *new* gimple statements, just like we would if
the original IR had included that sequence from the outset.

This is mostly true after the later patch for PR85694, where e.g. we
could recognise:

   signed char a;
   int ap = (int) a;
   int res = ap * 3;

as the pattern:

   short ap' = (short) a;
   short res = ap' * 3;     // S1: definition statement
   int res = (int) res;     // S2: pattern statement

and then apply the mult pattern to "ap' * 3".  The patch needs to
come first (without its own test cases) so that the main over-widening
patch doesn't regress anything.

2018-06-30  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* gimple-iterator.c (gsi_for_stmt): Add a new overload that takes
the containing gimple_seq *.
* gimple-iterator.h (gsi_for_stmt): Declare it.
* tree-vect-patterns.c (vect_recog_dot_prod_pattern)
(vect_recog_sad_pattern, vect_recog_widen_sum_pattern)
(vect_recog_widen_shift_pattern, vect_recog_rotate_pattern)
(vect_recog_vector_vector_shift_pattern, vect_recog_divmod_pattern)
(vect_recog_mask_conversion_pattern): Remove STMT_VINFO_IN_PATTERN_P
checks.
(vect_init_pattern_stmt, vect_set_pattern_stmt): New functions,
split out from...
(vect_mark_pattern_stmts): ...here.  Handle cases in which the
statement being replaced is part of an existing pattern
definition sequence, inserting the new pattern statements before
the original one.
(vect_pattern_recog_1): Don't return a bool.  If the statement
is already part of a pattern, instead apply pattern matching
to the pattern definition statements.  Don't clear the
STMT_VINFO_RELATED_STMT if is_pattern_stmt_p.
(vect_pattern_recog): Don't break after the first match;
continue processing the pattern definition statements instead.
Don't bail out for STMT_VINFO_IN_PATTERN_P here.

From-SVN: r262275

6 years ago[10/n] PR85694: Split out check for vectorizable associative reductions
Richard Sandiford [Sat, 30 Jun 2018 12:47:50 +0000 (12:47 +0000)]
[10/n] PR85694: Split out check for vectorizable associative reductions

This patch adds an overload of vect_reassociating_reduction_p
that checks for a vectorizable associative reduction,
since the check was duplicated in three functions.

2018-06-30  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-vect-patterns.c (vect_reassociating_reduction_p): New function.
(vect_recog_dot_prod_pattern, vect_recog_sad_pattern)
(vect_recog_widen_sum_pattern): Use it.

From-SVN: r262274

6 years ago[9b/n] PR85694: Make vect_is_simple_use look through pattern statements
Richard Sandiford [Sat, 30 Jun 2018 12:47:25 +0000 (12:47 +0000)]
[9b/n] PR85694: Make vect_is_simple_use look through pattern statements

As suggested by Richard B., this patch makes vect_is_simple_use check
whether a defining statement has been replaced by a pattern statement,
and if so returns the pattern statement instead.

The reason for doing this is that the main patch for PR85694
makes over_widening handle more general cases.  These over-widened
patterns can still be useful when matching later statements;
e.g. an overwidened MULT_EXPR could be the input to a DOT_PROD_EXPR.

The patch doesn't do anything with the STMT_VINFO_IN_PATTERN_P checks
in vect_recog_over_widening_pattern or vect_recog_widen_shift_pattern
since later patches rewrite them anyway.

Doing this fixed an XFAIL in vect-reduc-dot-u16b.c.

2018-06-30  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-vect-loop.c (vectorizable_reduction): Assert that the
phi is not a pattern statement and has not been replaced by
a pattern statement.
* tree-vect-patterns.c (type_conversion_p): Don't check
STMT_VINFO_IN_PATTERN_P.
(vect_recog_vector_vector_shift_pattern): Likewise.
(vect_recog_dot_prod_pattern): Expect vect_is_simple_use to return
the pattern statement rather than the original statement; check
directly for a WIDEN_MULT_EXPR here.
* tree-vect-slp.c (vect_get_and_check_slp_defs): Expect
vect_is_simple_use to return the pattern statement rather
than the original statement; use is_pattern_stmt_p to check
for such a pattern statement.
* tree-vect-stmts.c (process_use): Expect vect_is_simple_use
to return the pattern statement rather than the original statement;
don't do the same transformation here.
(vect_is_simple_use): If the defining statement has been replaced
by a pattern statement, return the pattern statement instead.
Remove the corresponding (local) transformation from the vectype
overload.

gcc/testsuite/
* gcc.dg/vect/vect-reduc-dot-u16b.c: Remove xfail and update the
test for vectorization along the lines described in the comment.

From-SVN: r262273