OSR exit sometimes neglects to create the arguments object
https://bugs.webkit.org/show_bug.cgi?id=97162

Reviewed by Filip Pizlo.

../JavaScriptCore: 

No performance change.

I don't know of any case where this is a real problem in TOT, but it
will become a problem if we start compiling eval, with, or catch, and/or
sometimes stop doing arguments optimizations in the bytecode.

* dfg/DFGArgumentsSimplificationPhase.cpp:
(JSC::DFG::ArgumentsSimplificationPhase::run): Account for a
CreateArguments that has transformed into PhantomArguments. We used to
clear our reference to the CreateArguments node, but now we hold onto it, 
so we need to account for it transforming.

Don't replace a SetLocal(CreateArguments) with a SetLocal(JSValue())
because that doesn't leave enough information behind for OSR exit to do
the right thing. Instead, maintain our reference to CreateArguments, and
rely on CreateArguments transforming into PhantomArguments after
optimization. SetLocal(PhantomArguments) is efficient, and it's a marker
for OSR exit to create the arguments object.

Don't ASSERT that all PhantomArguments are unreferenced because we now
leave them in the graph as SetLocal(PhantomArguments), and that's harmless.

* dfg/DFGArgumentsSimplificationPhase.h:
(NullableHashTraits):
(JSC::DFG::NullableHashTraits::emptyValue): Export our special hash table
for inline call frames so the OSR exit compiler can use it.

* dfg/DFGOSRExitCompiler32_64.cpp:
(JSC::DFG::OSRExitCompiler::compileExit):
* dfg/DFGOSRExitCompiler64.cpp:
(JSC::DFG::OSRExitCompiler::compileExit): Don't load the 'arguments'
register to decide if we need to create the arguments object. Optimization
may have eliminated the initializing store to this register, in which
case we'll load garbage. Instead, use the global knowledge that all call
frames that optimized out 'arguments' now need to create it, and use a hash
table to make sure we do so only once per call frame.

* dfg/DFGSpeculativeJIT64.cpp:
(JSC::DFG::SpeculativeJIT::compile): SetLocal(PhantomArguments) is unique
because we haven't just changed a value's format or elided a load or store;
instead, we've replaced an object with JSValue(). We could try to account
for this in a general way, but for now it's a special-case optimization,
so we give it a specific OSR hint instead.

../WTF: 

* wtf/HashTraits.h:
(NullableHashTraits):
(WTF::NullableHashTraits::emptyValue):
(WTF):


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@129089 268f45cc-cd09-0410-ab3c-d52691b4dbfc
IndexedDB: Print console warning about setVersion
https://bugs.webkit.org/show_bug.cgi?id=96575

Reviewed by Tony Chang.

Source/WebCore:

setVersion has been out of the spec for almost a year but there are
still a lot of users.

We show the warning once per database object as an approximation for
once per page.

No new tests, but 150-something rebaselines.

* Modules/indexeddb/IDBDatabase.cpp:
(WebCore::IDBDatabase::IDBDatabase):
(WebCore::IDBDatabase::setVersion):
* Modules/indexeddb/IDBDatabase.h:
(IDBDatabase):

LayoutTests:

