From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7439 invoked by alias); 4 Mar 2011 16:26:27 -0000 Received: (qmail 7382 invoked by uid 22791); 4 Mar 2011 16:26:25 -0000 X-SWARE-Spam-Status: No, hits=-2.8 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; Fri, 04 Mar 2011 16:26:22 +0000 From: "hubicka at ucw dot cz" To: gcc-bugs@gcc.gnu.org Subject: [Bug middle-end/47980] Inefficient code for local const char arrays 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: hubicka at ucw dot cz X-Bugzilla-Status: RESOLVED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- 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: Fri, 04 Mar 2011 16:26: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-03/txt/msg00422.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47980 --- Comment #7 from Jan Hubicka 2011-03-04 16:26:06 UTC --- > I believe f could do: > assert (arg != "aoeuaoeuaeouaeouaoeuaoeaoxbxod"); > which would then fail with the proposed optimization. It is unspecified if > two string literals with the same content are distinct objects, but foo must be > a distinct object (ok, with static const char foo[] = > "aoeuaoeuaeouaeouaoeuaoeaoxbxod"; and -fmerge-all-constants which ignores some > C requirements it doesn't have to). Hmm, I was not aware of this. I've seen quite few cases of real world code where such local arrays was used only for direct references. It is valid to do the transform in all cases when address is not escaping and it is not used for inequality tests. We do not track the second, but we could. It is however bit tricky to do the actual promotion of automatic scalar var to static as gimplification lower initializers very early and thus we will have to reconstruct it from gimple code. Worthwhile optimization however I think. Honza