From: "hongtao.liu" <hongtao....@intel.com>

-  /* Uses in a group can share setup code, so only add setup cost once.  */
-  cost -= cost.scratch;

It looks like the original code took into account avoiding double
counting, but unfortunately cost is reset inside the follow loop which
invalidates the upper code, and makes same setup code cost duplicated in
each use of the group.

The patch fix the issue. It can also improve 548.exchange_r by 6% with
-march=x86-64-v3 -O2 due to better ivopt on EMR.

No big performance impact for SPEC2017 on graviton4/SPR with -mcpu=native
-Ofast -fomit-framepointer -flto=auto.

Bootstrapped and regtested on x86_64-pc-linux-gnu{-m32,}.
Ok for trunk?

gcc/ChangeLog:

        PR target/115842
        * tree-ssa-loop-ivopts.cc (determine_group_iv_cost_address):
        Don't recalculate inv_expr when group-candidate cost
        calucalution.
---
 gcc/tree-ssa-loop-ivopts.cc | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/gcc/tree-ssa-loop-ivopts.cc b/gcc/tree-ssa-loop-ivopts.cc
index e37b24062f7..80c1955572f 100644
--- a/gcc/tree-ssa-loop-ivopts.cc
+++ b/gcc/tree-ssa-loop-ivopts.cc
@@ -5016,8 +5016,6 @@ determine_group_iv_cost_address (struct ivopts_data *data,
        sum_cost = infinite_cost;
     }
 
-  /* Uses in a group can share setup code, so only add setup cost once.  */
-  cost -= cost.scratch;
   /* Compute and add costs for rest uses of this group.  */
   for (i = 1; i < group->vuses.length () && !sum_cost.infinite_cost_p (); i++)
     {
@@ -5033,7 +5031,12 @@ determine_group_iv_cost_address (struct ivopts_data 
*data,
            if (!inv_exprs)
              inv_exprs = BITMAP_ALLOC (NULL);
 
-           bitmap_set_bit (inv_exprs, inv_expr->id);
+           /* Uses in a group can share setup code,
+              so only add setup cost once.  */
+           if (bitmap_bit_p (inv_exprs, inv_expr->id))
+             cost -= cost.scratch;
+           else
+             bitmap_set_bit (inv_exprs, inv_expr->id);
          }
       sum_cost += cost;
     }
-- 
2.34.1

Reply via email to