Skip to content

Commit 9056ce8

Browse files
Revert "[RISCV][GISEL] Legalize G_VSCALE"
This reverts commit 4768150. It is not consistent with SelectionDAG.
1 parent 6ac5410 commit 9056ce8

File tree

8 files changed

+1
-528
lines changed

8 files changed

+1
-528
lines changed

llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,17 +1165,6 @@ class MachineIRBuilder {
11651165
/// \return a MachineInstrBuilder for the newly created instruction.
11661166
MachineInstrBuilder buildVScale(const DstOp &Res, const ConstantInt &MinElts);
11671167

1168-
/// Build and insert \p Res = G_VSCALE \p MinElts
1169-
///
1170-
/// G_VSCALE puts the value of the runtime vscale multiplied by \p MinElts
1171-
/// into \p Res.
1172-
///
1173-
/// \pre setBasicBlock or setMI must have been called.
1174-
/// \pre \p Res must be a generic virtual register with scalar type.
1175-
///
1176-
/// \return a MachineInstrBuilder for the newly created instruction.
1177-
MachineInstrBuilder buildVScale(const DstOp &Res, const APInt &MinElts);
1178-
11791168
/// Build and insert a G_INTRINSIC instruction.
11801169
///
11811170
/// There are four different opcodes based on combinations of whether the

llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp

Lines changed: 1 addition & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1699,36 +1699,6 @@ LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalar(MachineInstr &MI,
16991699
case TargetOpcode::G_FLDEXP:
17001700
case TargetOpcode::G_STRICT_FLDEXP:
17011701
return narrowScalarFLDEXP(MI, TypeIdx, NarrowTy);
1702-
case TargetOpcode::G_VSCALE: {
1703-
LLT Ty = MRI.getType(MI.getOperand(0).getReg());
1704-
const APInt &Val = MI.getOperand(1).getCImm()->getValue();
1705-
unsigned TotalSize = Ty.getSizeInBits();
1706-
unsigned NarrowSize = NarrowTy.getSizeInBits();
1707-
int NumParts = TotalSize / NarrowSize;
1708-
1709-
SmallVector<Register, 4> PartRegs;
1710-
for (int I = 0; I != NumParts; ++I) {
1711-
unsigned Offset = I * NarrowSize;
1712-
auto K =
1713-
MIRBuilder.buildVScale(NarrowTy, Val.lshr(Offset).trunc(NarrowSize));
1714-
PartRegs.push_back(K.getReg(0));
1715-
}
1716-
LLT LeftoverTy;
1717-
unsigned LeftoverBits = TotalSize - NumParts * NarrowSize;
1718-
SmallVector<Register, 1> LeftoverRegs;
1719-
if (LeftoverBits != 0) {
1720-
LeftoverTy = LLT::scalar(LeftoverBits);
1721-
auto K = MIRBuilder.buildVScale(
1722-
LeftoverTy, Val.lshr(NumParts * NarrowSize).trunc(LeftoverBits));
1723-
LeftoverRegs.push_back(K.getReg(0));
1724-
}
1725-
1726-
insertParts(MI.getOperand(0).getReg(), Ty, NarrowTy, PartRegs, LeftoverTy,
1727-
LeftoverRegs);
1728-
1729-
MI.eraseFromParent();
1730-
return Legalized;
1731-
}
17321702
}
17331703
}
17341704

@@ -2996,7 +2966,7 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
29962966
case TargetOpcode::G_VECREDUCE_FMIN:
29972967
case TargetOpcode::G_VECREDUCE_FMAX:
29982968
case TargetOpcode::G_VECREDUCE_FMINIMUM:
2999-
case TargetOpcode::G_VECREDUCE_FMAXIMUM: {
2969+
case TargetOpcode::G_VECREDUCE_FMAXIMUM:
30002970
if (TypeIdx != 0)
30012971
return UnableToLegalize;
30022972
Observer.changingInstr(MI);
@@ -3010,25 +2980,6 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
30102980
Observer.changedInstr(MI);
30112981
return Legalized;
30122982
}
3013-
case TargetOpcode::G_VSCALE: {
3014-
MachineOperand &SrcMO = MI.getOperand(1);
3015-
LLVMContext &Ctx = MIRBuilder.getMF().getFunction().getContext();
3016-
unsigned ExtOpc = LI.getExtOpcodeForWideningConstant(
3017-
MRI.getType(MI.getOperand(0).getReg()));
3018-
assert((ExtOpc == TargetOpcode::G_ZEXT || ExtOpc == TargetOpcode::G_SEXT ||
3019-
ExtOpc == TargetOpcode::G_ANYEXT) &&
3020-
"Illegal Extend");
3021-
const APInt &SrcVal = SrcMO.getCImm()->getValue();
3022-
const APInt &Val = (ExtOpc == TargetOpcode::G_SEXT)
3023-
? SrcVal.sext(WideTy.getSizeInBits())
3024-
: SrcVal.zext(WideTy.getSizeInBits());
3025-
Observer.changingInstr(MI);
3026-
SrcMO.setCImm(ConstantInt::get(Ctx, Val));
3027-
widenScalarDst(MI, WideTy);
3028-
Observer.changedInstr(MI);
3029-
return Legalized;
3030-
}
3031-
}
30322983
}
30332984

