From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25992 invoked by alias); 18 Jan 2011 10:50:53 -0000 Received: (qmail 25982 invoked by uid 22791); 18 Jan 2011 10:50:53 -0000 X-SWARE-Spam-Status: No, hits=-2.9 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from localhost (HELO gcc.gnu.org) (127.0.0.1) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 18 Jan 2011 10:50:48 +0000 From: "Joost.VandeVondele at pci dot uzh.ch" To: gcc-bugs@gcc.gnu.org Subject: [Bug middle-end/47341] New: unnecessary versioning in the vectorizer. X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: middle-end X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: Joost.VandeVondele at pci dot uzh.ch X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Message-ID: X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 Date: Tue, 18 Jan 2011 11:40:00 -0000 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: 2011-01/txt/msg01760.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47341 Summary: unnecessary versioning in the vectorizer. Product: gcc Version: 4.6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned@gcc.gnu.org ReportedBy: Joost.VandeVondele@pci.uzh.ch with current trunk: > cat test.f90 SUBROUTINE HARD_NN_4_4_4_5_1_2_4(C,A,B) REAL(KIND=8) :: C(4,*) REAL(KIND=8) :: B(4,*), A(4,*) INTEGER ::i,j,l l= 1 DO j= 1 , 4 , 2 DO i= 1 , 4 , 1 C(i+0,j+0)=C(i+0,j+0)+A(i+0,l+0)*B(l+0,j+0) C(i+0,j+0)=C(i+0,j+0)+A(i+0,l+1)*B(l+1,j+0) C(i+0,j+0)=C(i+0,j+0)+A(i+0,l+2)*B(l+2,j+0) C(i+0,j+0)=C(i+0,j+0)+A(i+0,l+3)*B(l+3,j+0) C(i+0,j+1)=C(i+0,j+1)+A(i+0,l+0)*B(l+0,j+1) C(i+0,j+1)=C(i+0,j+1)+A(i+0,l+1)*B(l+1,j+1) C(i+0,j+1)=C(i+0,j+1)+A(i+0,l+2)*B(l+2,j+1) C(i+0,j+1)=C(i+0,j+1)+A(i+0,l+3)*B(l+3,j+1) ENDDO ENDDO END SUBROUTINE > gfortran-trunk -c -O2 -fno-unroll-loops -ftree-vectorize -ftree-vectorizer-verbose=1 -march=core2 -msse4.2 test.f90 test.f90:7: note: created 1 versioning for alias checks. test.f90:7: note: LOOP VECTORIZED. test.f90:1: note: vectorized 1 loops in function. The compiler should not need to generate various version of these loops. With the bounds info provided, nothing can alias (I think).