From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11351 invoked by alias); 19 Nov 2014 02:34:27 -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 Received: (qmail 11334 invoked by uid 48); 19 Nov 2014 02:34:23 -0000 From: "bangerth at gmail dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug tree-optimization/63945] New: Missing vectorization optimization Date: Wed, 19 Nov 2014 02:34:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: tree-optimization X-Bugzilla-Version: 4.9.1 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: bangerth at gmail dot com X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-SW-Source: 2014-11/txt/msg01789.txt.bz2 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63945 Bug ID: 63945 Summary: Missing vectorization optimization Product: gcc Version: 4.9.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: bangerth at gmail dot com (Reporting this for Bruno Turcksin .) The loop in the following testcase cannot be vectorized, we get the error: note: not vectorized: latch block not empty. note: bad loop form. The reason is that val is a member of the class, is evaluated in the if, and is used in the loop that should be vectorized. If these three conditions are satisfied the loop cannot be vectorized. ............................... #include class TEST { public : TEST(); void test(); private : const double val; }; TEST::TEST() : val(2.) {} void TEST::test() { const unsigned int n(1000); std::vector a(n); std::vector b(n); std::vector c(n); for (unsigned int i=0; i