[llvm] [SPARC] Emit a TRUNCATE when combining truncating BSWAP-STOREs (PR #210483)

Sergei Barannikov via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 31 08:25:34 PDT 2026


================
@@ -3333,6 +3333,9 @@ SDValue SparcTargetLowering::PerformSTORECombine(SDNode *N,
       unsigned Shift = VT.getSizeInBits() - MemVT.getSizeInBits();
       BSwapOp = DAG.getNode(ISD::SRL, DL, VT, BSwapOp,
                             DAG.getShiftAmountConstant(Shift, VT, DL));
+      // Need to truncate if this is a bswap of i64 stored as i32/i16.
+      if (VT == MVT::i64)
+        BSwapOp = DAG.getNode(ISD::TRUNCATE, DL, MVT::i32, BSwapOp);
----------------
s-barannikov wrote:

Ah, the argument should already be truncated before these patterns are matched.
Will adding a pattern for i64 -> i16 fix the issue? Or that would be wrong?

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


More information about the llvm-commits mailing list