Skip to content

Commit 8f4f34f

Browse files
committed
[RISCV] Add test for vmerge.vvm that could have splat sunk. NFC
1 parent f958a73 commit 8f4f34f

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

llvm/test/CodeGen/RISCV/rvv/sink-splat-operands.ll

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5423,3 +5423,41 @@ vector.body: ; preds = %vector.body, %entry
54235423
for.cond.cleanup: ; preds = %vector.body
54245424
ret void
54255425
}
5426+
5427+
define void @sink_splat_select(ptr nocapture %a, i32 signext %x) {
5428+
; CHECK-LABEL: sink_splat_select:
5429+
; CHECK: # %bb.0: # %entry
5430+
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
5431+
; CHECK-NEXT: vmv.v.x v8, a1
5432+
; CHECK-NEXT: lui a1, 1
5433+
; CHECK-NEXT: add a1, a0, a1
5434+
; CHECK-NEXT: li a2, 42
5435+
; CHECK-NEXT: .LBB117_1: # %vector.body
5436+
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
5437+
; CHECK-NEXT: vle32.v v9, (a0)
5438+
; CHECK-NEXT: vmseq.vx v0, v9, a2
5439+
; CHECK-NEXT: vmerge.vvm v9, v9, v8, v0
5440+
; CHECK-NEXT: vse32.v v9, (a0)
5441+
; CHECK-NEXT: addi a0, a0, 16
5442+
; CHECK-NEXT: bne a0, a1, .LBB117_1
5443+
; CHECK-NEXT: # %bb.2: # %for.cond.cleanup
5444+
; CHECK-NEXT: ret
5445+
entry:
5446+
%broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 0
5447+
%broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
5448+
br label %vector.body
5449+
5450+
vector.body: ; preds = %vector.body, %entry
5451+
%index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]
5452+
%0 = getelementptr inbounds i32, ptr %a, i64 %index
5453+
%load = load <4 x i32>, ptr %0, align 4
5454+
%cond = icmp eq <4 x i32> %load, splat (i32 42)
5455+
%1 = select <4 x i1> %cond, <4 x i32> %broadcast.splat, <4 x i32> %load
5456+
store <4 x i32> %1, ptr %0, align 4
5457+
%index.next = add nuw i64 %index, 4
5458+
%2 = icmp eq i64 %index.next, 1024
5459+
br i1 %2, label %for.cond.cleanup, label %vector.body
5460+
5461+
for.cond.cleanup: ; preds = %vector.body
5462+
ret void
5463+
}

0 commit comments

Comments
 (0)