From patchwork Tue Mar 8 20:59:03 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 51804 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 154683857C5E for ; Tue, 8 Mar 2022 20:59:51 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 154683857C5E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1646773191; bh=qsXyeJ3vTO8HGw8zIu6Lh78L56d35g7Fn4HDkxVCUV8=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=V2EVuuzzXPHbWf8suoBy/hYqhRc0YcaS9UpAUWylCYrPmz+5wdAw5OmeFyfT1ptrx 98/nxFiQ2alxQdjIm+a07ntnZMVvlee0pXzBByIxWs2IsM02RFBYdAgdNZAV7eO/lB vxRpL4vWx5wzcSb0Pq51eahAWV/rZByl3PQGRdVY= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) by sourceware.org (Postfix) with ESMTPS id 0E53D3858C83; Tue, 8 Mar 2022 20:59:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 0E53D3858C83 X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [93.207.86.12] ([93.207.86.12]) by web-mail.gmx.net (3c-app-gmx-bap36.server.lan [172.19.172.106]) (via HTTP); Tue, 8 Mar 2022 21:59:03 +0100 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH, committed] PR fortran/104811 - maxloc/minloc cannot accept character arguments without `dim` optional argument Date: Tue, 8 Mar 2022 21:59:03 +0100 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:/kgj0Wo46+u3R1L0lvT4gI+EFDFd0PLbATAnLRWfMRw7OvHJOo7UG40E0+4iCrvx6BCZg oy7JCbJudlphAimZEdJXBkB2uvdLcOOxQW0FTMPTa6sOSQsrW0lQ5i0S/qMhBjGL72qMYkEbTthb gL17em9vfyS5Z3YP3TWyikK2UwUMPmfUyhq0NgXstz8Ws1WACL2bXq5xWXEMcfQlMKgCn+YPa5BQ zkgfNidgnad0ct+n8cdMwiY6+Bvg81O13bhannjee5sILSgE3wO6nngAMG1RrcruUt/3e30KBoBt tc= X-UI-Out-Filterresults: notjunk:1;V03:K0:mLs0o6o55pQ=:VXu5QdNilhEEgOz0lfCgDt T2SdKLgunaqFw1sT01Gwf4cQcX4x6ywTZz2YfOSAxuK57a7uwbVl1JUHs8DKDwto4UdbRR968 TwsmARPekkeqpKILvM2YlVGh9uCE01tF7gY54fEYBzrSN+w2PDyncsIuTZ41+N/xwKd7hFV2d E0CTKLusPwnR58lRwicGRPRx6w+oVUGlVMwEoez1nxf3LUjogPF3x0D8VpB3Pl2WWk0zu4x4B kMkZo2qRNCPohI53yiDnHyewVd/m5ECJPg5rE11qqInk0THtHlpJwiFV/rbSBminVwmEBKTU/ lk+tz2Pc1VrDoJJzuSSfbyaQrP9t2PUGkZnM8xIy7wSm718rAA3k8eAh5E1IiqYbcuRM/2ORC XsUzLP1a7wNLso0riNn7gW1BNo33VtepsA+sBwa/uwe8QPJeEE03I3ZmqOgG3ZTRhtwHRMD8a miHStG5w/T2/oDXSYgkkX+uCv+r6oJJDM0cxvx5ncJlWeZgdXkT7ykan1sft4y5AXyeOs4hRF vtlfTu0Vh+2XHXKtwAl6R1sY8cYWARBn0gtI6ALFAYxQw4iUkXU+xcFbYaGFbDbxTIW8eXPNs zV3eO87BMmzotQlr8mzTDPvpfTqCE2l9cINevG0fdvVHKygfcrBKqFSNpgG//hJaoi17T7Xgh CBEgSmNF619e2bzhubnIYn1cI1TN+9UUybW8j1T+5+j8hYFDvGovHnlcv4kRuw3T2yDwDXyTm xx/MSQv8G5QrwRWcf/EYS/u4OU6BRwPYDbQzIRr8QIcZcnNFeOiCy3Ua2Ny/GGxKmAVqUQ8hJ H/3nV1D X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: Harald Anlauf via Gcc-patches From: Harald Anlauf Reply-To: Harald Anlauf Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Dear all, frontend-optimization of MINLOC/MAXLOC tries to generate code for rank-1 arrays that may be expanded inline later and optimzed. Except when the argument is a character array... As there is even a comment in trans-intrinsic.cc that we will call a library function for character arguments anyway, we better punt here. The attached obvious patch does this and was pre-approved by Thomas in the PR. Regtested on x86_64-pc-linux-gnu and pushed to mainline as https://gcc.gnu.org/g:e3e369dad6cbecb1b490b3f3b154c600fba5a6f3 As this is a wrong-code issue, I'd like to backport this to 11-branch. Thanks, Harald From e3e369dad6cbecb1b490b3f3b154c600fba5a6f3 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Tue, 8 Mar 2022 21:47:04 +0100 Subject: [PATCH] Fortran: do not frontend-optimize MINLOC/MAXLOC for character arrays gcc/fortran/ChangeLog: PR fortran/104811 * frontend-passes.cc (optimize_minmaxloc): Do not attempt frontend-optimization of MINLOC/MAXLOC for character arrays, as there is no suitable code yet for inline expansion. gcc/testsuite/ChangeLog: PR fortran/104811 * gfortran.dg/minmaxloc_16.f90: New test. --- gcc/fortran/frontend-passes.cc | 1 + gcc/testsuite/gfortran.dg/minmaxloc_16.f90 | 14 ++++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/minmaxloc_16.f90 diff --git a/gcc/fortran/frontend-passes.cc b/gcc/fortran/frontend-passes.cc index 4033f27df99..5eba6345145 100644 --- a/gcc/fortran/frontend-passes.cc +++ b/gcc/fortran/frontend-passes.cc @@ -2276,6 +2276,7 @@ optimize_minmaxloc (gfc_expr **e) if (fn->rank != 1 || fn->value.function.actual == NULL || fn->value.function.actual->expr == NULL + || fn->value.function.actual->expr->ts.type == BT_CHARACTER || fn->value.function.actual->expr->rank != 1) return; diff --git a/gcc/testsuite/gfortran.dg/minmaxloc_16.f90 b/gcc/testsuite/gfortran.dg/minmaxloc_16.f90 new file mode 100644 index 00000000000..099248df2e3 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/minmaxloc_16.f90 @@ -0,0 +1,14 @@ +! { dg-do run } +! { dg-options "-fdump-tree-original" } +! PR fortran/104811 +! Frontend-optimization mis-optimized minloc/maxloc of character arrays + +program p + character(1) :: str(3) + str = ["a", "c", "a"] + if (any (maxloc (str) /= 2)) stop 1 + if (minloc (str,dim=1) /= 1) stop 2 +end + +! { dg-final { scan-tree-dump-times "_gfortran_maxloc0_4_s1" 1 "original" } } +! { dg-final { scan-tree-dump-times "_gfortran_minloc2_4_s1" 1 "original" } } -- 2.34.1