Skip to content

fix(vmi): fix VMI vmula layout and masked lowering - #1475

Open
TelGome wants to merge 1 commit into
hw-native-sys:masterfrom
TelGome:issue_1374
Open

fix(vmi): fix VMI vmula layout and masked lowering#1475
TelGome wants to merge 1 commit into
hw-native-sys:masterfrom
TelGome:issue_1374

Conversation

@TelGome

@TelGome TelGome commented Sep 7, 2026

Copy link
Copy Markdown
Collaborator

摘要

修复 VMI vmula 的 layout 传播、mask lowering 和 masked 浮点语义问题。
本次修改让带 mask 的 vmula 保留在 VMI 到 VPTO 的转换流程中,确保各个
操作数使用兼容的 layout,并正确生成 packed contiguous predicate。

问题背景

vmi_vmula simulator 测试暴露出以下编译器问题:

  • 带 mask 的浮点 vmula 过早降级为 legacy FMA,导致 predicate 和
    pmode="zero" 语义丢失。
  • vmula 的操作数可能保留不兼容的 VMI layout,触发 verifier 错误和
    VMI 到 VPTO 转换阶段的 residual operation。
  • mask granularity 没有始终根据 VMI 数据元素宽度推导。
  • packed contiguous layout(包括 lane_stride=2)可能生成不完整的物理
    predicate,或者导致 create_mask 无法完成转换。

修改内容

  • 要求 VMIVmulaOpacclhsrhs 和 result 属于同一个 data
    layout 等价类,同时不改变全局 unite() 的原有行为。
  • 带 mask 的浮点 vmula 不再提前转换为无 mask 的 legacy FMA,而是保留到
    VMI 到 VPTO lowering 阶段处理。
  • 增加 VMIVmulaOp 的 VMI 到 VPTO 转换,包括物理分块数量、mask 数量校验,
    以及 unmasked 操作的全 true mask 生成。
  • 显式实现 pmode="zero":使用降低后的 predicate,在计算结果和零向量
    之间进行选择,从而清除 inactive lane。
  • 根据数据元素宽度选择 VPTO mask granularity,并支持 packed contiguous
    正 stride layout 的 mask materialization。

整数 vmula 仍然映射到原生 pto.vmula 路径。本次 PR 不修改 simulator
对整数 RV_VMULA 的支持问题。

验证结果

  • 使用 Ninja 成功重新构建 PTOASCompiler
  • vmi_vmula_bf16_vl256_g1_a0_z_prefix:PASS。
  • vmi_vmula_f32_vl256_g1_a128_z_prefix:PASS。
  • vmi_vmula_bf16_vl64_g1_a64_n_nomask:PASS。
  • i16_vl64i8_vl128 用例不再出现 VMI-RESIDUAL-OP 转换失败。
  • git diff --check:PASS。

剩余24 cases 的整数 simulator RV_VMULA/type.S8 失败属于独立的 simulator 能力问题
fix #1374

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] PTODSL-vmi,vmula 的 accumulator 操作数错误绑定为 rhs

1 participant