1. 28 Mar, 2014 2 commits
  2. 24 Mar, 2014 4 commits
  3. 21 Mar, 2014 1 commit
  4. 20 Mar, 2014 3 commits
  5. 19 Mar, 2014 1 commit
  6. 18 Mar, 2014 1 commit
  7. 14 Mar, 2014 2 commits
  8. 10 Mar, 2014 2 commits
  9. 28 Feb, 2014 1 commit
  10. 13 Feb, 2014 1 commit
    • vegorov@chromium.org's avatar
      Improve positions tracking inside the HGraphBuilder. · 8f170a66
      vegorov@chromium.org authored
      Instead of tracking simple absolute offset from the start of the script like other places do, track a pair of (inlining id, offset from the start of inlined function).
      
      This enables us to pinpoint with inlining path an instruction came from. Previously in multi-script environments we emitted positions that made very little sense because inside a single optimized function they would point to different scripts without a way to distinguish them.
      
      Start dumping the source of every inlined function to make possible IR viewing tools with integrated source views as there was previously no way to acquire this information from IR dumps. We also dump source position at which each inlining occured.
      
      Tracked positions are written into hydrogen.cfg as pos:<inlining-id>_<offset>.
      
      Flag --emit-opt-code-positions is renamed by this change into --hydrogen-track-positions to better convey it's meaning.
      
      In addition this change assigned global unique identifier to each optimization performed inside isolate. This allows to precisely match compilation artifacts (e.g. IR and disassembly) and deoptimizations.
      
      BUG=
      R=yangguo@chromium.org
      
      Review URL: https://codereview.chromium.org/140683011
      
      git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19360 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
      8f170a66
  11. 12 Feb, 2014 2 commits
  12. 11 Feb, 2014 1 commit
  13. 05 Feb, 2014 1 commit
  14. 30 Jan, 2014 2 commits
    • dcarney@chromium.org's avatar
      crankshaft support for api method calls · 5c589640
      dcarney@chromium.org authored
      R=verwaest@chromium.org
      
      BUG=
      
      Review URL: https://codereview.chromium.org/148333003
      
      git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18946 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
      5c589640
    • jarin@chromium.org's avatar
      The current · 99ce5a24
      jarin@chromium.org authored
      version is passing all the existing test + a bunch of new tests
      (packaged in the change list, too).
      
      The patch extends the SlotRef object to describe captured and duplicated
      objects. Since the SlotRefs are not independent of each other anymore,
      there is a new SlotRefValueBuilder class that stores the SlotRefs and
      later materializes the objects from the SlotRefs.
      
      Note that unlike the previous implementation of SlotRefs, we now build
      the SlotRef entries for the entire frame, not just the particular
      function.  This is because duplicate objects might refer to previous
      captured objects (that might live inside other inlined function's part
      of the frame).
      
      We also need to store the materialized objects between other potential
      invocations of the same arguments object so that we materialize each
      captured object at most once.  The materialized objects of frames live
      in the new MaterielizedObjectStore object (contained in Isolate),
      indexed by the frame's FP address.  Each argument materialization (and
      deoptimization) tries to lookup its captured objects in the store before
      building new ones.  Deoptimization also removes the materialized objects
      from the store. We also schedule a lazy deopt to be sure that we always
      get rid of the materialized objects and that the optmized function
      adopts the materialized objects (instead of happily computing with its
      captured representations).
      
      Concerns:
      
      - Is the FP address the right key for a frame? (Note that deoptimizer's
      representation of frame is different from the argument object
      materializer's one - it is not easy to find common ground.)
      
      - Performance is suboptimal in several places, but a quick local run of
      benchmarks does not seem to show a perf hit. Examples of possible
      improvements: smarter generation of SlotRefs (build other functions'
      SlotRefs only for captured objects and only if necessary), smarter
      lookup of stored materialized objects.
      
      - Ideally, we would like to share the code for argument materialization
      with deoptimizer's materializer.  However, the supporting data structures
      (mainly the frame descriptor) are quite different in each case, so it
      looks more like a separate project.
      
      Thanks for any feedback.
      
      R=danno@chromium.org, mstarzinger@chromium.org
      LOG=N
      BUG=
      
      Committed: https://code.google.com/p/v8/source/detail?r=18918
      
      Review URL: https://codereview.chromium.org/103243005
      
      git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18936 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
      99ce5a24
  15. 29 Jan, 2014 2 commits
    • jarin@chromium.org's avatar
      Revert "Captured arguments object materialization" · ec51f26b
      jarin@chromium.org authored
      R=jarin@chromium.org
      
      Review URL: https://codereview.chromium.org/130803009
      
      git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18923 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
      ec51f26b
    • jarin@chromium.org's avatar
      This is a preview of the captured arguments object materialization, · 868ad01e
      jarin@chromium.org authored
      mostly to make sure that it is going in the right direction. The current
      version is passing all the existing test + a bunch of new tests
      (packaged in the change list, too).
      
      The patch extends the SlotRef object to describe captured and duplicated
      objects. Since the SlotRefs are not independent of each other anymore,
      there is a new SlotRefValueBuilder class that stores the SlotRefs and
      later materializes the objects from the SlotRefs.
      
      Note that unlike the previous implementation of SlotRefs, we now build
      the SlotRef entries for the entire frame, not just the particular
      function.  This is because duplicate objects might refer to previous
      captured objects (that might live inside other inlined function's part
      of the frame).
      
      We also need to store the materialized objects between other potential
      invocations of the same arguments object so that we materialize each
      captured object at most once.  The materialized objects of frames live
      in the new MaterielizedObjectStore object (contained in Isolate),
      indexed by the frame's FP address.  Each argument materialization (and
      deoptimization) tries to lookup its captured objects in the store before
      building new ones.  Deoptimization also removes the materialized objects
      from the store. We also schedule a lazy deopt to be sure that we always
      get rid of the materialized objects and that the optmized function
      adopts the materialized objects (instead of happily computing with its
      captured representations).
      
      Concerns:
      
      - Is there a simpler/more correct way to store the already-materialized
      objects? (At the moment there is a custom root reference to JSArray
      containing frames' FixedArrays with their captured objects.)
      
      - Is the FP address the right key for a frame? (Note that deoptimizer's
      representation of frame is different from the argument object
      materializer's one - it is not easy to find common ground.)
      
      - Performance is suboptimal in several places, but a quick local run of
      benchmarks does not seem to show a perf hit. Examples of possible
      improvements: smarter generation of SlotRefs (build other functions'
      SlotRefs only for captured objects and only if necessary), smarter
      lookup of stored materialized objects.
      
      - Ideally, we would like to share the code for argument materialization
      with deoptimizer's materializer.  However, the supporting data structures
      (mainly the frame descriptor) are quite different in each case, so it
      looks more like a separate project.
      
      Thanks for any feedback.
      
      R=mstarzinger@chromium.org, danno@chromium.org
      LOG=N
      BUG=
      
      Review URL: https://codereview.chromium.org/103243005
      
      git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18918 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
      868ad01e
  16. 24 Jan, 2014 2 commits
  17. 23 Jan, 2014 1 commit
  18. 16 Jan, 2014 1 commit
  19. 15 Jan, 2014 1 commit
    • jarin@chromium.org's avatar
      This is a preview of a first step towards unification of the hydrogen · 19d83271
      jarin@chromium.org authored
      call machinery.  The change replaces CallNamed, CallKeyed,
      CallConstantFunction and CallKnownGlobal hydrogen instructions with two
      new instructions with a more lower level semantics:
      
      1. CallJSFunction for direct calls of JSFunction objects (no
         argument adaptation)
      
      2. CallWithDescriptor for calls of a given Code object according to
         the supplied calling convention.
      
      Details:
      
      CallJSFunction should be straightforward, the main difference from the
      existing InvokeFunction instruction is the absence of argument adaptor
      handling. (As a next step, we will replace InvokeFunction with an
      equivalent hydrogen code.)
      
      For CallWithDescriptor, the calling conventions are represented by a
      tweaked version of CallStubInterfaceDescriptor. In addition to the
      parameter-register mapping, we also define parameter-representation
      mapping there. The CallWithDescriptor instruction has variable number of
      parameters now - this required some simple tweaks in Lithium, which
      assumed fixed number of arguments in some places.
      
      The calling conventions used in the calls are initialized in the
      CallDescriptors class (code-stubs.h, <arch>/code-stubs-<arch>.cc), and
      they live in a new table in the Isolate class. I should say I am not
      quite sure about Representation::Integer32() representation for some of
      the params of ArgumentAdaptorCall - it is not clear to me wether the
      params could not end up on the stack and thus confuse the GC.
      
      The change also includes an earlier small change to argument adaptor
      (https://codereview.chromium.org/98463007) that avoids passing a naked
      pointer to the code entry as a parameter. I am sorry for packaging that
      with an already biggish change.
      
      Performance implications:
      
      Locally, I see a small regression (.2% or so). It is hard to say where
      exactly it comes from, but I do see inefficient call sequences to the
      adaptor trampoline. For example:
      
      ;;; <@78,#24> constant-t
      bf85aa515a     mov edi,0x5a51aa85          ;; debug: position 29
      ;;; <@72,#53> load-named-field
      8b7717         mov esi,[edi+0x17]          ;; debug: position 195
      ;;; <@80,#51> constant-s
      b902000000     mov ecx,0x2                 ;; debug: position 195
      ;;; <@81,#51> gap
      894df0         mov [ebp+0xf0],ecx
      ;;; <@82,#103> constant-i
      bb01000000     mov ebx,0x1
      ;;; <@84,#102> constant-i
      b902000000     mov ecx,0x2
      ;;; <@85,#102> gap
      89d8           mov eax,ebx
      89cb           mov ebx,ecx
      8b4df0         mov ecx,[ebp+0xf0]
      ;;; <@86,#58> call-with-descriptor
      e8ef57fcff     call ArgumentsAdaptorTrampoline  (0x2d80e6e0)    ;; code: BUILTIN
      
      Note the silly handling of ecx; the hydrogen for this code is:
      
      0 4 s27 Constant 1  range:1_1 <|@
      0 3 t30 Constant 0x5bc1aa85 <JS Function xyz (SharedFunctionInfo 0x5bc1a919)> type:object <|@
      0 1 t36 LoadNamedField t30.[in-object]@24 <|@
      0 1 t38 Constant 0x2300e6a1 <Code> <|@
      0 1 i102 Constant 2  range:2_2 <|@
      0 1 i103 Constant 1  range:1_1 <|@
      0 2 t41 CallWithDescriptor t38 t30 t36 s27 i103 i102 #2 changes[*] <|@
      
      BUG=
      R=verwaest@chromium.org, danno@chromium.org
      
      Review URL: https://codereview.chromium.org/104663004
      
      git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18626 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
      19d83271
  20. 20 Dec, 2013 1 commit
  21. 18 Dec, 2013 1 commit
  22. 02 Dec, 2013 1 commit
  23. 27 Nov, 2013 1 commit
  24. 21 Nov, 2013 2 commits
  25. 20 Nov, 2013 3 commits