From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 0DCEC3858D39 for ; Wed, 1 Feb 2023 11:37:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0DCEC3858D39 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1675251452; h=from:from:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type; bh=4I97UWg50j7hAuYpM7kINYdFsWxUCr5RUrNgy7qckz0=; b=b4dXye3CuG3XDjqx+kWgQD6XEYsopYAQn+a8atajDgH53dQleI4p7YMS9a3tFNyb+GuCMs KNYjuCeUBnPMNvwNR6pXNVPYD/XX6aStsku6wYrWaAc0SNlCsMB9Ftv5+fdByF4pR/hEz1 zxsUhFZHA4bp1wl87YffPi3L//s2vcw= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-222-3AzWY0zrMr2T4WxSTbyehQ-1; Wed, 01 Feb 2023 06:37:29 -0500 X-MC-Unique: 3AzWY0zrMr2T4WxSTbyehQ-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 18718101A521; Wed, 1 Feb 2023 11:37:29 +0000 (UTC) Received: from tucnak.zalov.cz (unknown [10.39.192.223]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C36EA112132C; Wed, 1 Feb 2023 11:37:28 +0000 (UTC) Received: from tucnak.zalov.cz (localhost [127.0.0.1]) by tucnak.zalov.cz (8.17.1/8.17.1) with ESMTPS id 311BbPVc3219441 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Wed, 1 Feb 2023 12:37:26 +0100 Received: (from jakub@localhost) by tucnak.zalov.cz (8.17.1/8.17.1/Submit) id 311BbOjp3219440; Wed, 1 Feb 2023 12:37:24 +0100 Date: Wed, 1 Feb 2023 12:37:24 +0100 From: Jakub Jelinek To: Jeff Law , Richard Biener , Eric Botcazou Cc: gcc-patches@gcc.gnu.org Subject: [PATCH] ree: Fix -fcompare-debug issues in combine_reaching_defs [PR108573] Message-ID: Reply-To: Jakub Jelinek MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Spam-Status: No, score=-3.5 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Hi! The PR78437 r7-4871 changes made combine_reaching_defs punt on WORD_REGISTER_OPERATIONS targets if a setter of smaller than word register has wider uses. This unfortunately breaks -fcompare-debug, because if such a use appears only in DEBUG_INSN(s), while all other uses aren't wider than the setter, we can REE optimize it without -g and not with -g. Such decisions shouldn't be based on debug instructions. We could try to reset them or adjust in some other way after we decide to perform the change, but at least on the testcase which used to fail on riscv64-linux the (debug_insn 8 7 9 2 (var_location:HI s (minus:HI (subreg:HI (and:DI (reg:DI 10 a0 [160]) (const_int 1 [0x1])) 0) (subreg:HI (ashiftrt:DI (reg/v:DI 9 s1 [orig:151 l ] [151]) (debug_expr:SI D#1)) 0))) "pr108573.c":12:5 -1 (nil)) clearly doesn't care about the upper bits and I have hard time imaging how could one end up with DEBUG_INSN which actually cares about those upper bits. So, the following patch just ignores uses on DEBUG_INSNs in this case, if we run into something where we'd need to do something further later on, let's deal with it when we have a testcase for it. Bootstrapped/regtested on x86_64-linux and i686-linux (admittedly non-WORD_REGISTER_OPERATIONS targets) and tested using a cross to riscv64-linux on the testcase, ok for trunk? 2023-02-01 Jakub Jelinek PR debug/108573 * ree.cc (combine_reaching_defs): Don't return false for paradoxical subregs in DEBUG_INSNs. * gcc.dg/pr108573.c: New test. --- gcc/ree.cc.jj 2023-02-01 10:19:22.833436546 +0100 +++ gcc/ree.cc 2023-02-01 12:25:57.468252609 +0100 @@ -875,7 +875,8 @@ combine_reaching_defs (ext_cand *cand, c for (df_link *use = uses; use; use = use->next) if (paradoxical_subreg_p (GET_MODE (*DF_REF_LOC (use->ref)), - GET_MODE (SET_DEST (*dest_sub_rtx)))) + GET_MODE (SET_DEST (*dest_sub_rtx))) + && !DEBUG_INSN_P (DF_REF_INSN (use->ref))) return false; } @@ -963,7 +964,8 @@ combine_reaching_defs (ext_cand *cand, c rtx dest2 = SET_DEST (*dest_sub_rtx2); for (use = uses; use; use = use->next) if (paradoxical_subreg_p (GET_MODE (*DF_REF_LOC (use->ref)), - GET_MODE (dest2))) + GET_MODE (dest2)) + && !DEBUG_INSN_P (DF_REF_INSN (use->ref))) break; if (use) break; --- gcc/testsuite/gcc.dg/pr108573.c.jj 2023-02-01 12:15:20.476577340 +0100 +++ gcc/testsuite/gcc.dg/pr108573.c 2023-02-01 12:15:03.044832520 +0100 @@ -0,0 +1,18 @@ +/* PR debug/108573 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fcompare-debug" } */ + +unsigned g; + +int bar (void); +int baz (int); + +void +foo (unsigned short s, long l) +{ + unsigned u = bar (); + s &= __builtin_add_overflow_p (0, u, 0); + s %= g; + s -= l >> s; + baz (s); +} Jakub