From patchwork Fri Dec 21 21:36:44 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Botcazou X-Patchwork-Id: 207878 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 875E02C0084 for ; Sat, 22 Dec 2012 08:40:16 +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=1356730817; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: Received:From:To:Subject:Date:Message-ID:User-Agent:MIME-Version: Content-Type:Content-Transfer-Encoding:Mailing-List:Precedence: List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender: Delivered-To; bh=5hIZbncp9scLHbcJamoV7VC2Oqk=; b=qXSU8M2h6u7wI3o CeoamNrMRBkvG+k0bbq0p9J8svbKY+aEepwwk+ZhhosNyfo9bSWWXgzuQxNkrvyX qeT+Eas1rClB/IHpIyQEPY8YYd+PLB+/TtVbOkZXLoN33H0bRCIsM6zlGFrHR3J1 K5OtPWobRzYfaGTYHFQ81ltcvzrs= 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:Received:From:To:Subject:Date:Message-ID:User-Agent:MIME-Version:Content-Type:Content-Transfer-Encoding:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=MOp1IAi4ADN4Eaa9cKN94dbf453AB/3TPSDXbkuFkCRAKKy7yu23JNxrRirfLS udlr1MFyZPlJoEbHk0vzZ7GwJ0O+Q7tnhO5vUIJXio72lpBJtca4o2v8Ix07CIZR VarCjINHLRo/v1q4wcr4TUPUJ+TYyXubF507iW36XWIBw=; Received: (qmail 22332 invoked by alias); 21 Dec 2012 21:40:09 -0000 Received: (qmail 22310 invoked by uid 22791); 21 Dec 2012 21:40:07 -0000 X-SWARE-Spam-Status: No, hits=-2.2 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; Fri, 21 Dec 2012 21:39:59 +0000 Received: from localhost (localhost [127.0.0.1]) by filtered-smtp.eu.adacore.com (Postfix) with ESMTP id 3E272290053 for ; Fri, 21 Dec 2012 22:40:05 +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 UnjcUd4rWSfB for ; Fri, 21 Dec 2012 22:40:05 +0100 (CET) Received: from polaris.localnet (bon31-6-88-161-99-133.fbx.proxad.net [88.161.99.133]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mel.act-europe.fr (Postfix) with ESMTP id 07414290050 for ; Fri, 21 Dec 2012 22:40:05 +0100 (CET) From: Eric Botcazou To: gcc-patches@gcc.gnu.org Subject: Minor fix for UNSPEC_VOLATILE Date: Fri, 21 Dec 2012 22:36:44 +0100 Message-ID: <1851911.cImv7d0m3y@polaris> User-Agent: KMail/4.7.2 (Linux/3.1.10-1.16-desktop; KDE/4.7.2; x86_64; ; ) 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 The more you dig into the UNSPEC_VOLATILE/asm volatile business, the more you find that the manual, the code and the comments entirely disagree about them. At least something is consistent: as documented in rtl.def, UNSPEC_VOLATILE can trap. That's why it was wrong for the unspec_may_trap_p hook to handle them in addition to regular UNSPECs. Fortunately, only IA-64 defines the hook and it doesn't do anything for UNSPEC_VOLATILEs. Tested on x86-64/Linux and IA-64/Linux, applied on the mainline. 2012-12-21 Eric Botcazou * rtlanal.c (volatile_insn_p): Delete commented out code. (side_effects_p): Likewise. (may_trap_p_1) : Return 1 again. * target.def (unspec_may_trap_p): Adjust comment. * targhooks.c (default_unspec_may_trap_p): Don't handle UNSPEC_VOLATILE. * config/ia64/ia64.c (ia64_unspec_may_trap_p): Adjust to above change. Index: targhooks.c =================================================================== --- targhooks.c (revision 194669) +++ targhooks.c (working copy) @@ -102,10 +102,8 @@ default_unspec_may_trap_p (const_rtx x, { int i; - if (GET_CODE (x) == UNSPEC_VOLATILE - /* Any floating arithmetic may trap. */ - || (SCALAR_FLOAT_MODE_P (GET_MODE (x)) - && flag_trapping_math)) + /* Any floating arithmetic may trap. */ + if ((SCALAR_FLOAT_MODE_P (GET_MODE (x)) && flag_trapping_math)) return 1; for (i = 0; i < XVECLEN (x, 0); ++i) Index: target.def =================================================================== --- target.def (revision 194669) +++ target.def (working copy) @@ -1816,7 +1816,7 @@ DEFHOOK "", rtx, (rtx hard_reg), NULL) -/* Return nonzero if evaluating UNSPEC[_VOLATILE] X might cause a trap. +/* Return nonzero if evaluating UNSPEC X might cause a trap. FLAGS has the same meaning as in rtlanal.c: may_trap_p_1. */ DEFHOOK (unspec_may_trap_p, Index: rtlanal.c =================================================================== --- rtlanal.c (revision 194669) +++ rtlanal.c (working copy) @@ -2107,7 +2107,6 @@ volatile_insn_p (const_rtx x) return 0; case UNSPEC_VOLATILE: - /* case TRAP_IF: This isn't clear yet. */ return 1; case ASM_INPUT: @@ -2240,7 +2239,6 @@ side_effects_p (const_rtx x) case POST_MODIFY: case CALL: case UNSPEC_VOLATILE: - /* case TRAP_IF: This isn't clear yet. */ return 1; case MEM: @@ -2312,9 +2310,9 @@ may_trap_p_1 (const_rtx x, unsigned flag return 0; case UNSPEC: - case UNSPEC_VOLATILE: return targetm.unspec_may_trap_p (x, flags); + case UNSPEC_VOLATILE: case ASM_INPUT: case TRAP_IF: return 1; @@ -2406,8 +2404,7 @@ may_trap_p_1 (const_rtx x, unsigned flag default: /* Any floating arithmetic may trap. */ - if (SCALAR_FLOAT_MODE_P (GET_MODE (x)) - && flag_trapping_math) + if (SCALAR_FLOAT_MODE_P (GET_MODE (x)) && flag_trapping_math) return 1; } Index: config/ia64/ia64.c =================================================================== --- config/ia64/ia64.c (revision 194669) +++ config/ia64/ia64.c (working copy) @@ -5845,19 +5845,16 @@ ia64_secondary_reload_class (enum reg_cl static int ia64_unspec_may_trap_p (const_rtx x, unsigned flags) { - if (GET_CODE (x) == UNSPEC) + switch (XINT (x, 1)) { - switch (XINT (x, 1)) - { - case UNSPEC_LDA: - case UNSPEC_LDS: - case UNSPEC_LDSA: - case UNSPEC_LDCCLR: - case UNSPEC_CHKACLR: - case UNSPEC_CHKS: - /* These unspecs are just wrappers. */ - return may_trap_p_1 (XVECEXP (x, 0, 0), flags); - } + case UNSPEC_LDA: + case UNSPEC_LDS: + case UNSPEC_LDSA: + case UNSPEC_LDCCLR: + case UNSPEC_CHKACLR: + case UNSPEC_CHKS: + /* These unspecs are just wrappers. */ + return may_trap_p_1 (XVECEXP (x, 0, 0), flags); } return default_unspec_may_trap_p (x, flags);