[llvm] 5586d4a - [X86] mayFoldIntoVector - recognise larger than legal logic ops may fold to vectors (#179503)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 3 09:51:04 PST 2026
Author: Simon Pilgrim
Date: 2026-02-03T17:50:59Z
New Revision: 5586d4ace9a9d12b58f5fbae736d1164c9ed44a4
URL: https://github.com/llvm/llvm-project/commit/5586d4ace9a9d12b58f5fbae736d1164c9ed44a4
DIFF: https://github.com/llvm/llvm-project/commit/5586d4ace9a9d12b58f5fbae736d1164c9ed44a4.diff
LOG: [X86] mayFoldIntoVector - recognise larger than legal logic ops may fold to vectors (#179503)
Inspired by the hack to #174761 - move the custom operation handling
inside mayFoldIntoVector where we can more accurately predict ops that
can be moved to the vector unit
Added:
Modified:
llvm/lib/Target/X86/X86ISelLowering.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 1837c8bbedf0e..b2fac92676eaa 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -2901,6 +2901,11 @@ static bool mayFoldIntoVector(SDValue Op, const X86Subtarget &Subtarget,
return true;
if (isa<ConstantSDNode>(Op) || isa<ConstantFPSDNode>(Op))
return true;
+ EVT VT = Op.getValueType();
+ if (ISD::isBitwiseLogicOp(Op.getOpcode()) &&
+ (VT == MVT::i128 || VT == MVT::i256 || VT == MVT::i512))
+ return mayFoldIntoVector(Op.getOperand(0), Subtarget) &&
+ mayFoldIntoVector(Op.getOperand(1), Subtarget);
return X86::mayFoldLoad(Op, Subtarget, AssumeSingleUse,
/*IgnoreAlignment=*/true);
}
@@ -54561,10 +54566,7 @@ static SDValue combineStore(SDNode *N, SelectionDAG &DAG,
if (VT == MVT::i256 || VT == MVT::i512) {
MVT VecVT = MVT::getVectorVT(MVT::i64, VT.getSizeInBits() / 64);
if (TLI.isTypeLegal(VecVT) && ISD::isNormalStore(St) &&
- (mayFoldIntoVector(StoredVal, Subtarget) ||
- (DCI.isBeforeLegalize() &&
- TLI.getOperationAction(StoredVal.getOpcode(), VT) ==
- TargetLowering::LegalizeAction::Custom)))
+ mayFoldIntoVector(StoredVal, Subtarget))
return DAG.getStore(St->getChain(), dl, DAG.getBitcast(VecVT, StoredVal),
St->getBasePtr(), St->getPointerInfo(),
St->getBaseAlign(), St->getMemOperand()->getFlags());
More information about the llvm-commits
mailing list