Skip to content

Commit 6effab9

Browse files
author
Thorsten Schütt
authored
Revert "[GlobalISel][AArch64] Legalize G_INSERT_VECTOR_ELT for SVE" (#114353)
Reverts #114310
1 parent 6bf214b commit 6effab9

File tree

5 files changed

+8
-501
lines changed

5 files changed

+8
-501
lines changed

llvm/include/llvm/CodeGen/GlobalISel/LegalizerInfo.h

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -273,11 +273,6 @@ inline LegalityPredicate typeIsNot(unsigned TypeIdx, LLT Type) {
273273
LegalityPredicate
274274
typePairInSet(unsigned TypeIdx0, unsigned TypeIdx1,
275275
std::initializer_list<std::pair<LLT, LLT>> TypesInit);
276-
/// True iff the given types for the given tuple of type indexes is one of the
277-
/// specified type tuple.
278-
LegalityPredicate
279-
typeTupleInSet(unsigned TypeIdx0, unsigned TypeIdx1, unsigned TypeIdx2,
280-
std::initializer_list<std::tuple<LLT, LLT, LLT>> TypesInit);
281276
/// True iff the given types for the given pair of type indexes is one of the
282277
/// specified type pairs.
283278
LegalityPredicate typePairAndMemDescInSet(
@@ -509,15 +504,6 @@ class LegalizeRuleSet {
509504
using namespace LegalityPredicates;
510505
return actionIf(Action, typePairInSet(typeIdx(0), typeIdx(1), Types));
511506
}
512-
513-
LegalizeRuleSet &
514-
actionFor(LegalizeAction Action,
515-
std::initializer_list<std::tuple<LLT, LLT, LLT>> Types) {
516-
using namespace LegalityPredicates;
517-
return actionIf(Action,
518-
typeTupleInSet(typeIdx(0), typeIdx(1), typeIdx(2), Types));
519-
}
520-
521507
/// Use the given action when type indexes 0 and 1 is any type pair in the
522508
/// given list.
523509
/// Action should be an action that requires mutation.
@@ -629,12 +615,6 @@ class LegalizeRuleSet {
629615
return *this;
630616
return actionFor(LegalizeAction::Legal, Types);
631617
}
632-
LegalizeRuleSet &
633-
legalFor(bool Pred, std::initializer_list<std::tuple<LLT, LLT, LLT>> Types) {
634-
if (!Pred)
635-
return *this;
636-
return actionFor(LegalizeAction::Legal, Types);
637-
}
638618
/// The instruction is legal when type index 0 is any type in the given list
639619
/// and imm index 0 is anything.
640620
LegalizeRuleSet &legalForTypeWithAnyImm(std::initializer_list<LLT> Types) {

llvm/lib/CodeGen/GlobalISel/LegalityPredicates.cpp

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,6 @@ LegalityPredicate LegalityPredicates::typePairInSet(
4949
};
5050
}
5151

52-
LegalityPredicate LegalityPredicates::typeTupleInSet(
53-
unsigned TypeIdx0, unsigned TypeIdx1, unsigned TypeIdx2,
54-
std::initializer_list<std::tuple<LLT, LLT, LLT>> TypesInit) {
55-
SmallVector<std::tuple<LLT, LLT, LLT>, 4> Types = TypesInit;
56-
return [=](const LegalityQuery &Query) {
57-
std::tuple<LLT, LLT, LLT> Match = {
58-
Query.Types[TypeIdx0], Query.Types[TypeIdx1], Query.Types[TypeIdx2]};
59-
return llvm::is_contained(Types, Match);
60-
};
61-
}
62-
6352
LegalityPredicate LegalityPredicates::typePairAndMemDescInSet(
6453
unsigned TypeIdx0, unsigned TypeIdx1, unsigned MMOIdx,
6554
std::initializer_list<TypePairAndMemDesc> TypesAndMemDescInit) {

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -978,10 +978,6 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
978978
getActionDefinitionsBuilder(G_INSERT_VECTOR_ELT)
979979
.legalIf(
980980
typeInSet(0, {v16s8, v8s8, v8s16, v4s16, v4s32, v2s32, v2s64, v2p0}))
981-
.legalFor(HasSVE, {{nxv16s8, s32, s64},
982-
{nxv8s16, s32, s64},
983-
{nxv4s32, s32, s64},
984-
{nxv2s64, s64, s64}})
985981
.moreElementsToNextPow2(0)
986982
.widenVectorEltsToVectorMinSize(0, 64)
987983
.clampNumElements(0, v8s8, v16s8)

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

Lines changed: 8 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,6 @@ bool matchREV(MachineInstr &MI, MachineRegisterInfo &MRI,
161161
Register Dst = MI.getOperand(0).getReg();
162162
Register Src = MI.getOperand(1).getReg();
163163
LLT Ty = MRI.getType(Dst);
164-
if (Ty.isScalableVector())
165-
return false;
166164
unsigned EltSize = Ty.getScalarSizeInBits();
167165

168166
// Element size for a rev cannot be 64.
@@ -198,10 +196,7 @@ bool matchTRN(MachineInstr &MI, MachineRegisterInfo &MRI,
198196
unsigned WhichResult;
199197
ArrayRef<int> ShuffleMask = MI.getOperand(3).getShuffleMask();
200198
Register Dst = MI.getOperand(0).getReg();
201-
LLT DstTy = MRI.getType(Dst);
202-
if (DstTy.isScalableVector())
203-
return false;
204-
unsigned NumElts = DstTy.getNumElements();
199+
unsigned NumElts = MRI.getType(Dst).getNumElements();
205200
if (!isTRNMask(ShuffleMask, NumElts, WhichResult))
206201
return false;
207202
unsigned Opc = (WhichResult == 0) ? AArch64::G_TRN1 : AArch64::G_TRN2;
@@ -222,10 +217,7 @@ bool matchUZP(MachineInstr &MI, MachineRegisterInfo &MRI,
222217
unsigned WhichResult;
223218
ArrayRef<int> ShuffleMask = MI.getOperand(3).getShuffleMask();
224219
Register Dst = MI.getOperand(0).getReg();
225-
LLT DstTy = MRI.getType(Dst);
226-
if (DstTy.isScalableVector())
227-
return false;
228-
unsigned NumElts = DstTy.getNumElements();
220+
unsigned NumElts = MRI.getType(Dst).getNumElements();
229221
if (!isUZPMask(ShuffleMask, NumElts, WhichResult))
230222
return false;
231223
unsigned Opc = (WhichResult == 0) ? AArch64::G_UZP1 : AArch64::G_UZP2;
@@ -241,10 +233,7 @@ bool matchZip(MachineInstr &MI, MachineRegisterInfo &MRI,
241233
unsigned WhichResult;
242234
ArrayRef<int> ShuffleMask = MI.getOperand(3).getShuffleMask();
243235
Register Dst = MI.getOperand(0).getReg();
244-
LLT DstTy = MRI.getType(Dst);
245-
if (DstTy.isScalableVector())
246-
return false;
247-
unsigned NumElts = DstTy.getNumElements();
236+
unsigned NumElts = MRI.getType(Dst).getNumElements();
248237
if (!isZIPMask(ShuffleMask, NumElts, WhichResult))
249238
return false;
250239
unsigned Opc = (WhichResult == 0) ? AArch64::G_ZIP1 : AArch64::G_ZIP2;
@@ -299,10 +288,7 @@ bool matchDupFromBuildVector(int Lane, MachineInstr &MI,
299288
MachineRegisterInfo &MRI,
300289
ShuffleVectorPseudo &MatchInfo) {
301290
assert(Lane >= 0 && "Expected positive lane?");
302-
LLT Op1Ty = MRI.getType(MI.getOperand(1).getReg());
303-
if (Op1Ty.isScalableVector())
304-
return false;
305-
int NumElements = Op1Ty.getNumElements();
291+
int NumElements = MRI.getType(MI.getOperand(1).getReg()).getNumElements();
306292
// Test if the LHS is a BUILD_VECTOR. If it is, then we can just reference the
307293
// lane's definition directly.
308294
auto *BuildVecMI =
@@ -340,8 +326,6 @@ bool matchDup(MachineInstr &MI, MachineRegisterInfo &MRI,
340326
// Check if an EXT instruction can handle the shuffle mask when the vector
341327
// sources of the shuffle are the same.
342328
bool isSingletonExtMask(ArrayRef<int> M, LLT Ty) {
343-
if (Ty.isScalableVector())
344-
return false;
345329
unsigned NumElts = Ty.getNumElements();
346330

347331
// Assume that the first shuffle index is not UNDEF. Fail if it is.
@@ -373,17 +357,12 @@ bool matchEXT(MachineInstr &MI, MachineRegisterInfo &MRI,
373357
assert(MI.getOpcode() == TargetOpcode::G_SHUFFLE_VECTOR);
374358
Register Dst = MI.getOperand(0).getReg();
375359
LLT DstTy = MRI.getType(Dst);
376-
if (DstTy.isScalableVector())
377-
return false;
378360
Register V1 = MI.getOperand(1).getReg();
379361
Register V2 = MI.getOperand(2).getReg();
380362
auto Mask = MI.getOperand(3).getShuffleMask();
381363
uint64_t Imm;
382364
auto ExtInfo = getExtMask(Mask, DstTy.getNumElements());
383-
LLT V1Ty = MRI.getType(V1);
384-
if (V1Ty.isScalableVector())
385-
return false;
386-
uint64_t ExtFactor = V1Ty.getScalarSizeInBits() / 8;
365+
uint64_t ExtFactor = MRI.getType(V1).getScalarSizeInBits() / 8;
387366

388367
if (!ExtInfo) {
389368
if (!getOpcodeDef<GImplicitDef>(V2, MRI) ||
@@ -444,8 +423,6 @@ void applyNonConstInsert(MachineInstr &MI, MachineRegisterInfo &MRI,
444423

445424
Register Offset = Insert.getIndexReg();
446425
LLT VecTy = MRI.getType(Insert.getReg(0));
447-
if (VecTy.isScalableVector())
448-
return;
449426
LLT EltTy = MRI.getType(Insert.getElementReg());
450427
LLT IdxTy = MRI.getType(Insert.getIndexReg());
451428

@@ -496,10 +473,7 @@ bool matchINS(MachineInstr &MI, MachineRegisterInfo &MRI,
496473
assert(MI.getOpcode() == TargetOpcode::G_SHUFFLE_VECTOR);
497474
ArrayRef<int> ShuffleMask = MI.getOperand(3).getShuffleMask();
498475
Register Dst = MI.getOperand(0).getReg();
499-
LLT DstTy = MRI.getType(Dst);
500-
if (DstTy.isScalableVector())
501-
return false;
502-
int NumElts = DstTy.getNumElements();
476+
int NumElts = MRI.getType(Dst).getNumElements();
503477
auto DstIsLeftAndDstLane = isINSMask(ShuffleMask, NumElts);
504478
if (!DstIsLeftAndDstLane)
505479
return false;
@@ -548,8 +522,6 @@ bool isVShiftRImm(Register Reg, MachineRegisterInfo &MRI, LLT Ty,
548522
if (!Cst)
549523
return false;
550524
Cnt = *Cst;
551-
if (Ty.isScalableVector())
552-
return false;
553525
int64_t ElementBits = Ty.getScalarSizeInBits();
554526
return Cnt >= 1 && Cnt <= ElementBits;
555527
}
@@ -726,8 +698,6 @@ bool matchDupLane(MachineInstr &MI, MachineRegisterInfo &MRI,
726698
Register Src1Reg = MI.getOperand(1).getReg();
727699
const LLT SrcTy = MRI.getType(Src1Reg);
728700
const LLT DstTy = MRI.getType(MI.getOperand(0).getReg());
729-
if (SrcTy.isScalableVector())
730-
return false;
731701

732702
auto LaneIdx = getSplatIndex(MI);
733703
if (!LaneIdx)
@@ -804,8 +774,6 @@ bool matchScalarizeVectorUnmerge(MachineInstr &MI, MachineRegisterInfo &MRI) {
804774
auto &Unmerge = cast<GUnmerge>(MI);
805775
Register Src1Reg = Unmerge.getReg(Unmerge.getNumOperands() - 1);
806776
const LLT SrcTy = MRI.getType(Src1Reg);
807-
if (SrcTy.isScalableVector())
808-
return false;
809777
if (SrcTy.getSizeInBits() != 128 && SrcTy.getSizeInBits() != 64)
810778
return false;
811779
return SrcTy.isVector() && !SrcTy.isScalable() &&
@@ -1019,10 +987,7 @@ bool matchLowerVectorFCMP(MachineInstr &MI, MachineRegisterInfo &MRI,
1019987
if (!DstTy.isVector() || !ST.hasNEON())
1020988
return false;
1021989
Register LHS = MI.getOperand(2).getReg();
1022-
LLT LHSTy = MRI.getType(LHS);
1023-
if (LHSTy.isScalableVector())
1024-
return false;
1025-
unsigned EltSize = LHSTy.getScalarSizeInBits();
990+
unsigned EltSize = MRI.getType(LHS).getScalarSizeInBits();
1026991
if (EltSize == 16 && !ST.hasFullFP16())
1027992
return false;
1028993
if (EltSize != 16 && EltSize != 32 && EltSize != 64)
@@ -1218,7 +1183,7 @@ bool matchExtMulToMULL(MachineInstr &MI, MachineRegisterInfo &MRI) {
12181183
MachineInstr *I1 = getDefIgnoringCopies(MI.getOperand(1).getReg(), MRI);
12191184
MachineInstr *I2 = getDefIgnoringCopies(MI.getOperand(2).getReg(), MRI);
12201185

1221-
if (DstTy.isFixedVector()) {
1186+
if (DstTy.isVector()) {
12221187
// If the source operands were EXTENDED before, then {U/S}MULL can be used
12231188
unsigned I1Opc = I1->getOpcode();
12241189
unsigned I2Opc = I2->getOpcode();

0 commit comments

Comments
 (0)