summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/dfg/DFGNaturalLoops.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/JavaScriptCore/dfg/DFGNaturalLoops.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGNaturalLoops.cpp')
-rw-r--r--Source/JavaScriptCore/dfg/DFGNaturalLoops.cpp22
1 files changed, 11 insertions, 11 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGNaturalLoops.cpp b/Source/JavaScriptCore/dfg/DFGNaturalLoops.cpp
index 848917f70..1b7472460 100644
--- a/Source/JavaScriptCore/dfg/DFGNaturalLoops.cpp
+++ b/Source/JavaScriptCore/dfg/DFGNaturalLoops.cpp
@@ -29,6 +29,7 @@
#if ENABLE(DFG_JIT)
#include "DFGGraph.h"
+#include "JSCInlines.h"
#include <wtf/CommaPrinter.h>
namespace JSC { namespace DFG {
@@ -41,11 +42,10 @@ void NaturalLoop::dump(PrintStream& out) const
out.print("]");
}
-NaturalLoops::NaturalLoops() { }
-NaturalLoops::~NaturalLoops() { }
-
-void NaturalLoops::compute(Graph& graph)
+NaturalLoops::NaturalLoops(Graph& graph)
{
+ ASSERT(graph.m_dominators);
+
// Implement the classic dominator-based natural loop finder. The first
// step is to find all control flow edges A -> B where B dominates A.
// Then B is a loop header and A is a backward branching block. We will
@@ -56,11 +56,9 @@ void NaturalLoops::compute(Graph& graph)
static const bool verbose = false;
- graph.m_dominators.computeIfNecessary(graph);
-
if (verbose) {
dataLog("Dominators:\n");
- graph.m_dominators.dump(graph, WTF::dataFile());
+ graph.m_dominators->dump(WTF::dataFile());
}
m_loops.resize(0);
@@ -72,7 +70,7 @@ void NaturalLoops::compute(Graph& graph)
for (unsigned i = block->numSuccessors(); i--;) {
BasicBlock* successor = block->successor(i);
- if (!graph.m_dominators.dominates(successor, block))
+ if (!graph.m_dominators->dominates(successor, block))
continue;
bool found = false;
for (unsigned j = m_loops.size(); j--;) {
@@ -107,7 +105,7 @@ void NaturalLoops::compute(Graph& graph)
dataLog("Dealing with loop ", loop, "\n");
for (unsigned j = loop.size(); j--;) {
- seenBlocks.set(loop[j]->index);
+ seenBlocks[loop[j]->index] = true;
blockWorklist.append(loop[j]);
}
@@ -122,12 +120,12 @@ void NaturalLoops::compute(Graph& graph)
for (unsigned j = block->predecessors.size(); j--;) {
BasicBlock* predecessor = block->predecessors[j];
- if (seenBlocks.get(predecessor->index))
+ if (seenBlocks[predecessor->index])
continue;
loop.addBlock(predecessor);
blockWorklist.append(predecessor);
- seenBlocks.set(predecessor->index);
+ seenBlocks[predecessor->index] = true;
}
}
}
@@ -195,6 +193,8 @@ void NaturalLoops::compute(Graph& graph)
dataLog("Results: ", *this, "\n");
}
+NaturalLoops::~NaturalLoops() { }
+
Vector<const NaturalLoop*> NaturalLoops::loopsOf(BasicBlock* block) const
{
Vector<const NaturalLoop*> result;