summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDerek Schuff <dschuff@google.com>2016-04-11 23:32:13 +0000
committerDerek Schuff <dschuff@google.com>2016-04-11 23:32:13 +0000
commitf7b2bce1f1d291a10be65a1524f1406c3f6937c6 (patch)
tree93c2a3f057cf1fa2f214d5df5fc512a1933db856
parent74c0c09666b0ac3fedf55e306c4948971ea6fb4d (diff)
downloadbcm5719-llvm-f7b2bce1f1d291a10be65a1524f1406c3f6937c6.tar.gz
bcm5719-llvm-f7b2bce1f1d291a10be65a1524f1406c3f6937c6.zip
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 llvm-svn: 266020
-rw-r--r--llvm/include/llvm/CodeGen/MachineFunction.h13
-rw-r--r--llvm/include/llvm/CodeGen/MachineRegisterInfo.h23
-rw-r--r--llvm/lib/CodeGen/MachineFunction.cpp13
-rw-r--r--llvm/lib/CodeGen/MachineRegisterInfo.cpp3
4 files changed, 25 insertions, 27 deletions
diff --git a/llvm/include/llvm/CodeGen/MachineFunction.h b/llvm/include/llvm/CodeGen/MachineFunction.h
index 3fe3cd5576e..515391e92f4 100644
--- a/llvm/include/llvm/CodeGen/MachineFunction.h
+++ b/llvm/include/llvm/CodeGen/MachineFunction.h
@@ -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,
diff --git a/llvm/include/llvm/CodeGen/MachineRegisterInfo.h b/llvm/include/llvm/CodeGen/MachineRegisterInfo.h
index a2189eb62a4..dcfe0ff4862 100644
--- a/llvm/include/llvm/CodeGen/MachineRegisterInfo.h
+++ b/llvm/include/llvm/CodeGen/MachineRegisterInfo.h
@@ -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.
diff --git a/llvm/lib/CodeGen/MachineFunction.cpp b/llvm/lib/CodeGen/MachineFunction.cpp
index 8c987ba216a..da6b778cc6c 100644
--- a/llvm/lib/CodeGen/MachineFunction.cpp
+++ b/llvm/lib/CodeGen/MachineFunction.cpp
@@ -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);
diff --git a/llvm/lib/CodeGen/MachineRegisterInfo.cpp b/llvm/lib/CodeGen/MachineRegisterInfo.cpp
index 93fd52ea117..de2f3b46d3c 100644
--- a/llvm/lib/CodeGen/MachineRegisterInfo.cpp
+++ b/llvm/lib/CodeGen/MachineRegisterInfo.cpp
@@ -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);
OpenPOWER on IntegriCloud