From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30093 invoked by alias); 26 Jun 2012 08:31:54 -0000 Received: (qmail 30076 invoked by uid 22791); 26 Jun 2012 08:31:50 -0000 X-SWARE-Spam-Status: No, hits=-4.3 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00,KHOP_THREADED 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, 26 Jun 2012 08:31:38 +0000 From: "jakub at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug tree-optimization/53773] Vectorizer generates non-canonical multiplies Date: Tue, 26 Jun 2012 08:31:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: tree-optimization X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: jakub 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-Changed-Fields: CC Message-ID: In-Reply-To: References: X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 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: 2012-06/txt/msg01706.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53773 Jakub Jelinek changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #1 from Jakub Jelinek 2012-06-26 08:31:36 UTC --- Seems this is vect_is_simple_reduction_1's: if (check_reduction) { /* Swap operands (just for simplicity - so that the rest of the code can assume that the reduction variable is always the last (second) argument). */ if (vect_print_dump_info (REPORT_DETAILS)) report_vect_op (def_stmt, "detected reduction: need to swap operands: "); swap_tree_operands (def_stmt, gimple_assign_rhs1_ptr (def_stmt), gimple_assign_rhs2_ptr (def_stmt)); } at least on the first testcase. Now, the question is how hard would it be to adjust the vectorizer so that it would work even without doing this swapping, or alternatively if we shouldn't canonicalize the operand order afterwards.