1. 14 Nov, 2018 5 commits
  2. 13 Nov, 2018 35 commits
    • Fix error when selecting number of memory pools · b76a1b36
      	* src/c++17/memory_resource.cc (select_num_pools): Fix off-by-one
      	error when block_size is equal to one of the values in the array.
      
      From-SVN: r266092
      Jonathan Wakely committed
    • Fix unused parameter warnings introduced in earlier patch · 6c4a1d38
      	* src/c++17/memory_resource.cc (_Pool::deallocate): Restore
      	attributes to parameters that are only used in assertions.
      
      From-SVN: r266091
      Jonathan Wakely committed
    • Remove redundant loop in unsynchronized_pool_resource code · b6b18271
      	* src/c++17/memory_resource.cc (bitset::find_first_unset()): Remove
      	unused function.
      	(bitset::get_first_unset()): Remove loop, if there's are unset bits
      	then _M_next_word refers to the first one and there's no need to loop.
      	(_Pool::_Pool(size_t, size_t), _Pool::block_size()): Remove dead code.
      
      From-SVN: r266090
      Jonathan Wakely committed
    • Improve handling of pool_options::largest_required_pool_block · f2e00585
      Make the munge_options function round the largest_required_pool_block
      value to a multiple of the smallest pool size (currently 8 bytes) to
      avoid pools with odd sizes.
      
      Ensure there is a pool large enough for blocks of the requested size.
      Previously when largest_required_pool_block was exactly equal to one of
      the pool_sizes[] values there would be no pool of that size. This patch
      increases _M_npools by one, so there is a pool at least as large as the
      requested value. It also reduces the size of the largest pool to be no
      larger than needed.
      
      	* src/c++17/memory_resource.cc (munge_options): Round up value of
      	largest_required_pool_block to multiple of smallest pool size. Round
      	excessively large values down to largest pool size.
      	(select_num_pools): Increase number of pools by one unless it exactly
      	matches requested largest_required_pool_block.
      	(__pool_resource::_M_alloc_pools()): Make largest pool size equal
      	largest_required_pool_block.
      	* testsuite/20_util/unsynchronized_pool_resource/options.cc: Check
      	that pool_options::largest_required_pool_block is set appropriately.
      
      From-SVN: r266089
      Jonathan Wakely committed
    • Fix incorrect assertion when deallocating big block · d3306a84
      Since a big_block rounds up the size to a multiple of big_block::min it
      is wrong to assert that the supplied number of bytes equals the
      big_block's size(). Add big_block::alloc_size(size_t) to calculate the
      allocated size consistently, and add comments to the code.
      
      	* src/c++17/memory_resource.cc (big_block): Improve comments.
      	(big_block::all_ones): Remove.
      	(big_block::big_block(size_t, size_t)): Use alloc_size.
      	(big_block::size()): Add comment, replace all_ones with equivalent
      	expression.
      	(big_block::align()): Shift value of correct type.
      	(big_block::alloc_size(size_t)): New function to round up size.
      	(__pool_resource::allocate(size_t, size_t)): Add comment.
      	(__pool_resource::deallocate(void*, size_t, size_t)): Likewise. Fix
      	incorrect assertion by using big_block::alloc_size(size_t).
      	* testsuite/20_util/unsynchronized_pool_resource/allocate.cc: Add
      	more tests for unpooled allocations.
      
      From-SVN: r266088
      Jonathan Wakely committed
    • Fix overflows in std::pmr::unsynchonized_pool_resource · 6bdd58f7
      	* src/c++17/memory_resource.cc (bitset::full()): Handle edge case
      	for _M_next_word maximum value.
      	(bitset::get_first_unset(), bitset::set(size_type)): Use
      	update_next_word() to update _M_next_word.
      	(bitset::update_next_word()): New function, avoiding wraparound of
      	unsigned _M_next_word member.
      	(bitset::max_word_index()): New function.
      	(chunk::chunk(void*, uint32_t, void*, size_t)): Add assertion.
      	(chunk::max_bytes_per_chunk()): New function.
      	(pool::replenish(memory_resource*, const pool_options&)): Prevent
      	_M_blocks_per_chunk from exceeding max_blocks_per_chunk or from
      	causing chunk::max_bytes_per_chunk() to be exceeded.
      	* testsuite/20_util/unsynchronized_pool_resource/allocate-max-chunks.cc:
      	New test.
      
      From-SVN: r266087
      Jonathan Wakely committed
    • re PR middle-end/87899 (r264897 cause mis-compiled native arm-linux-gnueabihf toolchain) · 874e50cb
      gcc/
      	PR rtl-optimization/87899
      	* lra-lives.c (start_living): Update white space in comment.
      	(enum point_type): New.
      	(sparseset_contains_pseudos_p): New function.
      	(update_pseudo_point): Likewise.
      	(make_hard_regno_live): Use HARD_REGISTER_NUM_P macro.
      	(make_hard_regno_dead): Likewise.  Remove ignore_reg_for_conflicts
      	handling.  Move early exit after adding conflicts.
      	(mark_pseudo_live): Use HARD_REGISTER_NUM_P macro.  Add early exit
      	if regno is already live.  Remove all handling of program points.
      	(mark_pseudo_dead): Use HARD_REGISTER_NUM_P macro.  Add early exit
      	after adding conflicts.  Remove all handling of program points and
      	ignore_reg_for_conflicts.
      	(mark_regno_live): Use HARD_REGISTER_NUM_P macro.  Remove return value
      	and do not guard call to mark_pseudo_live.
      	(mark_regno_dead): Use HARD_REGISTER_NUM_P macro.  Remove return value
      	and do not guard call to mark_pseudo_dead.
      	(check_pseudos_live_through_calls): Use HARD_REGISTER_NUM_P macro.
      	(process_bb_lives): Use HARD_REGISTER_NUM_P and HARD_REGISTER_P macros.
      	Use new function update_pseudo_point.  Handle register copies by
      	removing the source register from the live set.  Handle INOUT operands.
      	Update to the next program point using the unused_set, dead_set and
      	start_dying sets.
      	(lra_create_live_ranges_1): Use HARD_REGISTER_NUM_P macro.
      
      From-SVN: r266086
      Peter Bergner committed
    • Eliminate source_location in favor of location_t · 620e594b
      Historically GCC used location_t, while libcpp used source_location.
      
      This inconsistency has been annoying me for a while, so this patch
      removes source_location in favor of location_t throughout
      (as the latter is shorter).
      
      gcc/ChangeLog:
      	* builtins.c: Replace "source_location" with "location_t".
      	* diagnostic-show-locus.c: Likewise.
      	* diagnostic.c: Likewise.
      	* dumpfile.c: Likewise.
      	* gcc-rich-location.h: Likewise.
      	* genmatch.c: Likewise.
      	* gimple.h: Likewise.
      	* gimplify.c: Likewise.
      	* input.c: Likewise.
      	* input.h: Likewise.  Eliminate the typedef.
      	* omp-expand.c: Likewise.
      	* selftest.h: Likewise.
      	* substring-locations.h (get_source_location_for_substring):
      	Rename to..
      	(get_location_within_string): ...this.
      	* tree-cfg.c: Replace "source_location" with "location_t".
      	* tree-cfgcleanup.c: Likewise.
      	* tree-diagnostic.c: Likewise.
      	* tree-into-ssa.c: Likewise.
      	* tree-outof-ssa.c: Likewise.
      	* tree-parloops.c: Likewise.
      	* tree-phinodes.c: Likewise.
      	* tree-phinodes.h: Likewise.
      	* tree-ssa-loop-ivopts.c: Likewise.
      	* tree-ssa-loop-manip.c: Likewise.
      	* tree-ssa-phiopt.c: Likewise.
      	* tree-ssa-phiprop.c: Likewise.
      	* tree-ssa-threadupdate.c: Likewise.
      	* tree-ssa.c: Likewise.
      	* tree-ssa.h: Likewise.
      	* tree-vect-loop-manip.c: Likewise.
      
      gcc/c-family/ChangeLog:
      	* c-common.c (c_get_substring_location): Update for renaming of
      	get_source_location_for_substring to get_location_within_string.
      	* c-lex.c: Replace "source_location" with "location_t".
      	* c-opts.c: Likewise.
      	* c-ppoutput.c: Likewise.
      
      gcc/c/ChangeLog:
      	* c-decl.c: Replace "source_location" with "location_t".
      	* c-tree.h: Likewise.
      	* c-typeck.c: Likewise.
      	* gimple-parser.c: Likewise.
      
      gcc/cp/ChangeLog:
      	* call.c: Replace "source_location" with "location_t".
      	* cp-tree.h: Likewise.
      	* cvt.c: Likewise.
      	* name-lookup.c: Likewise.
      	* parser.c: Likewise.
      	* typeck.c: Likewise.
      
      gcc/fortran/ChangeLog:
      	* cpp.c: Replace "source_location" with "location_t".
      	* gfortran.h: Likewise.
      
      gcc/go/ChangeLog:
      	* go-gcc-diagnostics.cc: Replace "source_location" with "location_t".
      	* go-gcc.cc: Likewise.
      	* go-linemap.cc: Likewise.
      	* go-location.h: Likewise.
      	* gofrontend/README: Likewise.
      
      gcc/jit/ChangeLog:
      	* jit-playback.c: Replace "source_location" with "location_t".
      
      gcc/testsuite/ChangeLog:
      	* g++.dg/plugin/comment_plugin.c: Replace "source_location" with
      	"location_t".
      	* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c: Likewise.
      
      libcc1/ChangeLog:
      	* libcc1plugin.cc: Replace "source_location" with "location_t".
      	(plugin_context::get_source_location): Rename to...
      	(plugin_context::get_location_t): ...this.
      	* libcp1plugin.cc: Likewise.
      
      libcpp/ChangeLog:
      	* charset.c: Replace "source_location" with "location_t".
      	* directives-only.c: Likewise.
      	* directives.c: Likewise.
      	* errors.c: Likewise.
      	* expr.c: Likewise.
      	* files.c: Likewise.
      	* include/cpplib.h: Likewise.  Rename MAX_SOURCE_LOCATION to
      	MAX_LOCATION_T.
      	* include/line-map.h: Likewise.
      	* init.c: Likewise.
      	* internal.h: Likewise.
      	* lex.c: Likewise.
      	* line-map.c: Likewise.
      	* location-example.txt: Likewise.
      	* macro.c: Likewise.
      	* pch.c: Likewise.
      	* traditional.c: Likewise.
      
      From-SVN: r266085
      David Malcolm committed
    • PR middle-end/81824 - Warn for missing attributes with function aliases · f9731de3
      gcc/c-family/ChangeLog:
      
      	* c-attribs.c (handle_copy_attribute): Exclude inlining attributes.
      	(handle_tls_model_attribute): Improve diagnostics.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.dg/attr-copy-5.c: New test.
      	* gcc.dg/tls/diag-6.c: Adjust expected diagnostics.
      
      From-SVN: r266084
      Martin Sebor committed
    • extend.texi: Fix typo in the weakref description. · ee8393f4
      2018-11-13  Michael Ploujnikov  <michael.ploujnikov@oracle.com>
      
      	* doc/extend.texi: Fix typo in the weakref description.
      
      From-SVN: r266083
      Michael Ploujnikov committed
    • Fix ChangeLog entry for r266080 · 95bdc37a
      From-SVN: r266082
      David Malcolm committed
    • re PR tree-optimization/86991 (ICE in vectorizable_reduction, at tree-vect-loop.c:6919) · 53467b55
      2018-11-13  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/86991
      	* tree-vect-loop.c (vect_is_slp_reduction): Delay reduction
      	group building until we have successfully detected the SLP
      	reduction.
      	(vect_is_simple_reduction): Remove fixup code here.
      
      	* gcc.dg/pr86991.c: New testcase.
      
      From-SVN: r266081
      Richard Biener committed
    • Ensure that dump calls are guarded with dump_enabled_p · bbeeac91
      If called when !dump_enabled_p, the dump_* functions effectively do
      nothing, but as of r263178 this doing "nothing" involves non-trivial
      work internally.
      
      I wasn't sure whether the dump_* functions should assert that
        dump_enabled_p ()
      is true when they're called, or if they should bail out immediately
      for this case, so in this patch I implemented both, so that we get
      an assertion failure, and otherwise bail out for the case where
      !dump_enabled_p when assertions are disabled.
      
      The patch also fixes all of the places I found during testing
      (on x86_64-pc-linux-gnu) that call into dump_* but which
      weren't guarded by
        if (dump_enabled_p ())
      
      gcc/ChangeLog:
      	* dumpfile.c (VERIFY_DUMP_ENABLED_P): New macro.
      	(dump_gimple_stmt): Use it.
      	(dump_gimple_stmt_loc): Likewise.
      	(dump_gimple_expr): Likewise.
      	(dump_gimple_expr_loc): Likewise.
      	(dump_generic_expr): Likewise.
      	(dump_generic_expr_loc): Likewise.
      	(dump_printf): Likewise.
      	(dump_printf_loc): Likewise.
      	(dump_dec): Likewise.
      	(dump_dec): Likewise.
      	(dump_hex): Likewise.
      	(dump_symtab_node): Likewise.
      
      gcc/ChangeLog:
      	* gimple-loop-interchange.cc (tree_loop_interchange::interchange):
      	Guard dump call with dump_enabled_p.
      	* graphite-isl-ast-to-gimple.c (graphite_regenerate_ast_isl): Likewise.
      	* graphite-optimize-isl.c (optimize_isl): Likewise.
      	* graphite.c (graphite_transform_loops): Likewise.
      	* tree-loop-distribution.c (pass_loop_distribution::execute): Likewise.
      	* tree-parloops.c (parallelize_loops): Likewise.
      	* tree-ssa-loop-niter.c (number_of_iterations_exit): Likewise.
      	* tree-vect-data-refs.c (vect_analyze_group_access_1): Likewise.
      	(vect_prune_runtime_alias_test_list): Likewise.
      	* tree-vect-loop.c (vect_update_vf_for_slp): Likewise.
      	(vect_estimate_min_profitable_iters): Likewise.
      	* tree-vect-slp.c (vect_record_max_nunits): Likewise.
      	(vect_build_slp_tree_2): Likewise.
      	(vect_supported_load_permutation_p): Likewise.
      	(vect_slp_analyze_operations): Likewise.
      	(vect_slp_analyze_bb_1): Likewise.
      	(vect_slp_bb): Likewise.
      	* tree-vect-stmts.c (vect_analyze_stmt): Likewise.
      	* tree-vectorizer.c (try_vectorize_loop_1): Likewise.
      	(pass_slp_vectorize::execute): Likewise.
      	(increase_alignment): Likewise.
      
      From-SVN: r266080
      David Malcolm committed
    • Fix ICE with -fopt-info-inline (PR ipa/87955) · 9228f64c
      PR ipa/87955 reports a problem I introduced in r265920, where I converted
      the guard in report_inline_failed_reason from using:
        if (dump_file)
      to using
        if (dump_enabled_p ()).
      without updating the calls to cl_target_option_print_diff and
      cl_optimization_print_diff, which assume that dump_file is non-NULL.
      
      The functions are auto-generated.  Rather than porting them to the dump
      API, this patch applies the workaround of adding the missing checks on
      dump_file before calling them.
      
      gcc/ChangeLog:
      	PR ipa/87955
      	* ipa-inline.c (report_inline_failed_reason): Guard calls to
      	cl_target_option_print_diff and cl_optimization_print_diff with
      	if (dump_file).
      
      gcc/testsuite/ChangeLog:
      	PR ipa/87955
      	* gcc.target/i386/pr87955.c: New test.
      
      From-SVN: r266079
      David Malcolm committed
    • -fsave-optimization-record: compress the output using zlib · be40afb2
      gcc/ChangeLog:
      	* doc/invoke.texi (-fsave-optimization-record): Note that the
      	output is compressed.
      	* optinfo-emit-json.cc: Include <zlib.h>.
      	(optrecord_json_writer::write): Compress the output.
      
      From-SVN: r266078
      David Malcolm committed
    • tree-vrp.c (value_range_base::dump): Dump type. · f824e18c
      	* tree-vrp.c (value_range_base::dump): Dump type.
      	Do not use INF nomenclature for 1-bit types.
      	(dump_value_range): Group all variants to common dumping code.
      	(debug): New overloaded functions for value_ranges.
      	(value_range_base::dump): Remove no argument version.
      	(value_range::dump): Same.
      
      testsuite/
      	* gcc.dg/tree-ssa/pr64130.c: Adjust for new value_range pretty
      	printer.
      	* gcc.dg/tree-ssa/vrp92.c: Same.
      
      From-SVN: r266077
      Aldy Hernandez committed
    • Move a test-case to a proper folder. · 7f9414c1
      2018-11-13  Martin Liska  <mliska@suse.cz>
      
      	* gcc.target/i386/pr87930.c: Move to ...
      	* gcc.dg/asan/pr87930.c: ... here.  Guard for i?86/x86_64 targets.
      
      From-SVN: r266076
      Martin Liska committed
    • re PR tree-optimization/87931 (ICE in vectorizable_reduction, at… · 41b32876
      re PR tree-optimization/87931 (ICE in vectorizable_reduction, at tree-vect-loop.c:6193 since r265876)
      
      2018-11-13  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/87931
      	* tree-vect-loop.c (vect_is_simple_reduction): Restrict
      	nested cycles we support to latch computations vectorizable_reduction
      	handles.
      
      	* gcc.dg/graphite/pr87931.c: New testcase.
      
      From-SVN: r266075
      Richard Biener committed
    • Improve -fprofile-report. · 160576e1
      2018-11-13  Martin Liska  <mliska@suse.cz>
      
      	PR tree-optimization/87885
      	* cfghooks.c (account_profile_record): Rename
      	to ...
      	(profile_record_check_consistency): ... this.
      	Calculate missing num_mismatched_freq_in.
      	(profile_record_account_profile): New function
      	that calculates time and size of a function.
      	* cfghooks.h (struct profile_record): Remove
      	all tuples.
      	(struct cfg_hooks): Remove after_pass flag.
      	(account_profile_record): Rename to ...
      	(profile_record_check_consistency): ... this.
      	(profile_record_account_profile): New.
      	* cfgrtl.c (rtl_account_profile_record): Remove
      	after_pass flag.
      	* passes.c (check_profile_consistency): Do only
      	checking.
      	(account_profile): Calculate size and time of
      	function only.
      	(pass_manager::dump_profile_report): Reformat
      	output.
      	(execute_one_ipa_transform_pass): Call
      	consistency check before clean upand call account_profile
      	after a clean up is done.
      	(execute_one_pass): Call check_profile_consistency and
      	account_profile instead of using after_pass flag..
      	* tree-cfg.c (gimple_account_profile_record): Likewise.
      
      From-SVN: r266074
      Martin Liska committed
    • Do not allow -mabi=ms and -fsanitize={,kernel-}address (PR sanitizer/87930). · e4db210d
      2018-11-13  Martin Liska  <mliska@suse.cz>
      
      	PR sanitizer/87930
      	* config/i386/i386.c (ix86_option_override_internal): Error
      	about usage -mabi=ms and -fsanitize={,kernel-}address.
      2018-11-13  Martin Liska  <mliska@suse.cz>
      
      	PR sanitizer/87930
      	* gcc.target/i386/pr87930.c: New test.
      
      From-SVN: r266073
      Martin Liska committed
    • [PATCH][GCC] Make DR_TARGET_ALIGNMENT compile time variable · ca31798e
      This patch enables targets to describe DR_TARGET_ALIGNMENT as a compile-time
      variable.  It does so by turning the variable into a 'poly_uint64'.
      
      gcc/ChangeLog:
      2018-11-13  Andre Vieira  <andre.simoesdiasvieira@arm.com>
      
      	* config/aarch64/aarch64.c
      	(aarch64_vectorize_preferred_vector_alignment): Change return type to
      	poly_uint64.
      	(aarch64_simd_vector_alignment_reachable): Adapt to preferred vector
      	alignment being a poly int.
      	* doc/tm.texi (TARGET_VECTORIZE_PREFERRED_VECTOR_ALIGNMENT): Change
      	return type to poly_uint64.
      	* target.def (default_preferred_vector_alignment): Likewise.
      	* targhooks.c (default_preferred_vector_alignment): Likewise.
      	* targhooks.h (default_preferred_vector_alignment): Likewise.
      	* tree-vect-data-refs.c (vect_calculate_target_alignment): Likewise.
      	(vect_compute_data_ref_alignment): Adapt to vector alignment being a
      	poly int.
      	(vect_update_misalignment_for_peel): Likewise.
      	(vect_enhance_data_refs_alignment): Likewise.
      	(vect_find_same_alignment_drs): Likewise.
      	(vect_duplicate_ssa_name_ptr_info): Likewise.
      	(vect_setup_realignment): Likewise.
      	(vect_can_force_dr_alignment_p): Change alignment parameter type to
      	poly_uint64.
      	* tree-vect-loop-manip.c (get_misalign_in_elems): Learn to construct a
      	mask with a compile time variable vector alignment.
      	(vect_gen_prolog_loop_niters): Adapt to vector alignment being a poly
      	int.
      	(vect_do_peeling): Exit early if vector alignment is not constant.
      	* tree-vect-stmts.c (ensure_base_align): Adapt to vector alignment being
      	a poly int.
      	(vectorizable_store): Likewise.
      	(vectorizable_load): Likweise.
      	* tree-vectorizer.h (struct dr_vec_info): Make target_alignment field a
      	poly_uint64.
      	(vect_known_alignment_in_bytes): Adapt to vector alignment being a
      	poly int.
      	(vect_can_force_dr_alignment_p): Change alignment parameter type to
      	poly_uint64.
      
      From-SVN: r266072
      Andre Vieira committed
    • re PR tree-optimization/87962 (ICE in vect_get_vec_def_for_operand_1, at tree-vect-stmts.c:1485) · be2b68e4
      2018-11-13  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/87962
      	* tree-vect-loop.c (vect_is_simple_reduction): More reliably
      	detect outer reduction for disqualifying in-loop uses.
      
      	* gcc.dg/pr87962.c: New testcase.
      
      From-SVN: r266071
      Richard Biener committed
    • re PR tree-optimization/87967 (ICE in slpeel_duplicate_current_defs_from_edges) · a28dfaaf
      2018-11-13  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/87967
      	* tree-vect-loop.c (vect_transform_loop): Also copy PHIs
      	for constants for the scalar loop.
      
      	* g++.dg/opt/pr87967.C: New testcase.
      
      From-SVN: r266070
      Richard Biener committed
    • [RS6000] Don't put large integer constants in TOC for -mcmodel=medium · a277ca89
      For -mcmodel=medium we can use toc-relative addressing to access
      constants placed in read-only data, which is better since they can be
      merged when in .rodata.cst8.
      
      	* config/rs6000/linux64.h (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): Exclude
      	integer constants when -mcmodel=medium.
      
      From-SVN: r266069
      Alan Modra committed
    • [ARC] Add support for profiling in glibc. · 9de6af45
      Use PROFILE_HOOK to add mcount library calls in each toolchain.
      
      gcc/
      xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>
      
      	* config/arc/arc.h (FUNCTION_PROFILER): Redefine to empty.
      	* config/arc/elf.h (PROFILE_HOOK): Define.
      	* config/arc/linux.h (PROFILE_HOOK): Likewise.
      
      From-SVN: r266068
      Claudiu Zissulescu committed
    • [ARC] Do not emit ZOL in the presence of text jump tables. · dddc1815
      Avoid emitting lp instruction when in its ZOL body we find a jump
      table data in text section. One of the reason is the jump tables size
      can be changed latter on, hence the total ZOL length may be wrongly
      computed.
      
      gcc/
      xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>
      
      	* config/arc/arc.c (hwloop_optimize): Bailout when detecting a
      	jump table data in the text section.
      
      From-SVN: r266067
      Claudiu Zissulescu committed
    • [ARC] Update EH code. · 3fd6ae8a
      Our ABI says the blink is pushed first on stack followed by an unknown
      number of register saves, and finally by fp.  Hence we cannot use the
      EH_RETURN_ADDRESS macro as the stack is not finalized at that moment.
      The alternative is to use the eh_return pattern and to initialize all
      the bits after register allocation when the stack layout is finalized.
      
      gcc/
      xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>
      
      	* config/arc/arc.c (arc_eh_return_address_location): Repurpose it
      	to fit the eh_return pattern.
      	* config/arc/arc.md (eh_return): Define.
      	(VUNSPEC_ARC_EH_RETURN): Likewise.
      	* config/arc/arc-protos.h (arc_eh_return_address_location): Match
      	new implementation.
      	* config/arc/arc.h (EH_RETURN_HANDLER_RTX): Remove it.
      
      testsuite/
      xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>
      
      	* gcc.target/arc/builtin_eh.c: New test.
      
      From-SVN: r266066
      Claudiu Zissulescu committed
    • [ARC] Refurbish and improve prologue/epilogue functions. · 90b48013
      Reimplement how prologue and epilogue is emitted to accomodate
      enter/leave instructions, as well as improving the size of the
      existing techinques.
      
      The following modifications are added:
      
      - millicode thunk calls can be now selected regardless of the
        optimization level. However they are enabled for size optimizations
        by default.  Also, the millicode optimization is turned off when we
        compile for long jumps.
      
      - the compiler is able to use enter/leave instructions for prologue
        and epilogue. As these instructions are not ABI compatible we gurad
        them under a switch (i.e., -mcode-density-frame). When this option
        is on, the compiler will try emitting enter/leave instructions, if
        not, then millicode thunk calls (if enabled), and latter the regular
        push/pop instructions.
      
      - The prologue/epilogue is now optimized to use pointer walks, hence
        improving the chance to have push_s/pop_s instructions emitted. It
        also tries to combine the stack adjustments with load/store
        operations.
      
      gcc/
      xxxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>
      
              * common/config/arc/arc-common.c (arc_option_optimization_table):
              Millicode optimization is default on for size optimizations.
              * config/arc/arc-protos.h (arc_check_multi): New function.
              * config/arc/arc.c (RTX_OK_FOR_OFFSET_P): Rearange.
              (ENTER_LEAVE_START_REG): Define.
              (ENTER_LEAVE_END_REG): Likewise.
              (arc_override_options): Disable millicode when long calls option
              is on.
              (arc_frame_info): Change it from int to bool.
              (arc_compute_frame_size): Clean up.
              (arc_save_restore): Remove.
              (frame_save_reg): New function.
              (frame_restore_reg): Likewise.
              (arc_enter_leave_p): Likewise.
              (arc_save_callee_saves): Likewise.
              (arc_restore_callee_saves): Likewise.
              (arc_save_callee_enter): Likewise.
              (arc_restore_callee_leave): Likewise.
              (arc_save_callee_milli): Likewise.
              (arc_restore_callee_milli): Likewise.
              (arc_expand_prologue): Reimplement to emit enter/leave
              instructions.
              (arc_expand_epilogue): Likewise.
              (arc_check_multi): New function.
              * config/arc/arc.md (push_multi_fp): New pattern.
              (push_multi_fp_blink): Likewise.
              (pop_multi_fp): Likewise.
              (pop_multi_fp_blink): Likewise.
              (pop_multi_fp_ret): Likewise.
              (pop_multi_fp_blink_ret): Likewise.
              * config/arc/arc.opt (mmillicode): Update option.
              (mcode-density-frame): New option.
              * config/arc/predicates.md (push_multi_operand): New predicate.
              (pop_multi_operand): Likewise.
              * doc/invoke.texi (ARC): Update ARC options information.
      
      gcc/testsuite
      xxxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>
      
              * gcc.target/arc/firq-1.c: Update test.
              * gcc.target/arc/firq-3.c: Likewise.
              * gcc.target/arc/firq-4.c: Likewise.
              * gcc.target/arc/interrupt-6.c: Likewise.
      
      From-SVN: r266065
      Claudiu Zissulescu committed
    • [ARC] Add peephole rules to combine store/loads into double store/loads · 8fa2c211
      Simple peephole rules which combines multiple ld/st instructions into
      64-bit load/store instructions. It only works for architectures which
      are having double load/store option on.
      
      gcc/
      	Claudiu Zissulescu  <claziss@synopsys.com>
      
      	* config/arc/arc-protos.h (gen_operands_ldd_std): Add.
      	* config/arc/arc.c (operands_ok_ldd_std): New function.
      	(mem_ok_for_ldd_std): Likewise.
      	(gen_operands_ldd_std): Likewise.
      	* config/arc/arc.md: Add peephole2 rules for std/ldd.
      
      From-SVN: r266064
      Claudiu Zissulescu committed
    • toplev.c (output_stack_usage): Turn test on flag_stack_usage into test on stack_usage_file. · 2cc2582c
      	* toplev.c (output_stack_usage): Turn test on flag_stack_usage into
      	test on stack_usage_file.
      	(lang_dependent_init): Do not open the .su file if generating LTO.
      
      From-SVN: r266063
      Eric Botcazou committed
    • re PR rtl-optimization/87918 (ICE in simplify_binary_operation, at… · 6bddea17
      re PR rtl-optimization/87918 (ICE in simplify_binary_operation, at simplify-rtx.c:2153 since r264688)
      
      	PR rtl-optimization/87918
      	* simplify-rtx.c (simplify_merge_mask): For COMPARISON_P, use
      	simplify_gen_relational rather than simplify_gen_binary.
      
      	* gcc.target/i386/pr87918.c: New test.
      
      From-SVN: r266062
      Jakub Jelinek committed
    • tree-ssanames.h (set_range_info): Use value_range_base. · 9384a5af
      2018-11-13  Richard Biener  <rguenther@suse.de>
      
      	* tree-ssanames.h (set_range_info): Use value_range_base.
      	(get_range_info): Likewise.
      	* tree-ssanames.c (set_range_info): Likewise.
      	(get_range_info): Likewise.
      	* tree-vrp.c (value_range_base::union_helper): Split
      	out common parts of value_range[_base]::union_.
      	(value_range_base::union_): Update.
      	(value_range::union_): Likewise.
      	(determine_value_range_1): Use value_range_base.
      	(determine_value_range): Likewise.
      	* tree-vrp.h (value_range_base::union_helper): Move ...
      	(value_range::union_helper): ... from here.
      
      From-SVN: r266061
      Richard Biener committed
    • linux-unwind.h (_sig_ucontext_t): Remove. · b2a71af6
      2018-11-13  Xianmiao Qu  <xianmiao_qu@c-sky.com>
      
      	libgcc/
      	* config/csky/linux-unwind.h (_sig_ucontext_t): Remove.
      	(csky_fallback_frame_state): Modify the check of the 
      	instructions to adapt to changes in the kernel
      
      From-SVN: r266060
      Xianmiao Qu committed
    • misc.c (gnat_init_gcc_eh): Set -fnon-call-exceptions for the runtime on platforms where... · 77ece7f5
      	* gcc-interface/misc.c (gnat_init_gcc_eh): Set -fnon-call-exceptions
      	for the runtime on platforms where System.Machine_Overflow is true.
      
      From-SVN: r266057
      Eric Botcazou committed
    • Implement P0315R4, Lambdas in unevaluated contexts. · 0c1e0d63
      When lambdas were added in C++11 they were banned from unevaluated contexts
      as a way to avoid needing to deal with them in mangling or SFINAE.  This
      proposal avoids that with a more narrow proposal: lambdas never compare as
      equivalent (so we don't need to mangle them), and substitution failures
      within a lambda are hard errors.  Lambdas appearing in places that types
      couldn't previously have been declared introduces various complications; in
      particular, it seems likely to mean types with no linkage being used more
      broadly, risking ODR violations.  I want to follow up this patch with some
      related diagnostics.
      
      	* decl2.c (min_vis_expr_r): Handle LAMBDA_EXPR.
      	* mangle.c (write_expression): Handle LAMBDA_EXPR.
      	* parser.c (cp_parser_lambda_expression): Allow lambdas in
      	unevaluated context.  Start the tentative firewall sooner.
      	(cp_parser_lambda_body): Use cp_evaluated.
      	* pt.c (iterative_hash_template_arg): Handle LAMBDA_EXPR.
      	(tsubst_function_decl): Substitute a lambda even if it isn't
      	dependent.
      	(tsubst_lambda_expr): Use cp_evaluated.  Always complain.
      	(tsubst_copy_and_build) [LAMBDA_EXPR]: Do nothing if tf_partial.
      	* semantics.c (begin_class_definition): Allow in template parm list.
      	* tree.c (strip_typedefs_expr): Pass through LAMBDA_EXPR.
      	(cp_tree_equal): Handle LAMBDA_EXPR.
      
      From-SVN: r266056
      Jason Merrill committed