From b3779ef424adbf8011c89eec030ed77075fe4a0c Mon Sep 17 00:00:00 2001 From: Sanjoy Das Date: Tue, 5 Mar 2019 01:15:08 +0000 Subject: [PATCH] PHI nodes are not `FPMathOperator` s Reviewers: chandlerc, arsenm Reviewed By: arsenm Subscribers: wdng, arsenm, mcrosier, jlebar, bixia, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D58887 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@355362 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/IR/Operator.h | 1 + lib/Analysis/IVDescriptors.cpp | 3 +-- unittests/IR/InstructionsTest.cpp | 9 +++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/include/llvm/IR/Operator.h b/include/llvm/IR/Operator.h index 613d4342ef5..fefb13c66d4 100644 --- a/include/llvm/IR/Operator.h +++ b/include/llvm/IR/Operator.h @@ -379,6 +379,7 @@ public: case Instruction::ExtractElement: case Instruction::ShuffleVector: case Instruction::InsertElement: + case Instruction::PHI: return false; default: return V->getType()->isFPOrFPVectorTy(); diff --git a/lib/Analysis/IVDescriptors.cpp b/lib/Analysis/IVDescriptors.cpp index a452a52b94d..555e3c9ed45 100644 --- a/lib/Analysis/IVDescriptors.cpp +++ b/lib/Analysis/IVDescriptors.cpp @@ -549,9 +549,8 @@ RecurrenceDescriptor::isConditionalRdxPattern( RecurrenceDescriptor::InstDesc RecurrenceDescriptor::isRecurrenceInstr(Instruction *I, RecurrenceKind Kind, InstDesc &Prev, bool HasFunNoNaNAttr) { - bool FP = I->getType()->isFloatingPointTy(); Instruction *UAI = Prev.getUnsafeAlgebraInst(); - if (!UAI && FP && !I->isFast()) + if (!UAI && isa(I) && !I->isFast()) UAI = I; // Found an unsafe (unvectorizable) algebra instruction. switch (I->getOpcode()) { diff --git a/unittests/IR/InstructionsTest.cpp b/unittests/IR/InstructionsTest.cpp index 94f37251e60..3b2bd6fa81b 100644 --- a/unittests/IR/InstructionsTest.cpp +++ b/unittests/IR/InstructionsTest.cpp @@ -993,5 +993,14 @@ TEST(InstructionsTest, SkipDebug) { EXPECT_EQ(nullptr, Term->getNextNonDebugInstruction()); } +TEST(InstructionsTest, PhiIsNotFPMathOperator) { + LLVMContext Context; + IRBuilder<> Builder(Context); + MDBuilder MDHelper(Context); + Instruction *I = Builder.CreatePHI(Builder.getDoubleTy(), 0); + EXPECT_FALSE(isa(I)); + I->deleteValue(); +} + } // end anonymous namespace } // end namespace llvm -- 2.50.1