Commit Graph

164989 Commits

Author SHA1 Message Date
Jonathan Wakely f2e005857e Improve handling of pool_options::largest_required_pool_block
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
2018-11-13 22:57:53 +00:00
Jonathan Wakely d3306a84a6 Fix incorrect assertion when deallocating big block
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
2018-11-13 22:57:48 +00:00
Jonathan Wakely 6bdd58f73a Fix overflows in std::pmr::unsynchonized_pool_resource
* 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
2018-11-13 22:57:44 +00:00
Peter Bergner 874e50cbd5 re PR middle-end/87899 (r264897 cause mis-compiled native arm-linux-gnueabihf toolchain)
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
2018-11-13 16:14:11 -06:00
David Malcolm 620e594be5 Eliminate source_location in favor of location_t
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
2018-11-13 20:05:03 +00:00
Martin Sebor f9731de3db PR middle-end/81824 - Warn for missing attributes with function aliases
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
2018-11-13 12:57:51 -07:00
Michael Ploujnikov ee8393f465 extend.texi: Fix typo in the weakref description.
2018-11-13  Michael Ploujnikov  <michael.ploujnikov@oracle.com>

	* doc/extend.texi: Fix typo in the weakref description.

From-SVN: r266083
2018-11-13 19:30:00 +00:00
David Malcolm 95bdc37a75 Fix ChangeLog entry for r266080
From-SVN: r266082
2018-11-13 16:30:01 +00:00
Richard Biener 53467b5543 re PR tree-optimization/86991 (ICE in vectorizable_reduction, at tree-vect-loop.c:6919)
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
2018-11-13 16:14:37 +00:00
David Malcolm bbeeac91f9 Ensure that dump calls are guarded with dump_enabled_p
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
2018-11-13 16:10:13 +00:00
David Malcolm 9228f64cc2 Fix ICE with -fopt-info-inline (PR ipa/87955)
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
2018-11-13 15:59:57 +00:00
David Malcolm be40afb2b9 -fsave-optimization-record: compress the output using zlib
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
2018-11-13 15:52:45 +00:00
Aldy Hernandez f824e18c06 tree-vrp.c (value_range_base::dump): Dump type.
* 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
2018-11-13 15:46:46 +00:00
Martin Liska 7f9414c1df Move a test-case to a proper folder.
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
2018-11-13 15:28:26 +00:00
Richard Biener 41b32876b8 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
2018-11-13 15:07:53 +00:00
Martin Liska 160576e1ac Improve -fprofile-report.
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
2018-11-13 15:06:54 +00:00
Martin Liska e4db210dd8 Do not allow -mabi=ms and -fsanitize={,kernel-}address (PR sanitizer/87930).
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
2018-11-13 15:03:58 +00:00
Andre Vieira ca31798e7b [PATCH][GCC] Make DR_TARGET_ALIGNMENT compile time variable
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
2018-11-13 14:11:46 +00:00
Richard Biener be2b68e4cd re PR tree-optimization/87962 (ICE in vect_get_vec_def_for_operand_1, at tree-vect-stmts.c:1485)
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
2018-11-13 13:51:34 +00:00
Richard Biener a28dfaafc5 re PR tree-optimization/87967 (ICE in slpeel_duplicate_current_defs_from_edges)
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
2018-11-13 13:50:18 +00:00
Alan Modra a277ca89ac [RS6000] Don't put large integer constants in TOC for -mcmodel=medium
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
2018-11-13 23:31:36 +10:30
Claudiu Zissulescu 9de6af4572 [ARC] Add support for profiling in glibc.
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
2018-11-13 13:51:41 +01:00
Claudiu Zissulescu dddc181572 [ARC] Do not emit ZOL in the presence of text jump tables.
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
2018-11-13 13:51:30 +01:00
Claudiu Zissulescu 3fd6ae8a25 [ARC] Update EH code.
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
2018-11-13 13:51:19 +01:00
Claudiu Zissulescu 90b480138a [ARC] Refurbish and improve prologue/epilogue functions.
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
2018-11-13 13:07:12 +01:00
Claudiu Zissulescu 8fa2c211f7 [ARC] Add peephole rules to combine store/loads into double store/loads
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
2018-11-13 13:06:58 +01:00
Eric Botcazou 2cc2582cf8 toplev.c (output_stack_usage): Turn test on flag_stack_usage into test on stack_usage_file.
* 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
2018-11-13 09:56:46 +00:00
Jakub Jelinek 6bddea17a0 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
2018-11-13 10:45:50 +01:00
Richard Biener 9384a5afd6 tree-ssanames.h (set_range_info): Use value_range_base.
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
2018-11-13 09:30:49 +00:00
Xianmiao Qu b2a71af6e2 linux-unwind.h (_sig_ucontext_t): Remove.
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
2018-11-13 09:12:36 +00:00
Eric Botcazou 77ece7f52e misc.c (gnat_init_gcc_eh): Set -fnon-call-exceptions for the runtime on platforms where...
* 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
2018-11-13 09:02:33 +00:00
Jason Merrill 0c1e0d63fe Implement P0315R4, Lambdas in unevaluated contexts.
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
2018-11-12 23:49:09 -05:00
Jason Merrill 7d119905ab Avoid double substitution with complete explicit template arguments.
Previously, when we got a function template with explicit arguments for all
of the template parameters, we still did "deduction", which of course
couldn't deduce anything, but did other deduction-time checking of
non-dependent conversions and such.  This broke down with the unevaluated
lambdas patch (to follow): substituting into the lambda multiple times, once
to get the function type for deduction and then again to generate the actual
decl, doesn't work, since different substitutions of a lambda produce
different types.  I believe that skipping the initial substitution when we
have all the arguments is still conformant, and produces better diagnostics
for some testcases.

	* pt.c (fn_type_unification): If we have a full set of explicit
	arguments, go straight to substitution.

