Commit Graph

171120 Commits

Author SHA1 Message Date
Ian Lance Taylor
de0f55dbb3 libgo: only build x/sys/cpu/cpu_gccgo.c on x86 systems
The C file has a build tag, but the procedure we use for building C
    files ignores build tags.
    
    This should fix the libgo build on non-x86 systems.
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/194378

From-SVN: r275544
2019-09-09 20:08:32 +00:00
Bernd Edlinger
b3baefb205 expmed.c (extract_bit_field): Update function comment regarding alt_rtl.
2019-09-09  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        * expmed.c (extract_bit_field): Update function comment
        regarding alt_rtl.
        * expr.c (expand_expr_real): Update function comment
        regarding alt_rtl.
        (expand_misaligned_mem_ref): New helper function.
        (expand_expr_real_2): Use expand_misaligned_mem_ref.
        Remove duplicate assignment to "base" at case MEM_REF.
        Remove a shadowed variable "unsignedp" at case VCE.

From-SVN: r275541
2019-09-09 19:44:15 +00:00
Ian Lance Taylor
b7f55c8e35 compiler: don't use predeclared location for implicit runtime import
For the main package we add an implicit import of the runtime package,
    to ensure that it is initialized.  That import used the predeclared
    location, which caused various tests, notably Named_type::is_builtin,
    to treat these imported names as builtin.  Start using a real location,
    so that those tests do the right thing.
    
    By the way, this implicit import is a partial cause of golang/go#19773.
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/194337

From-SVN: r275540
2019-09-09 19:41:05 +00:00
Ian Lance Taylor
4f0eaba24d compiler: traverse types of constant expressions
We forgot to ever traverse types of constant expressions.  This rarely
    makes a difference--evidently, since nobody noticed--but it does
    matter when we inline constant expressions: we need to ensure that the
    type is visible to the importing code.
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/194317

From-SVN: r275539
2019-09-09 19:06:46 +00:00
Richard Sandiford
0b0310e9a0 Remove global REG_SETs
We currently maintain global REG_SET versions of fixed_reg_set
and regs_invalidated_by_call.  With bitmap_view, we can instead
operate directly on the underlying HARD_REG_SETs, avoiding the
need to keep the two pieces of data in sync.

I have a series of patches that removes the assumption that there's
a single global ABI for all functions in the translation unit,
which includes not relying on having a global regs_invalidated_by_call.
Removing the REG_SET equivalent is one step to doing that.

Note that the affected DF code is used for EH edges or dumping only,
so shouldn't be performance critical.

2019-09-09  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* regset.h (regs_invalidated_by_call_regset): Delete.
	(fixed_reg_set_regset): Likewise.
	* reginfo.c (regs_invalidated_by_call_regset): Likewise.
	(fixed_reg_set_regset, persistent_obstack): Likewise.
	(init_reg_sets_1, globalize_reg): Update accordingly.
	* df.h (df_print_regset, df_print_word_regset): Take a const_bitmap
	instead of a bitmap.
	* df-core.c (df_print_regset, df_print_word_regset): Likewise.
	* df-problems.c (df_rd_local_compute): Use regs_invalidated_by_call
	instead of regs_invalidated_by_call_regset.
	(df_lr_confluence_n, df_md_confluence_n): Likewise.
	* df-scan.c (df_scan_start_dump): Likewise.
	* dse.c (copy_fixed_regs): Likewise.
	* config/sh/sh.c (sh_find_equiv_gbr_addr): Likewise.

From-SVN: r275537
2019-09-09 18:01:55 +00:00
Richard Sandiford
148909bc70 Add "fast" conversions from arrays to bitmaps
This patch adds a bitmap_view<X> class that creates a read-only,
on-stack bitmap representation of an array-like object X.  The main
use case is to allow HARD_REG_SETs to be used in REG_SET (i.e. bitmap)
operations.

For now it only handles constant-sized arrays, but I've tried to
define the types in a way that could handle variable-sized arrays
in future (although less efficiently).  E.g. this might be useful
for combining bitmaps and sbitmaps.

For the read-only view to work as intended, I needed to make
bitmap_bit_p take a const_bitmap instead of a bitmap.  Logically
the bitmap really is read-only, but we update the "current" and
"indx" fields of the bitmap_head after doing a search.

2019-09-09  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* array-traits.h: New file.
	* coretypes.h (array_traits, bitmap_view): New types.
	* bitmap.h: Include "array-traits.h"
	(bitmap_bit_p): Take a const_bitmap instead of a bitmap.
	(base_bitmap_view, bitmap_view): New classes.
	* bitmap.c (bitmap_bit_p): Take a const_bitmap instead of a bitmap.
	* hard-reg-set.h: Include array-traits.h.
	(array_traits<HARD_REG_SET>): New struct.
	* regset.h (IOR_REG_SET_HRS): New macro.
	* loop-iv.c (simplify_using_initial_values): Use IOR_REG_SET_HRS
	rather than iterating over each hard register.
	* sched-deps.c (sched_analyze_insn): Likewise.
	* sel-sched-ir.c (setup_id_implicit_regs): Likewise.

From-SVN: r275536
2019-09-09 18:01:47 +00:00
Richard Sandiford
75f4e3a1b3 Tweak interface to ira-build.c:ior_hard_reg_conflicts
This patch makes ior_hard_reg_conflicts take a const_hard_reg_set
rather than a pointer, so that it can be passed a temporary object
in later patches.

2019-09-09  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* ira-int.h (ior_hard_reg_conflicts): Take a const_hard_reg_set
	instead of a HARD_REG_SET *.
	* ira-build.c (ior_hard_reg_conflicts): Likewise.
	(ira_build): Update call accordingly.
	* ira-emit.c (add_range_and_copies_from_move_list): Likewise.

From-SVN: r275535
2019-09-09 17:59:54 +00:00
Richard Sandiford
a85796511b Remove hard_reg_set_equal_p
Use "x == y" instead of "hard_reg_set_equal_p (x, y)".

2019-09-09  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* hard-reg-set.h (HARD_REG_SET::operator==): New function.
	(HARD_REG_SET::operator!=): Likewise.
	(hard_reg_set_equal_p): Delete.
	* cfgcleanup.c (old_insns_match_p): Use == instead of
	hard_reg_set_equal_p and != instead of !hard_reg_set_equal_p.
	* ira-color.c (allocno_hard_regs_hasher::equal): Likewise.
	(add_allocno_hard_regs_to_forest): Likewise.
	(setup_allocno_available_regs_num): Likewise.
	* ira.c (setup_pressure_classes): Likewise.
	(setup_allocno_and_important_classes): Likewise.
	(setup_reg_class_relations): Likewise.
	* lra-lives.c (process_bb_lives): Likewise.
	* reg-stack.c (change_stack, convert_regs_1): Likewise.

From-SVN: r275534
2019-09-09 17:59:41 +00:00
Richard Sandiford
4897c5aaa7 Remove IOR_COMPL_HARD_REG_SET
Use "x |= ~y" instead of "IOR_COMPL_HARD_REG_SET (x, y)", or just
"x | ~y" if the result is a temporary.

2019-09-09  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* hard-reg-set.h (IOR_COMPL_HARD_REG_SET): Delete.
	* config/aarch64/cortex-a57-fma-steering.c (rename_single_chain):
	Use "|~" instead of IOR_COMPL_HARD_REG_SET.
	* config/aarch64/falkor-tag-collision-avoidance.c (init_unavailable):
	Likewise.
	* ira-build.c (ira_create_object, ira_set_allocno_class): Likewise.
	* ira.c (setup_reg_renumber): Likewise.
	* lra-assigns.c (find_hard_regno_for_1): Likewise.
	* regrename.c (regrename_find_superclass): Likewise.
	* reload1.c (find_reg): Likewise.

From-SVN: r275533
2019-09-09 17:59:29 +00:00
Richard Sandiford
d15e513184 Remove AND_COMPL_HARD_REG_SET
Use "x &= ~y" instead of "AND_COMPL_HARD_REG_SET (x, y)", or just
"x & ~y" if the result is a temporary.  This means that we're splitting
it into two operations, but the compiler should be able to combine them
for reasonable values of FIRST_PSEUDO_REGISTER.

