[llvm] [DAG] Enable bitcast STLF for Constant/Undef (PR #172523)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Sat Jan 24 02:41:34 PST 2026


================
@@ -20612,8 +20612,29 @@ SDValue DAGCombiner::ForwardStoreValueToDirectLoad(LoadSDNode *LD) {
       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 (DAG.isConstantValueOfAnyType(Val) && isTypeLegal(STMemType))
+          Val = DAG.getBitcast(LDMemType, Val);
+        else
+          break;
+      } else if (LDMemType.isVector()) {
+        EVT EltVT = LDMemType.getVectorElementType();
+        uint64_t EltSize = EltVT.getFixedSizeInBits();
+        uint64_t StSize = StMemSize.getFixedValue();
+
+        if (StSize % EltSize != 0)
+          break;
+
+        EVT InterVT =
+            EVT::getVectorVT(*DAG.getContext(), EltVT, StSize / EltSize);
+        if (!isTypeLegal(InterVT) ||
----------------
arsenm wrote:

Type legal check is probably redundant 

https://github.com/llvm/llvm-project/pull/172523


More information about the llvm-commits mailing list