Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(222)

Issue 1323473003: [turbofan] Splintering: special case deoptimizing blocks (Closed)

Created:
5 years, 3 months ago by Mircea Trofin
Modified:
5 years, 3 months ago
Reviewers:
Benedikt Meurer, Jarin
CC:
v8-dev, Jim Stichnoth, jvoung (off chromium)
Base URL:
https://chromium.googlesource.com/v8/v8.git@master
Target Ref:
refs/pending/heads/master
Project:
v8
Visibility:
Public.

Description

[turbofan] Splintering: special case deoptimizing blocks. This avoids a whole range traversal each time we encounter a deferred block (or a succession of them). The traversal (in the removed IsIntervalAlreadyExcluded) is unnecessary - an interval with a hole where deferred blocks are shouldn't be listed in the in/out sets of those blocks in the first place. It turns out the root cause (that appeared like we had to special case ranges with holes, as the comment described) was deferred blocks with a deoptimization call. That would place the live range in the in_set of the block, but then splitting would fail because the start and split position would be the same - this is because everywhere else, the deferred block would have at least a second instruction, other than the use - like a jump - ahead of which we'd perform the lower part of the splintering. In the usual case, this choice of a position avoids moves on the hot path (because any moves will be before the jump, but still in the deferred block). With deoptimization calls, that's not the case, there is just one instruction, the deoptimization call. So we perform the second cut of the splintering right after the block. Since there is no control flow from the deoptimization block to any functional block - the control flow goes to the exit block - the range connector won't insert moves on the hot path - although we may want to see what happens for the exit block, and maybe teach the range connector to ignore control flow appearing to come from blocks with deoptimization calls. BUG=chromium:524880 LOG=n Committed: https://crrev.com/bed054c4ff61c63f8aed61608c50c77ce80d0788 Cr-Commit-Position: refs/heads/master@{#30447}

Patch Set 1 #

Unified diffs Side-by-side diffs Delta from patch set Stats (+6 lines, -17 lines) Patch
M src/compiler/live-range-separator.cc View 3 chunks +6 lines, -17 lines 0 comments Download

Messages

Total messages: 7 (3 generated)
Benedikt Meurer
LGTM
5 years, 3 months ago (2015-08-28 08:11:04 UTC) #3
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1323473003/1 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1323473003/1
5 years, 3 months ago (2015-08-28 15:05:50 UTC) #5
commit-bot: I haz the power
Committed patchset #1 (id:1)
5 years, 3 months ago (2015-08-28 15:07:41 UTC) #6
commit-bot: I haz the power
5 years, 3 months ago (2015-08-28 15:07:54 UTC) #7
Message was sent while issue was closed.
Patchset 1 (id:??) landed as
https://crrev.com/bed054c4ff61c63f8aed61608c50c77ce80d0788
Cr-Commit-Position: refs/heads/master@{#30447}

Powered by Google App Engine
This is Rietveld 408576698