[llvm] [DAG] Reland: Enable bitcast STLF for Constant/Undef (PR #178890)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 30 06:03:04 PST 2026
================
@@ -20747,9 +20747,33 @@ SDValue DAGCombiner::ForwardStoreValueToDirectLoad(LoadSDNode *LD) {
if (!isTypeLegal(LDMemType))
break;
if (STMemType != LDMemType) {
- // TODO: Support vectors? This requires extract_subvector/bitcast.
- if (!STMemType.isVector() && !LDMemType.isVector() &&
- STMemType.isInteger() && LDMemType.isInteger())
+ if (LdMemSize == StMemSize) {
+ if (TLI.isOperationLegal(ISD::BITCAST, LDMemType) &&
+ isTypeLegal(LDMemType) &&
+ TLI.isOperationLegal(ISD::BITCAST, STMemType) &&
+ isTypeLegal(STMemType) &&
+ TLI.isLoadBitCastBeneficial(LDMemType, STMemType, DAG,
+ *LD->getMemOperand()))
+ Val = DAG.getBitcast(LDMemType, Val);
+ else
+ break;
+ } else if (LDMemType.isVector()) {
+ EVT EltVT = LDMemType.getVectorElementType();
+ uint64_t EltSize = EltVT.getSizeInBits();
+
+ if (!StMemSize.isKnownMultipleOf(EltSize))
+ break;
+
+ EVT InterVT = EVT::getVectorVT(*DAG.getContext(), EltVT,
+ StMemSize.divideCoefficientBy(EltSize));
+ if (!TLI.isTypeLegal(Val.getValueType()) ||
----------------
arsenm wrote:
Is this equivalent to the isTypeLegal(STMemType) above? Unify those? Or hoist this to the first condition?
https://github.com/llvm/llvm-project/pull/178890
More information about the llvm-commits
mailing list