In the middle of removing RVV code.
This commit is contained in:
parent
f1eff7fcfe
commit
35633e31e3
|
@ -47,8 +47,6 @@ private:
|
|||
MachineBasicBlock::iterator &NextMBBI);
|
||||
bool expandCCOp(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
|
||||
MachineBasicBlock::iterator &NextMBBI);
|
||||
bool expandVSPILL(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI);
|
||||
bool expandVRELOAD(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI);
|
||||
};
|
||||
|
||||
char RISCVExpandPseudo::ID = 0;
|
||||
|
@ -143,81 +141,6 @@ bool RISCVExpandPseudo::expandCCOp(MachineBasicBlock &MBB,
|
|||
return true;
|
||||
}
|
||||
|
||||
bool RISCVExpandPseudo::expandVSPILL(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MBBI) {
|
||||
const TargetRegisterInfo *TRI =
|
||||
MBB.getParent()->getSubtarget().getRegisterInfo();
|
||||
DebugLoc DL = MBBI->getDebugLoc();
|
||||
Register SrcReg = MBBI->getOperand(0).getReg();
|
||||
Register Base = MBBI->getOperand(1).getReg();
|
||||
Register VL = MBBI->getOperand(2).getReg();
|
||||
auto ZvlssegInfo = RISCV::isRVVSpillForZvlsseg(MBBI->getOpcode());
|
||||
if (!ZvlssegInfo)
|
||||
return false;
|
||||
unsigned NF = ZvlssegInfo->first;
|
||||
unsigned LMUL = ZvlssegInfo->second;
|
||||
assert(NF * LMUL <= 8 && "Invalid NF/LMUL combinations.");
|
||||
unsigned Opcode = RISCV::VS1R_V;
|
||||
unsigned SubRegIdx = RISCV::sub_vrm1_0;
|
||||
static_assert(RISCV::sub_vrm1_7 == RISCV::sub_vrm1_0 + 7,
|
||||
"Unexpected subreg numbering");
|
||||
|
||||
assert(LMUL == 1 && "LMUL must be 1, 2, or 4.");
|
||||
|
||||
for (unsigned I = 0; I < NF; ++I) {
|
||||
// Adding implicit-use of super register to describe we are using part of
|
||||
// super register, that prevents machine verifier complaining when part of
|
||||
// subreg is undef, see comment in MachineVerifier::checkLiveness for more
|
||||
// detail.
|
||||
BuildMI(MBB, MBBI, DL, TII->get(Opcode))
|
||||
.addReg(TRI->getSubReg(SrcReg, SubRegIdx + I))
|
||||
.addReg(Base)
|
||||
.addMemOperand(*(MBBI->memoperands_begin()))
|
||||
.addReg(SrcReg, RegState::Implicit);
|
||||
if (I != NF - 1)
|
||||
BuildMI(MBB, MBBI, DL, TII->get(RISCV::ADD), Base)
|
||||
.addReg(Base)
|
||||
.addReg(VL);
|
||||
}
|
||||
MBBI->eraseFromParent();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RISCVExpandPseudo::expandVRELOAD(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MBBI) {
|
||||
const TargetRegisterInfo *TRI =
|
||||
MBB.getParent()->getSubtarget().getRegisterInfo();
|
||||
DebugLoc DL = MBBI->getDebugLoc();
|
||||
Register DestReg = MBBI->getOperand(0).getReg();
|
||||
Register Base = MBBI->getOperand(1).getReg();
|
||||
Register VL = MBBI->getOperand(2).getReg();
|
||||
auto ZvlssegInfo = RISCV::isRVVSpillForZvlsseg(MBBI->getOpcode());
|
||||
if (!ZvlssegInfo)
|
||||
return false;
|
||||
unsigned NF = ZvlssegInfo->first;
|
||||
unsigned LMUL = ZvlssegInfo->second;
|
||||
assert(NF * LMUL <= 8 && "Invalid NF/LMUL combinations.");
|
||||
unsigned Opcode = RISCV::VL1RE8_V;
|
||||
unsigned SubRegIdx = RISCV::sub_vrm1_0;
|
||||
static_assert(RISCV::sub_vrm1_7 == RISCV::sub_vrm1_0 + 7,
|
||||
"Unexpected subreg numbering");
|
||||
|
||||
assert(LMUL == 1 && "LMUL must be 1, 2, or 4.");
|
||||
|
||||
for (unsigned I = 0; I < NF; ++I) {
|
||||
BuildMI(MBB, MBBI, DL, TII->get(Opcode),
|
||||
TRI->getSubReg(DestReg, SubRegIdx + I))
|
||||
.addReg(Base)
|
||||
.addMemOperand(*(MBBI->memoperands_begin()));
|
||||
if (I != NF - 1)
|
||||
BuildMI(MBB, MBBI, DL, TII->get(RISCV::ADD), Base)
|
||||
.addReg(Base)
|
||||
.addReg(VL);
|
||||
}
|
||||
MBBI->eraseFromParent();
|
||||
return true;
|
||||
}
|
||||
|
||||
class RISCVPreRAExpandPseudo : public MachineFunctionPass {
|
||||
public:
|
||||
const RISCVInstrInfo *TII;
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -572,13 +572,8 @@ public:
|
|||
// when calculating fractional LMUL.
|
||||
return ((VectorBits / EltSize) * MinSize) / RISCV::RVVBitsPerBlock;
|
||||
};
|
||||
static unsigned getRegClassIDForLMUL(RISCVII::VLMUL LMul);
|
||||
static unsigned getSubregIndexByMVT(MVT VT, unsigned Index);
|
||||
static unsigned getRegClassIDForVecVT(MVT VT);
|
||||
static std::pair<unsigned, unsigned>
|
||||
decomposeSubvectorInsertExtractToSubRegs(MVT VecVT, MVT SubVecVT,
|
||||
unsigned InsertExtractIdx,
|
||||
const RISCVRegisterInfo *TRI);
|
||||
MVT getContainerForFixedLengthVector(MVT VT) const;
|
||||
|
||||
bool shouldRemoveExtendFromGSIndex(EVT IndexVT, EVT DataVT) const override;
|
||||
|
@ -643,58 +638,11 @@ private:
|
|||
SDValue lowerRETURNADDR(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerShiftLeftParts(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerShiftRightParts(SDValue Op, SelectionDAG &DAG, bool IsSRA) const;
|
||||
SDValue lowerSPLAT_VECTOR_PARTS(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerVectorMaskSplat(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerVectorMaskExt(SDValue Op, SelectionDAG &DAG,
|
||||
int64_t ExtTrueVal) const;
|
||||
SDValue lowerVectorMaskTruncLike(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerVectorTruncLike(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerVectorFPExtendOrRoundLike(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerINSERT_VECTOR_ELT(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerEXTRACT_VECTOR_ELT(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerINTRINSIC_WO_CHAIN(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerINTRINSIC_W_CHAIN(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerINTRINSIC_VOID(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerVPREDUCE(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerVECREDUCE(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerVectorMaskVecReduction(SDValue Op, SelectionDAG &DAG,
|
||||
bool IsVP) const;
|
||||
SDValue lowerFPVECREDUCE(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerINSERT_SUBVECTOR(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerEXTRACT_SUBVECTOR(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerSTEP_VECTOR(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerVECTOR_REVERSE(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerVECTOR_SPLICE(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerABS(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerMaskedLoad(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerMaskedStore(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerFixedLengthVectorFCOPYSIGNToRVV(SDValue Op,
|
||||
SelectionDAG &DAG) const;
|
||||
SDValue lowerMaskedGather(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerMaskedScatter(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerFixedLengthVectorLoadToRVV(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerFixedLengthVectorStoreToRVV(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerFixedLengthVectorSetccToRVV(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerFixedLengthVectorLogicOpToRVV(SDValue Op, SelectionDAG &DAG,
|
||||
unsigned MaskOpc,
|
||||
unsigned VecOpc) const;
|
||||
SDValue lowerFixedLengthVectorShiftToRVV(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerFixedLengthVectorSelectToRVV(SDValue Op,
|
||||
SelectionDAG &DAG) const;
|
||||
SDValue lowerToScalableOp(SDValue Op, SelectionDAG &DAG, unsigned NewOpc,
|
||||
bool HasMergeOp = false, bool HasMask = true) const;
|
||||
SDValue lowerVPOp(SDValue Op, SelectionDAG &DAG, unsigned RISCVISDOpc,
|
||||
bool HasMergeOp = false) const;
|
||||
SDValue lowerLogicVPOp(SDValue Op, SelectionDAG &DAG, unsigned MaskOpc,
|
||||
unsigned VecOpc) const;
|
||||
SDValue lowerVPExtMaskOp(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerVPSetCCMaskOp(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerVPFPIntConvOp(SDValue Op, SelectionDAG &DAG,
|
||||
unsigned RISCVISDOpc) const;
|
||||
SDValue lowerVPStridedLoad(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerVPStridedStore(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerFixedLengthVectorExtendToRVV(SDValue Op, SelectionDAG &DAG,
|
||||
unsigned ExtendOpc) const;
|
||||
SDValue lowerGET_ROUNDING(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue lowerSET_ROUNDING(SDValue Op, SelectionDAG &DAG) const;
|
||||
|
||||
|
|
|
@ -209,11 +209,6 @@ bool isZEXT_B(const MachineInstr &MI);
|
|||
// expect to see a FrameIndex operand.
|
||||
bool isRVVSpill(const MachineInstr &MI);
|
||||
|
||||
std::optional<std::pair<unsigned, unsigned>>
|
||||
isRVVSpillForZvlsseg(unsigned Opcode);
|
||||
|
||||
bool isFaultFirstLoad(const MachineInstr &MI);
|
||||
|
||||
// Implemented in RISCVGenInstrInfo.inc
|
||||
int16_t getNamedOperandIdx(uint16_t Opcode, uint16_t NamedIndex);
|
||||
|
||||
|
|
Loading…
Reference in New Issue