From patchwork Thu May 19 10:34:29 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Enkovich X-Patchwork-Id: 623922 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 3r9SCD1ctlz9s36 for ; Thu, 19 May 2016 20:35: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=yzCTZ+un; 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:date :from:to:cc:subject:message-id:references:mime-version :content-type:in-reply-to; q=dns; s=default; b=MqG3rIo8kV+LXnwyZ zuZjMvHI88hunNTqjniJCBsk+gKNezYskVy789sBpSh2lNXucrX4aNdR8N9aUwNp qBCMmQecV6XgudIZR3mY2uuJfcg01wXv3ioXf+IX/5puwFPYaGcC6ftqF6RPVD93 i609rXURMbGXj4kH0U+XTSiqAQ= 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:date :from:to:cc:subject:message-id:references:mime-version :content-type:in-reply-to; s=default; bh=chL/51c2bIyHsQwXYo5EJKc sLPI=; b=yzCTZ+unRsbQ4dpqM7pMp/lzCkx9o0cBCVrznw0VElqi5IGFR3oOtKq upIxk1LQquEnQCTJzi4Xr8ARR4X8Uh03cG8kgj/8lKQNcY4sSdRu9JrPwQ2d8kYc bdy1aWZljk25RItmBqkVTmV+VyAfAgCqiG13R+oi88AJOZ7tIx3o= Received: (qmail 18166 invoked by alias); 19 May 2016 10:35:43 -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 18149 invoked by uid 89); 19 May 2016 10:35:41 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.6 required=5.0 tests=BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=ilya.enkovich@intel.com, ilyaenkovichintelcom, enkovich.gnu@gmail.com, enkovichgnugmailcom X-HELO: mail-wm0-f68.google.com Received: from mail-wm0-f68.google.com (HELO mail-wm0-f68.google.com) (74.125.82.68) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 19 May 2016 10:35:31 +0000 Received: by mail-wm0-f68.google.com with SMTP id r12so19822778wme.0 for ; Thu, 19 May 2016 03:35:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=oWw3eybXmGpSc8nbG7vKmpEMVyHGTEQRXWW7RbvOYo8=; b=gC9Grg9yWx3fXL2GhyaYAAFQSmIDDOmtjxwOkW4SrLSSgWV73Wr3QivISQjR8zoNGH +LrcMjuBRZTLp6ztT434s1CujmeDtVeIAUp0tQAOc76+wR5zGSSoNCPH9keK0+fgDQWW gancGeT3cHpZakrXXs+jShtnCKaSEPdM++vgscQJafC43C3sHTLxuFcCu5Cqq3iDzX8x 6KwS56yerYDur3Wnm8MrkruzU/mNcisxDyQUwpkx/YBfV1e+S6iBLnElrmdtjm+5C6BJ wWW4SF/zgGOHBabCNgdAO8Vml2rurTQ1hoH4QkyWyBGOaIE9EP6x8aNYOCcj7sCX6Zhj AzeQ== X-Gm-Message-State: AOPr4FVneic0nI4Dl/yND0Q36SNO6dLzcMISCS46wz3EHnMfFBIuOERcTptAkMHBwVb/3Q== X-Received: by 10.28.184.78 with SMTP id i75mr13484099wmf.36.1463654128748; Thu, 19 May 2016 03:35:28 -0700 (PDT) Received: from msticlxl57.ims.intel.com (irdmzpr01-ext.ir.intel.com. [192.198.151.36]) by smtp.gmail.com with ESMTPSA id o129sm34300024wmb.17.2016.05.19.03.35.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 19 May 2016 03:35:28 -0700 (PDT) Date: Thu, 19 May 2016 13:34:29 +0300 From: Ilya Enkovich To: Richard Biener Cc: GCC Patches Subject: Re: [PATCH, PR rtl-optimization/71148] Avoid cleanup_cfg called with invalidated dominance info Message-ID: <20160519103429.GB31178@msticlxl57.ims.intel.com> References: <20160518161703.GA31178@msticlxl57.ims.intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) X-IsSubscribed: yes On 19 May 09:57, Richard Biener wrote: > On Wed, May 18, 2016 at 6:17 PM, Ilya Enkovich wrote: > > Hi, > > > > This patch resolves PR71148 by releasing dominance info before > > cleanup_cfg calls to avoid attempts to fixup invalid dominance > > info. > > > > Dominance info handling in cleanup_cfg looks weird though. It > > tries to fix it but can invalidate it at the same time (PR71084). > > We should probably do something with that. > > > > Tracker is P1 and this patch may be OK solution for now. > > > > Bootstrapped and regtested on x86_64-pc-linux-gnu. Ok for trunk? > > Hum... all this dancing with CSE looks bogus to me. Does CSE itself > need dominance info? If not then unconditionally free it at its start. > > Richard. > Here it is. OK if testing pass? Thanks, Ilya --- gcc/ 2016-05-19 Ilya Enkovich * cse.c (cse_main): Free dominance info. (rest_of_handle_cse): Don't free dominance info. (rest_of_handle_cse2): Likewise. (rest_of_handle_cse_after_global_opts): Likewise. gcc/testsuite/ 2016-05-19 Ilya Enkovich * gcc.dg/pr71148.c: New test. diff --git a/gcc/cse.c b/gcc/cse.c index 322e352..84082fb 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -6669,6 +6669,11 @@ cse_main (rtx_insn *f ATTRIBUTE_UNUSED, int nregs) int *rc_order = XNEWVEC (int, last_basic_block_for_fn (cfun)); int i, n_blocks; + /* CSE doesn't use dominance info but can invalidate it in different ways. + For simplicity free dominance info here. */ + if (dom_info_available_p (CDI_DOMINATORS)) + free_dominance_info (CDI_DOMINATORS); + df_set_flags (DF_LR_RUN_DCE); df_note_add_problem (); df_analyze (); @@ -7568,9 +7573,6 @@ rest_of_handle_cse (void) else if (tem == 1 || optimize > 1) cse_cfg_altered |= cleanup_cfg (0); - if (cse_cfg_altered && dom_info_available_p (CDI_DOMINATORS)) - free_dominance_info (CDI_DOMINATORS); - return 0; } @@ -7640,9 +7642,6 @@ rest_of_handle_cse2 (void) else if (tem == 1) cse_cfg_altered |= cleanup_cfg (0); - if (cse_cfg_altered && dom_info_available_p (CDI_DOMINATORS)) - free_dominance_info (CDI_DOMINATORS); - cse_not_expected = 1; return 0; } @@ -7717,9 +7716,6 @@ rest_of_handle_cse_after_global_opts (void) else if (tem == 1) cse_cfg_altered |= cleanup_cfg (0); - if (cse_cfg_altered && dom_info_available_p (CDI_DOMINATORS)) - free_dominance_info (CDI_DOMINATORS); - flag_cse_follow_jumps = save_cfj; return 0; } diff --git a/gcc/testsuite/gcc.dg/pr71148.c b/gcc/testsuite/gcc.dg/pr71148.c new file mode 100644 index 0000000..6aa4920 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr71148.c @@ -0,0 +1,46 @@ +/* PR rtl-optimization/71148 */ +/* { dg-do compile } */ +/* { dg-options "-O3 -funroll-loops" } */ + +int rh, ok, kq, fu; + +void +js (int cs) +{ + rh = fu; + if (fu != 0) + { + cs /= 3; + if (cs <= 0) + { + int z9; + for (z9 = 0; z9 < 2; ++z9) + { + z9 += cs; + ok += z9; + fu += ok; + } + } + } +} + +void +vy (int s3) +{ + int yo, g2 = 0; + sd: + js (g2); + for (yo = 0; yo < 2; ++yo) + { + if (fu != 0) + goto sd; + kq += (s3 != (g2 ? s3 : 0)); + for (s3 = 0; s3 < 72; ++s3) + g2 *= (~0 - 1); + g2 -= yo; + } + for (fu = 0; fu < 18; ++fu) + for (yo = 0; yo < 17; ++yo) + if (g2 < 0) + goto sd; +}