[llvm] update P7 v4i8 load cost (PR #108261)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 18 14:09:04 PDT 2024
================
@@ -802,12 +802,18 @@ InstructionCost PPCTTIImpl::getMemoryOpCost(unsigned Opcode, Type *Src,
// explicitly check this case. There are also corresponding store
// instructions.
unsigned MemBytes = Src->getPrimitiveSizeInBits();
- if (ST->hasVSX() && IsAltivecType &&
- (MemBytes == 64 || (ST->hasP8Vector() && MemBytes == 32)))
- return 1;
+ unsigned SrcBytes = LT.second.getStoreSize();
+ if (ST->hasVSX() && IsAltivecType) {
+ if (MemBytes == 64 || (ST->hasP8Vector() && MemBytes == 32))
+ return 1;
+
+ // Use lfiwax/xxspltw
+ Align AlignBytes = Alignment ? *Alignment : Align(1);
+ if (Opcode == Instruction::Load && MemBytes == 32 && AlignBytes < SrcBytes)
----------------
RolandF77 wrote:
If a partial vector (< 128 bits) is being loaded with a full vector aligned address (>= 128 bits), the load will be done as a full vector load since we know from alignment that it is safe. Therefore the cost of a partial vector load does
not apply.
https://github.com/llvm/llvm-project/pull/108261
More information about the llvm-commits
mailing list