On 9/25/19 10:48 AM, Richard Sandiford wrote:
> [This follows on from:
>  https://gcc.gnu.org/ml/gcc-patches/2019-09/msg01466.html]
> 
> The AArch64 SVE tlsdesc patterns were the main motivating reason
> for clobber_high.  It's no longer needed now that the patterns use
> calls instead.
> 
> At the time, one of the possible future uses for clobber_high was for
> asm statements.  However, the current code wouldn't handle that case
> without modification, so I think we might as well remove it for now.
> We can always reapply it in future if it turns out to be useful again.
> 
> [Perhaps we should have a syntax for saying asms clobber the same
> registers as calls, with a syntax for specifying a particular
> ABI where necessary?]
> 
> Tested on aarch64-linux-gnu and x86_64-linux-gnu.  OK to install
> if the prerequisites are?
> 
> Richard
> 
> 
> 2019-09-25  Richard Sandiford  <richard.sandif...@arm.com>
> 
> gcc/
>       * rtl.def (CLOBBER_HIGH): Delete.
>       * doc/rtl.texi (clobber_high): Remove documentation.
>       * rtl.h (SET_DEST): Remove CLOBBER_HIGH from the list of codes.
>       (reg_is_clobbered_by_clobber_high): Delete.
>       (gen_hard_reg_clobber_high): Likewise.
>       * alias.c (record_set): Remove CLOBBER_HIGH handling.
>       * cfgexpand.c (expand_gimple_stmt): Likewise.
>       * combine-stack-adj.c (single_set_for_csa): Likewise.
>       * combine.c (find_single_use_1, set_nonzero_bits_and_sign_copies)
>       (can_combine_p, is_parallel_of_n_reg_sets, try_combine)
>       (record_dead_and_set_regs_1, reg_dead_at_p_1): Likewise.
>       * cse.c (invalidate_reg): Remove clobber_high parameter.
>       (invalidate): Update call accordingly.
>       (canonicalize_insn): Remove CLOBBER_HIGH handling.
>       (invalidate_from_clobbers, invalidate_from_sets_and_clobbers)
>       (count_reg_usage, insn_live_p): Likewise.
>       * cselib.h (cselib_invalidate_rtx): Remove sett argument.
>       * cselib.c (cselib_invalidate_regno, cselib_invalidate_rtx): Likewise.
>       (cselib_invalidate_rtx_note_stores): Update call accordingly.
>       (cselib_expand_value_rtx_1): Remove CLOBBER_HIGH handling.
>       (cselib_invalidate_regno, cselib_process_insn): Likewise.
>       * dce.c (deletable_insn_p, mark_nonreg_stores_1): Likewise.
>       (mark_nonreg_stores_2): Likewise.
>       * df-scan.c (df_find_hard_reg_defs, df_uses_record): Likewise.
>       (df_get_call_refs): Likewise.
>       * dwarf2out.c (mem_loc_descriptor): Likewise.
>       * emit-rtl.c (verify_rtx_sharing): Likewise.
>       (copy_insn_1, copy_rtx_if_shared_1): Likewise.
>       (hard_reg_clobbers_high, gen_hard_reg_clobber_high): Delete.
>       * genconfig.c (walk_insn_part): Remove CLOBBER_HIGH handling.
>       * genemit.c (gen_exp, gen_insn): Likewise.
>       * genrecog.c (validate_pattern, remove_clobbers): Likewise.
>       * haifa-sched.c (haifa_classify_rtx): Likewise.
>       * ira-build.c (create_insn_allocnos): Likewise.
>       * ira-costs.c (scan_one_insn): Likewise.
>       * ira.c (equiv_init_movable_p, memref_referenced_p): Likewise.
>       (rtx_moveable_p, interesting_dest_for_shprep): Likewise.
>       * jump.c (mark_jump_label_1): Likewise.
>       * lra-int.h (lra_insn_reg::clobber_high): Delete.
>       * lra-eliminations.c (lra_eliminate_regs_1): Remove CLOBBER_HIGH
>       handling.
>       (mark_not_eliminable): Likewise.
>       * lra-lives.c (process_bb_lives): Likewise.
>       * lra.c (new_insn_reg): Remove clobber_high parameter.
>       (collect_non_operand_hard_regs): Likewise.  Update call to new
>       insn_reg.  Remove CLOBBER_HIGH handling.
>       (lra_set_insn_recog_data): Remove CLOBBER_HIGH handling.  Update call
>       to collect_non_operand_hard_regs.
>       (add_regs_to_insn_regno_info): Remove CLOBBER_HIGH handling.
>       Update call to new_insn_reg.
>       (lra_update_insn_regno_info): Remove CLOBBER_HIGH handling.
>       * postreload.c (reload_cse_simplify, reload_combine_note_use)
>       (move2add_note_store): Likewise.
>       * print-rtl.c (print_pattern): Likewise.
>       * recog.c (store_data_bypass_p_1, store_data_bypass_p): Likewise.
>       (if_test_bypass_p): Likewise.
>       * regcprop.c (kill_clobbered_value, kill_set_value): Likewise.
>       * reginfo.c (reg_scan_mark_refs): Likewise.
>       * reload1.c (maybe_fix_stack_asms, eliminate_regs_1): Likewise.
>       (elimination_effects, mark_not_eliminable, scan_paradoxical_subregs)
>       (forget_old_reloads_1): Likewise.
>       * reorg.c (find_end_label, try_merge_delay_insns, redundant_insn)
>       (own_thread_p, fill_simple_delay_slots, fill_slots_from_thread)
>       (dbr_schedule): Likewise.
>       * resource.c (update_live_status, mark_referenced_resources)
>       (mark_set_resources): Likewise.
>       * rtl.c (copy_rtx): Likewise.
>       * rtlanal.c (reg_referenced_p, set_of_1, single_set_2, noop_move_p)
>       (note_pattern_stores): Likewise.
>       (reg_is_clobbered_by_clobber_high): Delete.
>       * sched-deps.c (sched_analyze_reg, sched_analyze_insn): Remove
>       CLOBBER_HIGH handling.
OK.  I was never terribly happy with CLOBBER_HIGH :-)

jeff

Reply via email to