From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8171 invoked by alias); 8 Jun 2010 15:11:21 -0000 Received: (qmail 8114 invoked by uid 48); 8 Jun 2010 15:11:09 -0000 Date: Tue, 08 Jun 2010 15:11:00 -0000 Message-ID: <20100608151109.8113.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug tree-optimization/44423] [4.5/4.6 Regression] Massive performance regression in SSE code due to SRA In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "rguenth at gcc dot gnu dot org" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2010-06/txt/msg00904.txt.bz2 ------- 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