mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-28 14:10:41 +00:00
Replace MachineRegisterInfo::TracksLiveness with a MachineFunctionProperty
Use the MachineFunctionProperty mechanism to indicate whether the liveness info is accurate instead of a bool flag on MRI. Keeps the MRI accessor function for convenience. NFC Differential Revision: http://reviews.llvm.org/D18767 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@266020 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5ed848ead6
commit
40e099b405
@ -106,11 +106,16 @@ public:
|
||||
|
||||
// Property descriptions:
|
||||
// IsSSA: True when the machine function is in SSA form and virtual registers
|
||||
// have a single def.
|
||||
// TracksLiveness: (currently unsued, intended to eventually replace
|
||||
// MachineRegisterInfo::tracksLiveness())
|
||||
// have a single def.
|
||||
// TracksLiveness: True when tracking register liveness accurately.
|
||||
// While this property is set, register liveness information in basic block
|
||||
// live-in lists and machine instruction operands (e.g. kill flags, implicit
|
||||
// defs) is accurate. This means it can be used to change the code in ways
|
||||
// that affect the values in registers, for example by the register
|
||||
// scavenger.
|
||||
// When this property is clear, liveness is no longer reliable.
|
||||
// AllVRegsAllocated: All virtual registers have been allocated; i.e. all
|
||||
// register operands are physical registers.
|
||||
// register operands are physical registers.
|
||||
enum class Property : unsigned {
|
||||
IsSSA,
|
||||
TracksLiveness,
|
||||
|
@ -50,11 +50,6 @@ private:
|
||||
MachineFunction *MF;
|
||||
Delegate *TheDelegate;
|
||||
|
||||
/// TracksLiveness - True while register liveness is being tracked accurately.
|
||||
/// Basic block live-in lists, kill flags, and implicit defs may not be
|
||||
/// accurate when after this flag is cleared.
|
||||
bool TracksLiveness;
|
||||
|
||||
/// True if subregister liveness is tracked.
|
||||
bool TracksSubRegLiveness;
|
||||
|
||||
@ -175,21 +170,21 @@ public:
|
||||
}
|
||||
|
||||
/// tracksLiveness - Returns true when tracking register liveness accurately.
|
||||
///
|
||||
/// While this flag is true, register liveness information in basic block
|
||||
/// live-in lists and machine instruction operands is accurate. This means it
|
||||
/// can be used to change the code in ways that affect the values in
|
||||
/// registers, for example by the register scavenger.
|
||||
///
|
||||
/// When this flag is false, liveness is no longer reliable.
|
||||
bool tracksLiveness() const { return TracksLiveness; }
|
||||
/// (see MachineFUnctionProperties::Property description for details)
|
||||
bool tracksLiveness() const {
|
||||
return MF->getProperties().hasProperty(
|
||||
MachineFunctionProperties::Property::TracksLiveness);
|
||||
}
|
||||
|
||||
/// invalidateLiveness - Indicates that register liveness is no longer being
|
||||
/// tracked accurately.
|
||||
///
|
||||
/// This should be called by late passes that invalidate the liveness
|
||||
/// information.
|
||||
void invalidateLiveness() { TracksLiveness = false; }
|
||||
void invalidateLiveness() {
|
||||
MF->getProperties().clear(
|
||||
MachineFunctionProperties::Property::TracksLiveness);
|
||||
}
|
||||
|
||||
/// Returns true if liveness for register class @p RC should be tracked at
|
||||
/// the subregister level.
|
||||
|
@ -63,6 +63,9 @@ void MachineFunctionProperties::print(raw_ostream &ROS) const {
|
||||
case Property::IsSSA:
|
||||
ROS << (HasProperty ? "SSA, " : "Post SSA, ");
|
||||
break;
|
||||
case Property::TracksLiveness:
|
||||
ROS << (HasProperty ? "" : "not ") << "tracking liveness, ";
|
||||
break;
|
||||
case Property::AllVRegsAllocated:
|
||||
ROS << (HasProperty ? "AllVRegsAllocated" : "HasVRegs");
|
||||
break;
|
||||
@ -95,8 +98,9 @@ MachineFunction::MachineFunction(const Function *F, const TargetMachine &TM,
|
||||
unsigned FunctionNum, MachineModuleInfo &mmi)
|
||||
: Fn(F), Target(TM), STI(TM.getSubtargetImpl(*F)), Ctx(mmi.getContext()),
|
||||
MMI(mmi) {
|
||||
// Assume the function starts in SSA form.
|
||||
// Assume the function starts in SSA form with correct liveness.
|
||||
Properties.set(MachineFunctionProperties::Property::IsSSA);
|
||||
Properties.set(MachineFunctionProperties::Property::TracksLiveness);
|
||||
if (STI->getRegisterInfo())
|
||||
RegInfo = new (Allocator) MachineRegisterInfo(this);
|
||||
else
|
||||
@ -404,12 +408,7 @@ void MachineFunction::print(raw_ostream &OS, SlotIndexes *Indexes) const {
|
||||
OS << "# Machine code for function " << getName() << ": ";
|
||||
OS << "Properties: <";
|
||||
getProperties().print(OS);
|
||||
OS << "> : ";
|
||||
if (RegInfo) {
|
||||
if (!RegInfo->tracksLiveness())
|
||||
OS << "not tracking liveness";
|
||||
}
|
||||
OS << '\n';
|
||||
OS << ">\n";
|
||||
|
||||
// Print Frame Information
|
||||
FrameInfo->print(*this, OS);
|
||||
|
@ -25,8 +25,7 @@ using namespace llvm;
|
||||
void MachineRegisterInfo::Delegate::anchor() {}
|
||||
|
||||
MachineRegisterInfo::MachineRegisterInfo(MachineFunction *MF)
|
||||
: MF(MF), TheDelegate(nullptr), TracksLiveness(true),
|
||||
TracksSubRegLiveness(false) {
|
||||
: MF(MF), TheDelegate(nullptr), TracksSubRegLiveness(false) {
|
||||
unsigned NumRegs = getTargetRegisterInfo()->getNumRegs();
|
||||
VRegInfo.reserve(256);
|
||||
RegAllocHints.reserve(256);
|
||||
|
Loading…
Reference in New Issue
Block a user