From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by sourceware.org (Postfix) with ESMTPS id A585F3857C70 for ; Fri, 8 Jan 2021 09:50:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org A585F3857C70 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=rguenther@suse.de X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 68470AD2B; Fri, 8 Jan 2021 09:50:31 +0000 (UTC) Date: Fri, 8 Jan 2021 10:50:31 +0100 (CET) From: Richard Biener To: Tamar Christina cc: gcc-patches@gcc.gnu.org, nd@arm.com, ook@ucw.cz Subject: Re: [PATCH 8/8 v9]middle-end slp: Add complex operations class to share first match among all matchers In-Reply-To: <20201228133821.GA2847@arm.com> Message-ID: References: <20201228133821.GA2847@arm.com> User-Agent: Alpine 2.21 (LSU 202 2017-01-01) MIME-Version: 1.0 X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8BIT X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Jan 2021 09:50:34 -0000 On Mon, 28 Dec 2020, Tamar Christina wrote: > Hi All, > > This introduces a common class complex_operations_pattern which encapsulates > the complex add, mul, fma and fms pattern in such a way so that the first match > is shared. > > Bootstrapped Regtested on aarch64-none-linux-gnu, x86_64-pc-linux-gnu > and no issues. > > Ok for master? OK. Thanks, Richard. > Thanks, > Tamar > > gcc/ChangeLog: > > * tree-vect-slp-patterns.c (class complex_operations_pattern, > complex_operations_pattern::matches, > complex_operations_pattern::recognize, > complex_operations_pattern::build): New. > (slp_patterns): Use it. > > --- inline copy of patch -- > diff --git a/gcc/tree-vect-slp-patterns.c b/gcc/tree-vect-slp-patterns.c > index ab6587f0b8522ec5f916f74e7e7401b1f7a35bbb..33d22e657ebf1d0454a134bab4febb2b65581822 100644 > --- a/gcc/tree-vect-slp-patterns.c > +++ b/gcc/tree-vect-slp-patterns.c > @@ -1429,6 +1429,83 @@ complex_fms_pattern::build (vec_info *vinfo) > complex_pattern::build (vinfo); > } > > +/******************************************************************************* > + * complex_operations_pattern class > + ******************************************************************************/ > + > +/* This function combines all the existing pattern matchers above into one class > + that shares the functionality between them. The initial match is shared > + between all complex operations. */ > + > +class complex_operations_pattern : public complex_pattern > +{ > + protected: > + complex_operations_pattern (slp_tree *node, vec *m_ops, > + internal_fn ifn) > + : complex_pattern (node, m_ops, ifn) > + { > + this->m_num_args = 0; > + } > + > + public: > + void build (vec_info *); > + static internal_fn > + matches (complex_operation_t op, slp_tree_to_load_perm_map_t *, slp_tree *, > + vec *); > + > + static vect_pattern* > + recognize (slp_tree_to_load_perm_map_t *, slp_tree *); > +}; > + > +/* Dummy matches implementation for proxy object. */ > + > +internal_fn > +complex_operations_pattern:: > +matches (complex_operation_t /* op */, > + slp_tree_to_load_perm_map_t * /* perm_cache */, > + slp_tree * /* ref_node */, vec * /* ops */) > +{ > + return IFN_LAST; > +} > + > +/* Attempt to recognize a complex mul pattern. */ > + > +vect_pattern* > +complex_operations_pattern::recognize (slp_tree_to_load_perm_map_t *perm_cache, > + slp_tree *node) > +{ > + auto_vec ops; > + complex_operation_t op > + = vect_detect_pair_op (*node, true, &ops); > + internal_fn ifn = IFN_LAST; > + > + ifn = complex_fms_pattern::matches (op, perm_cache, node, &ops); > + if (ifn != IFN_LAST) > + return complex_fms_pattern::mkInstance (node, &ops, ifn); > + > + ifn = complex_mul_pattern::matches (op, perm_cache, node, &ops); > + if (ifn != IFN_LAST) > + return complex_mul_pattern::mkInstance (node, &ops, ifn); > + > + ifn = complex_fma_pattern::matches (op, perm_cache, node, &ops); > + if (ifn != IFN_LAST) > + return complex_fma_pattern::mkInstance (node, &ops, ifn); > + > + ifn = complex_add_pattern::matches (op, perm_cache, node, &ops); > + if (ifn != IFN_LAST) > + return complex_add_pattern::mkInstance (node, &ops, ifn); > + > + return NULL; > +} > + > +/* Dummy implementation of build. */ > + > +void > +complex_operations_pattern::build (vec_info * /* vinfo */) > +{ > + gcc_unreachable (); > +} > + > /******************************************************************************* > * Pattern matching definitions > ******************************************************************************/ > @@ -1440,7 +1517,7 @@ vect_pattern_decl_t slp_patterns[] > order patterns from the largest to the smallest. Especially if they > overlap in what they can detect. */ > > - SLP_PATTERN (complex_add_pattern), > + SLP_PATTERN (complex_operations_pattern), > }; > #undef SLP_PATTERN > > > > -- Richard Biener SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)