From-SVN: r266055
2018-11-12 23:47:20 -05:00
Jason Merrill 7c23c87c93 decl2.c (min_vis_expr_r, [...]): New.
* decl2.c (min_vis_expr_r, expr_visibility): New.

We weren't properly constraining visibility based on names that appear in
the mangled representation of expressions.  This was made more obvious
by the upcoming unevaluated lambdas patch.

	(min_vis_r): Call expr_visibility.
	(constrain_visibility_for_template): Likewise.

From-SVN: r266054
2018-11-12 23:46:20 -05:00
Jason Merrill a6bb6b07f7 Implement P0722R3, destroying operator delete.
A destroying operator delete takes responsibility for calling the destructor
for the object it is deleting; this is intended to be useful for sized
delete of a class allocated with a trailing buffer, where the compiler can't
know the size of the allocation, and so would pass the wrong size to the
non-destroying sized operator delete.

gcc/c-family/
	* c-cppbuiltin.c (c_cpp_builtins): Define
	__cpp_impl_destroying_delete.
gcc/cp/
	* call.c (std_destroying_delete_t_p, destroying_delete_p): New.
	(aligned_deallocation_fn_p, usual_deallocation_fn_p): Use
	destroying_delete_p.
	(build_op_delete_call): Handle destroying delete.
	* decl2.c (coerce_delete_type): Handle destroying delete.
	* init.c (build_delete): Don't call dtor with destroying delete.
	* optimize.c (build_delete_destructor_body): Likewise.
libstdc++-v3/
	* libsupc++/new (std::destroying_delete_t): New.

From-SVN: r266053
2018-11-12 23:40:01 -05:00
Jason Merrill 7de37c97b4 Implement P0780R2, pack expansion in lambda init-capture.
Mostly this was straightforward; the tricky bit was finding, in the
instantiation, the set of capture proxies built when instantiating the
init-capture.  The comment in lookup_init_capture_pack goes into detail.

	* parser.c (cp_parser_lambda_introducer): Parse pack init-capture.
	* pt.c (tsubst_pack_expansion): Handle init-capture packs.
	(lookup_init_capture_pack): New.
	(tsubst_expr) [DECL_EXPR]: Use it.
	(tsubst_lambda_expr): Remember field pack expansions for
	init-captures.

From-SVN: r266052
2018-11-12 23:34:59 -05:00
Jason Merrill 16e723e600 cp-tree.h (struct cp_evaluated): New.
* cp-tree.h (struct cp_evaluated): New.

This patch simplifies the saving/clearing/restoring of
cp_unevaluated_operand and c_inhibit_evaluation_warnings in the presence of
mid-block returns.

	* init.c (get_nsdmi): Use it.
	* parser.c (cp_parser_enclosed_template_argument_list): Use it.
	* pt.c (coerce_template_parms, tsubst_aggr_type): Use it.

From-SVN: r266051
2018-11-12 23:33:57 -05:00
Jason Merrill e4bd6d5e1f Change __cpp_explicit_bool to __cpp_conditional_explicit.
People objected to the old macro name as unclear, so it was changed.

	* c-cppbuiltin.c (c_cpp_builtins): Change __cpp_explicit_bool to
	__cpp_conditional_explicit.

From-SVN: r266050
2018-11-12 23:32:25 -05:00
Alan Modra 7877f4e000 [RS6000] secondary_reload and find_replacement
This patch removes a call only necessary when using reload.  It also
corrects a PRE_DEC address offset.

	* config/rs6000/rs6000.c (rs6000_secondary_reload_inner): Negate
	offset for PRE_DEC.
	(rs6000_secondary_reload_gpr): Don't call find_replacement.

From-SVN: r266049
2018-11-13 14:25:30 +10:30
Sandra Loosemore c6459f2dfa re PR middle-end/59634 (Documentation (info/man page): lack of information for cache size parameters (--param))
2018-11-13  Sandra Loosemore  <sandra@codesourcery.com>

	PR middle-end/59634

	gcc/
	* doc/invoke.texi (Optimize Options): Clarify that the
	l1-cache-line-size, l1-cache-size, and l2-cache-size parameters
	apply to data cache size.

From-SVN: r266048
2018-11-12 22:40:53 -05:00
Alan Modra 620f2b17da [RS6000] Comment fixes
* config/rs6000/rs6000.c (rs6000_emit_prologue): Comment fix.

