[llvm] Add `llvm.vector.partial.reduce.fadd` intrinsic (PR #159776)

Sander de Smalen via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 15 02:04:56 PDT 2025


================
@@ -12062,22 +12062,29 @@ SDValue TargetLowering::expandPartialReduceMLA(SDNode *N,
       EVT::getVectorVT(*DAG.getContext(), AccVT.getVectorElementType(),
                        MulOpVT.getVectorElementCount());
 
-  unsigned ExtOpcLHS = N->getOpcode() == ISD::PARTIAL_REDUCE_UMLA
-                      ? ISD::ZERO_EXTEND
-                      : ISD::SIGN_EXTEND;
-  unsigned ExtOpcRHS = N->getOpcode() == ISD::PARTIAL_REDUCE_SMLA
-                      ? ISD::SIGN_EXTEND
-                      : ISD::ZERO_EXTEND;
+  unsigned ExtOpcLHS =
+      N->getOpcode() == ISD::PARTIAL_REDUCE_FMLA   ? ISD::FP_EXTEND
+      : N->getOpcode() == ISD::PARTIAL_REDUCE_UMLA ? ISD::ZERO_EXTEND
+                                                   : ISD::SIGN_EXTEND;
+  unsigned ExtOpcRHS =
+      N->getOpcode() == ISD::PARTIAL_REDUCE_FMLA   ? ISD::FP_EXTEND
+      : N->getOpcode() == ISD::PARTIAL_REDUCE_SMLA ? ISD::SIGN_EXTEND
+                                                   : ISD::ZERO_EXTEND;
----------------
sdesmalen-arm wrote:

The nested ternary operator is a bit confusing, it's better to write it like this:


```suggestion
unsigned ExtOpcLHS, ExtOpcRHS;
switch (N->getOpcode()) {
default:
  llvm_unreachable("Unexpected opcode");
case ISD::PARTIAL_REDUCE_UMLA:
  ExtOpcLHS = ExtOpcRHS = ISD::ZERO_EXTEND;
  break;
case ISD::PARTIAL_REDUCE_SMLA:
  ExtOpcLHS = ExtOpcRHS = ISD::SIGN_EXTEND;
  break;
case ISD::PARTIAL_REDUCE_FMLA:
  ExtOpcLHS = ExtOpcRHS = ISD::FP_EXTEND;
  break;
}
```

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


More information about the llvm-commits mailing list