From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 55773 invoked by alias); 22 Oct 2015 16:12:08 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 55713 invoked by uid 89); 22 Oct 2015 16:12:08 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-ig0-f169.google.com Received: from mail-ig0-f169.google.com (HELO mail-ig0-f169.google.com) (209.85.213.169) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 22 Oct 2015 16:12:03 +0000 Received: by igbhv6 with SMTP id hv6so63209420igb.0 for ; Thu, 22 Oct 2015 09:12:01 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.50.88.105 with SMTP id bf9mr17078522igb.39.1445530320899; Thu, 22 Oct 2015 09:12:00 -0700 (PDT) Received: by 10.36.209.7 with HTTP; Thu, 22 Oct 2015 09:12:00 -0700 (PDT) In-Reply-To: <56290634.5020706@redhat.com> References: <20151008145221.GB63757@msticlxl57.ims.intel.com> <5627CA8B.8040106@redhat.com> <56290634.5020706@redhat.com> Date: Thu, 22 Oct 2015 16:21:00 -0000 Message-ID: Subject: Re: [vec-cmp, patch 1/6] Add optabs for vector comparison From: Ilya Enkovich To: Jeff Law Cc: gcc-patches Content-Type: text/plain; charset=UTF-8 X-IsSubscribed: yes X-SW-Source: 2015-10/txt/msg02298.txt.bz2 2015-10-22 18:52 GMT+03:00 Jeff Law : > On 10/22/2015 04:35 AM, Ilya Enkovich wrote: >> >> 2015-10-21 20:25 GMT+03:00 Jeff Law : >>> >>> On 10/08/2015 08:52 AM, Ilya Enkovich wrote: >>>> >>>> >>>> Hi, >>>> >>>> This series introduces autogeneration of vector comparison and its >>>> support >>>> on i386 target. It lets comparison statements to be vectorized into >>>> vector >>>> comparison instead of VEC_COND_EXPR. This allows to avoid some >>>> restrictions >>>> implied by boolean patterns. This series applies on top of bolean >>>> vectors >>>> series [1]. >>>> >>>> This patch introduces optabs for vector comparison. >>>> >>>> [1] https://gcc.gnu.org/ml/gcc-patches/2015-10/msg00215.html >>>> >>>> Thanks, >>>> Ilya >>>> -- >>>> gcc/ >>>> >>>> 2015-10-08 Ilya Enkovich >>>> >>>> * expr.c (do_store_flag): Use expand_vec_cmp_expr for mask >>>> results. >>>> * optabs-query.h (get_vec_cmp_icode): New. >>>> * optabs-tree.c (expand_vec_cmp_expr_p): New. >>>> * optabs-tree.h (expand_vec_cmp_expr_p): New. >>>> * optabs.c (vector_compare_rtx): Add OPNO arg. >>>> (expand_vec_cond_expr): Adjust to vector_compare_rtx change. >>>> (expand_vec_cmp_expr): New. >>>> * optabs.def (vec_cmp_optab): New. >>>> (vec_cmpu_optab): New. >>>> * optabs.h (expand_vec_cmp_expr): New. >>>> * tree-vect-generic.c (expand_vector_comparison): Add vector >>>> comparison optabs check. >>>> >>>> >>>> diff --git a/gcc/optabs-tree.c b/gcc/optabs-tree.c >>>> index 3b03338..aa863cf 100644 >>>> --- a/gcc/optabs-tree.c >>>> +++ b/gcc/optabs-tree.c >>>> @@ -320,6 +320,19 @@ supportable_convert_operation (enum tree_code code, >>>> return false; >>>> } >>>> >>>> +/* Return TRUE if appropriate vector insn is available >>>> + for vector comparison expr with vector type VALUE_TYPE >>>> + and resulting mask with MASK_TYPE. */ >>>> + >>>> +bool >>>> +expand_vec_cmp_expr_p (tree value_type, tree mask_type) >>>> +{ >>>> + enum insn_code icode = get_vec_cmp_icode (TYPE_MODE (value_type), >>>> + TYPE_MODE (mask_type), >>>> + TYPE_UNSIGNED (value_type)); >>>> + return (icode != CODE_FOR_nothing); >>>> +} >>>> + >>> >>> >>> Nothing inherently wrong with the code, but it seems like it's in the >>> wrong >>> place. Why optabs-tree rather than optabs-query? >> >> >> Because it uses tree type for arguments. There is no single tree usage >> in optabs-query.c. I think expand_vec_cond_expr_p is in optabs-tree >> for the same reason. > > Note that expand_vec_cond_expr_p doesn't rely on enum insn code. Well, it > relies on enum insn code being an integer and CODE_FOR_nothing always having > the value zero, which is probably worse. Actually it also uses CODE_FOR_nothing in comparison: || get_vcond_icode (TYPE_MODE (value_type), TYPE_MODE (cmp_op_type), TYPE_UNSIGNED (cmp_op_type)) == CODE_FOR_nothing) There are also two other instances of CODE_FOR_nothing in optabs-tree.c. Do you want to get rid of "#include insn-codes.h" in optabs-tree.c? Will it be really better if we replace it with "#include optabs-query.h"? Thanks, Ilya > > We should clean both of these up so that: > > 1. We don't need enum insn_code in optabs-tree > 2. We don't implicitly rely on CODE_FOR_nothing == 0 > > It may be as simple as a adding a predicate function to optabs-query that > returns true/false if there's a suitable icode, then using that predicate in > optabs-tree. > > jeff > >