From patchwork Thu Jul 21 16:30:27 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Zhuykov X-Patchwork-Id: 106097 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 77A1EB6F75 for ; Fri, 22 Jul 2011 02:31:14 +1000 (EST) Received: (qmail 11775 invoked by alias); 21 Jul 2011 16:31:09 -0000 Received: (qmail 11697 invoked by uid 22791); 21 Jul 2011 16:31:08 -0000 X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp.ispras.ru (HELO smtp.ispras.ru) (83.149.198.202) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 21 Jul 2011 16:30:36 +0000 Received: from ispserv.ispras.ru (ispserv.ispras.ru [83.149.198.72]) by smtp.ispras.ru (Postfix) with ESMTP id 92BF75D4072; Thu, 21 Jul 2011 20:22:39 +0400 (MSD) Received: from condor.intra.ispras.ru (winnie.ispras.ru [83.149.198.236]) by ispserv.ispras.ru (Postfix) with ESMTP id 012DA3FC57; Thu, 21 Jul 2011 20:30:35 +0400 (MSD) From: zhroma@ispras.ru To: gcc-patches@gcc.gnu.org Cc: dm@ispras.ru Subject: [PATCH 2/9] [doloop] Correct extracting loop exit condition Date: Thu, 21 Jul 2011 20:30:27 +0400 Message-Id: <1311265834-2144-3-git-send-email-zhroma@ispras.ru> In-Reply-To: <1311265834-2144-1-git-send-email-zhroma@ispras.ru> References: <1311265834-2144-1-git-send-email-zhroma@ispras.ru> X-IsSubscribed: yes 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 patch fixes the compiler segfault found while regtesting trunk with SMS on IA64 platform. Segfault happens on test gcc.dg/pr45259.c with -fmodulo-sched enabled. The following jump instruction is given as argument for doloop_condition_get function: (jump_insn 86 85 88 7 (set (pc) (reg/f:DI 403)) 339 {indirect_jump} (expr_list:REG_DEAD (reg/f:DI 403) (nil))) The patch adds checking for the form of comparison instruction before extracting loop exit condition. 2011-07-20 Roman Zhuykov * loop-doloop.c (doloop_condition_get): Correctly check the form of comparison instruction. --- gcc/loop-doloop.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/gcc/loop-doloop.c b/gcc/loop-doloop.c index f8429c4..dfc4a16 100644 --- a/gcc/loop-doloop.c +++ b/gcc/loop-doloop.c @@ -153,6 +153,8 @@ doloop_condition_get (rtx doloop_pat) else inc = PATTERN (prev_insn); /* We expect the condition to be of the form (reg != 0) */ + if (GET_CODE (cmp) != SET || GET_CODE (SET_SRC (cmp)) != IF_THEN_ELSE) + return 0; cond = XEXP (SET_SRC (cmp), 0); if (GET_CODE (cond) != NE || XEXP (cond, 1) != const0_rtx) return 0;