Context sensitive type inheritance graph walking

Jan Hubicka hubicka@ucw.cz
Wed Sep 25 21:17:00 GMT 2013


> 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



More information about the Gcc-patches mailing list