2019-09-09  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* hard-reg-set.h (AND_COMPL_HARD_REG_SET): Delete.
	* caller-save.c (setup_save_areas): Use "&~" instead of
	AND_COMPL_HARD_REG_SET.
	(save_call_clobbered_regs): Likewise.
	* config/epiphany/epiphany.c (epiphany_conditional_register_usage):
	Likewise.
	* config/frv/frv.c (frv_ifcvt_modify_tests): Likewise.
	* config/gcn/gcn.c (gcn_md_reorg): Likewise.
	* config/i386/i386.c (ix86_conditional_register_usage): Likewise.
	* config/mips/mips.c (mips_class_max_nregs): Likewise.
	(mips_conditional_register_usage): Likewise.
	* config/sh/sh.c (output_stack_adjust): Likewise.
	* ira-color.c (form_allocno_hard_regs_nodes_forest): Likewise.
	(setup_profitable_hard_regs): Likewise.
	(get_conflict_and_start_profitable_regs): Likewise.
	* ira-conflicts.c (print_allocno_conflicts): Likewise.
	(ira_build_conflicts): Likewise.
	* ira-costs.c (restrict_cost_classes): Likewise.
	(setup_regno_cost_classes_by_aclass): Likewise.
	* ira-lives.c (process_bb_node_lives): Likewise.
	* ira.c (setup_class_hard_regs, setup_reg_subclasses): Likewise.
	(setup_class_subset_and_memory_move_costs, setup_pressure_classes)
	(setup_allocno_and_important_classes, setup_class_translate_array)
	(setup_reg_class_relations, setup_prohibited_class_mode_regs):
	Likewise.
	* lra-assigns.c (find_hard_regno_for_1): Likewise.
	* lra-constraints.c (prohibited_class_reg_set_mode_p): Likewise.
	(process_alt_operands, inherit_in_ebb): Likewise.
	* lra-eliminations.c (update_reg_eliminate): Likewise.
	* lra-lives.c (process_bb_lives): Likewise.
	* reload1.c (update_eliminables_and_spill, reload_as_needed): Likewise.
	* resource.c (find_dead_or_set_registers): Likewise.
	(mark_target_live_regs): Likewise.
	* sched-deps.c (get_implicit_reg_pending_clobbers): Likewise.
	* sel-sched.c (mark_unavailable_hard_regs): Likewise.
	(implicit_clobber_conflict_p): Likewise.
	* shrink-wrap.c (requires_stack_frame_p): Likewise.
	(try_shrink_wrapping): Likewise.

From-SVN: r275532
2019-09-09 17:59:25 +00:00
Richard Sandiford
44942965f4 Remove IOR_HARD_REG_SET
Use "x |= y" instead of "IOR_HARD_REG_SET (x, y)" (or just "x | y"
if the result is a temporary).

2019-09-09  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* hard-reg-set.h (HARD_REG_SET::operator|): New function.
	(HARD_REG_SET::operator|=): Likewise.
	(IOR_HARD_REG_SET): Delete.
	* config/gcn/gcn.c (gcn_md_reorg): Use "|" instead of
	IOR_HARD_REG_SET.
	* config/m32c/m32c.c (m32c_register_move_cost): Likewise.
	* config/s390/s390.c (s390_adjust_loop_scan_osc): Likewise.
	* final.c (collect_fn_hard_reg_usage): Likewise.
	* hw-doloop.c (scan_loop, optimize_loop): Likewise.
	* ira-build.c (merge_hard_reg_conflicts): Likewise.
	(ior_hard_reg_conflicts, create_cap_allocno, propagate_allocno_info)
	(propagate_some_info_from_allocno): Likewise.
	(copy_info_to_removed_store_destinations): Likewise.
	* ira-color.c (add_allocno_hard_regs_to_forest, assign_hard_reg)
	(allocno_reload_assign, ira_reassign_pseudos): Likewise.
	(fast_allocation): Likewise.
	* ira-conflicts.c (ira_build_conflicts): Likewise.
	* ira-lives.c (make_object_dead, process_single_reg_class_operands)
	(process_bb_node_lives): Likewise.
	* ira.c (setup_pressure_classes, setup_reg_class_relations): Likewise.
	* lra-assigns.c (find_hard_regno_for_1): Likewise.
	(setup_live_pseudos_and_spill_after_risky_transforms): Likewise.
	* lra-constraints.c (process_alt_operands, inherit_in_ebb): Likewise.
	* lra-eliminations.c (spill_pseudos, update_reg_eliminate): Likewise.
	* lra-lives.c (mark_pseudo_dead, check_pseudos_live_through_calls)
	(process_bb_lives): Likewise.
	* lra-spills.c (assign_spill_hard_regs): Likewise.
	* postreload.c (reload_combine): Likewise.
	* reginfo.c (init_reg_sets_1): Likewise.
	* regrename.c (merge_overlapping_regs, find_rename_reg)
	(merge_chains): Likewise.
	* reload1.c (maybe_fix_stack_asms, order_regs_for_reload, find_reg)
	(find_reload_regs, finish_spills, choose_reload_regs_init)
	(emit_reload_insns): Likewise.
	* reorg.c (redundant_insn): Likewise.
	* resource.c (find_dead_or_set_registers, mark_set_resources)
	(mark_target_live_regs): Likewise.
	* rtlanal.c (find_all_hard_reg_sets): Likewise.
	* sched-deps.c (sched_analyze_insn): Likewise.
	* sel-sched.c (mark_unavailable_hard_regs): Likewise.
	(find_best_reg_for_expr): Likewise.
	* shrink-wrap.c (try_shrink_wrapping): Likewise.

From-SVN: r275531
2019-09-09 17:59:19 +00:00
Richard Sandiford
dc333d8ff6 Remove AND_HARD_REG_SET
Use "x &= y" instead of "AND_HARD_REG_SET (x, y)" (or just "x & y"
if the result is a temporary).

2019-09-09  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* hard-reg-set.h (HARD_REG_SET::operator&): New function.
	(HARD_REG_SET::operator&): Likewise.
	(AND_HARD_REG_SET): Delete.
	* caller-save.c (setup_save_areas): Use "&" instead of
	AND_HARD_REG_SET.
	(save_call_clobbered_regs): Likewise.
	* config/gcn/gcn.c (gcn_md_reorg): Likewise.
	* config/m32c/m32c.c (reduce_class): Likewise.
	* config/rs6000/rs6000.c (rs6000_register_move_cost): Likewise.
	* final.c (get_call_reg_set_usage): Likewise.
	* ira-color.c (add_allocno_hard_regs_to_forest): Likewise.
	(setup_left_conflict_sizes_p): Likewise.
	* ira-conflicts.c (print_allocno_conflicts): Likewise.
	(ira_build_conflicts): Likewise.
	* ira-costs.c (restrict_cost_classes): Likewise.
	* ira.c (setup_stack_reg_pressure_class, setup_class_translate_array)
	(setup_reg_class_relations): Likewise.
	* reginfo.c (init_reg_sets_1, record_subregs_of_mode): Likewise.
	* reload1.c (maybe_fix_stack_asms, finish_spills): Likewise.
	* resource.c (find_dead_or_set_registers): Likewise.
	* sel-sched.c (mark_unavailable_hard_regs): Likewise.

From-SVN: r275530
2019-09-09 17:59:14 +00:00
Richard Sandiford
50b3f54d55 Remove COMPL_HARD_REG_SET
"COMPL_HARD_REG_SET (x, y)" becomes "x = ~y".

2019-09-09  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* hard-reg-set.h (HARD_REG_SET::operator~): New function.
	(COMPL_HARD_REG_SET): Delete.
	* config/c6x/c6x.c (c6x_call_saved_register_used): Use ~ instead
	of COMPL_HARD_REG_SET.
	(try_rename_operands): Likewise.
	* config/sh/sh.c (push_regs): Likewise.
	* lra-assigns.c (find_hard_regno_for_1): Likewise.
	* lra-constraints.c (contains_reg_p): Likewise.
	* reload1.c (finish_spills, choose_reload_regs_init): Likewise.

From-SVN: r275529
2019-09-09 17:59:10 +00:00
Richard Sandiford
6576d24538 Remove COPY_HARD_REG_SET
This patch replaces "COPY_HARD_REG_SET (x, y)" with "x = y".

