Skip to content

Commit 06b75b8

Browse files
committed
fixup! Address review comments
1 parent 39bc8d6 commit 06b75b8

File tree

3 files changed

+36
-11
lines changed

3 files changed

+36
-11
lines changed

llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1413,29 +1413,23 @@ static bool isTupleInsertInstr(const MachineInstr &MI,
14131413
return false;
14141414

14151415
const TargetRegisterClass *DstRC = MRI.getRegClass(MI.getOperand(0).getReg());
1416+
const TargetRegisterInfo *TRI = MRI.getTargetRegisterInfo();
14161417
if (!RISCVRI::isVRegClass(DstRC->TSFlags))
14171418
return false;
14181419
unsigned NF = RISCVRI::getNF(DstRC->TSFlags);
14191420
if (NF < 2)
14201421
return false;
14211422

1422-
// Check whether INSERT_SUBREG was lowered with the correct subreg index.
1423+
// Check whether INSERT_SUBREG has the correct subreg index for tuple inserts.
14231424
auto VLMul = RISCVRI::getLMul(DstRC->TSFlags);
1425+
unsigned SubRegIdx = MI.getOperand(3).getImm();
14241426
[[maybe_unused]] auto [LMul, IsFractional] = RISCVVType::decodeVLMUL(VLMul);
14251427
assert(!IsFractional && "unexpected LMUL for tuple register classes");
1426-
[[maybe_unused]] const TargetRegisterInfo *TRI = MRI.getTargetRegisterInfo();
1427-
[[maybe_unused]] unsigned SubRegIdx = MI.getOperand(3).getImm();
1428-
assert(TRI->getSubRegIdxSize(SubRegIdx) == RISCV::RVVBitsPerBlock * LMul &&
1429-
"unexpected subreg index of tuple register class");
1430-
return true;
1428+
return TRI->getSubRegIdxSize(SubRegIdx) == RISCV::RVVBitsPerBlock * LMul;
14311429
}
14321430

14331431
static bool isSegmentedStoreInstr(const MachineInstr &MI) {
1434-
const RISCVVPseudosTable::PseudoInfo *RVV =
1435-
RISCVVPseudosTable::getPseudoInfo(MI.getOpcode());
1436-
if (!RVV)
1437-
return false;
1438-
switch (RVV->BaseInstr) {
1432+
switch (RISCV::getRVVMCOpcode(MI.getOpcode())) {
14391433
case VSSEG_CASES(8):
14401434
case VSSSEG_CASES(8):
14411435
case VSUXSEG_CASES(8):

llvm/test/CodeGen/RISCV/rvv/vl-opt-op-info.mir

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2272,6 +2272,21 @@ body: |
22722272
PseudoVSSEG3E32_V_M1 killed %8, $noreg, 1, 6 /* e64 */
22732273
...
22742274
---
2275+
name: vsseg3e32_v_incompatible_insert_subreg
2276+
body: |
2277+
bb.0:
2278+
2279+
; CHECK-LABEL: name: vsseg3e32_v_incompatible_insert_subreg
2280+
; CHECK: [[PseudoVADD_VV_M2_:%[0-9]+]]:vrm2 = PseudoVADD_VV_M2 $noreg, $noreg, $noreg, -1, 5 /* e32 */, 3 /* ta, ma */
2281+
; CHECK-NEXT: [[DEF:%[0-9]+]]:vrn3m1 = IMPLICIT_DEF
2282+
; CHECK-NEXT: [[INSERT_SUBREG:%[0-9]+]]:vrn3m1 = INSERT_SUBREG [[DEF]], [[PseudoVADD_VV_M2_]], %subreg.sub_vrm2_0
2283+
; CHECK-NEXT: PseudoVSSEG3E32_V_M1 killed [[INSERT_SUBREG]], $noreg, 1, 5 /* e32 */
2284+
%2:vrm2 = PseudoVADD_VV_M2 $noreg, $noreg, $noreg, -1, 5 /* e32 */, 3 /* ta, ma */
2285+
%6:vrn3m1 = IMPLICIT_DEF
2286+
%5:vrn3m1 = INSERT_SUBREG %6, %2, %subreg.sub_vrm2_0
2287+
PseudoVSSEG3E32_V_M1 killed %5, $noreg, 1, 5 /* e32 */
2288+
...
2289+
---
22752290
name: vssseg3e32_v
22762291
body: |
22772292
bb.0:

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,3 +222,19 @@ define <vscale x 8 x i32> @vcompress_add(<vscale x 8 x i32> %a, <vscale x 8 x i3
222222
%compress = call <vscale x 8 x i32> @llvm.riscv.vcompress.nxv8i32(<vscale x 8 x i32> poison, <vscale x 8 x i32> %add, <vscale x 8 x i1> %c, iXLen %vl)
223223
ret <vscale x 8 x i32> %compress
224224
}
225+
226+
; Make sure we peek through INSERT_SUBREG of tuple registers.
227+
define void @segmented_store_insert_subreg(<vscale x 4 x float> %v0, <vscale x 4 x float> %v1, <vscale x 4 x float> %v2, ptr %p, iXLen %vl) {
228+
; CHECK-LABEL: segmented_store_insert_subreg:
229+
; CHECK: # %bb.0:
230+
; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
231+
; CHECK-NEXT: vfadd.vv v10, v8, v10
232+
; CHECK-NEXT: vsseg3e32.v v8, (a0)
233+
; CHECK-NEXT: ret
234+
%fadd = fadd <vscale x 4 x float> %v0, %v1
235+
%t0 = call target("riscv.vector.tuple", <vscale x 16 x i8>, 3) @llvm.riscv.tuple.insert(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) poison, <vscale x 4 x float> %v0, i32 0)
236+
%t1 = call target("riscv.vector.tuple", <vscale x 16 x i8>, 3) @llvm.riscv.tuple.insert(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %t0, <vscale x 4 x float> %fadd, i32 1)
237+
%t2 = call target("riscv.vector.tuple", <vscale x 16 x i8>, 3) @llvm.riscv.tuple.insert(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %t1, <vscale x 4 x float> %v2, i32 2)
238+
call void @llvm.riscv.vsseg3(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %t2, ptr %p, iXLen %vl, iXLen 5)
239+
ret void
240+
}

0 commit comments

Comments
 (0)