From patchwork Tue Jul 18 08:00:13 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bin Cheng X-Patchwork-Id: 789978 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-458378-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="GVjirtcZ"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3xBXfs4B9rz9s78 for ; Tue, 18 Jul 2017 18:01:24 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:content-type:mime-version; q=dns; s=default; b=cek5uBJXQma1spDkOutB23iuRntsgsxJGMwaY9Ddj4zJs27nbT u9b0hPfoYaRJAAeGmiAUsmncf7SiJUh8K1LnKPik1QTehpxIGCRq/HoLPvgANqfQ WdlNaYEZ/CAYOLdciY+ggUSzNe+RnMDr4JgZXRVcMeRq0TPUOruubXXlk= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:content-type:mime-version; s= default; bh=W43iebDJJrWdgi4oU55HCv/asjc=; b=GVjirtcZQ+za3nCbejte o7VoQhQ7I94StfQcAi6HpEl+3jrxc3EwV3dYvkXDv64oTd8eX5rGaBQDcObygK7i HMWNoHvPGE5bCyRvWgeJ1p+8yDT5Fa1mjVRapcAUADnyNaWvA996nDtJDZOxi5sK hPqiHl3B2hic0cres9dC3dU= Received: (qmail 87463 invoked by alias); 18 Jul 2017 08:01:06 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 80342 invoked by uid 89); 18 Jul 2017 08:00:28 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.6 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy=Turn, Hx-languages-length:4807, cay, H*c:HHH X-HELO: EUR01-DB5-obe.outbound.protection.outlook.com Received: from mail-db5eur01on0085.outbound.protection.outlook.com (HELO EUR01-DB5-obe.outbound.protection.outlook.com) (104.47.2.85) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 18 Jul 2017 08:00:26 +0000 Received: from DB5PR0801MB2742.eurprd08.prod.outlook.com (10.166.176.26) by DB5PR0801MB2744.eurprd08.prod.outlook.com (10.166.176.28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1261.13; Tue, 18 Jul 2017 08:00:14 +0000 Received: from DB5PR0801MB2742.eurprd08.prod.outlook.com ([10.166.176.26]) by DB5PR0801MB2742.eurprd08.prod.outlook.com ([10.166.176.26]) with mapi id 15.01.1261.024; Tue, 18 Jul 2017 08:00:13 +0000 From: Bin Cheng To: "gcc-patches@gcc.gnu.org" CC: nd Subject: [PATCH PR81408]Turn TREE level unsafe loop optimizations warning to missed optimization message Date: Tue, 18 Jul 2017 08:00:13 +0000 Message-ID: authentication-results: arm.com; dkim=none (message not signed) header.d=none; arm.com; dmarc=none action=none header.from=arm.com; x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB5PR0801MB2744; 7:5PcG76/+hhkLnujlWQC24FndHR+VLVjaXCKEIko3UZ0NuGQVLrzdXzG+FqtQLE3bPdDuuYRie2CwJjd1ocqp9E1XGmYTWf8B9hatUzcW01syWzWR4Y1qa7sxpY7nJJW3vIPstWzSnDba97PqTxLJHdz0nUvc7FA/kLd9iaIiDnvPLDY25dBsFj9jpr543zIN4NP2PQRs+PloJVpFAqiO9jAqcuHVTdKwx97fwV/gkSl8G+5LNeEkdkIGT9vg7BRrKmDQv3So+SP4Nh5cuGkgP5nmHD7C6grwHPyKwPYCEIF6UIQlP7HZ9ppgeDgshye+hm1X9hmJp8yT7f4npCmO2d43dL501hUqFqoze7EzNHmADSdKPPNCRe6pp2JYQYaGtqQqTIBYb+6+ys+2w+hJV6iUUGccmIWy44MOhVMQOYQSYGfABpScOtXPuou8KmFfPQGaKHttWuKZ8rc0kA7ApH9weLVxkc2Fyp+BsUJXXdAGL6o4pmkG8ls0wmYIuNw8dGBhLGmUD3e67nh6HxvGG2deYgODe4MZ7BRGN+nETTunvg4pYw5dv8lEVMAaezveaTRsiIRsP133PazFQpSkZOshVYc5TYc9I3ZqFKpline8Fam8GzFsCcEqnsWBYfbUiE+WIXWC6O72HJw3nQK0Gc5aA5thc2N/EOQOZFpONx4B7gLuvYJxGaaHSrgaVwPDPstmC8YM64D5tlvurz0yOsIY7FyLApNSBTHsfFcSkNSNJFx94lKJx4zwcjnvRJ4bRrSmG8otrthujOO+cavMUFU/r89xi5WGmPYcAyszzbw= x-ms-office365-filtering-correlation-id: 954f0fac-ca45-4328-1629-08d4cdb30505 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254075)(48565401081)(300000503095)(300135400095)(2017052603031)(49563074)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:DB5PR0801MB2744; x-ms-traffictypediagnostic: DB5PR0801MB2744: nodisclaimer: True x-exchange-antispam-report-test: UriScan:(180628864354917); x-microsoft-antispam-prvs: x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(102415395)(6040450)(601004)(2401047)(2017060910075)(5005006)(8121501046)(100000703101)(100105400095)(3002001)(10201501046)(93006095)(93001095)(6055026)(6041248)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123560025)(20161123558100)(20161123564025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DB5PR0801MB2744; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DB5PR0801MB2744; x-forefront-prvs: 037291602B x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(6009001)(39450400003)(39860400002)(39410400002)(39850400002)(39840400002)(39400400002)(377424004)(66066001)(2351001)(9686003)(53936002)(50986999)(54356999)(6916009)(3846002)(38730400002)(99286003)(102836003)(6116002)(74316002)(110136004)(14454004)(15650500001)(478600001)(2906002)(6506006)(3660700001)(2900100001)(5660300001)(3280700002)(77096006)(72206003)(6436002)(305945005)(7696004)(55016002)(33656002)(8936002)(7736002)(2501003)(5640700003)(4326008)(8676002)(189998001)(81166006)(86362001)(25786009)(99936001); DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR0801MB2744; H:DB5PR0801MB2742.eurprd08.prod.outlook.com; FPR:; SPF:None; MLV:sfv; LANG:en; spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Jul 2017 08:00:13.2181 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR0801MB2744 X-IsSubscribed: yes Hi, I removed unsafe loop optimization on TREE level last year, so GCC doesn't do unsafe loop optimizations on TREE now. All "unsafe loop optimizations" warnings reported by TREE optimizers are simply missed optimizations. This patch turns such warning into missed optimization messages. I didn't change when this will be dumped, for now it is when called from ivopts. Bootstrap and test on x86_64 and AArch64. Is it OK? Thanks, bin 2017-07-13 Bin Cheng PR target/81408 * tree-ssa-loop-niter.c (number_of_iterations_exit): Dump missed optimization for loop niter analysis. gcc/testsuite/ChangeLog 2017-07-13 Bin Cheng PR target/81408 * g++.dg/tree-ssa/pr81408.C: New. * gcc.dg/tree-ssa/pr19210-1.c: Check dump message rather than warning. diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr81408.C b/gcc/testsuite/g++.dg/tree-ssa/pr81408.C new file mode 100644 index 0000000..354d362 --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/pr81408.C @@ -0,0 +1,93 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -std=gnu++11 -fdump-tree-ivopts-missed -Wunsafe-loop-optimizations" } */ + +namespace a { +void b () __attribute__ ((__noreturn__)); +template struct d; +template struct d +{ + typedef e f; +}; +struct g +{ + template using i = h *; +}; +} +using a::d; +template class k +{ + j l; + +public: + typename d::f operator* () {} + void operator++ () { ++l; } + j + aa () + { + return l; + } +}; +template +bool +operator!= (k o, k p2) +{ + return o.aa () != p2.aa (); +} +struct p; +namespace a { +struct F +{ + struct q + { + using ai = g::i

; + }; + using r = q::ai; +}; +class H +{ +public: + k begin (); + k end (); +}; +int s; +class I +{ +public: + void + aq (char) + { + if (s) + b (); + } +}; +class u : public I +{ +public: + void + operator<< (u o (u)) + { + o (*this); + } + u operator<< (void *); +}; +template +at +av (au o) +{ + o.aq ('\n'); +} +u ax; +} +struct p +{ + char *ay; +}; +a::H t; +void +ShowHelpListCommands () +{ + for (auto c : t) + a::ax << c.ay << a::av; +} + +/* { dg-final { scan-tree-dump "note: missed loop optimization: niters analysis ends up with assumptions." "ivopts" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr19210-1.c b/gcc/testsuite/gcc.dg/tree-ssa/pr19210-1.c index 3c8ee06..3c18470 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr19210-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr19210-1.c @@ -1,15 +1,15 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -Wunsafe-loop-optimizations" } */ +/* { dg-options "-O2 -fdump-tree-ivopts-details -Wunsafe-loop-optimizations" } */ extern void g(void); void f (unsigned n) { unsigned k; - for(k = 0;k <= n;k++) /* { dg-warning "missed loop optimization.*overflow" } */ + for(k = 0;k <= n;k++) /* missed optimization for this loop. */ g(); - for(k = 0;k <= n;k += 4) /* { dg-warning "missed loop optimization.*overflow" } */ + for(k = 0;k <= n;k += 4) /* missed optimization for this loop. */ g(); /* We used to get warning for this loop. However, since then # of iterations @@ -21,9 +21,14 @@ f (unsigned n) g(); /* So we need the following loop, instead. */ - for(k = 4;k <= n;k += 5) /* { dg-warning "missed loop optimization.*overflow" } */ + for(k = 4;k <= n;k += 5) /* missed optimization for this loop. */ g(); - for(k = 15;k >= n;k--) /* { dg-warning "missed loop optimization.*overflow" } */ + for(k = 15;k >= n;k--) /* missed optimization for this loop. */ g(); } + +/* { dg-final { scan-tree-dump "pr19210-1.c:9:.*: missed loop optimization: niters analysis ends up with assumptions." "ivopts" } } */ +/* { dg-final { scan-tree-dump "pr19210-1.c:12:.*: missed loop optimization: niters analysis ends up with assumptions." "ivopts" } } */ +/* { dg-final { scan-tree-dump "pr19210-1.c:24:.*: missed loop optimization: niters analysis ends up with assumptions." "ivopts" } } */ +/* { dg-final { scan-tree-dump "pr19210-1.c:27:.*: missed loop optimization: niters analysis ends up with assumptions." "ivopts" } } */ diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c index 5a7cab5..1421002 100644 --- a/gcc/tree-ssa-loop-niter.c +++ b/gcc/tree-ssa-loop-niter.c @@ -2378,9 +2378,9 @@ number_of_iterations_exit (struct loop *loop, edge exit, return true; if (warn) - warning_at (gimple_location_safe (stmt), - OPT_Wunsafe_loop_optimizations, - "missed loop optimization, the loop counter may overflow"); + dump_printf_loc (MSG_MISSED_OPTIMIZATION, gimple_location_safe (stmt), + "missed loop optimization: niters analysis ends up " + "with assumptions.\n"); return false; }