[llvm] 7ec7907 - [SLP] Fix a very long loads offset, being stored in DenseMap

Alexey Bataev via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 16 11:07:33 PST 2026


Author: Alexey Bataev
Date: 2026-02-16T11:07:22-08:00
New Revision: 7ec7907b80f8137f06bfb84b47f4a9b4805402ba

URL: https://github.com/llvm/llvm-project/commit/7ec7907b80f8137f06bfb84b47f4a9b4805402ba
DIFF: https://github.com/llvm/llvm-project/commit/7ec7907b80f8137f06bfb84b47f4a9b4805402ba.diff

LOG: [SLP] Fix a very long loads offset, being stored in DenseMap

Added a check for a very long offset to avoid a crash in the compiler

Fixes #181682

Added: 
    llvm/test/Transforms/SLPVectorizer/loads-with-large-distance.ll

Modified: 
    llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index b29367fa1543f..e50fb370ad7d2 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -7231,6 +7231,10 @@ bool BoUpSLP::analyzeRtStrideCandidate(ArrayRef<Value *> PointerOps,
         if (!SC)
           continue;
         Offset = SC->getAPInt().getSExtValue();
+        if (Offset >= std::numeric_limits<int64_t>::max() - 1) {
+          Offset = 0;
+          continue;
+        }
         break;
       }
     }

diff  --git a/llvm/test/Transforms/SLPVectorizer/loads-with-large-distance.ll b/llvm/test/Transforms/SLPVectorizer/loads-with-large-distance.ll
new file mode 100644
index 0000000000000..77cad89ac88ac
--- /dev/null
+++ b/llvm/test/Transforms/SLPVectorizer/loads-with-large-distance.ll
@@ -0,0 +1,21 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
+; RUN: opt -passes=slp-vectorizer -S < %s | FileCheck %s
+
+define void @test() {
+; CHECK-LABEL: define void @test() {
+; CHECK-NEXT:  [[ENTRY:.*:]]
+; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr i8, ptr addrspace(1) null, i64 9223372036854775807
+; CHECK-NEXT:    [[A:%.*]] = load float, ptr addrspace(1) [[TMP0]], align 4
+; CHECK-NEXT:    [[B:%.*]] = load float, ptr addrspace(1) null, align 4
+; CHECK-NEXT:    [[C:%.*]] = fadd float [[A]], [[B]]
+; CHECK-NEXT:    store float [[C]], ptr addrspace(1) null, align 4
+; CHECK-NEXT:    ret void
+;
+entry:
+  %0 = getelementptr i8, ptr addrspace(1) null, i64 9223372036854775807
+  %a = load float, ptr addrspace(1) %0, align 4
+  %b = load float, ptr addrspace(1) null, align 4
+  %c = fadd float %a, %b
+  store float %c, ptr addrspace(1) null, align 4
+  ret void
+}


        


More information about the llvm-commits mailing list