From patchwork Thu Jul 20 08:06:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "juzhe.zhong@rivai.ai" X-Patchwork-Id: 123066 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:c923:0:b0:3e4:2afc:c1 with SMTP id j3csp2959593vqt; Thu, 20 Jul 2023 01:07:40 -0700 (PDT) X-Google-Smtp-Source: APBJJlHs+9jsPVq1+5vWhdXBSaBPpNzaN5D3YGNVQZxhywxdwoiUBMCrzBg/x3LiRKyLL3KBHcbY X-Received: by 2002:a17:907:25c5:b0:99b:485a:8999 with SMTP id ae5-20020a17090725c500b0099b485a8999mr2095129ejc.16.1689840459816; Thu, 20 Jul 2023 01:07:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689840459; cv=none; d=google.com; s=arc-20160816; b=deoaJw5dgKDYxqGED9uaW73Wx3xGJObX+noxZWAIEx2urZMWwx/Xj9JETZHx+IBG0t wXwxSOXnQAsnazudQFBwN9WcY9O82Ae73MqjiuroCxV2lvLRuwWFQnPuWWFIhlkukhAv N4TWhHcyeQr29ywxgFDCYR6Brj9O6Y8Kg1oWwoAhsph+cCBe+CySNrHlWY++gB0ny/ti DorVjsi5YSpE+nVBP+K5fcrDO/LEt39vh0HjeJWGRuKsqWcWKYVcC5YId4ZVmxBeoCvD pKnvgpCs85mvErkvcQoVq19ASoQZU0IYkPOdnfwfuVuJjEvAu7YZLbJ+WdF8tbwSlthf iNzw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:feedback-id :content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:dmarc-filter:delivered-to; bh=hUzWFzj/nT8R1NRAwo+WzmRoY/51deLGNgfmEXgkBo4=; fh=CHbn33ss3MXGFqXGZpS89+qfBQv2oFkoJCJQmHw6RIo=; b=G7jlMxLXzhsG5vfBx5C+CiLghwLlwCvDeZmIv2Z8loF6Y4cMc1mxQwL+1uy1NanUmq ErCVhDazBwUonrNtndOmizPaSb16vzoWNbR/k2CNO3po5lnOaZO/TRDxGvm8k2eHTGGY 8dNpIjIg+WdVr84tqfszl2I6M+XJ+slSLcfcIQh+DenT0H+bqCSAuDRbkfrCLYjtJQO2 chJoFqcrzs5+vnH9aB54hLFWydmi+l/AJ45dfnrpp8HP//g9lIa1e7FAVUSB/CGEXoQo DQxXjLBTirUWJ+DhUqDgREA2kUD+FZMbH9SaEd6j3UsDDICybcBUSyysxK3HYGqnkGZt FlZw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org" Received: from server2.sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id f20-20020a170906c09400b00991df467babsi362328ejz.221.2023.07.20.01.07.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jul 2023 01:07:39 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9A3B6385483E for ; Thu, 20 Jul 2023 08:07:06 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtpbgjp3.qq.com (smtpbgjp3.qq.com [54.92.39.34]) by sourceware.org (Postfix) with ESMTPS id 99204385703C for ; Thu, 20 Jul 2023 08:06:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 99204385703C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=rivai.ai Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=rivai.ai X-QQ-mid: bizesmtp70t1689840391twwckob9 Received: from rios-cad5.localdomain ( [58.60.1.11]) by bizesmtp.qq.com (ESMTP) with id ; Thu, 20 Jul 2023 16:06:30 +0800 (CST) X-QQ-SSF: 01400000000000G0U000000A0000000 X-QQ-FEAT: dKvkn8qoLrGELk9ib8iJ4v58oPYqEjWfsYiLfe57utteEyeo5W8/xwQoqUeos tyYtv6aXhrt+CjPJmWJ28JAvZmGRWYnPJfueklnDTvdM/L5E/bwdoPttnBmTzEwabq8YX8e NekPR3Qu9JRzqYqxt6te8okQL3xSxvaqLP32BpNkZ70FcN/HcB/RsYgj/iy/G/+J9gLMF1I /A4ef2fP8/gN0XwzMWnEeSD8ABOLkVyVTdggUGem6/xXloYVTu0rfIysSNJyTQvtQ/URizN Stq7P2ZAFuDQRMpCvFm4QTFrqm/dIH/hjQ/Eb8LtcCU4N5a/nrnOYhcEBYhDmFndlgEUXs5 XUYyRGkIuvZ4YvkbU9PbQU1Ucx6+br6qgf7hHqHNETwDmv55EWe8gts1C2FLhqvC5Hw667z RmU2dpmz6ZM= X-QQ-GoodBg: 2 X-BIZMAIL-ID: 9414783224039918084 From: juzhe.zhong@rivai.ai To: gcc-patches@gcc.gnu.org Cc: richard.sandiford@arm.com, rguenther@suse.de, Ju-Zhe Zhong Subject: [PATCH] CODE STRUCTURE: Refine codes in Vectorizer Date: Thu, 20 Jul 2023 16:06:29 +0800 Message-Id: <20230720080629.1060969-1-juzhe.zhong@rivai.ai> X-Mailer: git-send-email 2.36.3 MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:rivai.ai:qybglogicsvrgz:qybglogicsvrgz7a-one-0 X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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: , Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771926150126744488 X-GMAIL-MSGID: 1771926150126744488 From: Ju-Zhe Zhong Hi, Richard and Richi. I plan to refine the codes that I recently support for RVV auto-vectorization. This patch is inspired last review comments from Richard: https://patchwork.sourceware.org/project/gcc/patch/20230712042124.111818-1-juzhe.zhong@rivai.ai/ Richard said he prefer the the code structure as follows: Please instead switch the if condition so that the structure is: if (...) vect_record_loop_mask (...) else if (...) vect_record_loop_len (...) else can't use partial vectors This is his last comments. So, I come back to refine this piece of codes. Does it look reasonable ? This next refine patch is change all names of "LEN_MASK" into "MASK_LEN" but should come after this patch. gcc/ChangeLog: * tree-vect-stmts.cc (check_load_store_for_partial_vectors): Refine code structure. --- gcc/tree-vect-stmts.cc | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index cb86d544313..b86e159ae4c 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -1605,6 +1605,7 @@ check_load_store_for_partial_vectors (loop_vec_info loop_vinfo, tree vectype, nvectors = vect_get_num_copies (loop_vinfo, vectype); vec_loop_masks *masks = &LOOP_VINFO_MASKS (loop_vinfo); + vec_loop_lens *lens = &LOOP_VINFO_LENS (loop_vinfo); machine_mode vecmode = TYPE_MODE (vectype); bool is_load = (vls_type == VLS_LOAD); if (memory_access_type == VMAT_LOAD_STORE_LANES) @@ -1631,33 +1632,29 @@ check_load_store_for_partial_vectors (loop_vec_info loop_vinfo, tree vectype, internal_fn ifn = (is_load ? IFN_MASK_GATHER_LOAD : IFN_MASK_SCATTER_STORE); - if (!internal_gather_scatter_fn_supported_p (ifn, vectype, - gs_info->memory_type, - gs_info->offset_vectype, - gs_info->scale)) - { - ifn = (is_load - ? IFN_LEN_MASK_GATHER_LOAD - : IFN_LEN_MASK_SCATTER_STORE); - if (internal_gather_scatter_fn_supported_p (ifn, vectype, - gs_info->memory_type, - gs_info->offset_vectype, - gs_info->scale)) - { - vec_loop_lens *lens = &LOOP_VINFO_LENS (loop_vinfo); - vect_record_loop_len (loop_vinfo, lens, nvectors, vectype, 1); - return; - } + internal_fn len_ifn = (is_load + ? IFN_LEN_MASK_GATHER_LOAD + : IFN_LEN_MASK_SCATTER_STORE); + if (internal_gather_scatter_fn_supported_p (ifn, vectype, + gs_info->memory_type, + gs_info->offset_vectype, + gs_info->scale)) + vect_record_loop_mask (loop_vinfo, masks, nvectors, vectype, + scalar_mask); + else if (internal_gather_scatter_fn_supported_p (len_ifn, vectype, + gs_info->memory_type, + gs_info->offset_vectype, + gs_info->scale)) + vect_record_loop_len (loop_vinfo, lens, nvectors, vectype, 1); + else + { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, "can't operate on partial vectors because" " the target doesn't have an appropriate" " gather load or scatter store instruction.\n"); LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo) = false; - return; } - vect_record_loop_mask (loop_vinfo, masks, nvectors, vectype, - scalar_mask); return; } @@ -1703,7 +1700,6 @@ check_load_store_for_partial_vectors (loop_vec_info loop_vinfo, tree vectype, if (get_len_load_store_mode (vecmode, is_load).exists (&vmode)) { nvectors = group_memory_nvectors (group_size * vf, nunits); - vec_loop_lens *lens = &LOOP_VINFO_LENS (loop_vinfo); unsigned factor = (vecmode == vmode) ? 1 : GET_MODE_UNIT_SIZE (vecmode); vect_record_loop_len (loop_vinfo, lens, nvectors, vectype, factor); using_partial_vectors_p = true;