Skip to content

[RISCV] Wrong register allocation for vmerge.vvm #169905

@wangpc-pp

Description

@wangpc-pp

This was found when testing llvm-test-suite/SingleSource/UnitTests/matrix-types-spec.cpp.

See also: https://godbolt.org/z/753478EjG.

We generate an illegal vmerge.vvm v24, v24, v0, v0. This is illegal because we treat v0 as two kinds of vectors: 1. M8/SEW64 vector. 2. Mask vector(SEW=1, M1). See also #80099.

transposeSpec(long*, long*):
        addi    a2, a1, 32
        vl2re64.v       v16, (a1)
        addi    a1, a1, 64
        vl2re64.v       v10, (a2)
        vl2re64.v       v8, (a1)
        vsetivli        zero, 2, e64, m1, ta, ma
        vmv1r.v v27, v17
        vslideup.vi     v27, v11, 1
        vmv1r.v v1, v8
        vmv1r.v v24, v16
        vmv1r.v v2, v8
        vslideup.vi     v24, v10, 1
        lui     a1, 1
        vmv1r.v v4, v9
        vmv1r.v v25, v16
        vrgather.vi     v26, v10, 1
        addi    a1, a1, -1756
        vmv1r.v v5, v9
        vmv1r.v v28, v17
        vmv.s.x v0, a1
        vrgather.vi     v29, v11, 1
        vsetivli        zero, 16, e64, m8, ta, ma
        vmerge.vvm      v24, v24, v0, v0
        vsetivli        zero, 2, e64, m1, ta, mu
        vmv.v.i v0, 1
        vslidedown.vi   v10, v16, 1, v0.t
        vslideup.vi     v17, v11, 1
        vrgather.vi     v11, v8, 1
        vmv.v.v v8, v17
        addi    a1, a0, 48
        vsetivli        zero, 3, e64, m2, ta, ma
        vse64.v v8, (a1)
        vsetivli        zero, 2, e64, m1, ta, ma
        vslidedown.vi   v8, v28, 1
        vsetivli        zero, 3, e64, m2, ta, ma
        vse64.v v24, (a0)
        vsetivli        zero, 2, e64, m1, ta, ma
        vslideup.vi     v8, v29, 1
        vrgather.vi     v9, v29, 1
        addi    a1, a0, 24
        vsetivli        zero, 3, e64, m2, ta, ma
        vse64.v v10, (a1)
        addi    a0, a0, 72
        vse64.v v8, (a0)
        ret

Metadata

Metadata

Assignees

Type

Projects

Status

Needs Fix

Relationships

None yet

Development

No branches or pull requests

Issue actions