From patchwork Tue Nov 2 19:31:55 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Botcazou X-Patchwork-Id: 69920 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 458F7B6EF1 for ; Wed, 3 Nov 2010 06:32:37 +1100 (EST) Received: (qmail 14952 invoked by alias); 2 Nov 2010 19:32:34 -0000 Received: (qmail 14940 invoked by uid 22791); 2 Nov 2010 19:32:31 -0000 X-SWARE-Spam-Status: No, hits=-2.0 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from mel.act-europe.fr (HELO mel.act-europe.fr) (194.98.77.210) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 02 Nov 2010 19:32:22 +0000 Received: from localhost (localhost [127.0.0.1]) by filtered-smtp.eu.adacore.com (Postfix) with ESMTP id E57D6CB0264; Tue, 2 Nov 2010 20:32:19 +0100 (CET) Received: from mel.act-europe.fr ([127.0.0.1]) by localhost (smtp.eu.adacore.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id hDiK0ToMqIIF; Tue, 2 Nov 2010 20:32:19 +0100 (CET) Received: from [192.168.1.2] (bon31-9-83-155-120-49.fbx.proxad.net [83.155.120.49]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mel.act-europe.fr (Postfix) with ESMTP id B87A8CB025D; Tue, 2 Nov 2010 20:32:19 +0100 (CET) From: Eric Botcazou To: Jakub Jelinek Subject: Re: [PATCH] Fix -fcompare-debug issue in reload1 (PR debug/46252) Date: Tue, 2 Nov 2010 20:31:55 +0100 User-Agent: KMail/1.9.9 Cc: gcc-patches@gcc.gnu.org, Alexandre Oliva References: <20101101192348.GB29412@tyan-ft48-01.lab.bos.redhat.com> <201011021942.43925.ebotcazou@adacore.com> <20101102185324.GG29412@tyan-ft48-01.lab.bos.redhat.com> In-Reply-To: <20101102185324.GG29412@tyan-ft48-01.lab.bos.redhat.com> MIME-Version: 1.0 Message-Id: <201011022031.55320.ebotcazou@adacore.com> 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 > For prev_real_insn I think you're right, the remaining two uses also do > want to skip debug insns. It's really only one use, insert_insn_end_bb_new is unused, removed by the attached patch. > For next_real_insn I'm not that sure, it is used e.g. in the scheduler where > we want to see debug insns. > Having prev_real_insn skip debug insns and next_real_insn not skip them > would be inconsistent though. Should we replace all the calls to prev_real_insn by prev_active_insn then and delete the former? The *_active_insn family doesn't return DEBUG_INSNS... * basic-block.h (insert_insn_end_bb_new): Delete. * cfgrtl.c (insert_insn_end_bb_new): Likewise. Index: basic-block.h =================================================================== --- basic-block.h (revision 166172) +++ basic-block.h (working copy) @@ -881,9 +881,6 @@ extern basic_block get_bb_copy (basic_bl void set_loop_copy (struct loop *, struct loop *); struct loop *get_loop_copy (struct loop *); - -extern rtx insert_insn_end_bb_new (rtx, basic_block); - #include "cfghooks.h" /* Return true when one of the predecessor edges of BB is marked with EDGE_EH. */ Index: cfgrtl.c =================================================================== --- cfgrtl.c (revision 166172) +++ cfgrtl.c (working copy) @@ -3090,94 +3090,6 @@ init_rtl_bb_info (basic_block bb) bb->il.rtl = ggc_alloc_cleared_rtl_bb_info (); } - -/* Add EXPR to the end of basic block BB. */ - -rtx -insert_insn_end_bb_new (rtx pat, basic_block bb) -{ - rtx insn = BB_END (bb); - rtx new_insn; - rtx pat_end = pat; - - while (NEXT_INSN (pat_end) != NULL_RTX) - pat_end = NEXT_INSN (pat_end); - - /* If the last insn is a jump, insert EXPR in front [taking care to - handle cc0, etc. properly]. Similarly we need to care trapping - instructions in presence of non-call exceptions. */ - - if (JUMP_P (insn) - || (NONJUMP_INSN_P (insn) - && (!single_succ_p (bb) - || single_succ_edge (bb)->flags & EDGE_ABNORMAL))) - { -#ifdef HAVE_cc0 - rtx note; -#endif - /* If this is a jump table, then we can't insert stuff here. Since - we know the previous real insn must be the tablejump, we insert - the new instruction just before the tablejump. */ - if (GET_CODE (PATTERN (insn)) == ADDR_VEC - || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC) - insn = prev_real_insn (insn); - -#ifdef HAVE_cc0 - /* FIXME: 'twould be nice to call prev_cc0_setter here but it aborts - if cc0 isn't set. */ - note = find_reg_note (insn, REG_CC_SETTER, NULL_RTX); - if (note) - insn = XEXP (note, 0); - else - { - rtx maybe_cc0_setter = prev_nonnote_insn (insn); - if (maybe_cc0_setter - && INSN_P (maybe_cc0_setter) - && sets_cc0_p (PATTERN (maybe_cc0_setter))) - insn = maybe_cc0_setter; - } -#endif - /* FIXME: What if something in cc0/jump uses value set in new - insn? */ - new_insn = emit_insn_before_noloc (pat, insn, bb); - } - - /* Likewise if the last insn is a call, as will happen in the presence - of exception handling. */ - else if (CALL_P (insn) - && (!single_succ_p (bb) - || single_succ_edge (bb)->flags & EDGE_ABNORMAL)) - { - /* Keeping in mind targets with small register classes and parameters - in registers, we search backward and place the instructions before - the first parameter is loaded. Do this for everyone for consistency - and a presumption that we'll get better code elsewhere as well. */ - - /* Since different machines initialize their parameter registers - in different orders, assume nothing. Collect the set of all - parameter registers. */ - insn = find_first_parameter_load (insn, BB_HEAD (bb)); - - /* If we found all the parameter loads, then we want to insert - before the first parameter load. - - If we did not find all the parameter loads, then we might have - stopped on the head of the block, which could be a CODE_LABEL. - If we inserted before the CODE_LABEL, then we would be putting - the insn in the wrong basic block. In that case, put the insn - after the CODE_LABEL. Also, respect NOTE_INSN_BASIC_BLOCK. */ - while (LABEL_P (insn) - || NOTE_INSN_BASIC_BLOCK_P (insn)) - insn = NEXT_INSN (insn); - - new_insn = emit_insn_before_noloc (pat, insn, bb); - } - else - new_insn = emit_insn_after_noloc (pat, insn, bb); - - return new_insn; -} - /* Returns true if it is possible to remove edge E by redirecting it to the destination of the other edge from E->src. */