diff --git a/llvm/include/llvm/CodeGen/TargetLowering.h b/llvm/include/llvm/CodeGen/TargetLowering.h --- a/llvm/include/llvm/CodeGen/TargetLowering.h +++ b/llvm/include/llvm/CodeGen/TargetLowering.h @@ -1613,7 +1613,7 @@ /// target). virtual bool allowsMemoryAccess(LLVMContext &Context, const DataLayout &DL, EVT VT, - unsigned AddrSpace = 0, unsigned Alignment = 1, + unsigned AddrSpace = 0, Align Alignment = Align(1), MachineMemOperand::Flags Flags = MachineMemOperand::MONone, bool *Fast = nullptr) const; diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -4881,7 +4881,7 @@ const Align LDSTAlign = LDST->getAlign(); const Align NarrowAlign = commonAlignment(LDSTAlign, ByteShAmt); if (!TLI.allowsMemoryAccess(*DAG.getContext(), DAG.getDataLayout(), MemVT, - LDST->getAddressSpace(), NarrowAlign.value(), + LDST->getAddressSpace(), NarrowAlign, LDST->getMemOperand()->getFlags())) return false; } @@ -8498,7 +8498,7 @@ SDLoc DL(RHS); uint64_t PtrOff = IsFSHL ? (((BitWidth - ShAmt) % BitWidth) / 8) : (ShAmt / 8); - unsigned NewAlign = MinAlign(RHS->getAlignment(), PtrOff); + Align NewAlign = commonAlignment(RHS->getAlign(), PtrOff); bool Fast = false; if (TLI.allowsMemoryAccess(*DAG.getContext(), DAG.getDataLayout(), VT, RHS->getAddressSpace(), NewAlign, diff --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp --- a/llvm/lib/CodeGen/TargetLoweringBase.cpp +++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp @@ -1599,19 +1599,21 @@ Fast); } -bool TargetLoweringBase::allowsMemoryAccess( - LLVMContext &Context, const DataLayout &DL, EVT VT, unsigned AddrSpace, - unsigned Alignment, MachineMemOperand::Flags Flags, bool *Fast) const { - return allowsMemoryAccessForAlignment(Context, DL, VT, AddrSpace, Alignment, - Flags, Fast); +bool TargetLoweringBase::allowsMemoryAccess(LLVMContext &Context, + const DataLayout &DL, EVT VT, + unsigned AddrSpace, Align Alignment, + MachineMemOperand::Flags Flags, + bool *Fast) const { + return allowsMemoryAccessForAlignment(Context, DL, VT, AddrSpace, + Alignment.value(), Flags, Fast); } bool TargetLoweringBase::allowsMemoryAccess(LLVMContext &Context, const DataLayout &DL, EVT VT, const MachineMemOperand &MMO, bool *Fast) const { - return allowsMemoryAccess(Context, DL, VT, MMO.getAddrSpace(), - MMO.getAlign().value(), MMO.getFlags(), Fast); + return allowsMemoryAccess(Context, DL, VT, MMO.getAddrSpace(), MMO.getAlign(), + MMO.getFlags(), Fast); } BranchProbability TargetLoweringBase::getPredictableBranchThreshold() const { diff --git a/llvm/lib/Target/Hexagon/HexagonISelLowering.h b/llvm/lib/Target/Hexagon/HexagonISelLowering.h --- a/llvm/lib/Target/Hexagon/HexagonISelLowering.h +++ b/llvm/lib/Target/Hexagon/HexagonISelLowering.h @@ -306,8 +306,9 @@ const AttributeList &FuncAttributes) const override; bool allowsMemoryAccess(LLVMContext &Context, const DataLayout &DL, EVT VT, - unsigned AddrSpace, unsigned Alignment, MachineMemOperand::Flags Flags, - bool *Fast) const override; + unsigned AddrSpace, Align Alignment, + MachineMemOperand::Flags Flags, + bool *Fast) const override; bool allowsMisalignedMemoryAccesses(EVT VT, unsigned AddrSpace, unsigned Alignment, MachineMemOperand::Flags Flags, bool *Fast) @@ -408,10 +409,11 @@ VectorPair opSplit(SDValue Vec, const SDLoc &dl, SelectionDAG &DAG) const; SDValue opCastElem(SDValue Vec, MVT ElemTy, SelectionDAG &DAG) const; - bool allowsHvxMemoryAccess(MVT VecTy, unsigned Alignment, - MachineMemOperand::Flags Flags, bool *Fast) const; - bool allowsHvxMisalignedMemoryAccesses(MVT VecTy, unsigned Align, - MachineMemOperand::Flags Flags, bool *Fast) const; + bool allowsHvxMemoryAccess(MVT VecTy, MachineMemOperand::Flags Flags, + bool *Fast) const; + bool allowsHvxMisalignedMemoryAccesses(MVT VecTy, + MachineMemOperand::Flags Flags, + bool *Fast) const; bool isHvxSingleTy(MVT Ty) const; bool isHvxPairTy(MVT Ty) const; diff --git a/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp b/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp --- a/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp +++ b/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp @@ -3394,12 +3394,12 @@ return MVT::Other; } -bool HexagonTargetLowering::allowsMemoryAccess(LLVMContext &Context, - const DataLayout &DL, EVT VT, unsigned AddrSpace, unsigned Alignment, - MachineMemOperand::Flags Flags, bool *Fast) const { +bool HexagonTargetLowering::allowsMemoryAccess( + LLVMContext &Context, const DataLayout &DL, EVT VT, unsigned AddrSpace, + Align Alignment, MachineMemOperand::Flags Flags, bool *Fast) const { MVT SVT = VT.getSimpleVT(); if (Subtarget.isHVXVectorType(SVT, true)) - return allowsHvxMemoryAccess(SVT, Alignment, Flags, Fast); + return allowsHvxMemoryAccess(SVT, Flags, Fast); return TargetLoweringBase::allowsMemoryAccess( Context, DL, VT, AddrSpace, Alignment, Flags, Fast); } @@ -3409,7 +3409,7 @@ MachineMemOperand::Flags Flags, bool *Fast) const { MVT SVT = VT.getSimpleVT(); if (Subtarget.isHVXVectorType(SVT, true)) - return allowsHvxMisalignedMemoryAccesses(SVT, Alignment, Flags, Fast); + return allowsHvxMisalignedMemoryAccesses(SVT, Flags, Fast); if (Fast) *Fast = false; return false; diff --git a/llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp b/llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp --- a/llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp +++ b/llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp @@ -299,9 +299,8 @@ Ty.getVectorElementType() == MVT::i1; } -bool -HexagonTargetLowering::allowsHvxMemoryAccess(MVT VecTy, unsigned Alignment, - MachineMemOperand::Flags Flags, bool *Fast) const { +bool HexagonTargetLowering::allowsHvxMemoryAccess( + MVT VecTy, MachineMemOperand::Flags Flags, bool *Fast) const { // Bool vectors are excluded by default, but make it explicit to // emphasize that bool vectors cannot be loaded or stored. // Also, disallow double vector stores (to prevent unnecessary @@ -315,9 +314,8 @@ return true; } -bool -HexagonTargetLowering::allowsHvxMisalignedMemoryAccesses(MVT VecTy, - unsigned Align, MachineMemOperand::Flags Flags, bool *Fast) const { +bool HexagonTargetLowering::allowsHvxMisalignedMemoryAccesses( + MVT VecTy, MachineMemOperand::Flags Flags, bool *Fast) const { if (!Subtarget.isHVXVectorType(VecTy)) return false; // XXX Should this be false? vmemu are a bit slower than vmem.