@@ -67,7 +67,7 @@ AggressiveAntiDepState::AggressiveAntiDepState(const unsigned TargetRegs,
67
67
}
68
68
}
69
69
70
- unsigned AggressiveAntiDepState::GetGroup (MCRegister Reg) {
70
+ unsigned AggressiveAntiDepState::GetGroup (unsigned Reg) {
71
71
unsigned Node = GroupNodeIndices[Reg];
72
72
while (GroupNodes[Node] != Node)
73
73
Node = GroupNodes[Node];
@@ -76,16 +76,17 @@ unsigned AggressiveAntiDepState::GetGroup(MCRegister Reg) {
76
76
}
77
77
78
78
void AggressiveAntiDepState::GetGroupRegs (
79
- unsigned Group, std::vector<MCRegister> &Regs,
80
- std::multimap<MCRegister, AggressiveAntiDepState::RegisterReference>
81
- *RegRefs) {
79
+ unsigned Group,
80
+ std::vector<unsigned > &Regs,
81
+ std::multimap<unsigned , AggressiveAntiDepState::RegisterReference> *RegRefs)
82
+ {
82
83
for (unsigned Reg = 0 ; Reg != NumTargetRegs; ++Reg) {
83
84
if ((GetGroup (Reg) == Group) && (RegRefs->count (Reg) > 0 ))
84
85
Regs.push_back (Reg);
85
86
}
86
87
}
87
88
88
- unsigned AggressiveAntiDepState::UnionGroups (MCRegister Reg1, MCRegister Reg2) {
89
+ unsigned AggressiveAntiDepState::UnionGroups (unsigned Reg1, unsigned Reg2) {
89
90
assert (GroupNodes[0 ] == 0 && " GroupNode 0 not parent!" );
90
91
assert (GroupNodeIndices[0 ] == 0 && " Reg 0 not in Group 0!" );
91
92
@@ -100,7 +101,7 @@ unsigned AggressiveAntiDepState::UnionGroups(MCRegister Reg1, MCRegister Reg2) {
100
101
return Parent;
101
102
}
102
103
103
- unsigned AggressiveAntiDepState::LeaveGroup (MCRegister Reg) {
104
+ unsigned AggressiveAntiDepState::LeaveGroup (unsigned Reg) {
104
105
// Create a new GroupNode for Reg. Reg's existing GroupNode must
105
106
// stay as is because there could be other GroupNodes referring to
106
107
// it.
@@ -110,7 +111,7 @@ unsigned AggressiveAntiDepState::LeaveGroup(MCRegister Reg) {
110
111
return idx;
111
112
}
112
113
113
- bool AggressiveAntiDepState::IsLive (MCRegister Reg) {
114
+ bool AggressiveAntiDepState::IsLive (unsigned Reg) {
114
115
// KillIndex must be defined and DefIndex not defined for a register
115
116
// to be live.
116
117
return ((KillIndices[Reg] != ~0u ) && (DefIndices[Reg] == ~0u ));
@@ -172,7 +173,7 @@ void AggressiveAntiDepBreaker::StartBlock(MachineBasicBlock *BB) {
172
173
if (!IsReturnBlock && !Pristine.test (Reg))
173
174
continue ;
174
175
for (MCRegAliasIterator AI (Reg, TRI, true ); AI.isValid (); ++AI) {
175
- MCRegister AliasReg = *AI;
176
+ unsigned AliasReg = *AI;
176
177
State->UnionGroups (AliasReg, 0 );
177
178
KillIndices[AliasReg] = BB->size ();
178
179
DefIndices[AliasReg] = ~0u ;
@@ -189,7 +190,7 @@ void AggressiveAntiDepBreaker::Observe(MachineInstr &MI, unsigned Count,
189
190
unsigned InsertPosIndex) {
190
191
assert (Count < InsertPosIndex && " Instruction index out of expected range!" );
191
192
192
- std::set<MCRegister > PassthruRegs;
193
+ std::set<unsigned > PassthruRegs;
193
194
GetPassthruRegs (MI, PassthruRegs);
194
195
PrescanInstruction (MI, Count, PassthruRegs);
195
196
ScanInstruction (MI, Count);
@@ -238,7 +239,7 @@ bool AggressiveAntiDepBreaker::IsImplicitDefUse(MachineInstr &MI,
238
239
}
239
240
240
241
void AggressiveAntiDepBreaker::GetPassthruRegs (
241
- MachineInstr &MI, std::set<MCRegister > &PassthruRegs) {
242
+ MachineInstr &MI, std::set<unsigned > &PassthruRegs) {
242
243
for (unsigned i = 0 , e = MI.getNumOperands (); i != e; ++i) {
243
244
MachineOperand &MO = MI.getOperand (i);
244
245
if (!MO.isReg ()) continue ;
@@ -287,14 +288,14 @@ static const SUnit *CriticalPathStep(const SUnit *SU) {
287
288
return (Next) ? Next->getSUnit () : nullptr ;
288
289
}
289
290
290
- void AggressiveAntiDepBreaker::HandleLastUse (MCRegister Reg, unsigned KillIdx,
291
+ void AggressiveAntiDepBreaker::HandleLastUse (unsigned Reg, unsigned KillIdx,
291
292
const char *tag,
292
293
const char *header,
293
294
const char *footer) {
294
295
std::vector<unsigned > &KillIndices = State->GetKillIndices ();
295
296
std::vector<unsigned > &DefIndices = State->GetDefIndices ();
296
- std::multimap<MCRegister , AggressiveAntiDepState::RegisterReference>
297
- & RegRefs = State->GetRegRefs ();
297
+ std::multimap<unsigned , AggressiveAntiDepState::RegisterReference>&
298
+ RegRefs = State->GetRegRefs ();
298
299
299
300
// FIXME: We must leave subregisters of live super registers as live, so that
300
301
// we don't clear out the register tracking information for subregisters of
@@ -340,11 +341,10 @@ void AggressiveAntiDepBreaker::HandleLastUse(MCRegister Reg, unsigned KillIdx,
340
341
}
341
342
342
343
void AggressiveAntiDepBreaker::PrescanInstruction (
343
- MachineInstr &MI, unsigned Count,
344
- const std::set<MCRegister> &PassthruRegs) {
344
+ MachineInstr &MI, unsigned Count, std::set<unsigned > &PassthruRegs) {
345
345
std::vector<unsigned > &DefIndices = State->GetDefIndices ();
346
- std::multimap<MCRegister , AggressiveAntiDepState::RegisterReference>
347
- & RegRefs = State->GetRegRefs ();
346
+ std::multimap<unsigned , AggressiveAntiDepState::RegisterReference>&
347
+ RegRefs = State->GetRegRefs ();
348
348
349
349
// Handle dead defs by simulating a last-use of the register just
350
350
// after the def. A dead def can occur because the def is truly
@@ -353,19 +353,17 @@ void AggressiveAntiDepBreaker::PrescanInstruction(
353
353
// previous def.
354
354
for (const MachineOperand &MO : MI.all_defs ()) {
355
355
Register Reg = MO.getReg ();
356
- if (!Reg)
357
- continue ;
356
+ if (Reg == 0 ) continue ;
358
357
359
- HandleLastUse (Reg. asMCReg () , Count + 1 , " " , " \t Dead Def: " , " \n " );
358
+ HandleLastUse (Reg, Count + 1 , " " , " \t Dead Def: " , " \n " );
360
359
}
361
360
362
361
LLVM_DEBUG (dbgs () << " \t Def Groups:" );
363
362
for (unsigned i = 0 , e = MI.getNumOperands (); i != e; ++i) {
364
363
MachineOperand &MO = MI.getOperand (i);
365
364
if (!MO.isReg () || !MO.isDef ()) continue ;
366
365
Register Reg = MO.getReg ();
367
- if (!Reg)
368
- continue ;
366
+ if (Reg == 0 ) continue ;
369
367
370
368
LLVM_DEBUG (dbgs () << " " << printReg (Reg, TRI) << " =g"
371
369
<< State->GetGroup (Reg));
@@ -384,7 +382,7 @@ void AggressiveAntiDepBreaker::PrescanInstruction(
384
382
// Any aliased that are live at this point are completely or
385
383
// partially defined here, so group those aliases with Reg.
386
384
for (MCRegAliasIterator AI (Reg, TRI, false ); AI.isValid (); ++AI) {
387
- MCRegister AliasReg = *AI;
385
+ unsigned AliasReg = *AI;
388
386
if (State->IsLive (AliasReg)) {
389
387
State->UnionGroups (Reg, AliasReg);
390
388
LLVM_DEBUG (dbgs () << " ->g" << State->GetGroup (Reg) << " (via "
@@ -406,8 +404,7 @@ void AggressiveAntiDepBreaker::PrescanInstruction(
406
404
// live-ranges.
407
405
for (const MachineOperand &MO : MI.all_defs ()) {
408
406
Register Reg = MO.getReg ();
409
- if (!Reg)
410
- continue ;
407
+ if (Reg == 0 ) continue ;
411
408
// Ignore KILLs and passthru registers for liveness...
412
409
if (MI.isKill () || (PassthruRegs.count (Reg) != 0 ))
413
410
continue ;
@@ -431,8 +428,8 @@ void AggressiveAntiDepBreaker::PrescanInstruction(
431
428
void AggressiveAntiDepBreaker::ScanInstruction (MachineInstr &MI,
432
429
unsigned Count) {
433
430
LLVM_DEBUG (dbgs () << " \t Use Groups:" );
434
- std::multimap<MCRegister , AggressiveAntiDepState::RegisterReference>
435
- & RegRefs = State->GetRegRefs ();
431
+ std::multimap<unsigned , AggressiveAntiDepState::RegisterReference>&
432
+ RegRefs = State->GetRegRefs ();
436
433
437
434
// If MI's uses have special allocation requirement, don't allow
438
435
// any use registers to be changed. Also assume all registers
@@ -460,16 +457,15 @@ void AggressiveAntiDepBreaker::ScanInstruction(MachineInstr &MI,
460
457
MachineOperand &MO = MI.getOperand (i);
461
458
if (!MO.isReg () || !MO.isUse ()) continue ;
462
459
Register Reg = MO.getReg ();
463
- if (!Reg)
464
- continue ;
460
+ if (Reg == 0 ) continue ;
465
461
466
462
LLVM_DEBUG (dbgs () << " " << printReg (Reg, TRI) << " =g"
467
463
<< State->GetGroup (Reg));
468
464
469
465
// It wasn't previously live but now it is, this is a kill. Forget
470
466
// the previous live-range information and start a new live-range
471
467
// for the register.
472
- HandleLastUse (Reg. asMCReg () , Count, " (last-use)" );
468
+ HandleLastUse (Reg, Count, " (last-use)" );
473
469
474
470
if (Special) {
475
471
LLVM_DEBUG (if (State->GetGroup (Reg) != 0 ) dbgs () << " ->g0(alloc-req)" );
@@ -491,14 +487,13 @@ void AggressiveAntiDepBreaker::ScanInstruction(MachineInstr &MI,
491
487
if (MI.isKill ()) {
492
488
LLVM_DEBUG (dbgs () << " \t Kill Group:" );
493
489
494
- Register FirstReg;
490
+ unsigned FirstReg = 0 ;
495
491
for (const MachineOperand &MO : MI.operands ()) {
496
492
if (!MO.isReg ()) continue ;
497
493
Register Reg = MO.getReg ();
498
- if (!Reg)
499
- continue ;
494
+ if (Reg == 0 ) continue ;
500
495
501
- if (FirstReg) {
496
+ if (FirstReg != 0 ) {
502
497
LLVM_DEBUG (dbgs () << " =" << printReg (Reg, TRI));
503
498
State->UnionGroups (FirstReg, Reg);
504
499
} else {
@@ -511,7 +506,7 @@ void AggressiveAntiDepBreaker::ScanInstruction(MachineInstr &MI,
511
506
}
512
507
}
513
508
514
- BitVector AggressiveAntiDepBreaker::GetRenameRegisters (MCRegister Reg) {
509
+ BitVector AggressiveAntiDepBreaker::GetRenameRegisters (unsigned Reg) {
515
510
BitVector BV (TRI->getNumRegs (), false );
516
511
bool first = true ;
517
512
@@ -537,17 +532,17 @@ BitVector AggressiveAntiDepBreaker::GetRenameRegisters(MCRegister Reg) {
537
532
}
538
533
539
534
bool AggressiveAntiDepBreaker::FindSuitableFreeRegisters (
540
- MCRegister SuperReg, unsigned AntiDepGroupIndex,
541
- RenameOrderType &RenameOrder, std::map<MCRegister, MCRegister > &RenameMap) {
535
+ unsigned SuperReg, unsigned AntiDepGroupIndex, RenameOrderType &RenameOrder ,
536
+ std::map<unsigned , unsigned > &RenameMap) {
542
537
std::vector<unsigned > &KillIndices = State->GetKillIndices ();
543
538
std::vector<unsigned > &DefIndices = State->GetDefIndices ();
544
- std::multimap<MCRegister , AggressiveAntiDepState::RegisterReference>
545
- & RegRefs = State->GetRegRefs ();
539
+ std::multimap<unsigned , AggressiveAntiDepState::RegisterReference>&
540
+ RegRefs = State->GetRegRefs ();
546
541
547
542
// Collect all referenced registers in the same group as
548
543
// AntiDepReg. These all need to be renamed together if we are to
549
544
// break the anti-dependence.
550
- std::vector<MCRegister > Regs;
545
+ std::vector<unsigned > Regs;
551
546
State->GetGroupRegs (AntiDepGroupIndex, Regs, &RegRefs);
552
547
assert (!Regs.empty () && " Empty register group!" );
553
548
if (Regs.empty ())
@@ -557,8 +552,8 @@ bool AggressiveAntiDepBreaker::FindSuitableFreeRegisters(
557
552
// each register.
558
553
LLVM_DEBUG (dbgs () << " \t Rename Candidates for Group g" << AntiDepGroupIndex
559
554
<< " :\n " );
560
- std::map<MCRegister , BitVector> RenameRegisterMap;
561
- for (MCRegister Reg : Regs) {
555
+ std::map<unsigned , BitVector> RenameRegisterMap;
556
+ for (unsigned Reg : Regs) {
562
557
// If Reg has any references, then collect possible rename regs
563
558
if (RegRefs.count (Reg) > 0 ) {
564
559
LLVM_DEBUG (dbgs () << " \t\t " << printReg (Reg, TRI) << " :" );
@@ -577,7 +572,7 @@ bool AggressiveAntiDepBreaker::FindSuitableFreeRegisters(
577
572
}
578
573
579
574
// All group registers should be a subreg of SuperReg.
580
- for (MCRegister Reg : Regs) {
575
+ for (unsigned Reg : Regs) {
581
576
if (Reg == SuperReg) continue ;
582
577
bool IsSub = TRI->isSubRegister (SuperReg, Reg);
583
578
// FIXME: remove this once PR18663 has been properly fixed. For now,
@@ -626,7 +621,7 @@ bool AggressiveAntiDepBreaker::FindSuitableFreeRegisters(
626
621
do {
627
622
if (R == 0 ) R = Order.size ();
628
623
--R;
629
- const MCRegister NewSuperReg = Order[R];
624
+ const unsigned NewSuperReg = Order[R];
630
625
// Don't consider non-allocatable registers
631
626
if (!MRI.isAllocatable (NewSuperReg)) continue ;
632
627
// Don't replace a register with itself.
@@ -638,8 +633,8 @@ bool AggressiveAntiDepBreaker::FindSuitableFreeRegisters(
638
633
// For each referenced group register (which must be a SuperReg or
639
634
// a subregister of SuperReg), find the corresponding subregister
640
635
// of NewSuperReg and make sure it is free to be renamed.
641
- for (MCRegister Reg : Regs) {
642
- MCRegister NewReg;
636
+ for (unsigned Reg : Regs) {
637
+ unsigned NewReg = 0 ;
643
638
if (Reg == SuperReg) {
644
639
NewReg = NewSuperReg;
645
640
} else {
@@ -666,7 +661,7 @@ bool AggressiveAntiDepBreaker::FindSuitableFreeRegisters(
666
661
} else {
667
662
bool found = false ;
668
663
for (MCRegAliasIterator AI (NewReg, TRI, false ); AI.isValid (); ++AI) {
669
- MCRegister AliasReg = *AI;
664
+ unsigned AliasReg = *AI;
670
665
if (State->IsLive (AliasReg) ||
671
666
(KillIndices[Reg] > DefIndices[AliasReg])) {
672
667
LLVM_DEBUG (dbgs ()
@@ -708,7 +703,7 @@ bool AggressiveAntiDepBreaker::FindSuitableFreeRegisters(
708
703
}
709
704
710
705
// Record that 'Reg' can be renamed to 'NewReg'.
711
- RenameMap.insert (std::make_pair (Reg, NewReg));
706
+ RenameMap.insert (std::pair< unsigned , unsigned > (Reg, NewReg));
712
707
}
713
708
714
709
// If we fall-out here, then every register in the group can be
@@ -738,8 +733,8 @@ unsigned AggressiveAntiDepBreaker::BreakAntiDependencies(
738
733
DbgValueVector &DbgValues) {
739
734
std::vector<unsigned > &KillIndices = State->GetKillIndices ();
740
735
std::vector<unsigned > &DefIndices = State->GetDefIndices ();
741
- std::multimap<MCRegister , AggressiveAntiDepState::RegisterReference>
742
- & RegRefs = State->GetRegRefs ();
736
+ std::multimap<unsigned , AggressiveAntiDepState::RegisterReference>&
737
+ RegRefs = State->GetRegRefs ();
743
738
744
739
// The code below assumes that there is at least one instruction,
745
740
// so just duck out immediately if the block is empty.
@@ -797,7 +792,7 @@ unsigned AggressiveAntiDepBreaker::BreakAntiDependencies(
797
792
LLVM_DEBUG (dbgs () << " Anti: " );
798
793
LLVM_DEBUG (MI.dump ());
799
794
800
- std::set<MCRegister > PassthruRegs;
795
+ std::set<unsigned > PassthruRegs;
801
796
GetPassthruRegs (MI, PassthruRegs);
802
797
803
798
// Process the defs in MI...
@@ -829,15 +824,15 @@ unsigned AggressiveAntiDepBreaker::BreakAntiDependencies(
829
824
if ((Edge->getKind () != SDep::Anti) &&
830
825
(Edge->getKind () != SDep::Output)) continue ;
831
826
832
- MCRegister AntiDepReg = MCRegister::from ( Edge->getReg () );
827
+ unsigned AntiDepReg = Edge->getReg ();
833
828
LLVM_DEBUG (dbgs () << " \t Antidep reg: " << printReg (AntiDepReg, TRI));
834
- assert (AntiDepReg && " Anti-dependence on reg0?" );
829
+ assert (AntiDepReg != 0 && " Anti-dependence on reg0?" );
835
830
836
831
if (!MRI.isAllocatable (AntiDepReg)) {
837
832
// Don't break anti-dependencies on non-allocatable registers.
838
833
LLVM_DEBUG (dbgs () << " (non-allocatable)\n " );
839
834
continue ;
840
- } else if (ExcludeRegs && ExcludeRegs->test (AntiDepReg. id () )) {
835
+ } else if (ExcludeRegs && ExcludeRegs->test (AntiDepReg)) {
841
836
// Don't break anti-dependencies for critical path registers
842
837
// if not on the critical path
843
838
LLVM_DEBUG (dbgs () << " (not critical-path)\n " );
@@ -872,30 +867,30 @@ unsigned AggressiveAntiDepBreaker::BreakAntiDependencies(
872
867
Pred.getReg () != AntiDepReg)
873
868
: (Pred.getKind () == SDep::Data &&
874
869
Pred.getReg () == AntiDepReg)) {
875
- AntiDepReg = MCRegister () ;
870
+ AntiDepReg = 0 ;
876
871
break ;
877
872
}
878
873
}
879
874
for (const SDep &Pred : PathSU->Preds ) {
880
875
if ((Pred.getSUnit () == NextSU) && (Pred.getKind () != SDep::Anti) &&
881
876
(Pred.getKind () != SDep::Output)) {
882
877
LLVM_DEBUG (dbgs () << " (real dependency)\n " );
883
- AntiDepReg = MCRegister () ;
878
+ AntiDepReg = 0 ;
884
879
break ;
885
880
} else if ((Pred.getSUnit () != NextSU) &&
886
881
(Pred.getKind () == SDep::Data) &&
887
882
(Pred.getReg () == AntiDepReg)) {
888
883
LLVM_DEBUG (dbgs () << " (other dependency)\n " );
889
- AntiDepReg = MCRegister () ;
884
+ AntiDepReg = 0 ;
890
885
break ;
891
886
}
892
887
}
893
888
894
- if (! AntiDepReg)
889
+ if (AntiDepReg == 0 )
895
890
continue ;
896
891
}
897
892
898
- assert (AntiDepReg);
893
+ assert (AntiDepReg != 0 );
899
894
900
895
// Determine AntiDepReg's register group.
901
896
const unsigned GroupIndex = State->GetGroup (AntiDepReg);
@@ -907,16 +902,16 @@ unsigned AggressiveAntiDepBreaker::BreakAntiDependencies(
907
902
LLVM_DEBUG (dbgs () << ' \n ' );
908
903
909
904
// Look for a suitable register to use to break the anti-dependence.
910
- std::map<MCRegister, MCRegister > RenameMap;
905
+ std::map<unsigned , unsigned > RenameMap;
911
906
if (FindSuitableFreeRegisters (AntiDepReg, GroupIndex, RenameOrder,
912
907
RenameMap)) {
913
908
LLVM_DEBUG (dbgs () << " \t Breaking anti-dependence edge on "
914
909
<< printReg (AntiDepReg, TRI) << " :" );
915
910
916
911
// Handle each group register...
917
912
for (const auto &P : RenameMap) {
918
- MCRegister CurrReg = P.first ;
919
- MCRegister NewReg = P.second ;
913
+ unsigned CurrReg = P.first ;
914
+ unsigned NewReg = P.second ;
920
915
921
916
LLVM_DEBUG (dbgs () << " " << printReg (CurrReg, TRI) << " ->"
922
917
<< printReg (NewReg, TRI) << " ("
0 commit comments