Skip to content

Commit 824559b

Browse files
committed
[LV] Split RecurrenceDescriptor into RecurKind + FastMathFlags in LoopUtils. NFC
Split off from llvm#131300, this splits up RecurrenceDescriptor arguments so that arbitrary recurrence kinds may be used down the line.
1 parent f6ad65a commit 824559b

File tree

3 files changed

+14
-21
lines changed

3 files changed

+14
-21
lines changed

llvm/include/llvm/Transforms/Utils/LoopUtils.h

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -411,8 +411,8 @@ Value *createSimpleReduction(IRBuilderBase &B, Value *Src,
411411
RecurKind RdxKind);
412412
/// Overloaded function to generate vector-predication intrinsics for
413413
/// reduction.
414-
Value *createSimpleReduction(VectorBuilder &VB, Value *Src,
415-
const RecurrenceDescriptor &Desc);
414+
Value *createSimpleReduction(VectorBuilder &VB, Value *Src, RecurKind RdxKind,
415+
FastMathFlags FMFs);
416416

417417
/// Create a reduction of the given vector \p Src for a reduction of the
418418
/// kind RecurKind::IAnyOf or RecurKind::FAnyOf. The reduction operation is
@@ -428,14 +428,12 @@ Value *createFindLastIVReduction(IRBuilderBase &B, Value *Src,
428428
const RecurrenceDescriptor &Desc);
429429

430430
/// Create an ordered reduction intrinsic using the given recurrence
431-
/// descriptor \p Desc.
432-
Value *createOrderedReduction(IRBuilderBase &B,
433-
const RecurrenceDescriptor &Desc, Value *Src,
431+
/// kind \p RdxKind.
432+
Value *createOrderedReduction(IRBuilderBase &B, RecurKind RdxKind, Value *Src,
434433
Value *Start);
435434
/// Overloaded function to generate vector-predication intrinsics for ordered
436435
/// reduction.
437-
Value *createOrderedReduction(VectorBuilder &VB,
438-
const RecurrenceDescriptor &Desc, Value *Src,
436+
Value *createOrderedReduction(VectorBuilder &VB, RecurKind RdxKind, Value *Src,
439437
Value *Start);
440438

441439
/// Get the intersection (logical and) of all of the potential IR flags

llvm/lib/Transforms/Utils/LoopUtils.cpp

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1333,36 +1333,31 @@ Value *llvm::createSimpleReduction(IRBuilderBase &Builder, Value *Src,
13331333
}
13341334

13351335
Value *llvm::createSimpleReduction(VectorBuilder &VBuilder, Value *Src,
1336-
const RecurrenceDescriptor &Desc) {
1337-
RecurKind Kind = Desc.getRecurrenceKind();
1336+
RecurKind Kind, FastMathFlags FMFs) {
13381337
assert(!RecurrenceDescriptor::isAnyOfRecurrenceKind(Kind) &&
13391338
!RecurrenceDescriptor::isFindLastIVRecurrenceKind(Kind) &&
13401339
"AnyOf or FindLastIV reductions are not supported.");
13411340
Intrinsic::ID Id = getReductionIntrinsicID(Kind);
13421341
auto *SrcTy = cast<VectorType>(Src->getType());
13431342
Type *SrcEltTy = SrcTy->getElementType();
1344-
Value *Iden = getRecurrenceIdentity(Kind, SrcEltTy, Desc.getFastMathFlags());
1343+
Value *Iden = getRecurrenceIdentity(Kind, SrcEltTy, FMFs);
13451344
Value *Ops[] = {Iden, Src};
13461345
return VBuilder.createSimpleReduction(Id, SrcTy, Ops);
13471346
}
13481347

1349-
Value *llvm::createOrderedReduction(IRBuilderBase &B,
1350-
const RecurrenceDescriptor &Desc,
1348+
Value *llvm::createOrderedReduction(IRBuilderBase &B, RecurKind Kind,
13511349
Value *Src, Value *Start) {
1352-
assert((Desc.getRecurrenceKind() == RecurKind::FAdd ||
1353-
Desc.getRecurrenceKind() == RecurKind::FMulAdd) &&
1350+
assert((Kind == RecurKind::FAdd || Kind == RecurKind::FMulAdd) &&
13541351
"Unexpected reduction kind");
13551352
assert(Src->getType()->isVectorTy() && "Expected a vector type");
13561353
assert(!Start->getType()->isVectorTy() && "Expected a scalar type");
13571354

13581355
return B.CreateFAddReduce(Start, Src);
13591356
}
13601357

1361-
Value *llvm::createOrderedReduction(VectorBuilder &VBuilder,
1362-
const RecurrenceDescriptor &Desc,
1358+
Value *llvm::createOrderedReduction(VectorBuilder &VBuilder, RecurKind Kind,
13631359
Value *Src, Value *Start) {
1364-
assert((Desc.getRecurrenceKind() == RecurKind::FAdd ||
1365-
Desc.getRecurrenceKind() == RecurKind::FMulAdd) &&
1360+
assert((Kind == RecurKind::FAdd || Kind == RecurKind::FMulAdd) &&
13661361
"Unexpected reduction kind");
13671362
assert(Src->getType()->isVectorTy() && "Expected a vector type");
13681363
assert(!Start->getType()->isVectorTy() && "Expected a scalar type");

llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2311,7 +2311,7 @@ void VPReductionRecipe::execute(VPTransformState &State) {
23112311
if (IsOrdered) {
23122312
if (State.VF.isVector())
23132313
NewRed =
2314-
createOrderedReduction(State.Builder, RdxDesc, NewVecOp, PrevInChain);
2314+
createOrderedReduction(State.Builder, Kind, NewVecOp, PrevInChain);
23152315
else
23162316
NewRed = State.Builder.CreateBinOp(
23172317
(Instruction::BinaryOps)RdxDesc.getOpcode(), PrevInChain, NewVecOp);
@@ -2356,9 +2356,9 @@ void VPReductionEVLRecipe::execute(VPTransformState &State) {
23562356

23572357
Value *NewRed;
23582358
if (isOrdered()) {
2359-
NewRed = createOrderedReduction(VBuilder, RdxDesc, VecOp, Prev);
2359+
NewRed = createOrderedReduction(VBuilder, Kind, VecOp, Prev);
23602360
} else {
2361-
NewRed = createSimpleReduction(VBuilder, VecOp, RdxDesc);
2361+
NewRed = createSimpleReduction(VBuilder, VecOp, Kind, getFastMathFlags());
23622362
if (RecurrenceDescriptor::isMinMaxRecurrenceKind(Kind))
23632363
NewRed = createMinMaxOp(Builder, Kind, NewRed, Prev);
23642364
else

0 commit comments

Comments
 (0)