From patchwork Fri Jul 1 22:04:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Lance Taylor X-Patchwork-Id: 55648 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 10EB838582A5 for ; Fri, 1 Jul 2022 22:05:05 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 10EB838582A5 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1656713105; bh=7EZvv7sQnuyY4w0A0o8gVxvds2N4JznIXAiqdb9tVHg=; h=Date:Subject:To:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=Nvgz57PfT+JSAN0F3BZaYSumofFaHsVTBRfZTsDbJameyvRiKzMC480W4TC8HyNLu DWTjaT7SRNS1qGXm+Gcx/JDjbbsCZ/U8IWEVIf85qKBNXhhbmKYQKeoOXWtsNvfHXs 95am335Izyt8oEBGzJA2Le5rCYPlNY9odadBBHFI= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pl1-x629.google.com (mail-pl1-x629.google.com [IPv6:2607:f8b0:4864:20::629]) by sourceware.org (Postfix) with ESMTPS id CA40D3858C51 for ; Fri, 1 Jul 2022 22:04:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org CA40D3858C51 Received: by mail-pl1-x629.google.com with SMTP id m14so3566351plg.5 for ; Fri, 01 Jul 2022 15:04:34 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=7EZvv7sQnuyY4w0A0o8gVxvds2N4JznIXAiqdb9tVHg=; b=bNZ2tS71kP4gUdmUF+MbuG7XoES+XduTDvPsh2Q29h590PvPY4e8SgayaQy4zIksdt Xt7++HmExInBdqnlhPpyFw6DSByz8IDbM85a1dGqOQ7/yaPneGAynwgSyPwoWeUBMZd+ psoh2Hhs+6MGt8HtmWJCeGbBhqxNaeJ8LA2rNDKXiovE2OyQI0e0F/p2L6KeoGK1Ho6q N9kpD/+XYHNzSdnFqbbq8Oya5ZpSnIMuWirXg5xyloYqasQcOW35XUzH0CMPC4/1nooF Vq+m0EIDOBGWONppzbBisW0Ak6VCl2TmXHiKHNqQRco73G1NtWFkEndDlVtdVqLf5Sek RnDA== X-Gm-Message-State: AJIora8daGGtjyE1IzzSNaZtOWmnxgJJhYKLfIThwyaX1ZkFQyUryvm1 e/SWc3k+Bf6v/rwOyQ0T8StGC55Slv7c4dfzZiohqQ== X-Google-Smtp-Source: AGRyM1vrOgO5uZKSLXgPL/Pvxew/hl8duiIisl1RhTYNunSFWZ/MFS03vGvTT0rp8ekWM/gooUatk682y9bRk/Lic/U= X-Received: by 2002:a17:90b:3812:b0:1ec:ca8a:f15c with SMTP id mq18-20020a17090b381200b001ecca8af15cmr19036330pjb.187.1656713073774; Fri, 01 Jul 2022 15:04:33 -0700 (PDT) MIME-Version: 1.0 Date: Fri, 1 Jul 2022 15:04:22 -0700 Message-ID: Subject: DSE patch RFA: Don't delete trapping insn To: Richard Biener X-Spam-Status: No, score=-10.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Ian Lance Taylor via Gcc-patches From: Ian Lance Taylor Reply-To: Ian Lance Taylor Cc: gcc-patches , gofrontend-dev Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" The DSE pass can delete a dead store even if the instruction can trap. That is incorrect when using -fnon-call-exceptions -fno-delete-dead-exceptions. This led to a bug report against gccgo: https://go.dev/issue/53012. However, the bug is not specific to Go. This patch fixes the problem in a simple way, and includes a C++ testcase. Bootstrapped and ran C, C++, and Go tests on x86_64-pc-linux-gnu. OK for mainline? Ian From bae426745756896ec0ea27c9e12469c53b88d538 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 1 Jul 2022 14:51:45 -0700 Subject: [PATCH] tree-optimization: only DSE trapping insn if -fdelete-dead-exceptions gcc/ChangeLog: * tree-ssa-dse.cc (dse_optimize_stmt): Only delete a trapping statement if -fdelete-dead-exceptions. gcc/testsuite/ChangeLog: * g++.dg/torture/except-1.C: New test. --- gcc/testsuite/g++.dg/torture/except-1.C | 44 +++++++++++++++++++++++++ gcc/tree-ssa-dse.cc | 3 +- 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/torture/except-1.C diff --git a/gcc/testsuite/g++.dg/torture/except-1.C b/gcc/testsuite/g++.dg/torture/except-1.C new file mode 100644 index 00000000000..7050a33cc27 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/except-1.C @@ -0,0 +1,44 @@ +// { dg-do run { target { i?86-*-linux* i?86-*-gnu* x86_64-*-linux* } } } +// { dg-additional-options "-fexceptions -fnon-call-exceptions -fno-delete-dead-exceptions" } + +#include +#include +#include + +static void +sighandler (int signo, siginfo_t* si, void* uc) +{ + throw (5); +} + +struct S { void *p1, *p2; }; + +struct S v; + +__attribute__ ((noinline)) +int +dosegv () +{ + struct S *p = 0; + struct S s __attribute__((unused)) = *p; + return 0; +} + +int main () +{ + struct sigaction sa; + + memset (&sa, 0, sizeof sa); + sa.sa_sigaction = sighandler; + sigaction (SIGSEGV, &sa, NULL); + sigaction (SIGBUS, &sa, NULL); + + try { + dosegv (); + } + catch (int x) { + return (x != 5); + } + + return 1; +} diff --git a/gcc/tree-ssa-dse.cc b/gcc/tree-ssa-dse.cc index 62efafe384d..8d1739a4510 100644 --- a/gcc/tree-ssa-dse.cc +++ b/gcc/tree-ssa-dse.cc @@ -1463,7 +1463,8 @@ dse_optimize_stmt (function *fun, gimple_stmt_iterator *gsi, sbitmap live_bytes) gimple_call_set_lhs (stmt, NULL_TREE); update_stmt (stmt); } - else + else if (!stmt_could_throw_p (fun, stmt) + || fun->can_delete_dead_exceptions) delete_dead_or_redundant_assignment (gsi, "dead", need_eh_cleanup, need_ab_cleanup); }