From patchwork Wed Aug 5 12:47:35 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Biener X-Patchwork-Id: 140654 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id F37414BA23FB for ; Wed, 5 Aug 2026 12:48:24 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F37414BA23FB Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=m+0i+HH+; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=szKtraa7; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=Y5gFhNkj; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=yAwiI0b4 X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) by sourceware.org (Postfix) with ESMTPS id 1AE7F4BA2E0A for ; Wed, 5 Aug 2026 12:47:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1AE7F4BA2E0A Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 1AE7F4BA2E0A Authentication-Results: sourceware.org; arc=none smtp.remote-ip=195.135.223.131 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785934065; cv=none; b=S2daxG2Yk+iZj0N4m6ikalxZuFNKSOC3L8w7zjftYmxjAGeOCSD1LBRWm+mfLS6nA3+Pz1nTXzPS7rm/Ew41GOerd3R5rGEvwpBkmzD+TPVTqrgOP887I1DfKfVE8nVHLecc5ysxhQ1Iqz6+DPETPtHwx2dzrrNt9n0VyajscM8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785934065; c=relaxed/simple; bh=00e+lbTsAU8wr9RmYQ4sDVFtOOKTpCSJjZvum0XkcGA=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:Date: From:To:Subject:Message-ID:MIME-Version; b=gzsb1l67j/aE7Pgu/ywoZy8KID8pZLMaICzSeALXGbcsTASWY0TTdhJNiX0Ue7uo1mintQSdYZ3IEHn5xLYn+6EIDaLgukHkgQmPapwxN5sMD6t+07eIewqMmfdc8fpluQAw+bYGwDPF8qj9yTnufUc4zC8Y3TwQLv3A2BADs80= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=m+0i+HH+; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=szKtraa7; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=Y5gFhNkj; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=yAwiI0b4 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1AE7F4BA2E0A Received: from murzim.nue2.suse.org (unknown [10.168.4.243]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id CDA083E3C for ; Wed, 5 Aug 2026 12:47:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1785934060; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type; bh=sZg8XT7ETEjci51JXKlwIdbONPbHr/k6ljlwFaBmNFg=; b=m+0i+HH+ysCVJD4Vu7qF6aakzO+9mTpW8Xe50uY5IUCOBVQexOP0o+ymrfRMJBNClRVNrn jPA4rEPnCUPc5SpMK2jiGXitcUwxVkUfW2YoqPjbTX0i0xRXTEnq1xul3YEw9C1Ej64mOC AIi15lPIakIaccKGmrWbg+HoC14vbb0= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1785934060; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type; bh=sZg8XT7ETEjci51JXKlwIdbONPbHr/k6ljlwFaBmNFg=; b=szKtraa7dFr/lx1WvJf4f1/Mc8kg/GKuUsh5TUhnO/zzt7ZDk9fM3uZ7vYn3GWyHuO6HWM ivU/P7eXfcxXkoCA== Authentication-Results: smtp-out2.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1785934055; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type; bh=sZg8XT7ETEjci51JXKlwIdbONPbHr/k6ljlwFaBmNFg=; b=Y5gFhNkj+xdrot2HrVOMyiiE83P6tzwm2rSMv/DNP4BSWY7FGqG4GbkAjQQoJEZXOxSetP GxtAjH3vIze5DCqEtItDGJrJ23ldGvGpNAp9ffe2d8Muc0MRnah6IlFhJgXvBYKwla3hvm dVPB+QaaxE8DEgkrscLkrNdiZK7HkzY= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1785934055; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type; bh=sZg8XT7ETEjci51JXKlwIdbONPbHr/k6ljlwFaBmNFg=; b=yAwiI0b4lu0rqPg7c9TiejEfxj6uZy/DoquLyDb7WdvQfq3ZQ4QjTw4sc/sunyYEQ1MGuM NxQGZCaEotnizUCA== Date: Wed, 5 Aug 2026 14:47:35 +0200 (CEST) From: Richard Biener To: gcc-patches@gcc.gnu.org Subject: [PATCH] Simplify vect_get_vec_defs API Message-ID: <0s4q9323-08qo-236n-onq8-r4319846o744@fhfr.qr> MIME-Version: 1.0 X-Spamd-Result: default: False [-4.30 / 50.00]; BAYES_HAM(-3.00)[100.00%]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-0.20)[-0.997]; MIME_GOOD(-0.10)[text/plain]; ARC_NA(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; MISSING_XM_UA(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_COUNT_ZERO(0.00)[0]; FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; FROM_EQ_ENVFROM(0.00)[]; TO_DN_NONE(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[murzim.nue2.suse.org:helo, tree-vect-stmts.cc:url, fhfr.qr:mid, tree-vect-loop.cc:url] X-Spam-Score: -4.30 X-Spam-Level: X-Spam-Status: No, score=-11.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org The folowing simplifies vect_get_vec_defs to take a bool instead of a tree argument to indicate whether to fill the vector definitions vector for an operand. This is a tiny step to avoid accessing scalar operands determined by vect_is_simple_use. It also cleans up code a bit. Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed. * tree-vectorizer.h (vect_get_vec_defs): Adjust to take bool instead of tree arguments. * tree-vect-stmts.cc (vect_get_vec_defs): Likewise. (vectorizable_bswap): Simplify. (vectorizable_conversion): Likewise. (vectorizable_assignment): Likewise. (vectorizable_shift): Likewise. (vectorizable_operation): Likewise. (vectorizable_condition): Likewise. (vectorizable_comparison_1): Likewise. * tree-vect-loop.cc (vect_transform_lc_phi): Likewise. --- gcc/tree-vect-loop.cc | 3 +-- gcc/tree-vect-stmts.cc | 52 ++++++++++++++++-------------------------- gcc/tree-vectorizer.h | 8 +++---- 3 files changed, 25 insertions(+), 38 deletions(-) diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index a336df81bc7..a1e60a31ecb 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -8557,8 +8557,7 @@ vect_transform_lc_phi (loop_vec_info loop_vinfo, edge e = single_pred_edge (bb); tree vec_dest = vect_create_destination_var (scalar_dest, vectype); auto_vec vec_oprnds; - vect_get_vec_defs (loop_vinfo, slp_node, - gimple_phi_arg_def (stmt_info->stmt, 0), &vec_oprnds); + vect_get_vec_defs (loop_vinfo, slp_node, true, &vec_oprnds); for (unsigned i = 0; i < vec_oprnds.length (); i++) { /* Create the vectorized LC PHI node. */ diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index 372995a91d1..0627dfaefac 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -1243,10 +1243,10 @@ vect_init_vector (vec_info *vinfo, stmt_vec_info stmt_info, tree val, tree type, void vect_get_vec_defs (vec_info *, slp_tree slp_node, - tree op0, vec *vec_oprnds0, - tree op1, vec *vec_oprnds1, - tree op2, vec *vec_oprnds2, - tree op3, vec *vec_oprnds3) + bool op0, vec *vec_oprnds0, + bool op1, vec *vec_oprnds1, + bool op2, vec *vec_oprnds2, + bool op3, vec *vec_oprnds3) { if (op0) vect_get_slp_defs (SLP_TREE_CHILDREN (slp_node)[0], vec_oprnds0); @@ -3288,11 +3288,7 @@ vectorizable_bswap (vec_info *vinfo, slp_tree *slp_op, tree vectype_in, stmt_vector_for_cost *cost_vec) { - tree op, vectype; - gcall *stmt = as_a (stmt_info->stmt); - - op = gimple_call_arg (stmt, 0); - vectype = SLP_TREE_VECTYPE (slp_node); + tree vectype = SLP_TREE_VECTYPE (slp_node); poly_uint64 nunits = TYPE_VECTOR_SUBPARTS (vectype); if (TYPE_SIZE (vectype_in) != TYPE_SIZE (vectype)) @@ -3348,7 +3344,7 @@ vectorizable_bswap (vec_info *vinfo, /* Transform. */ vec vec_oprnds = vNULL; - vect_get_vec_defs (vinfo, slp_node, op, &vec_oprnds); + vect_get_vec_defs (vinfo, slp_node, true, &vec_oprnds); /* Arguments are ready. create the new vector stmt. */ unsigned i; tree vop; @@ -5775,7 +5771,7 @@ vectorizable_conversion (vec_info *vinfo, switch (modifier) { case NONE: - vect_get_vec_defs (vinfo, slp_node, op0, &vec_oprnds0); + vect_get_vec_defs (vinfo, slp_node, true, &vec_oprnds0); /* vec_dest is intermediate type operand when multi_step_cvt. */ if (multi_step_cvt) { @@ -5810,9 +5806,8 @@ vectorizable_conversion (vec_info *vinfo, of elements that we can fit in a vectype (nunits), we have to generate more than one vector stmt - i.e - we need to "unroll" the vector stmt by a factor VF/nunits. */ - vect_get_vec_defs (vinfo, slp_node, op0, &vec_oprnds0, - code == WIDEN_LSHIFT_EXPR ? NULL_TREE : op1, - &vec_oprnds1); + vect_get_vec_defs (vinfo, slp_node, true, &vec_oprnds0, + code != WIDEN_LSHIFT_EXPR && slp_op1, &vec_oprnds1); if (code == WIDEN_LSHIFT_EXPR) { int oprnds_size = vec_oprnds0.length (); @@ -5863,7 +5858,7 @@ vectorizable_conversion (vec_info *vinfo, of elements that we can fit in a vectype (nunits), we have to generate more than one vector stmt - i.e - we need to "unroll" the vector stmt by a factor VF/nunits. */ - vect_get_vec_defs (vinfo, slp_node, op0, &vec_oprnds0); + vect_get_vec_defs (vinfo, slp_node, true, &vec_oprnds0); /* Arguments are ready. Create the new vector stmts. */ if (cvt_type && modifier == NARROW_DST) FOR_EACH_VEC_ELT (vec_oprnds0, i, vop0) @@ -6068,7 +6063,7 @@ vectorizable_assignment (vec_info *vinfo, vec_dest = vect_create_destination_var (scalar_dest, vectype); /* Handle use. */ - vect_get_vec_defs (vinfo, slp_node, op, &vec_oprnds); + vect_get_vec_defs (vinfo, slp_node, true, &vec_oprnds); /* Arguments are ready. create the new vector stmt. */ FOR_EACH_VEC_ELT (vec_oprnds, i, vop) @@ -6472,8 +6467,7 @@ vectorizable_shift (vec_info *vinfo, (a special case for certain kind of vector shifts); otherwise, operand 1 should be of a vector type (the usual case). */ vect_get_vec_defs (vinfo, slp_node, - op0, &vec_oprnds0, - vec_oprnd1 ? NULL_TREE : op1, &vec_oprnds1); + true, &vec_oprnds0, !vec_oprnd1, &vec_oprnds1); /* Arguments are ready. Create the new vector stmt. */ FOR_EACH_VEC_ELT (vec_oprnds0, i, vop0) @@ -6900,8 +6894,8 @@ vectorizable_operation (vec_info *vinfo, else vec_dest = vect_create_destination_var (scalar_dest, vectype_out); - vect_get_vec_defs (vinfo, slp_node, - op0, &vec_oprnds0, op1, &vec_oprnds1, op2, &vec_oprnds2); + vect_get_vec_defs (vinfo, slp_node, true, &vec_oprnds0, + slp_op1, &vec_oprnds1, slp_op2, &vec_oprnds2); /* Arguments are ready. Create the new vector stmt. */ FOR_EACH_VEC_ELT (vec_oprnds0, i, vop0) { @@ -12448,18 +12442,12 @@ vectorizable_condition (vec_info *vinfo, /* Handle cond expr. */ if (masked) - vect_get_vec_defs (vinfo, slp_node, - cond_expr, &vec_oprnds0, - then_clause, &vec_oprnds2, - reduction_type != EXTRACT_LAST_REDUCTION - ? else_clause : NULL, &vec_oprnds3); + vect_get_vec_defs (vinfo, slp_node, true, &vec_oprnds0, true, &vec_oprnds2, + reduction_type != EXTRACT_LAST_REDUCTION, &vec_oprnds3); else - vect_get_vec_defs (vinfo, slp_node, - cond_expr0, &vec_oprnds0, - cond_expr1, &vec_oprnds1, - then_clause, &vec_oprnds2, - reduction_type != EXTRACT_LAST_REDUCTION - ? else_clause : NULL, &vec_oprnds3); + vect_get_vec_defs (vinfo, slp_node, true, &vec_oprnds0, true, &vec_oprnds1, + true, &vec_oprnds2, + reduction_type != EXTRACT_LAST_REDUCTION, &vec_oprnds3); if (reduction_type == EXTRACT_LAST_REDUCTION) vec_else_clause = else_clause; @@ -12813,7 +12801,7 @@ vectorizable_comparison_1 (vec_info *vinfo, tree vectype, if (lhs) mask = vect_create_destination_var (lhs, mask_type); - vect_get_vec_defs (vinfo, slp_node, rhs1, &vec_oprnds0, rhs2, &vec_oprnds1); + vect_get_vec_defs (vinfo, slp_node, true, &vec_oprnds0, true, &vec_oprnds1); if (swap_p) std::swap (vec_oprnds0, vec_oprnds1); diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index 62e3e629c48..fd43eaae668 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -2593,10 +2593,10 @@ extern void vect_finish_stmt_generation (vec_info *, stmt_vec_info, gimple *, extern opt_result vect_mark_stmts_to_be_vectorized (loop_vec_info, bool *); extern tree vect_get_store_rhs (stmt_vec_info); void vect_get_vec_defs (vec_info *, slp_tree, - tree, vec *, - tree = NULL, vec * = NULL, - tree = NULL, vec * = NULL, - tree = NULL, vec * = NULL); + bool, vec *, + bool = false, vec * = NULL, + bool = false, vec * = NULL, + bool = false, vec * = NULL); extern tree vect_init_vector (vec_info *, stmt_vec_info, tree, tree, gimple_stmt_iterator *); extern tree vect_get_slp_vect_def (slp_tree, unsigned);