================
@@ -7594,16 +7595,28 @@ MachineInstr *X86InstrInfo::foldMemoryOperandImpl(
if (NoNDDM && !IsTwoAddr) {
Register SrcReg = MI.getOperand(1).getReg();
+ unsigned SrcSub = MI.getOperand(1).getSubReg();
if (MI.killsRegister(SrcReg, /*TRI=*/nullptr))
return NewMI;
const TargetRegisterClass &RC = *MF.getRegInfo().getRegClass(SrcReg);
- Register NewSrc = MF.getRegInfo().createVirtualRegister(&RC);
- BuildMI(*NewMI->getParent(), *NewMI, MI.getDebugLoc(),
- get(TargetOpcode::COPY))
- .addReg(NewSrc, RegState::Define)
- .addReg(SrcReg);
+ MachineRegisterInfo &MRI = MF.getRegInfo();
+ unsigned SubReg = X86::NoSubRegister;
+ Register NewSrc;
+
+ if (MRI.isSSA()) {
+ NewSrc = MRI.createVirtualRegister(&RC);
+ } else {
+ NewSrc = MI.getOperand(0).getReg();
+ SubReg = MI.getOperand(0).getSubReg();
+ }
+
+ CopyMI = BuildMI(*NewMI->getParent(), *NewMI, MI.getDebugLoc(),
+ get(TargetOpcode::COPY))
+ .addReg(NewSrc, RegState::Define, SubReg)
----------------
phoebewang wrote:
Done.
https://github.com/llvm/llvm-project/pull/191368
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits