From patchwork Fri May 4 12:30:30 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulrich Weigand X-Patchwork-Id: 156900 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 4BEA3B707A for ; Fri, 4 May 2012 22:31:07 +1000 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1336739468; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: Received:Received:Received:Message-Id:Received:Subject:To:Date: From:Cc:In-Reply-To:MIME-Version:Content-Type: Content-Transfer-Encoding:Mailing-List:Precedence:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:Sender: Delivered-To; bh=4c0e4558AczABfQA4o9xs67kbHQ=; b=lBr3OoIaIPkCows vB9LoT1o5O5QwLCDBvSZSmIrFqtqvYuRA+tLSoB484cTqerehU1XwoEu44eZxrDe I2zs++rK6S6PPMUGseREe/dMIAKGAYVngrXkDS6jycagQ+5sULOxXte5LjU30UDR 0nTCaRQtOzHgy5mKaowtrVX4mNo4= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:Received:Received:Received:Received:Message-Id:Received:Subject:To:Date:From:Cc:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding:x-cbid:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=tRa+85xCaovdHIRyzVHWUG6lXmyX2lA4LwD0TKh1DcWtj7WxoNXUbqqvkLLtOC 3f1hS/F39x8lDsgO0YLxuAAt9SVJMOUt8+q4o0jx5ESH9N/bHkA93JlLbGAJQuC+ 2zvj4yKW/NSXkCMrysFxO2Hegn8Up8UqOWR0WmbxF0/B0=; Received: (qmail 23629 invoked by alias); 4 May 2012 12:31:02 -0000 Received: (qmail 23609 invoked by uid 22791); 4 May 2012 12:30:59 -0000 X-SWARE-Spam-Status: No, hits=-4.0 required=5.0 tests=AWL, BAYES_00, KHOP_RCVD_UNTRUST, KHOP_THREADED, MSGID_FROM_MTA_HEADER, RCVD_IN_HOSTKARMA_W, RCVD_IN_HOSTKARMA_WL, TW_TM, T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from e06smtp13.uk.ibm.com (HELO e06smtp13.uk.ibm.com) (195.75.94.109) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 04 May 2012 12:30:44 +0000 Received: from /spool/local by e06smtp13.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 4 May 2012 13:30:42 +0100 Received: from d06nrmr1507.portsmouth.uk.ibm.com (9.149.38.233) by e06smtp13.uk.ibm.com (192.168.101.143) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 4 May 2012 13:30:34 +0100 Received: from d06av02.portsmouth.uk.ibm.com (d06av02.portsmouth.uk.ibm.com [9.149.37.228]) by d06nrmr1507.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q44CUWrp2363480 for ; Fri, 4 May 2012 13:30:34 +0100 Received: from d06av02.portsmouth.uk.ibm.com (loopback [127.0.0.1]) by d06av02.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q44CUWeY005994 for ; Fri, 4 May 2012 06:30:32 -0600 Received: from tuxmaker.boeblingen.de.ibm.com (tuxmaker.boeblingen.de.ibm.com [9.152.85.9]) by d06av02.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with SMTP id q44CUU6x005935; Fri, 4 May 2012 06:30:30 -0600 Message-Id: <201205041230.q44CUU6x005935@d06av02.portsmouth.uk.ibm.com> Received: by tuxmaker.boeblingen.de.ibm.com (sSMTP sendmail emulation); Fri, 04 May 2012 14:30:30 +0200 Subject: Re: [PATCH 2/2] Minor refactoring of tree-vect-patterns.c To: richard.guenther@gmail.com (Richard Guenther) Date: Fri, 4 May 2012 14:30:30 +0200 (CEST) From: "Ulrich Weigand" Cc: gcc-patches@gcc.gnu.org, patches@linaro.org In-Reply-To: from "Richard Guenther" at May 02, 2012 11:35:42 AM MIME-Version: 1.0 x-cbid: 12050412-2966-0000-0000-000003FBAF17 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 Richard Guenther wrote: > On Mon, Apr 30, 2012 at 6:19 PM, Ulrich Weigand wrote: > > Hello, > > > > as a second step in refactoring this patch introduces a routine > > vect_find_single_use to determine whether a defining statement > > has one single use within the current vectorization domain. > > > > The helper is then called wherever that check is currently > > open-coded. =A0There should be no change in behaviour. > > > > Tested on i386-linux-gnu and arm-linux-gnueabi with no regressions. > > > > OK for mainline? > > You can use single_imm_use to avoid the loop and simplify the factored > routine. > > Ok with that change. I've checked in the version appended below. Thanks, Ulrich ChangeLog: * tree-vect-patterns.c (vect_single_imm_use): New function. (vect_recog_widen_mult_pattern): Use it instead of open-coding loop. (vect_recog_over_widening_pattern): Likewise. (vect_recog_widen_shift_pattern): Likewise. Index: gcc-head/gcc/tree-vect-patterns.c =================================================================== --- gcc-head.orig/gcc/tree-vect-patterns.c 2012-05-04 14:23:18.000000000 +0200 +++ gcc-head/gcc/tree-vect-patterns.c 2012-05-04 14:23:38.000000000 +0200 @@ -119,6 +119,25 @@ vect_same_loop_or_bb_p (gimple stmt1, gi return true; } +/* If the LHS of DEF_STMT has a single use, and that statement is + in the same loop or basic block, return it. */ + +static gimple +vect_single_imm_use (gimple def_stmt) +{ + tree lhs = gimple_assign_lhs (def_stmt); + use_operand_p use_p; + gimple use_stmt; + + if (!single_imm_use (lhs, &use_p, &use_stmt)) + return NULL; + + if (!vect_same_loop_or_bb_p (def_stmt, use_stmt)) + return NULL; + + return use_stmt; +} + /* Check whether NAME, an ssa-name used in USE_STMT, is a result of a type promotion or demotion, such that: DEF_STMT: NAME = NOP (name0) @@ -636,31 +655,18 @@ vect_recog_widen_mult_pattern (VEC (gimp Use unsigned TYPE as the type for WIDEN_MULT_EXPR. */ if (TYPE_UNSIGNED (type) != TYPE_UNSIGNED (half_type0)) { - tree lhs = gimple_assign_lhs (last_stmt), use_lhs; - imm_use_iterator imm_iter; - use_operand_p use_p; - int nuses = 0; - gimple use_stmt = NULL; + gimple use_stmt; + tree use_lhs; tree use_type; if (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (half_type1)) return NULL; - FOR_EACH_IMM_USE_FAST (use_p, imm_iter, lhs) - { - if (is_gimple_debug (USE_STMT (use_p))) - continue; - use_stmt = USE_STMT (use_p); - nuses++; - } - - if (nuses != 1 || !is_gimple_assign (use_stmt) - || gimple_assign_rhs_code (use_stmt) != NOP_EXPR) + use_stmt = vect_single_imm_use (last_stmt); + if (!use_stmt || !is_gimple_assign (use_stmt) + || gimple_assign_rhs_code (use_stmt) != NOP_EXPR) return NULL; - if (!vect_same_loop_or_bb_p (last_stmt, use_stmt)) - return NULL; - use_lhs = gimple_assign_lhs (use_stmt); use_type = TREE_TYPE (use_lhs); if (!INTEGRAL_TYPE_P (use_type) @@ -1165,10 +1171,7 @@ vect_recog_over_widening_pattern (VEC (g { gimple stmt = VEC_pop (gimple, *stmts); gimple pattern_stmt = NULL, new_def_stmt, prev_stmt = NULL, use_stmt = NULL; - tree op0, op1, vectype = NULL_TREE, lhs, use_lhs, use_type; - imm_use_iterator imm_iter; - use_operand_p use_p; - int nuses = 0; + tree op0, op1, vectype = NULL_TREE, use_lhs, use_type; tree var = NULL_TREE, new_type = NULL_TREE, tmp, new_oprnd; bool first; tree type = NULL; @@ -1192,18 +1195,8 @@ vect_recog_over_widening_pattern (VEC (g } /* STMT can be performed on a smaller type. Check its uses. */ - lhs = gimple_assign_lhs (stmt); - nuses = 0; - FOR_EACH_IMM_USE_FAST (use_p, imm_iter, lhs) - { - if (is_gimple_debug (USE_STMT (use_p))) - continue; - use_stmt = USE_STMT (use_p); - nuses++; - } - - if (nuses != 1 || !is_gimple_assign (use_stmt) - || !vect_same_loop_or_bb_p (stmt, use_stmt)) + use_stmt = vect_single_imm_use (stmt); + if (!use_stmt || !is_gimple_assign (use_stmt)) return NULL; /* Create pattern statement for STMT. */ @@ -1454,12 +1447,6 @@ vect_recog_widen_shift_pattern (VEC (gim Use unsigned TYPE as the type for WIDEN_LSHIFT_EXPR. */ if (TYPE_UNSIGNED (type) != TYPE_UNSIGNED (half_type0)) { - tree lhs = gimple_assign_lhs (last_stmt), use_lhs; - imm_use_iterator imm_iter; - use_operand_p use_p; - int nuses = 0; - tree use_type; - if (over_widen) { /* In case of over-widening pattern, S4 should be ORIG_STMT itself. @@ -1472,21 +1459,14 @@ vect_recog_widen_shift_pattern (VEC (gim } else { - FOR_EACH_IMM_USE_FAST (use_p, imm_iter, lhs) - { - if (is_gimple_debug (USE_STMT (use_p))) - continue; - use_stmt = USE_STMT (use_p); - nuses++; - } + tree use_type; + tree use_lhs; - if (nuses != 1 || !is_gimple_assign (use_stmt) + use_stmt = vect_single_imm_use (last_stmt); + if (!use_stmt || !is_gimple_assign (use_stmt) || !CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (use_stmt))) return NULL; - if (!vect_same_loop_or_bb_p (last_stmt, use_stmt)) - return NULL; - use_lhs = gimple_assign_lhs (use_stmt); use_type = TREE_TYPE (use_lhs);