1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-02-01 05:01:59 +01:00

MachineRegisterInfo/MIR: Initialize tracksSubRegLiveness early, do not print/parser it

tracksSubRegLiveness only depends on the Subtarget and a cl::opt, there
is not need to change it or save/parse it in a .mir file.
Make the field const and move the initialization LiveIntervalAnalysis to the
MachineRegisterInfo constructor. Also cleanup some code and fix some
instances which better use MachineRegisterInfo::subRegLivenessEnabled() instead
of TargetSubtargetInfo::enableSubRegLiveness().

llvm-svn: 279676
This commit is contained in:
Matthias Braun 2016-08-24 22:17:45 +00:00
parent 3fc7c8cb26
commit a42c8d848a
26 changed files with 17 additions and 57 deletions

View File

@ -390,7 +390,6 @@ struct MachineFunction {
bool Selected = false; bool Selected = false;
// Register information // Register information
bool TracksRegLiveness = false; bool TracksRegLiveness = false;
bool TracksSubRegLiveness = false;
std::vector<VirtualRegisterDefinition> VirtualRegisters; std::vector<VirtualRegisterDefinition> VirtualRegisters;
std::vector<MachineFunctionLiveIn> LiveIns; std::vector<MachineFunctionLiveIn> LiveIns;
Optional<std::vector<FlowStringValue>> CalleeSavedRegisters; Optional<std::vector<FlowStringValue>> CalleeSavedRegisters;
@ -415,7 +414,6 @@ template <> struct MappingTraits<MachineFunction> {
YamlIO.mapOptional("regBankSelected", MF.RegBankSelected); YamlIO.mapOptional("regBankSelected", MF.RegBankSelected);
YamlIO.mapOptional("selected", MF.Selected); YamlIO.mapOptional("selected", MF.Selected);
YamlIO.mapOptional("tracksRegLiveness", MF.TracksRegLiveness); YamlIO.mapOptional("tracksRegLiveness", MF.TracksRegLiveness);
YamlIO.mapOptional("tracksSubRegLiveness", MF.TracksSubRegLiveness);
YamlIO.mapOptional("registers", MF.VirtualRegisters); YamlIO.mapOptional("registers", MF.VirtualRegisters);
YamlIO.mapOptional("liveins", MF.LiveIns); YamlIO.mapOptional("liveins", MF.LiveIns);
YamlIO.mapOptional("calleeSavedRegisters", MF.CalleeSavedRegisters); YamlIO.mapOptional("calleeSavedRegisters", MF.CalleeSavedRegisters);

View File

@ -51,7 +51,7 @@ private:
Delegate *TheDelegate; Delegate *TheDelegate;
/// True if subregister liveness is tracked. /// True if subregister liveness is tracked.
bool TracksSubRegLiveness; const bool TracksSubRegLiveness;
/// VRegInfo - Information we keep for each virtual register. /// VRegInfo - Information we keep for each virtual register.
/// ///
@ -199,10 +199,6 @@ public:
return TracksSubRegLiveness; return TracksSubRegLiveness;
} }
void enableSubRegLiveness(bool Enable = true) {
TracksSubRegLiveness = Enable;
}
//===--------------------------------------------------------------------===// //===--------------------------------------------------------------------===//
// Register Info // Register Info
//===--------------------------------------------------------------------===// //===--------------------------------------------------------------------===//

View File

@ -218,6 +218,8 @@ public:
} }
/// Enable tracking of subregister liveness in register allocator. /// Enable tracking of subregister liveness in register allocator.
/// Please use MachineRegisterInfo::subRegLivenessEnabled() instead where
/// possible.
virtual bool enableSubRegLiveness() const { return false; } virtual bool enableSubRegLiveness() const { return false; }
}; };

View File

