1. 02 Jul, 2017 12 commits
    • dumpfile.c: Include profile-count.h · 0de11d4d
      
      	* dumpfile.c: Include profile-count.h
      	* tree-cfg.c (gimple_duplicate_sese_tail): Drop UNUSED attributes; update
      	profile.
      	(insert_cond_bb): Update profile.
      	* tree-cfg.h (insert_cond_bb): Update prototype.
      	* tree-chkp-opt.c (chkp_optimize_string_function_calls): Update.
      	* tree-dump.c: Do not include tree-cfg.
      
      From-SVN: r249887
      Jan Hubicka committed
    • * bb-reorder.c (fix_up_crossing_landing_pad): Update profile. · d872853d
      From-SVN: r249886
      Jan Hubicka committed
    • expect.c (dw2_build_landing_pads): Update profile of the landing pad bb. · 57a5a8b3
      	* expect.c (dw2_build_landing_pads): Update profile of the landing pad
      	bb.
      
      From-SVN: r249885
      Jan Hubicka committed
    • * tree-complex.c (expand_complex_div_wide): update profile. · b543d680
      From-SVN: r249884
      Jan Hubicka committed
    • include/ChangeLog · ef29f5dd
      2017-07-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
      
              * dwarf2.def (DW_IDX_compile_unit, DW_IDX_type_unit, DW_IDX_die_offset)
              (DW_IDX_parent, DW_IDX_type_hash, DW_IDX_lo_user, DW_IDX_hi_user)
              (DW_IDX_GNU_internal, DW_IDX_GNU_external): New.
              * dwarf2.h (DW_IDX, DW_IDX_DUP, DW_FIRST_IDX, DW_END_IDX): New.
              (enum dwarf_name_index_attribute): Remove.
              (get_DW_IDX_name): New declaration.
      
      libiberty/ChangeLog
      2017-07-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
      
              * dwarfnames.c (DW_FIRST_IDX, DW_END_IDX, DW_IDX, DW_IDX_DUP): New.
      
      From-SVN: r249883
      Jan Kratochvil committed
    • eoshift0.c: For contiguous arrays, use block algorithm. · b677e2f6
      2017-07-02  Thomas Koenig  <tkoenig@gcc.gnu.org>
      
      	* intrinsics/eoshift0.c:  For contiguous arrays, use
      	block algorithm.  Use memcpy where possible.
      
      2017-07-02  Thomas Koenig  <tkoenig@gcc.gnu.org>
      
      	* gfortran/eoshift_3.f90:  New test.
      
      From-SVN: r249882
      Thomas Koenig committed
    • Reorganise machmode.h headers · b0e84cf7
      This patch splits the auto-generated inline functions out of
      insn-modes.h and puts them in a new header file, insn-modes-inline.h.
      It also makes coretypes.h include these files directly, rather than
      indirectly via machmode.h.  This in turn allows insn-modes-inline.h
      and machmode.h to come later in the include list, after wide-int.h.
      This is useful for later patches.
      
      insn-modes.h itself still needs to come first, since it provides
      configuration information like MAX_BITSIZE_MODE_ANY_INT, which is
      used to control the size of a wide_int.
      
      The patch also makes the generator files include machmode.h
      via coretypes.h.  Previously they did it by more indirect means.
      
      Finally, the patch makes wide-int-print.h available via coretypes.h
      too.  There didn't seem to be any reason to force only the print
      routines to be included directly, and it would be painful to extend
      that approach to the SVE patches.
      
      
      [Based on the code ARM contributed in branches/ARM/sve-branch@242100]
      
      2017-07-02  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      contrib/header-tools/
      	* graph-header-logs (ignore): Update coretypes.h header list.
      
      gcc/
      	* Makefile.in (MACHMODE_H): Remove insn-modes.h
      	(CORETYPES_H): New define.
      	(MOSTLYCLEANFILES): Add insn-modes-inline.h.
      	(insn-modes-inline.h, s-modes-inline-h): New rules.
      	(generated_files): Add insn-modes-inline.h.
      	(RTL_BASE_H, TREE_CORE_H): Use CORETYPES_H instead of coretypes.h.
      	(build/gensupport.o, build/ggc-none.o, build/print-rtl.o): Likewise.
      	(build/read-md.o, build/read-rtl.o, build/rtl.o): Likewise.
      	(build/vec.o, build/hash-table.o, build/inchash.o): Likewise.
      	(build/gencondmd.o, build/genattr.o, build/genattr-common.o): Likewise.
      	(build/genattrtab.o, build/genautomata.o, build/gencheck.o): Likewise.
      	(build/gencodes.o, build/genconditions.o): Likewise.
      	(build/genconfig.o, build/genconstants.o, build/genemit.o): Likewise.
      	(build/genenums.o, build/genextract.o, build/genflags.o): Likewise.
      	(build/gentarget-def.o, build/genmddeps.o, build/genopinit.o)
      	(build/genoutput.o, build/genpeep.o, build/genpreds.o): Likewise.
      	(build/genrecog.o, build/genmddump.o, build/genmatch.o): Likewise.
      	(build/gencfn-macros.o, build/gcov-iov.o): Likewise.
      	* coretypes.h: Include everything up to real.h for generators.
      	Include insn-modes.h first.  Include wide-int-print.h after
      	wide-int.h.  Include insn-modes-inline.h and then machmode.h.
      	* machmode.h: Don't include insn-modes.h here.
      	* function-tests.c: Remove includes of signop.h, machmode.h,
      	double-int.h and wide-int.h.
      	* rtl.h: Likewise.
      	* gcc-rich-location.c: Remove includes of machmode.h, double-int.h
      	and wide-int.h.
      	* optc-save-gen.awk: Likewise.
      	* gencheck.c (BITS_PER_UNIT): Delete dummy definition.
      	* godump.c: Remove include of wide-int-print.h.
      	* pretty-print.h: Likewise.
      	* wide-int-print.cc: Likewise.
      	* wide-int.cc: Likewise.
      	* hash-map-tests.c: Remove include of signop.h.
      	* hash-set-tests.c: Likewise.
      	* rtl-tests.c: Likewise.
      	* mkconfig.sh: Remove include of machmode.h.
      	* genmodes.c (emit_insn_modes_h): Split emission of inline functions
      	into...
      	(emit_insn_modes_inline_h): ...this new function.  Emit the code
      	into an insn-modes-inline.h header file, adding appropriate
      	include guards and end comments.
      	(emit_insn_modes_c_header): Remove include of machmode.h.
      	(emit_min_insn_modes_c_header): Include coretypes.h rather than
      	machmode.h.
      	(main): Handle -i flag and call emit_insn_modes_inline_h when
      	it is passed.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r249881
      Richard Sandiford committed
    • Make tree-ssa-strlen.c handle partial unterminated strings · e3f9a279
      tree-ssa-strlen.c looks for cases in which a string is built up using
      operations like:
      
          memcpy (a, "foo", 4);
          memcpy (a + 3, "bar", 4);
          int x = strlen (a);
      
      As a side-effect, it optimises the non-final memcpys so that they don't
      include the nul terminator.
      
      However, after removing some "& ~0x1"s from tree-ssa-dse.c, the DSE pass
      does this optimisation itself (because it can tell that later memcpys
      overwrite the terminators).  The strlen pass wasn't able to handle these
      pre-optimised calls in the same way as the unoptimised ones.
      
      This patch adds support for tracking unterminated strings.
      
      [Based on the code ARM contributed in branches/ARM/sve-branch@246236]
      
      2017-07-02  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* tree-ssa-strlen.c (strinfo): Rename the length field to
      	nonzero_chars.  Add a full_string_p field.
      	(compare_nonzero_chars, zero_length_string_p): New functions.
      	(get_addr_stridx): Add an offset_out parameter.
      	Use compare_nonzero_chars.
      	(get_stridx): Update accordingly.  Use compare_nonzero_chars.
      	(new_strinfo): Update after above changes to strinfo.
      	(set_endptr_and_length): Set full_string_p.
      	(get_string_length): Update after above changes to strinfo.
      	(unshare_strinfo): Update call to new_strinfo.
      	(maybe_invalidate): Likewise.
      	(get_stridx_plus_constant): Change off to unsigned HOST_WIDE_INT.
      	Use compare_nonzero_chars and zero_string_p.  Treat nonzero_chars
      	as a uhwi instead of an shwi.  Update after above changes to
      	strinfo and new_strinfo.
      	(zero_length_string): Assert that chainsi contains full strings.
      	Use zero_length_string_p.  Update call to new_strinfo.
      	(adjust_related_strinfos): Update after above changes to strinfo.
      	Copy full_string_p from origsi.
      	(adjust_last_stmt): Use zero_length_string_p.
      	(handle_builtin_strlen): Update after above changes to strinfo and
      	new_strinfo.  Install the lhs as the string length if the previous
      	entry didn't describe a full string.
      	(handle_builtin_strchr): Update after above changes to strinfo
      	and new_strinfo.
      	(handle_builtin_strcpy): Likewise.
      	(handle_builtin_strcat): Likewise.
      	(handle_builtin_malloc): Likewise.
      	(handle_pointer_plus): Likewise.
      	(handle_builtin_memcpy): Likewise.  Track nonzero characters
      	that aren't necessarily followed by a nul terminator.
      	(handle_char_store): Likewise.
      
      gcc/testsuite/
      	* gcc.dg/strlenopt-32.c: New testcase.
      	* gcc.dg/strlenopt-33.c: Likewise.
      	* gcc.dg/strlenopt-33g.c: Likewise.
      	* gcc.dg/strlenopt-34.c: Likewise.
      	* gcc.dg/strlenopt-35.c: Likewise.
      
      From-SVN: r249880
      Richard Sandiford committed
    • PR 80769: Incorrect strlen optimisation · 862088aa
      In this testcase, we (correctly) record after:
      
        strcpy (p1, "abcde");
        char *p2 = strchr (p1, '\0');
        strcpy (p2, q);
      
      that the length of p1 and p2 can be calculated by converting the
      second strcpy to:
      
        tmp = stpcpy (p2, q)
      
      and then doing tmp - p1 for p1 and tmp - p2 for p2.  This is delayed
      until we know whether we actually need it.  Then:
      
        char *p3 = strchr (p2, '\0');
      
      forces us to calculate the length of p2 in this way.  At this point
      we had three related strinfos:
      
        p1: delayed length, calculated from tmp = stpcpy (p2, q)
        p2: known length, tmp - p2
        p3: known length, 0
      
      After:
      
        memcpy (p3, "x", 2);
      
      we use adjust_related_strinfos to add 1 to each length.  However,
      that didn't do anything for delayed lengths because:
      
      	  else if (si->stmt != NULL)
      	    /* Delayed length computation is unaffected.  */
      	    ;
      
      So after the memcpy we had:
      
        p1: delayed length, calculated from tmp = stpcpy (p2, q)
        p2: known length, tmp - p2 + 1
        p3: known length, 1
      
      where the length of p1 was no longer correct.
      
      2017-05-16  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	PR tree-optimization/80769
      	* tree-ssa-strlen.c (strinfo): Document that "stmt" is also used
      	for malloc and calloc.  Document the new invariant that all related
      	strinfos have delayed lengths or none do.
      	(verify_related_strinfos): Move earlier in file.
      	(set_endptr_and_length): New function, split out from...
      	(get_string_length): ...here.  Also set the lengths of related
      	strinfos.
      	(zero_length_string): Assert that chainsi has known (rather than
      	delayed) lengths.
      	(adjust_related_strinfos): Likewise.
      
      gcc/testsuite/
      	PR tree-optimization/80769
      	* gcc.dg/strlenopt-31.c: New test.
      	* gcc.dg/strlenopt-31g.c: Likewise.
      
      From-SVN: r249879
      Richard Sandiford committed
    • PR81136: ICE from inconsistent DR_MISALIGNMENTs · c34d0927
      The test case triggered this assert in vect_update_misalignment_for_peel:
      
            gcc_assert (DR_MISALIGNMENT (dr) / dr_size ==
                        DR_MISALIGNMENT (dr_peel) / dr_peel_size);
      
      The problem was that:
      
      - one memory reference guaranteed a high base alignment, when considering
        that reference in isolation.  This meant that we could calculate the
        vector misalignment for its DR at compile time.
      
      - the other memory reference only guaranteed a low base alignment,
        when considering that reference in isolation.  We therefore couldn't
        calculate the vector misalignment for its DR at compile time.
      
      - when looking at the values of the two addresses as a pair (rather
        than the memory references), it was obvious that they had the same
        misalignment, whatever that misalignment happened to be.
      
      This is working as designed, so the patch restricts the assert to cases
      in which both addresses have a compile-time misalignment.
      
      In the test case this looks like a missed opportunity.  Both references
      are unconditional, so it should be possible to use the highest of the
      available base alignment guarantees when analyzing each reference.
      A later patch does this, but the problem would still remain for
      conditional references.
      
      2017-07-02  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	PR tree-optimization/81136
      	* tree-vect-data-refs.c (vect_update_misalignment_for_peel): Only
      	assert that two references with the same misalignment have the same
      	compile-time misalignment if those compile-time misalignments
      	are known.
      
      gcc/testsuite/
      	PR tree-optimization/81136
      	* gcc.dg/vect/pr81136.c: New test.
      
      From-SVN: r249878
      Richard Sandiford committed
    • Always print attributes when dumping tree · 86ae8a3d
      A tree type dump currently doesn't print the attributes. Since we have
      so many now and they do many interesting things dumping them can be
      useful. So dump them by default for tree type dumps.
      
      gcc/:
      
      2017-07-01  Andi Kleen  <ak@linux.intel.com>
      
              * print-tree.c (print_node): Print all attributes.
      
      From-SVN: r249877
      Andi Kleen committed
    • Daily bump. · 01be4b2d
      From-SVN: r249876
      GCC Administrator committed
  2. 01 Jul, 2017 12 commits
  3. 30 Jun, 2017 16 commits
    • re PR ipa/81261 (ICE with -fno-guess-branch-probability) · 77616c7e
      
      	PR ipa/81261
      	* tree-inline.c (expand_call_inline): Combine profile statuses.
      
      From-SVN: r249856
      Jan Hubicka committed
    • PR c++/81257 - ICE with invalid ::template. · 3d4de231
      	PR c++/54769 - wrong lookup of dependent template-name.
      	* parser.c (cp_parser_template_name): Revert part of last change.
      
      From-SVN: r249855
      Jason Merrill committed
    • tree-if-conv.c (predicate_scalar_phi): Update new_stmt if fold_stmt returned true. · fb6a764d
      2017-06-30  Andrew Pinski  <apinski@cavium.com>
      
              * tree-if-conv.c (predicate_scalar_phi): Update new_stmt if
              fold_stmt returned true.
      2017-06-30  Andrew Pinski  <apinski@cavium.com>
      
              * gcc.dg/torture/pr81245.c: New testcase.
      
      From-SVN: r249854
      Andrew Pinski committed
    • config-lang.in (gtfiles): Add cp/lex.c. · 08fb1316
      	* config-lang.in (gtfiles): Add cp/lex.c.
      	* cp-tree.h (mangle_convop_name_for_type): Rename ...
      	(make_conv_op_name): ... here.  Move to lex.
      	* lambda.c (maybe_add_lambda_conv_op): Update.
      	* parser.c (cp_parser_conversion_function_id): Update.
      	* pt.c (tsubst_decl, tsubst_baselink, tsubst_copy,
      	tsubst_copy_and_build): Update.
      	* semantics.c (apply_deduced_return_type): Update.
      	* mangle.c (conv_type_hasher, conv_type_names,
      	mangle_conv_op_name_for_type): Move to ...
      	* lex.c (conv_type_hasher, conv_type_names, make_convop_name):
      	... here.  Rename.
      
      	* libcp1plugin.cc (plugin_build_decl): Use make_conv_op_name.
      	(plugin_build_dependent_expr): Likewise.
      
      From-SVN: r249852
      Nathan Sidwell committed
    • ggc.h (empty_string): Delete. · 618400bc
      	* ggc.h (empty_string): Delete.
      	* cfgexpand.c (expand_asm_stmt): Use plain "".
      	* optabs.c (expand_asm_memory_barrier): Likewise.
      	* stringpool.c (empty_string): Delete.
      	(digit_vector, digit_string): Delete.
      	(ggc_alloc_string): Use plain "", don't optimize single digit
      	strings.  Use ggc_alloc_atomic.
      
      From-SVN: r249851
      Nathan Sidwell committed
    • [rtlanal] Do a better job of costing parallel sets containing flag-setting operations. · 84682fd2
          
      Many parallel set insns are of the form of a single set that also sets
      the condition code flags.  In this case the cost of such an insn is
      normally the cost of the part that doesn't set the flags, since
      updating the condition flags is simply a side effect.
      
      At present all such insns are treated as having unknown cost (ie 0)
      and combine assumes that such insns are infinitely more expensive than
      any other insn sequence with a non-zero cost.
      
      This patch addresses this problem by allowing insn_rtx_cost to ignore
      the condition setting part of a PARALLEL iff there is exactly one
      comparison set and one non-comparison set.  If the only set operation
      is a comparison we still use that as the basis of the insn cost.
      
      	* rtlanal.c (insn_rtx_cost): If a parallel contains exactly one
      	comparison set and one other set, use the cost of the non-comparison
      	set.
      
      Bootstrapped on aarch64-none-linuxgnu
      
      From-SVN: r249850
      Richard Earnshaw committed
    • ggc.h: Replace all 'static inline' with plain 'inline'. · e886224b
      	* ggc.h: Replace all 'static inline' with plain 'inline'.  Fix
      	some formatting.
      
      From-SVN: r249848
      Nathan Sidwell committed
    • tree-cfg.c (group_case_labels_stmt): Merge scanning and compressing loops. · 39426ab7
      	* tree-cfg.c (group_case_labels_stmt): Merge scanning and compressing
      	loops.  Remove now unneeded calls to gimple_switch_set_label() that
      	just set removed labels to NULL_TREE.
      
      From-SVN: r249847
      Peter Bergner committed
    • tree-ssanames.c (set_range_info_raw): Abstract from ... · 059ab149
      	* tree-ssanames.c (set_range_info_raw): Abstract from ...
      	(set_range_info): ...here.  Only call set_range_info_raw if domain
      	is useful.
      	(set_nonzero_bits): Call set_range_info_raw.
      	* tree-ssanames.h (set_range_info_raw): New.
      testsuite/
      	* gcc.dg/Walloca-14.c: Adapt test to recognize new complaint of
      	unbounded use.
      
      From-SVN: r249846
      Aldy Hernandez committed
    • Fix location of typeid() (PR c++/80014) · e59e8b5a
      gcc/cp/ChangeLog:
      	PR c++/80014
      	* parser.c (cp_parser_postfix_expression): Construct a location
      	for typeid expressions.
      
      gcc/testsuite/ChangeLog:
      	PR c++/80014
      	* g++.dg/plugin/diagnostic-test-expressions-1.C (std::type_info):
      	Add declaration.
      	(test_typeid): New test function.
      
      From-SVN: r249845
      David Malcolm committed
    • re PR target/81225 (ICE with -mavx512ifma -O3 -ffloat-store) · e855bdc0
      	PR target/81225
      	* config/i386/sse.md (vec_extract_lo_<mode><mask_name>): For
      	V8FI, V16FI and VI8F_256 iterators, use <store_mask_predicate> instead
      	of nonimmediate_operand and <store_mask_constraint> instead of m for
      	the input operand.  For V8FI iterator, always split if input is a MEM.
      	For V16FI and V8SF_256 iterators, don't test if both operands are MEM
      	if <mask_applied>.  For VI4F_256 iterator, use <store_mask_predicate>
      	instead of register_operand and <store_mask_constraint> instead of v for
              the input operand.  Make sure both operands aren't MEMs for if not
      	<mask_applied>.
      
      	* gcc.target/i386/pr81225.c: New test.
      
      From-SVN: r249844
      Jakub Jelinek committed
    • cp-tree.h (lookup_fnfields_1, [...]): Don't declare. · fe32bb1b
      
      	* cp-tree.h (lookup_fnfields_1, class_method_index_for_fn): Don't
      	declare.
      	(lookup_all_conversions): Declare.
      	* class.c (get_basefndecls): Use lookup_fnfields_slot.
      	* decl.c (register_dtor_fn): Use lookup_fnfields_slot.
      	* decl2.c (check_class_fn): Use lookup_fnfields_slot.  Rework
      	diagnostics.
      	* pt.c (retrieve_specialization): Use lookup_fnfields_slot.
      	(check_explicit_specialization): Use lookup_fnfields_slot_nolazy,
      	lookup_all_conversions.
      	* search.c (lookup_fnfields_1): Make static.
      	(lookup_all_conversions): New.
      	(class_method_index_for_fn): Delete.
      	* semantics.c (classtype_has_nothrow_assign_or_copy_p): Use
      	lookup_fnfields_slot.
      
      	* g++.dg/concepts/memfun-err.C: Adjust diagnostics.
      	* g++.dg/cpp0x/decltype9.C: Likewise.
      	* g++.dg/cpp0x/forw_enum9.C: Likewise.
      	* g++.dg/lookup/decl1.C: Likewise.
      	* g++.dg/lookup/extern-c-redecl.C: Likewise.
      	* g++.dg/other/pr28432.C: Likewise.
      	* g++.dg/parse/crash12.C: Likewise.
      	* g++.dg/parse/enum3.C: Likewise.
      	* g++.dg/parse/operator6.C: Likewise.
      	* g++.dg/template/crash69.C: Likewise.
      	* g++.dg/template/error27.C: Likewise.
      	* g++.dg/template/error28.C: Likewise.
      	* g++.dg/template/memfriend6.C: Likewise.
      	* g++.old-deja/g++.mike/err1.C: Likewise.
      	* g++.old-deja/g++.mike/p811.C: Likewise.
      	* g++.old-deja/g++.other/crash25.C: Likewise.
      	* g++.old-deja/g++.other/dtor4.C: Likewise.
      	* g++.old-deja/g++.pt/t37.C: Likewise.
      
      From-SVN: r249843
      Nathan Sidwell committed
    • * lto-wrapper.c (copy_file) Close both file descriptors before · 367e91e1
      	exiting normally.
      
      From-SVN: r249841
      Sylvestre Ledru committed
    • Fix removal of ifunc (PR ipa/81214). · aaa587d4
      2017-06-30  Martin Liska  <mliska@suse.cz>
      
      	PR ipa/81214
      	* gcc.target/i386/pr81214.c: New test.
      2017-06-30  Martin Liska  <mliska@suse.cz>
      
      	PR ipa/81214
      	* multiple_target.c (create_dispatcher_calls): Make ifunc
      	also for function that don't have calls or are not referenced.
      
      From-SVN: r249840
      Martin Liska committed
    • tree-vect-slp.c (vect_slp_analyze_node_operations): Only analyze the first scalar stmt. · bd2f172f
      2017-06-30  Richard Biener  <rguenther@suse.de>
      
      	* tree-vect-slp.c (vect_slp_analyze_node_operations): Only
      	analyze the first scalar stmt.  Move vector type computation
      	for the BB case here from ...
      	* tree-vect-stmts.c (vect_analyze_stmt): ... here.  Guard
      	live operation processing in the SLP case properly.
      
      From-SVN: r249839
      Richard Biener committed
    • call.c (build_new_method_call_1): Use constructo_name to get ctor name. · 3b5c768c
      	* call.c (build_new_method_call_1): Use constructo_name to get
      	ctor name.  Move argument processing earlier to merge cdtor
      	handling blocks.
      	* decl.c (grokfndecl): Cdtors have special names.
      	* method.c (implicitly_declare_fn): Likewise. Simplify flag setting.
      	* pt.c (check_explicit_specialization): Cdtor name is already
      	special.
      	* search.c (class_method_index_for_fn): Likewise.
      
      	* g++.dg/plugin/decl-plugin-test.C: Expect special ctor name.
      
      From-SVN: r249838
      Nathan Sidwell committed