1. 04 Jul, 2018 5 commits
    • PR tree-optimization/86274 - SEGFAULT when logging std::to_string(NAN) · 7af7cb51
      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 committed
    • print-tree.c (print_real_cst): New function. · 68a8b147
      gcc/ChangeLog:
      
      	* print-tree.c (print_real_cst): New function.
      	(print_node_brief): Call it.
      	(print_node): Ditto.
      
      From-SVN: r262367
      Martin Sebor committed
    • h8300.md (ors code_iterator): New. · ec4692b4
      	* 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 committed
    • h8300.md (movmd_internal_normal): Consolidated with (movmd_internal) into a… · fae7e834
      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
      Jeff Law committed
    • Daily bump. · f1ee5763
      From-SVN: r262364
      GCC Administrator committed
  2. 03 Jul, 2018 28 commits
    • P0556R3 Integral power-of-2 operations, P0553R2 Bit operations · f3e91052
      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 committed
    • Remove redundant #if conditional · cf3e6e9f
      The whole file is guarded by the same check already.
      
      	* include/bits/alloc_traits.h: Remove redundant preprocessor
      	condition.
      
      From-SVN: r262359
      Jonathan Wakely committed
    • decl.c (min_location): New. · 2dac4037
      /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
      Paolo Carlini committed
    • h8300.c (h8300_insn_length_from_table): Consolidate ADDB... · c3c3ddbb
      	* 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
      Jeff Law committed
    • re PR tree-optimization/85694 (Generation of vectorized AVG (Average) instruction) · 15333be7
      	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
      Uros Bizjak committed
    • re PR c++/86201 (ICE: Error reporting routines re-entered) · 44b0c9ae
      	PR c++/86201
      	* typeck.c (cp_build_binary_op): Check c_inhibit_evaluation_warnings.
      
      	* g++.dg/diagnostic/pr86201.C: New test.
      
      From-SVN: r262353
      Marek Polacek committed
    • stl_algobase.h (__niter_wrap): New. · 315aadc8
      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
      François Dumont committed
    • Reorg line_map data structures for better packing. · 42a98b43
      	* 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
      Nathan Sidwell committed
    • [17/n] PR85694: AArch64 support for AVG_FLOOR/CEIL · 42addb5a
      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
      Richard Sandiford committed
    • Remove "note: " prefix from some scan-tree-dump directives · 25d861fe
      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
      David Malcolm committed
    • re PR c++/84306 (Wrong overload selected with -std=c++17, explicit and {}) · a9ad62b6
      	PR c++/84306
      	* g++.dg/overload/conv-op3.C: New test.
      
      From-SVN: r262345
      Marek Polacek committed
    • re PR middle-end/86202 (ICE in get_range_info calling an invalid memcpy() declaration) · 3f27391f
      	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
      Marek Polacek committed
    • PR c++/86378 - functional cast in noexcept-specifier. · 2831d681
      	* tree.c (strip_typedefs_expr) [TREE_LIST]: Fix iteration.
      
      From-SVN: r262343
      Jason Merrill committed
    • h8300.md (HSI, [...]): New mode iterators. · a6bac46b
      	* 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
      Jeff Law committed
    • re PR ipa/86389 (execute FAILs with -fipa-pta) · abee2682
      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
      Richard Biener committed
    • Remove powerpc-linux_paired from config-list.mk · d3435784
      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
      Segher Boessenkool committed
    • Pass more vector types to append_pattern_def_seq · 776bfcea
      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 committed
    • Ensure PATTERN_DEF_SEQ is empty before recognising patterns · 9c58fb7a
      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 committed
    • Clean up interface to vector pattern recognisers · ba9728b0
      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 committed
    • [16/n] PR85694: Add detection of averaging operations · 0267732b
      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 committed
    • [15/n] PR85694: Try to split existing casts in widened patterns · 4ef79c96
      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 committed
    • [14/n] PR85694: Rework overwidening detection · 370c2ebe
      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 committed
    • Avoid matching the same pattern statement twice · 3239dde9
      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 Sandiford committed
    • tree-vect-stmts.c (vect_is_simple_use): Consolidate dumping, always set *dt. · 30f502ed
      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
      Richard Biener committed
    • h8300.md (movqi_h8300, [...]): Consolidate the H8/300, H8/300H and H8/S variants… · cbdb1229
      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 committed
    • * config/h8300/h8300.md: Remove trailing whitespace. · fabd753f
      From-SVN: r262328
      Jeff Law committed
    • RISC-V: Fix interrupt support for -g. · eb153f07
      	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
      Jim Wilson committed
    • Daily bump. · ccf266db
      From-SVN: r262326
      GCC Administrator committed
  3. 02 Jul, 2018 7 commits
    • P0758R1 Implicit conversion traits · 8df27fcb
      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
      Jonathan Wakely committed
    • parser.c (set_and_check_decl_spec_loc): Use rich_location::add_range in error… · a5eae716
      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
      Paolo Carlini committed
    • P0887R1 The identity metafunction · ee896276
      	* 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 committed
    • Optimize std::sub_match comparisons using string_view-like type · e112d53a
      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
      Jonathan Wakely committed
    • selftest: introduce class auto_fix_quotes · dbf96d49
      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
      David Malcolm committed
    • re PR go/86331 (the gccgo's "go" tool looks like failing to invoke any sub go command) · 7edd4c18
      	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
      Ian Lance Taylor committed
    • aarch64: Add movprfx patterns alternatives · a08acce8
          * 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
      Richard Henderson committed