From patchwork Wed Aug 11 17:36:42 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Fang, Changpeng" X-Patchwork-Id: 61494 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 CCC80B70D8 for ; Thu, 12 Aug 2010 03:40:15 +1000 (EST) Received: (qmail 8264 invoked by alias); 11 Aug 2010 17:40:13 -0000 Received: (qmail 8247 invoked by uid 22791); 11 Aug 2010 17:40:11 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, TW_TM X-Spam-Check-By: sourceware.org Received: from tx2ehsobe003.messaging.microsoft.com (HELO TX2EHSOBE006.bigfish.com) (65.55.88.13) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 11 Aug 2010 17:40:00 +0000 Received: from mail9-tx2-R.bigfish.com (10.9.14.252) by TX2EHSOBE006.bigfish.com (10.9.40.26) with Microsoft SMTP Server id 8.1.340.0; Wed, 11 Aug 2010 17:39:57 +0000 Received: from mail9-tx2 (localhost.localdomain [127.0.0.1]) by mail9-tx2-R.bigfish.com (Postfix) with ESMTP id 64003750176; Wed, 11 Aug 2010 17:39:57 +0000 (UTC) X-SpamScore: -3 X-BigFish: VPS-3(zz4015Lzz1202hzzz32i2a8h34h61h) X-Spam-TCS-SCL: 0:0 Received: from mail9-tx2 (localhost.localdomain [127.0.0.1]) by mail9-tx2 (MessageSwitch) id 1281548397138111_12314; Wed, 11 Aug 2010 17:39:57 +0000 (UTC) Received: from TX2EHSMHS043.bigfish.com (unknown [10.9.14.241]) by mail9-tx2.bigfish.com (Postfix) with ESMTP id 1DA6B1AB004D; Wed, 11 Aug 2010 17:39:57 +0000 (UTC) Received: from ausb3extmailp02.amd.com (163.181.251.22) by TX2EHSMHS043.bigfish.com (10.9.99.143) with Microsoft SMTP Server (TLS) id 14.0.482.44; Wed, 11 Aug 2010 17:39:56 +0000 Received: from ausb3twp01.amd.com (ausb3twp01.amd.com [163.181.250.37]) by ausb3extmailp02.amd.com (Switch-3.2.7/Switch-3.2.7) with SMTP id o7BHbf4P026745; Wed, 11 Aug 2010 12:37:44 -0500 X-M-MSG: Received: from sausexhtp01.amd.com (sausexhtp01.amd.com [163.181.3.165]) (using TLSv1 with cipher RC4-MD5 (128/128 bits)) (No client certificate requested) by ausb3twp01.amd.com (Tumbleweed MailGate 3.7.2) with ESMTP id 297AF10286FE; Wed, 11 Aug 2010 12:36:42 -0500 (CDT) Received: from SAUSEXMBP01.amd.com ([163.181.3.198]) by sausexhtp01.amd.com ([163.181.3.165]) with mapi; Wed, 11 Aug 2010 12:36:42 -0500 From: "Fang, Changpeng" To: Ira Rosen , "gcc-patches@gcc.gnu.org" Date: Wed, 11 Aug 2010 12:36:42 -0500 Subject: [Patch PR 45241]: CPU2006 465.tonto ICE in the vectorizer with -fno-tree-pre Message-ID: MIME-Version: 1.0 X-Reverse-DNS: ausb3extmailp02.amd.com 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 Hi, Attached patch fixes bug 45241: CPU2006 465.tonto ICE in the vectorizer with -fno-tree-pre. When the vectorizer tries to recognize the dot_prod pattern, it traces the statements chain outside the loop. As a result, ICE occurs when it tries to access the stmt_vinfo for a stmt outside the loop. This patch stops the pattern searching when the statement is already outside the loop. It passed bootstrapping in both the trunk and 4.5 branch. The bug is 4.5/4.6 regression, and it prevents benchmarking for cpu2006 with no PRE. Is it OK to commit to 4,5 branch (and 4.6 ? Thanks, Changpeng From c13c752b77704e04b8285fb667d6f01f95352136 Mon Sep 17 00:00:00 2001 From: Changpeng Fang Date: Tue, 10 Aug 2010 15:31:20 -0700 Subject: [PATCH] pr45241 give up dot_prod pattern searching if stmt is outside the loop * gcc/tree-vect-patterns.c (vect_recog_dot_prod_pattern): Give up dor_prod pattern searching if a stmt is outside the loop. * gcc.dg/vect/pr45241.c: New. --- gcc/testsuite/gcc.dg/vect/pr45241.c | 19 +++++++++++++++++++ gcc/tree-vect-patterns.c | 5 +++++ 2 files changed, 24 insertions(+), 0 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/vect/pr45241.c diff --git a/gcc/testsuite/gcc.dg/vect/pr45241.c b/gcc/testsuite/gcc.dg/vect/pr45241.c new file mode 100644 index 0000000..c04cf04 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr45241.c @@ -0,0 +1,19 @@ +/* PR tree-optimization/45241 */ +/* { dg-do compile } */ +/* { dg-options "-O3 -ftree-pre" } */ + +int +foo (short x) +{ + short i, y; + int sum; + + for (i = 0; i < x; i++) + y = x * i; + + for (i = x; i > 0; i--) + sum += y; + + return sum; +} + diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c index 19f0ae6..19df13f 100644 --- a/gcc/tree-vect-patterns.c +++ b/gcc/tree-vect-patterns.c @@ -255,6 +255,11 @@ vect_recog_dot_prod_pattern (gimple last_stmt, tree *type_in, tree *type_out) prod_type = half_type; stmt = SSA_NAME_DEF_STMT (oprnd0); + + /* It could not be the dot_prod pattern if the stmt is outside the loop. */ + if (!flow_bb_inside_loop_p (loop, gimple_bb (stmt))) + return NULL; + /* FORNOW. Can continue analyzing the def-use chain when this stmt in a phi inside the loop (in case we are analyzing an outer-loop). */ if (!is_gimple_assign (stmt)) -- 1.6.3.3