qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Richard Henderson <richard.henderson@linaro.org>
To: LIU Zhiwei <zhiwei_liu@linux.alibaba.com>, qemu-devel@nongnu.org
Cc: qemu-riscv@nongnu.org, palmer@dabbelt.com,
	alistair.francis@wdc.com, dbarboza@ventanamicro.com,
	liwei1518@gmail.com, bmeng.cn@gmail.com,
	TANG Tiancheng <tangtiancheng.ttc@alibaba-inc.com>
Subject: Re: [PATCH v3 04/14] tcg/riscv: Add riscv vset{i}vli support
Date: Mon, 9 Sep 2024 21:34:58 -0700	[thread overview]
Message-ID: <04500d38-0869-4e02-8281-d1f577fcb000@linaro.org> (raw)
In-Reply-To: <ca6c39e0-0b29-4dff-9e89-93db342ae9af@linux.alibaba.com>

On 9/9/24 19:46, LIU Zhiwei wrote:
>>     lmul = type - riscv_lg2_vlenb;
>>     if (lmul < -3) {
>>         /* Host VLEN >= 1024 bits. */
>>         vlmul = VLMUL_M1;
> I am not sure if we should use VLMUL_MF8,

Perhaps.  See below.

>>     } else if (lmul < 3) {
>>         /* 1/8 ... 1 ... 8 */
>>         vlmul = lmul & 7;
>>         lmul_eq_avl = true;
>>     } else {
>>         /* Guaranteed by Zve64x. */
>>         g_assert_not_reached();
>>     }
>>
>>     avl = tcg_type_size(type) >> vsew;
>>     vtype = encode_vtype(true, true, vsew, vlmul);
>>
>>     if (avl < 32) {
>>         insn = encode_i(OPC_VSETIVLI, TCG_REG_ZERO, avl, vtype);
> Which may benifit here? we usually use  lmul as smallest as we can for macro ops split.

lmul is unchanged, just explicitly setting AVL as well.
The "benefit" is that AVL is visible in the disassembly,
and that we are able to discard the result.

There doesn't appear to be a down side.  Is there one?

>>     } else if (lmul_eq_avl) {
>>         /* rd != 0 and rs1 == 0 uses vlmax */
>>         insn = encode_i(OPC_VSETVLI, TCG_REG_TMP0, TCG_REG_ZERO, vtype);

As opposed to here, where we must clobber a register.
It is a scratch reg, sure, and probably affects nothing
in any microarch which does register renaming.

>>     } else {
>>         tcg_out_opc_imm(s, OPC_ADDI, TCG_REG_TMP0, TCG_REG_ZERO, avl);
>>         insn = encode_i(OPC_VSETVLI, TCG_REG_ZERO, TCG_REG_TMP0, vtype);
> And perhaps here.

Here, lmul does *not* equal avl, and so we must set it, and because of non-use of VSETIVLI 
we also know that it does not fit in uimm5.

But here's a follow-up question regarding current micro-architectures:

   How much benefit is there from adjusting LMUL < 1, or AVL < VLMAX?

For instance, on other hosts with 128-bit vectors, we also promise support for 64-bit 
registers, just so we can support guests which have 64-bit vector operations.  In existing 
hosts (x86, ppc, s390x, loongarch) we accept that the host instruction will operate on all 
128-bits; we simply ignore half of any result.

Thus the question becomes: can we minimize the number of vset* instructions by bounding 
minimal lmul to 1 (or whatever) and always leaving avl as the full register?  If so, the 
only vset* changes are for SEW changes, or for load/store that are smaller than V*1REG64.


r~


  reply	other threads:[~2024-09-10  4:35 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-04 14:27 [PATCH v3 00/14] Add support for vector LIU Zhiwei
2024-09-04 14:27 ` [PATCH v3 01/14] tcg/op-gvec: Fix iteration step in 32-bit operation LIU Zhiwei
2024-09-04 14:27 ` [PATCH v3 02/14] util: Add RISC-V vector extension probe in cpuinfo LIU Zhiwei
2024-09-05  3:34   ` Richard Henderson
2024-09-09  7:18     ` LIU Zhiwei
2024-09-09 15:45       ` Richard Henderson
2024-09-10  2:47         ` LIU Zhiwei
2024-09-04 14:27 ` [PATCH v3 03/14] tcg/riscv: Add basic support for vector LIU Zhiwei
2024-09-05  4:05   ` Richard Henderson
2024-09-10  2:49     ` LIU Zhiwei
2024-09-04 14:27 ` [PATCH v3 04/14] tcg/riscv: Add riscv vset{i}vli support LIU Zhiwei
2024-09-05  6:03   ` Richard Henderson
2024-09-10  2:46     ` LIU Zhiwei
2024-09-10  4:34       ` Richard Henderson [this message]
2024-09-10  7:03         ` LIU Zhiwei
2024-09-04 14:27 ` [PATCH v3 05/14] tcg/riscv: Implement vector load/store LIU Zhiwei
2024-09-05  6:39   ` Richard Henderson
2024-09-10  3:04     ` LIU Zhiwei
2024-09-04 14:27 ` [PATCH v3 06/14] tcg/riscv: Implement vector mov/dup{m/i} LIU Zhiwei
2024-09-05  6:56   ` Richard Henderson
2024-09-10  1:13     ` LIU Zhiwei
2024-09-04 14:27 ` [PATCH v3 07/14] tcg/riscv: Add support for basic vector opcodes LIU Zhiwei
2024-09-05  6:57   ` Richard Henderson
2024-09-04 14:27 ` [PATCH v3 08/14] tcg/riscv: Implement vector cmp ops LIU Zhiwei
2024-09-05  7:12   ` Richard Henderson
2024-09-10  1:17     ` LIU Zhiwei
2024-09-04 14:27 ` [PATCH v3 09/14] tcg/riscv: Implement vector neg ops LIU Zhiwei
2024-09-04 14:27 ` [PATCH v3 10/14] tcg/riscv: Implement vector sat/mul ops LIU Zhiwei
2024-09-04 14:27 ` [PATCH v3 11/14] tcg/riscv: Implement vector min/max ops LIU Zhiwei
2024-09-04 14:27 ` [PATCH v3 12/14] tcg/riscv: Implement vector shs/v ops LIU Zhiwei
2024-09-04 14:27 ` [PATCH v3 13/14] tcg/riscv: Implement vector roti/v/x shi ops LIU Zhiwei
2024-09-04 14:27 ` [PATCH v3 14/14] tcg/riscv: Enable native vector support for TCG host LIU Zhiwei
2024-09-05 23:46 ` [PATCH v3 00/14] Add support for vector Alistair Francis
2024-09-10  3:08   ` LIU Zhiwei

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=04500d38-0869-4e02-8281-d1f577fcb000@linaro.org \
    --to=richard.henderson@linaro.org \
    --cc=alistair.francis@wdc.com \
    --cc=bmeng.cn@gmail.com \
    --cc=dbarboza@ventanamicro.com \
    --cc=liwei1518@gmail.com \
    --cc=palmer@dabbelt.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-riscv@nongnu.org \
    --cc=tangtiancheng.ttc@alibaba-inc.com \
    --cc=zhiwei_liu@linux.alibaba.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).