From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14577 invoked by alias); 7 May 2012 09:32:29 -0000 Received: (qmail 14567 invoked by uid 22791); 7 May 2012 09:32:28 -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; Mon, 07 May 2012 09:32:15 +0000 From: "rguenth at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug tree-optimization/53243] Use vector comparisons for if cascades Date: Mon, 07 May 2012 09:33: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: enhancement X-Bugzilla-Who: rguenth at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Status Last reconfirmed Ever Confirmed 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-05/txt/msg00695.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53243 Richard Guenther changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2012-05-07 Ever Confirmed|0 |1 --- Comment #1 from Richard Guenther 2012-05-07 09:31:59 UTC --- How does performance look like when you do not have random distribution of comparison results but branch pedictors can do a good job? Thus, are branch pedictors not disabled by this transform, only retaining branch target buffering? Your code can probably be optimized further by recognizing that only the parameter to cb is conditional if we don't take the else branch, thus do if (!(a < 8.0)) ++o; else do vector compare, compute cb argument from result and call cb doing no branches at all. I don't see where your or the above transform would best fit into. It's straight-line code as written, still we'd need to perform some if-conversion (difficult for calls, so only pairs with the above idea) and then vectorization.