This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tree-optimization/59786] New: GIMPLE invariant motion misses opportunity to reduce register pressure


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59786

            Bug ID: 59786
           Summary: GIMPLE invariant motion misses opportunity to reduce
                    register pressure
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Keywords: missed-optimization
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rguenth at gcc dot gnu.org

For the following testcase LIM doesn't hoist a + b out of the loop (use -O1)

int x[1024];
void foo (int a, int b)
{
  int i;
  for (i = 0; i < 1024; ++i)
    x[i] = a + b;
}

_6 = a_4(D) + b_5(D);
  invariant up to level 1, cost 1.

but

/* The cost of expression in loop invariant motion that is considered
   expensive.  */
DEFPARAM(PARAM_LIM_EXPENSIVE,
         "lim-expensive",
         "The minimum cost of an expensive expression in the loop invariant
motion",
         20, 0, 0)

and we only hoist "expensive" computations.  What is considered expensive
should consider the effect on register pressure.

Note that PRE happily moves all invariants without cost consideration.

For the testcase later RTL invariant motion hoists the addition.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]