------- Comment #10 from rguenth at gcc dot gnu dot org  2010-06-08 15:11 
-------
(In reply to comment #9)
> (In reply to comment #8)
> > I don't think you need flow-sensitivity.
> > 
> > Basically when you have only aggregate uses (as in this case)
> 
> Vectors are considered scalars in GCC.  That is why the solutions
> described above work.
> 
> > then you only want to scalarize if the destination of the use is
> > scalarized as well (to be able to copyprop out the aggregate copy).
> 
> Well, that is what I thought until someone filed PR 43846.

Hm, yes.  But there you know that

  D.2464.m[0] = D.2473_20;
  D.2464.m[1] = D.2472_19;
  D.2464.m[2] = D.2471_18;
  *b_1(D) = D.2464;

D.2464 will be dead after scalarization.  In the particular case of the
current bug the aggregate remains live because of the load from va.v
which we cannot scalarize(*).

(*) we can scalarize this particular case if you manage to build a
proper constructor from the elements - but that's probably a bit
involved.


-- 


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

Reply via email to