[llvm] [X86][GISel] Fix crash on bitcasting i16 <-> half with gisel enabled. (PR #168456)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 18 11:58:47 PST 2025


================
@@ -4366,6 +4367,30 @@ void X86InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
   else if (X86::VK16RegClass.contains(DestReg, SrcReg))
     Opc = Subtarget.hasBWI() ? (HasEGPR ? X86::KMOVQkk_EVEX : X86::KMOVQkk)
                              : (HasEGPR ? X86::KMOVQkk_EVEX : X86::KMOVWkk);
+
+  else if (X86::GR16RegClass.contains(DestReg) &&
+           X86::VR128XRegClass.contains(SrcReg)) {
+    // Special case for moving xmm to GPR16 registers, get super reg and fall
+    // use CopyToFromAsymmetricReg
+    const X86RegisterInfo *TRI = Subtarget.getRegisterInfo();
+    DestReg =
+        TRI->getMatchingSuperReg(DestReg, X86::sub_16bit, &X86::GR32RegClass);
----------------
arsenm wrote:

```suggestion
    DestReg =
        RI.getMatchingSuperReg(DestReg, X86::sub_16bit, &X86::GR32RegClass);
```

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


More information about the llvm-commits mailing list