Skip to content

Commit 922fca5

Browse files
[RISCV][VLOPT] Pre-commit tests for adding more instruction to vlopt
Signed-off-by: Mikhail R. Gadelha <mikhail@igalia.com>
1 parent 00dd666 commit 922fca5

File tree

1 file changed

+252
-0
lines changed

1 file changed

+252
-0
lines changed

llvm/test/CodeGen/RISCV/rvv/vl-opt-instrs.ll

Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,6 +1022,111 @@ define <vscale x 4 x i1> @vmadc_vv(<vscale x 4 x i32> %a, <vscale x 4 x i1> %b,
10221022
ret <vscale x 4 x i1> %2
10231023
}
10241024

1025+
define <vscale x 4 x i1> @vmadc_vim(<vscale x 4 x i32> %a, <vscale x 4 x i1> %mask, <vscale x 4 x i1> %b, iXLen %vl) {
1026+
; NOVLOPT-LABEL: vmadc_vim:
1027+
; NOVLOPT: # %bb.0:
1028+
; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
1029+
; NOVLOPT-NEXT: vmadc.vim v11, v8, 5, v0
1030+
; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
1031+
; NOVLOPT-NEXT: vmand.mm v0, v11, v10
1032+
; NOVLOPT-NEXT: ret
1033+
;
1034+
; VLOPT-LABEL: vmadc_vim:
1035+
; VLOPT: # %bb.0:
1036+
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
1037+
; VLOPT-NEXT: vmadc.vim v11, v8, 5, v0
1038+
; VLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
1039+
; VLOPT-NEXT: vmand.mm v0, v11, v10
1040+
; VLOPT-NEXT: ret
1041+
%1 = call <vscale x 4 x i1> @llvm.riscv.vmadc.carry.in.nxv4i32.i32(<vscale x 4 x i32> %a, i32 5, <vscale x 4 x i1> %mask, iXLen -1)
1042+
%2 = call <vscale x 4 x i1> @llvm.riscv.vmand.nxv4i1(<vscale x 4 x i1> %1, <vscale x 4 x i1> %b, iXLen %vl)
1043+
ret <vscale x 4 x i1> %2
1044+
}
1045+
1046+
define <vscale x 4 x i1> @vmadc_vxm(<vscale x 4 x i32> %a, <vscale x 4 x i1> %mask, <vscale x 4 x i1> %b, i32 %c, iXLen %vl) {
1047+
; NOVLOPT-LABEL: vmadc_vxm:
1048+
; NOVLOPT: # %bb.0:
1049+
; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
1050+
; NOVLOPT-NEXT: vmadc.vxm v11, v8, a0, v0
1051+
; NOVLOPT-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
1052+
; NOVLOPT-NEXT: vmand.mm v0, v11, v10
1053+
; NOVLOPT-NEXT: ret
1054+
;
1055+
; VLOPT-LABEL: vmadc_vxm:
1056+
; VLOPT: # %bb.0:
1057+
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
1058+
; VLOPT-NEXT: vmadc.vxm v11, v8, a0, v0
1059+
; VLOPT-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
1060+
; VLOPT-NEXT: vmand.mm v0, v11, v10
1061+
; VLOPT-NEXT: ret
1062+
%1 = call <vscale x 4 x i1> @llvm.riscv.vmadc.carry.in.nxv4i32.i32(<vscale x 4 x i32> %a, i32 %c, <vscale x 4 x i1> %mask, iXLen -1)
1063+
%2 = call <vscale x 4 x i1> @llvm.riscv.vmand.nxv4i1(<vscale x 4 x i1> %1, <vscale x 4 x i1> %b, iXLen %vl)
1064+
ret <vscale x 4 x i1> %2
1065+
}
1066+
1067+
define <vscale x 4 x i1> @vmadc_vvm(<vscale x 4 x i32> %a, <vscale x 4 x i1> %mask, <vscale x 4 x i1> %b, <vscale x 4 x i32> %c, iXLen %vl) {
1068+
; NOVLOPT-LABEL: vmadc_vvm:
1069+
; NOVLOPT: # %bb.0:
1070+
; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
1071+
; NOVLOPT-NEXT: vmadc.vvm v11, v8, v12, v0
1072+
; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
1073+
; NOVLOPT-NEXT: vmand.mm v0, v11, v10
1074+
; NOVLOPT-NEXT: ret
1075+
;
1076+
; VLOPT-LABEL: vmadc_vvm:
1077+
; VLOPT: # %bb.0:
1078+
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
1079+
; VLOPT-NEXT: vmadc.vvm v11, v8, v12, v0
1080+
; VLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
1081+
; VLOPT-NEXT: vmand.mm v0, v11, v10
1082+
; VLOPT-NEXT: ret
1083+
%1 = call <vscale x 4 x i1> @llvm.riscv.vmadc.carry.in.nxv4i32.nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %c, <vscale x 4 x i1> %mask, iXLen -1)
1084+
%2 = call <vscale x 4 x i1> @llvm.riscv.vmand.nxv4i1(<vscale x 4 x i1> %1, <vscale x 4 x i1> %b, iXLen %vl)
1085+
ret <vscale x 4 x i1> %2
1086+
}
1087+
1088+
define <vscale x 4 x i1> @vmsbc_vvm(<vscale x 4 x i32> %a, <vscale x 4 x i1> %mask, <vscale x 4 x i1> %b, <vscale x 4 x i32> %c, iXLen %vl) {
1089+
; NOVLOPT-LABEL: vmsbc_vvm:
1090+
; NOVLOPT: # %bb.0:
1091+
; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
1092+
; NOVLOPT-NEXT: vmsbc.vvm v11, v8, v12, v0
1093+
; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
1094+
; NOVLOPT-NEXT: vmand.mm v0, v11, v10
1095+
; NOVLOPT-NEXT: ret
1096+
;
1097+
; VLOPT-LABEL: vmsbc_vvm:
1098+
; VLOPT: # %bb.0:
1099+
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
1100+
; VLOPT-NEXT: vmsbc.vvm v11, v8, v12, v0
1101+
; VLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
1102+
; VLOPT-NEXT: vmand.mm v0, v11, v10
1103+
; VLOPT-NEXT: ret
1104+
%1 = call <vscale x 4 x i1> @llvm.riscv.vmsbc.borrow.in.nxv4i32.nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %c, <vscale x 4 x i1> %mask, iXLen -1)
1105+
%2 = call <vscale x 4 x i1> @llvm.riscv.vmand.nxv4i1(<vscale x 4 x i1> %1, <vscale x 4 x i1> %b, iXLen %vl)
1106+
ret <vscale x 4 x i1> %2
1107+
}
1108+
1109+
define <vscale x 4 x i1> @vmsbc_vxm(<vscale x 4 x i32> %a, <vscale x 4 x i1> %mask, <vscale x 4 x i1> %b, i32 %c, iXLen %vl) {
1110+
; NOVLOPT-LABEL: vmsbc_vxm:
1111+
; NOVLOPT: # %bb.0:
1112+
; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
1113+
; NOVLOPT-NEXT: vmsbc.vxm v11, v8, a0, v0
1114+
; NOVLOPT-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
1115+
; NOVLOPT-NEXT: vmand.mm v0, v11, v10
1116+
; NOVLOPT-NEXT: ret
1117+
;
1118+
; VLOPT-LABEL: vmsbc_vxm:
1119+
; VLOPT: # %bb.0:
1120+
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
1121+
; VLOPT-NEXT: vmsbc.vxm v11, v8, a0, v0
1122+
; VLOPT-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
1123+
; VLOPT-NEXT: vmand.mm v0, v11, v10
1124+
; VLOPT-NEXT: ret
1125+
%1 = call <vscale x 4 x i1> @llvm.riscv.vmsbc.borrow.in.nxv4i32.i32(<vscale x 4 x i32> %a, i32 %c, <vscale x 4 x i1> %mask, iXLen -1)
1126+
%2 = call <vscale x 4 x i1> @llvm.riscv.vmand.nxv4i1(<vscale x 4 x i1> %1, <vscale x 4 x i1> %b, iXLen %vl)
1127+
ret <vscale x 4 x i1> %2
1128+
}
1129+
10251130
define <vscale x 4 x i1> @vmsbc_vx(<vscale x 4 x i32> %a, <vscale x 4 x i1> %b, i32 %c, iXLen %vl) {
10261131
; NOVLOPT-LABEL: vmsbc_vx:
10271132
; NOVLOPT: # %bb.0:
@@ -5297,6 +5402,153 @@ define <vscale x 4 x float> @vfwmaccbf16_vv(<vscale x 4 x float> %a, <vscale x 4
52975402
ret <vscale x 4 x float> %2
52985403
}
52995404

5405+
define <vscale x 4 x i32> @vsbc_vvm(<vscale x 4 x i32> %a, <vscale x 4 x i1> %mask, <vscale x 4 x i32> %b, <vscale x 4 x i32> %c, iXLen %vl) {
5406+
; NOVLOPT-LABEL: vsbc_vvm:
5407+
; NOVLOPT: # %bb.0:
5408+
; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
5409+
; NOVLOPT-NEXT: vsbc.vvm v8, v8, v10, v0
5410+
; NOVLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5411+
; NOVLOPT-NEXT: vadd.vv v8, v8, v12
5412+
; NOVLOPT-NEXT: ret
5413+
;
5414+
; VLOPT-LABEL: vsbc_vvm:
5415+
; VLOPT: # %bb.0:
5416+
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
5417+
; VLOPT-NEXT: vsbc.vvm v8, v8, v10, v0
5418+
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5419+
; VLOPT-NEXT: vadd.vv v8, v8, v12
5420+
; VLOPT-NEXT: ret
5421+
%1 = call <vscale x 4 x i32> @llvm.riscv.vsbc.nxv4i32.nxv4i32.nxv4i1(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b, <vscale x 4 x i1> %mask, iXLen -1)
5422+
%2 = call <vscale x 4 x i32> @llvm.riscv.vadd.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %1, <vscale x 4 x i32> %c, iXLen %vl)
5423+
ret <vscale x 4 x i32> %2
5424+
}
5425+
5426+
define <vscale x 4 x i32> @vsbc_vxm(<vscale x 4 x i32> %a, <vscale x 4 x i1> %mask, <vscale x 4 x i32> %b, i32 %c, iXLen %vl) {
5427+
; NOVLOPT-LABEL: vsbc_vxm:
5428+
; NOVLOPT: # %bb.0:
5429+
; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
5430+
; NOVLOPT-NEXT: vsbc.vxm v8, v8, a0, v0
5431+
; NOVLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
5432+
; NOVLOPT-NEXT: vadd.vv v8, v8, v10
5433+
; NOVLOPT-NEXT: ret
5434+
;
5435+
; VLOPT-LABEL: vsbc_vxm:
5436+
; VLOPT: # %bb.0:
5437+
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
5438+
; VLOPT-NEXT: vsbc.vxm v8, v8, a0, v0
5439+
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
5440+
; VLOPT-NEXT: vadd.vv v8, v8, v10
5441+
; VLOPT-NEXT: ret
5442+
%1 = call <vscale x 4 x i32> @llvm.riscv.vsbc.nxv4i32.i32.nxv4i1(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, i32 %c, <vscale x 4 x i1> %mask, iXLen -1)
5443+
%2 = call <vscale x 4 x i32> @llvm.riscv.vadd.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %1, <vscale x 4 x i32> %b, iXLen %vl)
5444+
ret <vscale x 4 x i32> %2
5445+
}
5446+
5447+
define <vscale x 4 x i32> @vfclass_v(<vscale x 4 x float> %a, <vscale x 4 x i32> %b, iXLen %vl) {
5448+
; NOVLOPT-LABEL: vfclass_v:
5449+
; NOVLOPT: # %bb.0:
5450+
; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
5451+
; NOVLOPT-NEXT: vfclass.v v8, v8
5452+
; NOVLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5453+
; NOVLOPT-NEXT: vadd.vv v8, v8, v10
5454+
; NOVLOPT-NEXT: ret
5455+
;
5456+
; VLOPT-LABEL: vfclass_v:
5457+
; VLOPT: # %bb.0:
5458+
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
5459+
; VLOPT-NEXT: vfclass.v v8, v8
5460+
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5461+
; VLOPT-NEXT: vadd.vv v8, v8, v10
5462+
; VLOPT-NEXT: ret
5463+
%1 = call <vscale x 4 x i32> @llvm.riscv.vfclass.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x float> %a, iXLen -1)
5464+
%2 = call <vscale x 4 x i32> @llvm.riscv.vadd.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %1, <vscale x 4 x i32> %b, iXLen %vl)
5465+
ret <vscale x 4 x i32> %2
5466+
}
5467+
5468+
define <vscale x 4 x i32> @vrgather_vi(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, iXLen %vl) {
5469+
; NOVLOPT-LABEL: vrgather_vi:
5470+
; NOVLOPT: # %bb.0:
5471+
; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
5472+
; NOVLOPT-NEXT: vrgather.vi v12, v8, 5
5473+
; NOVLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5474+
; NOVLOPT-NEXT: vadd.vv v8, v12, v10
5475+
; NOVLOPT-NEXT: ret
5476+
;
5477+
; VLOPT-LABEL: vrgather_vi:
5478+
; VLOPT: # %bb.0:
5479+
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
5480+
; VLOPT-NEXT: vrgather.vi v12, v8, 5
5481+
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5482+
; VLOPT-NEXT: vadd.vv v8, v12, v10
5483+
; VLOPT-NEXT: ret
5484+
%1 = call <vscale x 4 x i32> @llvm.riscv.vrgather.vx.nxv4i32.iXLen(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, iXLen 5, iXLen -1)
5485+
%2 = call <vscale x 4 x i32> @llvm.riscv.vadd.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %1, <vscale x 4 x i32> %b, iXLen %vl)
5486+
ret <vscale x 4 x i32> %2
5487+
}
5488+
5489+
define <vscale x 4 x i32> @vrgather_vv(<vscale x 4 x i32> %a, <vscale x 4 x i32> %idx, <vscale x 4 x i32> %b, iXLen %vl) {
5490+
; NOVLOPT-LABEL: vrgather_vv:
5491+
; NOVLOPT: # %bb.0:
5492+
; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
5493+
; NOVLOPT-NEXT: vrgather.vv v12, v8, v10
5494+
; NOVLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5495+
; NOVLOPT-NEXT: vadd.vv v8, v12, v8
5496+
; NOVLOPT-NEXT: ret
5497+
;
5498+
; VLOPT-LABEL: vrgather_vv:
5499+
; VLOPT: # %bb.0:
5500+
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
5501+
; VLOPT-NEXT: vrgather.vv v12, v8, v10
5502+
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5503+
; VLOPT-NEXT: vadd.vv v8, v12, v8
5504+
; VLOPT-NEXT: ret
5505+
%1 = call <vscale x 4 x i32> @llvm.riscv.vrgather.vv.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, <vscale x 4 x i32> %idx, iXLen -1)
5506+
%2 = call <vscale x 4 x i32> @llvm.riscv.vadd.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %1, <vscale x 4 x i32> %a, iXLen %vl)
5507+
ret <vscale x 4 x i32> %2
5508+
}
5509+
5510+
define <vscale x 4 x i32> @vrgather_vx(<vscale x 4 x i32> %a, iXLen %idx, <vscale x 4 x i32> %b, iXLen %vl) {
5511+
; NOVLOPT-LABEL: vrgather_vx:
5512+
; NOVLOPT: # %bb.0:
5513+
; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
5514+
; NOVLOPT-NEXT: vrgather.vx v12, v8, a0
5515+
; NOVLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
5516+
; NOVLOPT-NEXT: vadd.vv v8, v12, v10
5517+
; NOVLOPT-NEXT: ret
5518+
;
5519+
; VLOPT-LABEL: vrgather_vx:
5520+
; VLOPT: # %bb.0:
5521+
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
5522+
; VLOPT-NEXT: vrgather.vx v12, v8, a0
5523+
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
5524+
; VLOPT-NEXT: vadd.vv v8, v12, v10
5525+
; VLOPT-NEXT: ret
5526+
%1 = call <vscale x 4 x i32> @llvm.riscv.vrgather.vx.nxv4i32.iXLen(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, iXLen %idx, iXLen -1)
5527+
%2 = call <vscale x 4 x i32> @llvm.riscv.vadd.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %1, <vscale x 4 x i32> %b, iXLen %vl)
5528+
ret <vscale x 4 x i32> %2
5529+
}
5530+
5531+
define <vscale x 4 x i32> @vrgatherei16_vv(<vscale x 4 x i32> %a, <vscale x 4 x i16> %idx, <vscale x 4 x i32> %b, iXLen %vl) {
5532+
; NOVLOPT-LABEL: vrgatherei16_vv:
5533+
; NOVLOPT: # %bb.0:
5534+
; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
5535+
; NOVLOPT-NEXT: vrgatherei16.vv v12, v8, v10
5536+
; NOVLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5537+
; NOVLOPT-NEXT: vadd.vv v8, v12, v8
5538+
; NOVLOPT-NEXT: ret
5539+
;
5540+
; VLOPT-LABEL: vrgatherei16_vv:
5541+
; VLOPT: # %bb.0:
5542+
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
5543+
; VLOPT-NEXT: vrgatherei16.vv v12, v8, v10
5544+
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
5545+
; VLOPT-NEXT: vadd.vv v8, v12, v8
5546+
; VLOPT-NEXT: ret
5547+
%1 = call <vscale x 4 x i32> @llvm.riscv.vrgatherei16.vv.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, <vscale x 4 x i16> %idx, iXLen -1)
5548+
%2 = call <vscale x 4 x i32> @llvm.riscv.vadd.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %1, <vscale x 4 x i32> %a, iXLen %vl)
5549+
ret <vscale x 4 x i32> %2
5550+
}
5551+
53005552
define <vscale x 4 x float> @vfwmaccbf16_vf(<vscale x 4 x float> %a, bfloat %b, <vscale x 4 x bfloat> %c, <vscale x 4 x float> %d, iXLen %vl) {
53015553
; NOVLOPT-LABEL: vfwmaccbf16_vf:
53025554
; NOVLOPT: # %bb.0:

0 commit comments

Comments
 (0)