2019-09-09  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* hard-reg-set.h (COPY_HARD_REG_SET): Delete.
	* caller-save.c (save_call_clobbered_regs): Use assignment instead
	of COPY_HARD_REG_SET.
	* config/epiphany/epiphany.c (epiphany_compute_frame_size): Likewise.
	(epiphany_conditional_register_usage): Likewise.
	* config/frv/frv.c (frv_ifcvt_modify_tests): Likewise.
	* config/gcn/gcn.c (gcn_md_reorg): Likewise.
	* config/ia64/ia64.c (ia64_compute_frame_size): Likewise.
	* config/m32c/m32c.c (m32c_register_move_cost): Likewise.
	* config/m68k/m68k.c (m68k_conditional_register_usage): Likewise.
	* config/mips/mips.c (mips_class_max_nregs): Likewise.
	* config/pdp11/pdp11.c (pdp11_conditional_register_usage): Likewise.
	* config/rs6000/rs6000.c (rs6000_register_move_cost): Likewise.
	* config/sh/sh.c (output_stack_adjust): Likewise.
	* final.c (collect_fn_hard_reg_usage): Likewise.
	(get_call_reg_set_usage): Likewise.
	* ira-build.c (ira_create_object, remove_low_level_allocnos)
	(ira_flattening): Likewise.
	* ira-color.c (add_allocno_hard_regs, add_allocno_hard_regs_to_forest)
	(setup_left_conflict_sizes_p, setup_profitable_hard_regs)
	(get_conflict_and_start_profitable_regs, allocno_reload_assign)
	(ira_reassign_pseudos): Likewise.
	* ira-conflicts.c (print_allocno_conflicts): Likewise.
	(ira_build_conflicts): Likewise.
	* ira-costs.c (restrict_cost_classes): Likewise.
	(setup_regno_cost_classes_by_aclass): Likewise.
	* ira.c (setup_class_hard_regs, setup_alloc_regs): Likewise.
	(setup_reg_subclasses, setup_class_subset_and_memory_move_costs)
	(setup_stack_reg_pressure_class, setup_pressure_classes)
	(setup_allocno_and_important_classes, setup_class_translate_array)
	(setup_reg_class_relations, setup_prohibited_class_mode_regs)
	(ira_setup_eliminable_regset): Likewise.
	* lra-assigns.c (find_hard_regno_for_1): Likewise.
	(setup_live_pseudos_and_spill_after_risky_transforms): Likewise.
	* lra-constraints.c (prohibited_class_reg_set_mode_p): Likewise.
	(process_alt_operands, inherit_in_ebb): Likewise.
	* lra-lives.c (process_bb_lives): Likewise.
	* lra-spills.c (assign_spill_hard_regs): Likewise.
	* lra.c (lra): Likewise.
	* mode-switching.c (new_seginfo): Likewise.
	* postreload.c (reload_combine): Likewise.
	* reg-stack.c (straighten_stack): Likewise.
	* reginfo.c (save_register_info, restore_register_info): Likewise.
	(init_reg_sets_1, record_subregs_of_mode): Likewise
	* regrename.c (create_new_chain, rename_chains): Likewise.
	* reload1.c (order_regs_for_reload, find_reg): Likewise.
	(find_reload_regs): Likewise.
	* resource.c (find_dead_or_set_registers): Likewise.
	(mark_target_live_regs): Likewise.
	* sel-sched.c (mark_unavailable_hard_regs): Likewise.

From-SVN: r275528
2019-09-09 17:59:06 +00:00
Richard Sandiford
e8448ba530 Make note_stores take an rtx_insn
I have a series of patches that (as a side effect) makes all rtl
passes use the information collected by -fipa-ra.  This showed up a
latent bug in the liveness tracking in regrename.c, which doesn't take
CALL_INSN_FUNCTION_USAGE into account when processing clobbers.

This actually seems to be quite a common problem with passes that use
note_stores; only a handful remember to walk CALL_INSN_FUNCTION_USAGE
too.  I think it was just luck that I saw it with regrename first.

This patch tries to make things more robust by passing an insn rather
than a pattern to note_stores.  The old function is still available
as note_pattern_stores for the few places that need it.

When updating callers, I've erred on the side of using note_stores
rather than note_pattern_stores, because IMO note_stores should be
the default choice and we should only use note_pattern_stores if
there's a specific reason.  Specifically:

* For cselib.c, "body" may be a COND_EXEC_CODE instead of the main
  insn pattern.

* For ira.c, I wasn't sure whether extending no_equiv to
  CALL_INSN_FUNCTION_USAGE really made sense, since we don't do that
  for normal call-clobbered registers.  Same for mark_not_eliminable
  in reload1.c

* Some other places only have a pattern available, and since those
  places wouldn't benefit from walking CALL_INSN_FUNCTION_USAGE,
  it seemed better to alter the code as little as possible.

