[Bug ipa/91088] New: IPA-cp cost evaluation is too conservative for "if (f(param) cmp const_val)" condition
fxue at os dot amperecomputing.com
gcc-bugzilla@gcc.gnu.org
Fri Jul 5 04:19:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91088
Bug ID: 91088
Summary: IPA-cp cost evaluation is too conservative for "if
(f(param) cmp const_val)" condition
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: ipa
Assignee: unassigned at gcc dot gnu.org
Reporter: fxue at os dot amperecomputing.com
CC: marxin at gcc dot gnu.org
Target Milestone: ---
Current IPA-cp only detects conditional statement like "if (param cmp
const_val)", and gives a reasonable cost evaluation used in function
versioning. But beyond this form, any generalized form as f(param), a function
on the parameter, which involves extra operations and constant values, will be
conservatively treated, have not use in cost computation.
The following is an example, compiled with "-O3 -fno-inline".
The value "5" is propagated into callee(), for "if (v < 3)", ipa-cp can
deduce that "true branch" will not be executed, and benefit for function
versioning is large. And for "if (v * 2 < 6)", ipa-cp can not handle that, and
conservatively takes cost of "true branch" into account, so get a "no need to
clone function" conclusion.
int foo();
int callee(int v)
{
// if (v < 3) // will make a constprop copy with v = 5
// if (v * 2 < 6) // will no make a constprop copy
{
foo();
foo();
foo();
foo();
foo();
foo();
foo();
foo();
foo();
}
else
return 1;
}
int caller()
{
return callee (5);
}
More information about the Gcc-bugs
mailing list