[PATCH] D114002: [LoopVectorize] Check the number of uses of an FAdd before classifying as ordered
Kerry McLaughlin via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 18 08:43:46 PST 2021
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
kmclaughlin marked an inline comment as done.
Closed by commit rGff64b2933a7d: [LoopVectorize] Check the number of uses of an FAdd before classifying as… (authored by kmclaughlin).
Changed prior to commit:
https://reviews.llvm.org/D114002?vs=387632&id=388220#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D114002/new/
https://reviews.llvm.org/D114002
Files:
llvm/lib/Analysis/IVDescriptors.cpp
llvm/test/Transforms/LoopVectorize/AArch64/strict-fadd.ll
Index: llvm/test/Transforms/LoopVectorize/AArch64/strict-fadd.ll
===================================================================
--- llvm/test/Transforms/LoopVectorize/AArch64/strict-fadd.ll
+++ llvm/test/Transforms/LoopVectorize/AArch64/strict-fadd.ll
@@ -931,6 +931,42 @@
ret double %res
}
+; We should not mark the fadd as an ordered reduction here as there are
+; more than 2 uses of the instruction
+define float @fadd_multiple_use(i64 %n) {
+; CHECK-ORDERED-LABEL: @fadd_multiple_use
+; CHECK-ORDERED-LABEL-NOT: vector.body
+
+; CHECK-UNORDERED-LABEL: @fadd_multiple_use
+; CHECK-UNORDERED-LABEL-NOT: vector.body
+
+; CHECK-NOT-VECTORIZED-LABEL: @fadd_multiple_use
+; CHECK-NOT-VECTORIZED-NOT: vector.body
+entry:
+ br label %for.body
+
+for.body:
+ %iv = phi i64 [ 0, %entry ], [ %iv.next2, %bb2 ]
+ %red = phi float [ 0.0, %entry ], [ %fadd, %bb2 ]
+ %phi1 = phi i64 [ 0, %entry ], [ %iv.next, %bb2 ]
+ %fadd = fadd float %red, 1.000000e+00
+ %iv.next = add nsw i64 %phi1, 1
+ %cmp = icmp ult i64 %iv, %n
+ br i1 %cmp, label %bb2, label %bb1
+
+bb1:
+ %phi2 = phi float [ %fadd, %for.body ]
+ ret float %phi2
+
+bb2:
+ %iv.next2 = add nuw nsw i64 %iv, 1
+ br i1 false, label %for.end, label %for.body
+
+for.end:
+ %phi3 = phi float [ %fadd, %bb2 ]
+ ret float %phi3
+}
+
!0 = distinct !{!0, !5, !9, !11}
!1 = distinct !{!1, !5, !10, !11}
!2 = distinct !{!2, !6, !9, !11}
Index: llvm/lib/Analysis/IVDescriptors.cpp
===================================================================
--- llvm/lib/Analysis/IVDescriptors.cpp
+++ llvm/lib/Analysis/IVDescriptors.cpp
@@ -198,7 +198,10 @@
if (Kind != RecurKind::FAdd)
return false;
- if (Exit->getOpcode() != Instruction::FAdd || Exit != ExactFPMathInst)
+ // Ensure the exit instruction is an FAdd, and that it only has one user
+ // other than the reduction PHI
+ if (Exit->getOpcode() != Instruction::FAdd || Exit->hasNUsesOrMore(3) ||
+ Exit != ExactFPMathInst)
return false;
// The only pattern accepted is the one in which the reduction PHI
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D114002.388220.patch
Type: text/x-patch
Size: 2056 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211118/6f0ed819/attachment.bin>
More information about the llvm-commits
mailing list