haikuwebkit/JSTests/microbenchmarks/hoist-make-rope.js

16 lines
371 B
JavaScript
Raw Permalink Normal View History

[JSC tests] Skip slow tests on Watch S3 and Watch S4 https://bugs.webkit.org/show_bug.cgi?id=203268 Reviewed by Saam Barati. * microbenchmarks/ArrayBuffer-DataView-alloc-large-long-lived.js: * microbenchmarks/ArrayBuffer-DataView-alloc-long-lived.js: * microbenchmarks/ArrayBuffer-Int32Array-byteOffset.js: * microbenchmarks/ArrayBuffer-Int8Array-alloc-large-long-lived.js: * microbenchmarks/ArrayBuffer-Int8Array-alloc-long-lived-buffer.js: * microbenchmarks/ArrayBuffer-Int8Array-alloc-long-lived.js: * microbenchmarks/ArrayBuffer-Int8Array-alloc.js: * microbenchmarks/DataView-custom-properties.js: * microbenchmarks/Float32Array-matrix-mult.js: * microbenchmarks/Float32Array-to-Float64Array-set.js: * microbenchmarks/Float64Array-alloc-long-lived.js: * microbenchmarks/Float64Array-to-Int16Array-set.js: * microbenchmarks/HashMap-put-get-iterate-keys.js: * microbenchmarks/HashMap-put-get-iterate.js: * microbenchmarks/HashMap-string-put-get-iterate.js: * microbenchmarks/Int16Array-alloc-long-lived.js: * microbenchmarks/Int16Array-bubble-sort-with-byteLength.js: * microbenchmarks/Int16Array-bubble-sort.js: * microbenchmarks/Int16Array-load-int-mul.js: * microbenchmarks/Int16Array-to-Int32Array-set.js: * microbenchmarks/Int32Array-Int8Array-view-alloc.js: * microbenchmarks/Int32Array-alloc-large.js: * microbenchmarks/Int32Array-alloc-long-lived.js: * microbenchmarks/Int32Array-alloc.js: * microbenchmarks/Int8Array-alloc-long-lived.js: * microbenchmarks/Int8Array-load-with-byteLength.js: * microbenchmarks/Int8Array-load.js: * microbenchmarks/JSONP-negative-0.js: * microbenchmarks/Number-isNaN.js: * microbenchmarks/abc-forward-loop-equal.js: * microbenchmarks/abc-postfix-backward-loop.js: * microbenchmarks/abc-simple-backward-loop.js: * microbenchmarks/abc-simple-forward-loop.js: * microbenchmarks/abc-skippy-loop.js: * microbenchmarks/abs-boolean.js: * microbenchmarks/adapt-to-double-divide.js: * microbenchmarks/add-tree.js: * microbenchmarks/aliased-arguments-getbyval.js: * microbenchmarks/allocate-big-object.js: * microbenchmarks/apply-not-apply.js: * microbenchmarks/arguments-named-and-reflective.js: * microbenchmarks/arguments-out-of-bounds.js: * microbenchmarks/arguments-strict-mode.js: * microbenchmarks/arguments.js: * microbenchmarks/arity-mismatch-inlining.js: * microbenchmarks/array-access-polymorphic-structure.js: * microbenchmarks/array-nonarray-polymorhpic-access.js: * microbenchmarks/array-prototype-every.js: * microbenchmarks/array-prototype-forEach.js: * microbenchmarks/array-prototype-join-uninitialized.js: * microbenchmarks/array-prototype-map.js: * microbenchmarks/array-prototype-reduce.js: * microbenchmarks/array-prototype-reduceRight.js: * microbenchmarks/array-prototype-some.js: * microbenchmarks/array-push-0.js: * microbenchmarks/array-push-1.js: * microbenchmarks/array-push-2.js: * microbenchmarks/array-splice-contiguous.js: * microbenchmarks/array-with-double-add.js: * microbenchmarks/array-with-double-increment.js: * microbenchmarks/array-with-double-mul-add.js: * microbenchmarks/array-with-double-sum.js: * microbenchmarks/array-with-int32-add-sub.js: * microbenchmarks/array-with-int32-or-double-sum.js: * microbenchmarks/arrowfunciton-direct-arguments.js: * microbenchmarks/arrowfunciton-reference-arguments.js: * microbenchmarks/arrowfunction-call-in-class-constructor.js: * microbenchmarks/arrowfunction-call-in-class-method.js: * microbenchmarks/arrowfunction-call-in-function.js: * microbenchmarks/arrowfunction-call.js: * microbenchmarks/asmjs_bool_bug.js: * microbenchmarks/assign-custom-setter-polymorphic.js: * microbenchmarks/assign-custom-setter.js: * microbenchmarks/basic-set.js: * microbenchmarks/big-int-mul.js: * microbenchmarks/bigswitch-indirect-symbol.js: * microbenchmarks/bigswitch-indirect.js: * microbenchmarks/bigswitch.js: * microbenchmarks/bit-or-tree.js: * microbenchmarks/bit-test-constant.js: * microbenchmarks/bit-test-load.js: * microbenchmarks/bit-test-nonconstant.js: * microbenchmarks/bit-xor-tree.js: * microbenchmarks/boolean-test.js: * microbenchmarks/bound-function-call.js: * microbenchmarks/bound-function-construction-performance.js: * microbenchmarks/branch-fold.js: * microbenchmarks/branch-on-string-as-boolean.js: * microbenchmarks/bug-153431.js: * microbenchmarks/build-large-object.js: * microbenchmarks/by-val-generic.js: * microbenchmarks/cache-get-variables-under-tdz-in-bytecode-generator.js: * microbenchmarks/call-or-not-call.js: * microbenchmarks/call-spread-apply.js: * microbenchmarks/call-spread-call.js: * microbenchmarks/call-using-spread.js: * microbenchmarks/captured-assignments.js: * microbenchmarks/cast-int-to-double.js: * microbenchmarks/cell-argument.js: * microbenchmarks/cfg-simplify.js: * microbenchmarks/chain-getter-access.js: * microbenchmarks/check-mul-constant.js: * microbenchmarks/check-mul-no-constant.js: * microbenchmarks/check-mul-power-of-two.js: * microbenchmarks/cmpeq-obj-to-obj-other.js: * microbenchmarks/concat-append-one.js: * microbenchmarks/constant-fold-check-type-info-flags.js: * microbenchmarks/constant-test.js: * microbenchmarks/construct-poly-proto-object.js: * microbenchmarks/contiguous-array-to-string.js: * microbenchmarks/create-lots-of-functions.js: * microbenchmarks/create-many-weak-map.js: * microbenchmarks/cse-new-array-buffer.js: * microbenchmarks/cse-new-array.js: * microbenchmarks/custom-accessor-materialized.js: * microbenchmarks/custom-accessor-thin-air.js: * microbenchmarks/custom-accessor.js: * microbenchmarks/custom-setter-getter-as-put-get-by-id.js: * microbenchmarks/custom-value-2.js: * microbenchmarks/custom-value.js: * microbenchmarks/data-view-accesses-2.js: * microbenchmarks/data-view-accesses.js: * microbenchmarks/dataview-cse.js: * microbenchmarks/delay-tear-off-arguments-strictmode.js: * microbenchmarks/delta-blue-try-catch.js: * microbenchmarks/deltablue-for-of.js: * microbenchmarks/deltablue-varargs.js: * microbenchmarks/destructuring-arguments.js: * microbenchmarks/destructuring-parameters-overridden-by-function.js: * microbenchmarks/destructuring-swap.js: * microbenchmarks/dfg-internal-function-call.js: * microbenchmarks/dfg-internal-function-construct.js: * microbenchmarks/dfg-internal-function-not-handled-call.js: * microbenchmarks/dfg-internal-function-not-handled-construct.js: * microbenchmarks/direct-arguments-getbyval.js: * microbenchmarks/direct-arguments-length.js: * microbenchmarks/direct-arguments-overridden-length.js: * microbenchmarks/direct-arguments-possibly-overridden-length.js: * microbenchmarks/direct-call-arity-mismatch.js: * microbenchmarks/direct-call.js: * microbenchmarks/direct-construct-arity-mismatch.js: * microbenchmarks/direct-construct.js: * microbenchmarks/direct-tail-call-arity-mismatch.js: * microbenchmarks/direct-tail-call-inlined-caller-arity-mismatch.js: * microbenchmarks/direct-tail-call-inlined-caller.js: * microbenchmarks/direct-tail-call.js: * microbenchmarks/div-boolean-double.js: * microbenchmarks/div-boolean.js: * microbenchmarks/dont-confuse-structures-from-different-executable-as-poly-proto.js: * microbenchmarks/double-array-to-string.js: * microbenchmarks/double-get-by-val-out-of-bounds.js: * microbenchmarks/double-pollution-getbyval.js: * microbenchmarks/double-pollution-putbyoffset.js: * microbenchmarks/double-real-use.js: * microbenchmarks/double-to-int32-typed-array-no-inline.js: * microbenchmarks/double-to-int32-typed-array.js: * microbenchmarks/double-to-uint32-typed-array-no-inline.js: * microbenchmarks/double-to-uint32-typed-array.js: * microbenchmarks/elidable-new-object-dag.js: * microbenchmarks/elidable-new-object-roflcopter.js: * microbenchmarks/elidable-new-object-then-call.js: * microbenchmarks/elidable-new-object-tree.js: * microbenchmarks/empty-string-plus-int.js: * microbenchmarks/emscripten-cube2hash.js: * microbenchmarks/eval-cached.js: * microbenchmarks/eval-code-ftl-reentry.js: * microbenchmarks/eval-code-ftl.js: * microbenchmarks/eval-compute.js: * microbenchmarks/eval-not-eval-compute-args.js: * microbenchmarks/eval-not-eval-compute.js: * microbenchmarks/exit-length-on-plain-object.js: * microbenchmarks/external-arguments-getbyval.js: * microbenchmarks/external-arguments-putbyval.js: * microbenchmarks/fixed-typed-array-storage-var-index.js: * microbenchmarks/fixed-typed-array-storage.js: * microbenchmarks/fold-double-to-int.js: * microbenchmarks/fold-get-by-id-to-multi-get-by-offset-rare-int.js: * microbenchmarks/fold-get-by-id-to-multi-get-by-offset.js: * microbenchmarks/fold-multi-get-by-offset-to-get-by-offset.js: * microbenchmarks/fold-multi-get-by-offset-to-poly-get-by-offset.js: * microbenchmarks/fold-multi-put-by-offset-to-poly-put-by-offset.js: * microbenchmarks/fold-multi-put-by-offset-to-put-by-offset.js: * microbenchmarks/fold-multi-put-by-offset-to-replace-or-transition-put-by-offset.js: * microbenchmarks/fold-put-by-id-to-multi-put-by-offset.js: * microbenchmarks/fold-put-by-val-with-string-to-multi-put-by-offset.js: * microbenchmarks/fold-put-by-val-with-symbol-to-multi-put-by-offset.js: * microbenchmarks/fold-put-structure.js: * microbenchmarks/for-in-on-object-with-lazily-materialized-properties.js: * microbenchmarks/for-of-array.js: * microbenchmarks/for-of-iterate-array-entries.js: * microbenchmarks/for-of-iterate-array-keys.js: * microbenchmarks/for-of-iterate-array-values.js: * microbenchmarks/forward-arguments-dont-escape-on-arguments-length.js: * microbenchmarks/freeze-and-do-work.js: * microbenchmarks/fround.js: * microbenchmarks/ftl-library-inlining-dataview.js: * microbenchmarks/ftl-library-inlining.js: * microbenchmarks/ftl-polymorphic-StringFromCharCode.js: * microbenchmarks/function-call.js: * microbenchmarks/function-dot-apply.js: * microbenchmarks/function-test.js: * microbenchmarks/function-with-eval.js: * microbenchmarks/gcse-poly-get-less-obvious.js: * microbenchmarks/gcse-poly-get.js: * microbenchmarks/gcse.js: * microbenchmarks/generate-multiple-llint-entrypoints.js: * microbenchmarks/generator-create.js: * microbenchmarks/generator-fib.js: * microbenchmarks/generator-function-create.js: * microbenchmarks/generator-sunspider-access-nsieve.js: * microbenchmarks/generator-with-several-types.js: * microbenchmarks/get-by-id-bimorphic-check-structure-elimination-simple.js: * microbenchmarks/get-by-id-bimorphic-check-structure-elimination.js: * microbenchmarks/get-by-id-chain-from-try-block.js: * microbenchmarks/get-by-id-check-structure-elimination.js: * microbenchmarks/get-by-id-proto-or-self.js: * microbenchmarks/get-by-id-quadmorphic-check-structure-elimination-simple.js: * microbenchmarks/get-by-id-self-or-proto.js: * microbenchmarks/get-by-val-negative-array-index.js: * microbenchmarks/get-by-val-out-of-bounds.js: * microbenchmarks/get-by-val-with-string-bimorphic-check-structure-elimination-simple.js: * microbenchmarks/get-by-val-with-string-bimorphic-check-structure-elimination.js: * microbenchmarks/get-by-val-with-string-chain-from-try-block.js: * microbenchmarks/get-by-val-with-string-check-structure-elimination.js: * microbenchmarks/get-by-val-with-string-proto-or-self.js: * microbenchmarks/get-by-val-with-string-quadmorphic-check-structure-elimination-simple.js: * microbenchmarks/get-by-val-with-string-self-or-proto.js: * microbenchmarks/get-by-val-with-symbol-bimorphic-check-structure-elimination-simple.js: * microbenchmarks/get-by-val-with-symbol-bimorphic-check-structure-elimination.js: * microbenchmarks/get-by-val-with-symbol-chain-from-try-block.js: * microbenchmarks/get-by-val-with-symbol-check-structure-elimination.js: * microbenchmarks/get-by-val-with-symbol-proto-or-self.js: * microbenchmarks/get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple.js: * microbenchmarks/get-by-val-with-symbol-self-or-proto.js: * microbenchmarks/get-custom-getter.js: * microbenchmarks/get_by_val-Int32Array.js: * microbenchmarks/get_callee_monomorphic.js: * microbenchmarks/get_callee_polymorphic.js: * microbenchmarks/getter-no-activation.js: * microbenchmarks/getter-prototype.js: * microbenchmarks/getter-richards-try-catch.js: * microbenchmarks/getter-richards.js: * microbenchmarks/getter.js: * microbenchmarks/global-code-ftl.js: * microbenchmarks/global-isNaN.js: * microbenchmarks/global-object-access-with-mutating-structure.js: * microbenchmarks/global-var-const-infer-fire-from-opt.js: * microbenchmarks/global-var-const-infer.js: * microbenchmarks/hard-overflow-check-equal.js: * microbenchmarks/hard-overflow-check.js: * microbenchmarks/has-own-property-name-cache.js: * microbenchmarks/hoist-get-by-offset-tower-with-inferred-types.js: * microbenchmarks/hoist-make-rope.js: * microbenchmarks/hoist-poly-check-structure-effectful-loop.js: * microbenchmarks/hoist-poly-check-structure.js: * microbenchmarks/implicit-bigswitch-indirect-symbol.js: * microbenchmarks/imul-double-only.js: * microbenchmarks/imul-int-only.js: * microbenchmarks/imul-mixed.js: * microbenchmarks/in-by-id-match.js: * microbenchmarks/in-by-id-removed.js: * microbenchmarks/in-four-cases.js: * microbenchmarks/in-one-case-false.js: * microbenchmarks/in-one-case-true.js: * microbenchmarks/in-two-cases.js: * microbenchmarks/indexed-properties-in-objects.js: * microbenchmarks/infer-closure-const-then-mov-no-inline.js: * microbenchmarks/infer-closure-const-then-mov.js: * microbenchmarks/infer-closure-const-then-put-to-scope-no-inline.js: * microbenchmarks/infer-closure-const-then-put-to-scope.js: * microbenchmarks/infer-closure-const-then-reenter-no-inline.js: * microbenchmarks/infer-closure-const-then-reenter.js: * microbenchmarks/infer-constant-global-property.js: * microbenchmarks/infer-constant-property.js: * microbenchmarks/infer-one-time-closure-ten-vars.js: * microbenchmarks/infer-one-time-closure-two-vars.js: * microbenchmarks/infer-one-time-closure.js: * microbenchmarks/infer-one-time-deep-closure.js: * microbenchmarks/inline-arguments-access.js: * microbenchmarks/inline-arguments-aliased-access.js: * microbenchmarks/inline-arguments-local-escape.js: * microbenchmarks/inline-get-scoped-var.js: * microbenchmarks/inlined-put-by-id-transition.js: * microbenchmarks/inlined-put-by-val-with-string-transition.js: * microbenchmarks/inlined-put-by-val-with-symbol-transition.js: * microbenchmarks/instanceof-always-hit-one.js: * microbenchmarks/instanceof-always-hit-two.js: * microbenchmarks/instanceof-bound.js: * microbenchmarks/instanceof-dynamic.js: * microbenchmarks/instanceof-sometimes-hit.js: * microbenchmarks/instanceof-tricky-dynamic.js: * microbenchmarks/int-or-other-abs-then-get-by-val.js: * microbenchmarks/int-or-other-abs-zero-then-get-by-val.js: * microbenchmarks/int-or-other-add-then-get-by-val.js: * microbenchmarks/int-or-other-add.js: * microbenchmarks/int-or-other-div-then-get-by-val.js: * microbenchmarks/int-or-other-max-then-get-by-val.js: * microbenchmarks/int-or-other-min-then-get-by-val.js: * microbenchmarks/int-or-other-mod-then-get-by-val.js: * microbenchmarks/int-or-other-mul-then-get-by-val.js: * microbenchmarks/int-or-other-neg-then-get-by-val.js: * microbenchmarks/int-or-other-neg-zero-then-get-by-val.js: * microbenchmarks/int-or-other-sub-then-get-by-val.js: * microbenchmarks/int-or-other-sub.js: * microbenchmarks/int-overflow-local.js: * microbenchmarks/int32-array-to-string.js: * microbenchmarks/int52-back-and-forth.js: * microbenchmarks/int52-rand-function.js: * microbenchmarks/int52-spill.js: * microbenchmarks/int8-out-of-bounds.js: * microbenchmarks/integer-divide.js: * microbenchmarks/integer-modulo.js: * microbenchmarks/is-array-for-array.js: * microbenchmarks/is-array-for-mixed-case.js: * microbenchmarks/is-array-for-non-array-object.js: * microbenchmarks/is-array-for-proxy.js: * microbenchmarks/is-boolean-fold-tricky.js: * microbenchmarks/is-boolean-fold.js: * microbenchmarks/is-function-fold-tricky-internal-function.js: * microbenchmarks/is-function-fold-tricky.js: * microbenchmarks/is-function-fold.js: * microbenchmarks/is-not-cell-speculation-for-empty-value.js: * microbenchmarks/is-number-fold-tricky.js: * microbenchmarks/is-number-fold.js: * microbenchmarks/is-object-or-null-fold-functions.js: * microbenchmarks/is-object-or-null-fold-less-tricky.js: * microbenchmarks/is-object-or-null-fold-tricky.js: * microbenchmarks/is-object-or-null-fold.js: * microbenchmarks/is-object-or-null-trickier-function.js: * microbenchmarks/is-object-or-null-trickier-internal-function.js: * microbenchmarks/is-object-or-null-tricky-function.js: * microbenchmarks/is-object-or-null-tricky-internal-function.js: * microbenchmarks/is-string-fold-tricky.js: * microbenchmarks/is-string-fold.js: * microbenchmarks/is-symbol-mixed.js: * microbenchmarks/is-symbol.js: * microbenchmarks/is-undefined-fold-tricky.js: * microbenchmarks/is-undefined-fold.js: * microbenchmarks/json-parse-array-reviver-same-value.js: * microbenchmarks/json-parse-array-reviver.js: * microbenchmarks/json-parse-object-reviver-same-value.js: * microbenchmarks/json-parse-object-reviver.js: * microbenchmarks/large-empty-array-join-resolve-rope.js: * microbenchmarks/large-empty-array-join.js: * microbenchmarks/large-int-captured.js: * microbenchmarks/large-int-neg.js: * microbenchmarks/large-int.js: * microbenchmarks/large-map-iteration.js: * microbenchmarks/lazy-array-species-watchpoints.js: * microbenchmarks/let-for-in.js: * microbenchmarks/licm-dragons-out-of-bounds.js: * microbenchmarks/licm-dragons-overflow.js: * microbenchmarks/licm-dragons-two-structures.js: * microbenchmarks/licm-dragons.js: * microbenchmarks/load-varargs-elimination.js: * microbenchmarks/locale-compare.js: * microbenchmarks/logical-not-weird-types.js: * microbenchmarks/logical-not.js: * microbenchmarks/loop-osr-with-arity-mismatch.js: * microbenchmarks/lots-of-fields.js: * microbenchmarks/make-indexed-storage.js: * microbenchmarks/make-rope-cse.js: * microbenchmarks/make-rope.js: * microbenchmarks/many-foreach-calls.js: * microbenchmarks/many-repeat-stores.js: * microbenchmarks/map-for-each.js: * microbenchmarks/map-for-of.js: * microbenchmarks/map-has-and-set.js: * microbenchmarks/map-has-get-cse-opportunity.js: * microbenchmarks/map-key-well-typed.js: * microbenchmarks/map-rehash.js: * microbenchmarks/marsaglia-larger-ints.js: * microbenchmarks/marsaglia-osr-entry.js: * microbenchmarks/math-random.js: * microbenchmarks/math-trunc.js: * microbenchmarks/math-with-out-of-bounds-array-values.js: * microbenchmarks/max-boolean.js: * microbenchmarks/megamorphic-load.js: * microbenchmarks/memcpy-loop.js: * microbenchmarks/memcpy-typed-loop-large.js: * microbenchmarks/memcpy-typed-loop-small.js: * microbenchmarks/memcpy-typed-loop-speculative.js: * microbenchmarks/memcpy-typed-loop.js: * microbenchmarks/memcpy-wasm-large.js: * microbenchmarks/memcpy-wasm-medium.js: * microbenchmarks/memcpy-wasm-small.js: * microbenchmarks/memcpy-wasm.js: * microbenchmarks/method-on-number.js: * microbenchmarks/min-boolean.js: * microbenchmarks/minus-boolean-double.js: * microbenchmarks/minus-boolean.js: * microbenchmarks/misc-strict-eq.js: * microbenchmarks/mod-boolean-double.js: * microbenchmarks/mod-boolean.js: * microbenchmarks/mod-untyped.js: * microbenchmarks/mul-boolean-double.js: * microbenchmarks/mul-boolean.js: * microbenchmarks/mul-immediate-sub.js: * microbenchmarks/neg-boolean.js: * microbenchmarks/negative-zero-divide.js: * microbenchmarks/negative-zero-modulo.js: * microbenchmarks/negative-zero-negate.js: * microbenchmarks/new-array-buffer-dead.js: * microbenchmarks/new-array-buffer-push.js: * microbenchmarks/new-array-buffer-vector-profile.js: * microbenchmarks/new-array-dead.js: * microbenchmarks/new-array-push.js: * microbenchmarks/new-error.js: * microbenchmarks/no-inline-constructor.js: * microbenchmarks/number-test.js: * microbenchmarks/number-to-string-strength-reduction.js: * microbenchmarks/number-to-string-with-add-empty.js: * microbenchmarks/number-to-string-with-add-in-loop.js: * microbenchmarks/number-to-string-with-add.js: * microbenchmarks/number-to-string-with-radix-10.js: * microbenchmarks/number-to-string-with-radix-cse.js: * microbenchmarks/number-to-string-with-radix.js: * microbenchmarks/object-and.js: * microbenchmarks/object-closure-call.js: * microbenchmarks/object-create-constant-prototype.js: * microbenchmarks/object-create-null.js: * microbenchmarks/object-create-unknown-object-prototype.js: * microbenchmarks/object-create-untyped-prototype.js: * microbenchmarks/object-entries.js: * microbenchmarks/object-get-own-property-symbols-on-large-array.js: * microbenchmarks/object-get-own-property-symbols.js: * microbenchmarks/object-int-add-array.js: * microbenchmarks/object-int-add.js: * microbenchmarks/object-int-and-array.js: * microbenchmarks/object-int-mul-array.js: * microbenchmarks/object-int-sub-array.js: * microbenchmarks/object-int-sub.js: * microbenchmarks/object-is.js: * microbenchmarks/object-iterate-symbols.js: * microbenchmarks/object-iterate.js: * microbenchmarks/object-keys-map-values.js: * microbenchmarks/object-keys.js: * microbenchmarks/object-lshift.js: * microbenchmarks/object-or.js: * microbenchmarks/object-rshift.js: * microbenchmarks/object-test.js: * microbenchmarks/object-urshift.js: * microbenchmarks/object-values.js: * microbenchmarks/object-xor.js: * microbenchmarks/obvious-sink-pathology-taken.js: * microbenchmarks/obvious-sink-pathology.js: * microbenchmarks/obviously-elidable-new-object.js: * microbenchmarks/plus-boolean-arith.js: * microbenchmarks/plus-boolean-double.js: * microbenchmarks/plus-boolean.js: * microbenchmarks/poly-chain-access-different-prototypes-simple.js: * microbenchmarks/poly-chain-access-different-prototypes.js: * microbenchmarks/poly-chain-access-simpler.js: * microbenchmarks/poly-chain-access.js: * microbenchmarks/poly-proto-access.js: * microbenchmarks/poly-proto-and-non-poly-proto-same-ic.js: * microbenchmarks/poly-proto-clear-js-function-allocation-profile.js: * microbenchmarks/poly-proto-put-transition-speed.js: * microbenchmarks/poly-proto-setter-speed.js: * microbenchmarks/poly-stricteq.js: * microbenchmarks/polymorphic-array-call.js: * microbenchmarks/polymorphic-get-by-id.js: * microbenchmarks/polymorphic-put-by-id.js: * microbenchmarks/polymorphic-put-by-val-with-string.js: * microbenchmarks/polymorphic-put-by-val-with-symbol.js: * microbenchmarks/polymorphic-structure.js: * microbenchmarks/polyvariant-get-by-id-shorter-tower.js: * microbenchmarks/polyvariant-get-by-id-tower.js: * microbenchmarks/polyvariant-monomorphic-get-by-id.js: * microbenchmarks/prevent-extensions-and-do-work.js: * microbenchmarks/promise-creation-many.js: * microbenchmarks/proto-getter-access.js: * microbenchmarks/prototype-access-with-mutating-prototype.js: * microbenchmarks/put-by-id-replace-and-transition.js: * microbenchmarks/put-by-id-slightly-polymorphic.js: * microbenchmarks/put-by-id-transition-with-indexing-header.js: * microbenchmarks/put-by-id.js: * microbenchmarks/put-by-val-direct-large-index.js: * microbenchmarks/put-by-val-direct.js: * microbenchmarks/put-by-val-large-index-blank-indexing-type.js: * microbenchmarks/put-by-val-machine-int.js: * microbenchmarks/put-by-val-negative-array-index.js: * microbenchmarks/put-by-val-with-string-replace-and-transition.js: * microbenchmarks/put-by-val-with-string-slightly-polymorphic.js: * microbenchmarks/put-by-val-with-string.js: * microbenchmarks/put-by-val-with-symbol-replace-and-transition.js: * microbenchmarks/put-by-val-with-symbol-slightly-polymorphic.js: * microbenchmarks/put-by-val-with-symbol.js: * microbenchmarks/rare-osr-exit-on-local.js: * microbenchmarks/raytrace-with-empty-try-catch.js: * microbenchmarks/raytrace-with-try-catch.js: * microbenchmarks/regexp-exec.js: * microbenchmarks/regexp-last-index.js: * microbenchmarks/regexp-nested-nonzero-min-counted-parens.js: * microbenchmarks/regexp-prototype-is-not-instance.js: * microbenchmarks/regexp-prototype-search-observable-side-effects.js: * microbenchmarks/regexp-prototype-search-observable-side-effects2.js: * microbenchmarks/regexp-prototype-split-observable-side-effects.js: * microbenchmarks/regexp-prototype-split-observable-side-effects2.js: * microbenchmarks/regexp-prototype-split-observable-side-effects3-flags.js: * microbenchmarks/regexp-prototype-split-observable-side-effects3-global.js: * microbenchmarks/regexp-prototype-split-observable-side-effects3-ignoreCase.js: * microbenchmarks/regexp-prototype-split-observable-side-effects3-multiline.js: * microbenchmarks/regexp-prototype-split-observable-side-effects3-sticky.js: * microbenchmarks/regexp-prototype-split-observable-side-effects3-unicode.js: * microbenchmarks/regexp-prototype-split-observable-side-effects4.js: * microbenchmarks/regexp-prototype-test-observable-side-effects.js: * microbenchmarks/regexp-prototype-test-observable-side-effects2.js: * microbenchmarks/regexp-set-last-index.js: * microbenchmarks/regexp-u-global-es5.js: * microbenchmarks/regexp-u-global-es6.js: * microbenchmarks/register-pressure-from-osr.js: * microbenchmarks/repeat-multi-get-by-offset.js: * microbenchmarks/rest-parameter-construction-performance.js: * microbenchmarks/richards-empty-try-catch.js: * microbenchmarks/richards-try-catch.js: * microbenchmarks/scoped-arguments-length.js: * microbenchmarks/scoped-arguments-overridden-length.js: * microbenchmarks/scoped-arguments-possibly-overridden-length.js: * microbenchmarks/seal-and-do-work.js: * microbenchmarks/set-for-each.js: * microbenchmarks/set-for-of.js: * microbenchmarks/setter-prototype.js: * microbenchmarks/setter.js: * microbenchmarks/simple-activation-demo.js: * microbenchmarks/simple-getter-access.js: * microbenchmarks/simple-poly-call-nested.js: * microbenchmarks/simple-poly-call.js: * microbenchmarks/simple-regexp-exec-folding-fail.js: * microbenchmarks/simple-regexp-exec-folding.js: * microbenchmarks/simple-regexp-test-folding-fail-with-hoisted-regexp.js: * microbenchmarks/simple-regexp-test-folding-fail.js: * microbenchmarks/simple-regexp-test-folding-with-hoisted-regexp.js: * microbenchmarks/simple-regexp-test-folding.js: * microbenchmarks/sin-boolean.js: * microbenchmarks/singleton-scope.js: * microbenchmarks/sink-function.js: * microbenchmarks/sink-huge-activation.js: * microbenchmarks/sinkable-new-object-dag.js: * microbenchmarks/sinkable-new-object-taken.js: * microbenchmarks/sinkable-new-object-with-builtin-constructor.js: * microbenchmarks/sinkable-new-object.js: * microbenchmarks/slow-array-profile-convergence.js: * microbenchmarks/slow-convergence.js: * microbenchmarks/slow-ternaries.js: * microbenchmarks/sorting-benchmark.js: * microbenchmarks/sparse-conditional.js: * microbenchmarks/sparse-set.js: * microbenchmarks/splice-to-remove.js: * microbenchmarks/strcat-const.js: * microbenchmarks/strcat-length-const.js: * microbenchmarks/strict-osr-entry.js: * microbenchmarks/string-char-code-at.js: * microbenchmarks/string-concat-convert.js: * microbenchmarks/string-concat-long-convert.js: * microbenchmarks/string-concat-long.js: * microbenchmarks/string-concat-object.js: * microbenchmarks/string-concat-pair-object.js: * microbenchmarks/string-concat-pair-simple.js: * microbenchmarks/string-concat-simple.js: * microbenchmarks/string-concat.js: * microbenchmarks/string-cons-repeat.js: * microbenchmarks/string-cons-tower.js: * microbenchmarks/string-equality.js: * microbenchmarks/string-from-char-code.js: * microbenchmarks/string-get-by-val-big-char.js: * microbenchmarks/string-get-by-val-out-of-bounds-insane.js: * microbenchmarks/string-get-by-val-out-of-bounds.js: * microbenchmarks/string-get-by-val.js: * microbenchmarks/string-hash.js: * microbenchmarks/string-long-ident-equality.js: * microbenchmarks/string-object-to-string.js: * microbenchmarks/string-object-value-of.js: * microbenchmarks/string-out-of-bounds.js: * microbenchmarks/string-prototype-search-observable-side-effects.js: * microbenchmarks/string-prototype-search-observable-side-effects2.js: * microbenchmarks/string-prototype-search-observable-side-effects3.js: * microbenchmarks/string-prototype-search-observable-side-effects4.js: * microbenchmarks/string-prototype-split-observable-side-effects.js: * microbenchmarks/string-prototype-split-observable-side-effects2.js: * microbenchmarks/string-prototype-split-observable-side-effects3-flags.js: * microbenchmarks/string-prototype-split-observable-side-effects3-global.js: * microbenchmarks/string-prototype-split-observable-side-effects3-ignoreCase.js: * microbenchmarks/string-prototype-split-observable-side-effects3-multiline.js: * microbenchmarks/string-prototype-split-observable-side-effects3-sticky.js: * microbenchmarks/string-prototype-split-observable-side-effects3-unicode.js: * microbenchmarks/string-prototype-split-observable-side-effects4.js: * microbenchmarks/string-repeat-arith.js: * microbenchmarks/string-repeat-not-resolving-fixed.js: * microbenchmarks/string-repeat-not-resolving-no-inline.js: * microbenchmarks/string-repeat-not-resolving.js: * microbenchmarks/string-repeat-resolving-fixed.js: * microbenchmarks/string-repeat-resolving-no-inline.js: * microbenchmarks/string-repeat-resolving.js: * microbenchmarks/string-repeat-single-not-resolving.js: * microbenchmarks/string-repeat-single-resolving.js: * microbenchmarks/string-repeat-small-not-resolving.js: * microbenchmarks/string-repeat-small-resolving.js: * microbenchmarks/string-replace-empty.js: * microbenchmarks/string-replace-generic.js: * microbenchmarks/string-replace.js: * microbenchmarks/string-rope-with-object.js: * microbenchmarks/string-slice-empty.js: * microbenchmarks/string-slice-one-char.js: * microbenchmarks/string-slice.js: * microbenchmarks/string-sub.js: * microbenchmarks/string-test.js: * microbenchmarks/string-transcoding.js: * microbenchmarks/string-var-equality.js: * microbenchmarks/stringalloc.js: * microbenchmarks/structure-hoist-over-transitions.js: * microbenchmarks/substring-concat-weird.js: * microbenchmarks/substring-concat.js: * microbenchmarks/substring.js: * microbenchmarks/super-get-by-id-with-this-monomorphic.js: * microbenchmarks/super-get-by-id-with-this-polymorphic.js: * microbenchmarks/super-get-by-val-with-this-monomorphic.js: * microbenchmarks/super-get-by-val-with-this-polymorphic.js: * microbenchmarks/super-getter.js: * microbenchmarks/switch-char-constant.js: * microbenchmarks/switch-char.js: * microbenchmarks/switch-constant.js: * microbenchmarks/switch-string-basic-big-var.js: * microbenchmarks/switch-string-basic-big.js: * microbenchmarks/switch-string-basic-var.js: * microbenchmarks/switch-string-basic.js: * microbenchmarks/switch-string-big-length-tower-var.js: * microbenchmarks/switch-string-length-tower-var.js: * microbenchmarks/switch-string-length-tower.js: * microbenchmarks/switch-string-short.js: * microbenchmarks/switch.js: * microbenchmarks/switching-size-classes.js: * microbenchmarks/symbol-creation.js: * microbenchmarks/symbol-tostringtag.js: * microbenchmarks/tan.js: * microbenchmarks/tear-off-arguments-simple.js: * microbenchmarks/tear-off-arguments.js: * microbenchmarks/template-string-array.js: * microbenchmarks/temporal-structure.js: * microbenchmarks/throw.js: * microbenchmarks/to-int32-boolean.js: * microbenchmarks/to-number-boolean.js: * microbenchmarks/to-number-constructor-number-string-number-string.js: * microbenchmarks/to-number-constructor-only-number.js: * microbenchmarks/to-number-constructor-only-string.js: * microbenchmarks/to-number-constructor-string-number-string-number.js: * microbenchmarks/to-number-number-string-number-string.js: * microbenchmarks/to-number-only-number.js: * microbenchmarks/to-number-only-string.js: * microbenchmarks/to-number-string-number-string-number.js: * microbenchmarks/to-string-on-cow-array.js: * microbenchmarks/try-catch-get-by-val-cloned-arguments.js: * microbenchmarks/try-catch-get-by-val-direct-arguments.js: * microbenchmarks/try-catch-get-by-val-scoped-arguments.js: * microbenchmarks/try-catch-word-count.js: * microbenchmarks/try-get-by-id-basic.js: * microbenchmarks/try-get-by-id-polymorphic.js: * microbenchmarks/typed-array-get-set-by-val-profiling.js: * microbenchmarks/typed-array-subarray.js: * microbenchmarks/typed-array-sum.js: * microbenchmarks/undefined-test.js: * microbenchmarks/unprofiled-licm.js: * microbenchmarks/untyped-string-from-char-code.js: * microbenchmarks/v8-raytrace-with-empty-try-catch.js: * microbenchmarks/v8-raytrace-with-try-catch.js: * microbenchmarks/v8-regexp-search.js: * microbenchmarks/varargs-call.js: * microbenchmarks/varargs-construct-inline.js: * microbenchmarks/varargs-construct.js: * microbenchmarks/varargs-inline.js: * microbenchmarks/varargs-strict-mode.js: * microbenchmarks/varargs.js: * microbenchmarks/vector-length-hint-array-constructor.js: * microbenchmarks/vector-length-hint-new-array.js: * microbenchmarks/weak-map-key.js: * microbenchmarks/weak-set-key.js: * microbenchmarks/weird-inlining-const-prop.js: Canonical link: https://commits.webkit.org/216700@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251463 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-10-22 22:46:40 +00:00
//@ skip if $model == "Apple Watch Series 3" # added by mark-jsc-stress-test.py
Merge r169148, r169185, r169188, r169578, r169582, r169584, r169588, r169753 from ftlopt. Source/JavaScriptCore: Note that r169753 is merged out of order because it fixes a bug in r169588. 2014-06-10 Filip Pizlo <fpizlo@apple.com> [ftlopt] Structure::dfgShouldWatchIfPossible() is unsound https://bugs.webkit.org/show_bug.cgi?id=133624 Reviewed by Mark Hahnenberg. * runtime/Structure.h: (JSC::Structure::dfgShouldWatchIfPossible): Make it sound and add some verbiage. 2014-06-04 Filip Pizlo <fpizlo@apple.com> [ftlopt] AI should be able track structure sets larger than 1 https://bugs.webkit.org/show_bug.cgi?id=128073 Reviewed by Oliver Hunt. This makes two major changes to how AI (abstract interpreter) proves that a value has some structure: - StructureAbstractValue can now track an arbitrary number of structures. A set whose size is greater than one means that the value may have any of the structures, and we don't know which - but we do know that it cannot be any structure not in the set. The structure abstract value can still be TOP, which means the set of all structures. We artificially limit the set size to StructureAbstractValue::polymorphismLimit to guard memory explosion on pathological programs. This limit is big enough that it wouldn't kick in for normal code, since we have other heuristics that limit the number of structures that we would allow an inline cache to know about. - We eagerly set watchpoints on all watchable structures and then we assume that watchable structures are being watched, and that the watchpoint will jettison the code. This allows tracking of watchable structures to be far simpler than before. Previously, a structure being tracked as "future possible" was predicated on it being watchable but we might not actually watch it. This makes algebra over sets of future possible structures quite weird. But watching all watchable structures means that we simple say that a structure set can be in the following states: unclobbered, which means it's just a set of structures and it doesn't matter what is watchable or what isn't because we've proven that the value must have one of these structures right now; and clobbered, which means that we have a set of structures, plus all possible structures temporarily, with invalidation removing the "plus all possible structures". Clobbering a set means that if any of its structures are unwatchable, the set just becomes TOP; but if all structures in the set are watchable then we just set the clobbered bit to add the "plus all possible structures temporarily" thing. This precisely tracks the exact meaning of watchability and invalidation points. Slight SunSpider slow-down, neutral on Octane, slight AsmBench speed-up. I believe that we will ultimately undo the SunSpider slow-down by making further improvements to the set representation. I believe that Octane perfromance will ultimately improve once we remove remaining singleton special-cases. The ultimate goal of this is to remove the need to try quite so desperately hard to make everything monomorphic as we do currently. * CMakeLists.txt: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * bytecode/StructureSet.cpp: (JSC::StructureSet::clear): (JSC::StructureSet::remove): (JSC::StructureSet::filter): (JSC::StructureSet::copyFromOutOfLine): (JSC::StructureSet::StructureSet): Deleted. (JSC::StructureSet::operator=): Deleted. (JSC::StructureSet::copyFrom): Deleted. * bytecode/StructureSet.h: (JSC::StructureSet::StructureSet): (JSC::StructureSet::operator=): (JSC::StructureSet::isEmpty): (JSC::StructureSet::genericFilter): (JSC::StructureSet::ContainsOutOfLine::ContainsOutOfLine): (JSC::StructureSet::ContainsOutOfLine::operator()): (JSC::StructureSet::copyFrom): (JSC::StructureSet::deleteStructureListIfNecessary): (JSC::StructureSet::setEmpty): (JSC::StructureSet::getReservedFlag): (JSC::StructureSet::setReservedFlag): * dfg/DFGAbstractInterpreter.h: (JSC::DFG::AbstractInterpreter::setBuiltInConstant): * dfg/DFGAbstractInterpreterInlines.h: (JSC::DFG::AbstractInterpreter<AbstractStateType>::booleanResult): (JSC::DFG::AbstractInterpreter<AbstractStateType>::verifyEdge): (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): (JSC::DFG::AbstractInterpreter<AbstractStateType>::clobberCapturedVars): (JSC::DFG::AbstractInterpreter<AbstractStateType>::forAllValues): (JSC::DFG::AbstractInterpreter<AbstractStateType>::clobberStructures): (JSC::DFG::AbstractInterpreter<AbstractStateType>::observeTransition): (JSC::DFG::AbstractInterpreter<AbstractStateType>::observeTransitions): (JSC::DFG::AbstractInterpreter<AbstractStateType>::setDidClobber): (JSC::DFG::AbstractInterpreter<AbstractStateType>::dump): * dfg/DFGAbstractValue.cpp: (JSC::DFG::AbstractValue::observeTransitions): (JSC::DFG::AbstractValue::setMostSpecific): (JSC::DFG::AbstractValue::set): (JSC::DFG::AbstractValue::filter): (JSC::DFG::AbstractValue::shouldBeClear): (JSC::DFG::AbstractValue::normalizeClarity): (JSC::DFG::AbstractValue::checkConsistency): (JSC::DFG::AbstractValue::assertIsWatched): (JSC::DFG::AbstractValue::dumpInContext): (JSC::DFG::AbstractValue::setFuturePossibleStructure): Deleted. * dfg/DFGAbstractValue.h: (JSC::DFG::AbstractValue::clear): (JSC::DFG::AbstractValue::clobberStructures): (JSC::DFG::AbstractValue::clobberStructuresFor): (JSC::DFG::AbstractValue::observeInvalidationPoint): (JSC::DFG::AbstractValue::observeInvalidationPointFor): (JSC::DFG::AbstractValue::observeTransition): (JSC::DFG::AbstractValue::TransitionObserver::TransitionObserver): (JSC::DFG::AbstractValue::TransitionObserver::operator()): (JSC::DFG::AbstractValue::TransitionsObserver::TransitionsObserver): (JSC::DFG::AbstractValue::TransitionsObserver::operator()): (JSC::DFG::AbstractValue::isHeapTop): (JSC::DFG::AbstractValue::setType): (JSC::DFG::AbstractValue::operator==): (JSC::DFG::AbstractValue::merge): (JSC::DFG::AbstractValue::validate): (JSC::DFG::AbstractValue::hasClobberableState): (JSC::DFG::AbstractValue::assertIsWatched): (JSC::DFG::AbstractValue::observeIndexingTypeTransition): (JSC::DFG::AbstractValue::makeTop): (JSC::DFG::AbstractValue::bestProvenStructure): Deleted. * dfg/DFGAllocator.h: * dfg/DFGArgumentsSimplificationPhase.cpp: (JSC::DFG::ArgumentsSimplificationPhase::run): * dfg/DFGArrayMode.cpp: (JSC::DFG::ArrayMode::alreadyChecked): * dfg/DFGAtTailAbstractState.h: (JSC::DFG::AtTailAbstractState::structureClobberState): (JSC::DFG::AtTailAbstractState::setStructureClobberState): (JSC::DFG::AtTailAbstractState::setFoundConstants): (JSC::DFG::AtTailAbstractState::haveStructures): Deleted. (JSC::DFG::AtTailAbstractState::setHaveStructures): Deleted. * dfg/DFGBasicBlock.cpp: (JSC::DFG::BasicBlock::BasicBlock): * dfg/DFGBasicBlock.h: * dfg/DFGBranchDirection.h: (JSC::DFG::branchDirectionToString): (WTF::printInternal): * dfg/DFGByteCodeParser.cpp: (JSC::DFG::ByteCodeParser::handlePutById): * dfg/DFGCFAPhase.cpp: (JSC::DFG::CFAPhase::performBlockCFA): * dfg/DFGCSEPhase.cpp: (JSC::DFG::CSEPhase::checkStructureElimination): (JSC::DFG::CSEPhase::structureTransitionWatchpointElimination): (JSC::DFG::CSEPhase::performNodeCSE): * dfg/DFGClobberize.h: (JSC::DFG::clobberize): * dfg/DFGCommon.cpp: (JSC::DFG::startCrashing): (JSC::DFG::isCrashing): * dfg/DFGCommon.h: * dfg/DFGCommonData.cpp: (JSC::DFG::CommonData::notifyCompilingStructureTransition): * dfg/DFGConstantFoldingPhase.cpp: (JSC::DFG::ConstantFoldingPhase::foldConstants): (JSC::DFG::ConstantFoldingPhase::emitGetByOffset): (JSC::DFG::ConstantFoldingPhase::emitPutByOffset): (JSC::DFG::ConstantFoldingPhase::addStructureTransitionCheck): * dfg/DFGDesiredWatchpoints.cpp: (JSC::DFG::DesiredWatchpoints::consider): (JSC::DFG::DesiredWatchpoints::addLazily): Deleted. * dfg/DFGDesiredWatchpoints.h: (JSC::DFG::GenericDesiredWatchpoints::reallyAdd): (JSC::DFG::GenericDesiredWatchpoints::areStillValid): (JSC::DFG::GenericDesiredWatchpoints::isWatched): (JSC::DFG::DesiredWatchpoints::isWatched): (JSC::DFG::WatchpointForGenericWatchpointSet::WatchpointForGenericWatchpointSet): Deleted. (JSC::DFG::GenericDesiredWatchpoints::addLazily): Deleted. (JSC::DFG::GenericDesiredWatchpoints::isStillValid): Deleted. (JSC::DFG::GenericDesiredWatchpoints::shouldAssumeMixedState): Deleted. (JSC::DFG::GenericDesiredWatchpoints::isValidOrMixed): Deleted. (JSC::DFG::DesiredWatchpoints::isStillValid): Deleted. (JSC::DFG::DesiredWatchpoints::shouldAssumeMixedState): Deleted. (JSC::DFG::DesiredWatchpoints::isValidOrMixed): Deleted. * dfg/DFGDoesGC.cpp: (JSC::DFG::doesGC): * dfg/DFGFixupPhase.cpp: (JSC::DFG::FixupPhase::fixupNode): (JSC::DFG::FixupPhase::canOptimizeStringObjectAccess): (JSC::DFG::FixupPhase::injectTypeConversionsForEdge): * dfg/DFGGraph.cpp: (JSC::DFG::Graph::~Graph): (JSC::DFG::Graph::dump): (JSC::DFG::Graph::dumpBlockHeader): (JSC::DFG::Graph::tryGetFoldableView): (JSC::DFG::Graph::visitChildren): (JSC::DFG::Graph::assertIsWatched): (JSC::DFG::Graph::handleAssertionFailure): * dfg/DFGGraph.h: (JSC::DFG::Graph::convertToConstant): (JSC::DFG::Graph::masqueradesAsUndefinedWatchpointIsStillValid): (JSC::DFG::Graph::addStructureTransitionData): Deleted. * dfg/DFGInPlaceAbstractState.cpp: (JSC::DFG::InPlaceAbstractState::beginBasicBlock): (JSC::DFG::InPlaceAbstractState::initialize): (JSC::DFG::InPlaceAbstractState::endBasicBlock): (JSC::DFG::InPlaceAbstractState::reset): (JSC::DFG::InPlaceAbstractState::merge): * dfg/DFGInPlaceAbstractState.h: (JSC::DFG::InPlaceAbstractState::structureClobberState): (JSC::DFG::InPlaceAbstractState::setStructureClobberState): (JSC::DFG::InPlaceAbstractState::setFoundConstants): (JSC::DFG::InPlaceAbstractState::haveStructures): Deleted. (JSC::DFG::InPlaceAbstractState::setHaveStructures): Deleted. * dfg/DFGLivenessAnalysisPhase.cpp: (JSC::DFG::LivenessAnalysisPhase::run): * dfg/DFGNode.h: (JSC::DFG::Node::hasTransition): (JSC::DFG::Node::transition): (JSC::DFG::Node::hasStructure): (JSC::DFG::StructureTransitionData::StructureTransitionData): Deleted. (JSC::DFG::Node::convertToStructureTransitionWatchpoint): Deleted. (JSC::DFG::Node::hasStructureTransitionData): Deleted. (JSC::DFG::Node::structureTransitionData): Deleted. * dfg/DFGNodeType.h: * dfg/DFGPlan.cpp: (JSC::DFG::Plan::compileInThreadImpl): * dfg/DFGPredictionPropagationPhase.cpp: (JSC::DFG::PredictionPropagationPhase::propagate): * dfg/DFGSafeToExecute.h: (JSC::DFG::safeToExecute): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage): (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::speculateStringObjectForStructure): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGStructureAbstractValue.cpp: Added. (JSC::DFG::StructureAbstractValue::assertIsWatched): (JSC::DFG::StructureAbstractValue::clobber): (JSC::DFG::StructureAbstractValue::observeTransition): (JSC::DFG::StructureAbstractValue::observeTransitions): (JSC::DFG::StructureAbstractValue::add): (JSC::DFG::StructureAbstractValue::merge): (JSC::DFG::StructureAbstractValue::mergeSlow): (JSC::DFG::StructureAbstractValue::mergeNotTop): (JSC::DFG::StructureAbstractValue::filter): (JSC::DFG::StructureAbstractValue::filterSlow): (JSC::DFG::StructureAbstractValue::contains): (JSC::DFG::StructureAbstractValue::isSubsetOf): (JSC::DFG::StructureAbstractValue::isSupersetOf): (JSC::DFG::StructureAbstractValue::overlaps): (JSC::DFG::StructureAbstractValue::equalsSlow): (JSC::DFG::StructureAbstractValue::dumpInContext): (JSC::DFG::StructureAbstractValue::dump): * dfg/DFGStructureAbstractValue.h: (JSC::DFG::StructureAbstractValue::StructureAbstractValue): (JSC::DFG::StructureAbstractValue::operator=): (JSC::DFG::StructureAbstractValue::clear): (JSC::DFG::StructureAbstractValue::makeTop): (JSC::DFG::StructureAbstractValue::assertIsWatched): (JSC::DFG::StructureAbstractValue::observeInvalidationPoint): (JSC::DFG::StructureAbstractValue::top): (JSC::DFG::StructureAbstractValue::isClear): (JSC::DFG::StructureAbstractValue::isTop): (JSC::DFG::StructureAbstractValue::isNeitherClearNorTop): (JSC::DFG::StructureAbstractValue::isClobbered): (JSC::DFG::StructureAbstractValue::merge): (JSC::DFG::StructureAbstractValue::filter): (JSC::DFG::StructureAbstractValue::operator==): (JSC::DFG::StructureAbstractValue::size): (JSC::DFG::StructureAbstractValue::at): (JSC::DFG::StructureAbstractValue::operator[]): (JSC::DFG::StructureAbstractValue::onlyStructure): (JSC::DFG::StructureAbstractValue::isSupersetOf): (JSC::DFG::StructureAbstractValue::makeTopWhenThin): (JSC::DFG::StructureAbstractValue::setClobbered): (JSC::DFG::StructureAbstractValue::add): Deleted. (JSC::DFG::StructureAbstractValue::addAll): Deleted. (JSC::DFG::StructureAbstractValue::contains): Deleted. (JSC::DFG::StructureAbstractValue::isSubsetOf): Deleted. (JSC::DFG::StructureAbstractValue::doesNotContainAnyOtherThan): Deleted. (JSC::DFG::StructureAbstractValue::isClearOrTop): Deleted. (JSC::DFG::StructureAbstractValue::last): Deleted. (JSC::DFG::StructureAbstractValue::speculationFromStructures): Deleted. (JSC::DFG::StructureAbstractValue::isValidOffset): Deleted. (JSC::DFG::StructureAbstractValue::hasSingleton): Deleted. (JSC::DFG::StructureAbstractValue::singleton): Deleted. (JSC::DFG::StructureAbstractValue::dumpInContext): Deleted. (JSC::DFG::StructureAbstractValue::dump): Deleted. (JSC::DFG::StructureAbstractValue::topValue): Deleted. * dfg/DFGStructureClobberState.h: Added. (JSC::DFG::merge): (WTF::printInternal): * dfg/DFGTransition.cpp: Added. (JSC::DFG::Transition::dumpInContext): (JSC::DFG::Transition::dump): * dfg/DFGTransition.h: Added. (JSC::DFG::Transition::Transition): * dfg/DFGTypeCheckHoistingPhase.cpp: (JSC::DFG::TypeCheckHoistingPhase::identifyRedundantStructureChecks): (JSC::DFG::TypeCheckHoistingPhase::identifyRedundantArrayChecks): * dfg/DFGWatchableStructureWatchingPhase.cpp: Added. (JSC::DFG::WatchableStructureWatchingPhase::WatchableStructureWatchingPhase): (JSC::DFG::WatchableStructureWatchingPhase::run): (JSC::DFG::WatchableStructureWatchingPhase::tryWatch): (JSC::DFG::performWatchableStructureWatching): * dfg/DFGWatchableStructureWatchingPhase.h: Added. * dfg/DFGWatchpointCollectionPhase.cpp: (JSC::DFG::WatchpointCollectionPhase::handle): (JSC::DFG::WatchpointCollectionPhase::handleEdge): Deleted. * ftl/FTLCapabilities.cpp: (JSC::FTL::canCompile): * ftl/FTLIntrinsicRepository.h: * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::ftlUnreachable): (JSC::FTL::LowerDFGToLLVM::createPhiVariables): (JSC::FTL::LowerDFGToLLVM::compileBlock): (JSC::FTL::LowerDFGToLLVM::compileNode): (JSC::FTL::LowerDFGToLLVM::compileUpsilon): (JSC::FTL::LowerDFGToLLVM::compilePhi): (JSC::FTL::LowerDFGToLLVM::compileDoubleRep): (JSC::FTL::LowerDFGToLLVM::compileValueRep): (JSC::FTL::LowerDFGToLLVM::compileValueToInt32): (JSC::FTL::LowerDFGToLLVM::compileGetArgument): (JSC::FTL::LowerDFGToLLVM::compileGetLocal): (JSC::FTL::LowerDFGToLLVM::compileSetLocal): (JSC::FTL::LowerDFGToLLVM::compileArithAddOrSub): (JSC::FTL::LowerDFGToLLVM::compileArithMul): (JSC::FTL::LowerDFGToLLVM::compileArithDiv): (JSC::FTL::LowerDFGToLLVM::compileArithMod): (JSC::FTL::LowerDFGToLLVM::compileArithMinOrMax): (JSC::FTL::LowerDFGToLLVM::compileArithAbs): (JSC::FTL::LowerDFGToLLVM::compileArithNegate): (JSC::FTL::LowerDFGToLLVM::compileArrayifyToStructure): (JSC::FTL::LowerDFGToLLVM::compilePutStructure): (JSC::FTL::LowerDFGToLLVM::compileGetById): (JSC::FTL::LowerDFGToLLVM::compileGetMyArgumentsLength): (JSC::FTL::LowerDFGToLLVM::compileGetMyArgumentByVal): (JSC::FTL::LowerDFGToLLVM::compileGetArrayLength): (JSC::FTL::LowerDFGToLLVM::compileGetByVal): (JSC::FTL::LowerDFGToLLVM::compilePutByVal): (JSC::FTL::LowerDFGToLLVM::compileArrayPush): (JSC::FTL::LowerDFGToLLVM::compileArrayPop): (JSC::FTL::LowerDFGToLLVM::compileNewArray): (JSC::FTL::LowerDFGToLLVM::compileNewArrayBuffer): (JSC::FTL::LowerDFGToLLVM::compileAllocatePropertyStorage): (JSC::FTL::LowerDFGToLLVM::compileReallocatePropertyStorage): (JSC::FTL::LowerDFGToLLVM::compileToString): (JSC::FTL::LowerDFGToLLVM::compileMakeRope): (JSC::FTL::LowerDFGToLLVM::compileMultiGetByOffset): (JSC::FTL::LowerDFGToLLVM::compileMultiPutByOffset): (JSC::FTL::LowerDFGToLLVM::compileCompareEq): (JSC::FTL::LowerDFGToLLVM::compileCompareStrictEq): (JSC::FTL::LowerDFGToLLVM::compileSwitch): (JSC::FTL::LowerDFGToLLVM::compare): (JSC::FTL::LowerDFGToLLVM::boolify): (JSC::FTL::LowerDFGToLLVM::terminate): (JSC::FTL::LowerDFGToLLVM::lowInt32): (JSC::FTL::LowerDFGToLLVM::lowInt52): (JSC::FTL::LowerDFGToLLVM::opposite): (JSC::FTL::LowerDFGToLLVM::lowCell): (JSC::FTL::LowerDFGToLLVM::lowBoolean): (JSC::FTL::LowerDFGToLLVM::lowDouble): (JSC::FTL::LowerDFGToLLVM::lowJSValue): (JSC::FTL::LowerDFGToLLVM::speculate): (JSC::FTL::LowerDFGToLLVM::isArrayType): (JSC::FTL::LowerDFGToLLVM::speculateStringObjectForStructureID): (JSC::FTL::LowerDFGToLLVM::callCheck): (JSC::FTL::LowerDFGToLLVM::buildExitArguments): (JSC::FTL::LowerDFGToLLVM::addExitArgumentForNode): (JSC::FTL::LowerDFGToLLVM::setInt52): (JSC::FTL::LowerDFGToLLVM::crash): (JSC::FTL::LowerDFGToLLVM::compileStructureTransitionWatchpoint): Deleted. * ftl/FTLOutput.cpp: (JSC::FTL::Output::crashNonTerminal): Deleted. * ftl/FTLOutput.h: (JSC::FTL::Output::crash): Deleted. * jit/JITOperations.h: * jsc.cpp: (WTF::jscExit): (functionQuit): (main): (printUsageStatement): (CommandLine::parseArguments): * runtime/Structure.h: (JSC::Structure::dfgShouldWatchIfPossible): (JSC::Structure::dfgShouldWatch): * tests/stress/arrayify-to-structure-contradiction.js: Added. (foo): * tests/stress/ftl-getmyargumentslength-inline.js: Added. (foo): * tests/stress/multi-put-by-offset-multiple-transitions.js: Added. (foo): (Foo): * tests/stress/throw-from-ftl-in-loop.js: Added. * tests/stress/throw-from-ftl.js: Added. (foo): 2014-06-03 Filip Pizlo <fpizlo@apple.com> [ftlopt] Unreviewed, roll out r169578. The build system needs some more love. * InlineRuntimeSymbolTable.h: Removed. * JavaScriptCore.xcodeproj/project.pbxproj: * build-symbol-table-index.py: * build-symbol-table-index.sh: * copy-llvm-ir-to-derived-sources.sh: * dfg/DFGByteCodeParser.cpp: (JSC::DFG::ByteCodeParser::handleCall): * dfg/DFGNode.h: (JSC::DFG::Node::canBeKnownFunction): Deleted. (JSC::DFG::Node::hasKnownFunction): Deleted. (JSC::DFG::Node::knownFunction): Deleted. (JSC::DFG::Node::giveKnownFunction): Deleted. * ftl/FTLAbbreviatedTypes.h: * ftl/FTLCompile.cpp: (JSC::FTL::compile): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::LowerDFGToLLVM::LowerDFGToLLVM): (JSC::FTL::LowerDFGToLLVM::lower): (JSC::FTL::LowerDFGToLLVM::compileCallOrConstruct): (JSC::FTL::LowerDFGToLLVM::possiblyCompileInlineableNativeCall): Deleted. (JSC::FTL::LowerDFGToLLVM::getFunctionBySymbol): Deleted. (JSC::FTL::LowerDFGToLLVM::getModuleByPathForSymbol): Deleted. (JSC::FTL::LowerDFGToLLVM::isInlinableSize): Deleted. * ftl/FTLState.cpp: (JSC::FTL::State::State): * ftl/FTLState.h: * heap/HandleStack.h: * llvm/InitializeLLVM.h: * llvm/InitializeLLVMMac.cpp: Removed. * llvm/InitializeLLVMMac.mm: Added. (JSC::initializeLLVMImpl): * llvm/LLVMAPIFunctions.h: * llvm/LLVMHeaders.h: * runtime/BundlePath.h: Removed. * runtime/BundlePath.mm: Removed. * runtime/DateConversion.h: * runtime/DateInstance.h: * runtime/ExceptionHelpers.h: * runtime/JSArray.h: * runtime/JSCJSValue.h: (JSC::JSValue::toFloat): * runtime/JSDateMath.h: * runtime/JSObject.h: * runtime/JSWrapperObject.h: * runtime/Options.h: * runtime/RegExp.h: * runtime/StringObject.h: * runtime/Structure.h: * tested-symbols.symlst: Removed. 2014-06-03 Filip Pizlo <fpizlo@apple.com> [ftlopt] FTL native inlining tests take far too long https://bugs.webkit.org/show_bug.cgi?id=133498 Unreviewed test gardening. Added a new exceptions test since the other one appears to not work. * tests/stress/ftl-library-exception.js: * tests/stress/ftl-library-inline-gettimezoneoffset.js: Added. (foo): * tests/stress/ftl-library-inlining-exceptions-dataview.js: Added. (foo): * tests/stress/ftl-library-inlining-exceptions.js: Copied from LayoutTests/js/regress/script-tests/ftl-library-inlining-exceptions.js. * tests/stress/ftl-library-inlining-loops.js: Copied from LayoutTests/js/regress/script-tests/ftl-library-inlining-loops.js. * tests/stress/ftl-library-inlining-random.js: * tests/stress/ftl-library-substring.js: 2014-06-03 Matthew Mirman <mmirman@apple.com> [ftlopt] Added system for inlining native functions via the FTL. https://bugs.webkit.org/show_bug.cgi?id=131515 Reviewed by Filip Pizlo. Also fixed the build to not compress the bitcode and to include all of the relevant runtime. With GCC_GENERATE_DEBUGGING_SYMBOLS = NO, the produced bitcode files are a 100th the size they were before. Now we can include all of the relevant runtime files with only a 3mb overhead. This is the same overhead as for two compressed files before, but done more efficiently (on both ends) and with less code. Deciding whether to inline native functions is left up to LLVM. The entire module containing the function is linked into the current compiled JS so that inlining the native functions shouldn't make them smaller. Rather than loading Runtime.symtbl at runtime FTLState.cpp now includes a file InlineRuntimeSymbolTable.h which statically builds the symbol table hash table. Currently build-symbol-table-index.py updates this file from the contents of tested-symbols.symlst when done building as a matter of convenience. However, in order to include the new contents of the file in the build you'd need to build twice. This will be fixed in future versions. * JavaScriptCore.xcodeproj/project.pbxproj: Added back runtime files to compile. * build-symbol-table-index.py: Changed bitcode suffix. Added inclusion of only tested symbols. Added output to InlineRuntimeSymbolTable.h. * build-symbol-table-index.sh: Changed bitcode suffix. * copy-llvm-ir-to-derived-sources.sh: Removed gzip compression. * tested-symbols.symlst: Added. * dfg/DFGByteCodeParser.cpp: (JSC::DFG::ByteCodeParser::handleCall): Now sets the knownFunction of the call node if such a function exists and emits a check that during runtime the callee is in fact known. * dfg/DFGNode.h: Added functions to set the known function of a call node. (JSC::DFG::Node::canBeKnownFunction): Added. (JSC::DFG::Node::hasKnownFunction): Added. (JSC::DFG::Node::knownFunction): Added. (JSC::DFG::Node::giveKnownFunction): Added. * ftl/FTLAbbreviatedTypes.h: Added a typedef for LLVMMemoryBufferRef * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::LowerDFGToLLVM::isInlinableSize): Added. Hardcoded threshold to 275. (JSC::FTL::LowerDFGToLLVM::getModuleByPathForSymbol): Added. (JSC::FTL::LowerDFGToLLVM::getFunctionBySymbol): Added. (JSC::FTL::LowerDFGToLLVM::possiblyCompileInlineableNativeCall): Added. (JSC::FTL::LowerDFGToLLVM::compileCallOrConstruct): Added call to possiblyCompileInlineableNativeCall * ftl/FTLOutput.h: (JSC::FTL::Output::allocaName): Added. Useful for debugging. * ftl/FTLState.cpp: (JSC::FTL::State::State): Added an include for InlineRuntimeSymbolTable.h * ftl/FTLState.h: Added symbol table hash table. * ftl/FTLCompile.cpp: (JSC::FTL::compile): Added inlining and dead function elimination passes. * heap/HandleStack.h: Added JS_EXPORT_PRIVATE to a few functions to get inlining to compile. * InlineRuntimeSymbolTable.h: Added. * llvm/InitializeLLVMMac.mm: Deleted. * llvm/InitializeLLVMMac.cpp: Added. * llvm/LLVMAPIFunctions.h: Added macros to include Bitcode parsing and linking functions. * llvm/LLVMHeaders.h: Added includes for Bitcode parsing and linking. * runtime/BundlePath.h: Added. * runtime/BundlePath.mm: Added. * runtime/DateInstance.h: Added JS_EXPORT_PRIVATE to a few functions to get inlining to compile. * runtime/DateInstance.h: ditto. * runtime/DateConversion.h: ditto. * runtime/ExceptionHelpers.h: ditto. * runtime/JSCJSValue.h: ditto. * runtime/JSArray.h: ditto. * runtime/JSDateMath.h: ditto. * runtime/JSObject.h: ditto. * runtime/JSObject.h: ditto. * runtime/RegExp.h: ditto. * runtime/Structure.h: ditto. * runtime/Options.h: Added maximumLLVMInstructionCountForNativeInlining. * tests/stress/ftl-library-inlining-random.js: Added. * tests/stress/ftl-library-substring.js: Added. 2014-05-21 Filip Pizlo <fpizlo@apple.com> [ftlopt] DFG::clobberize should be blind to the effects of GC https://bugs.webkit.org/show_bug.cgi?id=133166 Reviewed by Goeffrey Garen. Move the computation of where GCs happen to DFG::doesGC(). Large (>5x) speed-up on programs that do loop-invariant string concatenations. * CMakeLists.txt: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * dfg/DFGAbstractHeap.h: * dfg/DFGClobberize.h: (JSC::DFG::clobberize): (JSC::DFG::clobberizeForAllocation): Deleted. * dfg/DFGDoesGC.cpp: Added. (JSC::DFG::doesGC): * dfg/DFGDoesGC.h: Added. * dfg/DFGStoreBarrierElisionPhase.cpp: (JSC::DFG::StoreBarrierElisionPhase::handleNode): (JSC::DFG::StoreBarrierElisionPhase::couldCauseGC): Deleted. 2014-05-16 Filip Pizlo <fpizlo@apple.com> [ftlopt] A StructureSet with one element should only require one word and no allocation https://bugs.webkit.org/show_bug.cgi?id=133014 Reviewed by Oliver Hunt. This makes it more efficient to use StructureSet in situations where the common case is just one structure. I also took the opportunity to use the same set terminology we use in BitVector: merge, filter, exclude, contains, etc. Eventually, this will be used to implement StructureAbstractValue as well. * CMakeLists.txt: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * bytecode/StructureSet.cpp: Added. (JSC::StructureSet::StructureSet): (JSC::StructureSet::operator=): (JSC::StructureSet::clear): (JSC::StructureSet::add): (JSC::StructureSet::remove): (JSC::StructureSet::contains): (JSC::StructureSet::merge): (JSC::StructureSet::filter): (JSC::StructureSet::exclude): (JSC::StructureSet::isSubsetOf): (JSC::StructureSet::overlaps): (JSC::StructureSet::operator==): (JSC::StructureSet::speculationFromStructures): (JSC::StructureSet::arrayModesFromStructures): (JSC::StructureSet::dumpInContext): (JSC::StructureSet::dump): (JSC::StructureSet::addOutOfLine): (JSC::StructureSet::containsOutOfLine): (JSC::StructureSet::copyFrom): (JSC::StructureSet::OutOfLineList::create): (JSC::StructureSet::OutOfLineList::destroy): * bytecode/StructureSet.h: (JSC::StructureSet::StructureSet): (JSC::StructureSet::~StructureSet): (JSC::StructureSet::onlyStructure): (JSC::StructureSet::isEmpty): (JSC::StructureSet::size): (JSC::StructureSet::at): (JSC::StructureSet::operator[]): (JSC::StructureSet::last): (JSC::StructureSet::OutOfLineList::list): (JSC::StructureSet::OutOfLineList::OutOfLineList): (JSC::StructureSet::deleteStructureListIfNecessary): (JSC::StructureSet::isThin): (JSC::StructureSet::pointer): (JSC::StructureSet::singleStructure): (JSC::StructureSet::structureList): (JSC::StructureSet::set): (JSC::StructureSet::clear): Deleted. (JSC::StructureSet::add): Deleted. (JSC::StructureSet::addAll): Deleted. (JSC::StructureSet::remove): Deleted. (JSC::StructureSet::contains): Deleted. (JSC::StructureSet::containsOnly): Deleted. (JSC::StructureSet::isSubsetOf): Deleted. (JSC::StructureSet::overlaps): Deleted. (JSC::StructureSet::singletonStructure): Deleted. (JSC::StructureSet::speculationFromStructures): Deleted. (JSC::StructureSet::arrayModesFromStructures): Deleted. (JSC::StructureSet::operator==): Deleted. (JSC::StructureSet::dumpInContext): Deleted. (JSC::StructureSet::dump): Deleted. * dfg/DFGAbstractInterpreterInlines.h: (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): * dfg/DFGByteCodeParser.cpp: (JSC::DFG::ByteCodeParser::emitPrototypeChecks): (JSC::DFG::ByteCodeParser::handleGetById): (JSC::DFG::ByteCodeParser::parseBlock): * dfg/DFGCSEPhase.cpp: (JSC::DFG::CSEPhase::structureTransitionWatchpointElimination): * dfg/DFGNode.h: (JSC::DFG::Node::convertToStructureTransitionWatchpoint): * dfg/DFGTypeCheckHoistingPhase.cpp: (JSC::DFG::TypeCheckHoistingPhase::noticeStructureCheck): Source/WTF: 2014-06-04 Filip Pizlo <fpizlo@apple.com> [ftlopt] AI should be able track structure sets larger than 1 https://bugs.webkit.org/show_bug.cgi?id=128073 Reviewed by Oliver Hunt. * wtf/Bag.h: (WTF::Bag::Node::Node): (WTF::Bag::add): LayoutTests: 2014-06-04 Filip Pizlo <fpizlo@apple.com> [ftlopt] AI should be able track structure sets larger than 1 https://bugs.webkit.org/show_bug.cgi?id=128073 Reviewed by Oliver Hunt. * js/regress/get-by-id-bimorphic-check-structure-elimination-expected.txt: Added. * js/regress/get-by-id-bimorphic-check-structure-elimination-simple-expected.txt: Added. * js/regress/get-by-id-bimorphic-check-structure-elimination-simple.html: Added. * js/regress/get-by-id-bimorphic-check-structure-elimination.html: Added. * js/regress/get-by-id-check-structure-elimination-expected.txt: Added. * js/regress/get-by-id-check-structure-elimination.html: Added. * js/regress/get-by-id-quadmorphic-check-structure-elimination-simple-expected.txt: Added. * js/regress/get-by-id-quadmorphic-check-structure-elimination-simple.html: Added. * js/regress/script-tests/get-by-id-bimorphic-check-structure-elimination-simple.js: Added. * js/regress/script-tests/get-by-id-bimorphic-check-structure-elimination.js: Added. * js/regress/script-tests/get-by-id-check-structure-elimination.js: Added. * js/regress/script-tests/get-by-id-quadmorphic-check-structure-elimination-simple.js: Added. 2014-06-03 Filip Pizlo <fpizlo@apple.com> [ftlopt] FTL native inlining tests take far too long https://bugs.webkit.org/show_bug.cgi?id=133498 Unreviewed test gardening. Move long-running tests that focus on correctness into JSC/tests/stress. Speed up the performance tests by reducing allocation and call overhead. * js/regress/ftl-library-inlining-exceptions-expected.txt: Removed. * js/regress/ftl-library-inlining-exceptions.html: Removed. * js/regress/ftl-library-inlining-folding-expected.txt: Removed. * js/regress/ftl-library-inlining-folding.html: Removed. * js/regress/ftl-library-inlining-loops-expected.txt: Removed. * js/regress/ftl-library-inlining-loops.html: Removed. * js/regress/script-tests/ftl-library-inlining-dataview.js: (foo): Deleted. * js/regress/script-tests/ftl-library-inlining-exceptions.js: Removed. * js/regress/script-tests/ftl-library-inlining-folding.js: Removed. * js/regress/script-tests/ftl-library-inlining-loops.js: Removed. * js/regress/script-tests/ftl-library-inlining.js: (foo): Deleted. 2014-06-03 Matthew Mirman <mmirman@apple.com> [ftlopt] Added system for inlining native functions via the FTL. https://bugs.webkit.org/show_bug.cgi?id=131515 Reviewed by Filip Pizlo. Adds microbenchmarks. * js/regress/script-tests/ftl-library-inlining.js: Added. * js/regress/ftl-library-inlining-expected.txt: Added. * js/regress/ftl-library-inlining.html: Added. * js/regress/script-tests/ftl-library-inlining-dataview.js: Added. * js/regress/ftl-library-inlining-dataview-expected.txt: Added. * js/regress/ftl-library-inlining-dataview.html: Added. * js/regress/script-tests/ftl-library-inlining-exceptions.js: Added. * js/regress/ftl-library-inlining-exceptions-expected.txt: Added. * js/regress/ftl-library-inlining-exceptions.html: Added. * js/regress/script-tests/ftl-library-inlining-folding.js: Added. * js/regress/ftl-library-inlining-folding-expected.txt: Added. * js/regress/ftl-library-inlining-folding-expected.html: Added. * js/regress/script-tests/ftl-library-inlining-loops.js: Added. * js/regress/ftl-library-inlining-loops-expected.txt: Added. * js/regress/ftl-library-inlining-loops.html: Added. 2014-05-21 Filip Pizlo <fpizlo@apple.com> [ftlopt] DFG::clobberize should be blind to the effects of GC https://bugs.webkit.org/show_bug.cgi?id=133166 Reviewed by Geoffrey Garen. * js/regress/hoist-make-rope-expected.txt: Added. * js/regress/hoist-make-rope.html: Added. * js/regress/script-tests/hoist-make-rope.js: Added. (foo): Canonical link: https://commits.webkit.org/153092@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@171380 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-07-23 01:19:50 +00:00
function foo(a, b) {
var result;
for (var i = 0; i < 10000; ++i)
result = a + b;
return result;
}
noInline(foo);
for (var i = 0; i < 500; ++i) {
var result = foo("hello ", "world!");
if (result != "hello world!")
throw "Error: bad result: " + result;
}