* In the config/ changes, quite a few callers have already weeded
  out CALL insns.  It still seemed better to use note_stores rather
  than prematurely optimise.  (note_stores should tail call to
  note_pattern_stores once it sees that the insn isn't a call.)

The patch also documents what SETs mean in CALL_INSN_FUNCTION_USAGE.

2019-09-09  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* rtl.h (CALL_INSN_FUNCTION_USAGE): Document what SETs mean.
	(note_pattern_stores): Declare.
	(note_stores): Take an rtx_insn *.
	* rtlanal.c (set_of): Use note_pattern_stores instead of note_stores.
	(find_all_hard_reg_sets): Pass the insn rather than its pattern to
	note_stores.  Remove explicit handling of CALL_INSN_FUNCTION_USAGE.
	(note_stores): Take an rtx_insn * as argument and process
	CALL_INSN_FUNCTION_USAGE.  Rename old function to...
	(note_pattern_stores): ...this.
	(find_first_parameter_load): Pass the insn rather than
	its pattern to note_stores.
	* alias.c (memory_modified_in_insn_p, init_alias_analysis): Likewise.
	* caller-save.c (setup_save_areas, save_call_clobbered_regs)
	(insert_one_insn): Likewise.
	* combine.c (combine_instructions): Likewise.
	(likely_spilled_retval_p): Likewise.
	(try_combine): Use note_pattern_stores instead of note_stores.
	(record_dead_and_set_regs): Pass the insn rather than its pattern
	to note_stores.
	(reg_dead_at_p): Likewise.
	* config/bfin/bfin.c (workaround_speculation): Likewise.
	* config/c6x/c6x.c (maybe_clobber_cond): Likewise.  Take an rtx_insn *
	rather than an rtx.
	* config/frv/frv.c (frv_registers_update): Use note_pattern_stores
	instead of note_stores.
	(frv_optimize_membar_local): Pass the insn rather than its pattern
	to note_stores.
	* config/gcn/gcn.c (gcn_md_reorg): Likewise.
	* config/i386/i386.c (ix86_avx_u128_mode_after): Likewise.
	* config/mips/mips.c (vr4130_true_reg_dependence_p): Likewise.
	(r10k_needs_protection_p, mips_sim_issue_insn): Likewise.
	(mips_reorg_process_insns): Likewise.
	* config/s390/s390.c (s390_regs_ever_clobbered): Likewise.
	* config/sh/sh.c (flow_dependent_p): Likewise.  Take rtx_insn *s
	rather than rtxes.
	* cse.c (delete_trivially_dead_insns): Pass the insn rather than
	its pattern to note_stores.
	* cselib.c (cselib_record_sets): Use note_pattern_stores instead
	of note_stores.
	* dce.c (mark_nonreg_stores): Remove the "body" parameter and pass
	the insn to note_stores.
	(prescan_insns_for_dce): Update call accordingly.
	* ddg.c (mem_write_insn_p): Pass the insn rather than its pattern
	to note_stores.
	* df-problems.c (can_move_insns_across): Likewise.
	* dse.c (emit_inc_dec_insn_before, replace_read): Likewise.
	* function.c (assign_parm_setup_reg): Likewise.
	* gcse-common.c (record_last_mem_set_info_common): Likewise.
	* gcse.c (load_killed_in_block_p, compute_hash_table_work): Likewise.
	(single_set_gcse): Likewise.
	* ira.c (validate_equiv_mem): Likewise.
	(update_equiv_regs): Use note_pattern_stores rather than note_stores
	for no_equiv.
	* loop-doloop.c (doloop_optimize): Pass the insn rather than its
	pattern to note_stores.
	* loop-invariant.c (calculate_loop_reg_pressure): Likewise.
	* loop-iv.c (simplify_using_initial_values): Likewise.
	* mode-switching.c (optimize_mode_switching): Likewise.
	* optabs.c (emit_libcall_block_1): Likewise.
	(expand_atomic_compare_and_swap): Likewise.
	* postreload-gcse.c (load_killed_in_block_p): Likewise.
	(record_opr_changes): Likewise.  Remove explicit handling of
	CALL_INSN_FUNCTION_USAGE.
	* postreload.c (reload_combine, reload_cse_move2add): Likewise.
	* regcprop.c (kill_clobbered_values): Likewise.
	(copyprop_hardreg_forward_1): Pass the insn rather than its pattern
	to note_stores.
	* regrename.c (build_def_use): Likewise.
	* reload1.c (reload):  Use note_pattern_stores instead of note_stores
	for mark_not_eliminable.
	(reload_as_needed): Pass the insn rather than its pattern
	to note_stores.
	(emit_output_reload_insns): Likewise.
	* resource.c (mark_target_live_regs): Likewise.
	* sched-deps.c (init_insn_reg_pressure_info): Likewise.
	* sched-rgn.c (sets_likely_spilled): Use note_pattern_stores
	instead of note_stores.
	* shrink-wrap.c (try_shrink_wrapping): Pass the insn rather than
	its pattern to note_stores.
	* stack-ptr-mod.c (pass_stack_ptr_mod::execute): Likewise.
	* var-tracking.c (adjust_insn, add_with_sets): Likewise.

From-SVN: r275527
2019-09-09 17:58:59 +00:00
Richard Sandiford
504279ae0a Simplify the implementation of HARD_REG_SET
We have two styles of HARD_REG_SET: a single integer based on
HOST_WIDEST_FAST_INT (used when FIRST_PSEUDO_REGISTER is small enough)
or an array of integers.  One of the nice properties of this arrangement
is that:

  void foo (const HARD_REG_SET);

is passed by value as an integer when the set is small enough and
by reference otherwise.

(This is in constrast to "const HARD_REG_SET &", which would always
be passed by reference, and in contrast to passing a structure wrapper
like "struct s { T elts[1]; }" by value, where the structure might be
passed like a T or by reference, depending on the ABI.)

However, one of the disadvantages of using an array is that simple
assignment doesn't work.  We need to use COPY_HARD_REG_SET instead.

This patch uses a structure wrapper around the array, and preserves
the above "nice property" using a new const_hard_reg_set typedef.
The patch also removes the manual unrolling for small array sizes;
I think these days we can rely on the compiler to do that for us.

This meant fixing two port-specific quirks:

- epiphany passed NULL as a HARD_REG_SET whose value doesn't matter.
  The patch passes the NO_REGS set instead.

- ia64 reused TEST_HARD_REG_BIT and SET_HARD_REG_BIT for arrays that
  are bigger than HARD_REG_SET.  The patch just open-codes them.

The patch is probably being too conservative.  Very few places actually
take advantage of the "nice property" above, and we could have a
cleaner interface if we used a structure wrapper for all cases.

2019-09-09  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* hard-reg-set.h (HARD_REG_SET): Define using a typedef rather
	than a #define.  Use a structure rather than an array as the
	fallback definition.  Remove special cases for low array sizes.
	(const_hard_reg_set): New typedef.
	(hard_reg_set_subset_p): Use it instead of "const HARD_REG_SET".
	(hard_reg_set_equal_p, hard_reg_set_intersect_p): Likewise.
	(hard_reg_set_empty_p): Likewise.
	(SET_HARD_REG_BIT): Use a function rather than a macro to
	handle the case in which HARD_REG_SET is a structure.
	(CLEAR_HARD_REG_BIT, TEST_HARD_REG_BIT, CLEAR_HARD_REG_SET)
	(SET_HARD_REG_SET, COPY_HARD_REG_SET, COMPL_HARD_REG_SET)
	(AND_HARD_REG_SET, AND_COMPL_HARD_REG_SET, IOR_HARD_REG_SET)
	(IOR_COMPL_HARD_REG_SET): Likewise.
	(hard_reg_set_iterator::pset): Constify the pointer target.
	(hard_reg_set_iter_init): Take a const_hard_reg_set instead
	of a "const HARD_REG_SET".  Update the handling of non-integer
	HARD_REG_SETs.
	* recog.h: Test HARD_CONST instead of CLEAR_HARD_REG_SET.
	* reload.h: Likewise.
	* rtl.h (choose_hard_reg_mode): Remove unnecessary line break.
	* regs.h (in_hard_reg_set_p): Take a const_hard_reg_set instead
	of a "const HARD_REG_SET".
	(overlaps_hard_reg_set_p, range_overlaps_hard_reg_set_p): Likewise.
	(range_in_hard_reg_set_p): Likewise.
	* ira-costs.c (restrict_cost_classes): Likewise.
	* shrink-wrap.c (move_insn_for_shrink_wrap): Likewise.
	* config/epiphany/resolve-sw-modes.c (pass_resolve_sw_modes::execute):
	Pass a NO_REGS HARD_REG_SET rather than NULL to emit_set_fp_mode.
	* config/ia64/ia64.c (rws_insn): In the CHECKING_P version,
	use unsigned HOST_WIDEST_FAST_INT rather than HARD_REG_ELT_TYPE.
	(rws_insn_set, rws_insn_test): In the CHECKING_P version,
	take an unsigned int and open-code the HARD_REG_SET operations.

From-SVN: r275526
2019-09-09 17:58:36 +00:00
Segher Boessenkool
812b3c62a7 rs6000: Update rlwinm-[012].c
gcc/testsuite/
	* gcc.target/powerpc/rlwinm-0.c: Adjust expected instruction counts.
	* gcc.target/powerpc/rlwinm-1.c: Ditto.
	* gcc.target/powerpc/rlwinm-2.c: Ditto.

From-SVN: r275525
2019-09-09 19:57:39 +02:00
Edward Smith-Rowland
3b63f5376a Forgot Changelog from latest commit.
From-SVN: r275524
2019-09-09 17:18:52 +00:00
Edward Smith-Rowland
324fb1020f Update docs for recent <span> and constexpr lib changes.
2019-09-09  Edward Smith-Rowland  <3dw4rd@verizon.net>

	Update docs for recent <span> and constexpr lib changes.
	* doc/xml/manual/status_cxx2020.xml: Update p0202r3, p0858r0, p0879r0,
	p1023r0, p1085r2 status.
	* doc/html/manual/status.html: Regenerate.

From-SVN: r275522
2019-09-09 16:54:31 +00:00
Richard Sandiford
f78f73cbd2 Remove bt-load.c
bt-load.c has AFAIK been dead code since the removal of the SH5 port
in 2016.  I have a patch series that would need to update the liveness
tracking in a nontrivial way, so it seemed better to remove the pass
rather than install an untested and probably bogus change.

2019-09-09  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* Makefile.in (OBJS): Remove bt-load.o.
	* doc/invoke.texi (fbranch-target-load-optimize): Delete.
	(fbranch-target-load-optimize2, fbtr-bb-exclusive): Likewise.
	* common.opt (fbranch-target-load-optimize): Mark as Ignore and
	document that the option no longer does anything.
	(fbranch-target-load-optimize2, fbtr-bb-exclusive): Likewise.
	* target.def (branch_target_register_class): Delete.
	(branch_target_register_callee_saved): Likewise.
	* doc/tm.texi.in (TARGET_BRANCH_TARGET_REGISTER_CLASS): Likewise.
	(TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED): Likewise.
	* doc/tm.texi: Regenerate.
	* tree-pass.h (make_pass_branch_target_load_optimize1): Delete.
	(make_pass_branch_target_load_optimize2): Likewise.
	* passes.def (pass_branch_target_load_optimize1): Likewise.
	(pass_branch_target_load_optimize2): Likewise.
	* targhooks.h (default_branch_target_register_class): Likewise.
	* targhooks.c (default_branch_target_register_class): Likewise.
	* opt-suggestions.c (test_completion_valid_options): Remove
	-fbtr-bb-exclusive from the list of test options.
	* bt-load.c: Remove.

From-SVN: r275521
2019-09-09 16:52:12 +00:00
Barnaby Wilks
a6edd18cb3 match.pd: Add flag_unsafe_math_optimizations check before deciding on the widest type in...
2019-09-09  Barnaby Wilks  <barnaby.wilks@arm.com>

	* match.pd: Add flag_unsafe_math_optimizations check
	before deciding on the widest type in a binary math operation.

	* gcc.dg/fold-binary-math-casts.c: New test.

From-SVN: r275518
2019-09-09 12:05:36 +00:00
Martin Liska
f48ef52e40 Update comment of removed options.
2019-09-09  Martin Liska  <mliska@suse.cz>

	* config/i386/i386.opt: Update comment of removed
	options that are preserved only for backward
	compatibility.
2019-09-09  Martin Liska  <mliska@suse.cz>

	* c.opt: Update comment of removed
	options that are preserved only for backward
	compatibility.

From-SVN: r275517
2019-09-09 11:47:54 +00:00
Antony Polukhin
d0e086ae4f Minor std::to_chars optimisation for base 10
__to_chars_10_impl is quite fast. According to the IACA the main loop
takes only 6.0 cycles, the whole function with one iteration takes
10.0 cycles. Replacing the __first[pos] and __first[pos - 1] with
__first[0] and __first[1] drops the function time to 7.53 cycles.

2019-09-09  Antony Polukhin  <antoshkka@gmail.com>

	* include/bits/charconv.h (__detail::__to_chars_10_impl): Replace
	final offsets with constants.

From-SVN: r275514
2019-09-09 12:12:44 +01:00
Jonathan Wakely
27dada7d06 Improve constraints for std::span constructors
This patch simplifies the constraints on the constructors from arrays by
removing the redundant checks that element_type and value_type are
convertible to element_type. The incorrect uses of __adl_data in those
constructors are removed as well (they should use std::data not
std::ranges::data, and the former doesn't use ADL).

The range/container constructors are now constrained to exclude all
specializations of std::span, not just the current instantiation. The
range constructor now also checks s subset of the contiguous_range
requirements.

All relevant constructor constraints now use the _Require helper in
order to short circuit and avoid unnecessary instantiations after the
first failed constraint.

A new constructor supports initialization from different specializations
of std::span<OtherType, OtherExtent>, as specified in the C++20 draft.

	* include/bits/range_access.h (__adl_to_address): Remove.
	* include/std/span (__is_base_derived_safe_convertible_v): Replace
	with span::__is_compatible.
	(__is_std_array_v): Replace with __is_std_array class template and
	partial specializations.
	(__is_std_array, __is_std_span): New class templates and partial
	specializations.
	(span::__is_compatible): New alias template for SFINAE constraints.
	(span::span(element_type (&)[N])): Remove redundant constraints. Do
	not use __adl_data to obtain a pointer.
	(span::span(array<value_type, N>&)): Likewise.
	(span::span(const array<value_type, N>&)): Likewise.
	[_GLIBCXX_P1394] (span::iter_reference_t, span::iterator_t)
	(span::iter_value_t, span::derived_from): New alias templates for
	SFINAE constraints, until the equivalents are supported in <concepts>
	and <iterator>.
	[_GLIBCXX_P1394] (span::__is_compatible_iterator): New alias template
	for SFINAE constraints.
	[_GLIBCXX_P1394] (span::is_compatible_range): New class template for
	SFINAE constraints.
	[_GLIBCXX_P1394] (span::span(Range&&)): Improve constraints.
	[_GLIBCXX_P1394] (span::span(ContiguousIterator, Sentinel)): Likewise.
	Use std::to_address instead of __adl_to_address.
	[_GLIBCXX_P1394] (span::span(ContiguousIterator, size_type)): Likewise.
	[!_GLIBCXX_P1394] (span::__is_compatible_container): New alias
	template for SFINAE constraints.
	[!_GLIBCXX_P1394] (span::span(Container&))
	(span::span(const Container&)): Improve constraints.
	[!_GLIBCXX_P1394] (span::span(pointer, size_type))
	(span::span(pointer, pointer)): Remove redundant cast of pointer.
	(span(const span<OType, OExtent>&)): New constructor.

From-SVN: r275513
2019-09-09 12:12:38 +01:00
Jakub Jelinek
ca47c3987c re PR target/87853 (_mm_cmpgt_epi8 broken with -funsigned-char)
PR target/87853
	* config/i386/emmintrin.h (_mm_cmpeq_epi8): Use casts to __v16qi
	instead of __v16qs.

	* gcc.target/i386/pr87853.c: New test.

From-SVN: r275508
2019-09-09 12:31:02 +02:00
Jakub Jelinek
b245befcdd re PR target/91704 ([X86] Codegen for _mm256_cmpgt_epi8 is affected by -funsigned-char)
PR target/91704
	* config/i386/avxintrin.h (__v32qs): New typedef.
	* config/i386/avx2intrin.h (_mm256_cmpgt_epi8): Use casts to __v32qs
	instead of __v32qi.

	* gcc.target/i386/pr91704.c: New test.

From-SVN: r275507
2019-09-09 12:26:50 +02:00
Jose E. Marchesi
91dfef9610 GCC port for eBPF
This patch series introduces a port of GCC to eBPF, which is a virtual
machine that resides in the Linux kernel.  Initially intended for
user-level packet capture and filtering, eBPF is nowadays generalized
to serve as a general-purpose infrastructure also for non-networking
purposes.

The binutils support is already upstream.  See
https://sourceware.org/ml/binutils/2019-05/msg00306.html.

ChangeLog:

	* MAINTAINERS: Add myself as the maintainer of the eBPF port.
	Remove myself from Write After Approval section.
	* configure.ac: Support for bpf-*-* targets.
	* configure: Regenerate.

contrib/ChangeLog:

	* config-list.mk (LIST): Disable go in bpf-*-* targets.

gcc/ChangeLog:

	* doc/invoke.texi (Option Summary): Cover eBPF.
	(eBPF Options): New section.
	* doc/extend.texi (BPF Built-in Functions): Likewise.
	(BPF Kernel Helpers): Likewise.
	* config.gcc: Support for bpf-*-* targets.
	* common/config/bpf/bpf-common.c: New file.
	* config/bpf/t-bpf: Likewise.
	* config/bpf/predicates.md: Likewise.
	* config/bpf/constraints.md: Likewise.
	* config/bpf/bpf.opt: Likewise.
	* config/bpf/bpf.md: Likewise.
	* config/bpf/bpf.h: Likewise.
	* config/bpf/bpf.c: Likewise.
	* config/bpf/bpf-protos.h: Likewise.
	* config/bpf/bpf-opts.h: Likewise.
	* config/bpf/bpf-helpers.h: Likewise.
	* config/bpf/bpf-helpers.def: Likewise.

gcc/testsuite/ChangeLog:

	* gcc.dg/builtins-config.h: eBPF doesn't support C99 standard
	functions.
	* gcc.c-torture/compile/20101217-1.c: Add a function prototype for
	printf.
	* gcc.c-torture/compile/20000211-1.c: Skip if target bpf-*-*.
	* gcc.c-torture/compile/poor.c: Likewise.
	* gcc.c-torture/compile/pr25311.c: Likewise.
	* gcc.c-torture/compile/pr39928-1.c: Likewise.
	* gcc.c-torture/compile/pr70061.c: Likewise.
	* gcc.c-torture/compile/920501-7.c: Likewise.
	* gcc.c-torture/compile/20000403-1.c: Likewise.
	* gcc.c-torture/compile/20001226-1.c: Likewise.
	* gcc.c-torture/compile/20030903-1.c: Likewise.
	* gcc.c-torture/compile/20031125-1.c: Likewise.
	* gcc.c-torture/compile/20040101-1.c: Likewise.
	* gcc.c-torture/compile/20040317-2.c: Likewise.
	* gcc.c-torture/compile/20040726-1.c: Likewise.
	* gcc.c-torture/compile/20051216-1.c: Likewise.
	* gcc.c-torture/compile/900313-1.c: Likewise.
	* gcc.c-torture/compile/920625-1.c: Likewise.
	* gcc.c-torture/compile/930421-1.c: Likewise.
	* gcc.c-torture/compile/930623-1.c: Likewise.
	* gcc.c-torture/compile/961004-1.c: Likewise.
	* gcc.c-torture/compile/980504-1.c: Likewise.
	* gcc.c-torture/compile/980816-1.c: Likewise.
	* gcc.c-torture/compile/990625-1.c: Likewise.
	* gcc.c-torture/compile/DFcmp.c: Likewise.
	* gcc.c-torture/compile/HIcmp.c: Likewise.
	* gcc.c-torture/compile/HIset.c: Likewise.
	* gcc.c-torture/compile/QIcmp.c: Likewise.
	* gcc.c-torture/compile/QIset.c: Likewise.
	* gcc.c-torture/compile/SFset.c: Likewise.
	* gcc.c-torture/compile/SIcmp.c: Likewise.
	* gcc.c-torture/compile/SIset.c: Likewise.
	* gcc.c-torture/compile/UHIcmp.c: Likewise.
	* gcc.c-torture/compile/UQIcmp.c: Likewise.
	* gcc.c-torture/compile/USIcmp.c: Likewise.
	* gcc.c-torture/compile/consec.c: Likewise.
	* gcc.c-torture/compile/limits-fndefn.c: Likewise.
	* gcc.c-torture/compile/lll.c: Likewise.
	* gcc.c-torture/compile/parms.c: Likewise.
	* gcc.c-torture/compile/pass.c: Likewise.
	* gcc.c-torture/compile/pp.c: Likewise.
	* gcc.c-torture/compile/pr32399.c: Likewise.
	* gcc.c-torture/compile/pr34091.c: Likewise.
	* gcc.c-torture/compile/pr34688.c: Likewise.
	* gcc.c-torture/compile/pr37258.c: Likewise.
	* gcc.c-torture/compile/pr37327.c: Likewise.
	* gcc.c-torture/compile/pr37381.c: Likewise.
	* gcc.c-torture/compile/pr37669-2.c: Likewise.
	* gcc.c-torture/compile/pr37669.c: Likewise.
	* gcc.c-torture/compile/pr37742-3.c: Likewise.
	* gcc.c-torture/compile/pr44063.c: Likewise.
	* gcc.c-torture/compile/pr48596.c: Likewise.
	* gcc.c-torture/compile/pr51856.c: Likewise.
	* gcc.c-torture/compile/pr54428.c: Likewise.
	* gcc.c-torture/compile/pr54713-1.c: Likewise.
	* gcc.c-torture/compile/pr54713-2.c: Likewise.
	* gcc.c-torture/compile/pr54713-3.c: Likewise.
	* gcc.c-torture/compile/pr55921.c: Likewise.
	* gcc.c-torture/compile/pr70240.c: Likewise.
	* gcc.c-torture/compile/pr70355.c: Likewise.
	* gcc.c-torture/compile/pr82052.c: Likewise.
	* gcc.c-torture/compile/pr83487.c: Likewise.
	* gcc.c-torture/compile/pr86122.c: Likewise.
	* gcc.c-torture/compile/pret-arg.c: Likewise.
	* gcc.c-torture/compile/regs-arg-size.c: Likewise.
	* gcc.c-torture/compile/structret.c: Likewise.
	* gcc.c-torture/compile/uuarg.c: Likewise.
	* gcc.dg/20001009-1.c: Likewise.
	* gcc.dg/20020418-1.c: Likewise.
	* gcc.dg/20020426-2.c: Likewise.
	* gcc.dg/20020430-1.c: Likewise.
	* gcc.dg/20040306-1.c: Likewise.
	* gcc.dg/20040622-2.c: Likewise.
	* gcc.dg/20050603-2.c: Likewise.
	* gcc.dg/20050629-1.c: Likewise.
	* gcc.dg/20061026.c: Likewise.
	* gcc.dg/Warray-bounds-3.c: Likewise.
	* gcc.dg/Warray-bounds-30.c: Likewise.
	* gcc.dg/Wframe-larger-than-2.c: Likewise.
	* gcc.dg/Wframe-larger-than.c: Likewise.
	* gcc.dg/Wrestrict-11.c: Likewise.
	* gcc.c-torture/compile/20000804-1.c: Likewise.
	* lib/target-supports.exp (check_effective_target_trampolines):
	Adapt to eBPF.
	(check_effective_target_indirect_jumps): Likewise.
	(check_effective_target_nonlocal_goto): Likewise.
	(check_effective_target_global_constructor): Likewise.
	(check_effective_target_return_address): Likewise.
	* gcc.target/bpf/bpf.exp: New file.
	* gcc.target/bpf/builtin-load.c: Likewise.
	* cc.target/bpf/constant-calls.c: Likewise.
	* gcc.target/bpf/diag-funargs.c: Likewise.
	* gcc.target/bpf/diag-funargs-2.c: Likewise.
	* gcc.target/bpf/diag-funargs-3.c: Likewise.
	* gcc.target/bpf/diag-indcalls.c: Likewise.
	* gcc.target/bpf/helper-bind.c: Likewise.
	* gcc.target/bpf/helper-bpf-redirect.c: Likewise.
	* gcc.target/bpf/helper-clone-redirect.c: Likewise.
	* gcc.target/bpf/helper-csum-diff.c: Likewise.
	* gcc.target/bpf/helper-csum-update.c: Likewise.
	* gcc.target/bpf/helper-current-task-under-cgroup.c: Likewise.
	* gcc.target/bpf/helper-fib-lookup.c: Likewise.
	* gcc.target/bpf/helper-get-cgroup-classid.c: Likewise.
	* gcc.target/bpf/helper-get-current-cgroup-id.c: Likewise.
	* gcc.target/bpf/helper-get-current-comm.c: Likewise.
	* gcc.target/bpf/helper-get-current-pid-tgid.c: Likewise.
	* gcc.target/bpf/helper-get-current-task.c: Likewise.
	* gcc.target/bpf/helper-get-current-uid-gid.c: Likewise.
	* gcc.target/bpf/helper-get-hash-recalc.c: Likewise.
	* gcc.target/bpf/helper-get-listener-sock.c: Likewise.
	* gcc.target/bpf/helper-get-local-storage.c: Likewise.
	* gcc.target/bpf/helper-get-numa-node-id.c: Likewise.
	* gcc.target/bpf/helper-get-prandom-u32.c: Likewise.
	* gcc.target/bpf/helper-get-route-realm.c: Likewise.
	* gcc.target/bpf/helper-get-smp-processor-id.c: Likewise.
	* gcc.target/bpf/helper-get-socket-cookie.c: Likewise.
	* gcc.target/bpf/helper-get-socket-uid.c: Likewise.
	* gcc.target/bpf/helper-getsockopt.c: Likewise.
	* gcc.target/bpf/helper-get-stack.c: Likewise.
	* gcc.target/bpf/helper-get-stackid.c: Likewise.
	* gcc.target/bpf/helper-ktime-get-ns.c: Likewise.
	* gcc.target/bpf/helper-l3-csum-replace.c: Likewise.
	* gcc.target/bpf/helper-l4-csum-replace.c: Likewise.
	* gcc.target/bpf/helper-lwt-push-encap.c: Likewise.
	* gcc.target/bpf/helper-lwt-seg6-action.c: Likewise.
	* gcc.target/bpf/helper-lwt-seg6-adjust-srh.c: Likewise.
	* gcc.target/bpf/helper-lwt-seg6-store-bytes.c: Likewise.
	* gcc.target/bpf/helper-map-delete-elem.c: Likewise.
	* gcc.target/bpf/helper-map-lookup-elem.c: Likewise.
	* gcc.target/bpf/helper-map-peek-elem.c: Likewise.
	* gcc.target/bpf/helper-map-pop-elem.c: Likewise.
	* gcc.target/bpf/helper-map-push-elem.c: Likewise.
	* gcc.target/bpf/helper-map-update-elem.c: Likewise.
	* gcc.target/bpf/helper-msg-apply-bytes.c: Likewise.
	* gcc.target/bpf/helper-msg-cork-bytes.c: Likewise.
	* gcc.target/bpf/helper-msg-pop-data.c: Likewise.
	* gcc.target/bpf/helper-msg-pull-data.c: Likewise.
	* gcc.target/bpf/helper-msg-push-data.c: Likewise.
	* gcc.target/bpf/helper-msg-redirect-hash.c: Likewise.
	* gcc.target/bpf/helper-msg-redirect-map.c: Likewise.
	* gcc.target/bpf/helper-override-return.c: Likewise.
	* gcc.target/bpf/helper-perf-event-output.c: Likewise.
	* gcc.target/bpf/helper-perf-event-read.c: Likewise.
	* gcc.target/bpf/helper-perf-event-read-value.c: Likewise.
	* gcc.target/bpf/helper-perf-prog-read-value.c: Likewise.
	* gcc.target/bpf/helper-probe-read.c: Likewise.
	* gcc.target/bpf/helper-probe-read-str.c: Likewise.
	* gcc.target/bpf/helper-probe-write-user.c: Likewise.
	* gcc.target/bpf/helper-rc-keydown.c: Likewise.
	* gcc.target/bpf/helper-rc-pointer-rel.c: Likewise.
	* gcc.target/bpf/helper-rc-repeat.c: Likewise.
	* gcc.target/bpf/helper-redirect-map.c: Likewise.
	* gcc.target/bpf/helper-set-hash.c: Likewise.
	* gcc.target/bpf/helper-set-hash-invalid.c: Likewise.
	* gcc.target/bpf/helper-setsockopt.c: Likewise.
	* gcc.target/bpf/helper-skb-adjust-room.c: Likewise.
	* gcc.target/bpf/helper-skb-cgroup-id.c: Likewise.
	* gcc.target/bpf/helper-skb-change-head.c: Likewise.
	* gcc.target/bpf/helper-skb-change-proto.c: Likewise.
	* gcc.target/bpf/helper-skb-change-tail.c: Likewise.
	* gcc.target/bpf/helper-skb-change-type.c: Likewise.
	* gcc.target/bpf/helper-skb-ecn-set-ce.c: Likewise.
	* gcc.target/bpf/helper-skb-get-tunnel-key.c: Likewise.
	* gcc.target/bpf/helper-skb-get-tunnel-opt.c: Likewise.
	* gcc.target/bpf/helper-skb-get-xfrm-state.c: Likewise.
	* gcc.target/bpf/helper-skb-load-bytes.c: Likewise.
	* gcc.target/bpf/helper-skb-load-bytes-relative.c: Likewise.
	* gcc.target/bpf/helper-skb-pull-data.c: Likewise.
	* gcc.target/bpf/helper-skb-set-tunnel-key.c: Likewise.
	* gcc.target/bpf/helper-skb-set-tunnel-opt.c: Likewise.
	* gcc.target/bpf/helper-skb-store-bytes.c: Likewise.
	* gcc.target/bpf/helper-skb-under-cgroup.c: Likewise.
	* gcc.target/bpf/helper-skb-vlan-pop.c: Likewise.
	* gcc.target/bpf/helper-skb-vlan-push.c: Likewise.
	* gcc.target/bpf/helper-skc-lookup-tcp.c: Likewise.
	* gcc.target/bpf/helper-sk-fullsock.c: Likewise.
	* gcc.target/bpf/helper-sk-lookup-tcp.c: Likewise.
	* gcc.target/bpf/helper-sk-lookup-upd.c: Likewise.
	* gcc.target/bpf/helper-sk-redirect-hash.c: Likewise.
	* gcc.target/bpf/helper-sk-redirect-map.c: Likewise.
	* gcc.target/bpf/helper-sk-release.c: Likewise.
	* gcc.target/bpf/helper-sk-select-reuseport.c: Likewise.
	* gcc.target/bpf/helper-sk-storage-delete.c: Likewise.
	* gcc.target/bpf/helper-sk-storage-get.c: Likewise.
	* gcc.target/bpf/helper-sock-hash-update.c: Likewise.
	* gcc.target/bpf/helper-sock-map-update.c: Likewise.
	* gcc.target/bpf/helper-sock-ops-cb-flags-set.c: Likewise.
	* gcc.target/bpf/helper-spin-lock.c: Likewise.
	* gcc.target/bpf/helper-spin-unlock.c: Likewise.
	* gcc.target/bpf/helper-strtol.c: Likewise.
	* gcc.target/bpf/helper-strtoul.c: Likewise.
	* gcc.target/bpf/helper-sysctl-get-current-value.c: Likewise.
	* gcc.target/bpf/helper-sysctl-get-name.c: Likewise.
	* gcc.target/bpf/helper-sysctl-get-new-value.c: Likewise.
	* gcc.target/bpf/helper-sysctl-set-new-value.c: Likewise.
	* gcc.target/bpf/helper-tail-call.c: Likewise.
	* gcc.target/bpf/helper-tcp-check-syncookie.c: Likewise.
	* gcc.target/bpf/helper-tcp-sock.c: Likewise.
	* gcc.target/bpf/helper-trace-printk.c: Likewise.
	* gcc.target/bpf/helper-xdp-adjust-head.c: Likewise.
	* gcc.target/bpf/helper-xdp-adjust-meta.c: Likewise.
	* gcc.target/bpf/helper-xdp-adjust-tail.c: Likewise.
	* gcc.target/bpf/skb-ancestor-cgroup-id.c: Likewise.
	* gcc.target/bpf/sync-fetch-and-add.c: Likewise.

libgcc/ChangeLog:

	* config.host: Set cpu_type for bpf-*-* targets.
	* config/bpf/t-bpf: Likewise.
	* config/bpf/crtn.S: Likewise.
	* config/bpf/crti.S: New file.

From-SVN: r275506
2019-09-09 12:13:23 +02:00
Jose E. Marchesi
a5362c6aea testsuite: new require effective target indirect_calls
This patch adds a new dg_require_effective_target procedure to the
testsuite infrastructure: indirect_calls.  This new function tells
whether a target supports calls to non-constant call targets.
    
This patch also annotates the tests in the gcc.c-torture testuite that
require support for indirect calls.
    
    gcc/ChangeLog:
    
            * doc/sourcebuild.texi (Effective-Target Keywords): Document
            indirect_calls.
    
    gcc/testsuite/ChangeLog:
    
            * lib/target-supports.exp (check_effective_target_indirect_calls):
            New proc.
            * gcc.c-torture/compile/20010102-1.c: Annotate with
            dg-require-effective-target indirect_calls.
            * gcc.c-torture/compile/20010107-1.c: Likewise.
            * gcc.c-torture/compile/20011109-1.c: Likewise.
            * gcc.c-torture/compile/20011218-1.c: Likewise.
            * gcc.c-torture/compile/20011229-1.c: Likewise.
            * gcc.c-torture/compile/20020129-1.c: Likewise.
            * gcc.c-torture/compile/20020320-1.c: Likewise.
            * gcc.c-torture/compile/20020706-1.c: Likewise.
            * gcc.c-torture/compile/20020706-2.c: Likewise.
            * gcc.c-torture/compile/20021205-1.c: Likewise.
            * gcc.c-torture/compile/20030921-1.c: Likewise.
            * gcc.c-torture/compile/20031023-1.c: Likewise.
            * gcc.c-torture/compile/20031023-2.c: Likewise.
            * gcc.c-torture/compile/20031023-3.c: Likewise.
            * gcc.c-torture/compile/20031023-4.c: Likewise.
            * gcc.c-torture/compile/20040614-1.c: Likewise.
            * gcc.c-torture/compile/20040909-1.c: Likewise.
            * gcc.c-torture/compile/20050122-1.c: Likewise.
            * gcc.c-torture/compile/20050202-1.c: Likewise.
            * gcc.c-torture/compile/20060208-1.c: Likewise.
            * gcc.c-torture/compile/20081108-1.c: Likewise.
            * gcc.c-torture/compile/20150327.c: Likewise.
            * gcc.c-torture/compile/920428-2.c: Likewise.
            * gcc.c-torture/compile/920928-5.c: Likewise.
            * gcc.c-torture/compile/930117-1.c: Likewise.
            * gcc.c-torture/compile/930607-1.c: Likewise.
            * gcc.c-torture/compile/991213-2.c: Likewise.
            * gcc.c-torture/compile/callind.c: Likewise.
            * gcc.c-torture/compile/calls-void.c: Likewise.
            * gcc.c-torture/compile/calls.c: Likewise.
            * gcc.c-torture/compile/pr21840.c: Likewise.
            * gcc.c-torture/compile/pr32139.c: Likewise.
            * gcc.c-torture/compile/pr35607.c: Likewise.
            * gcc.c-torture/compile/pr37433-1.c: Likewise.
            * gcc.c-torture/compile/pr37433.c: Likewise.
            * gcc.c-torture/compile/pr39941.c: Likewise.
            * gcc.c-torture/compile/pr40080.c: Likewise.
            * gcc.c-torture/compile/pr43635.c: Likewise.
            * gcc.c-torture/compile/pr43791.c: Likewise.
            * gcc.c-torture/compile/pr43845.c: Likewise.
            * gcc.c-torture/compile/pr44043.c: Likewise.
            * gcc.c-torture/compile/pr51694.c: Likewise.
            * gcc.c-torture/compile/pr77754-2.c: Likewise.
            * gcc.c-torture/compile/pr77754-3.c: Likewise.
            * gcc.c-torture/compile/pr77754-4.c: Likewise.
            * gcc.c-torture/compile/pr89663-2.c: Likewise.
            * gcc.c-torture/compile/pta-1.c: Likewise.
            * gcc.c-torture/compile/stack-check-1.c: Likewise.
            * gcc.dg/Walloc-size-larger-than-18.c: Likewise.

From-SVN: r275505
2019-09-09 11:55:10 +02:00
Jose E. Marchesi
e9b8025bb0 testsuite: annotate c-torture/compile tests with dg-require-stack-size
This patch annotates tests that make use of a significant a mount of
stack space.  Embedded and other restricted targets may have problems
compiling and running these tests.  Note that the annotations are in
many cases not exact.
    
testsuite/ChangeLog:
    
        * gcc.c-torture/compile/20000609-1.c: Annotate with
        dg-require-stack-size.
        * gcc.c-torture/compile/20000804-1.c: Likewise.
        * gcc.c-torture/compile/20020304-1.c: Likewise.
        * gcc.c-torture/compile/20020604-1.c: Likewise.
        * gcc.c-torture/compile/20021015-1.c: Likewise.
        * gcc.c-torture/compile/20050303-1.c: Likewise.
        * gcc.c-torture/compile/20060421-1.c: Likewise.
        * gcc.c-torture/compile/20071207-1.c: Likewise.
        * gcc.c-torture/compile/20080903-1.c: Likewise.
        * gcc.c-torture/compile/20121027-1.c: Likewise.
        * gcc.c-torture/compile/20151204.c: Likewise.
        * gcc.c-torture/compile/920501-12.c: Likewise.
        * gcc.c-torture/compile/920501-4.c: Likewise.
        * gcc.c-torture/compile/920723-1.c: Likewise.
        * gcc.c-torture/compile/921202-1.c: Likewise.
        * gcc.c-torture/compile/931003-1.c: Likewise.
        * gcc.c-torture/compile/931004-1.c: Likewise.
        * gcc.c-torture/compile/950719-1.c: Likewise.
        * gcc.c-torture/compile/951222-1.c: Likewise.
        * gcc.c-torture/compile/990517-1.c: Likewise.
        * gcc.c-torture/compile/bcopy.c: Likewise.
        * gcc.c-torture/compile/pr23929.c: Likewise.
        * gcc.c-torture/compile/pr25310.c: Likewise.
        * gcc.c-torture/compile/pr34458.c: Likewise.
        * gcc.c-torture/compile/pr39937.c: Likewise.
        * gcc.c-torture/compile/pr41181.c: Likewise.
        * gcc.c-torture/compile/pr41634.c: Likewise.
        * gcc.c-torture/compile/pr43415.c: Likewise.
        * gcc.c-torture/compile/pr43417.c: Likewise.
        * gcc.c-torture/compile/pr44788.c: Likewise.
        * gcc.c-torture/compile/sound.c: Likewise.

From-SVN: r275504
2019-09-09 11:49:34 +02:00
Jose E. Marchesi
4bc8aadf03 opt-functions.awk: fix comparison of limit, begin and end
The function integer_range_info makes sure that, if provided, the
initial value fills in the especified range.  However, it is necessary
to convert the values to a numerical context before comparing, to make
sure awk is using arithmetical order and not lexicographical order.
    
gcc/ChangeLog:
    
      * opt-functions.awk (integer_range_info): Make sure values are in
      numeric context before operating with them.

From-SVN: r275503
2019-09-09 11:44:23 +02:00
Jose E. Marchesi
b7b1f65711 Update config.sub and config.guess.
* config.sub: Import upstream version 2019-06-30.
    * config.guess: Import upstream version 2019-07-24.

From-SVN: r275502
2019-09-09 11:14:32 +02:00
GCC Administrator
108d64adca Daily bump.
From-SVN: r275501
2019-09-09 00:17:08 +00:00
Segher Boessenkool
9976b31c66 genemit: Print file+line in the "Splitting with" message
It's tiresome to have to look in insn-emit.c to see where some split
came from, so let's print that info to the dump file as well.  But
don't print the full path, just the basename, for greater readability.


	* genemit.c (gen_split): Print the filename and line number where the
	splitter (or peephole2) was defined, to the dump file.

From-SVN: r275497
2019-09-08 22:58:18 +02:00
GCC Administrator
30b94f5520 Daily bump.
From-SVN: r275493
2019-09-08 00:16:34 +00:00
Bernd Edlinger
70ca91f5d4 pr91684.c: Use effective-target arm_prefer_ldrd_strd.
2019-09-07  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        * gcc.target/arm/pr91684.c: Use effective-target arm_prefer_ldrd_strd.

From-SVN: r275489
2019-09-07 18:26:26 +00:00
David Edelsohn
e950ddb04b decomp2.C: Add TLS options.
* g++.dg/cpp2a/decomp2.C: Add TLS options.
        * gcc.target/powerpc/pr88233.c: Limit to lp64.

From-SVN: r275488
2019-09-07 11:23:51 -04:00
Jakub Jelinek
44a06a7095 re PR tree-optimization/91665 (ICE in build_vector_from_val, at tree.c:1904)
PR tree-optimization/91665
	* tree-vect-loop.c (vectorizable_reduction): Punt if base has type
	incompatible with the type of PHI result.

	* gcc.dg/vect/pr91665.c: New test.

From-SVN: r275486
2019-09-07 11:52:01 +02:00
Bernd Edlinger
8b2d8beb9f add PR target/91684 to ChangeLog
From-SVN: r275484
2019-09-07 05:11:16 +00:00
Bernd Edlinger
d405dc2302 arm.c (arm_block_set_aligned_non_vect): Use gen_unaligned_storedi for 4-byte aligned addresses.
2019-09-07  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        * config/arm/arm.c (arm_block_set_aligned_non_vect): Use
        gen_unaligned_storedi for 4-byte aligned addresses.

testsuite:
2019-09-07  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        * gcc.target/arm/pr91684.c: New test.

From-SVN: r275483
2019-09-07 04:38:58 +00:00
GCC Administrator
7397488502 Daily bump.
From-SVN: r275482
2019-09-07 00:16:46 +00:00
Jim Wilson
2f4d895197 RISC-V: Re-enable -msave-restore for shared libraries.
This re-enables -msave-restore for shared libraries, and uses the
t-slibgcc-libgcc file to get the save-restore routines included directly
in shared libraries so that we don't need to indirect through the PLT
to reach them, which doesn't work.

	gcc/
	* config/riscv/riscv.c (riscv_option_override): Revert 2019-08-30
	change.

	libgcc/
	* config.host (riscv*-*-linux*): Add t-slibgcc-libgcc to tmake_file.
	(riscv*-*-freebsd*): Likewise.

From-SVN: r275478
2019-09-06 17:09:21 -07:00
Segher Boessenkool
e83573abb3 rs6000: Delete UNSPEC_MV_CR_OV.
This isn't used since 2018.  (It's a remnant of paired single support).


	* config/rs6000/rs6000.md (unspec): Delete UNSPEC_MV_CR_OV.

From-SVN: r275477
2019-09-06 21:43:47 +02:00
Segher Boessenkool
9393ab7492 rs6000: Delete UNSPEC_FRSP
This isn't used since 2012.  (It's a remnant of RIOS support).


	* config/rs6000/rs6000.c (rs6000_rtx_costs) <case UNSPEC>: Delete.
	* config/rs6000/rs6000.md (unspec): Delete UNSPEC_FRSP.

