[llvm] [AMDGPU] narrow only on store to pow of 2 mem location (PR #150093)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 25 06:49:53 PDT 2025


================
@@ -1618,11 +1618,21 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST_,
               // May need relegalization for the scalars.
               return std::pair(0, EltTy);
             })
-    .minScalar(0, S32)
-    .narrowScalarIf(isWideScalarExtLoadTruncStore(0), changeTo(0, S32))
-    .widenScalarToNextPow2(0)
-    .moreElementsIf(vectorSmallerThan(0, 32), moreEltsToNext32Bit(0))
-    .lower();
+        .minScalar(0, S32)
+        // only narrow to mem size if mem size is power of 2
+        .narrowScalarIf(
+            [=](const LegalityQuery &Query) -> bool {
+              unsigned MemSize = Query.MMODescrs[0].MemoryTy.getSizeInBits();
+              return isWideScalarExtLoadTruncStore(0)(Query) &&
+                     isPowerOf2_64(MemSize);
+            },
+            [=](const LegalityQuery &Query) {
+              unsigned MemSize = Query.MMODescrs[0].MemoryTy.getSizeInBits();
+              return std::make_pair(0, LLT::scalar(MemSize));
+            })
+        .widenScalarToNextPow2(0)
+        .moreElementsIf(vectorSmallerThan(0, 32), moreEltsToNext32Bit(0))
----------------
arsenm wrote:

Can we do something about this API? We shouldn't have so much complexity to handle the odd cases. A normal set of legalization helpers should be easy to use that cover the odd cases 

https://github.com/llvm/llvm-project/pull/150093


More information about the llvm-commits mailing list