1. 09 Feb, 2018 5 commits
    • re PR c++/83659 (ICE on compilable C++ code: in tree_to_shwi, at tree.c:6821) · ebe4bf41
      	PR c++/83659
      	* fold-const.c (fold_indirect_ref_1): Use VECTOR_TYPE_P macro.
      	Formatting fixes.  Verify first that tree_fits_poly_int64_p (op01).
      	Sync some changes from cxx_fold_indirect_ref.
      
      	* constexpr.c (cxx_fold_indirect_ref): Sync some changes from
      	fold_indirect_ref_1, including poly_*int64.  Verify first that
      	tree_fits_poly_int64_p (op01).  Formatting fixes.
      
      	* g++.dg/torture/pr83659.C: New test.
      
      Co-Authored-By: Jakub Jelinek <jakub@redhat.com>
      
      From-SVN: r257512
      Marek Polacek committed
    • [IEPM] Introduce inline entry point markers · 58006663
      Output DW_AT_entry_pc based on markers.
      
      Introduce DW_AT_GNU_entry_view as a DWARF extension.
      
      If views are enabled are we're not in strict compliance mode, output
      DW_AT_GNU_entry_view if it might be nonzero.
      
      This patch depends on SFN and LVU patchsets, and on the IEPM patch that
      introduces the inline_entry debug hook.
      
      for  include/ChangeLog
      
      	* dwarf2.def (DW_AT_GNU_entry_view): New.
      
      for  gcc/ChangeLog
      
      	* cfgexpand.c (expand_gimple_basic_block): Handle inline entry
      	markers.
      	* dwarf2out.c (dwarf2_debug_hooks): Enable inline_entry hook.
      	(BLOCK_INLINE_ENTRY_LABEL): New.
      	(dwarf2out_var_location): Disregard inline entry markers.
      	(inline_entry_data): New struct.
      	(inline_entry_data_hasher): New hashtable type.
      	(inline_entry_data_hasher::hash): New.
      	(inline_entry_data_hasher::equal): New.
      	(inline_entry_data_table): New variable.
      	(add_high_low_attributes): Add DW_AT_entry_pc and
      	DW_AT_GNU_entry_view attributes if a pending entry is found
      	in inline_entry_data_table.  Add old entry_pc attribute only
      	if debug nonbinding markers are disabled.
      	(gen_inlined_subroutine_die): Set BLOCK_DIE if nonbinding
      	markers are enabled.
      	(block_within_block_p, dwarf2out_inline_entry): New.
      	(dwarf2out_finish): Check that no entries remained in
      	inline_entry_data_table.
      	* final.c (reemit_insn_block_notes): Handle inline entry notes.
      	(final_scan_insn, notice_source_line): Likewise.
      	(rest_of_clean_state): Skip inline entry markers.
      	* gimple-pretty-print.c (dump_gimple_debug): Handle inline entry
      	markers.
      	* gimple.c (gimple_build_debug_inline_entry): New.
      	* gimple.h (enum gimple_debug_subcode): Add
      	GIMPLE_DEBUG_INLINE_ENTRY.
      	(gimple_build_debug_inline_entry): Declare.
      	(gimple_debug_inline_entry_p): New.
      	(gimple_debug_nonbind_marker_p): Adjust.
      	* insn-notes.def (INLINE_ENTRY): New.
      	* print-rtl.c (rtx_writer::print_rtx_operand_code_0): Handle
      	inline entry marker notes.
      	(print_insn): Likewise.
      	* rtl.h	(NOTE_MARKER_P): Add INLINE_ENTRY support.
      	(INSN_DEBUG_MARKER_KIND): Likewise.
      	(GEN_RTX_DEBUG_MARKER_INLINE_ENTRY_PAT): New.
      	* tree-inline.c	(expand_call_inline): Build and insert
      	debug_inline_entry stmt.
      	* tree-ssa-live.c (remove_unused_scope_block_p): Preserve
      	inline entry blocks early, if nonbind markers are enabled.
      	(dump_scope_block): Dump fragment info.
      	* var-tracking.c (reemit_marker_as_note): Handle inline entry note.
      	* doc/gimple.texi (gimple_debug_inline_entry_p): New.
      	(gimple_build_debug_inline_entry): New.
      	* doc/invoke.texi (gstatement-frontiers, gno-statement-frontiers):
      	Enable/disable inline entry points too.
      	* doc/rtl.texi (NOTE_INSN_INLINE_ENTRY): New.
      	(DEBUG_INSN): Describe inline entry markers.
      
      From-SVN: r257511
      Alexandre Oliva committed
    • [LVU] Introduce location views · bd2b9f1e
      This patch introduces an option to enable the generation of location
      views along with location lists.  The exact format depends on the
      DWARF version: it can be a separate attribute (DW_AT_GNU_locviews) or
      (DW_LLE_view_pair) entries in DWARF5+ loclists.
      
      Line number tables are also affected.  If the assembler is found, at
      compiler build time, to support .loc views, we use them and
      assembler-computed view labels, otherwise we output compiler-generated
      line number programs with conservatively-computed view labels.  In
      either case, we output view information next to line number changes
      when verbose assembly output is requested.
      
      This patch requires an LVU patch that modifies the exported API of
      final_scan_insn.  It also expects the entire SFN patchset to be
      installed first, although SFN is not a requirement for LVU.
      
      for  include/ChangeLog
      
      	* dwarf2.def (DW_AT_GNU_locviews): New.
      	* dwarf2.h (enum dwarf_location_list_entry_type): Add
      	DW_LLE_GNU_view_pair.
      	(DW_LLE_view_pair): Define.
      
      for  gcc/ChangeLog
      
      	* common.opt (gvariable-location-views): New.
      	(gvariable-location-views=incompat5): New.
      	* config.in: Rebuilt.
      	* configure: Rebuilt.
      	* configure.ac: Test assembler for view support.
      	* dwarf2asm.c (dw2_asm_output_symname_uleb128): New.
      	* dwarf2asm.h (dw2_asm_output_symname_uleb128): Declare.
      	* dwarf2out.c (var_loc_view): New typedef.
      	(struct dw_loc_list_struct): Add vl_symbol, vbegin, vend.
      	(dwarf2out_locviews_in_attribute): New.
      	(dwarf2out_locviews_in_loclist): New.
      	(dw_val_equal_p): Compare val_view_list of dw_val_class_view_lists.
      	(enum dw_line_info_opcode): Add LI_adv_address.
      	(struct dw_line_info_table): Add view.
      	(RESET_NEXT_VIEW, RESETTING_VIEW_P): New macros.
      	(DWARF2_ASM_VIEW_DEBUG_INFO): Define default.
      	(zero_view_p): New variable.
      	(ZERO_VIEW_P): New macro.
      	(output_asm_line_debug_info): New.
      	(struct var_loc_node): Add view.
      	(add_AT_view_list, AT_loc_list): New.
      	(add_var_loc_to_decl): Add view param.  Test it against last.
      	(new_loc_list): Add view params.  Record them.
      	(AT_loc_list_ptr): Handle loc and view lists.
      	(view_list_to_loc_list_val_node): New.
      	(print_dw_val): Handle dw_val_class_view_list.
      	(size_of_die): Likewise.
      	(value_format): Likewise.
      	(loc_list_has_views): New.
      	(gen_llsym): Set vl_symbol too.
      	(maybe_gen_llsym, skip_loc_list_entry): New.
      	(dwarf2out_maybe_output_loclist_view_pair): New.
      	(output_loc_list): Output view list or entries too.
      	(output_view_list_offset): New.
      	(output_die): Handle dw_val_class_view_list.
      	(output_dwarf_version): New.
      	(output_compilation_unit_header): Use it.
      	(output_skeleton_debug_sections): Likewise.
      	(output_rnglists, output_line_info): Likewise.
      	(output_pubnames, output_aranges): Update version comments.
      	(output_one_line_info_table): Output view numbers in asm comments.
      	(dw_loc_list): Determine current endview, pass it to new_loc_list.
      	Call maybe_gen_llsym.
      	(loc_list_from_tree_1): Adjust.
      	(add_AT_location_description): Create view list attribute if
      	needed, check it's absent otherwise.
      	(convert_cfa_to_fb_loc_list): Adjust.
      	(maybe_emit_file): Call output_asm_line_debug_info for test.
      	(dwarf2out_var_location): Reset views as needed.  Precompute
      	add_var_loc_to_decl args.  Call get_attr_min_length only if we have the
      	attribute.  Set view.
      	(new_line_info_table): Reset next view.
      	(set_cur_line_info_table): Call output_asm_line_debug_info for test.
      	(dwarf2out_source_line): Likewise.  Output view resets and labels to
      	the assembler, or select appropriate line info opcodes.
      	(prune_unused_types_walk_attribs): Handle dw_val_class_view_list.
      	(optimize_string_length): Catch it.  Adjust.
      	(resolve_addr): Copy vl_symbol along with ll_symbol.  Handle
      	dw_val_class_view_list, and remove it if no longer needed.
      	(hash_loc_list): Hash view numbers.
      	(loc_list_hasher::equal): Compare them.
      	(optimize_location_lists): Check whether a view list symbol is
      	needed, and whether the locview attribute is present, and
      	whether they match.  Remove the locview attribute if no longer
      	needed.
      	(index_location_lists): Call skip_loc_list_entry for test.
      	(dwarf2out_finish): Call output_asm_line_debug_info for test.
      	Use output_dwarf_version.
      	* dwarf2out.h (enum dw_val_class): Add dw_val_class_view_list.
      	(struct dw_val_node): Add val_view_list.
      	* final.c (SEEN_NEXT_VIEW): New.
      	(set_next_view_needed): New.
      	(clear_next_view_needed): New.
      	(maybe_output_next_view): New.
      	(final_start_function): Rename to...
      	(final_start_function_1): ... this.  Take pointer to FIRST,
      	add SEEN parameter.  Emit param bindings in the initial view.
      	(final_start_function): Reintroduce SEEN-less interface.
      	(final): Rename to...
      	(final_1): ... this.  Take SEEN parameter.  Output final pending
      	next view at the end.
      	(final): Reintroduce seen-less interface.
      	(final_scan_insn): Output pending next view before switching
      	sections or ending a block.  Mark the next view as needed when
      	outputting variable locations.  Notify debug backend of section
      	changes, and of location view changes.
      	(rest_of_handle_final): Adjust.
      	* toplev.c (process_options): Autodetect value for debug variable
      	location views option.  Warn on incompat5 without -gdwarf-5.
      	* doc/invoke.texi (gvariable-location-views): New.
      	(gvariable-location-views=incompat5): New.
      	(gno-variable-location-views): New.
      
      From-SVN: r257510
      Alexandre Oliva committed
    • Fix ICE in find_taken_edge_computed_goto (PR 84136) · 6d3aa24c
      PR 84136 reports an ICE within sccvn_dom_walker when handling a
      C/C++ source file that overuses the labels-as-values extension.
      The code in question stores a jump label into a global, and then
      jumps to it from another function, which ICEs after inlining:
      
      void* a;
      
      void foo() {
        if ((a = &&l))
            return;
      
        l:;
      }
      
      int main() {
        foo();
        goto *a;
      
        return 0;
      }
      
      This appears to be far beyond what we claim to support in this
      extension - but we shouldn't ICE.
      
      What's happening is that, after inlining, we have usage of a *copy*
      of the label, which optimizes away the if-return logic, turning it
      into an infinite loop.
      
      On entry to the sccvn_dom_walker we have this gimple:
      
      main ()
      {
        void * a.0_1;
      
        <bb 2> [count: 0]:
        a = &l;
      
        <bb 3> [count: 0]:
      l:
        a.0_1 = a;
        goto a.0_1;
      }
      
      and:
        edge taken = find_taken_edge (bb, vn_valueize (val));
      reasonably valueizes the:
        goto a.0_1;
      after the:
        a = &l;
        a.0_1 = a;
      as if it were:
        goto *&l;
      
      find_taken_edge_computed_goto then has:
      
      2380	  dest = label_to_block (val);
      2381	  if (dest)
      2382	    {
      2383	      e = find_edge (bb, dest);
      2384	      gcc_assert (e != NULL);
      2385	    }
      
      which locates dest as a self-jump from block 3 back to itself.
      
      However, the find_edge call returns NULL - it has a predecessor edge
      from block 2, but no successor edges.
      
      Hence the assertion fails and we ICE.
      
      A successor edge from the computed goto could have been created by
      make_edges if the label stmt had been in the function, but make_edges
      only looks in the current function when handling computed gotos, and
      the label only appeared after inlining.
      
      The following patch removes the assertion, fixing the ICE.
      
      gcc/testsuite/ChangeLog:
      	PR tree-optimization/84136
      	* gcc.c-torture/compile/pr84136.c: New test.
      
      gcc/ChangeLog:
      	PR tree-optimization/84136
      	* tree-cfg.c (find_taken_edge_computed_goto): Remove assertion
      	that the result of find_edge is non-NULL.
      
      From-SVN: r257509
      David Malcolm committed
    • Daily bump. · 7e64287b
      From-SVN: r257508
      GCC Administrator committed
  2. 08 Feb, 2018 25 commits
    • re PR target/83008 ([performance] Is it better to avoid extra instructions in… · 001e7337
      re PR target/83008 ([performance] Is it better to avoid extra instructions in data passing between loops?)
      
      	PR target/83008
      	* config/i386/x86-tune-costs.h (skylake_cost): Fix cost of
      	storing integer register in SImode.  Fix cost of 256 and 512
      	byte aligned SSE register store.
      
      	* config/i386/i386.c (ix86_multiplication_cost): Fix
      	multiplication cost for TARGET_AVX512DQ.
      
      testsuite/ChangeLog:	
      
      	PR target/83008
      	* gcc.target/i386/pr83008.c: New test.
      
      From-SVN: r257505
      Sergey Shalnov committed
    • re PR target/81143 (New test case gcc.target/powerpc/pr79799-2.c fails on powerpc BE) · 2318f3b4
      	PR target/81143
      	* gcc.target/powerpc/pr79799-2.c: Use __LITTLE_ENDIAN__.
      
      From-SVN: r257504
      Peter Bergner committed
    • constexpr.c (cxx_eval_component_reference): Use INDIRECT_REF_P. · a7f8415c
      2018-02-08  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	* constexpr.c (cxx_eval_component_reference): Use INDIRECT_REF_P.
      	* lambda.c (build_capture_proxy): Likewise.
      	* search.c (field_access_p): Likewise.
      	* semantics.c (omp_clause_decl, omp_privatize_field,
      	finish_omp_clauses): Likewise.
      
      From-SVN: r257503
      Paolo Carlini committed
    • re PR c++/83806 (Spurious -Wunused-but-set-parameter with nullptr) · 73974561
      /cp
      2018-02-08  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/83806
      	* typeck.c (decay_conversion): Use mark_rvalue_use for the special
      	case of nullptr too.
      
      /testsuite
      2018-02-08  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/83806
      	* g++.dg/warn/Wunused-parm-11.C: New.
      
      From-SVN: r257502
      Paolo Carlini committed
    • Mark previous change with: · b00dcb13
      PR target/84113
      
      From-SVN: r257500
      Mike Stump committed
    • re PR tree-optimization/84238 (ICE tree check: expected integer_cst, have… · c6ba596b
      re PR tree-optimization/84238 (ICE tree check: expected integer_cst, have plus_expr in to_wide, at tree.h:5527)
      
      	PR tree-optimization/84238
      	* tree-ssa-strlen.c (maybe_diag_stxncpy_trunc): Verify the result of
      	get_range_strlen.
      
      	* gcc.dg/Wstringop-overflow-3.c: New test.
      
      From-SVN: r257497
      Marek Polacek committed
    • [C++ PATCH] initializer_list diagnostic · a4296998
      https://gcc.gnu.org/ml/gcc-patches/2018-02/msg00434.html
      	* class.c (finish_struct): Fix std:initializer_list diagnostic
      	formatting.
      
      	* g++.dg/cpp0x/initlist93.C: Adjust diagnostic.
      
      From-SVN: r257496
      Nathan Sidwell committed
    • runtime: get missing function name from symbol table · 74e6f14a
          
          If we trace back through code that has no debug info, as when calling
          through C code compiled with -g0, we won't have a function name.
          Try to fetch the function name using the symbol table.
          
          Adding the test case revealed that gotest failed to use the gccgo tag
          when matching files, so add that.
          
          Reviewed-on: https://go-review.googlesource.com/92756
      
      From-SVN: r257495
      Ian Lance Taylor committed
    • Makefile.am (check-gccgo, check-gcc): Add options to pick up target libstdc++,… · 080eaf7a
      Makefile.am (check-gccgo, check-gcc): Add options to pick up target libstdc++, to permit tests that use C++.
      
      	* Makefile.am (check-gccgo, check-gcc): Add options to pick up
      	target libstdc++, to permit tests that use C++.
      	* Makefile.in: Rebuild.
      
      From-SVN: r257494
      Ian Lance Taylor committed
    • libgo: update to Go1.10rc2 · 9adab5dd
          
          Reviewed-on: https://go-review.googlesource.com/92736
      
      From-SVN: r257493
      Ian Lance Taylor committed
    • Another fix for single-element permutes (PR 84265) · b5ec4de7
      PR83753 was about a case in which we ended up trying to "vectorise"
      a group of loads ore stores using single-element vectors.  The problem
      was that we were classifying the load or store as VMAT_CONTIGUOUS_PERMUTE
      rather than VMAT_CONTIGUOUS, even though it doesn't make sense to permute
      a single-element vector.
      
      In that PR it was enough to change get_group_load_store_type,
      because vectorisation ended up being unprofitable and so we didn't
      take things further.  But when vectorisation is profitable, the same
      fix is needed in vectorizable_load and vectorizable_store.
      
      2018-02-08  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	PR tree-optimization/84265
      	* tree-vect-stmts.c (vectorizable_store): Don't treat
      	VMAT_CONTIGUOUS accesses as grouped.
      	(vectorizable_load): Likewise.
      
      gcc/testsuite/
      	PR tree-optimization/84265
      	* gcc.dg/vect/pr84265.c: New test.
      
      From-SVN: r257492
      Richard Sandiford committed
    • Use nonzero bits to refine range in split_constant_offset (PR 81635) · fff22900
      This patch is part 2 of the fix for PR 81635.  It means that
      split_constant_offset can handle loops like:
      
        for (unsigned int i = 0; i < n; i += 4)
          {
            a[i] = ...;
            a[i + 1] = ...;
          }
      
      CCP records that "i" must have its low 2 bits clear, but we don't
      include this information in the range of "i", which remains [0, +INF].
      I tried making set_nonzero_bits update the range info in the same
      way that set_range_info updates the nonzero bits, but it regressed
      cases like vrp117.c and made some other tests worse.
      
      vrp117.c has a multiplication by 10, so CCP can infer that the low bit
      of the result is clear.  If we included that in the range, the range
      would go from [-INF, +INF] to [-INF, not-quite-+INF].  However,
      the multiplication is also known to overflow in all cases, so VRP
      saturates the result to [INT_MAX, INT_MAX].  This obviously creates a
      contradiction with the nonzero bits, and intersecting the new saturated
      range with an existing not-quite-+INF range would make us drop to
      VR_UNDEFINED.  We're prepared to fold a comparison with an [INT_MAX,
      INT_MAX] value but not with a VR_UNDEFINED value.
      
      The other problems were created when intersecting [-INF, not-quite-+INF]
      with a useful VR_ANTI_RANGE like ~[-1, 1].  The intersection would
      keep the former range rather than the latter.
      
      The patch therefore keeps the adjustment local to split_constant_offset
      for now, but adds a helper routine so that it's easy to move this later.
      
      2018-02-08  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	PR tree-optimization/81635
      	* wide-int.h (wi::round_down_for_mask, wi::round_up_for_mask): Declare.
      	* wide-int.cc (wi::round_down_for_mask, wi::round_up_for_mask)
      	(test_round_for_mask): New functions.
      	(wide_int_cc_tests): Call test_round_for_mask.
      	* tree-vrp.h (intersect_range_with_nonzero_bits): Declare.
      	* tree-vrp.c (intersect_range_with_nonzero_bits): New function.
      	* tree-data-ref.c (split_constant_offset_1): Use it to refine the
      	range returned by get_range_info.
      
      gcc/testsuite/
      	PR tree-optimization/81635
      	* gcc.dg/vect/bb-slp-pr81635-3.c: New test.
      	* gcc.dg/vect/bb-slp-pr81635-4.c: Likewise.
      
      From-SVN: r257491
      Richard Sandiford committed
    • re PR ipa/81360 (ice in estimate_edge_growth, at ipa-inline.h:86) · 39aa9b23
      	PR ipa/81360
      	* cgraph.h (symtab_node::output_to_lto_symbol_table_p): Declare
      	* symtab.c: Include builtins.h
      	(symtab_node::output_to_lto_symbol_table_p): Move here
      	from lto-streamer-out.c:output_symbol_p.
      	* lto-streamer-out.c (write_symbol): Turn early exit to assert.
      	(output_symbol_p): Move all logic to symtab.c
      	(produce_symtab): Update.
      
      	* lto.c (unify_scc): Register prevailing trees, not trees to be freed.
      	(read_cgraph_and_symbols): Use
      	symtab_node::output_to_lto_symbol_table_p.
      
      From-SVN: r257490
      Jan Hubicka committed
    • S/390: Disable prediction of indirect branches · 84b4c7b5
      This patch implements GCC support for mitigating vulnerability
      CVE-2017-5715 known as Spectre #2 on IBM Z.
      
      In order to disable prediction of indirect branches the implementation
      makes use of an IBM Z specific feature - the execute instruction.
      Performing an indirect branch via execute prevents the branch from
      being subject to dynamic branch prediction.
      
      The implementation tries to stay close to the x86 solution regarding
      user interface.
      
      x86 style options supported (without thunk-inline):
      
      -mindirect-branch=(keep|thunk|thunk-extern)
      -mfunction-return=(keep|thunk|thunk-extern)
      
      IBM Z specific options:
      
      -mindirect-branch-jump=(keep|thunk|thunk-extern|thunk-inline)
      -mindirect-branch-call=(keep|thunk|thunk-extern)
      -mfunction-return-reg=(keep|thunk|thunk-extern)
      -mfunction-return-mem=(keep|thunk|thunk-extern)
      
      These options allow us to enable/disable the branch conversion at a
      finer granularity.
      
      -mindirect-branch sets the value of -mindirect-branch-jump and
       -mindirect-branch-call.
      
      -mfunction-return sets the value of -mfunction-return-reg and
       -mfunction-return-mem.
      
      All these options are supported on GCC command line as well as
      function attributes.
      
      'thunk' triggers the generation of out of line thunks (expolines) and
      replaces the formerly indirect branch with a direct branch to the
      thunk.  Depending on the -march= setting two different types of thunks
      are generated.  With -march=z10 or higher exrl (execute relative long)
      is being used while targeting older machines makes use of larl/ex
      instead.  From a security perspective the exrl variant is preferable.
      
      'thunk-extern' does the branch replacement like 'thunk' but does not
      emit the thunks.
      
      'thunk-inline' is only available for indirect jumps.  It should be used
      in environments where correct CFI is important - known as user space.
      
      Additionally the patch introduces the -mindirect-branch-table option
      which generates tables pointing to the locations which have been
      modified.  This is supposed to allow reverting the changes without
      re-compilation in situations where it isn't required. The sections are
      split up into one section per option.
      
      gcc/ChangeLog:
      
      2018-02-08  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
      
      	* config/s390/s390-opts.h (enum indirect_branch): Define.
      	* config/s390/s390-protos.h (s390_return_addr_from_memory)
      	(s390_indirect_branch_via_thunk)
      	(s390_indirect_branch_via_inline_thunk): Add function prototypes.
      	(enum s390_indirect_branch_type): Define.
      	* config/s390/s390.c (struct s390_frame_layout, struct
      	machine_function): Remove.
      	(indirect_branch_prez10thunk_mask, indirect_branch_z10thunk_mask)
      	(indirect_branch_table_label_no, indirect_branch_table_name):
      	Define variables.
      	(INDIRECT_BRANCH_NUM_OPTIONS): Define macro.
      	(enum s390_indirect_branch_option): Define.
      	(s390_return_addr_from_memory): New function.
      	(s390_handle_string_attribute): New function.
      	(s390_attribute_table): Add new attribute handler.
      	(s390_execute_label): Handle UNSPEC_EXECUTE_JUMP patterns.
      	(s390_indirect_branch_via_thunk): New function.
      	(s390_indirect_branch_via_inline_thunk): New function.
      	(s390_function_ok_for_sibcall): When jumping via thunk disallow
      	sibling call optimization for non z10 compiles.
      	(s390_emit_call): Force indirect branch target to be a single
      	register.  Add r1 clobber for non-z10 compiles.
      	(s390_emit_epilogue): Emit return jump via return_use expander.
      	(s390_reorg): Handle JUMP_INSNs as execute targets.
      	(s390_option_override_internal): Perform validity checks for the
      	new command line options.
      	(s390_indirect_branch_attrvalue): New function.
      	(s390_indirect_branch_settings): New function.
      	(s390_set_current_function): Invoke s390_indirect_branch_settings.
      	(s390_output_indirect_thunk_function):  New function.
      	(s390_code_end): Implement target hook.
      	(s390_case_values_threshold): Implement target hook.
      	(TARGET_ASM_CODE_END, TARGET_CASE_VALUES_THRESHOLD): Define target
      	macros.
      	* config/s390/s390.h (struct s390_frame_layout)
      	(struct	machine_function): Move here from s390.c.
      	(TARGET_INDIRECT_BRANCH_NOBP_RET)
      	(TARGET_INDIRECT_BRANCH_NOBP_JUMP)
      	(TARGET_INDIRECT_BRANCH_NOBP_JUMP_THUNK)
      	(TARGET_INDIRECT_BRANCH_NOBP_JUMP_INLINE_THUNK)
      	(TARGET_INDIRECT_BRANCH_NOBP_CALL)
      	(TARGET_DEFAULT_INDIRECT_BRANCH_TABLE)
      	(TARGET_INDIRECT_BRANCH_THUNK_NAME_EXRL)
      	(TARGET_INDIRECT_BRANCH_THUNK_NAME_EX)
      	(TARGET_INDIRECT_BRANCH_TABLE): Define macros.
      	* config/s390/s390.md (UNSPEC_EXECUTE_JUMP)
      	(INDIRECT_BRANCH_THUNK_REGNUM): Define constants.
      	(mnemonic attribute): Add values which aren't recognized
      	automatically.
      	("*cjump_long", "*icjump_long", "*basr", "*basr_r"): Disable
      	pattern for branch conversion.  Fix mnemonic attribute.
      	("*c<code>", "*sibcall_br", "*sibcall_value_br", "*return"): Emit
      	indirect branch via thunk if requested.
      	("indirect_jump", "<code>"): Expand patterns for branch conversion.
      	("*indirect_jump"): Disable for branch conversion using out of
      	line thunks.
      	("indirect_jump_via_thunk<mode>_z10")
      	("indirect_jump_via_thunk<mode>")
      	("indirect_jump_via_inlinethunk<mode>_z10")
      	("indirect_jump_via_inlinethunk<mode>", "*casesi_jump")
      	("casesi_jump_via_thunk<mode>_z10", "casesi_jump_via_thunk<mode>")
      	("casesi_jump_via_inlinethunk<mode>_z10")
      	("casesi_jump_via_inlinethunk<mode>", "*basr_via_thunk<mode>_z10")
      	("*basr_via_thunk<mode>", "*basr_r_via_thunk_z10")
      	("*basr_r_via_thunk", "return<mode>_prez10"): New pattern.
      	("*indirect2_jump"): Disable for branch conversion.
      	("casesi_jump"): Turn into expander and expand patterns for branch
      	conversion.
      	("return_use"): New expander.
      	("*return"): Emit return via thunk and rename it to ...
      	("*return<mode>"): ... this one.
      	* config/s390/s390.opt: Add new options and and enum for the
      	option values.
      
      gcc/testsuite/ChangeLog:
      
      2018-02-08  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
      
      	* gcc.target/s390/nobp-function-pointer-attr.c: New test.
      	* gcc.target/s390/nobp-function-pointer-nothunk.c: New test.
      	* gcc.target/s390/nobp-function-pointer-z10.c: New test.
      	* gcc.target/s390/nobp-function-pointer-z900.c: New test.
      	* gcc.target/s390/nobp-indirect-jump-attr.c: New test.
      	* gcc.target/s390/nobp-indirect-jump-inline-attr.c: New test.
      	* gcc.target/s390/nobp-indirect-jump-inline-z10.c: New test.
      	* gcc.target/s390/nobp-indirect-jump-inline-z900.c: New test.
      	* gcc.target/s390/nobp-indirect-jump-nothunk.c: New test.
      	* gcc.target/s390/nobp-indirect-jump-z10.c: New test.
      	* gcc.target/s390/nobp-indirect-jump-z900.c: New test.
      	* gcc.target/s390/nobp-return-attr-all.c: New test.
      	* gcc.target/s390/nobp-return-attr-neg.c: New test.
      	* gcc.target/s390/nobp-return-mem-attr.c: New test.
      	* gcc.target/s390/nobp-return-mem-nothunk.c: New test.
      	* gcc.target/s390/nobp-return-mem-z10.c: New test.
      	* gcc.target/s390/nobp-return-mem-z900.c: New test.
      	* gcc.target/s390/nobp-return-reg-attr.c: New test.
      	* gcc.target/s390/nobp-return-reg-mixed.c: New test.
      	* gcc.target/s390/nobp-return-reg-nothunk.c: New test.
      	* gcc.target/s390/nobp-return-reg-z10.c: New test.
      	* gcc.target/s390/nobp-return-reg-z900.c: New test.
      	* gcc.target/s390/nobp-table-jump-inline-z10.c: New test.
      	* gcc.target/s390/nobp-table-jump-inline-z900.c: New test.
      	* gcc.target/s390/nobp-table-jump-z10.c: New test.
      	* gcc.target/s390/nobp-table-jump-z900.c: New test.
      
      From-SVN: r257489
      Andreas Krebbel committed
    • Simplify LRA lowpart subreg fix · 98a05c03
      r257177 made the else arms equivalent to the if arms.
      
      2018-02-08  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* lra-constraints.c (match_reload): Unconditionally use
      	gen_lowpart_SUBREG, rather than selecting between that
      	and equivalent gen_rtx_SUBREG code.
      
      From-SVN: r257488
      Richard Sandiford committed
    • re PR middle-end/84233 (ICE (segfault) in gimple_assign_rhs_code) · 24db2556
      2018-02-08  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/84233
      	* tree-ssa-phiprop.c (propagate_with_phi): Use separate
      	changed flag instead of boguously re-using phi_inserted.
      
      	* g++.dg/torture/pr84233.C: New testcase.
      
      From-SVN: r257486
      Richard Biener committed
    • [hsa] Fix PR82416 testcase · 3d224921
      2018-02-08  Martin Jambor  <mjambor@suse.cz>
      
      	* testsuite/libgomp.hsa.c/pr82416.c: Make the function with target
      	clonable.
      
      From-SVN: r257485
      Martin Jambor committed
    • [hsa] Set program allocation for static local variables · c7c30edd
      2018-02-08  Martin Jambor  <mjambor@suse.cz>
      
      	* hsa-gen.c (get_symbol_for_decl): Set program allocation for
      	static local variables.
      
      libgomp/
      	* testsuite/libgomp.hsa.c/staticvar.c: New test.
      
      From-SVN: r257484
      Martin Jambor committed
    • re PR target/84278 (claims initv4sfv2sf is available but inits through stack) · 414fef4e
      2018-02-08  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/84278
      	* tree-vect-stmts.c (vectorizable_store): When looking for
      	smaller vector types to perform grouped strided loads/stores
      	make sure the mode is supported by the target.
      	(vectorizable_load): Likewise.
      
      	* gcc.target/i386/pr84278.c: New testcase.
      
      From-SVN: r257483
      Richard Biener committed
    • [AArch64] Use more LDP/STP in shrinkwrapping · 3f26f054
      The shrinkwrap optimization added in GCC 7 allows each callee-save to
      be delayed and done only across blocks which need a particular callee-save.
      Although this reduces unnecessary memory traffic on code paths that need
      few callee-saves, it typically uses LDR/STR rather than LDP/STP.  This
      means more memory accesses and increased codesize, ~1.0% on average.
      
      To improve this, if a particular callee-save must be saved/restored, also
      add the adjacent callee-save to allow use of LDP/STP.  This significantly
      reduces codesize (for example gcc_r, povray_r, parest_r, xalancbmk_r are
      1% smaller).  This is a simple fix which can be backported.  A more advanced
      approach would scan blocks for pairs of callee-saves, but that requires a
      full rewrite of all the callee-save code which is too late at this stage.
      
      An example epilog in a shrinkwrapped function before:
      
      ldp    x21, x22, [sp,#16]
      ldr    x23, [sp,#32]
      ldr    x24, [sp,#40]
      ldp    x25, x26, [sp,#48]
      ldr    x27, [sp,#64]
      ldr    x28, [sp,#72]
      ldr    x30, [sp,#80]
      ldr    d8, [sp,#88]
      ldp    x19, x20, [sp],#96
      ret
      
      And after this patch:
      
      ldr    d8, [sp,#88]
      ldp    x21, x22, [sp,#16]
      ldp    x23, x24, [sp,#32]
      ldp    x25, x26, [sp,#48]
      ldp    x27, x28, [sp,#64]
      ldr    x30, [sp,#80]
      ldp    x19, x20, [sp],#96
      ret
      
          gcc/
      	* config/aarch64/aarch64.c (aarch64_components_for_bb):
      	Increase LDP/STP opportunities by adding adjacent callee-saves.
      
      From-SVN: r257482
      Wilco Dijkstra committed
    • PR84068, PR83459: Fix sort order of SCHED_PRESSURE_MODEL · 18fbe394
      The comparison function for SCHED_PRESSURE_MODEL is incorrect.  If either
      instruction is not in target_bb, the ordering is not well defined.  
      Since all instructions outside the target_bb get the highest model_index,
      all we need to do is sort on model_index.  If the model_index is the same
      we defer to RFS_DEP_COUNT and/or RFS_TIE.
      
          gcc/
      	PR rtl-optimization/84068
      	PR rtl-optimization/83459
      	* haifa-sched.c (rank_for_schedule): Fix SCHED_PRESSURE_MODEL sorting.
      
          gcc/testsuite
      	PR rtl-optimization/84068
      	PR rtl-optimization/83459
      	* gcc.dg/pr84068.c: New test.
      
      From-SVN: r257481
      Wilco Dijkstra committed
    • re PR tree-optimization/84224 (ICE in execute, at gimple-ssa-warn-alloca.c:448) · eacac712
      	PR tree-optimization/84224
      	* gimple-ssa-warn-alloca.c (pass_walloca::execute): Remove assert.
      	* calls.c (gimple_alloca_call_p): Only return TRUE when we have
      	non-zero arguments.
      
      From-SVN: r257480
      Aldy Hernandez committed
    • slp-pr56812.cc: Allow either basic-block or loop vectorization to happen. · 3b263f5a
      2018-02-08  Richard Biener  <rguenther@suse.de>
      
      	* g++.dg/vect/slp-pr56812.cc: Allow either basic-block or
      	loop vectorization to happen.
      
      From-SVN: r257479
      Richard Biener committed
    • re PR c++/83204 (c++ -std=c++14 ICE in maybe_undo_parenthesized_ref, at cp/semantics.c:1694) · 66a90e86
      /cp
      2018-02-08  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/83204
      	* pt.c (tsubst_copy_and_build): Use force_paren_expr for INDIRECT_REF.
      
      /testsuite
      2018-02-08  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/83204
      	* g++.dg/cpp0x/lambda/lambda-ice25.C: New.
      
      From-SVN: r257478
      Paolo Carlini committed
    • Daily bump. · f986f7e4
      From-SVN: r257477
      GCC Administrator committed
  3. 07 Feb, 2018 10 commits
    • install.texi (Configuration): Document the --with-long-double-format={ibm,ieee}… · d2591b68
      install.texi (Configuration): Document the --with-long-double-format={ibm,ieee} PowerPC configuration options.
      
      2018-02-07  Michael Meissner  <meissner@linux.vnet.ibm.com>
      
      	* doc/install.texi (Configuration): Document the
      	--with-long-double-format={ibm,ieee} PowerPC configuration
      	options.
      
      From-SVN: r257473
      Michael Meissner committed
    • altivec.md (*restore_world): Remove LR use. · 11e887c4
      2018-02-07  Iain Sandoe  <iain@codesourcery.com>
      
      	* config/rs6000/altivec.md (*restore_world): Remove LR use.
      	* config/rs6000/predicates.md (restore_world_operation): Adjust op
      	count, remove one USE.
      
      From-SVN: r257472
      Iain Sandoe committed
    • vsxcopy.c: Update scan-assembler stanzas. · 3f636462
      [testsuite]
      
      2018-02-07  Will Schmidt  <will_schmidt@vnet.ibm.com>
      
      	* gcc.target/powerpc/vsxcopy.c: Update scan-assembler stanzas.
      
      From-SVN: r257471
      Will Schmidt committed
    • re PR target/84154 (PowerPC GCC 7 and 8 have regression in converting fp to… · 4253435e
      re PR target/84154 (PowerPC GCC 7 and 8 have regression in converting fp to short/char and returning it)
      
      [gcc]
      2018-02-07  Michael Meissner  <meissner@linux.vnet.ibm.com>
      
      	PR target/84154
      	* config/rs6000/rs6000.md (fix_trunc<SFDF:mode><QHI:mode>2):
      	Convert from define_expand to be define_insn_and_split.  Rework
      	float/double/_Float128 conversions to QI/HI/SImode to work with
      	both ISA 2.07 (power8) or ISA 3.0 (power9).  Fix regression where
      	conversions to QI/HImode types did a store and then a load to
      	truncate the value.  For conversions to VSX registers, don't split
      	the insn, instead emit the code directly.  Use the code iterator
      	any_fix to combine signed and unsigned conversions.
      	(fix<uns>_trunc<SFDF:mode>si2_p8): Likewise.
      	(fixuns_trunc<SFDF:mode><QHI:mode>2): Likewise.
      	(fix_trunc<IEEE128:mode><QHI:mode>2): Likewise.
      	(fix<uns>_trunc<SFDF:mode><QHI:mode>2): Likewise.
      	(fix_<mode>di2_hw): Likewise.
      	(fixuns_<mode>di2_hw): Likewise.
      	(fix_<mode>si2_hw): Likewise.
      	(fixuns_<mode>si2_hw): Likewise.
      	(fix<uns>_<IEEE128:mode><SDI:mode>2_hw): Likewise.
      	(fix<uns>_trunc<IEEE128:mode><QHI:mode>2): Likewise.
      	(fctiw<u>z_<mode>_smallint): Rename fctiw<u>z_<mode>_smallint to
      	fix<uns>_trunc<SFDF:mode>si2_p8.
      	(fix_trunc<SFDF:mode><QHI:mode>2_internal): Delete, no longer
      	used.
      	(fixuns_trunc<SFDF:mode><QHI:mode>2_internal): Likewise.
      	(fix<uns>_<mode>_mem): Likewise.
      	(fctiw<u>z_<mode>_mem): Likewise.
      	(fix<uns>_<mode>_mem): Likewise.
      	(fix<uns>_trunc<SFDF:mode><QHSI:mode>2_mem): On ISA 3.0, prevent
      	the register allocator from doing a direct move to the GPRs to do
      	a store, and instead use the ISA 3.0 store byte/half-word from
      	vector register instruction.  For IEEE 128-bit floating point,
      	also optimize stores of 32-bit ints.
      	(fix<uns>_trunc<IEEE128:mode><QHSI:mode>2_mem): Likewise.
      
      [gcc/testsuite]
      2018-02-07  Michael Meissner  <meissner@linux.vnet.ibm.com>
      
      	PR target/84154
      	* gcc.target/powerpc/pr84154-1.c: New tests.
      	* gcc.target/powerpc/pr84154-2.c: Likewise.
      	* gcc.target/powerpc/pr84154-3.c: Likewise.
      
      From-SVN: r257470
      Michael Meissner committed
    • builtins-mergew-mergeow.c: Update dg-requires. · 54af445d
      [testsuite]
      
      2018-02-07  Will Schmidt  <will_schmidt@vnet.ibm.com>
      
      	* gcc.target/powerpc/builtins-mergew-mergeow.c:  Update dg-requires.
      
      From-SVN: r257469
      Will Schmidt committed
    • re PR c++/84082 (ICE with broken template function definition) · 8f1f526b
      	PR c++/84082
      	* parser.c (cp_parser_dot_deref_incomplete): New function.
      	(cp_parser_postfix_dot_deref_expression): Use it.
      
      	* g++.dg/template/incomplete11.C: New test.
      	* g++.dg/parse/crash67.C: Expect an incomplete type diagnostics too.
      
      From-SVN: r257466
      Jakub Jelinek committed
    • re PR fortran/82994 (ICE in gfc_match_deallocate, at fortran/match.c:4478) · b35a0ccd
      2018-02-07  Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	PR fortran/82994
      	* match.c (gfc_match_deallocate): Check for NULL pointer.
      
      2018-02-07  Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	PR fortran/82994
      	* gfortran.dg/deallocate_error_3.f90: New test.
      	* gfortran.dg/deallocate_error_4.f90: New test.
      
      From-SVN: r257465
      Steven G. Kargl committed
    • * es.po: Update. · 72267602
      From-SVN: r257464
      Joseph Myers committed
    • runtime: don't call funcPC from a function · f1a2d8b1
          
          The escape analysis support is not yet good enough to avoid escaping
          the argument to funcPC.  This causes unnecessary and often harmful
          memory allocation.  E.g., (*cpuProfile).addExtra can be called from a
          signal handler, and it must not allocate memory.
          
          Move the calls to funcPC to use variables instead.  This was done in
          the original migration to using funcPC, but was not done for newer code.
          
          In one case, in signal handling code, use getSigtramp.
          
          Reviewed-on: https://go-review.googlesource.com/92735
      
      From-SVN: r257463
      Ian Lance Taylor committed
    • re PR fortran/68560 (The test gfortran.dg/shape_8.f90 now fails when compiled with -flto) · 82e259b8
      2018-02-07  Thomas Koenig  <tkoenig@gcc.gnu.org>
      
      	PR fortran/68560
      	* trans-intrinsic.c (gfc_conv_intrinsic_shape): New function.
      	(gfc_conv_intrinsic_function): Call it.
      
      2018-02-07  Thomas Koenig  <tkoenig@gcc.gnu.org>
      
      	PR fortran/68560
      	* gfortran.dg/shape_9.f90: New test.
      
      From-SVN: r257462
      Thomas Koenig committed