On Fri, Oct 28, 2022 at 8:43 AM Dimitrije Milosevic <dimitrije.milose...@syrmia.com> wrote: > > Hi Jeff, > > > THe part I don't understand is, if you only have BASE+OFF, why does > > preventing the calculation of more complex addressing modes matter? ie, > > what's the point of computing the cost of something like base + off + > > scaled index when the target can't utilize it? > > Well, the complexities of all addressing modes other than BASE + OFFSET are > equal to 0. For targets like Mips, which only has BASE + OFFSET, it would > still > be more complex to use a candidate with BASE + INDEX << SCALE + OFFSET > than a candidate with BASE + INDEX, for example, as it has to compensate > the lack of other addressing modes somehow. If complexities for both of > those are equal to 0, in cases where complexities decide which candidate is > to be chosen, a more complex candidate may be picked.
But something is wrong then - it shouldn't ever pick a candidate with an addressing mode that isn't supported? So you say that the cost of expressing 'BASE + INDEX << SCALE + OFFSET' as 'BASE + OFFSET' is not computed accurately? The function tries to compensate for that, maybe you can point out where it goes wrong? That is, at the end it adjusts cost and complexity based on what it scrapped before, maybe that is just a bit incomplete? Note the original author of this is not available so it would help (maybe also yourself) to walk through the function with a specific candidate / use where you think the complexity (or cost) is wrong? > Regards, > Dimitrije > > > From: Jeff Law <jeffreya...@gmail.com> > Sent: Friday, October 28, 2022 1:02 AM > To: Dimitrije Milosevic <dimitrije.milose...@syrmia.com>; > gcc-patches@gcc.gnu.org <gcc-patches@gcc.gnu.org> > Cc: Djordje Todorovic <djordje.todoro...@syrmia.com> > Subject: Re: [PATCH 1/2] ivopts: Revert computation of address cost > complexity. > > > On 10/21/22 07:52, Dimitrije Milosevic wrote: > > From: Dimitrije Milošević <dimitrije.milose...@syrmia.com> > > > > This patch reverts the computation of address cost complexity > > to the legacy one. After f9f69dd, complexity is calculated > > using the valid_mem_ref_p target hook. Architectures like > > Mips only allow BASE + OFFSET addressing modes, which in turn > > prevents the calculation of complexity for other addressing > > modes, resulting in non-optimal candidate selection. > > > > gcc/ChangeLog: > > > > * tree-ssa-address.cc (multiplier_allowed_in_address_p): Change > > to non-static. > > * tree-ssa-address.h (multiplier_allowed_in_address_p): Declare. > > * tree-ssa-loop-ivopts.cc (compute_symbol_and_var_present): > > Reintroduce. > > (compute_min_and_max_offset): Likewise. > > (get_address_cost): Revert > > complexity calculation. > > THe part I don't understand is, if you only have BASE+OFF, why does > preventing the calculation of more complex addressing modes matter? ie, > what's the point of computing the cost of something like base + off + > scaled index when the target can't utilize it? > > > jeff >