From patchwork Thu Sep 22 07:21:29 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ira Rosen X-Patchwork-Id: 115889 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 986B8B6F7F for ; Thu, 22 Sep 2011 17:21:55 +1000 (EST) Received: (qmail 23213 invoked by alias); 22 Sep 2011 07:21:50 -0000 Received: (qmail 23189 invoked by uid 22791); 22 Sep 2011 07:21:48 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Received: from mail-yx0-f175.google.com (HELO mail-yx0-f175.google.com) (209.85.213.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 22 Sep 2011 07:21:30 +0000 Received: by yxj17 with SMTP id 17so1888328yxj.20 for ; Thu, 22 Sep 2011 00:21:30 -0700 (PDT) MIME-Version: 1.0 Received: by 10.150.2.16 with SMTP id 16mr1949997ybb.333.1316676090117; Thu, 22 Sep 2011 00:21:30 -0700 (PDT) Received: by 10.151.100.9 with HTTP; Thu, 22 Sep 2011 00:21:29 -0700 (PDT) Date: Thu, 22 Sep 2011 10:21:29 +0300 Message-ID: Subject: [patch] Fix PR tree-optimization/50451 From: Ira Rosen To: gcc-patches@gcc.gnu.org Cc: Patch Tracking 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 adds a missing support of constant operands in reduction in SLP. Bootstrapped and tested on powerpc64-suse-linux. Committed. Ira ChangeLog: PR tree-optimization/50451 * tree-vect-slp.c (vect_get_constant_vectors): Don't fail for constant operands in reduction. (vect_get_slp_defs): Don't create vector operand for NULL scalar operand. testsuite/ChangeLog: PR tree-optimization/50451 * gcc.dg/vect/pr50451.c: New test. Index: tree-vect-slp.c =================================================================== --- tree-vect-slp.c (revision 179076) +++ tree-vect-slp.c (working copy) @@ -1905,14 +1905,9 @@ vect_get_constant_vectors (tree op, slp_tree slp_n gimple def_stmt; struct loop *loop; - if (STMT_VINFO_DEF_TYPE (stmt_vinfo) == vect_reduction_def) + if (STMT_VINFO_DEF_TYPE (stmt_vinfo) == vect_reduction_def + && reduc_index != -1) { - if (reduc_index == -1) - { - VEC_free (tree, heap, *vec_oprnds); - return; - } - op_num = reduc_index - 1; op = gimple_op (stmt, reduc_index); /* For additional copies (see the explanation of NUMBER_OF_COPIES below) @@ -2164,7 +2159,7 @@ vect_get_slp_defs (tree op0, tree op1, slp_tree sl return; code = gimple_assign_rhs_code (first_stmt); - if (get_gimple_rhs_class (code) != GIMPLE_BINARY_RHS || !vec_oprnds1) + if (get_gimple_rhs_class (code) != GIMPLE_BINARY_RHS || !vec_oprnds1 || !op1) return; /* The number of vector defs is determined by the number of vector statements Index: testsuite/gcc.dg/vect/pr50451.c =================================================================== --- testsuite/gcc.dg/vect/pr50451.c (revision 0) +++ testsuite/gcc.dg/vect/pr50451.c (revision 0) @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target vect_int } */ + +int +foo (int integral, int decimal, int power_ten) +{ + while (power_ten > 0) + { + integral *= 10; + decimal *= 10; + power_ten--; + } + + return integral+decimal; +} + +/* { dg-final { cleanup-tree-dump "vect" } } */ +