[llvm] c9c03ed - [SLP]Fix a crash on non-fp operator isFast request
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 30 05:19:38 PDT 2026
Author: Alexey Bataev
Date: 2026-07-30T08:19:33-04:00
New Revision: c9c03ed3991035591d2a4529f323ed9e5e345221
URL: https://github.com/llvm/llvm-project/commit/c9c03ed3991035591d2a4529f323ed9e5e345221
DIFF: https://github.com/llvm/llvm-project/commit/c9c03ed3991035591d2a4529f323ed9e5e345221.diff
LOG: [SLP]Fix a crash on non-fp operator isFast request
isFast should be used only on FPMathOperator kind instructons.
Reviewers:
Pull Request: https://github.com/llvm/llvm-project/pull/213008
Added:
llvm/test/Transforms/SLPVectorizer/ARM/non-fp-math-op.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 ae4d57cb4d063..c2b8d81ff5d41 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -10561,8 +10561,8 @@ BoUpSLP::TreeEntry::EntryState BoUpSLP::getScalarsVectorizationState(
case Instruction::Call: {
if (S.getMainOp()->getType()->isFloatingPointTy() &&
TTI->isFPVectorizationPotentiallyUnsafe() && any_of(VL, [](Value *V) {
- auto *I = dyn_cast<Instruction>(V);
- return I && !I->isFast();
+ auto *FPOp = dyn_cast<FPMathOperator>(V);
+ return FPOp && !FPOp->isFast();
}))
return TreeEntry::NeedToGather;
// Check if the calls are all to the same vectorizable intrinsic or
diff --git a/llvm/test/Transforms/SLPVectorizer/ARM/non-fp-math-op.ll b/llvm/test/Transforms/SLPVectorizer/ARM/non-fp-math-op.ll
new file mode 100644
index 0000000000000..dfea6792cf7fc
--- /dev/null
+++ b/llvm/test/Transforms/SLPVectorizer/ARM/non-fp-math-op.ll
@@ -0,0 +1,20 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
+; RUN: opt -S --passes=slp-vectorizer -mtriple=armv7-unknown-linux-gnueabihf < %s | FileCheck %s
+
+define float @test(ptr %c, float %conv) {
+; CHECK-LABEL: define float @test(
+; CHECK-SAME: ptr [[C:%.*]], float [[CONV:%.*]]) {
+; CHECK-NEXT: [[ENTRY:.*:]]
+; CHECK-NEXT: [[TMP0:%.*]] = load float, ptr [[C]], align 4
+; CHECK-NEXT: [[TMP1:%.*]] = tail call float @llvm.fmuladd.f32(float [[CONV]], float 0.000000e+00, float 0.000000e+00)
+; CHECK-NEXT: [[ADD:%.*]] = fadd float [[TMP0]], [[TMP1]]
+; CHECK-NEXT: ret float [[ADD]]
+;
+entry:
+ %0 = load float, ptr %c, align 4
+ %1 = tail call float @llvm.fmuladd.f32(float %conv, float 0.000000e+00, float 0.000000e+00)
+ %add = fadd float %0, %1
+ ret float %add
+}
+
+declare float @llvm.fmuladd.f32(float, float, float)
More information about the llvm-commits
mailing list