197
197
#include " llvm/ADT/SmallVector.h"
198
198
#include " llvm/ADT/Statistic.h"
199
199
#include " llvm/CodeGen/LivePhysRegs.h"
200
- #include " llvm/CodeGen/LiveRegUnits.h"
201
200
#include " llvm/CodeGen/MachineBasicBlock.h"
202
201
#include " llvm/CodeGen/MachineFrameInfo.h"
203
202
#include " llvm/CodeGen/MachineFunction.h"
@@ -989,7 +988,7 @@ void AArch64FrameLowering::emitZeroCallUsedRegs(BitVector RegsToZero,
989
988
}
990
989
}
991
990
992
- static void getLiveRegsForEntryMBB (LiveRegUnits &LiveRegs,
991
+ static void getLiveRegsForEntryMBB (LivePhysRegs &LiveRegs,
993
992
const MachineBasicBlock &MBB) {
994
993
const MachineFunction *MF = MBB.getParent ();
995
994
LiveRegs.addLiveIns (MBB);
@@ -1019,18 +1018,16 @@ static Register findScratchNonCalleeSaveRegister(MachineBasicBlock *MBB) {
1019
1018
1020
1019
const AArch64Subtarget &Subtarget = MF->getSubtarget <AArch64Subtarget>();
1021
1020
const AArch64RegisterInfo &TRI = *Subtarget.getRegisterInfo ();
1022
- LiveRegUnits LiveRegs (TRI);
1021
+ LivePhysRegs LiveRegs (TRI);
1023
1022
getLiveRegsForEntryMBB (LiveRegs, *MBB);
1024
1023
1025
1024
// Prefer X9 since it was historically used for the prologue scratch reg.
1026
- if (LiveRegs.available (AArch64::X9))
1025
+ const MachineRegisterInfo &MRI = MF->getRegInfo ();
1026
+ if (LiveRegs.available (MRI, AArch64::X9))
1027
1027
return AArch64::X9;
1028
1028
1029
- BitVector Allocatable =
1030
- TRI.getAllocatableSet (*MF, TRI.getRegClass (AArch64::GPR64RegClassID));
1031
-
1032
- for (unsigned Reg : Allocatable.set_bits ()) {
1033
- if (LiveRegs.available (Reg))
1029
+ for (unsigned Reg : AArch64::GPR64RegClass) {
1030
+ if (LiveRegs.available (MRI, Reg))
1034
1031
return Reg;
1035
1032
}
1036
1033
return AArch64::NoRegister;
@@ -1046,11 +1043,14 @@ bool AArch64FrameLowering::canUseAsPrologue(
1046
1043
const AArch64FunctionInfo *AFI = MF->getInfo <AArch64FunctionInfo>();
1047
1044
1048
1045
if (AFI->hasSwiftAsyncContext ()) {
1049
- LiveRegUnits LiveRegs (*RegInfo);
1046
+ const AArch64RegisterInfo &TRI = *Subtarget.getRegisterInfo ();
1047
+ const MachineRegisterInfo &MRI = MF->getRegInfo ();
1048
+ LivePhysRegs LiveRegs (TRI);
1050
1049
getLiveRegsForEntryMBB (LiveRegs, MBB);
1051
1050
// The StoreSwiftAsyncContext clobbers X16 and X17. Make sure they are
1052
1051
// available.
1053
- if (!LiveRegs.available (AArch64::X16) || !LiveRegs.available (AArch64::X17))
1052
+ if (!LiveRegs.available (MRI, AArch64::X16) ||
1053
+ !LiveRegs.available (MRI, AArch64::X17))
1054
1054
return false ;
1055
1055
}
1056
1056
@@ -1606,7 +1606,7 @@ static void emitDefineCFAWithFP(MachineFunction &MF, MachineBasicBlock &MBB,
1606
1606
// / Collect live registers from the end of \p MI's parent up to (including) \p
1607
1607
// / MI in \p LiveRegs.
1608
1608
static void getLivePhysRegsUpTo (MachineInstr &MI, const TargetRegisterInfo &TRI,
1609
- LiveRegUnits &LiveRegs) {
1609
+ LivePhysRegs &LiveRegs) {
1610
1610
1611
1611
MachineBasicBlock &MBB = *MI.getParent ();
1612
1612
LiveRegs.addLiveOuts (MBB);
@@ -1644,7 +1644,7 @@ void AArch64FrameLowering::emitPrologue(MachineFunction &MF,
1644
1644
NonFrameStart->getFlag (MachineInstr::FrameSetup))
1645
1645
++NonFrameStart;
1646
1646
1647
- LiveRegUnits LiveRegs (*TRI);
1647
+ LivePhysRegs LiveRegs (*TRI);
1648
1648
if (NonFrameStart != MBB.end ()) {
1649
1649
getLivePhysRegsUpTo (*NonFrameStart, *TRI, LiveRegs);
1650
1650
// Ignore registers used for stack management for now.
@@ -1662,7 +1662,7 @@ void AArch64FrameLowering::emitPrologue(MachineFunction &MF,
1662
1662
make_range (MBB.instr_begin (), NonFrameStart->getIterator ())) {
1663
1663
for (auto &Op : MI.operands ())
1664
1664
if (Op.isReg () && Op.isDef ())
1665
- assert (LiveRegs.available (Op.getReg ()) &&
1665
+ assert (! LiveRegs.contains (Op.getReg ()) &&
1666
1666
" live register clobbered by inserted prologue instructions" );
1667
1667
}
1668
1668
});
@@ -4132,7 +4132,7 @@ MachineBasicBlock::iterator tryMergeAdjacentSTG(MachineBasicBlock::iterator II,
4132
4132
// FIXME : This approach of bailing out from merge is conservative in
4133
4133
// some ways like even if stg loops are not present after merge the
4134
4134
// insert list, this liveness check is done (which is not needed).
4135
- LiveRegUnits LiveRegs (*(MBB->getParent ()->getSubtarget ().getRegisterInfo ()));
4135
+ LivePhysRegs LiveRegs (*(MBB->getParent ()->getSubtarget ().getRegisterInfo ()));
4136
4136
LiveRegs.addLiveOuts (*MBB);
4137
4137
for (auto I = MBB->rbegin ();; ++I) {
4138
4138
MachineInstr &MI = *I;
@@ -4141,7 +4141,7 @@ MachineBasicBlock::iterator tryMergeAdjacentSTG(MachineBasicBlock::iterator II,
4141
4141
LiveRegs.stepBackward (*I);
4142
4142
}
4143
4143
InsertI++;
4144
- if (! LiveRegs.available (AArch64::NZCV))
4144
+ if (LiveRegs.contains (AArch64::NZCV))
4145
4145
return InsertI;
4146
4146
4147
4147
llvm::stable_sort (Instrs,
0 commit comments