[llvm] [AArch64] Spare N2I roundtrip when splatting float comparison (PR #141806)
David Green via llvm-commits
llvm-commits at lists.llvm.org
Thu May 29 09:42:20 PDT 2025
================
@@ -11099,6 +11138,29 @@ SDValue AArch64TargetLowering::LowerSELECT_CC(ISD::CondCode CC, SDValue LHS,
LHS.getValueType() == MVT::f64);
assert(LHS.getValueType() == RHS.getValueType());
EVT VT = TVal.getValueType();
+
+ // If the purpose of the comparison is to select between all ones
+ // or all zeros, use a vector comparison because the operands are already
+ // stored in SIMD registers.
+ auto *CTVal = dyn_cast<ConstantSDNode>(TVal);
+ auto *CFVal = dyn_cast<ConstantSDNode>(FVal);
+ if (Subtarget->isNeonAvailable() &&
+ (VT.getSizeInBits() == LHS.getValueType().getSizeInBits()) && CTVal &&
+ CFVal &&
+ ((CTVal->isAllOnes() && CFVal->isZero()) ||
+ ((CTVal->isZero()) && CFVal->isAllOnes()))) {
----------------
davemgreen wrote:
Can drop brackets from (CTVal->isZero()).
https://github.com/llvm/llvm-project/pull/141806
More information about the llvm-commits
mailing list