From patchwork Sun Sep 18 20:15:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mikael Morin X-Patchwork-Id: 1679067 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=IvYF+kgd; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MVzc7151nz1ypH for ; Mon, 19 Sep 2022 06:16:55 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 2A6A03855148 for ; Sun, 18 Sep 2022 20:16:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2A6A03855148 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1663532213; bh=lc3oalQvx8uKDoIn5Uy3SfZvcyTj4yVcDixGx8USxbI=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=IvYF+kgdEWHzyHGZ2q2lKqm2P1vEGMrYKP3rzVLDApkJ2oQEaaMK5j50I5aH8PbWF yjZ8Rl2XVB8V+mTo+fpK8WF9iPgKyHdPlkLu14TYmcHxEAAbNOv5mgJwTmro2yN3dp MxsDEzgI44UtTrC31xXPEiRn1vMvgHDpDik3ZMdU= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtp.smtpout.orange.fr (smtp-27.smtpout.orange.fr [80.12.242.27]) by sourceware.org (Postfix) with ESMTPS id 47BEE3858C00 for ; Sun, 18 Sep 2022 20:15:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 47BEE3858C00 Received: from cyrano.home ([86.215.174.255]) by smtp.orange.fr with ESMTPA id a0hgorqvnjJi0a0hmokkE8; Sun, 18 Sep 2022 22:15:54 +0200 X-ME-Helo: cyrano.home X-ME-Auth: bW9yaW4tbWlrYWVsQG9yYW5nZS5mcg== X-ME-Date: Sun, 18 Sep 2022 22:15:54 +0200 X-ME-IP: 86.215.174.255 To: gcc-patches@gcc.gnu.org, fortran@gcc.gnu.org Subject: [PATCH v2 0/9] fortran: clobber fixes [PR41453] Date: Sun, 18 Sep 2022 22:15:36 +0200 Message-Id: <20220918201545.453296-1-mikael@gcc.gnu.org> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_00, JMQ_SPF_NEUTRAL, KAM_DMARC_STATUS, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NEUTRAL, TXREP autolearn=no 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: Mikael Morin via Gcc-patches From: Mikael Morin Reply-To: Mikael Morin Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" Hello, this is the second version of a set of changes around the clobber we generate in the caller before a procedure call, for each actual argument whose associated dummy has the INTENT(OUT) attribute. The clobbering of partial variables (array elements, structure components) proved to be unsupported by the middle-end optimizers, even if it seemed to work in practice. So this version just removes it. v1 of the series was posted here: https://gcc.gnu.org/pipermail/gcc-patches/2022-September/601713.html https://gcc.gnu.org/pipermail/fortran/2022-September/058165.html Changes from v1: - patch 9/10 (clobber subreferences) has been dropped. - patch 10/10 (now 9/9): The test has been adjusted because some checks were failing without the dropped patch. Basically there are less clobbers generated. - patch 5: In the test, an explicit kind has been added to integers, so that the dump match is not dependent on the -fdefault-integer-8 option. - patches 3, 4, 5, 8, and 10/10 (now 9/9): The tests have been renamed so that they are numbered in increasing order. The first patch is a refactoring moving the clobber generation in gfc_conv_procedure_call where it feels more appropriate. The second patch is a fix for the ICE originally motivating my work on this topic. The third patch is a fix for some wrong code issue discovered with an earlier version of this series. The following patches are gradual condition loosenings to enable clobber generation in more and more cases. Each patch has been tested through an incremental bootstrap and a partial testsuite run on fortran *intent* tests, and the whole lot has been run through the full fortran regression testsuite. OK for master? Harald Anlauf (1): fortran: Support clobbering with implicit interfaces [PR105012] Mikael Morin (8): fortran: Move the clobber generation code fortran: Fix invalid function decl clobber ICE [PR105012] fortran: Move clobbers after evaluation of all arguments [PR106817] fortran: Support clobbering of reference variables [PR41453] fortran: Support clobbering of SAVE variables [PR87395] fortran: Support clobbering of ASSOCIATE variables [PR87397] fortran: Support clobbering of allocatables and pointers [PR41453] fortran: Support clobbering of derived types [PR41453] gcc/fortran/trans-expr.cc | 81 ++++++++++++------- gcc/fortran/trans.h | 3 +- .../gfortran.dg/intent_optimize_4.f90 | 43 ++++++++++ .../gfortran.dg/intent_optimize_5.f90 | 24 ++++++ .../gfortran.dg/intent_optimize_6.f90 | 34 ++++++++ .../gfortran.dg/intent_optimize_7.f90 | 42 ++++++++++ .../gfortran.dg/intent_optimize_8.f90 | 66 +++++++++++++++ gcc/testsuite/gfortran.dg/intent_out_15.f90 | 27 +++++++ 8 files changed, 290 insertions(+), 30 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/intent_optimize_4.f90 create mode 100644 gcc/testsuite/gfortran.dg/intent_optimize_5.f90 create mode 100644 gcc/testsuite/gfortran.dg/intent_optimize_6.f90 create mode 100644 gcc/testsuite/gfortran.dg/intent_optimize_7.f90 create mode 100644 gcc/testsuite/gfortran.dg/intent_optimize_8.f90 create mode 100644 gcc/testsuite/gfortran.dg/intent_out_15.f90