From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22642 invoked by alias); 16 Mar 2003 23:46:00 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 22621 invoked by uid 71); 16 Mar 2003 23:46:00 -0000 Resent-Date: 16 Mar 2003 23:46:00 -0000 Resent-Message-ID: <20030316234600.22620.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, marcel@xcllnt.net Received: (qmail 28550 invoked by uid 48); 16 Mar 2003 23:41:23 -0000 Message-Id: <20030316234123.28549.qmail@sources.redhat.com> Date: Sun, 16 Mar 2003 23:46:00 -0000 From: marcel@xcllnt.net Reply-To: marcel@xcllnt.net To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: optimization/10116: ce2: invalid merge of "join_bb" in the context of switch statements X-SW-Source: 2003-03/txt/msg01092.txt.bz2 List-Id: >Number: 10116 >Category: optimization >Synopsis: ce2: invalid merge of "join_bb" in the context of switch statements >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Sun Mar 16 23:46:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Marcel Moolenaar >Release: GCC 3.2.2 (FreeBSD embedded) >Organization: >Environment: os: FreeBSD 5-current platform: ia64 gcc: (GCC) 3.2.2 [FreeBSD] 20030205 (release) >Description: The if converter on ia64 may end up merging basic blocks that are not actually adjacent, even though merge_blocks_nomove() is used. The situation given by the trigger case has a jump table between "combo_bb' and 'join_bb'. As a result of the invalid merge, the jump table gets eliminated causing a stale reference to a label. Note that in this case the jump table can actually be eliminated, but that's a different story. The fix is based on the assumption that any instruction between 'combo_bb' and 'join_bb' cannot be a label as that would invalidate the requirement that both BBs are adjacent. >How-To-Repeat: Compile the trigger case with -O with an ia64 (cross) compiler and observe that the assembly output references a temporary label that is not defined. For example: % cc -O -S bug.i -o bug.s >Fix: Diff taken from the FreeBSD vendor imported code (whitespace corrupted, no doubt): Index: ifcvt.c =================================================================== RCS file: /home/ncvs/src/contrib/gcc/ifcvt.c,v retrieving revision 1.1.1.4 diff -u -r1.1.1.4 ifcvt.c --- ifcvt.c 1 Sep 2002 20:37:43 -0000 1.1.1.4 +++ ifcvt.c 16 Mar 2003 09:55:05 -0000 @@ -1934,9 +1934,10 @@ is more than one remaining edge, it must come from elsewhere. There may be zero incoming edges if the THEN block didn't actually join back up (as with a call to abort). */ - else if ((join_bb->pred == NULL - || join_bb->pred->pred_next == NULL) - && join_bb != EXIT_BLOCK_PTR) + else if ((join_bb->pred == NULL || join_bb->pred->pred_next == NULL) + && join_bb != EXIT_BLOCK_PTR + && (NEXT_INSN(combo_bb->end) == join_bb->head + || GET_CODE(NEXT_INSN(combo_bb->end)) != CODE_LABEL)) { /* We can merge the JOIN. */ if (life_data_ok) >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="bug.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="bug.i" dm9pZCAqTlNSZXR1cm5BZGRyZXNzKGludCBvZmZzZXQpCnsKCXN3aXRjaCAob2Zmc2V0KSB7Cglj YXNlIDA6ICByZXR1cm4gX19idWlsdGluX3JldHVybl9hZGRyZXNzKDAgKyAxKTsKCWNhc2UgMTog IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMSArIDEpOwoJY2FzZSAyOiAgcmV0dXJu IF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygyICsgMSk7CgljYXNlIDM6ICByZXR1cm4gX19idWls dGluX3JldHVybl9hZGRyZXNzKDMgKyAxKTsKCWNhc2UgNDogIHJldHVybiBfX2J1aWx0aW5fcmV0 dXJuX2FkZHJlc3MoNCArIDEpOwoJY2FzZSA1OiAgcmV0dXJuIF9fYnVpbHRpbl9yZXR1cm5fYWRk cmVzcyg1ICsgMSk7CgljYXNlIDY6ICByZXR1cm4gX19idWlsdGluX3JldHVybl9hZGRyZXNzKDYg KyAxKTsKCWNhc2UgNzogIHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNyArIDEpOwoJ Y2FzZSA4OiAgcmV0dXJuIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcyg4ICsgMSk7CgljYXNlIDk6 ICByZXR1cm4gX19idWlsdGluX3JldHVybl9hZGRyZXNzKDkgKyAxKTsKCWNhc2UgMTA6IHJldHVy biBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMTAgKyAxKTsKCWNhc2UgMTE6IHJldHVybiBfX2J1 aWx0aW5fcmV0dXJuX2FkZHJlc3MoMTEgKyAxKTsKCWNhc2UgMTI6IHJldHVybiBfX2J1aWx0aW5f cmV0dXJuX2FkZHJlc3MoMTIgKyAxKTsKCWNhc2UgMTM6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJu X2FkZHJlc3MoMTMgKyAxKTsKCWNhc2UgMTQ6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJl c3MoMTQgKyAxKTsKCWNhc2UgMTU6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMTUg KyAxKTsKCWNhc2UgMTY6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMTYgKyAxKTsK CWNhc2UgMTc6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMTcgKyAxKTsKCWNhc2Ug MTg6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMTggKyAxKTsKCWNhc2UgMTk6IHJl dHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMTkgKyAxKTsKCWNhc2UgMjA6IHJldHVybiBf X2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMjAgKyAxKTsKCWNhc2UgMjE6IHJldHVybiBfX2J1aWx0 aW5fcmV0dXJuX2FkZHJlc3MoMjEgKyAxKTsKCWNhc2UgMjI6IHJldHVybiBfX2J1aWx0aW5fcmV0 dXJuX2FkZHJlc3MoMjIgKyAxKTsKCWNhc2UgMjM6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2Fk ZHJlc3MoMjMgKyAxKTsKCWNhc2UgMjQ6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3Mo MjQgKyAxKTsKCWNhc2UgMjU6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMjUgKyAx KTsKCWNhc2UgMjY6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMjYgKyAxKTsKCWNh c2UgMjc6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMjcgKyAxKTsKCWNhc2UgMjg6 IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMjggKyAxKTsKCWNhc2UgMjk6IHJldHVy biBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMjkgKyAxKTsKCWNhc2UgMzA6IHJldHVybiBfX2J1 aWx0aW5fcmV0dXJuX2FkZHJlc3MoMzAgKyAxKTsKCWNhc2UgMzE6IHJldHVybiBfX2J1aWx0aW5f cmV0dXJuX2FkZHJlc3MoMzEgKyAxKTsKCWNhc2UgMzI6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJu X2FkZHJlc3MoMzIgKyAxKTsKCWNhc2UgMzM6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJl c3MoMzMgKyAxKTsKCWNhc2UgMzQ6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMzQg KyAxKTsKCWNhc2UgMzU6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMzUgKyAxKTsK CWNhc2UgMzY6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMzYgKyAxKTsKCWNhc2Ug Mzc6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMzcgKyAxKTsKCWNhc2UgMzg6IHJl dHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMzggKyAxKTsKCWNhc2UgMzk6IHJldHVybiBf X2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMzkgKyAxKTsKCWNhc2UgNDA6IHJldHVybiBfX2J1aWx0 aW5fcmV0dXJuX2FkZHJlc3MoNDAgKyAxKTsKCWNhc2UgNDE6IHJldHVybiBfX2J1aWx0aW5fcmV0 dXJuX2FkZHJlc3MoNDEgKyAxKTsKCWNhc2UgNDI6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2Fk ZHJlc3MoNDIgKyAxKTsKCWNhc2UgNDM6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3Mo NDMgKyAxKTsKCWNhc2UgNDQ6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNDQgKyAx KTsKCWNhc2UgNDU6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNDUgKyAxKTsKCWNh c2UgNDY6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNDYgKyAxKTsKCWNhc2UgNDc6 IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNDcgKyAxKTsKCWNhc2UgNDg6IHJldHVy biBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNDggKyAxKTsKCWNhc2UgNDk6IHJldHVybiBfX2J1 aWx0aW5fcmV0dXJuX2FkZHJlc3MoNDkgKyAxKTsKCWNhc2UgNTA6IHJldHVybiBfX2J1aWx0aW5f cmV0dXJuX2FkZHJlc3MoNTAgKyAxKTsKCWNhc2UgNTE6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJu X2FkZHJlc3MoNTEgKyAxKTsKCWNhc2UgNTI6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJl c3MoNTIgKyAxKTsKCWNhc2UgNTM6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNTMg KyAxKTsKCWNhc2UgNTQ6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNTQgKyAxKTsK CWNhc2UgNTU6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNTUgKyAxKTsKCWNhc2Ug NTY6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNTYgKyAxKTsKCWNhc2UgNTc6IHJl dHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNTcgKyAxKTsKCWNhc2UgNTg6IHJldHVybiBf X2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNTggKyAxKTsKCWNhc2UgNTk6IHJldHVybiBfX2J1aWx0 aW5fcmV0dXJuX2FkZHJlc3MoNTkgKyAxKTsKCWNhc2UgNjA6IHJldHVybiBfX2J1aWx0aW5fcmV0 dXJuX2FkZHJlc3MoNjAgKyAxKTsKCWNhc2UgNjE6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2Fk ZHJlc3MoNjEgKyAxKTsKCWNhc2UgNjI6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3Mo NjIgKyAxKTsKCWNhc2UgNjM6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNjMgKyAx KTsKCWNhc2UgNjQ6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNjQgKyAxKTsKCWNh c2UgNjU6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNjUgKyAxKTsKCWNhc2UgNjY6 IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNjYgKyAxKTsKCWNhc2UgNjc6IHJldHVy biBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNjcgKyAxKTsKCWNhc2UgNjg6IHJldHVybiBfX2J1 aWx0aW5fcmV0dXJuX2FkZHJlc3MoNjggKyAxKTsKCWNhc2UgNjk6IHJldHVybiBfX2J1aWx0aW5f cmV0dXJuX2FkZHJlc3MoNjkgKyAxKTsKCWNhc2UgNzA6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJu X2FkZHJlc3MoNzAgKyAxKTsKCWNhc2UgNzE6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJl c3MoNzEgKyAxKTsKCWNhc2UgNzI6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNzIg KyAxKTsKCWNhc2UgNzM6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNzMgKyAxKTsK CWNhc2UgNzQ6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNzQgKyAxKTsKCWNhc2Ug NzU6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNzUgKyAxKTsKCWNhc2UgNzY6IHJl dHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNzYgKyAxKTsKCWNhc2UgNzc6IHJldHVybiBf X2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNzcgKyAxKTsKCWNhc2UgNzg6IHJldHVybiBfX2J1aWx0 aW5fcmV0dXJuX2FkZHJlc3MoNzggKyAxKTsKCWNhc2UgNzk6IHJldHVybiBfX2J1aWx0aW5fcmV0 dXJuX2FkZHJlc3MoNzkgKyAxKTsKCWNhc2UgODA6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2Fk ZHJlc3MoODAgKyAxKTsKCWNhc2UgODE6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3Mo ODEgKyAxKTsKCWNhc2UgODI6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoODIgKyAx KTsKCWNhc2UgODM6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoODMgKyAxKTsKCWNh c2UgODQ6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoODQgKyAxKTsKCWNhc2UgODU6 IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoODUgKyAxKTsKCWNhc2UgODY6IHJldHVy biBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoODYgKyAxKTsKCWNhc2UgODc6IHJldHVybiBfX2J1 aWx0aW5fcmV0dXJuX2FkZHJlc3MoODcgKyAxKTsKCWNhc2UgODg6IHJldHVybiBfX2J1aWx0aW5f cmV0dXJuX2FkZHJlc3MoODggKyAxKTsKCWNhc2UgODk6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJu X2FkZHJlc3MoODkgKyAxKTsKCWNhc2UgOTA6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJl c3MoOTAgKyAxKTsKCWNhc2UgOTE6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoOTEg KyAxKTsKCWNhc2UgOTI6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoOTIgKyAxKTsK CWNhc2UgOTM6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoOTMgKyAxKTsKCWNhc2Ug OTQ6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoOTQgKyAxKTsKCWNhc2UgOTU6IHJl dHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoOTUgKyAxKTsKCWNhc2UgOTY6IHJldHVybiBf X2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoOTYgKyAxKTsKCWNhc2UgOTc6IHJldHVybiBfX2J1aWx0 aW5fcmV0dXJuX2FkZHJlc3MoOTcgKyAxKTsKCWNhc2UgOTg6IHJldHVybiBfX2J1aWx0aW5fcmV0 dXJuX2FkZHJlc3MoOTggKyAxKTsKCWNhc2UgOTk6IHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2Fk ZHJlc3MoOTkgKyAxKTsKCX0KCXJldHVybiAwOwp9Cg==