@@ -625,7 +625,6 @@ bool SplitEditor::rematWillIncreaseRestriction(const MachineInstr *DefMI,
625
625
VNInfo *SplitEditor::defFromParent (unsigned RegIdx, const VNInfo *ParentVNI,
626
626
SlotIndex UseIdx, MachineBasicBlock &MBB,
627
627
MachineBasicBlock::iterator I) {
628
- SlotIndex Def;
629
628
LiveInterval *LI = &LIS.getInterval (Edit->get (RegIdx));
630
629
631
630
// 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,
638
637
VNInfo *OrigVNI = OrigLI.getVNInfoAt (UseIdx);
639
638
640
639
Register Reg = LI->reg ();
641
- bool DidRemat = false ;
642
640
if (OrigVNI) {
643
641
LiveRangeEdit::Remat RM (ParentVNI);
644
642
RM.OrigMI = LIS.getInstructionFromIndex (OrigVNI->def );
645
643
if (Edit->canRematerializeAt (RM, OrigVNI, UseIdx, true )) {
646
644
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);
648
646
++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 );
655
649
}
650
+ LLVM_DEBUG (
651
+ dbgs () << " skipping rematerialize of " << printReg (Reg) << " at "
652
+ << UseIdx
653
+ << " since it will increase register class restrictions\n " );
656
654
}
657
655
}
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
- }
669
656
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 ;
678
663
}
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);
679
677
}
680
678
681
679
// Define the value in Reg.
0 commit comments