1. 22 Aug, 2016 1 commit
  2. 11 Aug, 2016 1 commit
  3. 05 Aug, 2016 1 commit
  4. 02 Aug, 2016 2 commits
    • mstarzinger's avatar
      [turbofan] Remove IfExceptionHint from exception projections. · a4743bae
      mstarzinger authored
      This completely removes translation of exception handler predictions
      from the graph IR. We now rely on the runtime using deoptimization
      infomation via {FrameSummary} for predictions in optimized code.
      
      R=bmeurer@chromium.org
      
      Review-Url: https://codereview.chromium.org/2207533002
      Cr-Commit-Position: refs/heads/master@{#38250}
      a4743bae
    • bmeurer's avatar
      [turbofan] Introduce initial support for TypedArrays. · 66f2d3bd
      bmeurer authored
      This adds support for lowering keyed access to JSTypedArray objects to
      element loads and stores instead of IC calls. There's still a lot of
      room for improvement, but the improvements can be done incrementally
      later.
      
      We add a dedicated UnsafePointerAdd operator, which sits in the effect
      chain, and does the (GC invisible) computation of addresses that are
      potentially inside HeapObjects. Also there's now a dedicated Retain
      operator, which ensures that we retain a certain tagged value, which is
      necessary to ensure that we keep a JSArrayBuffer alive as long as we
      might still potentially access elements in its backing store.
      
      R=epertoso@chromium.org
      
      Review-Url: https://codereview.chromium.org/2203693002
      Cr-Commit-Position: refs/heads/master@{#38235}
      66f2d3bd
  5. 27 Jul, 2016 1 commit
  6. 22 Jul, 2016 1 commit
    • yangguo's avatar
      [debug] use catch prediction flag for promise rejections. · 6d0a4202
      yangguo authored
      This is in preparation to implementing exception prediction for async
      functions.  Each handler table entry can now predict "caught", "uncaught", or
      "promise". The latter indicates that the exception will lead to a promise
      rejection.
      
      To mark the relevant try-catch blocks, we add a new native syntax.
      try { } %catch (e) { } indicates a TryCatchStatement with the "promise"
      prediction.
      
      The previous implementation of using the function to tell the relevant
      try-catch apart from inner try-catch blocks will not work for async functions
      since these can have inner try-catch blocks inside the same function.
      
      BUG=v8:5167
      
      Review-Url: https://codereview.chromium.org/2161263003
      Cr-Commit-Position: refs/heads/master@{#37966}
      6d0a4202
  7. 21 Jul, 2016 1 commit
  8. 18 Jul, 2016 1 commit
    • bmeurer's avatar
      [turbofan] Add support for eager/soft deoptimization reasons. · db635d5b
      bmeurer authored
      So far TurboFan wasn't adding the deoptimization reasons for eager/soft
      deoptimization exits that can be used by either the DevTools profiler or
      the --trace-deopt flag. This adds basic support for deopt reasons on
      Deoptimize, DeoptimizeIf and DeoptimizeUnless nodes and threads through
      the reasons to the code generation.
      
      Also moves the DeoptReason to it's own file (to resolve include cycles)
      and drops unused reasons.
      
      R=jarin@chromium.org
      
      Review-Url: https://codereview.chromium.org/2161543002
      Cr-Commit-Position: refs/heads/master@{#37823}
      db635d5b
  9. 15 Jul, 2016 1 commit
    • bgeron's avatar
      [turbolizer] Show a label with a shorter parameter for some opcodes. · feb93dd6
      bgeron authored
      With this patch, every node in turbo-*.json has an opcode, a title, and
      a label. The label field is new; the opcode and title were already
      there. The title is for the mouseover text. The label is what will be
      displayed in the graph view, unless it's too long, in which case only
      the opcode will be displayed. (This is similar to the preexisting
      behaviour of putting titles in labels, except that the titles were
      rarely short enough to fit in a label.)
      
      With this patch, the labels generated are in practice the same as the
      titles we had before, except for LoadField and StoreField, which will be
      rendered as LoadField[[+432]] and StoreField[[+432]] (if 432 was the
      offset).
      
      This diff adds an overloadable method
      
          virtual void Operator1<T>::PrintParameter(ostream&, PrintVerbosity)
      
      for each type T to Operator1. Its default implementation just uses
      operator<<(ostream&, T const&) and adds square brackets around it, but
      it is overridden for FieldAccess to print "[+432]" in the example case.
      
      BUG=
      R=jarin,danno
      
      Review-Url: https://codereview.chromium.org/2093013002
      Cr-Commit-Position: refs/heads/master@{#37795}
      feb93dd6
  10. 14 Jul, 2016 1 commit
    • jarin's avatar
      [turbofan] Introduce explicit loop exits markers. · 7a61bbcf
      jarin authored
      This CL introduces explicit LoopExit control nodes at loop exits.
      We also attach explicit value renames (LoopExitMarker) and effect
      rename (LoopExitEffect) to each loop exit. This is in preparation
      to loop peeling, which will replace LoopExit, LoopExitMarker and
      LoopExitEffect with Merge, Phi and EffectPhi respectively.
      
      At the moment, we insert loop exit at every return, break,
      continue and locally caught throw. We do not yet handle
      uncaught throws (including error throws, such as ReferenceError).
      
      Review-Url: https://codereview.chromium.org/2140673007
      Cr-Commit-Position: refs/heads/master@{#37769}
      7a61bbcf
  11. 21 Jun, 2016 1 commit
    • bmeurer's avatar
      [turbofan] Address the useless overflow bit materialization. · 00889cc2
      bmeurer authored
      Add control dependencies to Projection and Int32Add/SubWithOverflow
      operators, to prevent the scheduler from moving the Projection nodes
      into the wrong place. This way the instruction selection can combine
      the Int32Add/SubWithOverflow operations with the DeoptimizeIf and/or
      DeoptimizeUnless nodes. This needs new operators CheckedInt32Add and
      CheckedInt32Sub so that we can delay the actual lowering until the
      effect/control linearizer.
      
      This also makes CheckIf operator obsolete, so we can drop it.
      
      R=jarin@chromium.org
      
      Review-Url: https://codereview.chromium.org/2082993002
      Cr-Commit-Position: refs/heads/master@{#37148}
      00889cc2
  12. 20 Jun, 2016 1 commit
  13. 06 Jun, 2016 1 commit
  14. 01 Jun, 2016 2 commits
  15. 24 May, 2016 1 commit
  16. 18 May, 2016 2 commits
  17. 06 May, 2016 1 commit
  18. 04 May, 2016 1 commit
    • gdeepti's avatar
      Add new relocation type WASM_MEMORY_SIZE_REFERENCE, use relocatable pointers... · 117a56b7
      gdeepti authored
      Add new relocation type WASM_MEMORY_SIZE_REFERENCE, use relocatable pointers to update wasm memory size references in generated code.
       - Add new RelocInfo mode WASM_MEMORY_SIZE_REFERENCE in the assembler and add relocation information to immediates in compare instructions.
       - Use relocatable constants for MemSize/BoundsCheck in the wasm compiler
      
      R=titzer@chromium.org, yangguo@chromium.org, bradnelson@chromium.org
      
      Review-Url: https://codereview.chromium.org/1921203002
      Cr-Commit-Position: refs/heads/master@{#36044}
      117a56b7
  19. 18 Apr, 2016 1 commit
  20. 15 Apr, 2016 1 commit
  21. 12 Apr, 2016 2 commits
  22. 11 Apr, 2016 1 commit
  23. 01 Apr, 2016 2 commits
  24. 24 Feb, 2016 1 commit
  25. 19 Feb, 2016 1 commit
    • bmeurer's avatar
      [turbofan] Remove the JSContextRelaxation reducer. · 8a7186b8
      bmeurer authored
      This reducer doesn't really add value, because:
      
       (a) it is only concerned with JSCallFunction and JSToNumber, but when
           we get to it, all JSCallFunction nodes will have been replaced by
           Call nodes, and in the not so far future, we will also have
           replaced almost all JSToNumber nodes with better code,
       (b) and the reducer tries to be smart and use one of the outermost
           contexts, but that might not be beneficial always; actually it
           might even create longer live ranges and lead to more spilling
           in some cases.
      
      But most importantly, the JSContextRelaxation currently blocks inlining
      based on SharedFunctionInfo, because it requires the inliner to check
      the native context, which in turn requires JSFunction knowledge. So I'm
      removing this reducer for now to unblock the more important inliner
      changes.
      
      R=jarin@chromium.org
      
      Review URL: https://codereview.chromium.org/1715633002
      
      Cr-Commit-Position: refs/heads/master@{#34139}
      8a7186b8
  26. 16 Feb, 2016 1 commit
  27. 05 Jan, 2016 1 commit
    • sigurds's avatar
      [turbofan] Deopt support for escape analysis · 3b473d7a
      sigurds authored
      Deopt support is added on two levels. On the IR level,
      a new ObjectState node is added, which represenents an
      object to be materialized. ObjectState nodes appear as
      inputs of FrameState and StateValues nodes. On the
      instruction select/code-generation level, the
      FrameStateDescriptor class handles the nesting
      introduced by ObjectState, and ensures that deopt code
      with CAPTURED_OBJECT/DUPLICATED_OBJECT entries are
      generated similarly to what crankshaft's escape
      analysis does.
      
      Two unittests test correctness of the IR level implementation.
      
      Correctness for instruction selection / code generation
      is tested by mjsunit tests.
      
      R=jarin@chromium.org,mstarzinger@chromium.org
      BUG=v8:4586
      LOG=n
      
      Review URL: https://codereview.chromium.org/1485183002
      
      Cr-Commit-Position: refs/heads/master@{#33115}
      3b473d7a
  28. 10 Dec, 2015 1 commit
    • jarin's avatar
      [turbofan] Make MachineType a pair of enums. · bb2a830d
      jarin authored
      MachineType is now a class with two enum fields:
      - MachineRepresentation
      - MachineSemantic
      
      Both enums are usable on their own, and this change switches some places from using MachineType to use just MachineRepresentation. Most notably:
      - register allocator now uses just the representation.
      - Phi and Select nodes only refer to representations.
      
      Review URL: https://codereview.chromium.org/1513543003
      
      Cr-Commit-Position: refs/heads/master@{#32738}
      bb2a830d
  29. 09 Dec, 2015 1 commit
    • bmeurer's avatar
      [turbofan] Add initial support for SOFT deopts. · 7a22fdff
      bmeurer authored
      This only introduces the basic support for both SOFT and EAGER deopts in
      TurboFan, but doesn't make use of SOFT deopts anywhere yet (there are
      some other issues blocking that). Basically every Deoptimize operator
      now has a DeoptimizeKind, which can be either kSoft or kEager.
      
      R=jarin@chromium.org
      
      Review URL: https://codereview.chromium.org/1511883002
      
      Cr-Commit-Position: refs/heads/master@{#32690}
      7a22fdff
  30. 03 Dec, 2015 1 commit
  31. 18 Nov, 2015 2 commits
  32. 30 Oct, 2015 1 commit
    • bmeurer's avatar
      [turbofan] Add support for storing to double fields. · 0df0e254
      bmeurer authored
      Adds new Guard[Type] common operator, which takes value and control
      inputs and records a guaranty that a certain value has a certain type
      in that control path.  This is some kind of ad-hoc SSI similar to what
      we have to do in Crankshaft in some places.
      
      Also introduces an ObjectIsNumber simplified operator, which checks
      whether a certain value is a number (either a Smi or a HeapNumber).
      
      This doesn't yet support transitioning stores to double fields, which
      require support for allocating mutable heap numbers.
      
      R=jarin@chromium.org
      BUG=v8:4470
      LOG=n
      
      Review URL: https://codereview.chromium.org/1420283009
      
      Cr-Commit-Position: refs/heads/master@{#31675}
      0df0e254
  33. 19 Oct, 2015 1 commit
    • jarin's avatar
      [turbofan] Introduce lazy bailout, masked as a call. · f9a9c6be
      jarin authored
      This introduces an explicit lazy bailout. It is wrapped in the call
      node, mostly because the lazy deoptimization processing is married
      to the call processing in the instruction selector and the code generator.
      
      It is still a terrible hack.
      
      R=bmeurer@chromium.org,mstarzinger@chromium.org
      BUG=chromium:543994,v8:4195
      LOG=n
      
      Review URL: https://codereview.chromium.org/1412443003
      
      Cr-Commit-Position: refs/heads/master@{#31353}
      f9a9c6be
  34. 14 Oct, 2015 1 commit
    • jarin's avatar
      [turbofan] Introduce node regions for protection from scheduling. · 59c616cc
      jarin authored
      This CL re-purposes ValueEffect and Finish as delimiters for regions
      that are scheduled atomically (renamed to BeginRegion, FinishRegion).
      
      The BeginRegion node takes and produces an effect. For the uses that do
      not care about the placement in the effect chain, it is ok to feed
      graph->start() as an effect input.
      
      The FinishRegion takes a value and an effect and produces a value and
      an effect. It is important that any value or effect produced inside the
      region is not used outside the region. The FinishRegion node is the only
      way to smuggle an effect and a value out.
      
      At the moment, this does not support control flow inside the region. Control flow would be hard.
      
      During scheduling we do some sanity check, but the checks are not exhaustive. Here is what we check:
      - the effect chain between begin and finish is linear (no splitting,
        single effect input and output).
      - any value produced is consumed by the FinishRegion node.
      - no control flow outputs.
      
      Review URL: https://codereview.chromium.org/1399423002
      
      Cr-Commit-Position: refs/heads/master@{#31265}
      59c616cc