1. 30 Nov, 2016 1 commit
  2. 14 Nov, 2016 1 commit
    • tebbi's avatar
      This CL enables precise source positions for all V8 compilers. It merges... · c3a6ca68
      tebbi authored
      This CL enables precise source positions for all V8 compilers. It merges compiler::SourcePosition and internal::SourcePosition to a single class used throughout the codebase. The new internal::SourcePosition instances store an id identifying an inlined function in addition to a script offset.
      SourcePosition::InliningId() refers to a the new table DeoptimizationInputData::InliningPositions(), which provides the following data for every inlining id:
       - The inlined SharedFunctionInfo as an offset into DeoptimizationInfo::LiteralArray
       - The SourcePosition of the inlining. Recursively, this yields the full inlining stack.
      Before the Code object is created, the same information can be found in CompilationInfo::inlined_functions().
      
      If SourcePosition::InliningId() is SourcePosition::kNotInlined, it refers to the outer (non-inlined) function.
      So every SourcePosition has full information about its inlining stack, as long as the corresponding Code object is known. The internal represenation of a source position is a positive 64bit integer.
      
      All compilers create now appropriate source positions for inlined functions. In the case of Turbofan, this required using AstGraphBuilderWithPositions for inlined functions too. So this class is now moved to a header file.
      
      At the moment, the additional information in source positions is only used in --trace-deopt and --code-comments. The profiler needs to be updated, at the moment it gets the correct script offsets from the deopt info, but the wrong script id from the reconstructed deopt stack, which can lead to wrong outputs. This should be resolved by making the profiler use the new inlining information for deopts.
      
      I activated the inlined deoptimization tests in test-cpu-profiler.cc for Turbofan, changing them to a case where the deopt stack and the inlining position agree. It is currently still broken for other cases.
      
      The following additional changes were necessary:
       - The source position table (internal::SourcePositionTableBuilder etc.) supports now 64bit source positions. Encoding source positions in a single 64bit int together with the difference encoding in the source position table results in very little overhead for the inlining id, since only 12% of the source positions in Octane have a changed inlining id.
       - The class HPositionInfo was effectively dead code and is now removed.
       - SourcePosition has new printing and information facilities, including computing a full inlining stack.
       - I had to rename compiler/source-position.{h,cc} to compiler/compiler-source-position-table.{h,cc} to avoid clashes with the new src/source-position.cc file.
       - I wrote the new wrapper PodArray for ByteArray. It is a template working with any POD-type. This is used in DeoptimizationInputData::InliningPositions().
       - I removed HInlinedFunctionInfo and HGraph::inlined_function_infos, because they were only used for the now obsolete Crankshaft inlining ids.
       - Crankshaft managed a list of inlined functions in Lithium: LChunk::inlined_functions. This is an analog structure to CompilationInfo::inlined_functions. So I removed LChunk::inlined_functions and made Crankshaft use CompilationInfo::inlined_functions instead, because this was necessary to register the offsets into the literal array in a uniform way. This is a safe change because LChunk::inlined_functions has no other uses and the functions in CompilationInfo::inlined_functions have a strictly longer lifespan, being created earlier (in Hydrogen already).
      
      BUG=v8:5432
      
      Review-Url: https://codereview.chromium.org/2451853002
      Cr-Commit-Position: refs/heads/master@{#40975}
      c3a6ca68
  3. 14 Jun, 2016 1 commit
  4. 13 Jun, 2016 2 commits
  5. 25 May, 2016 1 commit
    • bmeurer's avatar
      [turbofan] Remove the EmptyFrameState caching on JSGraph. · dd609a5d
      bmeurer authored
      Caching nodes with mutable inputs is a bad idea and already blew up
      twice now, so in order to avoid further breakage, let's kill the
      EmptyFrameState caching on JSGraph completely and only cache the empty
      state values there.
      
      We can remove the hacking from JSTypedLowering completely once we have
      the PlainPrimitiveToNumber in action.
      
      R=jarin@chromium.org
      
      Review-Url: https://codereview.chromium.org/2006423003
      Cr-Commit-Position: refs/heads/master@{#36511}
      dd609a5d
  6. 16 Feb, 2016 1 commit
  7. 09 Dec, 2015 1 commit
  8. 01 Dec, 2015 1 commit
  9. 27 Nov, 2015 3 commits
  10. 30 Oct, 2015 1 commit
    • mstarzinger's avatar
      Move compiler cctests into v8::internal::compiler namespace. · 16f13300
      mstarzinger authored
      This moves all cctest files for the compiler to live in the same
      namespace as the components they are testing. Hence we can avoid the
      forbidden using directives pulling in entire namespaces.
      
      From the Google C++ style guide: "You may not use a using-directive to
      make all names from a namespace available". This would be covered by
      presubmit linter checks if build/namespaces were not blacklisted.
      
      R=bmeurer@chromium.org
      
      Review URL: https://codereview.chromium.org/1424943004
      
      Cr-Commit-Position: refs/heads/master@{#31671}
      16f13300
  11. 28 Oct, 2015 1 commit
  12. 16 Oct, 2015 1 commit
    • mstarzinger's avatar
      [turbofan] Move SimplifiedOperatorBuilder into JSGraph. · b7990793
      mstarzinger authored
      This fixes the lifetime of nodes created by JSGlobalSpecialization that
      contain a simplified operator. In the case where this reducer runs as
      part of the inliner, the SimplifiedOperatorBuilder was instantiated with
      the wrong zone. This led to use-after-free of simplified operators.
      
      To avoid such situations in the future, we decided to move this operator
      builder into the JSGraph and make the situation uniform with all other
      operator builders.
      
      R=bmeurer@chromium.org
      BUG=chromium:543528
      LOG=n
      
      Review URL: https://codereview.chromium.org/1409993002
      
      Cr-Commit-Position: refs/heads/master@{#31334}
      b7990793
  13. 23 Sep, 2015 3 commits
  14. 31 Aug, 2015 1 commit
    • mstarzinger's avatar
      [turbofan] Remove usage of Unique<T> from graph. · 6e65e6db
      mstarzinger authored
      The usage of Unique<T> throughout the TurboFan IR does not have any
      advantage. There is no single point in time when they are initialized
      and most use-sites looked through to the underlying Handle<T> anyways.
      Also there already was a mixture of Handle<T> versus Unique<T> in the
      graph and this unifies the situation to use Handle<T> everywhere.
      
      R=bmeurer@chromium.org,titzer@chromium.org
      
      Review URL: https://codereview.chromium.org/1314473007
      
      Cr-Commit-Position: refs/heads/master@{#30458}
      6e65e6db
  15. 06 Jul, 2015 1 commit
  16. 19 Jun, 2015 1 commit
  17. 08 Jun, 2015 1 commit
  18. 05 Jun, 2015 1 commit
    • mstarzinger's avatar
      [turbofan] Allow ReplaceWithValue to kill control. · 8f4d9a0a
      mstarzinger authored
      This allows any AdvancedReducer to remove exception projections from
      graphs. This is the common case when JS-operators are being replaced
      with pure values. The old NodeProperties::ReplaceWithValue is being
      deprecated in favor of AdvancedReducer::ReplaceWithValue.
      
      R=titzer@chromium.org
      TEST=unittests/AdvancedReducerTest
      
      Review URL: https://codereview.chromium.org/1168693002
      
      Cr-Commit-Position: refs/heads/master@{#28810}
      8f4d9a0a
  19. 26 May, 2015 1 commit
  20. 30 Apr, 2015 1 commit
  21. 24 Apr, 2015 1 commit
  22. 19 Feb, 2015 1 commit
  23. 11 Feb, 2015 1 commit
    • svenpanne's avatar
      Removed most of the bogus CompilationInfo constructor calls. · d1b5aa07
      svenpanne authored
      A CompilationInfo constructed from just an Isolate* and a Zone* is in
      weird an inconsistent state (calling e.g. flags() on it will crash),
      so we need to avoid them. This CL removes almost all of them, the
      remaining 2 call sites in (for testing only) will be handled in a
      separate CL. Things which have been changed:
      
        * Linkage is basically a decorator for CallDescriptor now.
      
        * ChangeLowering doesn't need Linkage at all.
      
        * JSGenericLowering doesn't need a full CompilationInfo*, just a
          single flag.
      
        * JSContextSpecializer doesn't need the full CompilationInfo, just a
          Context.
      
        * Removed unused CompilationInfo from SimplifiedLoweringTester.
      
      This nicely decouples things already a bit more, but there's still
      work to do...
      
      Review URL: https://codereview.chromium.org/899803003
      
      Cr-Commit-Position: refs/heads/master@{#26580}
      d1b5aa07
  24. 29 Jan, 2015 1 commit
  25. 23 Jan, 2015 1 commit
    • danno's avatar
      Remove the dependency of Zone on Isolate · c7b09aac
      danno authored
      Along the way:
      - Thread isolate parameter explicitly through code that used to
        rely on getting it from the zone.
      - Canonicalize the parameter position of isolate and zone for
        affected code
      - Change Hydrogen New<> instruction templates to automatically
        pass isolate
      
      R=mstarzinger@chromium.org
      LOG=N
      
      Review URL: https://codereview.chromium.org/868883002
      
      Cr-Commit-Position: refs/heads/master@{#26252}
      c7b09aac
  26. 02 Dec, 2014 1 commit
  27. 10 Nov, 2014 1 commit
  28. 15 Oct, 2014 1 commit
    • rossberg@chromium.org's avatar
      Better typing and type verification · 0e16150d
      rossberg@chromium.org authored
      - Extend verifier to check types of JS and Simplified nodes.
      - Untyped nodes now contain NULL as types, enforcing hard failure.
      - Typer immediately installs itself as a decorator; remove explicit decorator installation.
      - Decorator eagerly types all nodes that have typed inputs
        (subsumes typing of constant cache, removing its typing
        side-channel and various spurious dependencies on the typer).
      - Cut down typer interface to prevent inconsistently typed graphs.
      - Remove verification from start, since it caused too much trouble
        with semi-wellformed nodes.
      - Fix a couple of bugs on the way that got uncovered.
      
      To do: verifying machine operators. Also, various conditions in the
      verifier are currently commented out, because they don't yet hold.
      
      BUG=
      R=jarin@chromium.org,titzer@chromium.org
      
      Review URL: https://codereview.chromium.org/658543002
      
      git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@24626 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
      0e16150d
  29. 30 Sep, 2014 1 commit
  30. 12 Sep, 2014 1 commit
  31. 10 Sep, 2014 1 commit
  32. 09 Sep, 2014 1 commit
  33. 08 Sep, 2014 1 commit
  34. 04 Sep, 2014 2 commits