From patchwork Sun Feb 26 07:59:02 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Walter Lee X-Patchwork-Id: 143080 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 21E1DB6FBD for ; Sun, 26 Feb 2012 18:59:29 +1100 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1330847971; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: Date:Message-Id:From:To:Subject:Reply-to:Mailing-List:Precedence: List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender: Delivered-To; bh=towrMC/KmZHhWxSlATQfCmfM7AA=; b=kheG7XyLZ2gnRZA F3x91DqAnULqofuSbKAZAt4gdRkLsSnyTtg7BP519k7RWysfK4uorD2dSsmXCHCf PQugvhVynSiRwzewITMgNfeMUdLGNWggre5XIE9Xb3cfDLqeqPwYHmhgPSx1yNP/ AkaLs8DEX8q+uxZQvvJ2HyE2Le0o= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:Received:Date:Message-Id:From:To:Subject:Reply-to:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=wJ4zq03LmYu9hRk8ne6i0BHakc1Wt5f/jeSLvWGJvbWqCtm6KPRzLApMqlM3DD 06Syqrba6jHE7DjmcwarVOOLnKcF4IfhFtgAEh9nBFNEQtAhKPHDwBOop1vOVr5W +SP8nc+W7eKcpUMVWMgF5K5OZQlb3aCMCiNquF3hFeEZw=; Received: (qmail 8546 invoked by alias); 26 Feb 2012 07:59:23 -0000 Received: (qmail 8534 invoked by uid 22791); 26 Feb 2012 07:59:22 -0000 X-SWARE-Spam-Status: No, hits=-0.9 required=5.0 tests=AWL, BAYES_00, KHOP_DYNAMIC, RDNS_DYNAMIC, TVD_RCVD_IP, TW_EG X-Spam-Check-By: sourceware.org Received: from 206.83.70.73.ptr.us.xo.net (HELO king.tilera.com) (206.83.70.73) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 26 Feb 2012 07:59:03 +0000 Received: from farm-0039.internal.tilera.com ([10.2.0.69]) by king.tilera.com over TLS secured channel with Microsoft SMTPSVC(6.0.3790.3959); Sun, 26 Feb 2012 02:59:02 -0500 Received: (from walt@localhost) by farm-0039.internal.tilera.com (8.13.8/8.12.11/Submit) id q1Q7x2Uq023098; Sun, 26 Feb 2012 02:59:02 -0500 Date: Sun, 26 Feb 2012 02:59:02 -0500 Message-Id: <201202260759.q1Q7x2Uq023098@farm-0039.internal.tilera.com> From: Walter Lee To: gcc-patches@gcc.gnu.org Subject: [committed] TILE-Gx: Fix tilegx_fixup_pcrel_references Reply-to: Walter Lee 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 This patch fixes a bug in tilegx_fixup_pcrel_references, to properly match and fixup the second instruction of the instruction sequence to generate a pc relative address. Walter * config/tilegx/tilegx.c (match_pcrel_step2): Fix instruction pattern. (replace_mov_pcrel_step2): Ditto. Index: gcc/config/tilegx/tilegx.c =================================================================== --- gcc/config/tilegx/tilegx.c (revision 184581) +++ gcc/config/tilegx/tilegx.c (working copy) @@ -4420,7 +4420,9 @@ replace_mov_pcrel_step1 (rtx insn) static bool match_pcrel_step2 (rtx insn) { - rtx src; + rtx unspec; + rtx addr; + if (TARGET_32BIT) { if (recog_memoized (insn) != CODE_FOR_insn_addr_shl16insli_32bit) @@ -4432,11 +4434,12 @@ match_pcrel_step2 (rtx insn) return false; } - src = SET_SRC (PATTERN (insn)); + unspec = SET_SRC (PATTERN (insn)); + addr = XVECEXP (unspec, 0, 1); - return (GET_CODE (src) == CONST - && GET_CODE (XEXP (src, 0)) == UNSPEC - && XINT (XEXP (src, 0), 1) == UNSPEC_HW0_PCREL); + return (GET_CODE (addr) == CONST + && GET_CODE (XEXP (addr, 0)) == UNSPEC + && XINT (XEXP (addr, 0), 1) == UNSPEC_HW0_PCREL); } @@ -4446,6 +4449,7 @@ replace_mov_pcrel_step2 (rtx insn) { rtx pattern = PATTERN (insn); rtx unspec; + rtx addr; rtx opnds[3]; rtx new_insns; rtx got_rtx = tilegx_got_rtx (); @@ -4453,10 +4457,18 @@ replace_mov_pcrel_step2 (rtx insn) gcc_assert (GET_CODE (pattern) == SET); opnds[0] = SET_DEST (pattern); - unspec = XEXP (SET_SRC (pattern), 0); + unspec = SET_SRC (pattern); + gcc_assert (GET_CODE (unspec) == UNSPEC); + gcc_assert (XINT (unspec, 1) == UNSPEC_INSN_ADDR_SHL16INSLI); + + opnds[1] = XVECEXP (unspec, 0, 0); + + addr = XVECEXP (unspec, 0, 1); + gcc_assert (GET_CODE (addr) == CONST); + + unspec = XEXP (addr, 0); gcc_assert (GET_CODE (unspec) == UNSPEC); gcc_assert (XINT (unspec, 1) == UNSPEC_HW0_PCREL); - opnds[1] = XEXP (XEXP (SET_SRC (pattern), 0), 0); opnds[2] = XVECEXP (unspec, 0, 0); /* We only need to replace SYMBOL_REFs, not LABEL_REFs. */