[llvm] [RISCV][GlobalISel] Legalize Scalable Vector Loads and Stores (PR #84965)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 27 23:07:36 PDT 2024
================
@@ -649,6 +680,61 @@ bool RISCVLegalizerInfo::legalizeExt(MachineInstr &MI,
return true;
}
+bool RISCVLegalizerInfo::legalizeLoadStore(MachineInstr &MI,
+ MachineIRBuilder &MIB) const {
+ MachineRegisterInfo &MRI = *MIB.getMRI();
+ MachineFunction *MF = MI.getParent()->getParent();
+ const DataLayout &DL = MIB.getDataLayout();
+ LLVMContext &Ctx = MF->getFunction().getContext();
+
+ Register DstReg = MI.getOperand(0).getReg();
+ Register PtrReg = MI.getOperand(1).getReg();
+ LLT DataTy = MRI.getType(DstReg);
+ assert(DataTy.isVector() && "Expect vector load.");
+ assert(STI.hasVInstructions() &&
+ (DataTy.getScalarSizeInBits() != 64 || STI.hasVInstructionsI64()) &&
+ (DataTy.getElementCount().getKnownMinValue() != 1 ||
+ STI.getELen() == 64) &&
+ "Load type must be legal integer or floating point vector.");
+
+ assert(MI.hasOneMemOperand() &&
+ "Load instructions only have one MemOperand.");
+ MachineMemOperand *MMO = *MI.memoperands_begin();
+ Align Alignment = MMO->getAlign();
+
+ const auto *TLI = STI.getTargetLowering();
+ EVT VT = EVT::getEVT(getTypeForLLT(DataTy, Ctx));
+
+ if (TLI->allowsMemoryAccessForAlignment(Ctx, DL, VT, *MMO))
+ return true;
----------------
arsenm wrote:
This should really be considered in the default lower action. I've had a patch for years I need to get back to
https://github.com/llvm/llvm-project/pull/84965
More information about the llvm-commits
mailing list