1. 20 Apr, 2016 1 commit
    • mbrandy's avatar
      PPC: [crankshaft] Address the deoptimization loops of Math.floor, Math.round and Math.ceil. · 4e93ce4f
      mbrandy authored
      Port 978ad03b
      
      Original commit message:
          Fix and re-enable the flexible representation for Math.floor (which is used to
          implement Math.ceil) and Math.round, which allows Math.floor and Math.round to
          return double results instead of int32, and therefore allows values outside
          the int32 range, especially -0 is now a valid result, which doesn't deopt.
      
          Also port this feature to x64 and ia32 when the CPU supports the SSE4.1
          extension.
      
          This addresses all the known deoptimization loops related to Math.round
          in the Kraken benchmark suite, and seems to also address most of the
          deoptimization loops related to Math.floor in the Oort Online benchmark.
      
          Drive-by-fix: Import the regression tests for the broken HMathFloorOfDiv
          optimization that caused the initial revert of the feature (for arm64 only
          back then).
      
      R=bmeurer@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
      BUG=chromium:476477,v8:2890,v8:4059
      LOG=n
      
      Review URL: https://codereview.chromium.org/1839643007
      
      Cr-Commit-Position: refs/heads/master@{#35659}
      4e93ce4f
  2. 07 Apr, 2016 2 commits
  3. 01 Apr, 2016 1 commit
  4. 31 Mar, 2016 1 commit
  5. 30 Mar, 2016 1 commit
  6. 22 Mar, 2016 3 commits
  7. 21 Mar, 2016 1 commit
  8. 16 Mar, 2016 1 commit
  9. 09 Mar, 2016 2 commits
    • mbrandy's avatar
      PPC: [runtime] Unify and simplify how frames are marked · 4445c095
      mbrandy authored
      Port 9dcd0857
      
      Original commit message:
          Before this CL, various code stubs used different techniques
          for marking their frames to enable stack-crawling and other
          access to data in the frame. All of them were based on a abuse
          of the "standard" frame representation, e.g. storing the a
          context pointer immediately below the frame's fp, and a
          function pointer after that. Although functional, this approach
          tends to make stubs and builtins do an awkward, unnecessary
          dance to appear like standard frames, even if they have
          nothing to do with JavaScript execution.
      
          This CL attempts to improve this by:
      
          * Ensuring that there are only two fundamentally different
            types of frames, a "standard" frame and a "typed" frame.
            Standard frames, as before, contain both a context and
            function pointer. Typed frames contain only a minimum
            of a smi marker in the position immediately below the fp
            where the context is in standard frames.
          * Only interpreted, full codegen, and optimized Crankshaft and
            TurboFan JavaScript frames use the "standard" format. All
            other frames use the type frame format with an explicit
            marker.
          * Typed frames can contain one or more values below the
            type marker. There is new magic macro machinery in
            frames.h that simplifies defining the offsets of these fields
            in typed frames.
          * A new flag in the CallDescriptor enables specifying whether
            a frame is a standard frame or a typed frame. Secondary
            register location spilling is now only enabled for standard
            frames.
          * A zillion places in the code have been updated to deal with
            the fact that most code stubs and internal frames use the
            typed frame format. This includes changes in the
            deoptimizer, debugger, and liveedit.
          * StandardFrameConstants::kMarkerOffset is deprecated,
            (CommonFrameConstants::kContextOrFrameTypeOffset
            and StandardFrameConstants::kFrameOffset are now used
            in its stead).
      
      R=danno@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
      BUG=
      
      Review URL: https://codereview.chromium.org/1778713002
      
      Cr-Commit-Position: refs/heads/master@{#34643}
      4445c095
    • ishell's avatar
      [crankshaft] Added checks to tail call instructions that we don't have to restore caller doubles. · 24cd6676
      ishell authored
      TBR=bmeurer@chromium.org
      BUG=v8:4698
      LOG=N
      
      Review URL: https://codereview.chromium.org/1773173005
      
      Cr-Commit-Position: refs/heads/master@{#34613}
      24cd6676
  10. 08 Mar, 2016 1 commit
    • verwaest's avatar
      Don't do any special normalization if a boilerplate contains function literals. · fd405704
      verwaest authored
      This mechanism was used to ensure that functions ended up as constants on the map of prototypes defined using object literals, e.g.,:
      
      function.prototype = {
        method: function() { ... }
      }
      
      Nowadays we treat prototypes specially, and make all their functions constants when an object turns prototype. Hence this special custom code isn't necessary anymore.
      
      This also affects boilerplates that do not become prototypes. Their functions will not be constants but fields instead. Calling their methods will slow down. However, multiple instances of the same boilerplate will stay monomorphic. We'll have to see what the impact is for such objects, but preliminary benchmarks do not show this as an important regression.
      
      BUG=chromium:593008
      LOG=n
      
      Review URL: https://codereview.chromium.org/1772423002
      
      Cr-Commit-Position: refs/heads/master@{#34602}
      fd405704
  11. 07 Mar, 2016 1 commit
    • mbrandy's avatar
      PPC: [crankshaft] Support ES6 tail call elimination. · 826f67be
      mbrandy authored
      Port 22938040
      
      Original commit message:
          HInvokeFunction and HApplyArguments instructions now support tail calling.
      
          Inlining of calls at tail position is not supported yet and therefore still disabled.
      
          The tail-call-megatest was modified so that the usages of "arguments" object do not disable Crankshaft.
      
      R=ishell@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
      BUG=v8:4698
      LOG=N
      
      Review URL: https://codereview.chromium.org/1767173002
      
      Cr-Commit-Position: refs/heads/master@{#34563}
      826f67be
  12. 04 Mar, 2016 1 commit
    • mbrandy's avatar
      PPC: [compiler] Introduce code stubs for string relational comparisons. · 35bce027
      mbrandy authored
      Port 5912e0f0
      
      Original commit message:
          Add StringLessThanStub, StringLessThanOrEqualStub, StringGreaterThanStub
          and StringGreaterThanOrEqualStub, based on the CodeStubAssembler, and
          hook them up with TurboFan (and Ignition). The stubs are currently
          essentially comparable with the StringCompareStub, which is now
          obsolete. We can later extend these stubs to cover more interesting
          cases (i.e. two byte sequential string comparisons, etc.).
      
      R=bmeurer@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
      BUG=
      
      Review URL: https://codereview.chromium.org/1761403002
      
      Cr-Commit-Position: refs/heads/master@{#34508}
      35bce027
  13. 03 Mar, 2016 1 commit
    • mbrandy's avatar
      PPC: [compiler] Introduce StringEqualStub and StringNotEqualStub. · d61b8cee
      mbrandy authored
      Port 2689548e
      
      Original commit message:
          These new stubs perform exactly the same job as the string equality case
          for the CompareIC, but are platform independent and usable outside of
          fullcodegen and Crankshaft. We use them in the StrictEqualStub and the
          StrictNotEqualStub instead of falling back to the runtime immediately
          for String comparisons, and we also use them in TurboFan to perform
          String equality or inequality comparisons.
      
          These stubs currently handle only internalized and one byte strings w/o
          going to C++, but it should be easy to add support for more string cases
          later, i.e. utilizing already flattened cons strings or comparing two
          byte strings as well.
      
      R=bmeurer@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
      BUG=
      
      Review URL: https://codereview.chromium.org/1763723002
      
      Cr-Commit-Position: refs/heads/master@{#34462}
      d61b8cee
  14. 29 Feb, 2016 1 commit
    • bmeurer's avatar
      [stubs] Introduce a proper ToBooleanStub. · d1df58e8
      bmeurer authored
      Rename the existing (patching) ToBooleanStub to ToBooleanICStub to match
      our naming convention, and add a new TurboFan-powered ToBooleanStub,
      which just does the ToBoolean conversion without any runtime call or
      code patching, so we can use it for Ignition (and TurboFan).
      
      Drive-by-fix: Add an Oddball::to_boolean field similar to the ones we
      already have for to_string and to_number, so we don't need to actually
      dispatch on the concrete Oddball at all.
      
      R=epertoso@chromium.org, rmcilroy@chromium.org, yangguo@chromium.org
      
      Review URL: https://codereview.chromium.org/1744163002
      
      Cr-Commit-Position: refs/heads/master@{#34361}
      d1df58e8
  15. 26 Feb, 2016 1 commit
  16. 24 Feb, 2016 1 commit
  17. 18 Feb, 2016 1 commit
    • mbrandy's avatar
      PPC: More simplification and unification of frame handling · 6cd74a7e
      mbrandy authored
      Port 55071954
      
      Original commit message:
          Frame slots indexes numbers are used more consistently for
          computation in both TurboFan and Crankshaft. Specifically,
          Crankshaft now uses frame slot indexes in LChunk, removing
          the need for some special-case maths when building the
          deoptimization translation table.
      
      R=danno@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
      BUG=
      
      Review URL: https://codereview.chromium.org/1710073002
      
      Cr-Commit-Position: refs/heads/master@{#34126}
      6cd74a7e
  18. 17 Feb, 2016 3 commits
  19. 16 Feb, 2016 1 commit
  20. 15 Feb, 2016 1 commit
  21. 11 Feb, 2016 1 commit
  22. 10 Feb, 2016 1 commit
    • mbrandy's avatar
      PPC: Mark null and undefined as undetectable, and use it to handle abstract... · d4bdd767
      mbrandy authored
      PPC: Mark null and undefined as undetectable, and use it to handle abstract equality comparison in the generic compare ic
      
      Port 3ce9e808
      
      Original commit message:
          Marking as undetectable makes abstract equality of null, undefined, and
          other undetectable objects easier. Supporting it in the generic compare
          IC significantly speeds up dynamic comparison between those values and
          JSReceivers by not falling back to the runtime.
      
      R=verwaest@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
      BUG=
      
      Review URL: https://codereview.chromium.org/1684133003
      
      Cr-Commit-Position: refs/heads/master@{#33876}
      d4bdd767
  23. 09 Feb, 2016 1 commit
    • bmeurer's avatar
      [intrinsics] Kill the %_IsMinusZero intrinsic. · 00f7d1f5
      bmeurer authored
      By now only the default %TypedArray%.prototype.sort compare function
      and the JS implementation of SameValueZero were still using the odd
      %_IsMinusZero intrinsic, whose semantics both included a number check
      (actually HeapNumber test) plus testing if the heap number stores the
      special -0 value. In both cases we already know that we deal with
      number so we can reduce it to a simple number test for -0, which can
      be expressed via dividing 1 by that value and checking the sign of
      the result. In case of the compare function, we can be even smarter
      and work with the reciprocal values in case x and y are equal to 0
      (although long term we should probably rewrite the fast case for
      the typed array sorting function in C++ anyway, which will be way,
      way faster than our handwritten callback-style, type-feedback
      polluted JS implementation).
      
      R=yangguo@chromium.org
      
      Review URL: https://codereview.chromium.org/1680783002
      
      Cr-Commit-Position: refs/heads/master@{#33833}
      00f7d1f5
  24. 08 Feb, 2016 1 commit
    • mstarzinger's avatar
      Remove --stop-at flag from several backends. · 664110f8
      mstarzinger authored
      The flag in question is a debug-only flag supported by full-codegen and
      Crankshaft only. In it's current form there are some unresolved issues:
      - The flag is defeated by inlining in Crankshaft.
      - The flag is not supported by TurboFan.
      - The flag is not supported by Ignition.
      
      Instead of addressing the above issues and increasing maintenance cost
      for all backends and also given the "slim" test coverage, this CL fully
      removes the support from all backends.
      
      R=bmeurer@chromium.org,jkummerow@chromium.org
      
      Review URL: https://codereview.chromium.org/1676263002
      
      Cr-Commit-Position: refs/heads/master@{#33817}
      664110f8
  25. 29 Jan, 2016 2 commits
    • mbrandy's avatar
      PPC: Refactor checks for minus zero. · 21bb9c6a
      mbrandy authored
      R=joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
      BUG=
      
      Review URL: https://codereview.chromium.org/1650593002
      
      Cr-Commit-Position: refs/heads/master@{#33620}
      21bb9c6a
    • jkummerow's avatar
      Introduce {FAST,SLOW}_STRING_WRAPPER_ELEMENTS · f4872f74
      jkummerow authored
      String wrappers (new String("foo")) are special objects: their string
      characters are accessed like elements, and they also have an elements
      backing store. This used to require a bunch of explicit checks like:
      
      if (obj->IsJSValue() && JSValue::cast(obj)->value()->IsString()) {
        /* Handle string characters */
      }
      // Handle regular elements (for string wrappers and other objects)
      obj->GetElementsAccessor()->Whatever(...);
      
      This CL introduces new ElementsKinds for string wrapper objects (one for
      fast elements, one for dictionary elements), which allow folding the
      special-casing into new StringWrapperElementsAccessors.
      
      No observable change in behavior is intended.
      
      Review URL: https://codereview.chromium.org/1612323003
      
      Cr-Commit-Position: refs/heads/master@{#33616}
      f4872f74
  26. 26 Jan, 2016 1 commit
    • mbrandy's avatar
      PPC: [es6] Tail calls support. · 95aedaa0
      mbrandy authored
      Port 6131ab1e
      
      Original commit message:
          This CL implements PrepareForTailCall() mentioned in ES6 spec for full codegen, Crankshaft and Turbofan.
          When debugger is active tail calls are disabled.
      
          Tail calling can be enabled by --harmony-tailcalls flag.
      
      R=ishell@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
      BUG=v8:4698
      LOG=Y
      
      Review URL: https://codereview.chromium.org/1635823003
      
      Cr-Commit-Position: refs/heads/master@{#33524}
      95aedaa0
  27. 25 Jan, 2016 1 commit
    • bmeurer's avatar
      [for-in] Further refactorings and unification around for-in. · 88f9995d
      bmeurer authored
      Cleanup %ForInPrepare runtime entry, and unify common logic with
      %ForInEnumerate (renamed from %GetPropertyNamesFast). Also introduce
      a TupleType to properly type JSForInPrepare and its projections w/o
      special hacks in the Typer. And fix %ForInNext and JSForInNext to be
      consistent with fullcodegen again (after the proxy refactorings last
      quarter).
      
      R=jarin@chromium.org
      BUG=v8:3650
      LOG=n
      
      Review URL: https://codereview.chromium.org/1631583002
      
      Cr-Commit-Position: refs/heads/master@{#33487}
      88f9995d
  28. 21 Jan, 2016 2 commits
    • mbrandy's avatar
      PPC: [for-in] Sanitize for-in optimizations and fix bailout points. · cbc05640
      mbrandy authored
      Port f48bf12f
      
      Original commit message:
          The PrepareId bailout location was used incorrectly in Crankshaft and,
          as it turns out, is not required anyway (once you do it right). Also
          there was some premature optimization going on with the CheckEnumCache
          (trying to load null from roots only once), plus we can be smarter about
          the null/undefined check anyway.
      
          The idea behind this changes is to prepare unification of the two
          different ForInPrepare implementations that we now have, with the end
          result being that we only use the new implementation that was recently
          added for the interpreter.
      
      R=bmeurer@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
      BUG=v8:3650
      LOG=n
      
      Review URL: https://codereview.chromium.org/1619643004
      
      Cr-Commit-Position: refs/heads/master@{#33447}
      cbc05640
    • bmeurer's avatar
      [crankshaft] Remove the useless HMapEnumLength instruction. · 441af2e6
      bmeurer authored
      There's no need to have HMapEnumLength as a dedicated instruction,
      as it can be expressed using a HLoadNamedField plus an HBitwiseAnd
      operation.
      
      R=jarin@chromium.org
      BUG=v8:3650
      LOG=n
      
      Review URL: https://codereview.chromium.org/1614943002
      
      Cr-Commit-Position: refs/heads/master@{#33439}
      441af2e6
  29. 20 Jan, 2016 1 commit
    • danno's avatar
      [compiler] Remove CodeStub from CompilationInfo · d1d01964
      danno authored
      The motivation for this is that CompilationInfo really shouldn't
      explicitly know anything about CodeStubs. This is evident in
      the TurboFan stubs pipeline, which only needs to pass down
      information about Code::Flags to the code generator and not
      any of the CallInterfaceDescriptor silliness that Hydrogen has
      to push around, since TF has the Linkage class that
      encapsulates everything that is needed for the stub ABI. So,
      instead of threading CodeStub machinery through the TF stub
      pipeline, it is now removed from CompilationInfo and replaced
      by only the explicit bits needed both by the Crankshaft and
      TF pipelines in code generation.
      
      Review URL: https://codereview.chromium.org/1604543002
      
      Cr-Commit-Position: refs/heads/master@{#33410}
      d1d01964
  30. 15 Jan, 2016 1 commit
  31. 12 Jan, 2016 2 commits