From 1e9e38983ceaccfc8b39763ec732357fdb4d65ad Mon Sep 17 00:00:00 2001 From: David Green Date: Mon, 15 Dec 2025 07:23:31 +0000 Subject: [PATCH] [AArch64] Add a performBICiCombine function. This moves the code out of PerformDAGCombine directly, changing the return to return SDValue(N, 0) to match other uses of SimplifyDemandedBits. --- .../Target/AArch64/AArch64ISelLowering.cpp | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp index 9145492eb5d7..614395c2ed06 100644 --- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp +++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp @@ -19598,6 +19598,19 @@ static SDValue performUADDVCombine(SDNode *N, SelectionDAG &DAG) { return SDValue(); } +static SDValue performBICiCombine(SDNode *N, SelectionDAG &DAG, + TargetLowering::DAGCombinerInfo &DCI) { + APInt DemandedBits = + APInt::getAllOnes(N->getValueType(0).getScalarSizeInBits()); + APInt DemandedElts = + APInt::getAllOnes(N->getValueType(0).getVectorNumElements()); + + if (DAG.getTargetLoweringInfo().SimplifyDemandedBits( + SDValue(N, 0), DemandedBits, DemandedElts, DCI)) + return SDValue(N, 0); + return SDValue(); +} + static SDValue performXorCombine(SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const AArch64Subtarget *Subtarget) { @@ -28399,18 +28412,8 @@ SDValue AArch64TargetLowering::PerformDAGCombine(SDNode *N, return performFlagSettingCombine(N, DCI, ISD::ADD); case AArch64ISD::SUBS: return performFlagSettingCombine(N, DCI, ISD::SUB); - case AArch64ISD::BICi: { - APInt DemandedBits = - APInt::getAllOnes(N->getValueType(0).getScalarSizeInBits()); - APInt DemandedElts = - APInt::getAllOnes(N->getValueType(0).getVectorNumElements()); - - if (DAG.getTargetLoweringInfo().SimplifyDemandedBits( - SDValue(N, 0), DemandedBits, DemandedElts, DCI)) - return SDValue(); - - break; - } + case AArch64ISD::BICi: + return performBICiCombine(N, DAG, DCI); case ISD::XOR: return performXorCombine(N, DAG, DCI, Subtarget); case ISD::MUL: