Skip to content

Commit 5c4c36f

Browse files
committed
[AArch64][NFC] Switch to LiveRegUnits
In Frame Lowering, move to LiveRegUnits.
1 parent a9ce60e commit 5c4c36f

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

llvm/lib/Target/AArch64/AArch64FrameLowering.cpp

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@
218218
#include "llvm/Analysis/ValueTracking.h"
219219
#include "llvm/CodeGen/CFIInstBuilder.h"
220220
#include "llvm/CodeGen/LivePhysRegs.h"
221+
#include "llvm/CodeGen/LiveRegUnits.h"
221222
#include "llvm/CodeGen/MachineBasicBlock.h"
222223
#include "llvm/CodeGen/MachineFrameInfo.h"
223224
#include "llvm/CodeGen/MachineFunction.h"
@@ -1002,7 +1003,7 @@ void AArch64FrameLowering::emitZeroCallUsedRegs(BitVector RegsToZero,
10021003
}
10031004
}
10041005

1005-
static void getLiveRegsForEntryMBB(LivePhysRegs &LiveRegs,
1006+
static void getLiveRegsForEntryMBB(LiveRegUnits &LiveRegs,
10061007
const MachineBasicBlock &MBB) {
10071008
const MachineFunction *MF = MBB.getParent();
10081009
LiveRegs.addLiveIns(MBB);
@@ -1035,16 +1036,18 @@ static Register findScratchNonCalleeSaveRegister(MachineBasicBlock *MBB) {
10351036

10361037
const AArch64Subtarget &Subtarget = MF->getSubtarget<AArch64Subtarget>();
10371038
const AArch64RegisterInfo &TRI = *Subtarget.getRegisterInfo();
1038-
LivePhysRegs LiveRegs(TRI);
1039+
LiveRegUnits LiveRegs(TRI);
10391040
getLiveRegsForEntryMBB(LiveRegs, *MBB);
10401041

10411042
// Prefer X9 since it was historically used for the prologue scratch reg.
1042-
const MachineRegisterInfo &MRI = MF->getRegInfo();
1043-
if (LiveRegs.available(MRI, AArch64::X9))
1043+
if (LiveRegs.available(AArch64::X9))
10441044
return AArch64::X9;
10451045

1046-
for (unsigned Reg : AArch64::GPR64RegClass) {
1047-
if (LiveRegs.available(MRI, Reg))
1046+
BitVector Allocatable =
1047+
TRI.getAllocatableSet(*MF, TRI.getRegClass(AArch64::GPR64RegClassID));
1048+
1049+
for (unsigned Reg : Allocatable.set_bits()) {
1050+
if (LiveRegs.available(Reg))
10481051
return Reg;
10491052
}
10501053
return AArch64::NoRegister;
@@ -1060,14 +1063,11 @@ bool AArch64FrameLowering::canUseAsPrologue(
10601063
const AArch64FunctionInfo *AFI = MF->getInfo<AArch64FunctionInfo>();
10611064

10621065
if (AFI->hasSwiftAsyncContext()) {
1063-
const AArch64RegisterInfo &TRI = *Subtarget.getRegisterInfo();
1064-
const MachineRegisterInfo &MRI = MF->getRegInfo();
1065-
LivePhysRegs LiveRegs(TRI);
1066+
LiveRegUnits LiveRegs(*RegInfo);
10661067
getLiveRegsForEntryMBB(LiveRegs, MBB);
10671068
// The StoreSwiftAsyncContext clobbers X16 and X17. Make sure they are
10681069
// available.
1069-
if (!LiveRegs.available(MRI, AArch64::X16) ||
1070-
!LiveRegs.available(MRI, AArch64::X17))
1070+
if (!LiveRegs.available(AArch64::X16) || !LiveRegs.available(AArch64::X17))
10711071
return false;
10721072
}
10731073

@@ -1668,8 +1668,8 @@ static void emitDefineCFAWithFP(MachineFunction &MF, MachineBasicBlock &MBB,
16681668
#ifndef NDEBUG
16691669
/// Collect live registers from the end of \p MI's parent up to (including) \p
16701670
/// MI in \p LiveRegs.
1671-
static void getLivePhysRegsUpTo(MachineInstr &MI, const TargetRegisterInfo &TRI,
1672-
LivePhysRegs &LiveRegs) {
1671+
static void getLiveRegsUpTo(MachineInstr &MI, const TargetRegisterInfo &TRI,
1672+
LiveRegUnits &LiveRegs) {
16731673

16741674
MachineBasicBlock &MBB = *MI.getParent();
16751675
LiveRegs.addLiveOuts(MBB);
@@ -1706,9 +1706,9 @@ void AArch64FrameLowering::emitPrologue(MachineFunction &MF,
17061706
NonFrameStart->getFlag(MachineInstr::FrameSetup))
17071707
++NonFrameStart;
17081708

1709-
LivePhysRegs LiveRegs(*TRI);
1709+
LiveRegUnits LiveRegs(*TRI);
17101710
if (NonFrameStart != MBB.end()) {
1711-
getLivePhysRegsUpTo(*NonFrameStart, *TRI, LiveRegs);
1711+
getLiveRegsUpTo(*NonFrameStart, *TRI, LiveRegs);
17121712
// Ignore registers used for stack management for now.
17131713
LiveRegs.removeReg(AArch64::SP);
17141714
LiveRegs.removeReg(AArch64::X19);
@@ -1730,7 +1730,7 @@ void AArch64FrameLowering::emitPrologue(MachineFunction &MF,
17301730
make_range(MBB.instr_begin(), NonFrameStart->getIterator())) {
17311731
for (auto &Op : MI.operands())
17321732
if (Op.isReg() && Op.isDef())
1733-
assert(!LiveRegs.contains(Op.getReg()) &&
1733+
assert(LiveRegs.available(Op.getReg()) &&
17341734
"live register clobbered by inserted prologue instructions");
17351735
}
17361736
});
@@ -4840,7 +4840,7 @@ MachineBasicBlock::iterator tryMergeAdjacentSTG(MachineBasicBlock::iterator II,
48404840
// FIXME : This approach of bailing out from merge is conservative in
48414841
// some ways like even if stg loops are not present after merge the
48424842
// insert list, this liveness check is done (which is not needed).
4843-
LivePhysRegs LiveRegs(*(MBB->getParent()->getSubtarget().getRegisterInfo()));
4843+
LiveRegUnits LiveRegs(*(MBB->getParent()->getSubtarget().getRegisterInfo()));
48444844
LiveRegs.addLiveOuts(*MBB);
48454845
for (auto I = MBB->rbegin();; ++I) {
48464846
MachineInstr &MI = *I;
@@ -4849,7 +4849,7 @@ MachineBasicBlock::iterator tryMergeAdjacentSTG(MachineBasicBlock::iterator II,
48494849
LiveRegs.stepBackward(*I);
48504850
}
48514851
InsertI++;
4852-
if (LiveRegs.contains(AArch64::NZCV))
4852+
if (!LiveRegs.available(AArch64::NZCV))
48534853
return InsertI;
48544854

48554855
llvm::stable_sort(Instrs,

0 commit comments

Comments
 (0)