> On 2013.09.25 at 12:20 +0200, Jan Hubicka wrote: > > this is updated version of > > http://gcc.gnu.org/ml/gcc-patches/2013-09/msg00936.html > > > > Bootstrapped/regtested x86_64-linux. The patch is tested by ipa-devirt9 > > testcase. I have extra four, but I would like to first fix the case where > > the > > devirtualization happens in TODO of early_local_passes that is not dumped > > anywhere. So I plan to post these incrementally once this code is hooked > > also > > into gimple folding. > > > > The patch results in 60% more devirtualizations on Firefox and 10% more > > speculative devirtualization. I think main component missing now is code > > determining dynamic type from a call to constructor. I have some prototype > > for > > this, too, I would like to discuss incrementally. I am not 100% sure how > > much > > harder tracking of dynamic type changes becomes here. > > Hi Honza, > > I've tested your patch and it failed during the "profile generate" phase of an > LTO/PGO build of Firefox. > > Reduced: > > markus@x4 /tmp % cat test.ii > class A { > public: > virtual void m_fn1(); > }; > class B final : A { > ~B(); > virtual void m_fn2() { m_fn1(); } > }; > B::~B() {} > > markus@x4 /tmp % g++ -c -std=c++11 -O2 -c test.ii > test.ii: In member function ???virtual void B::m_fn2()???: > test.ii:7:16: error: stmt (0x7f85504c3130) marked modified after optimization > pass:
Thanks, it looks like latent problem in remove_unreachable_nodes that does not update SSA after changing call to a direct call. I will fix it tomorrow. M:q Honza