@@ -61,6 +61,11 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
61
61
const LLT v2s64 = LLT::fixed_vector (2 , 64 );
62
62
const LLT v2p0 = LLT::fixed_vector (2 , p0);
63
63
64
+ const LLT nxv16s8 = LLT::scalable_vector (16 , s8);
65
+ const LLT nxv8s16 = LLT::scalable_vector (8 , s16);
66
+ const LLT nxv4s32 = LLT::scalable_vector (4 , s32);
67
+ const LLT nxv2s64 = LLT::scalable_vector (2 , s64);
68
+
64
69
std::initializer_list<LLT> PackedVectorAllTypeList = {/* Begin 128bit types */
65
70
v16s8, v8s16, v4s32,
66
71
v2s64, v2p0,
@@ -328,7 +333,31 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
328
333
return ValTy.isPointerVector () && ValTy.getAddressSpace () == 0 ;
329
334
};
330
335
331
- getActionDefinitionsBuilder (G_LOAD)
336
+ auto &LoadActions = getActionDefinitionsBuilder (G_LOAD);
337
+ auto &StoreActions = getActionDefinitionsBuilder (G_STORE);
338
+
339
+ if (ST.hasSVE ()) {
340
+ LoadActions.legalForTypesWithMemDesc ({
341
+ // 128 bit base sizes
342
+ {nxv16s8, p0, nxv16s8, 8 },
343
+ {nxv8s16, p0, nxv8s16, 8 },
344
+ {nxv4s32, p0, nxv4s32, 8 },
345
+ {nxv2s64, p0, nxv2s64, 8 },
346
+ });
347
+
348
+ // TODO: Add nxv2p0. Consider bitcastIf.
349
+ // See #92130
350
+ // https://github.com/llvm/llvm-project/pull/92130#discussion_r1616888461
351
+ StoreActions.legalForTypesWithMemDesc ({
352
+ // 128 bit base sizes
353
+ {nxv16s8, p0, nxv16s8, 8 },
354
+ {nxv8s16, p0, nxv8s16, 8 },
355
+ {nxv4s32, p0, nxv4s32, 8 },
356
+ {nxv2s64, p0, nxv2s64, 8 },
357
+ });
358
+ }
359
+
360
+ LoadActions
332
361
.customIf ([=](const LegalityQuery &Query) {
333
362
return HasRCPC3 && Query.Types [0 ] == s128 &&
334
363
Query.MMODescrs [0 ].Ordering == AtomicOrdering::Acquire;
@@ -378,7 +407,7 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
378
407
.customIf (IsPtrVecPred)
379
408
.scalarizeIf (typeInSet (0 , {v2s16, v2s8}), 0 );
380
409
381
- getActionDefinitionsBuilder (G_STORE)
410
+ StoreActions
382
411
.customIf ([=](const LegalityQuery &Query) {
383
412
return HasRCPC3 && Query.Types [0 ] == s128 &&
384
413
Query.MMODescrs [0 ].Ordering == AtomicOrdering::Release;
0 commit comments