[llvm] [GlobalISel] Widen vector loads from aligned ptrs (PR #144309)
David Green via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 16 23:34:14 PDT 2025
================
@@ -4072,6 +4072,19 @@ LegalizerHelper::LegalizeResult LegalizerHelper::lowerLoad(GAnyLoad &LoadMI) {
if (MemTy != DstTy)
return UnableToLegalize;
+ Align Alignment = LoadMI.getAlign();
+ if (Alignment.value() * 8 > MemSizeInBits &&
+ isPowerOf2_64(DstTy.getScalarSizeInBits())) {
+ LLT MoreTy = LLT::fixed_vector(NextPowerOf2(DstTy.getNumElements()),
+ DstTy.getElementType());
+ MachineMemOperand *NewMMO = MF.getMachineMemOperand(&MMO, 0, MoreTy);
+ auto NewLoad = MIRBuilder.buildLoad(MoreTy, PtrReg, *NewMMO);
----------------
davemgreen wrote:
I have added a test - it looks like when creating a MMO from another it does not copy the range metadata.
```
MachineMemOperand *MachineFunction::getMachineMemOperand(
const MachineMemOperand *MMO, const MachinePointerInfo &PtrInfo, LLT Ty) {
return new (Allocator)
MachineMemOperand(PtrInfo, MMO->getFlags(), Ty, MMO->getBaseAlign(),
AAMDNodes(), nullptr, MMO->getSyncScopeID(),
MMO->getSuccessOrdering(), MMO->getFailureOrdering());
}
```
https://github.com/llvm/llvm-project/pull/144309
More information about the llvm-commits
mailing list