[Bug tree-optimization/3713] Pointers to functions or member functions are not folded or inlined
hubicka at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Jan 16 14:21:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=3713
--- Comment #31 from Jan Hubicka <hubicka at gcc dot gnu.org> 2013-01-16 14:20:46 UTC ---
Well, after early optimizations we get:
int main() ()
{
struct Foo x;
void Foo::<T392> (const struct Foo *) * iftmp.0;
long int _3;
long int _4;
int (*__vtbl_ptr_type) () * _5;
long int _6;
sizetype _7;
int (*__vtbl_ptr_type) () * _8;
<bb 2>:
_3 = (long int) Bar;
_4 = _3 & 1;
if (_4 == 0)
goto <bb 4>;
else
goto <bb 3>;
<bb 3>:
_5 = MEM[(int (*__vtbl_ptr_type) () * *)&x];
that is only later, at ccp2 times turned int
int main() ()
{
struct Foo x;
long int _3;
<bb 2>:
_3 = (long int) Bar;
Foo::Bar (&x);
x ={v} {CLOBBER};
return 0;
}
ccp1 s not able to do this because it still sees:
int main() ()
{
struct
{
void Foo::<T392> (const struct Foo *) * __pfn;
long int __delta;
} y;
struct Foo x;
void Foo::<T392> (const struct Foo *) * iftmp.0;
void Foo::<T392> (const struct Foo *) * _5;
long int _6;
long int _7;
long int _9;
sizetype _10;
struct Foo * _11;
int (*__vtbl_ptr_type) () * _12;
void Foo::<T392> (const struct Foo *) * _13;
long int _14;
long int _15;
sizetype _16;
int (*__vtbl_ptr_type) () * _17;
long int _19;
sizetype _20;
const struct Foo * _21;
<bb 2>:
y.__pfn = Bar;
y.__delta = 0;
_5 = y.__pfn;
_6 = (long int) _5;
_7 = _6 & 1;
if (_7 == 0)
goto <bb 3>;
else
goto <bb 4>;
This is fixed by SRA to:
<bb 2>:
y$__pfn_4 = Bar;
y$__delta_3 = 0;
_5 = y$__pfn_4;
_6 = (long int) _5;
_7 = _6 & 1;
if (_7 == 0)
goto <bb 3>;
else
goto <bb 4>;
<bb 3>:
iftmp.0_8 = y$__pfn_4;
Richi, is there chance for subsequent FRE to catch this?
More information about the Gcc-bugs
mailing list