30342985
static void getUnmergePieces(SmallVectorImpl<Register> &Pieces,

llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -811,13 +811,6 @@ MachineInstrBuilder MachineIRBuilder::buildVScale(const DstOp &Res,
811811
return VScale;
812812
}
813813

814-
MachineInstrBuilder MachineIRBuilder::buildVScale(const DstOp &Res,
815-
const APInt &MinElts) {
816-
ConstantInt *CI =
817-
ConstantInt::get(getMF().getFunction().getContext(), MinElts);
818-
return buildVScale(Res, *CI);
819-
}
820-
821814
static unsigned getIntrinsicOpcode(bool HasSideEffects, bool IsConvergent) {
822815
if (HasSideEffects && IsConvergent)
823816
return TargetOpcode::G_INTRINSIC_CONVERGENT_W_SIDE_EFFECTS;

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

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -408,10 +408,6 @@ RISCVLegalizerInfo::RISCVLegalizerInfo(const RISCVSubtarget &ST)
408408
.clampScalar(0, s32, sXLen)
409409
.lowerForCartesianProduct({s32, sXLen, p0}, {p0});
410410

411-
getActionDefinitionsBuilder(G_VSCALE)
412-
.clampScalar(0, sXLen, sXLen)
413-
.customFor({sXLen});
414-
415411
getLegacyLegalizerInfo().computeTables();
416412
}
417413

@@ -533,48 +529,6 @@ bool RISCVLegalizerInfo::shouldBeInConstantPool(APInt APImm,
533529
return !(!SeqLo.empty() && (SeqLo.size() + 2) <= STI.getMaxBuildIntsCost());
534530
}
535531

536-
bool RISCVLegalizerInfo::legalizeVScale(MachineInstr &MI,
537-
MachineIRBuilder &MIB) const {
538-
const LLT XLenTy(STI.getXLenVT());
539-
Register Dst = MI.getOperand(0).getReg();
540-
541-
// We define our scalable vector types for lmul=1 to use a 64 bit known
542-
// minimum size. e.g. <vscale x 2 x i32>. VLENB is in bytes so we calculate
543-
// vscale as VLENB / 8.
544-
static_assert(RISCV::RVVBitsPerBlock == 64, "Unexpected bits per block!");
545-
if (STI.getRealMinVLen() < RISCV::RVVBitsPerBlock)
546-
// Support for VLEN==32 is incomplete.
547-
return false;
548-
549-
// We assume VLENB is a multiple of 8. We manually choose the best shift
550-
// here because SimplifyDemandedBits isn't always able to simplify it.
551-
uint64_t Val = MI.getOperand(1).getCImm()->getZExtValue();
552-
if (isPowerOf2_64(Val)) {
553-
uint64_t Log2 = Log2_64(Val);
554-
if (Log2 < 3) {
555-
auto VLENB = MIB.buildInstr(RISCV::G_READ_VLENB, {XLenTy}, {});
556-
MIB.buildLShr(Dst, VLENB, MIB.buildConstant(XLenTy, 3 - Log2));
557-
} else if (Log2 > 3) {
558-
auto VLENB = MIB.buildInstr(RISCV::G_READ_VLENB, {XLenTy}, {});
559-
MIB.buildShl(Dst, VLENB, MIB.buildConstant(XLenTy, Log2 - 3));
560-
} else {
561-
MIB.buildInstr(RISCV::G_READ_VLENB, {Dst}, {});
562-
}
563-
} else if ((Val % 8) == 0) {
564-
// If the multiplier is a multiple of 8, scale it down to avoid needing
565-
// to shift the VLENB value.
566-
auto VLENB = MIB.buildInstr(RISCV::G_READ_VLENB, {XLenTy}, {});
567-
MIB.buildMul(Dst, VLENB, MIB.buildConstant(XLenTy, Val / 8));
568-
} else {
569-
auto VLENB = MIB.buildInstr(RISCV::G_READ_VLENB, {XLenTy}, {});
570-
auto VScale = MIB.buildLShr(XLenTy, VLENB, MIB.buildConstant(XLenTy, 3));
571-
MIB.buildMul(Dst, VScale, MIB.buildConstant(XLenTy, Val));
572-
}
573-
574-
MI.eraseFromParent();
575-
return true;
576-
}
577-
578532
bool RISCVLegalizerInfo::legalizeCustom(
579533
LegalizerHelper &Helper, MachineInstr &MI,
580534
LostDebugLocObserver &LocObserver) const {
@@ -632,8 +586,6 @@ bool RISCVLegalizerInfo::legalizeCustom(
632586
}
633587
case TargetOpcode::G_VASTART:
634588
return legalizeVAStart(MI, MIRBuilder);
635-
case TargetOpcode::G_VSCALE:
636-
return legalizeVScale(MI, MIRBuilder);
637589
}
638590

639591
llvm_unreachable("expected switch to return");

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ class RISCVLegalizerInfo : public LegalizerInfo {
4242
GISelChangeObserver &Observer) const;
4343

4444
bool legalizeVAStart(MachineInstr &MI, MachineIRBuilder &MIRBuilder) const;
45-
bool legalizeVScale(MachineInstr &MI, MachineIRBuilder &MIB) const;
4645
};
4746
} // end namespace llvm
4847
#endif

llvm/lib/Target/RISCV/RISCVInstrGISel.td

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,3 @@ def G_FCLASS : RISCVGenericInstruction {
2424
let hasSideEffects = false;
2525
}
2626
def : GINodeEquiv<G_FCLASS, riscv_fclass>;
27-
28-
// Pseudo equivalent to a RISCVISD::READ_VLENB.
29-
def G_READ_VLENB : RISCVGenericInstruction {
30-
let OutOperandList = (outs type0:$dst);
31-
let InOperandList = (ins);
32-
let hasSideEffects = false;
33-
}
34-
def : GINodeEquiv<G_READ_VLENB, riscv_read_vlenb>;

0 commit comments

Comments
 (0)