From-SVN: r266047
2018-11-13 13:56:40 +10:30
Alan Modra 21edd5af33 [RS6000] Rotate testcase
The testcase exercises one of the rotate patterns.

gcc/
	* config/rs6000/predicates.md (logical_const_operand),
	(logical_operand): Correct comment.
gcc/testsuite/
	* gcc.target/powerpc/rotmask.c: New.

From-SVN: r266046
2018-11-13 13:50:22 +10:30
Alan Modra ee0d2718cd [RS6000] Hide insn not needing to be public
* config/rs6000/rs6000.md (addsi3_high): Prefix with '*'.

From-SVN: r266045
2018-11-13 13:42:45 +10:30
Alan Modra ab95037415 [RS6000] Ignore "c", "l" and "h" for register preference
This catches a few places where move insn patterns don't slightly
disparage CTR, LR and VRSAVE regs.  Also fixes the doc for the rs6000
h constraint, and removes an r->cl alternative covered by r->h.

	* gcc/doc/md.texi (Machine Constraints): Correct rs6000 h constraint
	description.
	* config/rs6000/rs6000.md (movsi_internal1): Delete MT%0 case
	covered by alternative.
	(movcc_internal1): Ignore h for register preference.
	(mov<mode>_hardfloat64): Likewise.
	(mov<mode>_softfloat): Ignore c, l, h for register preference.

From-SVN: r266044
2018-11-13 13:33:10 +10:30
Sandra Loosemore 37e5eefb92 re PR preprocessor/47823 (#pragma once is documented in a weird spot)
2018-11-12  Sandra Loosemore  <sandra@codesourcery.com>

	PR preprocessor/47823

	gcc/
	* doc/cpp.texi (Alternatives to Wrapper #ifndef): Move #pragma once
	documentation to...
	(Pragmas): ...here.  
	* doc/extend.texi (Pragmas): Note additional pragmas documented
	in the CPP manual.

From-SVN: r266043
2018-11-12 21:06:30 -05:00
GCC Administrator 85177e1075 Daily bump.
From-SVN: r266042
2018-11-13 00:16:30 +00:00
Kugan Vivekanandarajah 06a6b46a16 re PR target/86677 (popcount builtin detection is breaking some kernel build)
gcc/ChangeLog:

2018-11-13  Kugan Vivekanandarajah  <kuganv@linaro.org>

	PR middle-end/86677
	PR middle-end/87528
	* tree-scalar-evolution.c (expression_expensive_p): Make BUILTIN POPCOUNT
	as expensive when backend does not define it.

gcc/testsuite/ChangeLog:

2018-11-13  Kugan Vivekanandarajah  <kuganv@linaro.org>

	PR middle-end/86677
	PR middle-end/87528
	* g++.dg/tree-ssa/pr86544.C: Run only for target supporting popcount
	pattern.
	* gcc.dg/tree-ssa/popcount.c: Likewise.
	* gcc.dg/tree-ssa/popcount2.c: Likewise.
	* gcc.dg/tree-ssa/popcount3.c: Likewise.
	* gcc.target/aarch64/popcount4.c: New test.
	* lib/target-supports.exp (check_effective_target_popcountl): New.

From-SVN: r266039
2018-11-12 23:43:56 +00:00
Fredrik Noring 240ae287a1 MIPS: Default to --with-llsc for the R5900 Linux target as well
The Linux kernel requires and emulates LL and SC for the R5900 too.  The
special --without-llsc default for the R5900 is therefore not applicable
in that case.

Reviewed-by: Maciej W. Rozycki <macro@linux-mips.org>

2018-11-12  Fredrik Noring  <noring@nocrew.org>

	gcc/
	* config.gcc: Update with-llsc defaults for MIPS r5900.

From-SVN: r266038
2018-11-12 23:16:40 +00:00
Martin Liska e18240ffe2 Instrument only selected files (PR gcov-profile/87442).
2018-11-12  Martin Liska  <mliska@suse.cz>

	PR gcov-profile/87442
	* common.opt: Add -fprofile-filter-files and -fprofile-exclude-files
	options.
	* doc/invoke.texi: Document them.
	* tree-profile.c (parse_profile_filter): New.
	(parse_profile_file_filtering): Likewise.
	(release_profile_file_filtering): Likewise.
	(include_source_file_for_profile): Likewise.
	(tree_profiling): Filter source files based on the
	newly added options.
2018-11-12  Martin Liska  <mliska@suse.cz>

	PR gcov-profile/87442
	* gcc.dg/profile-filtering-1.c: New test.
	* gcc.dg/profile-filtering-2.c: New test.

From-SVN: r266037
2018-11-12 21:01:38 +00:00
Martin Liska e375da43d7 Fix documentation of __builtin_cpu_is and __builtin_cpu_supports for x86.
2018-11-12  Martin Liska  <mliska@suse.cz>

	PR target/87903
	* doc/extend.texi: Add missing values for __builtin_cpu_is and
	__builtin_cpu_supports for x86 target.

From-SVN: r266036
2018-11-12 20:58:02 +00:00