haikuwebkit/JSTests/microbenchmarks/substring.js

18 lines
450 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 r168635, r168780, r169005, r169014, and r169143 from ftlopt. 2014-05-20 Filip Pizlo <fpizlo@apple.com> [ftlopt] DFG bytecode parser should turn GetById with nothing but a Getter stub as stuff+handleCall, and handleCall should be allowed to inline if it wants to https://bugs.webkit.org/show_bug.cgi?id=133105 Reviewed by Michael Saboff. Source/JavaScriptCore: - GetByIdStatus now knows about getters and can report intelligent things about them. As is usually the case with how we do these things, GetByIdStatus knows more about getters than the DFG can actually handle: it'll report details about polymorphic getter calls even though the DFG won't be able to handle those. This is fine; the DFG will see those statuses and bail to a generic slow path. - The DFG::ByteCodeParser now knows how to set up and do handleCall() for a getter call. This can, and usually does, result in inlining of getters! - CodeOrigin and OSR exit know about inlined getter calls. When you OSR out of an inlined getter, we set the return PC to a getter return thunk that fixes up the stack. We use the usual offset-true-return-PC trick, where OSR exit places the true return PC of the getter's caller as a phony argument that only the thunk knows how to find. - Removed a bunch of dead monomorphic chain support from StructureStubInfo. - A large chunk of this change is dragging GetGetterSetterByOffset, GetGetter, and GetSetter through the DFG and FTL. GetGetterSetterByOffset is like GetByOffset except that we know that we're returning a GetterSetter cell. GetGetter and GetSetter extract the getter, or setter, from the GetterSetter. This is a ~2.5x speed-up on the getter microbenchmarks that we already had. So far none of the "real" benchmarks exercise getters enough for this to matter. But I noticed that some of the variants of the Richards benchmark in other languages - for example Wolczko's Java translation of a C++ translation of Deutsch's Smalltalk version - use getters and setters extensively. So, I created a getter/setter JavaScript version of Richards and put it in regress/script-tests/getter-richards.js. That sees about a 2.4x speed-up from this patch, which is very reassuring. * bytecode/CodeBlock.cpp: (JSC::CodeBlock::printGetByIdCacheStatus): (JSC::CodeBlock::findStubInfo): * bytecode/CodeBlock.h: * bytecode/CodeOrigin.cpp: (WTF::printInternal): * bytecode/CodeOrigin.h: (JSC::InlineCallFrame::specializationKindFor): * bytecode/GetByIdStatus.cpp: (JSC::GetByIdStatus::computeFor): (JSC::GetByIdStatus::computeForStubInfo): (JSC::GetByIdStatus::makesCalls): (JSC::GetByIdStatus::computeForChain): Deleted. * bytecode/GetByIdStatus.h: (JSC::GetByIdStatus::makesCalls): Deleted. * bytecode/GetByIdVariant.cpp: (JSC::GetByIdVariant::~GetByIdVariant): (JSC::GetByIdVariant::GetByIdVariant): (JSC::GetByIdVariant::operator=): (JSC::GetByIdVariant::dumpInContext): * bytecode/GetByIdVariant.h: (JSC::GetByIdVariant::GetByIdVariant): (JSC::GetByIdVariant::callLinkStatus): * bytecode/PolymorphicGetByIdList.cpp: (JSC::GetByIdAccess::fromStructureStubInfo): (JSC::PolymorphicGetByIdList::from): * bytecode/SpeculatedType.h: * bytecode/StructureStubInfo.cpp: (JSC::StructureStubInfo::deref): (JSC::StructureStubInfo::visitWeakReferences): * bytecode/StructureStubInfo.h: (JSC::isGetByIdAccess): (JSC::StructureStubInfo::initGetByIdChain): Deleted. * dfg/DFGAbstractHeap.h: * dfg/DFGAbstractInterpreterInlines.h: (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): * dfg/DFGByteCodeParser.cpp: (JSC::DFG::ByteCodeParser::addCall): (JSC::DFG::ByteCodeParser::handleCall): (JSC::DFG::ByteCodeParser::handleInlining): (JSC::DFG::ByteCodeParser::handleGetByOffset): (JSC::DFG::ByteCodeParser::handleGetById): (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): (JSC::DFG::ByteCodeParser::parse): * dfg/DFGCSEPhase.cpp: (JSC::DFG::CSEPhase::getGetterSetterByOffsetLoadElimination): (JSC::DFG::CSEPhase::getInternalFieldLoadElimination): (JSC::DFG::CSEPhase::performNodeCSE): (JSC::DFG::CSEPhase::getTypedArrayByteOffsetLoadElimination): Deleted. * dfg/DFGClobberize.h: (JSC::DFG::clobberize): * dfg/DFGFixupPhase.cpp: (JSC::DFG::FixupPhase::fixupNode): * dfg/DFGJITCompiler.cpp: (JSC::DFG::JITCompiler::linkFunction): * dfg/DFGNode.h: (JSC::DFG::Node::hasStorageAccessData): * dfg/DFGNodeType.h: * dfg/DFGOSRExitCompilerCommon.cpp: (JSC::DFG::reifyInlinedCallFrames): * dfg/DFGPredictionPropagationPhase.cpp: (JSC::DFG::PredictionPropagationPhase::propagate): * dfg/DFGSafeToExecute.h: (JSC::DFG::safeToExecute): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::compile): * ftl/FTLAbstractHeapRepository.cpp: * ftl/FTLAbstractHeapRepository.h: * ftl/FTLCapabilities.cpp: (JSC::FTL::canCompile): * ftl/FTLLink.cpp: (JSC::FTL::link): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::LowerDFGToLLVM::compileNode): (JSC::FTL::LowerDFGToLLVM::compileGetGetter): (JSC::FTL::LowerDFGToLLVM::compileGetSetter): * jit/AccessorCallJITStubRoutine.h: * jit/JIT.cpp: (JSC::JIT::assertStackPointerOffset): (JSC::JIT::privateCompile): * jit/JIT.h: * jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_get_by_id): * jit/ThunkGenerators.cpp: (JSC::arityFixupGenerator): (JSC::baselineGetterReturnThunkGenerator): (JSC::baselineSetterReturnThunkGenerator): (JSC::arityFixup): Deleted. * jit/ThunkGenerators.h: * runtime/CommonSlowPaths.cpp: (JSC::setupArityCheckData): * tests/stress/exit-from-getter.js: Added. * tests/stress/poly-chain-getter.js: Added. (Cons): (foo): (test): * tests/stress/poly-chain-then-getter.js: Added. (Cons1): (Cons2): (foo): (test): * tests/stress/poly-getter-combo.js: Added. (Cons1): (Cons2): (foo): (test): (.test): * tests/stress/poly-getter-then-chain.js: Added. (Cons1): (Cons2): (foo): (test): * tests/stress/poly-getter-then-self.js: Added. (foo): (test): (.test): * tests/stress/poly-self-getter.js: Added. (foo): (test): (getter): * tests/stress/poly-self-then-getter.js: Added. (foo): (test): * tests/stress/weird-getter-counter.js: Added. (foo): (test): 2014-05-17 Filip Pizlo <fpizlo@apple.com> [ftlopt] Factor out how CallLinkStatus uses exit site data https://bugs.webkit.org/show_bug.cgi?id=133042 Reviewed by Anders Carlsson. This makes it easier to use CallLinkStatus from clients that are calling into after already holding some of the relevant locks. This is necessary because we use a "one lock at a time" policy for CodeBlock locks: if you hold one then you're not allowed to acquire any of the others. So, any code that needs to lock multiple CodeBlock locks needs to sort of lock one, do some stuff, release it, then lock another, and then do more stuff. The exit site data corresponds to the stuff you do while holding the baseline lock, while the CallLinkInfo method corresponds to the stuff you do while holding the CallLinkInfo owner's lock. * bytecode/CallLinkStatus.cpp: (JSC::CallLinkStatus::computeFor): (JSC::CallLinkStatus::computeExitSiteData): (JSC::CallLinkStatus::computeDFGStatuses): * bytecode/CallLinkStatus.h: (JSC::CallLinkStatus::ExitSiteData::ExitSiteData): 2014-05-17 Filip Pizlo <fpizlo@apple.com> [ftlopt] InlineCallFrame::isCall should be an enumeration https://bugs.webkit.org/show_bug.cgi?id=133034 Reviewed by Sam Weinig. Once we start inlining getters and setters, we'll want InlineCallFrame to be able to tell us that the inlined call was a getter call or a setter call. Initially I thought I would have a new field called "kind" that would have components NormalCall, GetterCall, and SetterCall. But that doesn't make sense, because for GetterCall and SetterCall, isCall would have to be true. Hence, It makes more sense to have one enumeration that is Call, Construct, GetterCall, or SetterCall. This patch is a first step towards this. It's interesting that isClosureCall should probably still be separate, since getter and setter inlining could inline closure calls. * bytecode/CodeBlock.h: (JSC::baselineCodeBlockForInlineCallFrame): * bytecode/CodeOrigin.cpp: (JSC::InlineCallFrame::dumpInContext): (WTF::printInternal): * bytecode/CodeOrigin.h: (JSC::InlineCallFrame::kindFor): (JSC::InlineCallFrame::specializationKindFor): (JSC::InlineCallFrame::InlineCallFrame): (JSC::InlineCallFrame::specializationKind): * dfg/DFGByteCodeParser.cpp: (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): * dfg/DFGOSRExitPreparation.cpp: (JSC::DFG::prepareCodeOriginForOSRExit): * runtime/Arguments.h: (JSC::Arguments::finishCreation): 2014-05-13 Filip Pizlo <fpizlo@apple.com> [ftlopt] DFG should not exit due to inadequate profiling coverage when it can trivially fill in the profiling coverage due to variable constant inference and the better prediction modeling of typed array GetByVals https://bugs.webkit.org/show_bug.cgi?id=132896 Reviewed by Geoffrey Garen. This is a slight win on SunSpider, but it's meant to ultimately help us on embenchen/lua. We already do well on that benchmark but our convergence is slower than I'd like. * dfg/DFGArrayMode.cpp: (JSC::DFG::ArrayMode::refine): * dfg/DFGByteCodeParser.cpp: (JSC::DFG::ByteCodeParser::parseBlock): * dfg/DFGFixupPhase.cpp: (JSC::DFG::FixupPhase::fixupNode): * dfg/DFGPredictionPropagationPhase.cpp: (JSC::DFG::PredictionPropagationPhase::propagate): 2014-05-08 Filip Pizlo <fpizlo@apple.com> jsSubstring() should be lazy https://bugs.webkit.org/show_bug.cgi?id=132556 Reviewed by Andreas Kling. jsSubstring() is now lazy by using a special rope that is a substring instead of a concatenation. To make this patch super simple, we require that a substring's base is never a rope. Hence, when resolving a rope, we either go down a non-recursive substring path, or we go down a concatenation path which may see exactly one level of substrings in its fibers. This is up to a 50% speed-up on microbenchmarks and a 10% speed-up on Octane/regexp. Relanding this with assertion fixes. * heap/MarkedBlock.cpp: (JSC::MarkedBlock::specializedSweep): * runtime/JSString.cpp: (JSC::JSRopeString::visitFibers): (JSC::JSRopeString::resolveRopeInternal8): (JSC::JSRopeString::resolveRopeInternal16): (JSC::JSRopeString::clearFibers): (JSC::JSRopeString::resolveRope): (JSC::JSRopeString::resolveRopeSlowCase8): (JSC::JSRopeString::resolveRopeSlowCase): * runtime/JSString.h: (JSC::JSRopeString::finishCreation): (JSC::JSRopeString::append): (JSC::JSRopeString::create): (JSC::JSRopeString::offsetOfFibers): (JSC::JSRopeString::fiber): (JSC::JSRopeString::substringBase): (JSC::JSRopeString::substringOffset): (JSC::JSRopeString::notSubstringSentinel): (JSC::JSRopeString::substringSentinel): (JSC::JSRopeString::isSubstring): (JSC::JSRopeString::setIsSubstring): (JSC::jsSubstring): * runtime/RegExpMatchesArray.cpp: (JSC::RegExpMatchesArray::reifyAllProperties): * runtime/StringPrototype.cpp: (JSC::stringProtoFuncSubstring): Source/WTF: * wtf/Bag.h: (WTF::Bag::iterator::operator!=): LayoutTests: * js/regress/getter-no-activation-expected.txt: Added. * js/regress/getter-no-activation.html: Added. * js/regress/script-tests/getter-no-activation.js: Added. * js/regress/getter-richards-expected.txt: Added. * js/regress/getter-richards.html: Added. * js/regress/script-tests/getter-richards.js: Added. 2014-05-08 Filip Pizlo <fpizlo@apple.com> jsSubstring() should be lazy https://bugs.webkit.org/show_bug.cgi?id=132556 Reviewed by Andreas Kling. These tests get 35-50% faster. * js/regress/script-tests/substring-concat-weird.js: Added. (foo): * js/regress/script-tests/substring-concat.js: Added. (foo): * js/regress/script-tests/substring.js: Added. (foo): * js/regress/substring-concat-expected.txt: Added. * js/regress/substring-concat-weird-expected.txt: Added. * js/regress/substring-concat-weird.html: Added. * js/regress/substring-concat.html: Added. * js/regress/substring-expected.txt: Added. * js/regress/substring.html: Added. Canonical link: https://commits.webkit.org/153077@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@171362 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2014-07-22 21:08:50 +00:00
function foo() {
return a + b;
}
var array = Array(10007);
var string = foo.toString();
for (var i = 0; i < 1000000; ++i) {
array[i % array.length] = string.substring(i % string.length, (i / string.length) % string.length);
}
for (var i = 0; i < array.length; ++i) {
if (string.indexOf(array[i]) < 0)
throw "Error: bad substring: " + array[i];
}