From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7198 invoked by alias); 12 May 2011 11:37:54 -0000 Received: (qmail 7189 invoked by uid 22791); 12 May 2011 11:37:53 -0000 X-SWARE-Spam-Status: No, hits=-2.7 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; Thu, 12 May 2011 11:37:06 +0000 From: "jakub at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug middle-end/48973] [4.3/4.4/4.5/4.6/4.7 Regression] Inliner bug with one-bit (1-bit) bitfield X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: middle-end X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: jakub at gcc dot gnu.org X-Bugzilla-Status: ASSIGNED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: jakub at gcc dot gnu.org X-Bugzilla-Target-Milestone: 4.3.6 X-Bugzilla-Changed-Fields: 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 Date: Thu, 12 May 2011 11:48:00 -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 X-SW-Source: 2011-05/txt/msg01009.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48973 --- Comment #8 from Jakub Jelinek 2011-05-12 10:31:42 UTC --- (In reply to comment #6) > "Fixed" with bitfield lowering where we expand from > > v.0_1 = v; > BF.1_3 = MEM[(struct S *)&s]; > D.2700_4 = BF.1_3 & -2; > D.2702_6 = v.0_1 < 0; > BF.1_7 = D.2702_6 | D.2700_4; > MEM[(struct S *)&s] = BF.1_7; > D.2693_9 = () BF.1_7; > D.2694_10 = (unsigned int) D.2693_9; > if (D.2694_10 != 4294967295) > > similar to what Jakub proposed to do manually. Well, if bitfield lowering does this and nothing cleans it up, there is room for improvement. It would be sad if it couldn't be optimized already at the tree level back to: v.0_1 = v; BF.1_3 = MEM[(struct S *)&s]; D.2700_4 = BF.1_3 & -2; D.2702_6 = v.0_1 < 0; BF.1_7 = D.2702_6 | D.2700_4; MEM[(struct S *)&s] = BF.1_7; D.2693_9 = () D.2702_6; // change here. Assuming D.2702 // is either > 1 precision, or // unsigned D.2694_10 = (unsigned int) D.2693_9; if (D.2694_10 != 4294967295)