[llvm] [DAGCombiner] Forward vector store to vector load with extract_subvector (PR #145707)
Min-Yih Hsu via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 20 11:30:32 PDT 2025
================
@@ -20133,6 +20133,27 @@ SDValue DAGCombiner::ForwardStoreValueToDirectLoad(LoadSDNode *LD) {
}
}
+ // Loading a smaller fixed vector type from a stored larger fixed vector type
+ // can be substituted with an extract_subvector, provided the smaller type
+ // entirely contained in the larger type, and an extract_element would be
+ // legal for the given offset.
+ if (TLI.isOperationLegalOrCustom(ISD::EXTRACT_SUBVECTOR, LDType) &&
+ LDType.isFixedLengthVector() && STType.isFixedLengthVector() &&
+ !ST->isTruncatingStore() && LD->getExtensionType() == ISD::NON_EXTLOAD &&
+ LDType.getVectorElementType() == STType.getVectorElementType() &&
+ (Offset * 8 + LDType.getFixedSizeInBits() <=
+ STType.getFixedSizeInBits()) &&
+ (Offset % LDType.getScalarStoreSize() == 0)) {
+ unsigned EltOffset = Offset / LDType.getScalarStoreSize();
+ // The extract index must be a multiple of the result's element count.
+ if (EltOffset % LDType.getVectorElementCount().getFixedValue() == 0) {
----------------
mshockwave wrote:
```suggestion
if (EltOffset % LDType.getVectorNumElements() == 0) {
```
https://github.com/llvm/llvm-project/pull/145707
More information about the llvm-commits
mailing list