This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/59786] New: GIMPLE invariant motion misses opportunity to reduce register pressure
- From: "rguenth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 13 Jan 2014 13:43:19 +0000
- Subject: [Bug tree-optimization/59786] New: GIMPLE invariant motion misses opportunity to reduce register pressure
- Auto-submitted: auto-generated
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.