1. 26 Apr, 2021 1 commit
    • Jakob Gruber's avatar
      [compiler] Remove --turbo-direct-heap-access · 4f2f14f8
      Jakob Gruber authored
      On a per-job basis, --turbo-direct-heap-access should be equal to
      whether concurrent inlining is enabled. We simplify involved logic by
      removing the flag, and replacing all access to
      
      - FLAG_turbo_direct_heap_access, and
      - FLAG_concurrent_inlining
      
      inside compiler/ with
      OptimizedCompilationInfo::is_concurrent_inlining() (or derived values).
      
      Bug: v8:7790
      Change-Id: I64818e0e1004dded08c784ef1c4bdfd2af990a59
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2843345
      Commit-Queue: Jakob Gruber <jgruber@chromium.org>
      Auto-Submit: Jakob Gruber <jgruber@chromium.org>
      Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#74166}
      4f2f14f8
  2. 26 Jan, 2021 1 commit
    • Paolo Severini's avatar
      [test][turbofan] Add %ObserveNode intrinsic for node-specific tests · 4e9f6513
      Paolo Severini authored
      (Initially copied from nicohartmann@ CL
      https://chromium-review.googlesource.com/c/v8/v8/+/2135631)
      
      This CL adds a new intrinsic %ObserveNode(expr) which has noop semantics
      but triggers the new NodeObserver set on the OptimizedCompilationInfo
      when the node generated for expr is created or changed in any phase
      (until EffectControlLinearization).
      
      This provides the infrastructure to write reasonable unit tests that
      check for the construction of or lowering to specific nodes (e.g.
      depending on feedback).
      
      When %ObserveNode(expr) is used an object of class ObserveNodeManager is
      registered to every Reducer/GraphReducer and is notified by the Reducer
      with all node changes. The same logic is added to classes
      SimplifiedLowering/RepresentationSelector, which do not inherit from
      class Reducer.
      
      Observed Node modifications currently are:
       * The Node Operator
       * The Node type
       * Node replacements
      
      A first use case (cctest/test-sloppy-equality.cc) is included in this CL.
      
      Change-Id: Idc5a5e38af8b1d9a2ec5021bf821c4e4e1406220
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2555219
      Commit-Queue: Paolo Severini <paolosev@microsoft.com>
      Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
      Reviewed-by: 's avatarNico Hartmann <nicohartmann@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#72331}
      4e9f6513
  3. 11 Sep, 2020 1 commit
  4. 28 Jul, 2020 1 commit
  5. 11 May, 2020 1 commit
  6. 02 Dec, 2019 1 commit
    • Mike Stanton's avatar
      [TurboFan] Loop variable analysis requires more sensitivity · b8b60750
      Mike Stanton authored
      Loop variable analysis doesn't recognize that the initial type of the
      loop variable phi combined with the increment type may produce a NaN
      result through the addition of two infinities of differing sign.
      
      This leads to unreachable code and a SIGINT crash.
      
      The fix is to consider this case before typing the loop variable phi,
      falling back to more conservative typing if discovered.
      
      R=neis@chromium.org
      
      Bug: chromium:1028863
      Change-Id: Ic4b5189c4c50c5bbe29e46050de630fd0673de9f
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1946352
      Commit-Queue: Michael Stanton <mvstanton@chromium.org>
      Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#65291}
      b8b60750
  7. 17 Jul, 2019 1 commit
  8. 17 Sep, 2018 1 commit
  9. 14 Jun, 2018 2 commits
    • Clemens Hammacher's avatar
      Reland "Introduce StdoutStream which prints to Android log or stdout" · 8e2e1257
      Clemens Hammacher authored
      This is a reland of 0909dbe3.
      Added missing V8_EXPORT_PRIVATE to AndroidLogStream.
      
      TBR=mstarzinger@chromium.org
      
      Original change's description:
      > Introduce StdoutStream which prints to Android log or stdout
      >
      > The often used construct {OFStream(stdout)} does not work on Android.
      > This CL introduces an {StdoutStream} which behaves exactly like
      > {OFStream(stdout)} on non-android platforms, and redirects to the
      > Android log on appropriate systems and configurations.
      >
      > R=mstarzinger@chromium.org
      >
      > Bug: v8:7820
      > Change-Id: Ia682fdf6d064e37c605c19b032f5a10b96ac825b
      > Reviewed-on: https://chromium-review.googlesource.com/1088911
      > Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
      > Reviewed-by: Jakob Gruber <jgruber@chromium.org>
      > Reviewed-by: Michael Starzinger <mstarzinger@chromium.org>
      > Commit-Queue: Clemens Hammacher <clemensh@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#53692}
      
      Bug: v8:7820
      Change-Id: I8164bad78a401dbe4246c9ffcacd050fe511ed58
      Reviewed-on: https://chromium-review.googlesource.com/1100636Reviewed-by: 's avatarClemens Hammacher <clemensh@chromium.org>
      Commit-Queue: Clemens Hammacher <clemensh@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#53733}
      8e2e1257
    • Michael Achenbach's avatar
      Revert "Introduce StdoutStream which prints to Android log or stdout" · d2e1620c
      Michael Achenbach authored
      This reverts commit 0909dbe3.
      
      Reason for revert: Blocks roll:
      https://chromium-review.googlesource.com/c/chromium/src/+/1099143
      
      Original change's description:
      > Introduce StdoutStream which prints to Android log or stdout
      > 
      > The often used construct {OFStream(stdout)} does not work on Android.
      > This CL introduces an {StdoutStream} which behaves exactly like
      > {OFStream(stdout)} on non-android platforms, and redirects to the
      > Android log on appropriate systems and configurations.
      > 
      > R=​mstarzinger@chromium.org
      > 
      > Bug: v8:7820
      > Change-Id: Ia682fdf6d064e37c605c19b032f5a10b96ac825b
      > Reviewed-on: https://chromium-review.googlesource.com/1088911
      > Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
      > Reviewed-by: Jakob Gruber <jgruber@chromium.org>
      > Reviewed-by: Michael Starzinger <mstarzinger@chromium.org>
      > Commit-Queue: Clemens Hammacher <clemensh@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#53692}
      
      TBR=mstarzinger@chromium.org,jarin@chromium.org,jgruber@chromium.org,clemensh@chromium.org,bmeurer@chromium.org
      
      Change-Id: Iadadd9a0df10dca0fad647138a83db50148e864d
      No-Presubmit: true
      No-Tree-Checks: true
      No-Try: true
      Bug: v8:7820
      Reviewed-on: https://chromium-review.googlesource.com/1100635Reviewed-by: 's avatarMichael Achenbach <machenbach@chromium.org>
      Commit-Queue: Michael Achenbach <machenbach@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#53725}
      d2e1620c
  10. 13 Jun, 2018 1 commit
  11. 25 Sep, 2017 1 commit
  12. 11 Jul, 2017 1 commit
    • Alexandre Talon's avatar
      [Turbofan] Enable reducers to report their name to make reducer tracing clearer · 7a75da34
      Alexandre Talon authored
      Each reducer now has a virtual reducer_name function, returning its name
      (the name of the class containing this reducer). This gets displayed when
      using the --trace_turbo_reduction flag. Also when using this flags more
      messages are displayed.
      
      Actually when a node is replaced in-place (which is called an update
      of the node), other reducers can still update it right after the
      in-place replacement. When a node is really replaced (not in-place),
      then we stop trying to apply reducers to it before we propagate the
      reduction through the relevant nodes.
      
      Before a message got printed only for the last reduction it went
      through. So in case a node was reduced in-place several times
      in a row, only the last update was printed, or none at all if after
      being reduced in-place it got reduced by being replaced by another
      node: only the non-in-place replacement was showed. 
      
      Now each time an in-place reduction is applied to a node, a message
      gets printed.
      
      Bug: 
      Change-Id: Id0f816fecd44c01d0253966c6decc4861be0c2fa
      Reviewed-on: https://chromium-review.googlesource.com/563365Reviewed-by: 's avatarMichael Starzinger <mstarzinger@chromium.org>
      Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
      Commit-Queue: Alexandre Talon <alexandret@google.com>
      Cr-Commit-Position: refs/heads/master@{#46552}
      7a75da34
  13. 07 Jul, 2017 1 commit
  14. 19 May, 2017 1 commit
  15. 20 Apr, 2017 1 commit
    • Eric Holk's avatar
      Restrict range for int64_t to immediate conversions · ec772a4f
      Eric Holk authored
      The included test case illustrates the problem. It subtracts (16 << 27)
      from another number. The Machine Operator Reducer would replace the
      shift computation with 0x0000000080000000, and then change the subtract
      to an add of -(0x0000000080000000), which is 0xffffffff80000000.
      The instruction selector would determine that this value could be an
      immediate, because it fits in 32 bits, so it would select the lea
      instruction. Finally, the code generator would detect that the
      immediate was less than 0, flip the sign and replace the add with a
      subtract of 0x80000000. Because the x64 subtract instruction's
      immediate field is 32 bits, the processor would interpret this as
      0xffffffff80000000 instead of an unsigned value.
      
      This change fixes the issue by making the CanBeImmediate check
      explicitly compare against INT_MIN and INT_MAX. We disallow INT_MIN
      as an immediate precisely because we cannot tell 0x0000000080000000
      from 0xffffffff80000000 when truncated to 32 bits.
      
      Bug: chromium:711203
      Change-Id: Ie371b8ea290684a6bb723bae9c693a866f961850
      Reviewed-on: https://chromium-review.googlesource.com/482448
      Commit-Queue: Eric Holk <eholk@chromium.org>
      Reviewed-by: 's avatarMircea Trofin <mtrofin@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#44758}
      ec772a4f
  16. 10 Jan, 2017 1 commit
    • leszeks's avatar
      [turbofan] Allow indexed access to node inputs/input_edges · 6873f14b
      leszeks authored
      Node::InputCount() and ::InputAt() have to check for inline/out-of-line
      inputs every time they are called. The compiler doesn't seem to be very
      good at caching the result of this check, meaning that it (and all its
      jumps) would happen for every node access.
      
      Previously we would get around this sometimes, by using Node::inputs(),
      which returned a Node::Inputs iterable over node inputs. However,
      sometimes node access is more convenient using an index, or we also
      want to access the count. This patch adds an index accessor and 'count'
      method to Node::Inputs, and replaces several uses of InputCount and
      InputAt with this accessor.
      
      Review-Url: https://codereview.chromium.org/2617123002
      Cr-Commit-Position: refs/heads/master@{#42179}
      6873f14b
  17. 03 Jan, 2017 2 commits
  18. 12 Jul, 2016 1 commit
  19. 18 Apr, 2016 1 commit
    • jarin's avatar
      [turbofan] Effect linearization after representation inference. · b9e287c6
      jarin authored
      This introduces a compiler pass that schedules the graph and re-wires effect chain according to the schedule. It also connects allocating representation changes to the effect chain, and removes the BeginRegion and EndRegion nodes - they should not be needed anymore because all effectful nodes should be already wired-in.
      
      This is an intermediate CL - the next step is to move lowering of the Change*ToTaggedEffect nodes to StateEffectIntroduction so that we do not have to introduce the effectful versions of nodes.
      
      Review URL: https://codereview.chromium.org/1849603002
      
      Cr-Commit-Position: refs/heads/master@{#35565}
      b9e287c6
  20. 19 Feb, 2016 2 commits
  21. 09 Nov, 2015 1 commit
  22. 28 Sep, 2015 2 commits
  23. 23 Jun, 2015 3 commits
  24. 17 Jun, 2015 1 commit
  25. 12 Jun, 2015 1 commit
    • bmeurer's avatar
      [turbofan] Use appropriate type for NodeId. · c487aba7
      bmeurer authored
      Up until now we used int32_t for NodeId, but that was not ideal because
      negative values are invalid for NodeId and we use it as an array index
      for example in the NodeMarker class, where C++ compilers on x64 have to
      generate code that does proper sign extension for the indices, which is
      completely unnecessary.
      
      R=svenpanne@chromium.org
      
      Review URL: https://codereview.chromium.org/1178403004
      
      Cr-Commit-Position: refs/heads/master@{#28997}
      c487aba7
  26. 11 Jun, 2015 1 commit
  27. 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
  28. 12 May, 2015 1 commit
  29. 06 May, 2015 1 commit
    • bmeurer's avatar
      [turbofan] Add support for advanced reducers. · 7b33409b
      bmeurer authored
      An AdvancedReducer is basically a regular Reducer with an editor
      that can perform graph editing operations beyond changing or
      replacing the node that is currently being reduced. The GraphReducer
      is the default implementation of the AdvancedReducer::Editor interface.
      
      The ControlReducerImpl is now just an AdvancedReducer, which
      temporarily requires a Finish method in the reducer to implement
      the dead node trimming until we move that to the GraphReducer
      (which in turn requires that all loops are connected to End).
      
      Review URL: https://codereview.chromium.org/1122423003
      
      Cr-Commit-Position: refs/heads/master@{#28251}
      7b33409b
  30. 26 Jan, 2015 1 commit
  31. 16 Jan, 2015 1 commit
  32. 17 Dec, 2014 1 commit
  33. 28 Nov, 2014 1 commit
  34. 27 Nov, 2014 1 commit