diff --git a/llvm/lib/Analysis/IVDescriptors.cpp b/llvm/lib/Analysis/IVDescriptors.cpp index b8c540ce4b99d..743b183d672a0 100644 --- a/llvm/lib/Analysis/IVDescriptors.cpp +++ b/llvm/lib/Analysis/IVDescriptors.cpp @@ -1226,10 +1226,6 @@ unsigned RecurrenceDescriptor::getOpcode(RecurKind Kind) { case RecurKind::Mul: return Instruction::Mul; case RecurKind::AnyOf: - case RecurKind::FindFirstIVSMin: - case RecurKind::FindFirstIVUMin: - case RecurKind::FindLastIVSMax: - case RecurKind::FindLastIVUMax: case RecurKind::Or: return Instruction::Or; case RecurKind::And: @@ -1253,6 +1249,11 @@ unsigned RecurrenceDescriptor::getOpcode(RecurKind Kind) { case RecurKind::FMaximumNum: case RecurKind::FMinimumNum: return Instruction::FCmp; + case RecurKind::FindFirstIVSMin: + case RecurKind::FindFirstIVUMin: + case RecurKind::FindLastIVSMax: + case RecurKind::FindLastIVUMax: + return Instruction::Select; default: llvm_unreachable("Unknown recurrence operation"); } diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp index cee08ef94aeb5..6ee2a3a299bd2 100644 --- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -6515,9 +6515,14 @@ void LoopVectorizationCostModel::collectInLoopReductions() { if (RdxDesc.getRecurrenceType() != Phi->getType()) continue; + // In-loop AnyOf and FindIV reductions are not yet supported. + RecurKind Kind = RdxDesc.getRecurrenceKind(); + if (RecurrenceDescriptor::isAnyOfRecurrenceKind(Kind) || + RecurrenceDescriptor::isFindIVRecurrenceKind(Kind)) + continue; + // If the target would prefer this reduction to happen "in-loop", then we // want to record it as such. - RecurKind Kind = RdxDesc.getRecurrenceKind(); if (!PreferInLoopReductions && !useOrderedReductions(RdxDesc) && !TTI.preferInLoopReduction(Kind, Phi->getType())) continue;