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
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
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
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
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
François Dumont [Thu, 5 Jul 2018 04:57:52 +0000 (04:57 +0000)]
Fix my yesterday ChangeLog entry.
From-SVN: r262429
GCC Administrator [Thu, 5 Jul 2018 00:16:59 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r262428
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
GCC Administrator [Wed, 4 Jul 2018 00:17:01 +0000 (00:17 +0000)]
Daily bump.
From-SVN: r262364
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Jeff Law [Tue, 3 Jul 2018 03:39:56 +0000 (21:39 -0600)]
* config/h8300/h8300.md: Remove trailing whitespace.
From-SVN: r262328
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
GCC Administrator [Tue, 3 Jul 2018 00:16:40 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r262326
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
GCC Administrator [Mon, 2 Jul 2018 00:16:24 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r262294
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
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
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
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
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
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
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
GCC Administrator [Sun, 1 Jul 2018 00:16:18 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r262282
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
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
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
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
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
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