Hello Vineet: On 24/10/23 12:02 am, Vineet Gupta wrote: > > > On 10/22/23 23:46, Ajit Agarwal wrote: >> Hello All: >> >> Addressed below review comments in the version 11 of the patch. >> Please review and please let me know if its ok for trunk. >> >> Thanks & Regards >> Ajit > > Again you are not paying attention to prior comments about fixing your > submission practice and like some of the prior reviewers I'm starting to get > tired, despite potentially good technical content. >
Sorry for the inconvenience caused. I will make sure all the comments from reviewers are addressed. > 1. The commentary above is NOT part of changelog. Either use a separate cover > letter or add patch version change history between two "---" lines just > before the start of code diff. And keep accumulating those as you post new > versions. See [1]. This is so reviewers knwo what changed over 10 months and > automatically gets dropped when patch is eventually applied/merged into tree. > Sure I will do that. > 2. Acknowledge (even if it is yes) each and every comment of the reviewerw > explicitly inline below. That ensures you don't miss addressing a change > since this forces one to think about each of them. > Surely I will acknowledge each and every comments inline. > I do have some technical comments which I'll follow up with later. I look forward to it. > Just a short summary that v10 indeed bootstraps risc-v but I don't see any > improvements at all - as in whenever abi interfaces code identifies and > extension (saw missing a definition, the it is not able to eliminate any > extensions despite the patch. > Thanks for the summary and the check. Thanks & Regards Ajit > -Vineet > > [1] https://gcc.gnu.org/pipermail/gcc-patches/2023-October/632180.html > >> >> On 22/10/23 12:56 am, rep.dot....@gmail.com wrote: >>> On 21 October 2023 01:56:16 CEST, Vineet Gupta <vine...@rivosinc.com> wrote: >>>> On 10/19/23 23:50, Ajit Agarwal wrote: >>>>> Hello All: >>>>> >>>>> This version 9 of the patch uses abi interfaces to remove zero and sign >>>>> extension elimination. >>>>> Bootstrapped and regtested on powerpc-linux-gnu. >>>>> >>>>> In this version (version 9) of the patch following review comments are >>>>> incorporated. >>>>> >>>>> a) Removal of hard code zero_extend and sign_extend in abi interfaces. >>>>> b) Source and destination with different registers are considered. >>>>> c) Further enhancements. >>>>> d) Added sign extension elimination using abi interfaces. >>>> As has been trend in the past, I don't think all the review comments have >>>> been addressed. >>> And apart from that, may I ask if this is just me, or does anybody else >>> think that it might be worthwhile to actually read a patch before >>> (re-)posting? >>> >>> Seeing e.g. the proposed abi_extension_candidate_p as written in a first >>> POC would deserve some manual CSE, if nothing more then for clarity and >>> conciseness? >>> >>> Just curious from a meta perspective.. >>> >>> And: >>> >>>>> ree: Improve ree pass for rs6000 target using defined abi interfaces >>> mentioning powerpc like this, and then changing generic code could be >>> interpreted as misleading, IMHO. >>> >>>>> For rs6000 target we see redundant zero and sign extension and done >>>>> to improve ree pass to eliminate such redundant zero and sign extension >>>>> using defined ABI interfaces. >>> Mentioning powerpc in the body as one of the affected target(s) is of >>> course fine. >>> >>> >>>>> +/* Return TRUE if target mode is equal to source mode of zero_extend >>>>> + or sign_extend otherwise false. */ >>> , false otherwise. >>> >>> But I'm not a native speaker >>> >>> >>>>> +/* Return TRUE if the candidate insn is zero extend and regno is >>>>> + a return registers. */ >>>>> + >>>>> +static bool >>>>> +abi_extension_candidate_return_reg_p (/*rtx_insn *insn, */int regno) >>> Leftover debug comment. >>> >>>>> +{ >>>>> + if (targetm.calls.function_value_regno_p (regno)) >>>>> + return true; >>>>> + >>>>> + return false; >>>>> +} >>>>> + >>> As said, I don't see why the below was not cleaned up before the V1 >>> submission. >>> Iff it breaks when manually CSEing, I'm curious why? >>> >>>>> +/* Return TRUE if reg source operand of zero_extend is argument registers >>>>> + and not return registers and source and destination operand are same >>>>> + and mode of source and destination operand are not same. */ >>>>> + >>>>> +static bool >>>>> +abi_extension_candidate_p (rtx_insn *insn) >>>>> +{ >>>>> + rtx set = single_set (insn); >>>>> + machine_mode dst_mode = GET_MODE (SET_DEST (set)); >>>>> + rtx orig_src = XEXP (SET_SRC (set), 0); >>>>> + >>>>> + if (!FUNCTION_ARG_REGNO_P (REGNO (orig_src)) >>>>> + || abi_extension_candidate_return_reg_p (/*insn,*/ REGNO >>>>> (orig_src))) >>> On top, debug leftover. >>> >>>>> + return false; >>>>> + >>>>> + /* Mode of destination and source should be different. */ >>>>> + if (dst_mode == GET_MODE (orig_src)) >>>>> + return false; >>>>> + >>>>> + machine_mode mode = GET_MODE (XEXP (SET_SRC (set), 0)); >>>>> + bool promote_p = abi_target_promote_function_mode (mode); >>>>> + >>>>> + /* REGNO of source and destination should be same if not >>>>> + promoted. */ >>>>> + if (!promote_p && REGNO (SET_DEST (set)) != REGNO (orig_src)) >>>>> + return false; >>>>> + >>>>> + return true; >>>>> +} >>>>> + >>> As said, please also rephrase the above (and everything else if it >>> obviously looks akin the above). >>> >>> The rest, mentioned below, should largely be covered by following the >>> coding convention. >>> >>>>> +/* Return TRUE if the candidate insn is zero extend and regno is >>>>> + an argument registers. */ >>> Singular register. >>> >>>>> + >>>>> +static bool >>>>> +abi_extension_candidate_argno_p (/*rtx_code code, */int regno) >>> Debug leftover. >>> I would probably have inlined this function manually, with a respective >>> comment. >>> Did not look how often it is used, admittedly. >>> >>>>> +{ >>>>> + if (FUNCTION_ARG_REGNO_P (regno)) >>>>> + return true; >>>>> + >>>>> + return false; >>>>> +} >>> [] >>>>> + >>>>> /* This function goes through all reaching defs of the source >>> s/This function goes/Go/ >>> >>>>> of the candidate for elimination (CAND) and tries to combine >>> (of, ?didn't look) candidate CAND for eliminating >>> >>>>> the extension with the definition instruction. The changes >>> defining >>> >>> Pre-existing, I know. >>> But you could fix those in a preparatory patch while you touch surrounding >>> code. >>> This is not a requirement, of course, just good habit, IMHO. >>> >>>>> @@ -770,6 +889,11 @@ combine_reaching_defs (ext_cand *cand, const_rtx >>>>> set_pat, ext_state *state) >>>>> state->defs_list.truncate (0); >>>>> state->copies_list.truncate (0); >>>>> + rtx orig_src = XEXP (SET_SRC (cand->expr),0); >>>>> + >>>>> + if (abi_extension_candidate_p (cand->insn) >>>>> + && (!get_defs (cand->insn, orig_src, NULL))) >>> Excess braces. >>> Hopefully check_gnu_style would have complained. >>> >>>>> + return abi_handle_regs (cand->insn); >>>>> outcome = make_defs_and_copies_lists (cand->insn, set_pat, state); >>>>> @@ -1036,6 +1160,15 @@ combine_reaching_defs (ext_cand *cand, >>>>> const_rtx set_pat, ext_state *state) >>>>> } >>>>> } >>>>> + rtx insn_set = single_set (cand->insn); >>>>> + >>>>> + machine_mode mode = (GET_MODE (XEXP (SET_SRC (insn_set), 0))); >>> Excess braces. >>> Also in a lot of other spots in your patch. >>> Please read the coding conventions and the patch, once again, before >>> submission? >>> thanks >