[llvm-branch-commits] [llvm] release/22.x: [SLP] Fix a very long loads offset, being stored in DenseMap (PR #193589)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Apr 22 13:50:32 PDT 2026
https://github.com/llvmbot created https://github.com/llvm/llvm-project/pull/193589
Backport 7ec7907b80f8137f06bfb84b47f4a9b4805402ba
Requested by: @nikic
>From 685ad699d53182c3e39427f27cfebcf228190b00 Mon Sep 17 00:00:00 2001
From: Alexey Bataev <a.bataev at outlook.com>
Date: Mon, 16 Feb 2026 11:05:58 -0800
Subject: [PATCH] [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
(cherry picked from commit 7ec7907b80f8137f06bfb84b47f4a9b4805402ba)
---
.../Transforms/Vectorize/SLPVectorizer.cpp | 4 ++++
.../loads-with-large-distance.ll | 21 +++++++++++++++++++
2 files changed, 25 insertions(+)
create mode 100644 llvm/test/Transforms/SLPVectorizer/loads-with-large-distance.ll
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index 0a6b2545bc461..37385bc245ffe 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -7199,6 +7199,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-branch-commits
mailing list