Skip to content

Commit 75682b2

Browse files
author
Thorsten Schütt
committed
fix fixme
1 parent a37d2d8 commit 75682b2

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,9 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
393393
{v8s16, p0, s128, 8},
394394
{v2s32, p0, s64, 8},
395395
{v4s32, p0, s128, 8},
396-
{v2s64, p0, s128, 8}})
396+
{v2s64, p0, s128, 8},
397+
// SVE vscale x 64 bit base sizes
398+
{nxv4s16, p0, nxv4s16, 8}})
397399
// These extends are also legal
398400
.legalForTypesWithMemDesc(
399401
{{s32, p0, s8, 8}, {s32, p0, s16, 8}, {s64, p0, s32, 8}})
@@ -1330,11 +1332,12 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
13301332

13311333
getActionDefinitionsBuilder({G_SCMP, G_UCMP}).lower();
13321334

1333-
// FIXME: {nxv2s16, nxv4s16}
13341335
getActionDefinitionsBuilder(G_EXTRACT_SUBVECTOR)
13351336
.legalFor({{v8s8, v16s8}, {v4s16, v8s16}, {v2s32, v4s32}})
1336-
.legalFor(HasSVE,
1337-
{{nxv2s16, nxv8s16}, {nxv4s16, nxv8s16}, {nxv2s32, nxv4s32}})
1337+
.legalFor(HasSVE, {{nxv2s16, nxv4s16},
1338+
{nxv2s16, nxv8s16},
1339+
{nxv4s16, nxv8s16},
1340+
{nxv2s32, nxv4s32}})
13381341
.widenScalarOrEltToNextPow2(0)
13391342
.immIdx(0); // Inform verifier imm idx 0 is handled.
13401343

llvm/test/CodeGen/AArch64/extract_subvector.ll

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,18 @@ define void @extract_nxv2i16_nxv8i16(<vscale x 8 x i16> %arg, ptr %p) {
5151
store <vscale x 2 x i16> %ext, ptr %p
5252
ret void
5353
}
54+
55+
define void @extract_nxv2i16_nxv4i16(ptr %p, ptr %p2) {
56+
; CHECK-LABEL: extract_nxv2i16_nxv4i16:
57+
; CHECK: // %bb.0:
58+
; CHECK-NEXT: ptrue p0.s
59+
; CHECK-NEXT: ld1h { z0.s }, p0/z, [x0]
60+
; CHECK-NEXT: ptrue p0.d
61+
; CHECK-NEXT: uunpklo z0.d, z0.s
62+
; CHECK-NEXT: st1h { z0.d }, p0, [x1]
63+
; CHECK-NEXT: ret
64+
%vector = load <vscale x 4 x i16>, ptr %p
65+
%ext = call <vscale x 2 x i16> @llvm.vector.extract.nxv2i16.nxv4i16(<vscale x 4 x i16> %vector, i64 0)
66+
store <vscale x 2 x i16> %ext, ptr %p2
67+
ret void
68+
}

0 commit comments

Comments
 (0)