[PATCH] D129735: [WIP][RISCV] Add new pass to transform undef to pesudo for vector values.

Piyou Chen via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 25 04:47:52 PDT 2022


BeMg added a comment.

In D129735#3875529 <https://reviews.llvm.org/D129735#3875529>, @craig.topper wrote:

> I remember now. It only miscompiles with `-riscv-enable-subreg-liveness`
>
> That produces
>
>   foo:                                    # @foo
>           .cfi_startproc
>   # %bb.0:                                # %loopIR.preheader.i.i
>           vsetvli a0, zero, e16, mf4, ta, ma
>           vid.v   v8
>           vadd.vi v10, v8, 1
>           vadd.vi v12, v8, 3
>   .LBB0_1:                                # %loopIR3.i.i
>                                           # =>This Inner Loop Header: Depth=1
>           vl1r.v  v9, (zero)
>           vsetivli        zero, 4, e8, m1, ta, ma
>           vrgatherei16.vv v11, v9, v8
>           vrgatherei16.vv v13, v9, v10
>           vsetvli a0, zero, e8, m1, ta, ma
>           vand.vv v11, v11, v13
>           vsetivli        zero, 4, e8, m1, ta, ma
>           vrgatherei16.vv v13, v9, v12 <- this instruction violates the early clobber constraint
>           vsetvli a0, zero, e8, m1, ta, ma
>           vand.vv v9, v11, v13
>           vs1r.v  v9, (zero)
>           j       .LBB0_1
>   .Lfunc_end0:
>           .size   foo, .Lfunc_end0-foo
>           .cfi_endproc
>                                           # -- End function                        
>           .section        ".note.GNU-stack","", at progbits

Add one more condtion for subreg-liveness.

The assembly show as below:

          .p2align        2                               # -- Begin function foo
          .type   foo, at function
  foo:                                    # @foo
          .cfi_startproc
  # %bb.0:                                # %loopIR.preheader.i.i
          vsetvli a0, zero, e16, mf4, ta, ma
          vid.v   v14
          vadd.vi v15, v14, 1
          vadd.vi v16, v14, 3
          vmv1r.v v8, v14
          vmv1r.v v10, v15
          vmv1r.v v12, v16
  .LBB0_1:                                # %loopIR3.i.i
                                          # =>This Inner Loop Header: Depth=1
          vl1r.v  v14, (zero)
          vsetivli        zero, 4, e8, m1, ta, ma
          vrgatherei16.vv v15, v14, v8
          vrgatherei16.vv v16, v14, v10
          vsetvli a0, zero, e8, m1, ta, ma
          vand.vv v15, v15, v16
          vsetivli        zero, 4, e8, m1, ta, ma
          vrgatherei16.vv v16, v14, v12
          vsetvli a0, zero, e8, m1, ta, ma
          vand.vv v14, v15, v16
          vs1r.v  v14, (zero)
          j       .LBB0_1
  .Lfunc_end0:
          .size   foo, .Lfunc_end0-foo
          .cfi_endproc
                                          # -- End function
          .section        ".note.GNU-stack","", at progbits


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D129735/new/

https://reviews.llvm.org/D129735



More information about the llvm-commits mailing list