[llvm] [AArch64] Improve cost computations for odd vector mem ops. (PR #78181)
Amara Emerson via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 15 17:56:17 PST 2024
================
@@ -3176,14 +3176,47 @@ InstructionCost AArch64TTIImpl::getMemoryOpCost(unsigned Opcode, Type *Ty,
if (Ty->isPtrOrPtrVectorTy())
return LT.first;
- // Check truncating stores and extending loads.
- if (useNeonVector(Ty) &&
- Ty->getScalarSizeInBits() != LT.second.getScalarSizeInBits()) {
- // v4i8 types are lowered to scalar a load/store and sshll/xtn.
- if (VT == MVT::v4i8)
- return 2;
- // Otherwise we need to scalarize.
- return cast<FixedVectorType>(Ty)->getNumElements() * 2;
+ if (useNeonVector(Ty)) {
+ // Check truncating stores and extending loads.
+ if (Ty->getScalarSizeInBits() != LT.second.getScalarSizeInBits()) {
+ // v4i8 types are lowered to scalar a load/store and sshll/xtn.
+ if (VT == MVT::v4i8)
+ return 2;
+ // Otherwise we need to scalarize.
+ return cast<FixedVectorType>(Ty)->getNumElements() * 2;
+ }
+ EVT EltVT = VT.getVectorElementType();
+ unsigned EltSize = EltVT.getScalarSizeInBits();
+ if (!isPowerOf2_32(EltSize) || EltSize < 8 || EltSize > 64 ||
+ VT.getVectorNumElements() >= 128 / EltSize || !Alignment ||
----------------
aemerson wrote:
I find it easier to parse with parens around `VT.get... / EltSize`
https://github.com/llvm/llvm-project/pull/78181
More information about the llvm-commits
mailing list