1. 10 May, 2019 8 commits
    • re PR fortran/90093 (Extended C interop: optional argument incorrectly identified as PRESENT) · 0a524296
      2019-05-10  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/90093
      	* trans-decl.c (convert_CFI_desc): Test that the dummy is
      	present before doing any of the conversions.
      
      	PR fortran/90352
      	* decl.c (gfc_verify_c_interop_param): Restore the error for
      	charlen > 1 actual arguments passed to bind(C) procs.
      	Clean up trailing white space.
      
      	PR fortran/90355
      	* trans-array.c (gfc_trans_create_temp_array): Set the 'span'
      	field to the element length for all types.
      	(gfc_conv_expr_descriptor): The force_no_tmp flag is used to
      	prevent temporary creation, especially for substrings.
      	* trans-decl.c (gfc_trans_deferred_vars): Rather than assert
      	that the backend decl for the string length is non-null, use it
      	as a condition before calling gfc_trans_vla_type_sizes.
      	* trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): 'force_no_tmp'
      	is set before calling gfc_conv_expr_descriptor.
      	* trans.c (get_array_span): Move the code for extracting 'span'
      	from gfc_build_array_ref to this function. This is specific to
      	descriptors that are component and indirect references.
      	* trans.h : Add the force_no_tmp flag bitfield to gfc_se.
      
      2019-05-10  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/90093
      	* gfortran.dg/ISO_Fortran_binding_12.f90: New test.
      	* gfortran.dg/ISO_Fortran_binding_12.c: Supplementary code.
      
      	PR fortran/90352
      	* gfortran.dg/iso_c_binding_char_1.f90: New test.
      
      	PR fortran/90355
      	* gfortran.dg/ISO_Fortran_binding_4.f90: Add 'substr' to test
      	the direct passing of substrings as descriptors to bind(C).
      	* gfortran.dg/assign_10.f90: Increase the tree_dump count of
      	'atmp' to account for the setting of the 'span' field.
      	* gfortran.dg/transpose_optimization_2.f90: Ditto.
      
      From-SVN: r271057
      Paul Thomas committed
    • re PR tree-optimization/88709 (Improve store-merging) · e965aaf6
      	PR tree-optimization/88709
      	PR tree-optimization/90271
      	* gcc.dg/store_merging_29.c: Allow 4 stores to replace 6 stores on
      	arm*-*-*.
      
      From-SVN: r271056
      Jakub Jelinek committed
    • re PR pch/90326 (Using any precompiled header breaks definition of FLT_MAX) · 8a6c4d31
      	PR pch/90326
      cp/
      	* config-lang.in (gtfiles): Remove c-family/c-lex.c, add
      	c-family/c-cppbuiltin.c.
      objc/
      	* config-lang.in (gtfiles): Add c-family/c-format.c.
      objcp/
      	* config-lang.in (gtfiles): Don't add c-family/c-cppbuiltin.c.
      testsuite/
      	* g++.dg/pch/pr90326.C: New test.
      	* g++.dg/pch/pr90326.Hs: New file.
      
      From-SVN: r271055
      Jakub Jelinek committed
    • Reapply r269790 which was missed during rebase. · ecd71fee
      2019-05-10  Martin Liska  <mliska@suse.cz>
      
      	* config/i386/i386-expand.c (ix86_expand_floorceildf_32):
      	Reapply changes from r269790.
      
      From-SVN: r271054
      Martin Liska committed
    • Add params for jump-table expansion params (PR middle-end/90340). · 26f36b50
      2019-05-10  Martin Liska  <mliska@suse.cz>
      
      	PR middle-end/90340
      	* doc/invoke.texi: New params.
      	* params.def (PARAM_JUMP_TABLE_MAX_GROWTH_RATIO_FOR_SIZE): New.
      	(PARAM_JUMP_TABLE_MAX_GROWTH_RATIO_FOR_SPEED): Likewise.
      	* tree-switch-conversion.c (jump_table_cluster::can_be_handled):
      	Use it.
      	* tree-switch-conversion.h (struct jump_table_cluster):
      	Likewise.
      2019-05-10  Martin Liska  <mliska@suse.cz>
      
      	PR middle-end/90340
      	* gcc.dg/tree-ssa/pr90340-2.c: New test.
      	* gcc.dg/tree-ssa/pr90340.c: New test.
      
      From-SVN: r271053
      Martin Liska committed
    • Fix location where lto-dump is installed. · 38613b9b
      2019-05-10  Martin Liska  <mliska@suse.cz>
      
      	* Make-lang.in: Use program_transform_name for lto-dump.
      	* config-lang.in: Do not mark lto-dump compiler as we don't
      	want to have it installed at
      	lib/gcc/x86_64-pc-linux-gnu/10.0.0/lto-dump.
      
      From-SVN: r271052
      Martin Liska committed
    • Daily bump. · 44226181
      From-SVN: r271051
      GCC Administrator committed
    • combine: Don't generate IF_THEN_ELSE · ddbb5da5
      On all targets I managed to test (21) this results in better code.  Only
      alpha ends up with slightly bigger code.
      
      
      	* combine.c (combine_simplify_rtx): Don't make IF_THEN_ELSE RTL.
      
      From-SVN: r271047
      Segher Boessenkool committed
  2. 09 May, 2019 15 commits
    • * de.po, fr.po: Update. · bd0ea08e
      From-SVN: r271045
      Joseph Myers committed
    • compiler: avoid copy for string([]byte) conversion used in map keys · 87436805
          
          If a string([]byte) conversion is used immediately as a key for a
          map read, we don't need to copy the backing store of the byte
          slice, as mapaccess does not keep a reference to it.
          
          The gc compiler does more than this: it also avoids the copy if
          the map key is a composite literal that contains the conversion
          as a field, like, T{ ... { ..., string(b), ... }, ... }. For now,
          we just optimize the simple case, which is probably most common.
          
          Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/176197
      
      	* go.dg/mapstring.go: New test.
      
      From-SVN: r271044
      Cherry Zhang committed
    • loop.texi: Remove reference to FOR_EACH_LOOP_BREAK. · 08e113f4
      2019-05-09  Bill Schmidt  <wschmidt@linux.ibm.com>
      
      	* doc/loop.texi: Remove reference to FOR_EACH_LOOP_BREAK.
      
      From-SVN: r271042
      Bill Schmidt committed
    • sel-sched: allow negative insn priority (PR 88879) · 41a4d475
      	PR rtl-optimization/88879
      	* sel-sched.c (sel_target_adjust_priority): Remove assert.
      
      From-SVN: r271039
      Alexander Monakov committed
    • [arm] PR target/90405 New test. · bf822e19
      This time really add the test.
      
      gcc/testsuite:
              PR target/90405
              * gcc.target/arm/pr90405.c: New test.
      
      From-SVN: r271037
      Richard Earnshaw committed
    • [arm] PR target/90405 fix regression for thumb1 with -mtpcs-leaf-frame · 4456525c
      -mtpcs-leaf-frame causes an APCS-style backtrace frame to be created
      on the stack.  This should probably be deprecated, but it did reveal
      an issue with the patch I committed previously to improve the code
      generation when pushing high registers, in that
      thumb_find_work_register had a different idea as to which registers
      were available as scratch registers.
      
      The new code actually does a better job of finding a viable work
      register and doesn't rely so much on assumptions about the ABI, so it
      seems better to adapt thumb_find_work_register to the new approach.
      This way we can eliminate some rather crufty code.
      
      gcc:
      	PR target/90405
      	* config/arm/arm.c (callee_saved_reg_p): Move before
      	thumb_find_work_register.
      	(thumb1_prologue_unused_call_clobbered_lo_regs): Move before
      	thumb_find_work_register.  Only call df_get_live_out once.
      	(thumb1_epilogue_unused_call_clobbered_lo_regs): Likewise.
      	(thumb_find_work_register): Use
      	thumb1_prologue_unused_call_clobbered_lo_regs instead of ad hoc
      	algorithms to locate a spare call clobbered reg.
      
      gcc/testsuite:
      	PR target/90405
      	* gcc.target/arm/pr90405.c: New test.
      
      From-SVN: r271036
      Richard Earnshaw committed
    • Support {MIN,MAX}_EXPR in GIMPLE FE. · fd4485aa
      2019-05-09  Martin Liska  <mliska@suse.cz>
      
      	* gimple-pretty-print.c (dump_binary_rhs): Dump MIN_EXPR
      	and MAX_EXPR in GIMPLE FE format.
      2019-05-09  Martin Liska  <mliska@suse.cz>
      
      	* gimple-parser.c (c_parser_gimple_statement): Support __MIN and
      	__MAX.
      	(c_parser_gimple_unary_expression): Parse also binary expression
      	__MIN and __MAX.
      	(c_parser_gimple_parentized_binary_expression): New function.
      2019-05-09  Martin Liska  <mliska@suse.cz>
      
      	* gcc.dg/gimplefe-39.c: New test.
      
      From-SVN: r271035
      Martin Liska committed
    • Support profile (BB counts and edge probabilities) in GIMPLE FE. · d276406a
      2019-05-09  Martin Liska  <mliska@suse.cz>
      
      	* tree-cfg.c (dump_function_to_file): Dump entry BB count.
      	* gimple-pretty-print.c (dump_gimple_bb_header):
      	Dump BB count.
      	(pp_cfg_jump): Dump edge probability.
      	* profile-count.c (profile_quality_as_string): Simplify
      	with a static array.
      	(parse_profile_quality): New function.
      	(profile_count::dump): Simplify with a static array.
      	(profile_count::from_gcov_type): Add new argument.
      	* profile-count.h (parse_profile_quality): Likewise.
      	* predict.h (set_hot_bb_threshold): New.
      	* params.def (PARAM_GIMPLE_FE_COMPUTED_HOT_BB_THRESHOLD):
      	New param.
      	* predict.c (get_hot_bb_threshold): Set from the new param.
      	(set_hot_bb_threshold): New.
      2019-05-09  Martin Liska  <mliska@suse.cz>
      
      	* gimple-parser.c (struct gimple_parser): Add probability.
      	for gimple_parser_edge.
      	(gimple_parser::push_edge): Add new argument probability.
      	(c_parser_gimple_parse_bb_spec): Parse also probability
      	if present.
      	(c_parser_parse_gimple_body): Set edge probability.
      	(c_parser_gimple_compound_statement): Consume token
      	before calling c_parser_gimple_goto_stmt.
      	Parse BB counts.
      	(c_parser_gimple_statement): Pass new argument.
      	(c_parser_gimple_goto_stmt): Likewise.
      	(c_parser_gimple_if_stmt): Likewise.
      	(c_parser_gimple_or_rtl_pass_list): Parse hot_bb_threshold.
      	* c-parser.c (c_parser_declaration_or_fndef): Pass
      	hot_bb_threshold argument.
      	* c-tree.h (struct c_declspecs): Add hot_bb_threshold
      	field.
      	(c_parser_gimple_parse_bb_spec_edge_probability): New.
      2019-05-09  Martin Liska  <mliska@suse.cz>
      
      	* gcc.dg/gimplefe-37.c: New test.
      	* gcc.dg/gimplefe-33.c: Likewise.
      
      From-SVN: r271034
      Martin Liska committed
    • 2019-05-09 Paolo Carlini <paolo.carlini@oracle.com> · 555dbc42
            * Fix last ChangeLog entry.
      
      From-SVN: r271033
      Paolo Carlini committed
    • re PR preprocessor/90382 (ICE in linemap_macro_map_loc_to_exp_point, at libcpp/line-map.c:1061) · 1ccebd3f
      /cp
      2019-05-09  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/90382
      	Revert:
      	2018-04-26  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	* decl.c (grokdeclarator): Fix value assigned to typespec_loc, use
      	min_location.
      
      /testsuite
      2019-05-09  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/90382
      	2018-04-26  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	* g++.dg/diagnostic/trailing1.C: New.
      
      From-SVN: r271032
      Paolo Carlini committed
    • re PR tree-optimization/90395 (ICE: verify_flow_info failed (error: BB 2 cannot… · 362e280d
      re PR tree-optimization/90395 (ICE: verify_flow_info failed (error: BB 2 cannot throw but has an EH edge))
      
      2019-05-09  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/90395
      	* tree-ssa-forwprop.c (pass_forwprop::execute): Do not
      	rewrite vector stores that throw internally.
      
      	* gcc.dg/torture/pr90395.c: New testcase.
      
      From-SVN: r271031
      Richard Biener committed
    • Clean up MPX-related stuff: CIF_CHKP · 8de916aa
      ..., which was forgotten in recent r268844.
      
      	gcc/
      	* cif-code.def (CHKP): Remove.
      
      From-SVN: r271029
      Thomas Schwinge committed
    • [PR89221] Continue to default to '--disable-frame-pointer' for x86 GNU systems · 7d48b7ad
      The recent trunk r270914 for PR89221 "--enable-frame-pointer does not work as
      intended" fixed a scripting defect in the x86 '--enable-frame-pointer'
      handling.
      
      This has the side effect that, for example, for '--target=i686-gnu' this is now
      enabled by default: 'USE_IX86_FRAME_POINTER=1' is added to 'tm_defines'.  Given
      that it's highly unlikely that anyone would now suddenly want
      '--enable-frame-pointer' as the default for any kind of GNU system, I'm
      changing the default back for GNU systems, to match that of a 'target_os' of
      'linux* | darwin[8912]*'.
      
      	gcc/
      	PR target/89221
      	* configure.ac (--enable-frame-pointer): Disable by default for
      	GNU systems.
      	* configure: Regenerate.
      
      From-SVN: r271028
      Thomas Schwinge committed
    • stl_deque.h (operator==(const _Deque_iterator<>&, const _Deque_iterator<>&)): Make hidden friend. · b2536b7c
      2019-05-09  François Dumont  <fdumont@gcc.gnu.org>
      
      	* include/bits/stl_deque.h
      	(operator==(const _Deque_iterator<>&, const _Deque_iterator<>&)):
      	Make hidden friend.
      	(operator!=(const _Deque_iterator<>&, const _Deque_iterator<>&)):
      	Likewise.
      	(operator<(const _Deque_iterator<>&, const _Deque_iterator<>&)):
      	Likewise.
      	(operator<=(const _Deque_iterator<>&, const _Deque_iterator<>&)):
      	Likewise.
      	(operator>(const _Deque_iterator<>&, const _Deque_iterator<>&)):
      	Likewise.
      	(operator>=(const _Deque_iterator<>&, const _Deque_iterator<>&)):
      	Likewise.
      	(_Deque_iterator<>::operator+(difference_type)): Likewise and allow NRVO
      	copy elision.
      	(_Deque_iterator<>::operator-(difference_type)): Likewise.
      
      From-SVN: r271027
      François Dumont committed
    • Daily bump. · 20a7c51d
      From-SVN: r271026
      GCC Administrator committed
  3. 08 May, 2019 17 commits
    • [RS6000] PR89271, gcc.target/powerpc/vsx-simode2.c · 20d70cd2
      This patch makes a number of corrections to rs6000_register_move_cost,
      adds a new register union class, GEN_OR_VSX_REGS, and adjusts insn
      alternative costs to suit.
      
      The patch initially just corrected register move cost when direct
      moves are available, but that resulted in regressions.  Inspection of
      those regressions showed ALL_REGS being used as the register allocno
      class, which isn't ideal.  gcc/doc/tm.texi says: "You should define a
      class for the union of two classes whenever some instruction allows
      both classes".  Thus, define GEN_OR_VSX_REGS for the register
      allocator.  (IRA wants to use the union of two register classes when
      the costs of the classes are below memory cost, which happens more
      often with the low direct move cost.)
      
      As per https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89271#c11 we ought
      to be returning the minimal cost for union classes.  That can be done
      by rs6000_register_move_cost testing for vsx first, where the number
      of regs for a given mode might be smaller than the same mode in gprs,
      and changing the LINK_OR_CTR_REGS case to exclude SPEC_OR_GEN_REGS and
      NON_FLOAT_REGS.
      
      I removed the VECTOR_MEM_VSX_P test since that leads to silly results
      for scalar mode moves between altivec and float when TARGET_VSX.  eg.
      rs6000_register_move_cost:, ret=2, mode=DF, from=FLOAT_REGS, to=FLOAT_REGS
      rs6000_register_move_cost:, ret=16, mode=DF, from=FLOAT_REGS, to=ALTIVEC_REGS
      rs6000_register_move_cost:, ret=2, mode=DF, from=FLOAT_REGS, to=VSX_REGS
      
      The patch also fixes wrong results for moves within and between any of
      the non-gpr, non-vsx special reg classes.  The comment about "moving
      between two similar registers is just one instruction" is false.  We
      can't move lr to ctr directly, for example.  I believe the intent of
      the "reg_classes_intersect_p (to, from)" was to cover moves within
      float or altivec, so I moved that test inside the code handling vsx,
      and made sure the intersection wasn't anything besides vsx by masking
      off everything else.  Masking isn't strictly necessary at the moment,
      but would be if we create a GEN_OR_ALTIVEC_REGS class some time in the
      future.
      
      TARGET_IRA_CHANGE_PSEUDO_ALLOCNO_CLASS is needed for rs6000 in order
      to fix the 20% cactus_adm spec regression when using GEN_OR_VSX_REGS
      as an allocno class.  It is similar to the aarch64 version but without
      any selection by regno mode if the best class is a union class.
      
      	PR target/89271
      	* config/rs6000/rs6000.h (enum reg_class, REG_CLASS_NAMES),
      	(REG_CLASS_CONTENTS): Add GEN_OR_VSX_REGS class.
      	* config/rs6000/rs6000.c (rs6000_register_move_cost): Correct
      	cost for general <-> vsx when direct moves are available.
      	Cost union classes at minimal cost for any reg in the class.
      	Correct calculation for moves between vsx, float, and altivec.
      	Don't return a low cost for moves between special regs.  Don't
      	use hard coded register numbers.
      	(TARGET_IRA_CHANGE_PSEUDO_ALLOCNO_CLASS): Define.
      	(rs6000_ira_change_pseudo_allocno_class): New function.
      	* config/rs6000/rs6000.md (movsi_internal1, mov<mode>_internal),
      	(movdi_internal32, movdi_internal64): Remove '*' from vsx register
      	alternatives.
      	(movsi_internal1): Don't disparage vector alternatives.
      	(mov<mode>_internal): Likewise, excepting alternative that
      	will be split.
      	* config/rs6000/vsx.md (vsx_splat_<mode>_reg): Don't disparage
      	we <- b alternative.
      
      From-SVN: r271022
      Alan Modra committed
    • compiler: avoid copy for string([]byte) conversion used in string comparison · 3407d165
          
          If a string([]byte) conversion is used immediately in a string
          comparison, we don't need to copy the backing store of the byte
          slice, as the string comparison doesn't hold any reference to
          it. Instead, just create a string header from the byte slice and
          pass it for comparison.
          
          A new type of expression, String_value_expression, is introduced,
          for constructing string headers.
          
          Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/170894
      
      	* go.dg/cmpstring.go: New test.
      
      From-SVN: r271021
      Cherry Zhang committed
    • re PR fortran/90351 (-fc-prototypes does not dump prototypes for external procedures) · 6328ce1f
      2019-05-08  Thomas Koenig  <tkoenig@gcc.gnu.org>
      
          PR fortran/90351
          PR fortran/90329
          * gfortran.dg/dump-parse-tree.c: Include version.h.
          (gfc_dump_external_c_prototypes): New function.
          (get_c_type_name): Select "char" as a name for a simple char.
          Adjust to handling external functions. Also handle complex.
          (write_decl): Add argument bind_c. Adjust for dumping of external
          procedures.
          (write_proc): Likewise.
          (write_interop_decl): Add bind_c argument to call of write_proc.
          * gfortran.h: Add prototype for gfc_dump_external_c_prototypes.
          * lang.opt: Add -fc-prototypes-external flag.
          * parse.c (gfc_parse_file): Move dumping of BIND(C) prototypes.
          Call gfc_dump_external_c_prototypes if option is set.
          * invoke.texi: Document -fc-prototypes-external.
      
      From-SVN: r271018
      Thomas Koenig committed
    • compiler: generate memmove for non-pointer slice copy · 8ba2bda8
          
          The builtin copy function is lowered to runtime functions
          slicecopy, stringslicecopy, or typedslicecopy. The first two are
          basically thin wrappers of memmove. Instead of making a runtime
          call, we can just use __builtin_memmove. This gives the compiler
          backend opportunities for further optimizations.
          
          Move the lowering of builtin copy function to flatten phase for
          the ease of rewriting.
          
          Also do this optimization for the copy part of append(s1, s2...).
          
          Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/170005
      
      From-SVN: r271017
      Ian Lance Taylor committed
    • runtime: use builtin memmove directly · fbe4e644
          
          We can use the intrinsic memmove directly, without going through
          C.
          
          Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/170004
      
      	* go-gcc.cc (Gcc_backend::Gcc_backend): Define memmove builtin.
      
      From-SVN: r271016
      Cherry Zhang committed
    • [C++ PATCH] Kill DECL_SAVED_FUNCTION_DATA · 5345ac5a
      https://gcc.gnu.org/ml/gcc-patches/2019-05/msg00377.html
      	Kill DECL_SAVED_FUNCTION_DATA .
      	* cp-tree.h (language_function): Remove x_auto_return_pattern.
      	(current_function_auto_return_pattern): Delete.
      	(lang_decl_fn): Replace saved_language_function with
      	saved_auto_return type.
      	(DECL_SAVED_FUNCTION_DATA): Delete.
      	(DECL_SAVED_AUTO_RETURN_TYPE): New.
      	(FNDECL_USED_AUTO): Correct documentation.
      	* decl.c (duplicate_decls): Adjust AUTO return handling.
      	(start_preparsed_function): Replace
      	current_function_auto_return_pattern with
      	DECL_SAVED_AUTO_RETURN_TYPE.  Remove DECL_SAVED_FUNCTION_DATA
      	zapping.
      	(finish_function): Likewise.
      	(save_function_data): Delete.
      	(fndecl_declared_return_type): Reimplement.
      	* mangle.c (write_unqualified_name): Use DECL_SAVED_AUTO_RETURN_TYPE.
      	* method.c (make_thunk, make_alias_for): Likewise.
      	* parser.c (cp_parser_jump_statement): Likewise.
      	* pt.c (do_auto_deduction): Likewise.
      	* typeck.c (check_return_expr): Likewise.
      
      From-SVN: r271015
      Nathan Sidwell committed
    • re PR c++/59813 (tail-call elimination didn't fire for left-shift of char to cout) · ab87ac8d
      	PR c++/59813
      	PR tree-optimization/89060
      	* tree-ssa-live.h (live_vars_map): New typedef.
      	(compute_live_vars, live_vars_at_stmt, destroy_live_vars): Declare.
      	* tree-ssa-live.c: Include gimple-walk.h and cfganal.h.
      	(struct compute_live_vars_data): New type.
      	(compute_live_vars_visit, compute_live_vars_1, compute_live_vars,
      	live_vars_at_stmt, destroy_live_vars): New functions.
      	* tree-tailcall.c: Include tree-ssa-live.h.
      	(live_vars, live_vars_vec): New global variables.
      	(find_tail_calls): Perform variable life analysis before punting.
      	(tree_optimize_tail_calls_1): Clean up live_vars and live_vars_vec.
      	* tree-inline.h (struct copy_body_data): Add eh_landing_pad_dest
      	member.
      	* tree-inline.c (add_clobbers_to_eh_landing_pad): Remove BB argument.
      	Perform variable life analysis to select variables that really need
      	clobbers added.
      	(copy_edges_for_bb): Don't call add_clobbers_to_eh_landing_pad here,
      	instead set id->eh_landing_pad_dest and assert it is the same.
      	(copy_cfg_body): Call it here if id->eh_landing_pad_dest is non-NULL.
      
      	* gcc.dg/tree-ssa/pr89060.c: New test.
      
      From-SVN: r271013
      Jakub Jelinek committed
    • [arm][PR88167] Fix __builtin_return_address returns invalid address · 69708e0a
      This patch fixes a problem with the thumb1 prologue code where the link
      register could be unconditionally used as a scratch register even if the
      return value was still live at the end of the prologue.
      
      Additionally, the patch improves the code generated when we are not
      using many low call-saved registers to make use of any unused call
      clobbered registers to help with the saving of high registers that
      cannot be pushed directly (quite rare in normal code as the register
      allocator correctly prefers low registers).
      
      2019-05-08  Mihail Ionescu  <mihail.ionescu@arm.com>
      	    Richard Earnshaw  <rearnsha@arm.com>
      
      gcc:
      
      	PR target/88167
      	* config/arm/arm.c (thumb1_prologue_unused_call_clobbered_lo_regs): New
      	function.
      	(thumb1_epilogue_unused_call_clobbered_lo_regs): New function.
      	(thumb1_compute_save_core_reg_mask): Don't force a spare work
      	register if both the epilogue and prologue can use call-clobbered
      	regs.
      	(thumb1_unexpanded_epilogue): Use
      	thumb1_epilogue_unused_call_clobbered_lo_regs.  Reverse the logic for
      	picking temporaries for restoring high regs to match that of the
      	prologue where possible.
      	(thumb1_expand_prologue): Add any usable call-clobbered low registers to
      	the list of work registers.  Detect if the return address is still live
      	at the end of the prologue and avoid using it for a work register if so.
      	If the return address is not live, add LR to the list of pushable regs
      	after the first pass.
      
      gcc/testsuite:
      
      	PR target/88167
      	* gcc.target/arm/pr88167-1.c: New test.
      	* gcc.target/arm/pr88167-2.c: New test.
      
      
      Co-Authored-By: Richard Earnshaw <rearnsha@arm.com>
      
      From-SVN: r271012
      Mihail Ionescu committed
    • re PR libstdc++/90277 (Debug Mode test failures) · 857c7202
      2019-05-08  François Dumont  <fdumont@gcc.gnu.org>
      
      	PR libstdc++/90277
      	* testsuite/23_containers/unordered_multiset/insert/24061-multiset.cc
      	(test01): Reserve for number of insertions to avoid rehash during test.
      	* testsuite/23_containers/unordered_multimap/insert/24061-multimap.cc
      	(test01): Likewise.
      	* testsuite/23_containers/unordered_multimap/insert/24061-multimap.cc
      	(test01): Likewise.
      	(test02): Likewise.
      	(test03): Likewise.
      
      From-SVN: r271011
      François Dumont committed
    • re PR tree-optimization/90078 (ICE with deep templates caused by overflow) · 8363a2f1
      	PR tree-optimization/90078
      	* tree-ssa-loop-ivopts.c (INFTY): Increase value for infinite cost.
      	(struct comp_cost): Promote type of members to int64_t.
      	(infinite_cost): Don't set complexity in initialization.
      	(comp_cost::operator +,-,+=,-+,/=,*=): Assert when cost computation
      	overflows to infinite_cost.
      	(adjust_setup_cost): Promote type of parameter and cost computation
      	to int64_t.
      	(struct ainc_cost_data, struct iv_ca): Promote type of member to
      	int64_t.
      	(get_scaled_computation_cost_at, determine_iv_cost): Promote type of
      	cost computation to int64_t.
      	(determine_group_iv_costs, iv_ca_dump, find_optimal_iv_set): Use
      	int64_t's format specifier in dump.
      
      	gcc/testsuite
      	* g++.dg/tree-ssa/pr90078.C: New test.
      
      From-SVN: r271008
      Bin Cheng committed
    • re PR tree-optimization/90240 (ICE in try_improve_iv_set, at tree-ssa-loop-ivopts.c:6694) · 98d8f142
      	PR tree-optimization/90240
      	* tree-ssa-loop-ivopts.c (get_scaled_computation_cost_at): Scale cost
      	with respect to scaling factor pre-computed for each basic block.
      	(try_improve_iv_set): Return bool if best_cost equals to iv_ca cost.
      	(find_optimal_iv_set_1): Free iv_ca set if it has infinite_cost.
      	(COST_SCALING_FACTOR_BOUND, determine_scaling_factor): New.
      	(tree_ssa_iv_optimize_loop): Call determine_scaling_factor.  Extend
      	live range for array of loop's basic blocks.  Cleanup aux field of
      	loop's basic blocks.
      
      	gcc/testsuite
      	* gfortran.dg/graphite/pr90240.f: New test.
      
      From-SVN: r271007
      Bin Cheng committed
    • Enable support for bfloat16 which will be in Future Cooper Lake. · 4f0e90fa
      There are 3 instructions for AVX512BF16: VCVTNE2PS2BF16, VCVTNEPS2BF16 and
      DPBF16PS instructions, which are Vector Neural Network Instructions
      supporting:
          
      - VCVTNE2PS2BF16: Convert Two Packed Single Data to One Packed BF16 Data.
      - VCVTNEPS2BF16: Convert Packed Single Data to Packed BF16 Data.
      - VDPBF16PS: Dot Product of BF16 Pairs Accumulated into Packed Single Precision.
      
      2019-05-07  Wei Xiao  <wei3.xiao@intel.com>
      
      	* common/config/i386/i386-common.c (OPTION_MASK_ISA_AVX512BF16_SET
      	OPTION_MASK_ISA_AVX512BF16_UNSET, OPTION_MASK_ISA2_AVX512BW_UNSET): New.
      	(OPTION_MASK_ISA2_AVX512F_UNSET): Add OPTION_MASK_ISA_AVX512BF16_UNSET.
      	(ix86_handle_option): Handle -mavx512bf16.
      	* config.gcc: Add avx512bf16vlintrin.h and avx512bf16intrin.h
      	to extra_headers.
      	* config/i386/avx512bf16vlintrin.h: New.
      	* config/i386/avx512bf16intrin.h: New.
      	* config/i386/cpuid.h (bit_AVX512BF16): New.
      	* config/i386/driver-i386.c (host_detect_local_cpu): Detect BF16.
      	* config/i386/i386-builtin-types.def: Add new types.
      	* config/i386/i386-builtin.def: Add new builtins.
      	* config/i386/i386-c.c (ix86_target_macros_internal): Define
      	__AVX512BF16__.
      	* config/i386/i386-option.c (ix86_target_string): Add -mavx512bf16.
      	(ix86_option_override_internal): Handle BF16.
      	(ix86_valid_target_attribute_inner_p): Ditto.
      	* config/i386/i386-expand.c (ix86_expand_args_builtin): Ditto.
      	* config/i386/i386-builtin.c (enum processor_features): Add
      	F_AVX512BF16.
      	(static const _isa_names_table isa_names_table): Ditto.
      	* config/i386/i386.h (TARGET_AVX512BF16, TARGET_AVX512BF16_P): New.
      	(PTA_AVX512BF16): Ditto.
      	* config/i386/i386.opt: Add -mavx512bf16.
      	* config/i386/immintrin.h: Include avx512bf16intrin.h
      	and avx512bf16vlintrin.h.
      	* config/i386/sse.md (avx512f_cvtne2ps2bf16_<mode><mask_name>,
      	avx512f_cvtneps2bf16_<mode><mask_name>,
      	avx512f_dpbf16ps_<mode><mask_half_name>): New define_insn patterns.
      	* config/i386/subst.md (mask_half): Add new subst.
      	* doc/invoke.texi: Document -mavx512bf16.
      
      2019-05-07  Wei Xiao  <wei3.xiao@intel.com>
      
      	* gcc.target/i386/avx512bf16-vcvtne2ps2bf16-1.c: New test.
      	* gcc.target/i386/avx512bf16-vcvtneps2bf16-1.c: New test.
      	* gcc.target/i386/avx512bf16-vdpbf16ps-1.c: New test.
      	* gcc.target/i386/avx512bf16vl-vcvtne2ps2bf16-1.c: New test.
      	* gcc.target/i386/avx512bf16vl-vcvtneps2bf16-1.c: New test.
      	* gcc.target/i386/avx512bf16vl-vdpbf16ps-1.c: New test.
      	* gcc.target/i386/builtin_target.c: Handle avx512bf16.
      	* gcc.target/i386/sse-12.c: Add -mavx512bf16.
      	* gcc.target/i386/sse-13.c: Ditto.
      	* gcc.target/i386/sse-14.c: Ditto.
      	* gcc.target/i386/sse-22.c: Ditto.
      	* gcc.target/i386/sse-23.c: Ditto.
      	* g++.dg/other/i386-2.C: Ditto.
      	* g++.dg/other/i386-3.C: Ditto.
      
      2019-05-07  Hongtao Liu  <hongtao.liu@intel.com>
      
      	* config/i386/cpuinfo.c (get_available_features): Detect BF16.
      	* config/i386/cpuinfo.h (enum processor_features): Add
      	FEATURE_AVX512BF16.
      
      From-SVN: r271006
      Hongtao Liu committed
    • Address compiler diagnostics in libgomp.oacc-c-c++-common/pr87835.c · da2d30c1
          source-gcc/libgomp/testsuite/libgomp.oacc-c-c++-common/pr87835.c: In function 'main':
          source-gcc/libgomp/testsuite/libgomp.oacc-c-c++-common/pr87835.c:45: warning: ignoring #pragma loop gang [-Wunknown-pragmas]
             45 |     #pragma loop gang
                |
          source-gcc/libgomp/testsuite/libgomp.oacc-c-c++-common/pr87835.c:19:7: warning: unused variable 'b' [-Wunused-variable]
             19 |   int b[n];
                |       ^
      
      	libgomp/
      	PR target/87835
      	* testsuite/libgomp.oacc-c-c++-common/pr87835.c: Update.
      
      From-SVN: r271004
      Thomas Schwinge committed
    • * standard.ads.h: New file. · 1927f640
      From-SVN: r271003
      Arnaud Charlet committed
    • re PR other/90381 (New test case gcc.dg/tree-ssa/pr88676-2.c fails with its… · d486dbfb
      re PR other/90381 (New test case gcc.dg/tree-ssa/pr88676-2.c fails with its introduction in r270934)
      
      	PR other/90381
      	* gcc.dg/tree-ssa/pr88676-2.c: Add 'target le' option to limit the
      	test case to run on the little endian machine.
      
      From-SVN: r271002
      Li Jia He committed