[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