1. 03 Jul, 2018 1 commit
  2. 02 Jul, 2018 23 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
    • Fix GCOV scan pattern (PR testsuite/86366). · 1234faf4
      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
      Martin Liska committed
    • [ARM][testsuite] Fix arm-soft-strd-even.c · 6b632b5e
      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
      Christophe Lyon committed
    • Fix typo in vect_recog_widen_shift_pattern · d379ac22
      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 Sandiford committed
    • re PR tree-optimization/86363 (wrong code with __builtin_memset() at -O1) · 92590cd3
      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
      Richard Biener committed
    • Abstract a lot of the {PLUS,MINUS}_EXPR code in · 94ee1558
      extract_range_from_binary_expr_1 into separate functions.
      
      From-SVN: r262306
      Aldy Hernandez committed
    • tree-vrp.c (extract_range_from_unary_expr): Abstract ABS_EXPR code... · d9957cf9
      	* tree-vrp.c (extract_range_from_unary_expr): Abstract ABS_EXPR
      	code...
      	(extract_range_from_abs_expr): ...here.
      
      From-SVN: r262305
      Aldy Hernandez committed
    • Add new tests for --completion option. · 108e1a85
      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
      Martin Liska committed
    • i386.c (ix86_finalize_stack_frame_flags): Do not overrule… · ee24c8e1
      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
      Eric Botcazou committed
    • re PR lto/86321 (ICE: in splice_child_die, at dwarf2out.c:5693 for several… · 5d4e9f7b
      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
      Richard Biener committed
    • re PR fortran/45305 (Array-valued calles to elementals are not simplified) · e057d3e5
      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 committed
    • re PR fortran/45305 (Array-valued calles to elementals are not simplified) · 87c789f1
      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
      Paul Thomas committed
    • Revert 2 ::get to ::get_create for IPA summaries (PR ipa/86279). · 61c74e84
      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 committed
    • Revert one ipa_call_summaries::get to get_create (PR ipa/86323). · b412559e
      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 committed
    • Bump libgnat to 9. · 24e82719
      2018-07-02  Martin Liska  <mliska@suse.cz>
      
      	* gnatvsn.ads: Bump Library_Version to 9.
      
      From-SVN: r262296
      Martin Liska committed
    • Reinstate dump_generic_expr_loc · d7259673
      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
      David Malcolm committed
    • Daily bump. · 4d78796d
      From-SVN: r262294
      GCC Administrator committed
  3. 01 Jul, 2018 8 commits
    • Revert "[testsuite/guality] Prevent optimization of local in vla-1.c" · 2d0bc0af
      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
      Tom de Vries committed
    • Add -mgnu-asm; change -mdec-asm to generate DEC assembler · 4aef57c9
              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
      Paul Koning committed
    • [testsuite/guality] Use @main as bp loc instead of line nrs in const-volatile.c · 518ab2a0
      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 committed
    • [testsuite/guality] Prevent optimization of local in vla-1.c · 81d3b8f7
      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 committed
    • [testsuite/guality] Use relative line numbers in vla-1.c · c2e75518
      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 committed
    • [testsuite] Fix get-absolute-line error handling · 2d43b862
      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
      Tom de Vries committed
    • Daily bump. · 19792aa0
      From-SVN: r262282
      GCC Administrator committed
  4. 30 Jun, 2018 8 commits
    • RISC-V: Add patterns to convert AND mask to two shifts. · 666fdc46
      	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
      Jim Wilson committed
    • [13/n] PR85694: Try to avoid vectorising casts of invariants · 3330053e
      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 committed
    • [12/n] PR85694: Rework detection of widened operations · 00347934
      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 committed
    • [11/n] PR85694: Apply pattern matching to pattern definition statements · 41949de9
      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 committed
    • [10/n] PR85694: Split out check for vectorizable associative reductions · 7b98e98a
      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 committed
    • [9b/n] PR85694: Make vect_is_simple_use look through pattern statements · 0f8c840c
      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
      Richard Sandiford committed
    • [9a/n] PR85694: Reorder vect_is_simple_use arguments · 894dd753
      As suggested by Richard B., this patch reorders the arguments to
      vect_is_simple_use so that def_stmt comes last and is optional.
      Many callers can then drop it, making it more obvious which of
      the remaining calls would be affected by the next patch.
      
      2018-06-30  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* tree-vectorizer.h (vect_is_simple_use): Move the gimple ** to the
      	end and default to null.
      	* tree-vect-loop.c (vect_create_epilog_for_reduction)
      	(vectorizable_reduction): Update calls accordingly, dropping the
      	gimple ** argument if the passed-back statement isn't needed.
      	* tree-vect-patterns.c (vect_get_internal_def, type_conversion_p)
      	(vect_recog_rotate_pattern): Likewise.
      	(vect_recog_mask_conversion_pattern): Likewise.
      	* tree-vect-slp.c (vect_get_and_check_slp_defs): Likewise.
      	(vect_mask_constant_operand_p): Likewise.
      	* tree-vect-stmts.c (is_simple_and_all_uses_invariant, process_use):
      	(vect_model_simple_cost, vect_get_vec_def_for_operand): Likewise.
      	(get_group_load_store_type, get_load_store_type): Likewise.
      	(vect_check_load_store_mask, vect_check_store_rhs): Likewise.
      	(vectorizable_call, vectorizable_simd_clone_call): Likewise.
      	(vectorizable_conversion, vectorizable_assignment): Likewise.
      	(vectorizable_shift, vectorizable_operation): Likewise.
      	(vectorizable_store, vect_is_simple_cond): Likewise.
      	(vectorizable_condition, vectorizable_comparison): Likewise.
      	(get_same_sized_vectype, vect_get_mask_type_for_stmt): Likewise.
      	(vect_is_simple_use): Rename the def_stmt argument to def_stmt_out
      	and move it to the end.  Cope with null def_stmt_outs.
      
      From-SVN: r262272
      Richard Sandiford committed
    • 018-06-30 Bernd Edlinger <bernd.edlinger@hotmail.de> · 55c8e04c
              * Makefile.in (FLAGS_TO_PASS): Add RANLIB_FOR_TARGET.
      
      From-SVN: r262271
      Bernd Edlinger committed