From patchwork Fri Mar 11 15:14:28 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 596269 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 440CD140271 for ; Sat, 12 Mar 2016 02:15:08 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=cYlFC7XO; 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:to:cc:message-id:date:mime-version:content-type; q=dns; s=default; b=AFunoJr4B1vUaodkwLwjg2U1iQG+UQXXaobg7qJwEfy6PuqqBS hlm50ejmH4BbEf0vdtRmBEl0YK3LTi6i30k6NNOoeN0FoHsU0pm2C6pITN54rwZ8 cUiIQsF1EjlWP7eWg77NWA3cpWXdHJS89BY9DsMEIJ4idVpI9fZbXyoIg= 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:to:cc:message-id:date:mime-version:content-type; s= default; bh=kKlDXfqEnPS831pR+QhxLUcRo44=; b=cYlFC7XO0a18wnk7NP2Y prLod5s6eQ+8OImTV58Qw/HFCM7/VoFDal626rxsYtwJO7UPLaZyu2/chmjzki7H dLGXqUVJgp1//jXtRgWw3DlyZU0Q4BjxQ7dNHzAXPc1qDD8rgbpn79cmNlz2tgyD qyZ3YWBg3+zNx2kZuDOKCTw= Received: (qmail 61241 invoked by alias); 11 Mar 2016 15:14:58 -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 61150 invoked by uid 89); 11 Mar 2016 15:14:58 -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, RP_MATCHES_RCVD, SPF_PASS autolearn=ham version=3.3.2 spammy=graphite, Hx-languages-length:2116, HX-detected-operating-system:Windows 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; Fri, 11 Mar 2016 15:14:55 +0000 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46017) by fencepost.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1aeOmD-0003Dl-Ir for gcc-patches@gnu.org; Fri, 11 Mar 2016 10:14:53 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aeOmA-0002DB-01 for gcc-patches@gnu.org; Fri, 11 Mar 2016 10:14:53 -0500 Received: from relay1.mentorg.com ([192.94.38.131]:41367) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aeOm9-00029K-Py for gcc-patches@gnu.org; Fri, 11 Mar 2016 10:14:49 -0500 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 1aeOm2-0005eX-2B from Tom_deVries@mentor.com ; Fri, 11 Mar 2016 07:14:42 -0800 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; Fri, 11 Mar 2016 15:14:40 +0000 From: Tom de Vries Subject: [PATCH, PR70045] Unshare create_empty_if_region_on_edge argument To: Richard Biener CC: "gcc-patches@gnu.org" , Sebastian Pop Message-ID: <56E2E0D4.40108@mentor.com> Date: Fri, 11 Mar 2016 16:14:28 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.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 fixes PR70045, a graphite 6 regression. The problem is as follows: in graphite_create_new_loop_guard, a condition cond_expr is constructed using an upper bound expression *ub. During the call: ... exit_edge = create_empty_if_region_on_edge (entry_edge, cond_expr); ... the cond_expr is modified in place, which has as side-effect that *ub is modified. The patch fixes this by unsharing the cond_expr before passing it as argument to create_empty_if_region_on_edge. Bootstrapped and reg-tested on x86_64. OK for stage4 trunk? Thanks, - Tom Unshare create_empty_if_region_on_edge argument 2016-03-11 Tom de Vries PR tree-optimization/70045 * graphite-isl-ast-to-gimple.c (graphite_create_new_loop_guard): Unshare create_empty_if_region_on_edge argument. * gcc.dg/graphite/pr70045.c: New test. --- gcc/graphite-isl-ast-to-gimple.c | 3 ++- gcc/testsuite/gcc.dg/graphite/pr70045.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/gcc/graphite-isl-ast-to-gimple.c b/gcc/graphite-isl-ast-to-gimple.c index 89a4118..8dd5dc8 100644 --- a/gcc/graphite-isl-ast-to-gimple.c +++ b/gcc/graphite-isl-ast-to-gimple.c @@ -821,7 +821,8 @@ graphite_create_new_loop_guard (edge entry_edge, if (integer_onep (cond_expr)) exit_edge = entry_edge; else - exit_edge = create_empty_if_region_on_edge (entry_edge, cond_expr); + exit_edge = create_empty_if_region_on_edge (entry_edge, + unshare_expr (cond_expr)); return exit_edge; } diff --git a/gcc/testsuite/gcc.dg/graphite/pr70045.c b/gcc/testsuite/gcc.dg/graphite/pr70045.c new file mode 100644 index 0000000..9f98b1f --- /dev/null +++ b/gcc/testsuite/gcc.dg/graphite/pr70045.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -floop-interchange" } */ + +int a, b, d, e, f; +int c[9]; +void +fn1 () +{ + e = 1; + for (; e >= 0; e--) + { + d = 1; + for (; d >= 0; d--) + { + f = 0; + for (; f <= 1; f++) + { + a = 0; + for (; a < 9; a++) + { + b = 0; + for (; b < 2; b++) + c[a + b] = 3; + } + } + } + } +}