Files
sdk/runtime/vm
Martin Kustermann dec7b4f5b6 [vm/compiler] Avoid pruning deopt environments during SSA construction
Generally speaking, the optimizing compiler should be able to use
(deopt-id, deopt-environ) of any IR instruction and use it as an eager
deopt target (e.g. optimizing compiler might insert TestCidsInstr
with eager (deopt-id, deopt-environ) from AssertAssignable).

Currently we prune the environment eagerly during SSA construction for
some instructions This pruning breaks the above mechanism, since the
deopt-environ isn't usable as eager deopt target. (It is effectively
changing the environment on the IR instruction to be a lazy-deopt
environment).

This CL makes the [Environment] represent both the eager deopt target as
well as the lazy deopt target. It distinguishes the two by remembering
how many slots the eager deopt target needs to be pruned to come to the
lazy deopt target. The SSA construction will populate this information.

Effectively we move the deopt env pruning from SSA construction to the
place when we need it (e.g. inlining, emitting after-call metadata).

Issue https://github.com/dart-lang/sdk/issues/45213

TEST=Refactoring of existing code.

Change-Id: I6c2a117b33f35764e556372484e4beaa294b708d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/192141
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2021-03-23 12:22:16 +00:00
..
2019-08-08 00:47:55 +00:00
2019-10-07 18:13:06 +00:00
2020-06-26 09:39:15 +00:00
2019-10-27 18:18:29 +00:00
2020-12-10 12:15:17 +00:00
2021-03-10 10:02:58 +00:00
2020-11-16 23:52:40 +00:00
2021-03-22 15:08:04 +00:00
2020-05-04 21:15:27 +00:00
2021-03-10 09:50:18 +00:00
2021-03-19 15:34:42 +00:00
2020-10-28 17:42:35 +00:00
2020-10-28 17:42:35 +00:00
2020-05-04 21:15:27 +00:00
2020-08-06 19:55:12 +00:00
2020-08-06 19:55:12 +00:00