You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: llvm/test/CodeGen/RISCV/rvv/vl-opt-instrs.ll
+252Lines changed: 252 additions & 0 deletions
Original file line number
Diff line number
Diff 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,
1022
1022
ret <vscale x 4 x i1> %2
1023
1023
}
1024
1024
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, i325, <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
+
1025
1130
define <vscale x 4 x i1> @vmsbc_vx(<vscale x 4 x i32> %a, <vscale x 4 x i1> %b, i32%c, iXLen %vl) {
1026
1131
; NOVLOPT-LABEL: vmsbc_vx:
1027
1132
; NOVLOPT: # %bb.0:
@@ -5297,6 +5402,153 @@ define <vscale x 4 x float> @vfwmaccbf16_vv(<vscale x 4 x float> %a, <vscale x 4
5297
5402
ret <vscale x 4 x float> %2
5298
5403
}
5299
5404
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
+
5300
5552
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) {
0 commit comments