Skip to content

Commit

Permalink
Replace MachineRegisterInfo::TracksLiveness with a MachineFunctionPro…
Browse files Browse the repository at this point in the history
…perty

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

llvm-svn: 266020
  • Loading branch information
dschuff committed Apr 11, 2016
1 parent 74c0c09 commit f7b2bce
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 27 deletions.
13 changes: 9 additions & 4 deletions llvm/include/llvm/CodeGen/MachineFunction.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,16 @@ class MachineFunctionProperties {

// 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,
Expand Down
23 changes: 9 additions & 14 deletions llvm/include/llvm/CodeGen/MachineRegisterInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,6 @@ class MachineRegisterInfo {
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;

Expand Down Expand Up @@ -175,21 +170,21 @@ class MachineRegisterInfo {
}

/// 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.
Expand Down
13 changes: 6 additions & 7 deletions llvm/lib/CodeGen/MachineFunction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand Down
3 changes: 1 addition & 2 deletions llvm/lib/CodeGen/MachineRegisterInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit f7b2bce

Please sign in to comment.