[llvm] BasicAA: Fix assert when indexing address spaces with different sizes (PR #103713)

via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 14 00:59:21 PDT 2024


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-analysis

Author: Matt Arsenault (arsenm)

<details>
<summary>Changes</summary>

Fixes #<!-- -->103500

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


2 Files Affected:

- (modified) llvm/lib/Analysis/BasicAliasAnalysis.cpp (+3) 
- (added) llvm/test/Analysis/BasicAA/issue103500.ll (+18) 


``````````diff
diff --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
index 7bfb23e14aaa79..e11d019b90fa67 100644
--- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp
+++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
@@ -354,6 +354,9 @@ struct CastedValue {
   }
 
   bool hasSameCastsAs(const CastedValue &Other) const {
+    if (V->getType() != Other.V->getType())
+      return false;
+
     if (ZExtBits == Other.ZExtBits && SExtBits == Other.SExtBits &&
         TruncBits == Other.TruncBits)
       return true;
diff --git a/llvm/test/Analysis/BasicAA/issue103500.ll b/llvm/test/Analysis/BasicAA/issue103500.ll
new file mode 100644
index 00000000000000..3532e6e9479e5b
--- /dev/null
+++ b/llvm/test/Analysis/BasicAA/issue103500.ll
@@ -0,0 +1,18 @@
+; RUN: opt -aa-pipeline=basic-aa -passes=aa-eval -print-all-alias-modref-info -disable-output %s 2>&1 | FileCheck %s
+
+target datalayout = "p0:64:64-p5:32:32"
+
+; CHECK: Function: indexing_different_sized_addrspace: 2 pointers, 0 call sites
+; CHECK: MayAlias:	i32* %gep.in.0, i32 addrspace(5)* %gep.in.5.1
+
+define i1 @indexing_different_sized_addrspace(ptr addrspace(5) %arg, i64 %arg1, i32 %arg2) {
+bb:
+  %arg.addrspacecast = addrspacecast ptr addrspace(5) %arg to ptr
+  %gep.in.5 = getelementptr i8, ptr addrspace(5) %arg, i32 16
+  %gep.in.0 = getelementptr i8, ptr %arg.addrspacecast, i64 %arg1
+  %gep.in.5.1 = getelementptr i8, ptr addrspace(5) %gep.in.5, i32 %arg2
+  %load.0 = load i32, ptr %gep.in.0, align 4
+  %load.1 = load i32, ptr addrspace(5) %gep.in.5.1, align 4
+  %cmp = icmp slt i32 %load.0, %load.1
+  ret i1 %cmp
+}

``````````

</details>


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


More information about the llvm-commits mailing list