From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 73496 invoked by alias); 27 Oct 2015 20:52:22 -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 73486 invoked by uid 89); 27 Oct 2015 20:52:22 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Tue, 27 Oct 2015 20:52:20 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 874FFC0B590D; Tue, 27 Oct 2015 20:52:19 +0000 (UTC) Received: from localhost.localdomain (ovpn-113-196.phx2.redhat.com [10.3.113.196]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t9RKqJ0J004836; Tue, 27 Oct 2015 16:52:19 -0400 Subject: Re: [vec-cmp, patch 1/6] Add optabs for vector comparison To: Ilya Enkovich References: <20151008145221.GB63757@msticlxl57.ims.intel.com> <5627CA8B.8040106@redhat.com> <56290634.5020706@redhat.com> Cc: gcc-patches From: Jeff Law Message-ID: <562FE402.8020801@redhat.com> Date: Tue, 27 Oct 2015 20:57:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2015-10/txt/msg02974.txt.bz2 On 10/22/2015 10:12 AM, Ilya Enkovich wrote: > 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"? Sigh. I searched for the enum type, not for CODE_FOR_nothing ;( My bad. If it's easy to get rid of, yes. I believe we've got 3 uses of CODE_FOR_nothing. AFAICT in none of those cases do we care about the code other than does it correspond to CODE_FOR_nothing. Ideally we'd like to have both optabs-query and optabs-tree not know about insn codes. The former is supposed to be IR agnostic, but insn codes are part of the RTL IR, so that's a wart. The latter is supposed to be tree specific and thus shouldn't know about the RTL IR either. I'd settle for getting the wart out of optabs-tree and we can put further cleanup of optabs-query in the queue. To get the wart out of optabs-tree all I think we need is a true boolean function that tells us if there's a suitable optab. It's unfortunate that the routines exported by optabs-query are can_{extend,float,fix}_p since those would fairly natural for the boolean query we want to make and they're used elsewhere, but not in a boolean form. I think that we ought to rename the existing uses & definition of can_XXX_p that are exported by optabs-query.c, then creating new can_XXX_p for those uses that just care about the boolean status should work. At that point we remove insn-codes.h from optab-tree.c. Jeff