From patchwork Tue Jan 29 10:39:15 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Biener X-Patchwork-Id: 216500 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]) by ozlabs.org (Postfix) with SMTP id 19B8A2C0090 for ; Tue, 29 Jan 2013 21:39:33 +1100 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1360060774; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Date: From:To:Subject:Message-ID:User-Agent:MIME-Version:Content-Type: Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:Sender:Delivered-To; bh=FeotMAbv/P1QJ4WCDMy5 74DXA0w=; b=GCB+V5CD/66HCMH3v3NEOIc1L4EybtPPZTrkqFsI1WxKWet3aeMd hftcrRALJQ42+M24TVsKgDLbKj6SaRWmU+0leCz4n07npLZ6NrteNVtzLHl3QxwW HszFEA2D9xv1pybYt9xV8gJHDz5wGxZxjzjeSIPBlhs1j15g5dbGWZs= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:Date:From:To:Subject:Message-ID:User-Agent:MIME-Version:Content-Type:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=sQbAeEdfdgL5CH48ls5xyrWMszzu4qPFLTENQzKMri9Lzp1230sbDSQILL0WgC EaJDOT/5eZYNpOj3mqZhw7rFw811ML1pK7zQzr+M1QuiUaAwBRNyoctqW8wH16ER G6GmbSUUhzIMsmoVouIk9h3oOO+gKdHDsYEll8Kzs3n/c=; Received: (qmail 29149 invoked by alias); 29 Jan 2013 10:39:26 -0000 Received: (qmail 29137 invoked by uid 22791); 29 Jan 2013 10:39:25 -0000 X-SWARE-Spam-Status: No, hits=-5.7 required=5.0 tests=AWL, BAYES_00, KHOP_RCVD_UNTRUST, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, TW_CF X-Spam-Check-By: sourceware.org Received: from cantor2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 29 Jan 2013 10:39:16 +0000 Received: from relay2.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id C6A3BA5233 for ; Tue, 29 Jan 2013 11:39:15 +0100 (CET) Date: Tue, 29 Jan 2013 11:39:15 +0100 (CET) From: Richard Biener To: gcc-patches@gcc.gnu.org Subject: [PATCH] Fix PR55270 Message-ID: User-Agent: Alpine 2.00 (LNX 1167 2008-08-23) MIME-Version: 1.0 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 This fixes PR55270 - we need to fixup loops after phicprop as that removes edges without doing so. The following patch makes us rely on cfgcleanup scheduled after the pass for this. Bootstrapped and tested on x86_64-unknown-linux-gnu, applied. Richard. 2013-01-29 Richard Biener PR tree-optimization/55270 * tree-ssa-dom.c (eliminate_degenerate_phis): If we changed the CFG, schedule loops for fixup. * gcc.dg/torture/pr55270.c: New testcase. Index: gcc/tree-ssa-dom.c =================================================================== --- gcc/tree-ssa-dom.c (revision 195530) +++ gcc/tree-ssa-dom.c (working copy) @@ -3006,7 +3006,12 @@ eliminate_degenerate_phis (void) } if (cfg_altered) - free_dominance_info (CDI_DOMINATORS); + { + free_dominance_info (CDI_DOMINATORS); + /* If we changed the CFG schedule loops for fixup by cfgcleanup. */ + if (current_loops) + loops_state_set (LOOPS_NEED_FIXUP); + } /* Propagation of const and copies may make some EH edges dead. Purge such edges from the CFG as needed. */ Index: gcc/testsuite/gcc.dg/torture/pr55270.c =================================================================== --- gcc/testsuite/gcc.dg/torture/pr55270.c (revision 0) +++ gcc/testsuite/gcc.dg/torture/pr55270.c (working copy) @@ -0,0 +1,22 @@ +/* { dg-do compile } */ + +unsigned a, b, c; + +void f(void) +{ + for(; a; a++) + { + long *p1 = (long *)&b; + + if(*p1) + return; + + if(b && (*p1 = b) || c && ++*p1) + { + unsigned *p2 = &b; + + for(*p2 = 0; *p2 < 1;) + for(; b; b++); + } + } +}