------- Comment #133 from mark at codesourcery dot com  2007-05-23 19:43 -------
Subject: Re:  [4.0/4.1/4.2/4.3 Regression] placement
 new does not change the dynamic type as it should

ian at airs dot com wrote:

> The case where TBAA is most useful is on a deeply pipelined in-order processor
> with multiple function units and a high latency memory cache.  One example 
> I've
> worked on is an embedded VLIW processor with vector instructions.  TBAA is of
> relatively little interest on an out-of-order processor.

The original motivating case for me was stuff like:

  void f (int *a, double *d) {
    for (int i = 1; i < N; ++i) {
      a[i] += i;
      d[i] = d[i-1] * a[i];
    }
  }

That's not the right code, but the point is that TBAA can allow us to
avoid reloading d[i-1] from one iteration to the next, despite the store
to a[i].  That reduces memory access and instruction count.  Ordinary
PTA does not allow this.

Of course, Gaby's memory model doesn't allow this optimization either;
we have to worry that "a" and "d" are both in some union somewhere.
That's why Gaby's model is so bad from an optimization point of view; it
makes the compiler assume a worst-case situation, even though that
worst-case situation almost never actually happens.

I'm not an expert on CPU models, so I'm not sure how out-of-order vs.
in-order might matter here.

> And I think we see the outlines of a
> successful patch: make placement new return a pointer which effectively 
> aliases
> everything.  That will permit us to reorder loads and eliminate dead stores. 
> It won't permit us to arbitrarily re-order loads and stores, but I'm skeptical
> that that will count as a severe penalty.

That's exactly what I think.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29286

Reply via email to