From patchwork Fri Oct 17 14:16:41 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Evgeny Stupachenko X-Patchwork-Id: 400534 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 93A3C140088 for ; Sat, 18 Oct 2014 01:16:52 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:date:message-id:subject:from:to:content-type; q= dns; s=default; b=Kc6bqrzxTY5KMJexVwYh2vj80ptuq7D1rmHLh7HBHq1YHq +l7wTCs8uH0aUq+vjq8Way1MTEwm47JiSuSoxQbWY9r9hdOWE6J77xBP9YWjvnmf s8C8S5EYu+NFDr+yh0PVE327nkt+0BloRm9jsigsud7MfjnrKw68YgoWDS1Yk= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:date:message-id:subject:from:to:content-type; s= default; bh=WzVoCI/lQdta6bjKUeJL0PTvaqk=; b=vLwevJynvGqxbQKyco54 bY2hhhiTYs5KOtD8s3hk9Cgzsh0Zufw8n7VzyIeHYBTFM+RoUt35NGEZ7yz+LiVJ CHS61J+jSVwGEtECkzMscZN21ZHepjNO0sajCpFhJ5Lm9O0pf9sekyPPKMhujf+k KYDGhtA5p4YMCkRkhitUrMk= Received: (qmail 28517 invoked by alias); 17 Oct 2014 14:16:46 -0000 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 Received: (qmail 28504 invoked by uid 89); 17 Oct 2014 14:16:45 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.5 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail-ie0-f173.google.com Received: from mail-ie0-f173.google.com (HELO mail-ie0-f173.google.com) (209.85.223.173) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Fri, 17 Oct 2014 14:16:44 +0000 Received: by mail-ie0-f173.google.com with SMTP id tp5so816264ieb.32 for ; Fri, 17 Oct 2014 07:16:41 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.107.162.16 with SMTP id l16mr3057092ioe.54.1413555401842; Fri, 17 Oct 2014 07:16:41 -0700 (PDT) Received: by 10.107.6.95 with HTTP; Fri, 17 Oct 2014 07:16:41 -0700 (PDT) Date: Fri, 17 Oct 2014 18:16:41 +0400 Message-ID: Subject: [PARCH 2/2, x86, PR63534] Fix darwin bootstrap From: Evgeny Stupachenko To: GCC Patches , Jeff Law , Jakub Jelinek , Uros Bizjak , iains@gcc.gnu.org X-IsSubscribed: yes Hi, Some instructions (like one in PR63534) could have hidden use of PIC register. Therefore we need to leave SET_GOT not deleted till reload completed. The patch prevents SET_GOT from deleting while PIC register is pseudo. Is it ok? ChangeLog: 2014-10-17 Evgeny Stupachenko PR target/63534 * cse.c (delete_trivially_dead_insns): Consider PIC register is used while it is pseudo. * dse.c (deletable_insn_p): Likewise. switch (GET_CODE (body)) diff --git a/gcc/cse.c b/gcc/cse.c index be2f31b..062ba45 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -6953,6 +6953,11 @@ delete_trivially_dead_insns (rtx_insn *insns, int nreg) /* If no debug insns can be present, COUNTS is just an array which counts how many times each pseudo is used. */ } + /* Pseudo PIC register should be considered as used due to possible + new usages generated. */ + if (pic_offset_table_rtx + && REGNO (pic_offset_table_rtx) >= FIRST_PSEUDO_REGISTER) + counts[REGNO (pic_offset_table_rtx)]++; /* Go from the last insn to the first and delete insns that only set unused registers or copy a register to itself. As we delete an insn, remove usage counts for registers it uses. diff --git a/gcc/dce.c b/gcc/dce.c index 5b7d36e..a52a59c 100644 --- a/gcc/dce.c +++ b/gcc/dce.c @@ -127,6 +127,10 @@ deletable_insn_p (rtx_insn *insn, bool fast, bitmap arg_stores) if (HARD_REGISTER_NUM_P (DF_REF_REGNO (def)) && global_regs[DF_REF_REGNO (def)]) return false; + /* Initialization of pseudo PIC register should never be removed. */ + else if (DF_REF_REG (def) == pic_offset_table_rtx + && REGNO (pic_offset_table_rtx) >= FIRST_PSEUDO_REGISTER) + return false; body = PATTERN (insn);