Skip to content

Commit a2ca313

Browse files
committed
legalize vload and vstore nxv1s8
1 parent c74875d commit a2ca313

File tree

4 files changed

+65
-2
lines changed

4 files changed

+65
-2
lines changed

llvm/lib/CodeGen/MIRParser/MIParser.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3388,7 +3388,7 @@ bool MIParser::parseMachineMemoryOperand(MachineMemOperand *&Dest) {
33883388
if (expectAndConsume(MIToken::rparen))
33893389
return true;
33903390

3391-
Size = MemoryType.getSizeInBytes();
3391+
Size = MemoryType.getSizeInBytes().getKnownMinValue();
33923392
}
33933393

33943394
MachinePointerInfo Ptr = MachinePointerInfo();

llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,11 @@ RISCVLegalizerInfo::RISCVLegalizerInfo(const RISCVSubtarget &ST)
265265
.legalForTypesWithMemDesc({{s32, p0, s8, 8},
266266
{s32, p0, s16, 16},
267267
{s32, p0, s32, 32},
268-
{p0, p0, sXLen, XLen}});
268+
{p0, p0, sXLen, XLen},
269+
{nxv1s8, p0, nxv1s8, 8}})
270+
.widenScalarToNextPow2(0, /* MinSize = */ 8)
271+
.lowerIfMemSizeNotByteSizePow2();
272+
269273
auto &ExtLoadActions =
270274
getActionDefinitionsBuilder({G_SEXTLOAD, G_ZEXTLOAD})
271275
.legalForTypesWithMemDesc({{s32, p0, s8, 8}, {s32, p0, s16, 16}});
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -mtriple=riscv32 -mattr=+v -run-pass=legalizer %s -o - | FileCheck %s
3+
# RUN: llc -mtriple=riscv64 -mattr=+v -run-pass=legalizer %s -o - | FileCheck %s
4+
--- |
5+
6+
define <vscale x 1 x i8> @vload_nx1i8(ptr %pa) {
7+
%va = load <vscale x 1 x i8>, ptr %pa
8+
ret <vscale x 1 x i8> %va
9+
}
10+
11+
...
12+
---
13+
name: vload_nx1i8
14+
body: |
15+
bb.1 (%ir-block.0):
16+
liveins: $x10
17+
18+
; CHECK-LABEL: name: vload_nx1i8
19+
; CHECK: liveins: $x10
20+
; CHECK-NEXT: {{ $}}
21+
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
22+
; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(<vscale x 1 x s8>) = G_LOAD [[COPY]](p0) :: (load (<vscale x 1 x s8>) from %ir.pa)
23+
; CHECK-NEXT: $v8 = COPY [[LOAD]](<vscale x 1 x s8>)
24+
; CHECK-NEXT: PseudoRET implicit $v8
25+
%0:_(p0) = COPY $x10
26+
%1:_(<vscale x 1 x s8>) = G_LOAD %0(p0) :: (load (<vscale x 1 x s8>) from %ir.pa)
27+
$v8 = COPY %1(<vscale x 1 x s8>)
28+
PseudoRET implicit $v8
29+
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -mtriple=riscv32 -mattr=+v -run-pass=legalizer %s -o - | FileCheck %s
3+
# RUN: llc -mtriple=riscv64 -mattr=+v -run-pass=legalizer %s -o - | FileCheck %s
4+
--- |
5+
6+
define void @vstore_nx1i8(ptr %pa, <vscale x 1 x i8> %b) {
7+
store <vscale x 1 x i8> %b, ptr %pa, align 1
8+
ret void
9+
}
10+
11+
...
12+
---
13+
name: vstore_nx1i8
14+
body: |
15+
bb.1 (%ir-block.0):
16+
liveins: $v8, $x10
17+
18+
; CHECK-LABEL: name: vstore_nx1i8
19+
; CHECK: liveins: $v8, $x10
20+
; CHECK-NEXT: {{ $}}
21+
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
22+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<vscale x 1 x s8>) = COPY $v8
23+
; CHECK-NEXT: G_STORE [[COPY1]](<vscale x 1 x s8>), [[COPY]](p0) :: (store (<vscale x 1 x s8>) into %ir.pa)
24+
; CHECK-NEXT: PseudoRET
25+
%0:_(p0) = COPY $x10
26+
%1:_(<vscale x 1 x s8>) = COPY $v8
27+
G_STORE %1(<vscale x 1 x s8>), %0(p0) :: (store (<vscale x 1 x s8>) into %ir.pa)
28+
PseudoRET
29+
30+
...

0 commit comments

Comments
 (0)