@ -577,12 +577,12 @@ bool DetectDeadLanes::runOnMachineFunction(MachineFunction &MF) {
// register coalescer cannot deal with hidden dead defs. However without // register coalescer cannot deal with hidden dead defs. However without
// subregister liveness enabled, the expected benefits of this pass are small // subregister liveness enabled, the expected benefits of this pass are small
// so we safe the compile time. // so we safe the compile time.
if (!MF.getSubtarget().enableSubRegLiveness()) { MRI = &MF.getRegInfo();
if (!MRI->subRegLivenessEnabled()) {
DEBUG(dbgs() << "Skipping Detect dead lanes pass\n"); DEBUG(dbgs() << "Skipping Detect dead lanes pass\n");
return false; return false;
} }
MRI = &MF.getRegInfo();
TRI = MRI->getTargetRegisterInfo(); TRI = MRI->getTargetRegisterInfo();
unsigned NumVirtRegs = MRI->getNumVirtRegs(); unsigned NumVirtRegs = MRI->getNumVirtRegs();

View File

@ -58,10 +58,6 @@ static cl::opt<bool> EnablePrecomputePhysRegs(
static bool EnablePrecomputePhysRegs = false; static bool EnablePrecomputePhysRegs = false;
#endif // NDEBUG #endif // NDEBUG
static cl::opt<bool> EnableSubRegLiveness(
"enable-subreg-liveness", cl::Hidden, cl::init(true),
cl::desc("Enable subregister liveness tracking."));
namespace llvm { namespace llvm {
cl::opt<bool> UseSegmentSetForPhysRegs( cl::opt<bool> UseSegmentSetForPhysRegs(
"use-segment-set-for-physregs", cl::Hidden, cl::init(true), "use-segment-set-for-physregs", cl::Hidden, cl::init(true),
@ -119,9 +115,6 @@ bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) {
Indexes = &getAnalysis<SlotIndexes>(); Indexes = &getAnalysis<SlotIndexes>();
DomTree = &getAnalysis<MachineDominatorTree>(); DomTree = &getAnalysis<MachineDominatorTree>();
if (EnableSubRegLiveness && MF->getSubtarget().enableSubRegLiveness())
MRI->enableSubRegLiveness(true);
if (!LRCalc) if (!LRCalc)
LRCalc = new LiveRangeCalc(); LRCalc = new LiveRangeCalc();

View File

@ -401,7 +401,6 @@ bool MIRParserImpl::initializeRegisterInfo(PerFunctionMIParsingState &PFS,
assert(RegInfo.tracksLiveness()); assert(RegInfo.tracksLiveness());
if (!YamlMF.TracksRegLiveness) if (!YamlMF.TracksRegLiveness)
RegInfo.invalidateLiveness(); RegInfo.invalidateLiveness();
RegInfo.enableSubRegLiveness(YamlMF.TracksSubRegLiveness);
SMDiagnostic Error; SMDiagnostic Error;
// Parse the virtual register information. // Parse the virtual register information.

View File

@ -213,7 +213,6 @@ void MIRPrinter::convert(yaml::MachineFunction &MF,
const MachineRegisterInfo &RegInfo, const MachineRegisterInfo &RegInfo,
const TargetRegisterInfo *TRI) { const TargetRegisterInfo *TRI) {
MF.TracksRegLiveness = RegInfo.tracksLiveness(); MF.TracksRegLiveness = RegInfo.tracksLiveness();
MF.TracksSubRegLiveness = RegInfo.subRegLivenessEnabled();
// Print the virtual register definitions. // Print the virtual register definitions.
for (unsigned I = 0, E = RegInfo.getNumVirtRegs(); I < E; ++I) { for (unsigned I = 0, E = RegInfo.getNumVirtRegs(); I < E; ++I) {

View File

@ -21,11 +21,16 @@
using namespace llvm; using namespace llvm;
static cl::opt<bool> EnableSubRegLiveness("enable-subreg-liveness", cl::Hidden,
cl::init(true), cl::desc("Enable subregister liveness tracking."));
// Pin the vtable to this file. // Pin the vtable to this file.
void MachineRegisterInfo::Delegate::anchor() {} void MachineRegisterInfo::Delegate::anchor() {}
MachineRegisterInfo::MachineRegisterInfo(MachineFunction *MF) MachineRegisterInfo::MachineRegisterInfo(MachineFunction *MF)
: MF(MF), TheDelegate(nullptr), TracksSubRegLiveness(false) { : MF(MF), TheDelegate(nullptr),
TracksSubRegLiveness(MF->getSubtarget().enableSubRegLiveness() &&
EnableSubRegLiveness) {
unsigned NumRegs = getTargetRegisterInfo()->getNumRegs(); unsigned NumRegs = getTargetRegisterInfo()->getNumRegs();
VRegInfo.reserve(256); VRegInfo.reserve(256);
RegAllocHints.reserve(256); RegAllocHints.reserve(256);

View File

@ -363,14 +363,14 @@ void RenameIndependentSubregs::computeMainRangesFixFlags(
bool RenameIndependentSubregs::runOnMachineFunction(MachineFunction &MF) { bool RenameIndependentSubregs::runOnMachineFunction(MachineFunction &MF) {
// Skip renaming if liveness of subregister is not tracked. // Skip renaming if liveness of subregister is not tracked.
if (!MF.getSubtarget().enableSubRegLiveness()) MRI = &MF.getRegInfo();
if (!MRI->subRegLivenessEnabled())
return false; return false;
DEBUG(dbgs() << "Renaming independent subregister live ranges in " DEBUG(dbgs() << "Renaming independent subregister live ranges in "
<< MF.getName() << '\n'); << MF.getName() << '\n');
LIS = &getAnalysis<LiveIntervals>(); LIS = &getAnalysis<LiveIntervals>();
MRI = &MF.getRegInfo();
TII = MF.getSubtarget().getInstrInfo(); TII = MF.getSubtarget().getInstrInfo();
// Iterate over all vregs. Note that we query getNumVirtRegs() the newly // Iterate over all vregs. Note that we query getNumVirtRegs() the newly

View File

@ -31,7 +31,6 @@ exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
allVRegsAllocated: true allVRegsAllocated: true
tracksRegLiveness: false tracksRegLiveness: false
tracksSubRegLiveness: false
liveins: liveins:
- { reg: '%x0' } - { reg: '%x0' }
- { reg: '%w1' } - { reg: '%w1' }
@ -88,7 +87,6 @@ exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
allVRegsAllocated: true allVRegsAllocated: true
tracksRegLiveness: false tracksRegLiveness: false
tracksSubRegLiveness: false
liveins: liveins:
- { reg: '%x0' } - { reg: '%x0' }
- { reg: '%w1' } - { reg: '%w1' }

View File

@ -18,7 +18,6 @@ exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
allVRegsAllocated: true allVRegsAllocated: true
tracksRegLiveness: false tracksRegLiveness: false
tracksSubRegLiveness: false
frameInfo: frameInfo:
isFrameAddressTaken: false isFrameAddressTaken: false
isReturnAddressTaken: false isReturnAddressTaken: false

View File

@ -82,7 +82,6 @@ exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
allVRegsAllocated: true allVRegsAllocated: true
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
liveins: liveins:
- { reg: '%r0' } - { reg: '%r0' }
- { reg: '%r1' } - { reg: '%r1' }

View File

@ -36,7 +36,6 @@ exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
allVRegsAllocated: true allVRegsAllocated: true
tracksRegLiveness: false tracksRegLiveness: false
tracksSubRegLiveness: false
liveins: liveins:
- { reg: '%w0' } - { reg: '%w0' }
frameInfo: frameInfo:

View File

@ -32,8 +32,7 @@
... ...
--- ---
name: float name: float
tracksSubRegLiveness: true
liveins: liveins:
- { reg: '%sgpr0_sgpr1' } - { reg: '%sgpr0_sgpr1' }
frameInfo: frameInfo:

View File

@ -32,8 +32,7 @@
... ...
--- ---
name: float name: float
tracksSubRegLiveness: true
liveins: liveins:
- { reg: '%sgpr0_sgpr1' } - { reg: '%sgpr0_sgpr1' }
frameInfo: frameInfo:

View File

@ -41,8 +41,7 @@
... ...
--- ---
name: float name: float
tracksSubRegLiveness: true
liveins: liveins:
- { reg: '%sgpr0_sgpr1' } - { reg: '%sgpr0_sgpr1' }
frameInfo: frameInfo:
@ -72,8 +71,7 @@ body: |
S_ENDPGM S_ENDPGM
... ...
--- ---
name: float2 name: float2
tracksSubRegLiveness: true
liveins: liveins:
- { reg: '%sgpr0_sgpr1' } - { reg: '%sgpr0_sgpr1' }
frameInfo: frameInfo:

View File

@ -93,7 +93,6 @@ exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
allVRegsAllocated: true allVRegsAllocated: true
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
liveins: liveins:
- { reg: '%r0' } - { reg: '%r0' }
- { reg: '%r1' } - { reg: '%r1' }

View File

@ -18,7 +18,6 @@
--- ---
# CHECK: name: foo # CHECK: name: foo
# CHECK: tracksRegLiveness: false # CHECK: tracksRegLiveness: false
# CHECK-NEXT: tracksSubRegLiveness: false
# CHECK: ... # CHECK: ...
name: foo name: foo
body: | body: |
@ -27,11 +26,9 @@ body: |
--- ---
# CHECK: name: bar # CHECK: name: bar
# CHECK: tracksRegLiveness: true # CHECK: tracksRegLiveness: true
# CHECK-NEXT: tracksSubRegLiveness: true
# CHECK: ... # CHECK: ...
name: bar name: bar
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: true
body: | body: |
bb.0: bb.0:
... ...

View File

@ -178,7 +178,6 @@ exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
allVRegsAllocated: false allVRegsAllocated: false
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
registers: registers:
- { id: 0, class: gpr } - { id: 0, class: gpr }
- { id: 1, class: gpr } - { id: 1, class: gpr }
@ -225,7 +224,6 @@ exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
allVRegsAllocated: false allVRegsAllocated: false
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
registers: registers:
- { id: 0, class: gpr } - { id: 0, class: gpr }
- { id: 1, class: gpr } - { id: 1, class: gpr }
@ -270,7 +268,6 @@ exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
allVRegsAllocated: false allVRegsAllocated: false
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
registers: registers:
- { id: 0, class: gpr } - { id: 0, class: gpr }
- { id: 1, class: gpr } - { id: 1, class: gpr }
@ -319,7 +316,6 @@ exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
allVRegsAllocated: false allVRegsAllocated: false
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
registers: registers:
- { id: 0, class: gpr } - { id: 0, class: gpr }
- { id: 1, class: gpr } - { id: 1, class: gpr }
@ -368,7 +364,6 @@ exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
allVRegsAllocated: false allVRegsAllocated: false
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
registers: registers:
- { id: 0, class: gpr } - { id: 0, class: gpr }
- { id: 1, class: gpr } - { id: 1, class: gpr }
@ -417,7 +412,6 @@ exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
allVRegsAllocated: false allVRegsAllocated: false
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
registers: registers:
- { id: 0, class: gpr } - { id: 0, class: gpr }
- { id: 1, class: gpr } - { id: 1, class: gpr }
@ -466,7 +460,6 @@ exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
allVRegsAllocated: false allVRegsAllocated: false
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
registers: registers:
- { id: 0, class: gpr } - { id: 0, class: gpr }
- { id: 1, class: gpr } - { id: 1, class: gpr }
@ -515,7 +508,6 @@ exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
allVRegsAllocated: false allVRegsAllocated: false
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
registers: registers:
- { id: 0, class: gpr } - { id: 0, class: gpr }
- { id: 1, class: gpr } - { id: 1, class: gpr }
@ -628,7 +620,6 @@ exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
allVRegsAllocated: false allVRegsAllocated: false
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
registers: registers:
- { id: 0, class: gpr } - { id: 0, class: gpr }
- { id: 1, class: gpr } - { id: 1, class: gpr }

View File

@ -47,7 +47,6 @@ exposesReturnsTwice: false
hasInlineAsm: true hasInlineAsm: true
allVRegsAllocated: true allVRegsAllocated: true
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
liveins: liveins:
- { reg: '%x3' } - { reg: '%x3' }
- { reg: '%x4' } - { reg: '%x4' }

View File

@ -29,7 +29,6 @@ exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
allVRegsAllocated: true allVRegsAllocated: true
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
frameInfo: frameInfo:
isFrameAddressTaken: false isFrameAddressTaken: false
isReturnAddressTaken: false isReturnAddressTaken: false

View File

@ -41,7 +41,6 @@ alignment: 2
exposesReturnsTwice: false exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
registers: registers:
- { id: 0, class: g8rc_and_g8rc_nox0 } - { id: 0, class: g8rc_and_g8rc_nox0 }
- { id: 1, class: g8rc_and_g8rc_nox0 } - { id: 1, class: g8rc_and_g8rc_nox0 }

View File

@ -35,7 +35,6 @@ exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
allVRegsAllocated: false allVRegsAllocated: false
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
registers: registers:
- { id: 0, class: g8rc } - { id: 0, class: g8rc }
- { id: 1, class: g8rc } - { id: 1, class: g8rc }

View File

@ -87,7 +87,6 @@ name: imp_null_check_with_bitwise_op_0
alignment: 4 alignment: 4
allVRegsAllocated: true allVRegsAllocated: true
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
liveins: liveins:
- { reg: '%rdi' } - { reg: '%rdi' }
- { reg: '%esi' } - { reg: '%esi' }
@ -131,7 +130,6 @@ name: imp_null_check_with_bitwise_op_1
alignment: 4 alignment: 4
allVRegsAllocated: true allVRegsAllocated: true
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
liveins: liveins:
- { reg: '%rdi' } - { reg: '%rdi' }
- { reg: '%esi' } - { reg: '%esi' }
@ -180,7 +178,6 @@ name: imp_null_check_with_bitwise_op_2
alignment: 4 alignment: 4
allVRegsAllocated: true allVRegsAllocated: true
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
liveins: liveins:
- { reg: '%rdi' } - { reg: '%rdi' }
- { reg: '%esi' } - { reg: '%esi' }
@ -225,7 +222,6 @@ name: imp_null_check_with_bitwise_op_3
alignment: 4 alignment: 4
allVRegsAllocated: true allVRegsAllocated: true
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
liveins: liveins:
- { reg: '%rdi' } - { reg: '%rdi' }
- { reg: '%rsi' } - { reg: '%rsi' }

View File

@ -160,7 +160,6 @@ exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
allVRegsAllocated: true allVRegsAllocated: true
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
liveins: liveins:
- { reg: '%edi' } - { reg: '%edi' }
- { reg: '%esi' } - { reg: '%esi' }

View File

@ -162,7 +162,6 @@ exposesReturnsTwice: false
hasInlineAsm: false hasInlineAsm: false
allVRegsAllocated: true allVRegsAllocated: true
tracksRegLiveness: true tracksRegLiveness: true
tracksSubRegLiveness: false
liveins: liveins:
- { reg: '%edi' } - { reg: '%edi' }
- { reg: '%rsi' } - { reg: '%rsi' }