Skip to content

[Bug] PTODSL-vmi,vcvt SiToFp:源必须用 si*(文档未明确);sitofp 只接受 32-bit 源 #1396

Description

@chenben09

Component

PTO Dialect / ODS (include/PTO/IR)

Description

A5/VPTO 测试 pto.vmi.vcvt 的 SiToFp(signed-int → fp)场景发现两个问题:
问题①:SiToFp 源必须用 si*,文档只列 i* 未明确
06-convert.md 列的 dtype 集合为 f32/f16/bf16/fp8_e4m3/fp8_e5m2、i32/i16/i8、ui32/ui16/ui8。但 pto.vmi.vcvt 在 int→fp 方向 lower 成 pto.vmi.sitofp 后,该 op 的 verifier 要求源是显式有符号的 si*,不接受 signless i*。
问题②:pto.vmi.sitofp 只接受 32-bit 源
pto.vmi.sitofp 的 verifier 要求源恰好 32-bit(si8/si16 被拒,报 "requires 32-bit integer source element type"),且要求结果恰好 f32(f16/bf16/f8e4m3/f8e5m2 被拒)。即 sitofp 只支持 si32 → f32。

Reproduction (minimal)

关键kernel函数:

@jit_kernel(name, params)
def kernel(src_ptr: pto.ptr(src_ptype, "gm"), out_ptr: pto.ptr(dst_ptype, "gm")):
    src_ub = pto.castptr(pto.i64(0), pto.ptr(src_ptype, "ub"))
    out_ub = pto.castptr(pto.i64(src_nbytes), pto.ptr(dst_ptype, "ub"))
    pto.mte_gm_ub(src_ptr, src_ub, 0, src_nbytes, nburst=(1, 0, 0))
    pto.set_flag("MTE2", "V", event_id=0); pto.wait_flag("MTE2", "V", event_id=0)
    source = pto.vmi.vload(src_ub, pto.const(0, dtype=pto.index), size=vl)
    result = pto.vmi.vcvt(source, to_dtype)
    pto.vmi.vstore(result, out_ub, pto.const(0, dtype=pto.index))
    pto.set_flag("V", "MTE3", event_id=0); pto.wait_flag("V", "MTE3", event_id=0)
    pto.mte_ub_gm(out_ub, out_ptr, dst_nbytes, nburst=(1, 0, 0))

Expected behavior

文档明确 SiToFp 源必须用 si*。
明确 vcvt的sitofp 是否支持非 32-bit 源(si8/si16)

Actual behavior / error logs

问题①(源用 i*):
error: 'pto.vmi.vcvt' op int-to-fp conversion requires explicitly signed integer source element type
 note: see current operation: %11 = "pto.vmi.vcvt"(%10) : (!pto.vmi.vreg<8xi32>) -> !pto.vmi.vreg<8xf32>
问题②(源用 si8/si16):
RuntimeError: command failed (1): ptoas --pto-arch=a5 ... kernel.mlir -o kernel.o
loc("kernel.mlir":18:12): error: 'pto.vmi.sitofp' op requires 32-bit integer source element type
Error: VPTO emission pipeline failed.

部分失败用例:
si8_f16_vl8_u_a8_n_r2in(src=si8, dst=f16, vl=8, src_range=-127,128)
si8_f32_vl8_u_a8_n_r2in(src=si8, dst=f32, vl=8, src_range=-127,128)
si16_f16_vl8_u_a8_n_r2in(src=si16, dst=f16, vl=8, src_range=-2048,2049)
si16_f32_vl8_u_a8_n_r2in(src=si16, dst=f32, vl=8, src_range=-32767,32768)
si16_bf16_vl8_u_a8_n_r2in(src=si16, dst=bf16, vl=8, src_range=-256,257)

Git commit

10883a8

Host platform

Linux (aarch64)

Target Ascend arch (if relevant)

a5

PTOAS build level (if relevant)

None

Activity

  1. changed the title [-][Bug][/-] [+][Bug] PTODSL-vmi,vcvt SiToFp:源必须用 si*(文档未明确);sitofp 只接受 32-bit 源[/+] on Aug 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingvmi

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions