From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26730 invoked by alias); 31 Jan 2012 14:32:17 -0000 Received: (qmail 26720 invoked by uid 22791); 31 Jan 2012 14:32:15 -0000 X-SWARE-Spam-Status: No, hits=-2.9 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from localhost (HELO gcc.gnu.org) (127.0.0.1) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 31 Jan 2012 14:32:02 +0000 From: "hubicka at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug middle-end/48600] [4.6/4.7 Regression] ICE when using cold attribute Date: Tue, 31 Jan 2012 15:07:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: middle-end X-Bugzilla-Keywords: ice-on-valid-code X-Bugzilla-Severity: major X-Bugzilla-Who: hubicka at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Priority: P2 X-Bugzilla-Assigned-To: hubicka at gcc dot gnu.org X-Bugzilla-Target-Milestone: 4.6.3 X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2012-01/txt/msg03688.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48600 --- Comment #15 from Jan Hubicka 2012-01-31 14:31:56 UTC --- I am testing the attached patch Index: predict.c =================================================================== --- predict.c (revision 183666) +++ predict.c (working copy) @@ -1833,6 +1833,10 @@ predict_paths_for_bb (basic_block cur, b edge_iterator ei; basic_block son; + /* AUX is used to detect cycles while walking predictors with only EH/FAKE + succestors. */ + cur->aux = (void *)(size_t) 1; + /* We are looking for all edges forming edge cut induced by set of all blocks postdominated by BB. */ FOR_EACH_EDGE (e, ei, cur->preds) @@ -1848,7 +1852,7 @@ predict_paths_for_bb (basic_block cur, b continue; gcc_assert (bb == cur || dominated_by_p (CDI_POST_DOMINATORS, cur, bb)); - /* See if there is how many edge from e->src that is not abnormal + /* See if there is an edge from e->src that is not abnormal and does not lead to BB. */ FOR_EACH_EDGE (e2, ei2, e->src->succs) if (e2 != e @@ -1864,13 +1868,14 @@ predict_paths_for_bb (basic_block cur, b leading to e->src. */ if (found) predict_edge_def (e, pred, taken); - else + else if (!e->src->aux) predict_paths_for_bb (e->src, e->src, pred, taken); } for (son = first_dom_son (CDI_POST_DOMINATORS, cur); son; son = next_dom_son (CDI_POST_DOMINATORS, son)) predict_paths_for_bb (son, bb, pred, taken); + cur->aux = (void *)(size_t) NULL; } /* Sets branch probabilities according to PREDiction and