* http/tests/inspector/indexeddb/database-data-expected.txt:
* http/tests/inspector/indexeddb/database-structure-expected.txt:
* http/tests/inspector/indexeddb/resources-panel-expected.txt:
* storage/indexeddb/create-and-remove-object-store-expected.txt:
* storage/indexeddb/create-object-store-options-expected.txt:
* storage/indexeddb/createObjectStore-name-argument-required-expected.txt:
* storage/indexeddb/createObjectStore-null-name-expected.txt:
* storage/indexeddb/cursor-added-bug-expected.txt:
* storage/indexeddb/cursor-advance-expected.txt:
* storage/indexeddb/cursor-continue-dir-expected.txt:
* storage/indexeddb/cursor-continue-expected.txt:
* storage/indexeddb/cursor-continue-validity-expected.txt:
* storage/indexeddb/cursor-delete-expected.txt:
* storage/indexeddb/cursor-inconsistency-expected.txt:
* storage/indexeddb/cursor-index-delete-expected.txt:
* storage/indexeddb/cursor-key-order-expected.txt:
* storage/indexeddb/cursor-overloads-expected.txt:
* storage/indexeddb/cursor-prev-no-duplicate-expected.txt:
* storage/indexeddb/cursor-primary-key-order-expected.txt:
* storage/indexeddb/cursor-reverse-bug-expected.txt:
* storage/indexeddb/cursor-skip-deleted-expected.txt:
* storage/indexeddb/cursor-update-expected.txt:
* storage/indexeddb/cursor-update-value-argument-required-expected.txt:
* storage/indexeddb/cursor-value-expected.txt:
* storage/indexeddb/data-corruption-expected.txt:
* storage/indexeddb/database-basics-expected.txt:
* storage/indexeddb/database-close-expected.txt:
* storage/indexeddb/database-closepending-flag-expected.txt:
* storage/indexeddb/database-deletepending-flag-expected.txt:
* storage/indexeddb/delete-closed-database-object-expected.txt:
* storage/indexeddb/delete-range-expected.txt:
* storage/indexeddb/deleteIndex-expected.txt:
* storage/indexeddb/deleteObjectStore-name-argument-required-expected.txt:
* storage/indexeddb/deleteObjectStore-null-name-expected.txt:
* storage/indexeddb/deleted-objects-expected.txt:
* storage/indexeddb/deletedatabase-transaction-expected.txt:
* storage/indexeddb/duplicates-expected.txt:
* storage/indexeddb/error-causes-abort-by-default-expected.txt:
* storage/indexeddb/exception-in-event-aborts-expected.txt:
* storage/indexeddb/exceptions-expected.txt:
* storage/indexeddb/factory-deletedatabase-expected.txt:
* storage/indexeddb/factory-deletedatabase-interactions-expected.txt:
* storage/indexeddb/get-keyrange-expected.txt:
* storage/indexeddb/index-basics-expected.txt:
* storage/indexeddb/index-basics-workers-expected.txt:
* storage/indexeddb/index-count-expected.txt:
* storage/indexeddb/index-cursor-expected.txt:
* storage/indexeddb/index-duplicate-keypaths-expected.txt:
* storage/indexeddb/index-get-key-argument-required-expected.txt:
* storage/indexeddb/index-multientry-expected.txt:
* storage/indexeddb/index-population-expected.txt:
* storage/indexeddb/index-unique-expected.txt:
* storage/indexeddb/intversion-and-setversion-expected.txt:
* storage/indexeddb/intversion-invalid-setversion-has-no-side-effects-expected.txt:
* storage/indexeddb/intversion-long-queue-expected.txt:
* storage/indexeddb/invalid-keys-expected.txt:
* storage/indexeddb/key-generator-expected.txt:
* storage/indexeddb/key-sort-order-across-types-expected.txt:
* storage/indexeddb/key-sort-order-date-expected.txt:
* storage/indexeddb/key-type-array-expected.txt:
* storage/indexeddb/key-type-infinity-expected.txt:
* storage/indexeddb/keypath-arrays-expected.txt:
* storage/indexeddb/keypath-basics-expected.txt:
* storage/indexeddb/keypath-edges-expected.txt:
* storage/indexeddb/keypath-fetch-key-expected.txt:
* storage/indexeddb/keypath-intrinsic-properties-expected.txt:
* storage/indexeddb/lazy-index-population-expected.txt:
* storage/indexeddb/legacy-constants-expected.txt:
* storage/indexeddb/list-ordering-expected.txt:
* storage/indexeddb/metadata-expected.txt:
* storage/indexeddb/mozilla/add-twice-failure-expected.txt:
* storage/indexeddb/mozilla/autoincrement-indexes-expected.txt:
* storage/indexeddb/mozilla/bad-keypath-expected.txt:
* storage/indexeddb/mozilla/clear-expected.txt:
* storage/indexeddb/mozilla/create-index-unique-expected.txt:
* storage/indexeddb/mozilla/create-index-with-integer-keys-expected.txt:
* storage/indexeddb/mozilla/create-objectstore-basics-expected.txt:
* storage/indexeddb/mozilla/create-objectstore-null-name-expected.txt:
* storage/indexeddb/mozilla/cursor-mutation-expected.txt:
* storage/indexeddb/mozilla/cursor-mutation-objectstore-only-expected.txt:
* storage/indexeddb/mozilla/cursor-update-updates-indexes-expected.txt:
* storage/indexeddb/mozilla/cursors-expected.txt:
* storage/indexeddb/mozilla/delete-result-expected.txt:
* storage/indexeddb/mozilla/event-source-expected.txt:
* storage/indexeddb/mozilla/global-data-expected.txt:
* storage/indexeddb/mozilla/index-prev-no-duplicate-expected.txt:
* storage/indexeddb/mozilla/indexes-expected.txt:
* storage/indexeddb/mozilla/key-requirements-delete-null-key-expected.txt:
* storage/indexeddb/mozilla/key-requirements-expected.txt:
* storage/indexeddb/mozilla/key-requirements-inline-and-passed-expected.txt:
* storage/indexeddb/mozilla/key-requirements-put-no-key-expected.txt:
* storage/indexeddb/mozilla/key-requirements-put-null-key-expected.txt:
* storage/indexeddb/mozilla/object-cursors-expected.txt:
* storage/indexeddb/mozilla/object-identity-expected.txt:
* storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put-expected.txt:
* storage/indexeddb/mozilla/object-store-remove-values-expected.txt:
* storage/indexeddb/mozilla/objectstorenames-expected.txt:
* storage/indexeddb/mozilla/odd-result-order-expected.txt:
* storage/indexeddb/mozilla/put-get-values-expected.txt:
* storage/indexeddb/mozilla/readonly-transactions-expected.txt:
* storage/indexeddb/mozilla/readwrite-transactions-expected.txt:
* storage/indexeddb/mozilla/readyState-expected.txt:
* storage/indexeddb/mozilla/remove-index-expected.txt:
* storage/indexeddb/mozilla/remove-objectstore-expected.txt:
* storage/indexeddb/mozilla/versionchange-abort-expected.txt:
* storage/indexeddb/mozilla/versionchange-expected.txt:
* storage/indexeddb/mutating-cursor-expected.txt:
* storage/indexeddb/noblobs-expected.txt:
* storage/indexeddb/objectStore-required-arguments-expected.txt:
* storage/indexeddb/objectstore-autoincrement-expected.txt:
* storage/indexeddb/objectstore-basics-expected.txt:
* storage/indexeddb/objectstore-basics-workers-expected.txt:
* storage/indexeddb/objectstore-clear-expected.txt:
* storage/indexeddb/objectstore-count-expected.txt:
* storage/indexeddb/objectstore-cursor-expected.txt:
* storage/indexeddb/objectstore-removeobjectstore-expected.txt:
* storage/indexeddb/odd-strings-expected.txt:
* storage/indexeddb/open-close-version-expected.txt:
* storage/indexeddb/open-cursor-expected.txt:
* storage/indexeddb/open-during-transaction-expected.txt:
* storage/indexeddb/opencursor-key-expected.txt:
* storage/indexeddb/pending-activity-expected.txt:
* storage/indexeddb/pending-activity-workers-expected.txt:
* storage/indexeddb/pending-version-change-on-exit-expected.txt:
* storage/indexeddb/persistence-expected.txt:
* storage/indexeddb/prefetch-bugfix-108071-expected.txt:
* storage/indexeddb/queued-commands-expected.txt:
* storage/indexeddb/readonly-expected.txt:
* storage/indexeddb/readonly-properties-expected.txt:
* storage/indexeddb/request-continue-abort-expected.txt:
* storage/indexeddb/request-event-propagation-expected.txt:
* storage/indexeddb/setVersion-null-expected.txt:
* storage/indexeddb/set_version_blocked-expected.txt:
* storage/indexeddb/set_version_queue-expected.txt:
* storage/indexeddb/structured-clone-expected.txt:
* storage/indexeddb/three-setversion-calls-expected.txt:
* storage/indexeddb/transaction-abort-expected.txt:
* storage/indexeddb/transaction-active-flag-expected.txt:
* storage/indexeddb/transaction-after-close-expected.txt:
* storage/indexeddb/transaction-and-objectstore-calls-expected.txt:
* storage/indexeddb/transaction-basics-expected.txt:
* storage/indexeddb/transaction-complete-with-js-recursion-cross-frame-expected.txt:
* storage/indexeddb/transaction-complete-with-js-recursion-expected.txt:
* storage/indexeddb/transaction-complete-workers-expected.txt:
* storage/indexeddb/transaction-crash-on-abort-expected.txt:
* storage/indexeddb/transaction-error-expected.txt:
* storage/indexeddb/transaction-event-propagation-expected.txt:
* storage/indexeddb/transaction-read-only-expected.txt:
* storage/indexeddb/transaction-rollback-expected.txt:
* storage/indexeddb/transaction-storeNames-required-expected.txt:
* storage/indexeddb/tutorial-expected.txt:
* storage/indexeddb/two-version-changes-expected.txt:
* storage/indexeddb/value-undefined-expected.txt:
* storage/indexeddb/values-odd-types-expected.txt:
* storage/indexeddb/version-change-abort-expected.txt:
* storage/indexeddb/version-change-exclusive-expected.txt:
* storage/indexeddb/versionchangerequest-activedomobject-expected.txt:


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@129090 268f45cc-cd09-0410-ab3c-d52691b4dbfc
run-perf-tests should record indivisual value instead of statistics
https://bugs.webkit.org/show_bug.cgi?id=97155

