@@ -722,3 +722,35 @@ define i64 @avl_undef2() {
722722 %1 = tail call i64 @llvm.riscv.vsetvli (i64 poison, i64 2 , i64 7 )
723723 ret i64 %1
724724}
725+
726+ define i64 @vsetvli_vleff () {
727+ ; CHECK-LABEL: vsetvli_vleff:
728+ ; CHECK: # %bb.0: # %entry
729+ ; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma
730+ ; CHECK-NEXT: vmv.v.i v8, 0
731+ ; CHECK-NEXT: .LBB37_1: # %while.body
732+ ; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
733+ ; CHECK-NEXT: vsetivli zero, 0, e16, m1, tu, ma
734+ ; CHECK-NEXT: vmv1r.v v9, v8
735+ ; CHECK-NEXT: vle16ff.v v9, (zero)
736+ ; CHECK-NEXT: csrr a0, vl
737+ ; CHECK-NEXT: beqz a0, .LBB37_1
738+ ; CHECK-NEXT: # %bb.2: # %while.end
739+ ; CHECK-NEXT: li a0, 0
740+ ; CHECK-NEXT: ret
741+ entry:
742+ br label %while.cond
743+
744+ while.cond:
745+ %new_vl.0 = phi i64 [ 0 , %entry ], [ %1 , %while.body ]
746+ %cmp = icmp eq i64 %new_vl.0 , 0
747+ br i1 %cmp , label %while.body , label %while.end
748+
749+ while.body:
750+ %0 = tail call { <vscale x 4 x i16 >, i64 } @llvm.riscv.vleff.nxv4i16.i64 (<vscale x 4 x i16 > zeroinitializer , ptr null , i64 0 )
751+ %1 = extractvalue { <vscale x 4 x i16 >, i64 } %0 , 1
752+ br label %while.cond
753+
754+ while.end:
755+ ret i64 0
756+ }
0 commit comments