@@ -625,7 +625,6 @@ bool SplitEditor::rematWillIncreaseRestriction(const MachineInstr *DefMI,
625625VNInfo *SplitEditor::defFromParent (unsigned RegIdx, const VNInfo *ParentVNI,
626626 SlotIndex UseIdx, MachineBasicBlock &MBB,
627627 MachineBasicBlock::iterator I) {
628- SlotIndex Def;
629628 LiveInterval *LI = &LIS.getInterval (Edit->get (RegIdx));
630629
631630 // We may be trying to avoid interference that ends at a deleted instruction,
@@ -638,44 +637,43 @@ VNInfo *SplitEditor::defFromParent(unsigned RegIdx, const VNInfo *ParentVNI,
638637 VNInfo *OrigVNI = OrigLI.getVNInfoAt (UseIdx);
639638
640639 Register Reg = LI->reg ();
641- bool DidRemat = false ;
642640 if (OrigVNI) {
643641 LiveRangeEdit::Remat RM (ParentVNI);
644642 RM.OrigMI = LIS.getInstructionFromIndex (OrigVNI->def );
645643 if (Edit->canRematerializeAt (RM, OrigVNI, UseIdx, true )) {
646644 if (!rematWillIncreaseRestriction (RM.OrigMI , MBB, UseIdx)) {
647- Def = Edit->rematerializeAt (MBB, I, Reg, RM, TRI, Late);
645+ SlotIndex Def = Edit->rematerializeAt (MBB, I, Reg, RM, TRI, Late);
648646 ++NumRemats;
649- DidRemat = true ;
650- } else {
651- LLVM_DEBUG (
652- dbgs () << " skipping rematerialize of " << printReg (Reg) << " at "
653- << UseIdx
654- << " since it will increase register class restrictions\n " );
647+ // Define the value in Reg.
648+ return defValue (RegIdx, ParentVNI, Def, false );
655649 }
650+ LLVM_DEBUG (
651+ dbgs () << " skipping rematerialize of " << printReg (Reg) << " at "
652+ << UseIdx
653+ << " since it will increase register class restrictions\n " );
656654 }
657655 }
658- if (!DidRemat) {
659- LaneBitmask LaneMask;
660- if (OrigLI.hasSubRanges ()) {
661- LaneMask = LaneBitmask::getNone ();
662- for (LiveInterval::SubRange &S : OrigLI.subranges ()) {
663- if (S.liveAt (UseIdx))
664- LaneMask |= S.LaneMask ;
665- }
666- } else {
667- LaneMask = LaneBitmask::getAll ();
668- }
669656
670- if (LaneMask.none ()) {
671- const MCInstrDesc &Desc = TII.get (TargetOpcode::IMPLICIT_DEF);
672- MachineInstr *ImplicitDef = BuildMI (MBB, I, DebugLoc (), Desc, Reg);
673- SlotIndexes &Indexes = *LIS.getSlotIndexes ();
674- Def = Indexes.insertMachineInstrInMaps (*ImplicitDef, Late).getRegSlot ();
675- } else {
676- ++NumCopies;
677- Def = buildCopy (Edit->getReg (), Reg, LaneMask, MBB, I, Late, RegIdx);
657+ LaneBitmask LaneMask;
658+ if (OrigLI.hasSubRanges ()) {
659+ LaneMask = LaneBitmask::getNone ();
660+ for (LiveInterval::SubRange &S : OrigLI.subranges ()) {
661+ if (S.liveAt (UseIdx))
662+ LaneMask |= S.LaneMask ;
678663 }
664+ } else {
665+ LaneMask = LaneBitmask::getAll ();
666+ }
667+
668+ SlotIndex Def;
669+ if (LaneMask.none ()) {
670+ const MCInstrDesc &Desc = TII.get (TargetOpcode::IMPLICIT_DEF);
671+ MachineInstr *ImplicitDef = BuildMI (MBB, I, DebugLoc (), Desc, Reg);
672+ SlotIndexes &Indexes = *LIS.getSlotIndexes ();
673+ Def = Indexes.insertMachineInstrInMaps (*ImplicitDef, Late).getRegSlot ();
674+ } else {
675+ ++NumCopies;
676+ Def = buildCopy (Edit->getReg (), Reg, LaneMask, MBB, I, Late, RegIdx);
679677 }
680678
681679 // Define the value in Reg.
0 commit comments