Reviewed by Hajime Morita.

PerformanceTests: 

Report the list of values as "values" so that run-perf-tests can parse them.

* resources/runner.js:
(PerfTestRunner.computeStatistics):
(PerfTestRunner.printStatistics):

Tools: 

Parse the list of indivisual value reported by tests and include them as "values".
We strip "values" from the output JSON when uploading it to the perf-o-matic
since it doesn't know how to parse "values" or ignore it.

* Scripts/webkitpy/performance_tests/perftest.py:
(PerfTest):
(PerfTest.parse_output): Parse and report "values".
(PageLoadingPerfTest.run): Report indivisual page loading time in "values".
* Scripts/webkitpy/performance_tests/perftest_unittest.py:
(MainTest.test_parse_output):
(MainTest.test_parse_output_with_failing_line):
(TestPageLoadingPerfTest.test_run):
* Scripts/webkitpy/performance_tests/perftestsrunner.py:
(PerfTestsRunner._generate_and_show_results): Strip "values" from each result
until we update perf-o-matic.
* Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
(test_run_memory_test):
(test_run_with_json_output):
(test_run_with_description):
(test_run_with_slave_config_json):
(test_run_with_multiple_repositories):

LayoutTests: 

The expected result now contains indivisual value.

* fast/harness/perftests/runs-per-second-log-expected.txt:


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@129091 268f45cc-cd09-0410-ab3c-d52691b4dbfc