From-SVN: r275476
2019-09-06 21:42:38 +02:00
Uros Bizjak
4e9ad7c9d8 re PR target/91654 (Regressions of SPEC2017 rate caused by r274994)
PR target/91654
	* config/i386/x86-tune-costs.h (skylake_cost): Raise the
	cost of SSE->integer and integer->SSE moves from 2 to 6.
	(core_cost): Ditto.

From-SVN: r275475
2019-09-06 21:27:58 +02:00
Ian Lance Taylor
aa8901e9bb libgo: update to Go 1.13beta1 release
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/193497

From-SVN: r275473
2019-09-06 18:12:46 +00:00
Jakub Jelinek
920ea3b8ba function.c (assign_parm_find_data_types): Use RECORD_OR_UNION_TYPE_P before testing TYPE_TRANSPARENT_AGGR.
* function.c (assign_parm_find_data_types): Use RECORD_OR_UNION_TYPE_P
	before testing TYPE_TRANSPARENT_AGGR.
	* calls.c (initialize_argument_information, load_register_parameters):
	Likewise.

From-SVN: r275472
2019-09-06 19:33:41 +02:00
David Edelsohn
28d67c175f inf-compare-1.c: Skip AIX.
* gcc.dg/torture/inf-compare-1.c: Skip AIX.
        * gcc.dg/torture/inf-compare-2.c: Skip AIX.
        * gcc.dg/torture/inf-compare-3.c: Skip AIX.
        * gcc.dg/torture/inf-compare-4.c: Skip AIX.
        * gcc.dg/torture/pr52451.c: Skip AIX.
        * gcc.dg/torture/pr68264.c: Skip AIX
        * gcc.dg/torture/pr91323.c: Skip AIX.

