Jeff Law <l...@redhat.com> writes:
> On 9/25/19 9:38 AM, Richard Sandiford wrote:
>> Richard Sandiford <richard.sandif...@arm.com> writes:
>>> This patch replaces get_call_reg_set_usage with call_insn_abi,
>>> which returns the ABI of the target of a call insn.  The ABI's
>>> full_reg_clobbers corresponds to regs_invalidated_by_call,
>>> whereas many callers instead passed call_used_or_fixed_regs, i.e.:
>>>
>>>   (regs_invalidated_by_call | fixed_reg_set)
>>>
>>> The patch slavishly preserves the "| fixed_reg_set" for these callers;
>>> later patches will clean this up.
>> 
>> On reflection, I think insn_callee_abi would be a better name for the
>> function than call_insn_abi, since it should make it clearer that the
>> function returns the ABI of the target function.  In future we could
>> have expr_callee_abi for CALL_EXPRs.
>> 
>> Also, after Segher's comments for 10/32, I've used "callee_abi" as
>> the name of temporary variables, instead of just "abi".
>> 
>> I've made the same change for later patches (except where I've posted
>> new versions instead), but it didn't seem worth spamming the lists
>> with that.
>> 
>> Tested as before.
>> 
>> Richard
>> 
>> PS. Ping for the series :-)
>> 
>> 
>> 2019-09-25  Richard Sandiford  <richard.sandif...@arm.com>
>> 
>> gcc/
>>      * target.def (insn_callee_abi): New hook.
>>      (remove_extra_call_preserved_regs): Delete.
>>      * doc/tm.texi.in (TARGET_INSN_CALLEE_ABI): New macro.
>>      (TARGET_REMOVE_EXTRA_CALL_PRESERVED_REGS): Delete.
>>      * doc/tm.texi: Regenerate.
>>      * targhooks.h (default_remove_extra_call_preserved_regs): Delete.
>>      * targhooks.c (default_remove_extra_call_preserved_regs): Delete.
>>      * config/aarch64/aarch64.c (aarch64_simd_call_p): Constify the
>>      insn argument.
>>      (aarch64_remove_extra_call_preserved_regs): Delete.
>>      (aarch64_insn_callee_abi): New function.
>>      (TARGET_REMOVE_EXTRA_CALL_PRESERVED_REGS): Delete.
>>      (TARGET_INSN_CALLEE_ABI): New macro.
>>      * rtl.h (get_call_fndecl): Declare.
>>      (cgraph_rtl_info): Fix formatting.  Tweak comment for
>>      function_used_regs.  Remove function_used_regs_valid.
>>      * rtlanal.c (get_call_fndecl): Moved from final.c
>>      * function-abi.h (insn_callee_abi): Declare.
>>      (target_function_abi_info): Mention insn_callee_abi.
>>      * function-abi.cc (fndecl_abi): Handle flag_ipa_ra in a similar
>>      way to get_call_reg_set_usage did.
>>      (insn_callee_abi): New function.
>>      * regs.h (get_call_reg_set_usage): Delete.
>>      * final.c: Include function-abi.h.
>>      (collect_fn_hard_reg_usage): Add fixed and stack registers to
>>      function_used_regs before the main loop rather than afterwards.
>>      Use insn_callee_abi instead of get_call_reg_set_usage.  Exit early
>>      if function_used_regs ends up not being useful.
>>      (get_call_fndecl): Move to rtlanal.c
>>      (get_call_cgraph_rtl_info, get_call_reg_set_usage): Delete.
>>      * caller-save.c: Include function-abi.h.
>>      (setup_save_areas, save_call_clobbered_regs): Use insn_callee_abi
>>      instead of get_call_reg_set_usage.
>>      * cfgcleanup.c: Include function-abi.h.
>>      (old_insns_match_p): Use insn_callee_abi instead of
>>      get_call_reg_set_usage.
>>      * cgraph.h (cgraph_node::rtl_info): Take a const_tree instead of
>>      a tree.
>>      * cgraph.c (cgraph_node::rtl_info): Likewise.  Initialize
>>      function_used_regs.
>>      * df-scan.c: Include function-abi.h.
>>      (df_get_call_refs): Use insn_callee_abi instead of
>>      get_call_reg_set_usage.
>>      * ira-lives.c: Include function-abi.h.
>>      (process_bb_node_lives): Use insn_callee_abi instead of
>>      get_call_reg_set_usage.
>>      * lra-lives.c: Include function-abi.h.
>>      (process_bb_lives): Use insn_callee_abi instead of
>>      get_call_reg_set_usage.
>>      * postreload.c: Include function-abi.h.
>>      (reload_combine): Use insn_callee_abi instead of
>>      get_call_reg_set_usage.
>>      * regcprop.c: Include function-abi.h.
>>      (copyprop_hardreg_forward_1): Use insn_callee_abi instead of
>>      get_call_reg_set_usage.
>>      * resource.c: Include function-abi.h.
>>      (mark_set_resources, mark_target_live_regs): Use insn_callee_abi
>>      instead of get_call_reg_set_usage.
>>      * var-tracking.c: Include function-abi.h.
>>      (dataflow_set_clear_at_call): Use insn_callee_abi instead of
>>      get_call_reg_set_usage.
>> 
> OK.  I think that's the whole set, right?

Yep, all committed now :-)  Thanks again for the reviews.

> There were a ton of guality issues over the last couple weeks in the
> tester, but those were somewhat expected due to a prior patchkit.  The
> affected targets have new baseline results in my tester, so if anything
> goes nuts as a result of your patches it should be fairly obvious.

There was certainly an extra guality failure on aarch64-linux-gnu with
this series, think it was:

gcc.dg/guality/pr41616-1.c   -O2 -flto -fuse-linker-plugin -fno-fat-lto-object

Will be interesting to see what effect it has on other targets.

Richard

Reply via email to