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/DFGCommonData.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGCommonData.cpp')
-rw-r--r-- | Source/JavaScriptCore/dfg/DFGCommonData.cpp | 60 |
1 files changed, 53 insertions, 7 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGCommonData.cpp b/Source/JavaScriptCore/dfg/DFGCommonData.cpp index 7b7ed0e40..42dd3813a 100644 --- a/Source/JavaScriptCore/dfg/DFGCommonData.cpp +++ b/Source/JavaScriptCore/dfg/DFGCommonData.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013 Apple Inc. All rights reserved. + * Copyright (C) 2013, 2015 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -31,7 +31,9 @@ #include "CodeBlock.h" #include "DFGNode.h" #include "DFGPlan.h" -#include "Operations.h" +#include "InlineCallFrame.h" +#include "JSCInlines.h" +#include "TrackedReferences.h" #include "VM.h" namespace JSC { namespace DFG { @@ -40,19 +42,42 @@ void CommonData::notifyCompilingStructureTransition(Plan& plan, CodeBlock* codeB { plan.transitions.addLazily( codeBlock, - node->codeOrigin.codeOriginOwner(), - node->structureTransitionData().previousStructure, - node->structureTransitionData().newStructure); + node->origin.semantic.codeOriginOwner(), + node->transition()->previous.get(), + node->transition()->next.get()); } -unsigned CommonData::addCodeOrigin(CodeOrigin codeOrigin) +CallSiteIndex CommonData::addCodeOrigin(CodeOrigin codeOrigin) { if (codeOrigins.isEmpty() || codeOrigins.last() != codeOrigin) codeOrigins.append(codeOrigin); unsigned index = codeOrigins.size() - 1; ASSERT(codeOrigins[index] == codeOrigin); - return index; + return CallSiteIndex(index); +} + +CallSiteIndex CommonData::addUniqueCallSiteIndex(CodeOrigin codeOrigin) +{ + if (callSiteIndexFreeList.size()) + return CallSiteIndex(callSiteIndexFreeList.takeAny()); + + codeOrigins.append(codeOrigin); + unsigned index = codeOrigins.size() - 1; + ASSERT(codeOrigins[index] == codeOrigin); + return CallSiteIndex(index); +} + +CallSiteIndex CommonData::lastCallSite() const +{ + RELEASE_ASSERT(codeOrigins.size()); + return CallSiteIndex(codeOrigins.size() - 1); +} + +void CommonData::removeCallSiteIndex(CallSiteIndex callSite) +{ + RELEASE_ASSERT(callSite.bits() < codeOrigins.size()); + callSiteIndexFreeList.add(callSite.bits()); } void CommonData::shrinkToFit() @@ -72,6 +97,27 @@ bool CommonData::invalidate() return true; } +void CommonData::validateReferences(const TrackedReferences& trackedReferences) +{ + if (InlineCallFrameSet* set = inlineCallFrames.get()) { + for (InlineCallFrame* inlineCallFrame : *set) { + for (ValueRecovery& recovery : inlineCallFrame->arguments) { + if (recovery.isConstant()) + trackedReferences.check(recovery.constant()); + } + + if (CodeBlock* baselineCodeBlock = inlineCallFrame->baselineCodeBlock.get()) + trackedReferences.check(baselineCodeBlock); + + if (inlineCallFrame->calleeRecovery.isConstant()) + trackedReferences.check(inlineCallFrame->calleeRecovery.constant()); + } + } + + for (AdaptiveStructureWatchpoint* watchpoint : adaptiveStructureWatchpoints) + watchpoint->key().validateReferences(trackedReferences); +} + } } // namespace JSC::DFG #endif // ENABLE(DFG_JIT) |