Index: src/IceCfg.cpp |
diff --git a/src/IceCfg.cpp b/src/IceCfg.cpp |
index 5c51ae6d3893316efe28aff8793de937b902931b..7df55f523f5c919fd8257845928c4c3b57387262 100644 |
--- a/src/IceCfg.cpp |
+++ b/src/IceCfg.cpp |
@@ -334,12 +334,13 @@ void Cfg::advancedPhiLowering() { |
getLiveness()->initPhiEdgeSplits(Nodes.begin() + NumNodes, |
Variables.begin() + NumVars); |
TimerMarker TTT(TimerStack::TT_liveness, this); |
+ LivenessBV ScratchBV; |
// Iterate over the newly added nodes to add their liveness info. |
for (auto I = Nodes.begin() + NumNodes, E = Nodes.end(); I != E; ++I) { |
InstNumberT FirstInstNum = getNextInstNumber(); |
(*I)->renumberInstructions(); |
InstNumberT LastInstNum = getNextInstNumber() - 1; |
- (*I)->liveness(getLiveness()); |
+ (*I)->liveness(getLiveness(), &ScratchBV); |
John
2016/02/29 15:12:31
make scratchbv a member of Liveness?
Jim Stichnoth
2016/02/29 22:58:26
Done.
|
(*I)->livenessAddIntervals(getLiveness(), FirstInstNum, LastInstNum); |
} |
} else { |
@@ -820,12 +821,13 @@ void Cfg::liveness(LivenessMode Mode) { |
Live->init(); |
// Initialize with all nodes needing to be processed. |
BitVector NeedToProcess(Nodes.size(), true); |
+ LivenessBV ScratchBV; |
while (NeedToProcess.any()) { |
// Iterate in reverse topological order to speed up convergence. |
for (CfgNode *Node : reverse_range(Nodes)) { |
if (NeedToProcess[Node->getIndex()]) { |
NeedToProcess[Node->getIndex()] = false; |
- bool Changed = Node->liveness(getLiveness()); |
+ bool Changed = Node->liveness(getLiveness(), &ScratchBV); |
if (Changed) { |
// If the beginning-of-block liveness changed since the last |
// iteration, mark all in-edges as needing to be processed. |
@@ -1076,6 +1078,11 @@ void Cfg::emitIAS() { |
emitJumpTables(); |
} |
+size_t Cfg::getTotalMemoryMB() { |
+ constexpr size_t OneMB = 1024 * 1024; |
+ return (CfgLocalAllocator<int>().current()->getTotalMemory() / OneMB); |
John
2016/02/29 15:12:30
Add a comment explaining why int and not something
Jim Stichnoth
2016/02/29 22:58:26
Done.
|
+} |
+ |
// Dumps the IR with an optional introductory message. |
void Cfg::dump(const IceString &Message) { |
if (!BuildDefs::dump()) |
@@ -1087,10 +1094,7 @@ void Cfg::dump(const IceString &Message) { |
if (!Message.empty()) |
Str << "================ " << Message << " ================\n"; |
if (isVerbose(IceV_Mem)) { |
- constexpr size_t OneMB = 1024 * 1024; |
- Str << "Memory size = " |
- << (CfgLocalAllocator<int>().current()->getTotalMemory() / OneMB) |
- << " MB\n"; |
+ Str << "Memory size = " << getTotalMemoryMB() << " MB\n"; |
} |
setCurrentNode(getEntryNode()); |
// Print function name+args |