------- 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