summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/dfg/DFGInsertionSet.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
commit32761a6cee1d0dee366b885b7b9c777e67885688 (patch)
treed6bec92bebfb216f4126356e55518842c2f476a1 /Source/JavaScriptCore/dfg/DFGInsertionSet.h
parenta4e969f4965059196ca948db781e52f7cfebf19e (diff)
downloadWebKitGtk-tarball-32761a6cee1d0dee366b885b7b9c777e67885688.tar.gz
webkitgtk-2.4.11webkitgtk-2.4.11
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGInsertionSet.h')
-rw-r--r--Source/JavaScriptCore/dfg/DFGInsertionSet.h90
1 files changed, 13 insertions, 77 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGInsertionSet.h b/Source/JavaScriptCore/dfg/DFGInsertionSet.h
index 57ff55fef..8d76c4566 100644
--- a/Source/JavaScriptCore/dfg/DFGInsertionSet.h
+++ b/Source/JavaScriptCore/dfg/DFGInsertionSet.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012-2015 Apple Inc. All rights reserved.
+ * Copyright (C) 2012, 2013 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -26,6 +26,8 @@
#ifndef DFGInsertionSet_h
#define DFGInsertionSet_h
+#include <wtf/Platform.h>
+
#if ENABLE(DFG_JIT)
#include "DFGGraph.h"
@@ -43,18 +45,10 @@ public:
{
}
- Graph& graph() { return m_graph; }
-
- // Adds another code insertion. It's expected that you'll usually insert things in order. If
- // you don't, this function will perform a linear search to find the largest insertion point
- // at which insertion order would be preserved. This is essentially equivalent to if you did
- // a stable sort on the insertions.
Node* insert(const Insertion& insertion)
{
- if (LIKELY(!m_insertions.size() || m_insertions.last().index() <= insertion.index()))
- m_insertions.append(insertion);
- else
- insertSlow(insertion);
+ ASSERT(!m_insertions.size() || m_insertions.last().index() <= insertion.index());
+ m_insertions.append(insertion);
return insertion.element();
}
@@ -63,77 +57,19 @@ public:
return insert(Insertion(index, element));
}
- template<typename... Params>
- Node* insertNode(size_t index, SpeculatedType type, Params... params)
- {
- return insert(index, m_graph.addNode(type, params...));
- }
-
- Node* insertConstant(
- size_t index, NodeOrigin origin, FrozenValue* value,
- NodeType op = JSConstant)
- {
- return insertNode(
- index, speculationFromValue(value->value()), op, origin, OpInfo(value));
- }
-
- Edge insertConstantForUse(
- size_t index, NodeOrigin origin, FrozenValue* value, UseKind useKind)
- {
- NodeType op;
- if (isDouble(useKind))
- op = DoubleConstant;
- else if (useKind == Int52RepUse)
- op = Int52Constant;
- else
- op = JSConstant;
- return Edge(insertConstant(index, origin, value, op), useKind);
+#define DFG_DEFINE_INSERT_NODE(templatePre, templatePost, typeParams, valueParamsComma, valueParams, valueArgs) \
+ templatePre typeParams templatePost Node* insertNode(size_t index, SpeculatedType type valueParamsComma valueParams) \
+ { \
+ return insert(index, m_graph.addNode(type valueParamsComma valueArgs)); \
}
+ DFG_VARIADIC_TEMPLATE_FUNCTION(DFG_DEFINE_INSERT_NODE)
+#undef DFG_DEFINE_INSERT_NODE
- Node* insertConstant(size_t index, NodeOrigin origin, JSValue value, NodeType op = JSConstant)
+ void execute(BasicBlock* block)
{
- return insertConstant(index, origin, m_graph.freeze(value), op);
+ executeInsertions(*block, m_insertions);
}
-
- Edge insertConstantForUse(size_t index, NodeOrigin origin, JSValue value, UseKind useKind)
- {
- return insertConstantForUse(index, origin, m_graph.freeze(value), useKind);
- }
-
- Edge insertBottomConstantForUse(size_t index, NodeOrigin origin, UseKind useKind)
- {
- if (isDouble(useKind))
- return insertConstantForUse(index, origin, jsNumber(PNaN), useKind);
- if (useKind == Int52RepUse)
- return insertConstantForUse(index, origin, jsNumber(0), useKind);
- return insertConstantForUse(index, origin, jsUndefined(), useKind);
- }
-
- Node* insertCheck(size_t index, NodeOrigin origin, AdjacencyList children)
- {
- children = children.justChecks();
- if (children.isEmpty())
- return nullptr;
- return insertNode(index, SpecNone, Check, origin, children);
- }
-
- Node* insertCheck(size_t index, Node* node)
- {
- return insertCheck(index, node->origin, node->children);
- }
-
- Node* insertCheck(size_t index, NodeOrigin origin, Edge edge)
- {
- if (edge.willHaveCheck())
- return insertNode(index, SpecNone, Check, origin, edge);
- return nullptr;
- }
-
- void execute(BasicBlock* block);
-
private:
- void insertSlow(const Insertion&);
-
Graph& m_graph;
Vector<Insertion, 8> m_insertions;
};