1. 31 Jul, 2019 11 commits
    • Remove amdgcn expcnt waits. · 930c5599
      2019-07-31  Andrew Stubbs  <ams@codesourcery.com>
      
      	gcc/
      	* config/gcn/gcn-valu.md
      	(scatter<mode>_insn_1offset<exec_scatter>): Remove s_waitcnt.
      	(scatter<mode>_insn_1offset_ds<exec_scatter>): Likewise.
      	(scatter<mode>_insn_2offsets<exec_scatter>): Likewise.
      	* config/gcn/gcn.c (gcn_md_reorg): Add delayeduse and reads to
      	struct ilist. Add nops for delayeduse insns.
      	* config/gcn/gcn.md (delayeduse): New attribute.
      	(*movbi): Remove s_waitcnt from stores.
      	(*mov<mode>_insn): Likewise.
      	(*movti_insn): Likewise. Add delayeduse attribute.
      	(sync_compare_and_swap<mode>_insn): Add delayeduse attribute.
      	(atomic_store<mode>): Remove or adjust s_waitcnt.
      
      From-SVN: r273931
      Andrew Stubbs committed
    • vr-values.h (vr_values::swap_vr_value): New. · f86c2e71
      2019-07-31  Richard Biener  <rguenther@suse.de>
      
      	* vr-values.h (vr_values::swap_vr_value): New.
      	(vr_values::free_value_range): likewise.
      	* vr-values.c (vr_values::swap_vr_value): Implement.
      	* gimple-ssa-evrp-analyze.h (evrp_range_analyzer::pop_value_range):
      	Do not return a range or take a var.
      	(evrp_range_analyzer::stack): Change back to recording a non-const
      	value_range *.
      	* gimple-ssa-evrp-analyze.c
      	(evrp_range_analyzer::record_ranges_from_stmt): Free unused
      	value-range.
      	(evrp_range_analyzer::pop_to_marker): Adjust.
      	(evrp_range_analyzer::push_value_range): Use new swap_vr_value.
      	(evrp_range_analyzer::pop_value_range): Likewise.  Free the
      	no longer needed value-range.
      
      From-SVN: r273930
      Richard Biener committed
    • Mark necessary 2nd and later args for delete op. · f39b0639
      2019-07-31  Martin Liska  <mliska@suse.cz>
      
      	* tree-ssa-dce.c (propagate_necessity): Delete operator can
      	have size and (or) alignment as 2nd and later arguments.
      	Mark all of them as necessary.
      
      From-SVN: r273929
      Martin Liska committed
    • re PR tree-optimization/91178 (Infinite recursion in split_constant_offset in slp after r260289) · 0fbdb0c0
      2019-07-31  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/91178
      	* tree-ssa-sccvn.c (vn_reference_maybe_forwprop_address):
      	Use tail-recursion.
      
      	* gcc.dg/torture/pr91178-2.c: New testcase.
      
      From-SVN: r273928
      Richard Biener committed
    • re PR tree-optimization/91201 (SIMD not generated for horizontal sum of bytes in array) · 1104467f
      	PR tree-optimization/91201
      	* config/i386/sse.md (reduc_plus_scal_v16qi): New expander.
      	(REDUC_PLUS_MODE): Add V32QImode for TARGET_AVX and V64QImode for
      	TARGET_AVX512F.
      	(reduc_plus_scal_<mode>): Improve formatting by introducing
      	a temporary.
      
      	* gcc.target/i386/sse2-pr91201.c: New test.
      	* gcc.target/i386/avx2-pr91201.c: New test.
      	* gcc.target/i386/avx512bw-pr91201.c: New test.
      
      From-SVN: r273927
      Jakub Jelinek committed
    • [GCC, AArch64] Enable Transactional Memory Extension · 89626179
      This patch enables the new Transactional Memory Extension announced recently
      as part of Arm's new architecture technologies.
      We introduce a new optional extension "tme" to enable this. The following
      instructions are part of the extension:
         * tstart <Xt>
         * ttest <Xt>
         * tcommit
         * tcancel #<imm>
      We have also added ACLE intrinsics for the instructions.
      
      *** gcc/ChangeLog ***
      
      2019-07-31  Sudakshina Das  <sudi.das@arm.com>
      
      	* config/aarch64/aarch64-builtins.c (enum aarch64_builtins): Add
      	AARCH64_TME_BUILTIN_TSTART, AARCH64_TME_BUILTIN_TCOMMIT,
      	AARCH64_TME_BUILTIN_TTEST and AARCH64_TME_BUILTIN_TCANCEL.
      	(aarch64_init_tme_builtins): New.
      	(aarch64_init_builtins): Call aarch64_init_tme_builtins.
      	(aarch64_expand_builtin_tme): New.
      	(aarch64_expand_builtin): Handle TME builtins.
      	* config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins): Define
      	__ARM_FEATURE_TME when enabled.
      	* config/aarch64/aarch64-option-extensions.def: Add "tme".
      	* config/aarch64/aarch64.h (AARCH64_FL_TME, AARCH64_ISA_TME): New.
      	(TARGET_TME): New.
      	* config/aarch64/aarch64.md (define_c_enum "unspec"): Add UNSPEC_TTEST.
      	(define_c_enum "unspecv"): Add UNSPECV_TSTART, UNSPECV_TCOMMIT and
      	UNSPECV_TCANCEL.
      	(tstart, ttest, tcommit, tcancel): New instructions.
      	* config/aarch64/arm_acle.h (__tstart, __tcommit): New.
      	(__tcancel, __ttest): New.
      	(_TMFAILURE_REASON, _TMFAILURE_RTRY, _TMFAILURE_CNCL): New macro.
      	(_TMFAILURE_MEM, _TMFAILURE_IMP, _TMFAILURE_ERR): Likewise.
      	(_TMFAILURE_SIZE, _TMFAILURE_NEST, _TMFAILURE_DBG): Likewise.
      	(_TMFAILURE_INT, _TMFAILURE_TRIVIAL): Likewise.
      	* config/arm/types.md: Add new tme type attr.
      	* doc/invoke.texi: Document "tme".
      
      *** gcc/testsuite/ChangeLog ***
      
      2019-07-31  Sudakshina Das  <sudi.das@arm.com>
      
      	* gcc.target/aarch64/acle/tme.c: New test.
      	* gcc.target/aarch64/pragma_cpp_predefs_2.c: New test.
      
      From-SVN: r273926
      Sudakshina Das committed
    • [Arm][CMSE]Add warn_unused_return attribute to cmse functions · f0efd925
      At present it is possible to call the CMSE functions for checking
      addresses (such as cmse_check_address_range) and  forget to check/use
      the return value. This patch makes the interfaces more robust against
      programmer error by marking these functions with the warn_unused_result
      attribute. With this set, any use of these functions that does not use
      the result will produce a warning.
      
      This produces a warning on default warn levels when the result of the
      cmse functions is not used.
      
      For the following function:
      void foo()
      {
           int *data;
           cmse_check_address_range((int*)data, 0, 0);
      }
      The following warning is emitted:
      warning: ignoring return value of 'cmse_check_address_range' declared
      with attribute 'warn_unused_result' [-Wunused-result]
           6 |  cmse_check_address_range((int*)data, 0, 0);
              |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      gcc/ChangeLog:
      
      2019-07-31  Joel Hutton  <Joel.Hutton@arm.com>
      
               * config/arm/arm_cmse.h (cmse_nonsecure_caller): Add
      warn_unused_result attribute.
               (cmse_check_address_range): Add warn_unused_result attribute.
      
      libgcc/ChangeLog:
      
      2019-07-31  Joel Hutton  <Joel.Hutton@arm.com>
      
               * config/arm/cmse.c (cmse_check_address_range): Add
      warn_unused_result attribute.
      
      2019-07-31  Joel Hutton  <Joel.Hutton@arm.com>
      
               * gcc.target/arm/cmse/cmse-17.c: New test.
      
      From-SVN: r273924
      Joel Hutton committed
    • re PR tree-optimization/91257 (Compile-time and memory-hog hog) · ce52e0ff
      2019-07-31  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/91257
      	* tree-vrp.c (union_ranges): Unify equality and less tests
      	by using compare_values.  Re-order cheap tests first.
      
      From-SVN: r273923
      Richard Biener committed
    • re PR middle-end/91301 (ICE in omp_add_variable on random access iterator… · c3ac76aa
      re PR middle-end/91301 (ICE in omp_add_variable on random access iterator distribute parallel for private (iterator))
      
      	PR middle-end/91301
      	* gimplify.c (gimplify_omp_for): If for class iterator on
      	distribute parallel for there is no data sharing clause
      	on inner_for_stmt, look for private clause on combined
      	parallel too and if found, move it to inner_for_stmt.
      
      	* testsuite/libgomp.c++/for-27.C: New test.
      
      From-SVN: r273922
      Jakub Jelinek committed
    • Make lra use per-alternative earlyclobber info · a25f3e8e
      lra_insn_reg and lra_operand_data have both a bitmask of earlyclobber
      alternatives and an overall boolean.  The danger is that we then test
      the overall boolean when really we should be testing for a particular
      alternative.  This patch gets rid of the boolean and tests the mask
      against zero when we really do need to test "any alternative might
      be earlyclobber".  (I think the only instance of that is the
      LRA_UNKNOWN_ALT handling in lra-lives.c:reg_early_clobber_p.)
      
      This is needed (and tested) by an upcoming SVE patch.
      
      2019-07-31  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* lra-int.h (lra_operand_data): Remove early_clobber field.
      	(lra_insn_reg): Likewise.
      	* lra.c (debug_operand_data): Update accordingly.
      	(setup_operand_alternative): Likewise.
      	(new_insn_reg): Likewise.  Remove early_clobber parameter.
      	(collect_non_operand_hard_regs): Update call accordingly.
      	Don't assign to lra_insn_reg::early_clobber.
      	(add_regs_to_insn_regno_info): Remove early_clobber parameter
      	and update calls to new_insn_reg.
      	(lra_update_insn_regno_info): Update calls accordingly.
      	* lra-constraints.c (update_and_check_small_class_inputs): Take the
      	alternative number as a parameter and test whether the operand
      	is earlyclobbered in that particular alternative.
      	(process_alt_operands): Update call accordingly.  Use per-alternative
      	checks for earyclobber here too.
      	* lra-lives.c (reg_early_clobber_p): Check early_clobber_alts
      	against zero for IRA_UNKNOWN_ALT.
      
      From-SVN: r273921
      Richard Sandiford committed
    • Daily bump. · 68c86af2
      From-SVN: r273920
      GCC Administrator committed
  2. 30 Jul, 2019 15 commits
  3. 29 Jul, 2019 14 commits
    • i386.md (movstrict<mode>): Use register_operand predicate for operand 0. · 82534f65
      	* config/i386/i386.md (movstrict<mode>): Use register_operand
      	predicate for operand 0.  Add expander condition.  Assert that
      	operand 0 is a SUBREG RTX.
      	(*movstrict<mode>_1): Use register_operand predicate for operand 0.
      	Update operand constraints and insn condition.
      	(zero_extend<mode>si2_and): Do not call gen_movstrict<mode>.
      	(zero_extendqihi2_and): Do not call gen_movstrictqi.
      	(*setcc_qi_slp): Use register_operand predicate for operand 0.
      	Update operand 0 constraints.
      	(setcc_qi_slp splitters): Use register_operand predicate for operand 0.
      
      From-SVN: r273891
      Uros Bizjak committed
    • MSP430: Disallow use of code/data regions in the small memory model · 49c432df
      gcc/ChangeLog:
      
      2019-07-29  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
      
      	* config/msp430/msp430.h (DRIVER_SELF_SPECS): Define and emit errors
      	when -m{code,data}-region are used without -mlarge.
      	* config/msp430/msp430.c (msp430_option_override): Error when a
      	non-default code or data region is used without -mlarge.
      	(msp430_section_attr): Emit a warning and do not add upper/lower/either
      	attributes when they are used without -mlarge.
      
      gcc/testsuite/ChangeLog:
      
      2019-07-29  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
      
      	* gcc.target/msp430/pr78818-data-region.c: Add -mlarge to dg-options.
      	* gcc.target/msp430/region-misuse-code.c: New test.
      	* gcc.target/msp430/region-misuse-data.c: Likewise.
      	* gcc.target/msp430/region-misuse-code-data.c: Likewise.
      	* gcc.target/msp430/region-attribute-misuse.c: Likewise.
      
      From-SVN: r273884
      Jozef Lawrynowicz committed
    • Allow both upper and lower case 'r' in register names · 37816988
      2019-07-29  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
      
      	PR target/70320
      	* config/msp430/msp430.h: Define ADDITIONAL_REGISTER_NAMES.
      
      2019-07-29  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
      
      	PR target/70320
      	* gcc.target/msp430/asm-register-names-lower-case.c: New test.
      	* gcc.target/msp430/asm-register-names-upper-case.c: Likewise.
      
      From-SVN: r273883
      Jozef Lawrynowicz committed
    • Add PR number · 2c393dab
      From-SVN: r273882
      Richard Sandiford committed
    • Fix inchash handling of wide_ints (PR91242) · 5d5bb9bc
      inchash::hash::add_wide_int operated directly on the raw encoding
      of the wide_int, including any redundant upper bits.  The problem
      with that is that the upper bits are only defined for some wide-int
      storage types (including wide_int itself).  wi::to_wide(tree) instead
      returns a value that is extended according to the signedness of the
      type (so that wi::to_widest can use the same encoding) while rtxes
      have the awkward special case of BI, which can be zero-extended
      rather than sign-extended.
      
      In the PR, we computed a hash for a "normal" sign-extended wide_int
      while the existing entries hashed wi::to_wide(tree).  This gives
      different results for unsigned types that have the top bit set.
      
      The patch fixes that by hashing the canonical sign-extended form even
      if the raw encoding happens to be different.
      
      2019-07-29  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* wide-int.h (generic_wide_int::sext_elt): New function.
      	* inchash.h (hash::add_wide_int): Use it instead of elt.
      
      From-SVN: r273881
      Richard Sandiford committed
    • re PR fortran/90813 (gfortran.dg/proc_ptr_51.f90 fails (SIGSEGV) after 272084) · 5c6aa9a8
      2019-07-29  Thomas Koenig  <tkoenig@gcc.gnu.org>
      
      	PR fortran/90813
      	* dump-parse-tree.c (show_global_symbol): New function.
      	(gfc_dump_global_symbols): New function.
      	* gfortran.h (gfc_traverse_gsymbol): Add prototype.
      	(gfc_dump_global_symbols): Likewise.
      	* invoke.texi: Document -fdump-fortran-global.
      	* lang.opt: Add -fdump-fortran-global.
      	* parse.c (gfc_parse_file): Handle flag_dump_fortran_global.
      	* symbol.c (gfc_traverse_gsymbol): New function.
      	* trans-decl.c (sym_identifier): New function.
      	(mangled_identifier): New function, doing most of the work
      	of gfc_sym_mangled_identifier.
      	(gfc_sym_mangled_identifier): Use mangled_identifier.  Add mangled
      	identifier to global symbol table.
      	(get_proc_pointer_decl): Use backend decl from global identifier
      	if present.
      
      From-SVN: r273880
      Thomas Koenig committed
    • [arm] Make ACLE builtins use arm_* namespace for expanders · 93733789
      The builtins from <arm_acle.h> use fairly general expander names such as
      "crc", "mcr" etc.
      These run the risk of being reserved by the midend in the future.
      Let's namespace them to arm_* as is convention.
      
      	* config/arm/arm-builtins.c (acle_builtin_data): Expand VAR1 to
      	CODE_FOR_arm_##.
      	* config/arm/arm.md (<crc_variant>): Rename to...
      	(arm_<crc_variant>): ... This.
      	(<cdp>): Rename to...
      	(arm_<cdp>): ... This.
      	(<ldc>): Rename to...
      	(arm_<ldc>): ... This.
      	(<stc>): Rename to...
      	(arm_<stc>): ... This.
      	(<mcr>): Rename to...
      	(arm_<mcr>): ... This.
      	(<mrc>): Rename to...
      	(arm_<mrc>): ... This.
      	(<mcrr>): Rename to...
      	(arm_<mcrr>): ... This.
      	(<mrrc>): Rename to...
      	(arm_<mrrc>): ... This.
      
      From-SVN: r273879
      Kyrylo Tkachov committed
    • PR libstdc++/51333 Define recursive_init_error constructor non-inline · 50c2df93
      The recursive_init_error class is defined in a header, with an inline
      constructor, but the definition of the vtable and destructor are not
      exported from the shared library. With -fkeep-inline-functions the
      constructor gets emitted in user code, and requires the (non-exported)
      vtable. This fails to link.
      
      As far as I can tell, the recursive_init_error class definition was
      moved into <cxxabi.h> so it could be documented with Doxygen, not for
      any technical reason. But now it's there (and documented), somebody
      could be relying on it, by catching that type and possibly performing
      derived-to-base conversions to the std::exception base class. So the
      conservative fix is to leave the class definition in the header but make
      the constructor non-inline. This still allows the type to be caught and
      still defines its base class. User code can no longer construct objects
      of that type, but that's not something we need to support.
      
      	PR libstdc++/51333
      	* libsupc++/cxxabi.h (__gnu_cxx::recursive_init_error): Do not define
      	constructor inline.
      	* libsupc++/guard_error.cc (__gnu_cxx::recursive_init_error): Define
      	constructor.
      	* testsuite/18_support/51333.cc: New test.
      
      From-SVN: r273878
      Jonathan Wakely committed
    • re PR tree-optimization/91257 (Compile-time and memory-hog hog) · 390c0dd6
      2019-07-29  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/91257
      	* tree-ssa-sccvn.h (struct vn_avail): New.
      	(struct vn_ssa_aux): Add avail member.
      	* tree-ssa-sccvn.c (class rpo_elim): Remove m_rpo_avail
      	member, add m_avail_freelist one.
      	(rpo_elim::~rpo_elim): Remove.
      	(rpo_elim::eliminate_avail): Adjust to new avail tracking
      	data structure.
      	(rpo_elim::eliminate_push_avail): Likewise.
      	(do_unwind): Likewise.
      	(do_rpo_vn): Likewise.
      
      From-SVN: r273877
      Richard Biener committed
    • re PR tree-optimization/91257 (Compile-time and memory-hog hog) · a55d6091
      2019-07-29  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/91257
      	* tree-vrp.c (operand_less_p): Avoid dispatching to fold for
      	most cases, instead call compare_values which handles the
      	symbolic ranges we handle specially.
      	(compare_values_warnv): Do not call operand_less_p but open-code
      	the effective fold calls.  Avoid converting so much.
      
      From-SVN: r273876
      Richard Biener committed
    • Fix ICE seen in tree-ssa-dce.c for new/delete pair. · fc5e7d2a
      2019-07-29  Martin Liska  <mliska@suse.cz>
      
      	* tree-ssa-dce.c (eliminate_unnecessary_stmts): Do not
      	remove LHS of operator new call.  It's handled latter.
      2019-07-29  Martin Liska  <mliska@suse.cz>
      
      	* g++.dg/cpp1y/new1.C (test_unused): Add new case that causes
      	ICE.
      
      From-SVN: r273875
      Martin Liska committed
    • re PR middle-end/91267 (SEGV in value_range_base::equal_p) · 3c2f6fae
      2019-07-29  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/91267
      	* vr-values.c (vr_values::update_value_range): Add early return
      	for effectively VARYING lattice entry.
      
      	* gcc.dg/torture/pr91267.c: New testcase.
      
      From-SVN: r273874
      Richard Biener committed
    • Prevent tree-ssa-dce.c from deleting stores at -Og · f33b9c40
      DCE tries to delete dead stores to local data and also tries to insert
      debug binds for simple cases:
      
        /* If this is a store into a variable that is being optimized away,
           add a debug bind stmt if possible.  */
        if (MAY_HAVE_DEBUG_BIND_STMTS
            && gimple_assign_single_p (stmt)
            && is_gimple_val (gimple_assign_rhs1 (stmt)))
          {
            tree lhs = gimple_assign_lhs (stmt);
            if ((VAR_P (lhs) || TREE_CODE (lhs) == PARM_DECL)
      	  && !DECL_IGNORED_P (lhs)
      	  && is_gimple_reg_type (TREE_TYPE (lhs))
      	  && !is_global_var (lhs)
      	  && !DECL_HAS_VALUE_EXPR_P (lhs))
      	{
      	  tree rhs = gimple_assign_rhs1 (stmt);
      	  gdebug *note
      	    = gimple_build_debug_bind (lhs, unshare_expr (rhs), stmt);
      	  gsi_insert_after (i, note, GSI_SAME_STMT);
      	}
          }
      
      But this doesn't help for things like "print *ptr" when ptr points
      to the local variable (tests Og-dce-1.c and Og-dce-2.c).  It can
      also introduce wrong debug info for earlier references (second test
      in Og-dce-3.c) or make earlier references unavailable (first test
      in Og-dce-3.c).
      
      So for -Og I think it'd be better not to delete any stmts with
      vdefs for now.  This also means that we can avoid the potentially
      expensive vop walks (which already have a cut-off, but still).
      
      The patch also fixes the Og failures in gcc.dg/guality/pr54970.c
      (PR 86638).
      
      2019-07-29  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	PR debug/86638
      	* tree-ssa-dce.c (keep_all_vdefs_p): New function.
      	(mark_stmt_if_obviously_necessary): Mark all stmts with vdefs as
      	necessary if keep_all_vdefs_p is true.
      	(mark_aliased_reaching_defs_necessary): Add a gcc_checking_assert
      	that keep_all_vdefs_p is false.
      	(mark_all_reaching_defs_necessary): Likewise.
      	(propagate_necessity): Skip the vuse scan if keep_all_vdefs_p is true.
      
      gcc/testsuite/
      	* c-c++-common/guality/Og-dce-1.c: New test.
      	* c-c++-common/guality/Og-dce-2.c: Likewise.
      	* c-c++-common/guality/Og-dce-3.c: Likewise.
      
      From-SVN: r273872
      Richard Sandiford committed
    • Don't run DSE at -Og · c0fe6bce
      This patch stops gimple and rtl DSE from running by default at -Og.
      The idea is both to improve compile time and to stop us from deleting
      stores that we can't track in debug info.
      
      We could rein this back in future for stores to local variables
      with is_gimple_reg_type, but at the moment we don't have any
      infrastructure for switching between binds to specific values
      and binds to evolving memory locations.  Even then, location
      tracking only works for direct references to the variables, and doesn't
      for example help with printing dereferenced pointers (see the next patch
      in the series for an example).
      
      I'm also not sure that DSE is important enough for -Og to justify the
      compile time cost --  especially in the case of RTL DSE, which is pretty
      expensive.
      
      2019-07-29  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* common.opt (Og): Change the initial value of flag_dse to 0.
      	* opts.c (default_options_table): Move OPT_ftree_dse from
      	OPT_LEVELS_1_PLUS to OPT_LEVELS_1_PLUS_NOT_DEBUG.  Also add
      	OPT_fdse to OPT_LEVELS_1_PLUS_NOT_DEBUG.  Put the OPT_ftree_pta
      	entry before the OPT_ftree_sra entry.
      	* doc/invoke.texi (Og): Add -fdse and -ftree-dse to the list
      	of flags disabled by Og.
      
      gcc/testsuite/
      	* c-c++-common/guality/Og-global-dse-1.c: New test.
      
      From-SVN: r273871
      Richard Sandiford committed