From-SVN: r275464
2019-09-06 11:29:01 -04:00
David Edelsohn
613d4e784c Warray-bounds-4.C: Skip AIX.
* g++.dg/warn/Warray-bounds-4.C: Skip AIX.
        * g++.dg/warn/Warray-bounds-8.C: Skip AIX.
        * g++.dg/opt/flifetime-dse2.C: XFAIL AIX.
        * g++.dg/opt/flifetime-dse4.C: XFAIL AIX.

From-SVN: r275462
2019-09-06 11:24:28 -04:00
Caroline Tice
94ea5c6a51 Fix testcase to not use LTO with -fvtable-verify.
2019-09-05  Caroline Tice  <cmtice@google.com>

        PR testsuite/91670
        * g++.dg/ubsan/pr59415.C: Disable LTO, since test uses
        -fvtable-verify, and the two options are no longer allowed
        together.

From-SVN: r275460
2019-09-06 07:54:48 -07:00
Jonathan Wakely
4ef5bbd815 Define std::ssize for C++20 (P1227R2)
* include/bits/range_access.h (ssize): Define for C++20.
	* testsuite/24_iterators/range_access_cpp20.cc: New test.
	* doc/xml/manual/status_cxx2020.xml: Update P1227R2 status.
	* doc/html/*: Regenerate.

From-SVN: r275458
2019-09-06 13:54:51 +01:00