[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