[llvm] [RISCV] Use vrsub for select of add and sub of the same operands (PR #123400)

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 24 09:05:47 PST 2025


================
@@ -16874,6 +16875,53 @@ static SDValue useInversedSetcc(SDNode *N, SelectionDAG &DAG,
   return SDValue();
 }
 
+static bool matchSelectAddSub(SDValue TrueVal, SDValue FalseVal, bool &SwapCC) {
+  if (!TrueVal.hasOneUse() || !FalseVal.hasOneUse())
+    return false;
+
+  SwapCC = false;
+  if (TrueVal.getOpcode() == ISD::SUB && FalseVal.getOpcode() == ISD::ADD) {
+    std::swap(TrueVal, FalseVal);
+    SwapCC = true;
+  }
+
+  if (TrueVal.getOpcode() != ISD::ADD || FalseVal.getOpcode() != ISD::SUB)
+    return false;
+
+  SDValue A = FalseVal.getOperand(0);
+  SDValue B = FalseVal.getOperand(1);
+  // Add is associative, so check both orders
----------------
topperc wrote:

associative->commutative?

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


More information about the llvm-commits mailing list