From patchwork Fri Dec 18 13:50:25 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Biener X-Patchwork-Id: 558887 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 39988140213 for ; Sat, 19 Dec 2015 00:50:37 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=gW6hF4Fe; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:subject:message-id:mime-version:content-type; q=dns; s= default; b=P3oVqLgMsZvTJ6Qx48eAba+UFWDCPkgBCQ2Ya85v9zF+3ka659wg9 0+qMnnIOb5ln80U8yyxlzRWXfd7X33kw0heGpB3Ruk+OgFy8I4vWOudldg+Eiwqf IkKhfUe4D4Niyevg0jroWNo2KjW7un6ZjwdJiImfYnkISPWlTL7WMk= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:subject:message-id:mime-version:content-type; s= default; bh=7xWP41fakQO03v7YFjnuskSwbO8=; b=gW6hF4FeeQQMv/IOVYRh cIPTx1DEtAVilEJsR3H7iiAzvGokz1fJTDfFw3msvYNWDAr0zaQsfMZDKgwljblk ar1GfPc832rGEf8rPYL9nAqeWF58zvUqDOl/KYKsa6UdrYXa+yUpTtcvDdk6GN2X K72Ta2s9PkYvw9RZ8EIFVlo= Received: (qmail 21078 invoked by alias); 18 Dec 2015 13:50:30 -0000 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 Received: (qmail 21068 invoked by uid 89); 18 Dec 2015 13:50:29 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.0 required=5.0 tests=AWL, BAYES_00, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_LOW, SPF_PASS, T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy=6928, 565 X-HELO: mx2.suse.de Received: from mx2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (CAMELLIA256-SHA encrypted) ESMTPS; Fri, 18 Dec 2015 13:50:28 +0000 Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 2FB84AC5F for ; Fri, 18 Dec 2015 13:50:25 +0000 (UTC) Date: Fri, 18 Dec 2015 14:50:25 +0100 (CET) From: Richard Biener To: gcc-patches@gcc.gnu.org Subject: [PATCH] Fix PR68776 Message-ID: User-Agent: Alpine 2.11 (LSU 23 2013-08-11) MIME-Version: 1.0 The following should fix PR68776, a testism with the new mult pattern. The patch changes pattern recog to print a more specific 'pattern recognized' and make the two offending testcases scan for what it is looking. Bootstrapped and tested on x86_64-unknown-linux-gnu, applied. Richard. 2015-12-18 Richard Biener PR testsuite/68776 * tree-vect-patterns.c (struct vect_recog_func): New. (vect_vect_recog_func_ptrs): Make an array of function name pairs. (vect_pattern_recog_1): Print the recognized pattern name. Return true if a pattern was recognized. (vect_pattern_recog): Adjust. Stop iterating over pattern recognition functions on a stmt if a pattern was recognized. * gcc.dg/vect/vect-widen-mult-const-s16.c: Adjust. * gcc.dg/vect/vect-widen-mult-const-u16.c: Likewise. Index: gcc/tree-vect-patterns.c =================================================================== --- gcc/tree-vect-patterns.c (revision 231805) +++ gcc/tree-vect-patterns.c (working copy) @@ -69,21 +69,28 @@ static gimple *vect_recog_mixed_size_con tree *, tree *); static gimple *vect_recog_bool_pattern (vec *, tree *, tree *); static gimple *vect_recog_mask_conversion_pattern (vec *, tree *, tree *); -static vect_recog_func_ptr vect_vect_recog_func_ptrs[NUM_PATTERNS] = { - vect_recog_widen_mult_pattern, - vect_recog_widen_sum_pattern, - vect_recog_dot_prod_pattern, - vect_recog_sad_pattern, - vect_recog_pow_pattern, - vect_recog_widen_shift_pattern, - vect_recog_over_widening_pattern, - vect_recog_rotate_pattern, - vect_recog_vector_vector_shift_pattern, - vect_recog_divmod_pattern, - vect_recog_mult_pattern, - vect_recog_mixed_size_cond_pattern, - vect_recog_bool_pattern, - vect_recog_mask_conversion_pattern}; + +struct vect_recog_func +{ + vect_recog_func_ptr fn; + const char *name; +}; +static vect_recog_func vect_vect_recog_func_ptrs[NUM_PATTERNS] = { + { vect_recog_widen_mult_pattern, "widen_mult" }, + { vect_recog_widen_sum_pattern, "widen_sum" }, + { vect_recog_dot_prod_pattern, "dot_prod" }, + { vect_recog_sad_pattern, "sad" }, + { vect_recog_pow_pattern, "pow" }, + { vect_recog_widen_shift_pattern, "widen_shift" }, + { vect_recog_over_widening_pattern, "over_widening" }, + { vect_recog_rotate_pattern, "rotate" }, + { vect_recog_vector_vector_shift_pattern, "vector_vector_shift" }, + { vect_recog_divmod_pattern, "divmod" }, + { vect_recog_mult_pattern, "mult" }, + { vect_recog_mixed_size_cond_pattern, "mixed_size_cond" }, + { vect_recog_bool_pattern, "bool" }, + { vect_recog_mask_conversion_pattern, "mask_conversion" } +}; static inline void append_pattern_def_seq (stmt_vec_info stmt_info, gimple *stmt) @@ -3791,8 +3798,8 @@ vect_mark_pattern_stmts (gimple *orig_st This function also does some bookkeeping, as explained in the documentation for vect_recog_pattern. */ -static void -vect_pattern_recog_1 (vect_recog_func_ptr vect_recog_func, +static bool +vect_pattern_recog_1 (vect_recog_func *recog_func, gimple_stmt_iterator si, vec *stmts_to_replace) { @@ -3807,9 +3814,9 @@ vect_pattern_recog_1 (vect_recog_func_pt stmts_to_replace->truncate (0); stmts_to_replace->quick_push (stmt); - pattern_stmt = (* vect_recog_func) (stmts_to_replace, &type_in, &type_out); + pattern_stmt = recog_func->fn (stmts_to_replace, &type_in, &type_out); if (!pattern_stmt) - return; + return false; stmt = stmts_to_replace->last (); stmt_info = vinfo_for_stmt (stmt); @@ -3831,13 +3838,13 @@ vect_pattern_recog_1 (vect_recog_func_pt /* Check target support */ type_in = get_vectype_for_scalar_type (type_in); if (!type_in) - return; + return false; if (type_out) type_out = get_vectype_for_scalar_type (type_out); else type_out = type_in; if (!type_out) - return; + return false; pattern_vectype = type_out; if (is_gimple_assign (pattern_stmt)) @@ -3853,14 +3860,14 @@ vect_pattern_recog_1 (vect_recog_func_pt if (!optab || (icode = optab_handler (optab, vec_mode)) == CODE_FOR_nothing || (insn_data[icode].operand[0].mode != TYPE_MODE (type_out))) - return; + return false; } /* Found a vectorizable pattern. */ if (dump_enabled_p ()) { dump_printf_loc (MSG_NOTE, vect_location, - "pattern recognized: "); + "%s pattern recognized: ", recog_func->name); dump_gimple_stmt (MSG_NOTE, TDF_SLIM, pattern_stmt, 0); } @@ -3892,6 +3899,8 @@ vect_pattern_recog_1 (vect_recog_func_pt vect_mark_pattern_stmts (stmt, pattern_stmt, NULL_TREE); } + + return true; } @@ -3980,7 +3989,6 @@ vect_pattern_recog (vec_info *vinfo) unsigned int nbbs; gimple_stmt_iterator si; unsigned int i, j; - vect_recog_func_ptr vect_recog_func; auto_vec stmts_to_replace; gimple *stmt; @@ -4003,11 +4011,9 @@ vect_pattern_recog (vec_info *vinfo) { /* Scan over all generic vect_recog_xxx_pattern functions. */ for (j = 0; j < NUM_PATTERNS; j++) - { - vect_recog_func = vect_vect_recog_func_ptrs[j]; - vect_pattern_recog_1 (vect_recog_func, si, - &stmts_to_replace); - } + if (vect_pattern_recog_1 (&vect_vect_recog_func_ptrs[j], si, + &stmts_to_replace)) + break; } } } @@ -4024,11 +4030,9 @@ vect_pattern_recog (vec_info *vinfo) /* Scan over all generic vect_recog_xxx_pattern functions. */ for (j = 0; j < NUM_PATTERNS; j++) - { - vect_recog_func = vect_vect_recog_func_ptrs[j]; - vect_pattern_recog_1 (vect_recog_func, si, - &stmts_to_replace); - } + if (vect_pattern_recog_1 (&vect_vect_recog_func_ptrs[j], si, + &stmts_to_replace)) + break; } } } Index: gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c =================================================================== --- gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c (revision 231805) +++ gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-s16.c (working copy) @@ -56,5 +56,5 @@ int main (void) /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target vect_widen_mult_hi_to_si } } } */ /* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 2 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */ -/* { dg-final { scan-tree-dump-times "pattern recognized" 2 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */ +/* { dg-final { scan-tree-dump-times "widen_mult pattern recognized" 2 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */ Index: gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-u16.c =================================================================== --- gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-u16.c (revision 231805) +++ gcc/testsuite/gcc.dg/vect/vect-widen-mult-const-u16.c (working copy) @@ -73,4 +73,4 @@ int main (void) /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" { target vect_widen_mult_hi_to_si } } } */ /* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 2 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */ -/* { dg-final { scan-tree-dump-times "pattern recognized" 2 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */ +/* { dg-final { scan-tree-dump-times "widen_mult pattern recognized" 2 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */