diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/JavaScriptCore/dfg/DFGInvalidationPointInjectionPhase.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGInvalidationPointInjectionPhase.cpp')
-rw-r--r-- | Source/JavaScriptCore/dfg/DFGInvalidationPointInjectionPhase.cpp | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGInvalidationPointInjectionPhase.cpp b/Source/JavaScriptCore/dfg/DFGInvalidationPointInjectionPhase.cpp index d71a7cbda..e9fbd3548 100644 --- a/Source/JavaScriptCore/dfg/DFGInvalidationPointInjectionPhase.cpp +++ b/Source/JavaScriptCore/dfg/DFGInvalidationPointInjectionPhase.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013 Apple Inc. All rights reserved. + * Copyright (C) 2013, 2014 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -28,11 +28,12 @@ #if ENABLE(DFG_JIT) +#include "DFGBlockSetInlines.h" #include "DFGClobberize.h" #include "DFGGraph.h" #include "DFGInsertionSet.h" #include "DFGPhase.h" -#include "Operations.h" +#include "JSCInlines.h" namespace JSC { namespace DFG { @@ -50,30 +51,28 @@ public: { ASSERT(m_graph.m_form != SSA); - BitVector blocksThatNeedInvalidationPoints; + BlockSet blocksThatNeedInvalidationPoints; for (BlockIndex blockIndex = m_graph.numBlocks(); blockIndex--;) { BasicBlock* block = m_graph.block(blockIndex); if (!block) continue; + m_originThatHadFire = CodeOrigin(); + for (unsigned nodeIndex = 0; nodeIndex < block->size(); ++nodeIndex) handle(nodeIndex, block->at(nodeIndex)); // Note: this assumes that control flow occurs at bytecode instruction boundaries. if (m_originThatHadFire.isSet()) { for (unsigned i = block->numSuccessors(); i--;) - blocksThatNeedInvalidationPoints.set(block->successor(i)->index); + blocksThatNeedInvalidationPoints.add(block->successor(i)); } m_insertionSet.execute(block); } - - for (BlockIndex blockIndex = m_graph.numBlocks(); blockIndex--;) { - if (!blocksThatNeedInvalidationPoints.get(blockIndex)) - continue; - - BasicBlock* block = m_graph.block(blockIndex); + + for (BasicBlock* block : blocksThatNeedInvalidationPoints.iterable(m_graph)) { insertInvalidationCheck(0, block->at(0)); m_insertionSet.execute(block); } @@ -84,18 +83,18 @@ public: private: void handle(unsigned nodeIndex, Node* node) { - if (m_originThatHadFire.isSet() && m_originThatHadFire != node->codeOrigin) { + if (m_originThatHadFire.isSet() && m_originThatHadFire != node->origin.forExit) { insertInvalidationCheck(nodeIndex, node); m_originThatHadFire = CodeOrigin(); } if (writesOverlap(m_graph, node, Watchpoint_fire)) - m_originThatHadFire = node->codeOrigin; + m_originThatHadFire = node->origin.forExit; } void insertInvalidationCheck(unsigned nodeIndex, Node* node) { - m_insertionSet.insertNode(nodeIndex, SpecNone, InvalidationPoint, node->codeOrigin); + m_insertionSet.insertNode(nodeIndex, SpecNone, InvalidationPoint, node->origin); } CodeOrigin m_originThatHadFire; @@ -104,7 +103,6 @@ private: bool performInvalidationPointInjection(Graph& graph) { - SamplingRegion samplingRegion("DFG Invalidation Point Injection Phase"); return runPhase<InvalidationPointInjectionPhase>(graph); } |