From patchwork Tue Jun 15 03:00:52 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandre Oliva X-Patchwork-Id: 55600 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id D70B9B7D89 for ; Tue, 15 Jun 2010 13:01:10 +1000 (EST) Received: (qmail 12164 invoked by alias); 15 Jun 2010 03:01:07 -0000 Received: (qmail 11961 invoked by uid 22791); 15 Jun 2010 03:01:05 -0000 X-SWARE-Spam-Status: No, hits=-4.8 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_HI, SPF_HELO_PASS, TW_TM, T_RP_MATCHES_RCVD, T_TVD_MIME_NO_HEADERS X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 15 Jun 2010 03:01:00 +0000 Received: from int-mx03.intmail.prod.int.phx2.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o5F30vLe027298 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 14 Jun 2010 23:00:57 -0400 Received: from localhost.localdomain (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx03.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o5F30slo008881 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Mon, 14 Jun 2010 23:00:56 -0400 Received: from livre.localdomain (livre.oliva.athome.lsd.ic.unicamp.br [172.31.160.2]) by localhost.localdomain (8.14.3/8.14.3) with ESMTP id o5F30sah021271 for ; Tue, 15 Jun 2010 00:00:54 -0300 Received: from livre.localdomain (aoliva@localhost [127.0.0.1]) by livre.localdomain (8.14.3/8.14.3/Debian-5+lenny1) with ESMTP id o5F30rRk003712; Tue, 15 Jun 2010 00:00:53 -0300 Received: (from aoliva@localhost) by livre.localdomain (8.14.3/8.14.3/Submit) id o5F30qT8003711; Tue, 15 Jun 2010 00:00:52 -0300 From: Alexandre Oliva To: gcc-patches@gcc.gnu.org Subject: [PR44248] Fix lto/whopr -g link-time -fcompare-debug failure Date: Tue, 15 Jun 2010 00:00:52 -0300 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) MIME-Version: 1.0 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org When VTA is disabled, LTO streams in debug stmts as gimple nops. This is inadequate, for gimple nops will get in the way of removal of blocks and perhaps other situations in which debug stmts are properly disregarded. Their presence is enough to bring about codegen differences, causing -fcompare-debug failures when an object file compiled with -g -flto is to be link-time compiled without -g, as is the case when -fcompare-debug is given. This patch arranges for us to drop the debug stmts entirely, but to do so only after applying fixups. We could drop them a bit earlier, while filling in the stmts array, but then we'd have to worry about NULL stmt entries in the array (should debug stmts have fixups) and the array would probably be slower, for we'd have to test MAY_HAVE_DEBUG_STMTS multiple times. Is this ok, if it passes regstrap on x86_64-linux-gnu? for gcc/ChangeLog from Alexandre Oliva PR debug/44248 * lto-streamer-in.c (input_bb): Leave debug stmts alone. (input_function): Drop them here, if VTA is disabled. Index: gcc/lto-streamer-in.c =================================================================== --- gcc/lto-streamer-in.c.orig 2010-06-14 23:22:09.000000000 -0300 +++ gcc/lto-streamer-in.c 2010-06-14 23:46:42.000000000 -0300 @@ -1204,13 +1204,6 @@ input_bb (struct lto_input_block *ib, en { gimple stmt = input_gimple_stmt (ib, data_in, fn, tag); - /* Change debug stmts to nops on-the-fly if we do not have VTA enabled. - This allows us to build for example static libs with debugging - enabled and do the final link without. */ - if (!MAY_HAVE_DEBUG_STMTS - && is_gimple_debug (stmt)) - stmt = gimple_build_nop (); - find_referenced_vars_in (stmt); gsi_insert_after (&bsi, stmt, GSI_NEW_STMT); @@ -1395,6 +1388,22 @@ input_function (tree fn_decl, struct dat free_dominance_info (CDI_DOMINATORS); free_dominance_info (CDI_POST_DOMINATORS); free (stmts); + + /* Having applied fixups, drop debug stmts if VTA is disabled. This + allows us to build for example static libs with debugging enabled + and do the final link without. */ + if (!MAY_HAVE_DEBUG_STMTS) + FOR_ALL_BB (bb) + { + gimple_stmt_iterator bsi = gsi_start_bb (bb); + while (!gsi_end_p (bsi)) + { + gimple_stmt_iterator gsi = bsi; + gsi_next (&bsi); + if (is_gimple_debug (gsi_stmt (gsi))) + gsi_remove (&gsi, true); + } + } }