[llvm] [RISCV] Refine cost on Min/Max reduction with i1 type (PR #79401)

Luke Lau via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 24 23:56:51 PST 2024


================
@@ -936,10 +936,15 @@ RISCVTTIImpl::getMinMaxReductionCost(Intrinsic::ID IID, VectorType *Ty,
     return BaseT::getMinMaxReductionCost(IID, Ty, FMF, CostKind);
 
   std::pair<InstructionCost, MVT> LT = getTypeLegalizationCost(Ty);
-  if (Ty->getElementType()->isIntegerTy(1))
-    // vcpop sequences, see vreduction-mask.ll.  umax, smin actually only
-    // cost 2, but we don't have enough info here so we slightly over cost.
-    return (LT.first - 1) + 3;
+  if (Ty->getElementType()->isIntegerTy(1)) {
+    // InstCombine does following transform:
+    // vector_reduce_u{min,max}(<n x i1>) --> vector_reduce_{and,or}(<n x i1>)
+    // vector_reduce_s{min,max}(<n x i1>) --> vector_reduce_{or,and}(<n x i1>)
+    if ((IID == Intrinsic::umax) || (IID == Intrinsic::smin))
----------------
lukel97 wrote:

Nit, I think you can drop the parentheses?
```suggestion
    if (IID == Intrinsic::umax || IID == Intrinsic::smin)
```

https://github.com/llvm/llvm-project/pull/79401


More information about the llvm-commits mailing list