Files
sdk/runtime/vm
Vyacheslav Egorov d5bbf25197 [vm/compiler] Eliminate Redefinitions based on the reaching type.
Given a graph like this:

  v1 <- ... T{Foo?}
  v2 <- v1.foo()
  v3 <- v1.get:field()

We would constrain v1 after invocation - because call guarantees that v1 is
not null.

  v1 <- ... T{Foo?}
  v2 <- v1.foo()
  v4 <- Redefinition(v1) T{Foo}
  v3 <- v4.get:field()

Which past inlining can turn into something like

  v1 <- ... T{Foo?}
  CheckClass(v1, Foo)  // Inserted by inlining
  ...
  v4 <- Redefinition(v1 T{Foo}) T{Foo}
  v3 <- v4.field

At this point v4 is redundant - because CheckClass above gives the same
guarantee and is movable. Which means we can lift LICM inhibition for v4.field.

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-bare-linux-release-simarm64-try, vm-kernel-precomp-bare-linux-release-x64-try, vm-kernel-precomp-linux-debug-x64-try
Change-Id: I4b392ede071c41410a27288cae9bbc813a48cc99
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/99144
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Auto-Submit: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-04-11 18:51:39 +00:00
..
2019-04-10 13:15:16 +00:00
2019-04-02 18:00:49 +00:00
2018-11-01 16:37:22 +00:00
2018-11-01 16:37:22 +00:00
2018-11-08 02:02:39 +00:00
2018-11-01 16:37:22 +00:00
2018-08-20 22:47:31 +00:00
2019-01-25 16:45:13 +00:00
2019-03-15 12:38:54 +00:00
2018-12-10 23:15:27 +00:00
2018-12-10 23:15:27 +00:00
2019-04-02 18:00:49 +00:00
2018-11-08 02:02:39 +00:00
2019-01-26 06:24:18 +00:00
2018-12-04 20:18:23 +00:00
2019-04-10 13:15:16 +00:00