[llvm] RFC: [TTI] Assume casts between aliasing addrspaces are valid. NFCI. (PR #137969)

via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 30 07:16:42 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-analysis

Author: Jay Foad (jayfoad)

<details>
<summary>Changes</summary>

Change the default implementation of isValidAddrSpaceCast to assume that
casts between any address spaces satisfying addrspacesMayAlias are
valid. This seems like a reasonable default assumption and targets can
still override it if they need something different.

This simplifies away the AMDGPU implementation.


---
Full diff: https://github.com/llvm/llvm-project/pull/137969.diff


3 Files Affected:

- (modified) llvm/include/llvm/Analysis/TargetTransformInfoImpl.h (+1-1) 
- (modified) llvm/include/llvm/CodeGen/BasicTTIImpl.h (-4) 
- (modified) llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.h (-21) 


``````````diff
diff --git a/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h b/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
index cd0e8769f5eb6..93ff091d4599a 100644
--- a/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
+++ b/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
@@ -136,7 +136,7 @@ class TargetTransformInfoImplBase {
   virtual bool isAlwaysUniform(const Value *V) const { return false; }
 
   virtual bool isValidAddrSpaceCast(unsigned FromAS, unsigned ToAS) const {
-    return false;
+    return addrspacesMayAlias(FromAS, ToAS);
   }
 
   virtual bool addrspacesMayAlias(unsigned AS0, unsigned AS1) const {
diff --git a/llvm/include/llvm/CodeGen/BasicTTIImpl.h b/llvm/include/llvm/CodeGen/BasicTTIImpl.h
index 6e2f65c01bf77..5cb8136aeb624 100644
--- a/llvm/include/llvm/CodeGen/BasicTTIImpl.h
+++ b/llvm/include/llvm/CodeGen/BasicTTIImpl.h
@@ -387,10 +387,6 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
 
   bool isAlwaysUniform(const Value *V) const override { return false; }
 
-  bool isValidAddrSpaceCast(unsigned FromAS, unsigned ToAS) const override {
-    return false;
-  }
-
   bool addrspacesMayAlias(unsigned AS0, unsigned AS1) const override {
     return true;
   }
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.h b/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.h
index f6f7bd4bfcf5b..9b0adcaa19aea 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.h
+++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.h
@@ -177,27 +177,6 @@ class GCNTTIImpl final : public BasicTTIImplBase<GCNTTIImpl> {
   bool isSourceOfDivergence(const Value *V) const override;
   bool isAlwaysUniform(const Value *V) const override;
 
-  bool isValidAddrSpaceCast(unsigned FromAS, unsigned ToAS) const override {
-    // Address space casts must cast between different address spaces.
-    if (FromAS == ToAS)
-      return false;
-
-    if (FromAS == AMDGPUAS::FLAT_ADDRESS)
-      return AMDGPU::isExtendedGlobalAddrSpace(ToAS) ||
-             ToAS == AMDGPUAS::LOCAL_ADDRESS ||
-             ToAS == AMDGPUAS::PRIVATE_ADDRESS;
-
-    if (AMDGPU::isExtendedGlobalAddrSpace(FromAS))
-      return AMDGPU::isFlatGlobalAddrSpace(ToAS) ||
-             ToAS == AMDGPUAS::CONSTANT_ADDRESS_32BIT;
-
-    if (FromAS == AMDGPUAS::LOCAL_ADDRESS ||
-        FromAS == AMDGPUAS::PRIVATE_ADDRESS)
-      return ToAS == AMDGPUAS::FLAT_ADDRESS;
-
-    return false;
-  }
-
   bool addrspacesMayAlias(unsigned AS0, unsigned AS1) const override {
     return AMDGPU::addrspacesMayAlias(AS0, AS1);
   }

``````````

</details>


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


More information about the llvm-commits mailing list