From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20711 invoked by alias); 4 Dec 2008 15:16:02 -0000 Received: (qmail 18979 invoked by uid 48); 4 Dec 2008 15:14:42 -0000 Date: Thu, 04 Dec 2008 15:16:00 -0000 Message-ID: <20081204151442.18978.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug tree-optimization/38401] TreeSSA-PRE load after store misoptimization In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "rguenth at gcc dot gnu dot org" 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: 2008-12/txt/msg00395.txt.bz2 ------- Comment #1 from rguenth at gcc dot gnu dot org 2008-12-04 15:14 ------- It works with -O3 (with partial-partial PRE enabled). At least phi-translation figures out that *res is zero on the incoming edge. Un-leashing partial-PRE like with Index: tree-ssa-pre.c =================================================================== --- tree-ssa-pre.c (revision 142431) +++ tree-ssa-pre.c (working copy) @@ -3356,7 +3358,7 @@ do_partial_partial_insertion (basic_bloc { pre_expr *avail; unsigned int val; - bool by_all = true; + bool by_some = false; bool cant_insert = false; edge pred; basic_block bprime; @@ -3404,11 +3406,13 @@ do_partial_partial_insertion (basic_bloc vprime, NULL); if (edoubleprime == NULL) { - by_all = false; - break; + avail[bprime->index] = eprime; } else - avail[bprime->index] = edoubleprime; + { + avail[bprime->index] = edoubleprime; + by_some = true; + } } @@ -3416,7 +3420,7 @@ do_partial_partial_insertion (basic_bloc already existing along every predecessor, and it's defined by some predecessor, it is partially redundant. */ - if (!cant_insert && by_all && dbg_cnt (treepre_insert)) + if (!cant_insert && by_some && dbg_cnt (treepre_insert)) { pre_stats.pa_insert++; if (insert_into_preds_of_block (block, get_expression_id (expr), fixes this. But this may cause a lot of partial-PRE to happen. -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |dberlin at gcc dot gnu dot | |org, rguenth at gcc dot gnu | |dot org Severity|minor |enhancement Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Keywords| |missed-optimization, TREE Last reconfirmed|0000-00-00 00:00:00 |2008-12-04 15:14:42 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38401