Skip to content

Commit c082144

Browse files
committed
Add tests for cases where we could fold a vmerge into its ops, but don't due to
it having an implicit merge operand.
1 parent b579aac commit c082144

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-vops.ll

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1144,3 +1144,48 @@ define <vscale x 2 x double> @vpmerge_vfwsub.w_tied(<vscale x 2 x double> %passt
11441144
%b = call <vscale x 2 x double> @llvm.vp.merge.nxv2f64(<vscale x 2 x i1> %mask, <vscale x 2 x double> %a, <vscale x 2 x double> %passthru, i32 %vl)
11451145
ret <vscale x 2 x double> %b
11461146
}
1147+
1148+
; FIXME: We don't currently handle vmerge with an implicit passthru if the true
1149+
; operand also has a tied dest. This could be folded into a masked vmacc with ta
1150+
; policy.
1151+
define <vscale x 2 x i32> @true_tied_dest_vmerge_implicit_passthru(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m, i64 %avl) {
1152+
; CHECK-LABEL: true_tied_dest_vmerge_implicit_passthru:
1153+
; CHECK: # %bb.0:
1154+
; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma
1155+
; CHECK-NEXT: vmv1r.v v11, v8
1156+
; CHECK-NEXT: vmacc.vv v11, v9, v10
1157+
; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma
1158+
; CHECK-NEXT: vmerge.vvm v8, v8, v11, v0
1159+
; CHECK-NEXT: ret
1160+
%a = call <vscale x 2 x i32> @llvm.riscv.vmacc.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, i64 %avl, i64 0)
1161+
%b = call <vscale x 2 x i32> @llvm.riscv.vmerge.nxv2i32.nxv2i32(
1162+
<vscale x 2 x i32> poison,
1163+
<vscale x 2 x i32> %passthru,
1164+
<vscale x 2 x i32> %a,
1165+
<vscale x 2 x i1> %m,
1166+
i64 %avl
1167+
)
1168+
ret <vscale x 2 x i32> %b
1169+
}
1170+
1171+
; FIXME: We don't currently handle vmerge with an implicit passthru if the true
1172+
; operand also has a tied dest, e.g. has a passthru since it's a masked
1173+
; pseudo. This could be folded into a masked vadd with ta policy.
1174+
define <vscale x 2 x i32> @true_mask_vmerge_implicit_passthru(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m, i64 %avl) {
1175+
; CHECK-LABEL: true_mask_vmerge_implicit_passthru:
1176+
; CHECK: # %bb.0:
1177+
; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu
1178+
; CHECK-NEXT: vmv1r.v v11, v8
1179+
; CHECK-NEXT: vadd.vv v11, v9, v10, v0.t
1180+
; CHECK-NEXT: vmv.v.v v8, v11
1181+
; CHECK-NEXT: ret
1182+
%a = call <vscale x 2 x i32> @llvm.riscv.vadd.mask.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m, i64 %avl, i64 0)
1183+
%b = call <vscale x 2 x i32> @llvm.riscv.vmerge.nxv2i32.nxv2i32(
1184+
<vscale x 2 x i32> poison,
1185+
<vscale x 2 x i32> %passthru,
1186+
<vscale x 2 x i32> %a,
1187+
<vscale x 2 x i1> shufflevector(<vscale x 2 x i1> insertelement(<vscale x 2 x i1> poison, i1 true, i32 0), <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer),
1188+
i64 %avl
1189+
)
1190+
ret <vscale x 2 x i32> %b
1191+
}

0 commit comments

Comments
 (0)