From patchwork Mon Sep 13 06:31:30 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chung-Lin Tang X-Patchwork-Id: 64574 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 92749B6F07 for ; Mon, 13 Sep 2010 16:31:14 +1000 (EST) Received: (qmail 31610 invoked by alias); 13 Sep 2010 06:31:11 -0000 Received: (qmail 31602 invoked by uid 22791); 13 Sep 2010 06:31:10 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL, BAYES_00, T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (38.113.113.100) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 13 Sep 2010 06:31:06 +0000 Received: (qmail 11868 invoked from network); 13 Sep 2010 06:31:04 -0000 Received: from unknown (HELO ?59.105.31.187?) (cltang@127.0.0.2) by mail.codesourcery.com with ESMTPA; 13 Sep 2010 06:31:04 -0000 Message-ID: <4C8DC542.30902@codesourcery.com> Date: Mon, 13 Sep 2010 14:31:30 +0800 From: Chung-Lin Tang User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.9) Gecko/20100825 Thunderbird/3.1.3 MIME-Version: 1.0 To: gcc-patches Subject: [patch] Fix for postreload X-IsSubscribed: yes 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 Hi, this patch is a fix for the move2add transform in the postreload pass; reg_symbol_ref[] was not checked together for some reg_base_reg[] < 0 cases. This was tested to fix a few gcc.dg/torture/fp-int-convert-* execution FAIL cases on trunk for ARM, with no other regressions. Ok for trunk? Thanks, Chung-Lin 2010-09-13 Chung-Lin Tang * postreload.c (move2add_note_store): Add reg_symbol_ref[] checks to update conditions. Index: postreload.c =================================================================== --- postreload.c (revision 164232) +++ postreload.c (working copy) @@ -2104,7 +2104,8 @@ && (MODES_OK_FOR_MOVE2ADD (dst_mode, reg_mode[REGNO (XEXP (src, 1))]))) { - if (reg_base_reg[REGNO (XEXP (src, 1))] < 0) + if (reg_base_reg[REGNO (XEXP (src, 1))] < 0 + && reg_symbol_ref[REGNO (XEXP (src, 1))] == NULL_RTX) offset = reg_offset[REGNO (XEXP (src, 1))]; /* Maybe the first register is known to be a constant. */ @@ -2112,7 +2113,8 @@ > move2add_last_label_luid && (MODES_OK_FOR_MOVE2ADD (dst_mode, reg_mode[REGNO (XEXP (src, 1))])) - && reg_base_reg[REGNO (base_reg)] < 0) + && reg_base_reg[REGNO (base_reg)] < 0 + && reg_symbol_ref[REGNO (base_reg)] == NULL_RTX) { offset = reg_offset[REGNO (base_reg)]; base_reg = XEXP (src, 1);