Skip to content

Commit 6bf0802

Browse files
committed
[X86] In CopyToFromAsymmetricReg, use VR128 instead of FR32 instructions for GR32<->XMM register copies.
We have two versions of some instructions, VR128 versions and FR32 versions that are marked as CodeGenOnly. This change switches to using the VR128 versions for these copies. It's after register allocation so the class size no longer matters. This matches how GR64 works. llvm-svn: 358555
1 parent 57cef58 commit 6bf0802

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

llvm/lib/Target/X86/X86InstrInfo.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2723,22 +2723,22 @@ static unsigned CopyToFromAsymmetricReg(unsigned DestReg, unsigned SrcReg,
27232723
return X86::MMX_MOVD64to64rr;
27242724
}
27252725

2726-
// SrcReg(FR32) -> DestReg(GR32)
2727-
// SrcReg(GR32) -> DestReg(FR32)
2726+
// SrcReg(VR128) -> DestReg(GR32)
2727+
// SrcReg(GR32) -> DestReg(VR128)
27282728

27292729
if (X86::GR32RegClass.contains(DestReg) &&
2730-
X86::FR32XRegClass.contains(SrcReg))
2731-
// Copy from a FR32 register to a GR32 register.
2732-
return HasAVX512 ? X86::VMOVSS2DIZrr :
2733-
HasAVX ? X86::VMOVSS2DIrr :
2734-
X86::MOVSS2DIrr;
2730+
X86::VR128XRegClass.contains(SrcReg))
2731+
// Copy from a VR128 register to a GR32 register.
2732+
return HasAVX512 ? X86::VMOVPDI2DIZrr :
2733+
HasAVX ? X86::VMOVPDI2DIrr :
2734+
X86::MOVPDI2DIrr;
27352735

2736-
if (X86::FR32XRegClass.contains(DestReg) &&
2736+
if (X86::VR128XRegClass.contains(DestReg) &&
27372737
X86::GR32RegClass.contains(SrcReg))
2738-
// Copy from a GR32 register to a FR32 register.
2739-
return HasAVX512 ? X86::VMOVDI2SSZrr :
2740-
HasAVX ? X86::VMOVDI2SSrr :
2741-
X86::MOVDI2SSrr;
2738+
// Copy from a VR128 register to a VR128 register.
2739+
return HasAVX512 ? X86::VMOVDI2PDIZrr :
2740+
HasAVX ? X86::VMOVDI2PDIrr :
2741+
X86::MOVDI2PDIrr;
27422742
return 0;
27432743
}
27442744

0 commit comments

Comments
 (0)