From patchwork Tue Nov 9 22:18:16 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sebastian Pop X-Patchwork-Id: 70581 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 7682BB7123 for ; Wed, 10 Nov 2010 09:19:09 +1100 (EST) Received: (qmail 2602 invoked by alias); 9 Nov 2010 22:19:08 -0000 Received: (qmail 2578 invoked by uid 22791); 9 Nov 2010 22:19:06 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL, BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE X-Spam-Check-By: sourceware.org Received: from mail-gy0-f175.google.com (HELO mail-gy0-f175.google.com) (209.85.160.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 09 Nov 2010 22:19:02 +0000 Received: by gyf3 with SMTP id 3so5038698gyf.20 for ; Tue, 09 Nov 2010 14:19:01 -0800 (PST) Received: by 10.42.164.138 with SMTP id g10mr1492063icy.318.1289341140635; Tue, 09 Nov 2010 14:19:00 -0800 (PST) MIME-Version: 1.0 Received: by 10.42.241.1 with HTTP; Tue, 9 Nov 2010 14:18:16 -0800 (PST) From: Sebastian Pop Date: Tue, 9 Nov 2010 16:18:16 -0600 Message-ID: Subject: Fix PR45971: do not predicate condition phi nodes that are scev analyzable. To: GCC Patches , Richard Guenther 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 Hi, This patch avoids the generation of a COND_EXPR when the condition phi node is analyzable with scev. Bootstrapped and tested on amd64-linux. Ok for trunk? Thanks, Sebastian From 43f56c461f3797d4840f88ca6ecc2fe30a67c210 Mon Sep 17 00:00:00 2001 From: Sebastian Pop Date: Tue, 9 Nov 2010 14:02:06 -0600 Subject: [PATCH] Fix PR45971: do not predicate condition phi nodes that are scev analyzable. 2010-11-09 Sebastian Pop PR tree-optimization/45971 * tree-if-conv.c (predicate_scalar_phi): Do not generate a COND_EXPR for phi nodes analyzable by scev. * gcc.dg/vect/O3-pr45971.c: New. --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/vect/O3-pr45971.c | 13 +++++++++++++ gcc/tree-if-conv.c | 10 +++++++--- 4 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/vect/O3-pr45971.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dbf4ef6..3153dc6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2010-11-09 Sebastian Pop + PR tree-optimization/45971 + * tree-if-conv.c (predicate_scalar_phi): Do not generate a COND_EXPR + for phi nodes analyzable by scev. + +2010-11-09 Sebastian Pop + PR tree-optimization/46036 * tree-if-conv.c (predicate_bbs): Call unshare_expr before add_to_dst_predicate_list. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5517521..ee65f8f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2010-11-09 Sebastian Pop + PR tree-optimization/45971 + * gcc.dg/vect/O3-pr45971.c: New. + +2010-11-09 Sebastian Pop + PR tree-optimization/46036 * gfortran.dg/lto/pr46036_0.f90: New. diff --git a/gcc/testsuite/gcc.dg/vect/O3-pr45971.c b/gcc/testsuite/gcc.dg/vect/O3-pr45971.c new file mode 100644 index 0000000..1b7c65c --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/O3-pr45971.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target vect_int } */ + +void +foo (int *x, int *y) +{ + int i; + for (i = 0; i < 11; i++) + y[i] = (x[i] == 1) ? i + 1 : -(i + 1); +} + +/* { dg-final { cleanup-tree-dump "vect" } } */ + diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c index 17b6672..fc65845 100644 --- a/gcc/tree-if-conv.c +++ b/gcc/tree-if-conv.c @@ -1224,7 +1224,7 @@ predicate_scalar_phi (gimple phi, tree cond, { gimple new_stmt; basic_block bb; - tree rhs, res, arg; + tree rhs, res, arg, scev; gcc_assert (gimple_code (phi) == GIMPLE_PHI && gimple_phi_num_args (phi) == 2); @@ -1236,8 +1236,12 @@ predicate_scalar_phi (gimple phi, tree cond, bb = gimple_bb (phi); - arg = degenerate_phi_result (phi); - if (arg) + if ((arg = degenerate_phi_result (phi)) + || ((scev = analyze_scalar_evolution (gimple_bb (phi)->loop_father, + res)) + && !chrec_contains_undetermined (scev) + && scev != res + && (arg = gimple_phi_arg_def (phi, 0)))) rhs = arg; else { -- 1.7.0.4