From: Sanjoy Das Date: Tue, 5 Mar 2019 01:15:08 +0000 (+0000) Subject: PHI nodes are not `FPMathOperator` s X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b3779ef424adbf8011c89eec030ed77075fe4a0c;p=llvm 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 --- 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