From patchwork Thu Nov 10 10:14:33 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ira Rosen X-Patchwork-Id: 124839 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 511CC1007D4 for ; Thu, 10 Nov 2011 21:14:52 +1100 (EST) Received: (qmail 10052 invoked by alias); 10 Nov 2011 10:14:49 -0000 Received: (qmail 9840 invoked by uid 22791); 10 Nov 2011 10:14:47 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, TW_XJ X-Spam-Check-By: sourceware.org Received: from mail-vx0-f175.google.com (HELO mail-vx0-f175.google.com) (209.85.220.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 10 Nov 2011 10:14:34 +0000 Received: by vcbfl11 with SMTP id fl11so275967vcb.20 for ; Thu, 10 Nov 2011 02:14:33 -0800 (PST) MIME-Version: 1.0 Received: by 10.182.111.8 with SMTP id ie8mr1691036obb.50.1320920073609; Thu, 10 Nov 2011 02:14:33 -0800 (PST) Received: by 10.182.183.102 with HTTP; Thu, 10 Nov 2011 02:14:33 -0800 (PST) Date: Thu, 10 Nov 2011 12:14:33 +0200 Message-ID: Subject: [patch] Fix PR tree-optimization/51058 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 handles CALL_EXPRs in constant/invariant operand creation in SLP. Bootstrapped and tested on powerpc64-suse-linux. Committed. Ira ChangeLog: PR tree-optimization/51058 * tree-vect-slp.c (vect_get_constant_vectors): Handle CALL_EXPR. testsuite/ChangeLog: PR tree-optimization/51058 * gfortran.dg/vect/pr51058.f90: New test. Index: tree-vect-slp.c =================================================================== --- tree-vect-slp.c (revision 181250) +++ tree-vect-slp.c (working copy) @@ -2191,7 +2191,7 @@ vect_get_constant_vectors (tree op, slp_tree slp_n VEC (tree, heap) *voprnds = VEC_alloc (tree, heap, number_of_vectors); bool constant_p, is_store; tree neutral_op = NULL; - enum tree_code code = gimple_assign_rhs_code (stmt); + enum tree_code code = gimple_expr_code (stmt); gimple def_stmt; struct loop *loop; @@ -2287,22 +2287,32 @@ vect_get_constant_vectors (tree op, slp_tree slp_n { if (is_store) op = gimple_assign_rhs1 (stmt); - else if (gimple_assign_rhs_code (stmt) != COND_EXPR) - op = gimple_op (stmt, op_num + 1); - else + else { - if (op_num == 0 || op_num == 1) + switch (code) { - tree cond = gimple_assign_rhs1 (stmt); - op = TREE_OPERAND (cond, op_num); + case COND_EXPR: + if (op_num == 0 || op_num == 1) + { + tree cond = gimple_assign_rhs1 (stmt); + op = TREE_OPERAND (cond, op_num); + } + else + { + if (op_num == 2) + op = gimple_assign_rhs2 (stmt); + else + op = gimple_assign_rhs3 (stmt); + } + break; + + case CALL_EXPR: + op = gimple_call_arg (stmt, op_num); + break; + + default: + op = gimple_op (stmt, op_num + 1); } - else - { - if (op_num == 2) - op = gimple_assign_rhs2 (stmt); - else - op = gimple_assign_rhs3 (stmt); - } } if (reduc_index != -1) Index: testsuite/gfortran.dg/vect/pr51058.f90 =================================================================== --- testsuite/gfortran.dg/vect/pr51058.f90 (revision 0) +++ testsuite/gfortran.dg/vect/pr51058.f90 (revision 0) @@ -0,0 +1,19 @@ +! { dg-do compile } + + SUBROUTINE MLIST(MOLsp,PBCx,PBCy,PBCz, X0) + IMPLICIT NONE + INTEGER, PARAMETER :: NM=16384 + INTEGER :: MOLsp, i + REAL :: PBCx, PBCy, PBCz, boxjmp, HALf=1./2. + REAL :: X0(2,-2:NM) + + DO i = 1 , MOLsp + boxjmp = PBCx*INT(X0(1,i)+SIGN(HALf,X0(1,i))) + X0(1,i) = X0(1,i) - boxjmp + boxjmp = PBCy*INT(X0(2,i)+SIGN(HALf,X0(2,i))) + X0(2,i) = X0(2,i) - boxjmp + ENDDO + END + +! { dg-final { cleanup-tree-dump "vect" } } +