[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