diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
commit | 32761a6cee1d0dee366b885b7b9c777e67885688 (patch) | |
tree | d6bec92bebfb216f4126356e55518842c2f476a1 /Source/JavaScriptCore/dfg/DFGInsertionSet.h | |
parent | a4e969f4965059196ca948db781e52f7cfebf19e (diff) | |
download | WebKitGtk-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.h | 90 |
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; }; |