[llvm-branch-commits] [llvm] [X86] keep upper-16-bit f32 extractions in XMM for f16/v8i16 (PR #230698)

Emilio Cota via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Mon Oct 12 03:10:30 PDT 2026


================
@@ -52344,6 +52360,22 @@ static SDValue combineVectorInsert(SDNode *N, SelectionDAG &DAG,
       return SDValue(N, 0);
   }
 
+  if (Opcode == X86ISD::PINSRW) {
+    using namespace SDPatternMatch;
+    SDValue FpOp;
+    if (sd_match(Scl, m_OneUse(m_Srl(m_OneUse(m_BitCast(m_Value(
+                                         FpOp, m_SpecificVT(MVT::f32)))),
+                                     m_SpecificInt(16)))) &&
+        !ISD::isNormalLoad(FpOp.getNode())) {
+      SDLoc DL(N);
+      SDValue SrcVec = DAG.getNode(ISD::SCALAR_TO_VECTOR, DL, MVT::v4f32, FpOp);
+      SDValue Extract = DAG.getNode(X86ISD::PEXTRW, DL, MVT::i32,
+                                    DAG.getBitcast(MVT::v8i16, SrcVec),
+                                    DAG.getTargetConstant(1, DL, MVT::i8));
+      return DAG.getNode(X86ISD::PINSRW, DL, VT, Vec, Extract, Idx);
----------------
cota wrote:

Done both, thanks

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


More information about the llvm-branch-commits mailing list