From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 104984 invoked by alias); 21 Apr 2015 14:11:20 -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 104883 invoked by uid 48); 21 Apr 2015 14:11:16 -0000 From: "rguenth at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug target/65832] Inefficient vector construction Date: Tue, 21 Apr 2015 14:11:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: target X-Bugzilla-Version: 6.0 X-Bugzilla-Keywords: missed-optimization X-Bugzilla-Severity: normal X-Bugzilla-Who: rguenth at gcc dot gnu.org 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: Message-ID: In-Reply-To: References: 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: 2015-04/txt/msg01733.txt.bz2 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65832 --- Comment #2 from Richard Biener --- typedef unsigned char v16qi __attribute__((vector_size(16))); v16qi baz (int i0, int i1, int i2, int i3, int i10, int i11, int i12, int i13, int i20, int i21, int i22, int i23, int i30, int i31, int i32, int i33) { return (v16qi) { i0, i1, i2, i3, i10, i11, i12, i13, i20, i21, i22, i23, i30, i31, i32, i33 }; } is even more "funny". I'm looking whether the vectorizer cost model for these vector constructors make sense. Currently the cost is case vec_construct: elements = TYPE_VECTOR_SUBPARTS (vectype); return ix86_cost->vec_stmt_cost * (elements / 2 + 1); which for v16qi and generic would be 9 vector stmts. The assembly for the above contains 47 instructions. Not sure where elements / 2 + 1 comes from.