From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30604 invoked by alias); 3 Mar 2010 11:03:41 -0000 Received: (qmail 29535 invoked by uid 48); 3 Mar 2010 11:03:22 -0000 Date: Wed, 03 Mar 2010 11:03:00 -0000 Message-ID: <20100303110322.29533.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug tree-optimization/38497] PRE missing a load PRE which causes a loop to have two BBs 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: 2010-03/txt/msg00269.txt.bz2 ------- Comment #5 from rguenth at gcc dot gnu dot org 2010-03-03 11:03 ------- I'm not so sure. We start with : plaintextlen_3 = *a_2(D); : # i_13 = PHI D.2725_5 = *a_2(D); DoHuffIteration (D.2725_5); i_6 = i_13 + 1; if (i_6 <= 9999) goto ; else goto ; : goto ; : D.2725_7 = *a_2(D); so *a_2 (4) is antic-out in bb3 but dies in bb3 (thus it's not antic-in there). *a_2 (3) is antic-in in bb5 and available in bb2. Thus we insert in bb5: : plaintextlen_3 = *a_2(D); : # i_13 = PHI # prephitmp.3_14 = PHI D.2725_5 = prephitmp.3_14; DoHuffIteration (D.2725_5); i_6 = i_13 + 1; if (i_6 <= 9999) goto ; else goto ; : pretmp.2_1 = *a_2(D); goto ; : D.2725_7 = *a_2(D); now what is left is hoisting *a_2(D) to after the call. But that's not PRE. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38497