From patchwork Thu Oct 1 12:46:01 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 524969 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org 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 81E23140D69 for ; Thu, 1 Oct 2015 22:46:51 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=SsREauhE; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :subject:cc:to:message-id:date:mime-version:content-type; q=dns; s=default; b=vzG0TuyqZHtpje/lPuHb0DTvQwCGvjmN/d45uau5kjH8rQYaLW tT/pOjUya/+4BYo8npwUw5AMKdP+bADF96I6BPFVxQEkXdhbKC9BWa/yUJuE+Tdy zvzPJlIp3GR20Y1nPlSYf4BZ1jdbztYeAHn5z854L0tkKie3S2+9UyoEo= 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 :subject:cc:to:message-id:date:mime-version:content-type; s= default; bh=6NcGqZAPoq6XuVwLxvDjcggy5SY=; b=SsREauhEFK8JW4HSphUh ImzTRElqjp12k8eqTMucLd9O8WWnHpgS7aPJCRl8mVx7GFVjVRzSKqIMvCV/sAnS tXKaZFdhN3ICbfm/O6Q0uRALYiaicXqMCU3CQW71yZNQJj1Gq90upe8xNEfs1pHu jpqRncjEqoSBq/Hwhz+n8E0= Received: (qmail 20840 invoked by alias); 1 Oct 2015 12:46:44 -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 20825 invoked by uid 89); 1 Oct 2015 12:46:42 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL, BAYES_00, SPF_PASS, T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: fencepost.gnu.org Received: from fencepost.gnu.org (HELO fencepost.gnu.org) (208.118.235.10) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Thu, 01 Oct 2015 12:46:41 +0000 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58346) by fencepost.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1ZhdFv-0000U2-9g for gcc-patches@gnu.org; Thu, 01 Oct 2015 08:46:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZhdFr-0001D4-Kd for gcc-patches@gnu.org; Thu, 01 Oct 2015 08:46:38 -0400 Received: from relay1.mentorg.com ([192.94.38.131]:36190) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZhdFr-0001CM-EG for gcc-patches@gnu.org; Thu, 01 Oct 2015 08:46:35 -0400 Received: from nat-ies.mentorg.com ([192.94.31.2] helo=SVR-IES-FEM-01.mgc.mentorg.com) by relay1.mentorg.com with esmtp id 1ZhdFm-0004PX-6T from Tom_deVries@mentor.com ; Thu, 01 Oct 2015 05:46:30 -0700 Received: from [127.0.0.1] (137.202.0.76) by SVR-IES-FEM-01.mgc.mentorg.com (137.202.0.104) with Microsoft SMTP Server id 14.3.224.2; Thu, 1 Oct 2015 13:46:28 +0100 From: Tom de Vries Subject: [patch] Add counter inits to zero_iter_bb in expand_omp_for_init_counts CC: Jakub Jelinek To: "gcc-patches@gnu.org" Message-ID: <560D2B09.4020501@mentor.com> Date: Thu, 1 Oct 2015 14:46:01 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Windows NT kernel [generic] [fuzzy] X-Received-From: 192.94.38.131 Hi, this patch adds initialization in zero_iter_bb of counters introduced in expand_omp_for_init_counts. This removes the need to set TREE_NO_WARNING on those counters. Build on x86_64 and reg-tested with gomp.exp and target-libgomp c.exp. OK for trunk, if bootstrap and reg-test on x86_64 succeeds? Thanks, - Tom Add counter inits to zero_iter_bb in expand_omp_for_init_counts 2015-10-01 Tom de Vries * omp-low.c (expand_omp_for_init_counts): Add inits for counters in zero_iter_bb. (expand_omp_for_generic): Remove TREE_NO_WARNING setttings on counters. * gcc.dg/gomp/collapse-2.c: New test. --- gcc/omp-low.c | 26 +++++++++++++++++++------- gcc/testsuite/gcc.dg/gomp/collapse-2.c | 19 +++++++++++++++++++ 2 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/gomp/collapse-2.c diff --git a/gcc/omp-low.c b/gcc/omp-low.c index 8bcad08..8181757 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -5732,6 +5732,7 @@ expand_omp_for_init_counts (struct omp_for_data *fd, gimple_stmt_iterator *gsi, return; } + bool created_zero_iter_bb = false; for (i = 0; i < fd->collapse; i++) { tree itype = TREE_TYPE (fd->loops[i].v); @@ -5774,6 +5775,7 @@ expand_omp_for_init_counts (struct omp_for_data *fd, gimple_stmt_iterator *gsi, gsi_insert_before (gsi, assign_stmt, GSI_SAME_STMT); set_immediate_dominator (CDI_DOMINATORS, zero_iter_bb, entry_bb); + created_zero_iter_bb = true; } ne = make_edge (entry_bb, zero_iter_bb, EDGE_FALSE_VALUE); ne->probability = REG_BR_PROB_BASE / 2000 - 1; @@ -5826,6 +5828,23 @@ expand_omp_for_init_counts (struct omp_for_data *fd, gimple_stmt_iterator *gsi, expand_omp_build_assign (gsi, fd->loop.n2, t); } } + + if (created_zero_iter_bb) + { + gimple_stmt_iterator gsi = gsi_after_labels (zero_iter_bb); + /* Atm counts[0] doesn't seem to be used beyond create_zero_iter_bb, + but for robustness-sake we include that one as well. */ + for (i = 0; i < fd->collapse; i++) + { + tree var = counts[i]; + if (!SSA_VAR_P (var)) + continue; + + tree zero = build_zero_cst (type); + gassign *assign_stmt = gimple_build_assign (var, zero); + gsi_insert_before (&gsi, assign_stmt, GSI_SAME_STMT); + } + } } @@ -6116,7 +6135,6 @@ expand_omp_for_generic (struct omp_region *region, bool broken_loop = region->cont == NULL; edge e, ne; tree *counts = NULL; - int i; gcc_assert (!broken_loop || !in_combined_parallel); gcc_assert (fd->iter_type == long_integer_type_node @@ -6185,12 +6203,6 @@ expand_omp_for_generic (struct omp_region *region, if (zero_iter_bb) { - /* Some counts[i] vars might be uninitialized if - some loop has zero iterations. But the body shouldn't - be executed in that case, so just avoid uninit warnings. */ - for (i = first_zero_iter; i < fd->collapse; i++) - if (SSA_VAR_P (counts[i])) - TREE_NO_WARNING (counts[i]) = 1; gsi_prev (&gsi); e = split_block (entry_bb, gsi_stmt (gsi)); entry_bb = e->dest; diff --git a/gcc/testsuite/gcc.dg/gomp/collapse-2.c b/gcc/testsuite/gcc.dg/gomp/collapse-2.c new file mode 100644 index 0000000..5319f89 --- /dev/null +++ b/gcc/testsuite/gcc.dg/gomp/collapse-2.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fopenmp -fdump-tree-ssa" } */ + +#define N 100 + +int a[N][N]; + +void +foo (int m, int n) +{ + int i, j; +#pragma omp parallel +#pragma omp for collapse(2) schedule (runtime) + for (i = 0; i < m; i++) + for (j = 0; j < n; j++) + a[i][j] = 1; +} + +/* { dg-final { scan-tree-dump-not "(?n)PHI.*count.*\\(D\\)" "ssa" } } */ -- 1.9.1