From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14122 invoked by alias); 24 Jan 2012 05:42:13 -0000 Received: (qmail 14034 invoked by uid 22791); 24 Jan 2012 05:42:11 -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, 24 Jan 2012 05:41:59 +0000 From: "amacleod at redhat dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug libstdc++/51798] [4.7 regression] libstdc++ atomicity performance regression due to __sync_fetch_and_add Date: Tue, 24 Jan 2012 07:45:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: libstdc++ X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: amacleod at redhat dot com X-Bugzilla-Status: NEW X-Bugzilla-Priority: P1 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: 4.7.0 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-01/txt/msg02735.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51798 Andrew Macleod changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bkoz at redhat dot com --- Comment #4 from Andrew Macleod 2012-01-24 05:41:43 UTC --- Looking at the old sync.md and rs6000.c files, it looks to me like sync_fetch_and_add always issued a lwsync before the operation and an isync afterwards. With the new atomics, it looks like making these fetch_and_add operations use acq_rel mode, we'd get exactly the same code. I suspect it would be safe to convert those uses in atomicity.h to acq_rel. If acq_rel wasn't sufficient, power would likely have had a defect somewhere over the years... At least that would appear to be safe(r) to me on the surface... And it would return the missing performance? I'd be more hesitant about relaxing the mode any further than that.