From patchwork Fri Jul 21 11:44:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Hubicka X-Patchwork-Id: 123812 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9010:0:b0:3e4:2afc:c1 with SMTP id l16csp143671vqg; Fri, 21 Jul 2023 04:45:42 -0700 (PDT) X-Google-Smtp-Source: APBJJlHlyWBm4RPxVsMF1kTrNszlbZ6ncGmeOGyam/WE6f3CtnkBFxBiGTU8M74hqMgRBuG7DTy8 X-Received: by 2002:a17:906:64da:b0:993:f6c8:300f with SMTP id p26-20020a17090664da00b00993f6c8300fmr1454518ejn.15.1689939942325; Fri, 21 Jul 2023 04:45:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689939942; cv=none; d=google.com; s=arc-20160816; b=JkRn32cW/9H9pOz9darvn1G6/cuvzCOvU5MNwWeCczeMILulLf1MGpT1+7an/g2idQ Cbtf7AFdRORN/XXXmRJVreuMQxuM3dhQ3yvAlial/2fABkOW7XjMYMhnQcNGFm1DxHRE 4mX2yz2MGvgDXlE/le/ssHG672Tge+OCq/7Z7BGZUJ2pzJQpUDRzqt0qHGLeHS2CEdqA c5JY+rdTc6Po13ZanxiBIOzQK5rDewhD8XIQpW3Q9wdcXW9VZrZoyH1QwP5zzjLrj3u7 sZ5RfVWcmR2aDmmmbgtWinuGhW4J54iIvGLr/AmaqI462Omi4VYI6B8J3zjwMyJ2zesw yGDg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-disposition:mime-version:message-id:subject:to:date :dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=vHR9HVLqdS8o+3LZlacoy0fPZkObgM6dZACiIeknl4I=; fh=KxPrluukuxmHUzYWntxWAHNXePa4vWvGreVeug6Wy5k=; b=WcuaZdT+5KO6tLaPt1j1fLIy8WPq3GXd8b0d7i9K4fMgGbUSg4oRmGltrzvNvEm5Kr TxWa1uB8TBGexLOiaNzRDN/NLpvD5hdmz9vYOQ3Oo2xTwpIkmuVa7MFb7IVXXcUdBlBC T54xEQUqcNTiO19NfT76RKwSt4eMY23/WYiAKDO46DYmHnbvs8i7Ze5o+xG8v1R+3T4m TlQ43p/AiaKYUydGzC/vIdBNBagEABh5Z4+nIdpcVXwGEYFeR36jqMZEwJsDoi5fgs7/ ugJFahods2JdLLZP+CBFBT26pcXPYjJ0gpgAKGHHmykXBvDbg/suhzBBOrggcrE61SbJ 3/bA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=JeiL7Fd5; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id a9-20020a170906274900b00992f2becb47si2065123ejd.7.2023.07.21.04.45.42 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Jul 2023 04:45:42 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=JeiL7Fd5; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 269D4385417F for ; Fri, 21 Jul 2023 11:45:40 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 269D4385417F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1689939940; bh=vHR9HVLqdS8o+3LZlacoy0fPZkObgM6dZACiIeknl4I=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=JeiL7Fd5NS/ZH0+vWMfjRwt1cLuDDHh79GcIqmAT/KJjI160HpfQdJIm02yOQS8lU V8Ue+x14O/bdiB/TmuuJlQX27cJLTke7DAZnHvxcpRel8Sq2N7bgy02eOHpdnjRe4Z QNyNi1mT7/oP+RJGr0KPoJlK2bgoYRcqlByLItGo= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from nikam.ms.mff.cuni.cz (nikam.ms.mff.cuni.cz [195.113.20.16]) by sourceware.org (Postfix) with ESMTPS id 823363858D3C for ; Fri, 21 Jul 2023 11:44:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 823363858D3C Received: by nikam.ms.mff.cuni.cz (Postfix, from userid 16202) id A69DC28261A; Fri, 21 Jul 2023 13:44:52 +0200 (CEST) Date: Fri, 21 Jul 2023 13:44:52 +0200 To: gcc-patches@gcc.gnu.org Subject: finite_loop_p tweak Message-ID: MIME-Version: 1.0 Content-Disposition: inline X-Spam-Status: No, score=-11.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, 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: Jan Hubicka via Gcc-patches From: Jan Hubicka Reply-To: Jan Hubicka Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772030464555948247 X-GMAIL-MSGID: 1772030464555948247 Hi, we have finite_p flag in loop structure. finite_loop_p already know to use it, but we also may set the flag when we prove loop to be finite by SCEV analysis to avoid duplicated work. Bootstrapped/regtested x86_64-linux, OK? gcc/ChangeLog: * tree-ssa-loop-niter.cc (finite_loop_p): Reorder to do cheap tests first; update finite_p flag. diff --git a/gcc/tree-ssa-loop-niter.cc b/gcc/tree-ssa-loop-niter.cc index 3c4e66291fb..e5985bee235 100644 --- a/gcc/tree-ssa-loop-niter.cc +++ b/gcc/tree-ssa-loop-niter.cc @@ -3338,24 +3338,6 @@ finite_loop_p (class loop *loop) widest_int nit; int flags; - flags = flags_from_decl_or_type (current_function_decl); - if ((flags & (ECF_CONST|ECF_PURE)) && !(flags & ECF_LOOPING_CONST_OR_PURE)) - { - if (dump_file && (dump_flags & TDF_DETAILS)) - fprintf (dump_file, "Found loop %i to be finite: it is within pure or const function.\n", - loop->num); - return true; - } - - if (loop->any_upper_bound - || max_loop_iterations (loop, &nit)) - { - if (dump_file && (dump_flags & TDF_DETAILS)) - fprintf (dump_file, "Found loop %i to be finite: upper bound found.\n", - loop->num); - return true; - } - if (loop->finite_p) { unsigned i; @@ -3368,11 +3350,36 @@ finite_loop_p (class loop *loop) { if (dump_file) fprintf (dump_file, "Assume loop %i to be finite: it has an exit " - "and -ffinite-loops is on.\n", loop->num); + "and -ffinite-loops is on or loop was + " previously finite.\n", + loop->num); return true; } } + flags = flags_from_decl_or_type (current_function_decl); + if ((flags & (ECF_CONST|ECF_PURE)) && !(flags & ECF_LOOPING_CONST_OR_PURE)) + { + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, + "Found loop %i to be finite: it is within " + "pure or const function.\n", + loop->num); + loop->finite_p = true; + return true; + } + + if (loop->any_upper_bound + /* Loop with no normal exit will not pass max_loop_iterations. */ + || (!loop->finite_p && max_loop_iterations (loop, &nit))) + { + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, "Found loop %i to be finite: upper bound found.\n", + loop->num); + loop->finite_p = true; + return true; + } + return false; }