Skip to content

Commit 569290d

Browse files
sjindel-googlecommit-bot@chromium.org
authored andcommitted
Revert "[vm] Use multiple entrypoints to remove unnecessary checks on statically-typed closure calls."
This reverts commit 19126e8. Reason for revert: Breaks several bots. Original change's description: > [vm] Use multiple entrypoints to remove unnecessary checks on statically-typed closure calls. > > Test Plan: > > Behavioral correctness should be ensured by existing tests. Tests in vm/dart/entrypoints > ensure that the unchecked entrypoint is used in cases where the optimization should trigger. > > Bug: #31798 > > Change-Id: Id25ecba86e20c22f0678c12986ad620db312ddaa > Cq-Include-Trybots: luci.dart.try:vm-kernel-win-release-x64-try,vm-kernel-optcounter-threshold-linux-release-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-release-simarm-try,vm-kernel-precomp-linux-release-simarm64-try,vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-win-release-x64-try > Reviewed-on: https://dart-review.googlesource.com/69743 > Commit-Queue: Samir Jindel <[email protected]> > Reviewed-by: Vyacheslav Egorov <[email protected]> [email protected],[email protected] Change-Id: Ia33e9d141827d3c990c65d839333443c224dc85d No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: #31798 Cq-Include-Trybots: luci.dart.try:vm-kernel-win-release-x64-try, vm-kernel-optcounter-threshold-linux-release-x64-try, vm-kernel-precomp-linux-debug-x64-try, vm-kernel-precomp-linux-release-simarm-try, vm-kernel-precomp-linux-release-simarm64-try, vm-kernel-precomp-linux-release-x64-try, vm-kernel-precomp-win-release-x64-try Reviewed-on: https://dart-review.googlesource.com/70920 Reviewed-by: Samir Jindel <[email protected]> Commit-Queue: Samir Jindel <[email protected]>
1 parent ceace12 commit 569290d

35 files changed

+117
-243
lines changed

pkg/vm/lib/transformations/call_site_annotator.dart

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,9 @@ class AnnotateWithStaticTypes extends RecursiveVisitor<Null> {
6565
}
6666

6767
// TODO(vegorov) handle setters as well.
68-
// TODO(34162): We don't need to save the type here, just whether or not it's
69-
// a statically-checked call.
7068
static bool shouldAnnotate(MethodInvocation node) =>
71-
(node.interfaceTarget != null &&
72-
hasGenericCovariantParameters(node.interfaceTarget)) ||
73-
node.name.name == "call";
69+
node.interfaceTarget != null &&
70+
hasGenericCovariantParameters(node.interfaceTarget);
7471

7572
/// Return [true] if the given list of [VariableDeclaration] contains
7673
/// any annotated with generic-covariant-impl.

pkg/vm/testcases/bytecode/asserts.dart.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ ConstantPool {
6565
[7] = Null
6666
}
6767
]static method test2(() → core::bool condition, () → core::String message) → void {
68-
assert([@vm.call-site-attributes.metadata=receiverType:() → dart.core::bool] condition.call(), [@vm.call-site-attributes.metadata=receiverType:() → dart.core::String] message.call());
68+
assert(condition.call(), message.call());
6969
}
7070
[@vm.bytecode=
7171
Bytecode {

pkg/vm/testcases/bytecode/bootstrapping.dart.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ ConstantPool {
365365
}
366366
] static get platformScript() → dynamic {
367367
if(self::VMLibraryHooks::_cachedScript.{core::Object::==}(null) && !self::VMLibraryHooks::_computeScriptUri.{core::Object::==}(null)) {
368-
self::VMLibraryHooks::_cachedScript = [@vm.call-site-attributes.metadata=receiverType:dynamic] self::VMLibraryHooks::_computeScriptUri.call();
368+
self::VMLibraryHooks::_cachedScript = self::VMLibraryHooks::_computeScriptUri.call();
369369
}
370370
return self::VMLibraryHooks::_cachedScript;
371371
}

pkg/vm/testcases/bytecode/closures.dart.expect

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -474,13 +474,13 @@ Closure CP#0 {
474474
core::print(<core::Type>[self::A::T1, self::A::T2, self::A::foo::T3, self::A::foo::T4, T5, T6, T7, T8]);
475475
self::callWithArgs<self::A::T1, self::A::T2, self::A::foo::T3, self::A::foo::T4, T5, T6, T7, T8>();
476476
};
477-
[@vm.call-site-attributes.metadata=receiverType:() → dart.core::Null] nested3.call();
477+
nested3.call();
478478
}
479-
[@vm.call-site-attributes.metadata=receiverType:<T7 extends dart.core::Object = dynamic, T8 extends dart.core::Object = dynamic>() → void] nested2.call<self::C7, self::C8>();
480-
[@vm.call-site-attributes.metadata=receiverType:<T7 extends dart.core::Object = dynamic, T8 extends dart.core::Object = dynamic>() → void] nested2.call<core::List<self::C7>, core::List<self::C8>>();
479+
nested2.call<self::C7, self::C8>();
480+
nested2.call<core::List<self::C7>, core::List<self::C8>>();
481481
}
482-
[@vm.call-site-attributes.metadata=receiverType:<T5 extends dart.core::Object = dynamic, T6 extends dart.core::Object = dynamic>() → void] nested1.call<self::C5, self::C6>();
483-
[@vm.call-site-attributes.metadata=receiverType:<T5 extends dart.core::Object = dynamic, T6 extends dart.core::Object = dynamic>() → void] nested1.call<core::List<self::C5>, core::List<self::C6>>();
482+
nested1.call<self::C5, self::C6>();
483+
nested1.call<core::List<self::C5>, core::List<self::C6>>();
484484
}
485485
}
486486
class B extends core::Object {
@@ -820,12 +820,12 @@ Closure CP#43 {
820820
z = x.{core::num::+}(2);
821821
w = this.{self::B::foo}.{core::num::+}(y);
822822
}
823-
[@vm.call-site-attributes.metadata=receiverType:() → void] closure2.call();
823+
closure2.call();
824824
core::print(w);
825825
}
826826
};
827-
[@vm.call-site-attributes.metadata=receiverType:(dart.core::int) → dart.core::Null] closure1.call(10);
828-
[@vm.call-site-attributes.metadata=receiverType:(dart.core::int) → dart.core::Null] closure1.call(11);
827+
closure1.call(10);
828+
closure1.call(11);
829829
core::print(y);
830830
core::print(z);
831831
}
@@ -836,7 +836,7 @@ Closure CP#43 {
836836
() → core::Null closure3 = () → core::Null {
837837
this.{self::B::foo} = x;
838838
};
839-
[@vm.call-site-attributes.metadata=receiverType:() → dart.core::Null] closure3.call();
839+
closure3.call();
840840
}
841841
}
842842
}
@@ -1178,7 +1178,7 @@ Closure CP#9 {
11781178
() → core::Null inc = () → core::Null {
11791179
i = i.{core::num::+}(1);
11801180
};
1181-
[@vm.call-site-attributes.metadata=receiverType:() → dart.core::Null] inc.call();
1181+
inc.call();
11821182
core::print(i);
11831183
}
11841184
}
@@ -1377,7 +1377,7 @@ Closure CP#1 {
13771377
(core::int) → core::Null inc = (core::int y) → core::Null {
13781378
x = x.{core::num::+}(y);
13791379
};
1380-
[@vm.call-site-attributes.metadata=receiverType:(dart.core::int) → dart.core::Null] inc.call(3);
1380+
inc.call(3);
13811381
return x;
13821382
}
13831383
[@vm.bytecode=

pkg/vm/testcases/bytecode/super_calls.dart.expect

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ ConstantPool {
205205
[6] = Null
206206
}
207207
] method testSuperCallViaGetter() → dynamic
208-
return [@vm.call-site-attributes.metadata=receiverType:dynamic] super.{self::Base1::bar}.call<core::int>("param");
208+
return super.{self::Base1::bar}.call<core::int>("param");
209209
[@vm.bytecode=
210210
Bytecode {
211211
Entry 1
@@ -467,7 +467,7 @@ ConstantPool {
467467
[14] = Null
468468
}
469469
] method testSuperCallViaGetter() → dynamic
470-
return [@vm.call-site-attributes.metadata=receiverType:dynamic] super.{self::Base2::bar}.call<core::int>("param");
470+
return super.{self::Base2::bar}.call<core::int>("param");
471471
[@vm.bytecode=
472472
Bytecode {
473473
Entry 1

pkg/vm/testcases/bytecode/try_blocks.dart.expect

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -545,7 +545,7 @@ L1:
545545
y = 3;
546546
}
547547
}
548-
[@vm.call-site-attributes.metadata=receiverType:() → void] foo.call();
548+
foo.call();
549549
core::print(y);
550550
}
551551
on dynamic catch(final dynamic e, final core::StackTrace st) {
@@ -1001,7 +1001,7 @@ Closure CP#12 {
10011001
core::print(x);
10021002
core::print(y);
10031003
}
1004-
[@vm.call-site-attributes.metadata=receiverType:() → void] foo.call();
1004+
foo.call();
10051005
continue #L4;
10061006
}
10071007
finally {
@@ -1330,7 +1330,7 @@ L8:
13301330
}
13311331
finally {
13321332
core::print(x);
1333-
[@vm.call-site-attributes.metadata=receiverType:dynamic] y.call();
1333+
y.call();
13341334
}
13351335
}
13361336
[@vm.bytecode=

pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ static method foo2([@vm.inferred-type.metadata=dart.async::_Future?] asy::Future
3535
self::foo2_a4(a4);
3636
}
3737
static method getDynamic() → dynamic
38-
return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function] self::unknown.call();
38+
return self::unknown.call();
3939
static method main(core::List<core::String> args) → dynamic {
4040
self::foo1([@vm.inferred-type.metadata=dart.async::_Future] asy::Future::value<self::B>(new self::B::•()), new self::B::•(), [@vm.inferred-type.metadata=dart.async::_Future] asy::Future::value<self::B>(new self::B::•()), new self::B::•());
4141
self::foo2(self::getDynamic() as{TypeError} asy::Future<self::A>, self::getDynamic() as{TypeError} self::A, self::getDynamic() as{TypeError} asy::FutureOr<self::A>, self::getDynamic() as{TypeError} asy::FutureOr<self::A>);

pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class DeepCaller2 extends core::Object {
6464
[@vm.inferred-type.metadata=dart.core::Null?]static field core::Function unknown;
6565
static field core::Object field1 = [@vm.inferred-type.metadata=!] self::getValue();
6666
static method getDynamic() → dynamic
67-
return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function] self::unknown.call();
67+
return self::unknown.call();
6868
static method getValue() → core::Object {
6969
self::A aa = self::getDynamic() as{TypeError} self::A;
7070
return [@vm.inferred-type.metadata=!] aa.{self::A::foo}();

pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ static method use1([@vm.inferred-type.metadata=#lib::Intermediate] self::Interme
3333
static method use2([@vm.inferred-type.metadata=#lib::Intermediate] self::Intermediate i, [@vm.inferred-type.metadata=#lib::B?] self::A aa) → dynamic
3434
return [@vm.direct-call.metadata=#lib::Intermediate::bar] [@vm.inferred-type.metadata=#lib::T1] i.{self::Intermediate::bar}(aa);
3535
static method getDynamic() → dynamic
36-
return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function] self::unknown.call();
36+
return self::unknown.call();
3737
static method allocateB() → dynamic {
3838
new self::B::•();
3939
}

pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ static method use2([@vm.inferred-type.metadata=#lib::Intermediate] self::Interme
5959
static method use3([@vm.inferred-type.metadata=#lib::Intermediate] self::Intermediate i, self::A aa) → dynamic
6060
return [@vm.direct-call.metadata=#lib::Intermediate::bar] [@vm.inferred-type.metadata=!] i.{self::Intermediate::bar}(aa);
6161
static method getDynamic() → dynamic
62-
return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function] self::unknown.call();
62+
return self::unknown.call();
6363
static method allocateB() → dynamic {
6464
new self::B::•();
6565
}

pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_dynamic_target.dart.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ static method use_bar(dynamic x) → dynamic
4949
static method use_bazz(dynamic x) → dynamic
5050
return [@vm.inferred-type.metadata=#lib::T3] x.bazz();
5151
static method getDynamic() → dynamic
52-
return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function] self::unknown.call();
52+
return self::unknown.call();
5353
static method allocateA() → dynamic {
5454
new self::A::•();
5555
}

pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ static method use1([@vm.inferred-type.metadata=#lib::DeepCaller1] self::DeepCall
5151
static method use2([@vm.inferred-type.metadata=#lib::DeepCaller2] self::DeepCaller2 x, [@vm.inferred-type.metadata=#lib::A?] self::A aa) → dynamic
5252
return [@vm.direct-call.metadata=#lib::DeepCaller2::barL1] [@vm.inferred-type.metadata=!] x.{self::DeepCaller2::barL1}(aa);
5353
static method getDynamic() → dynamic
54-
return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function] self::unknown.call();
54+
return self::unknown.call();
5555
static method setField2([@vm.inferred-type.metadata=#lib::A] self::A aa, [@vm.inferred-type.metadata=#lib::T2] dynamic value) → void {
5656
[@vm.direct-call.metadata=#lib::A::field2] aa.{self::A::field2} = value;
5757
}

pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ class H extends core::Object {
113113
[@vm.inferred-type.metadata=#lib::D?]static field self::A dd = new self::D::•();
114114
[@vm.inferred-type.metadata=dart.core::Null?]static field core::Function unknown;
115115
static method getDynamic() → dynamic
116-
return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function] self::unknown.call();
116+
return self::unknown.call();
117117
static method main(core::List<core::String> args) → dynamic {
118118
core::print([@vm.direct-call.metadata=#lib::B::foo??] [@vm.inferred-type.metadata=#lib::T1] [@vm.inferred-type.metadata=#lib::B?] self::bb.{self::A::foo}());
119119
core::print([@vm.direct-call.metadata=#lib::B::bar??] [@vm.inferred-type.metadata=#lib::T1] [@vm.inferred-type.metadata=#lib::B?] self::bb.{self::A::bar});

pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ static method func2(self::T0 t0) → void {
4949
[@vm.direct-call.metadata=#lib::T2::foo??] t0.{self::T0::foo}();
5050
}
5151
static method getDynamic() → dynamic
52-
return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function] self::unknown.call();
52+
return self::unknown.call();
5353
static method use(dynamic x) → dynamic
54-
return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function] self::unknown.call(x);
54+
return self::unknown.call(x);
5555
static method main(core::List<core::String> args) → dynamic {
5656
self::func1(self::getDynamic() as{TypeError} self::T0);
5757
self::use(self::func2);

pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class B2 extends self::B2Base {
5656
: super self::B2Base::•()
5757
;
5858
method doSuperCall() → void {
59-
[@vm.call-site-attributes.metadata=receiverType:dynamic] [@vm.direct-call.metadata=#lib::A2::call] [@vm.inferred-type.metadata=#lib::A2] super.{self::B2Base::aa2}.call(1, 2, 3, 4, 5, new self::T2::•());
59+
[@vm.direct-call.metadata=#lib::A2::call] [@vm.inferred-type.metadata=#lib::A2] super.{self::B2Base::aa2}.call(1, 2, 3, 4, 5, new self::T2::•());
6060
}
6161
}
6262
class T3 extends core::Object {
@@ -127,15 +127,15 @@ static method test2() → void {
127127
exp::Expect::isTrue([@vm.inferred-type.metadata=dart.core::bool?] self::ok);
128128
}
129129
static method getDynamic3() → dynamic
130-
return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function] self::unknown3.call();
130+
return self::unknown3.call();
131131
static method test3() → void {
132132
self::getDynamic3().aa3(1, 2, 3, 4, 5, 6, new self::T3::•());
133133
self::ok = false;
134134
[@vm.direct-call.metadata=#lib::T3::doTest3??] [@vm.direct-call.metadata=#lib::A3::foo] [@vm.inferred-type.metadata=#lib::T3?] [@vm.direct-call.metadata=#lib::B3::aa3??] [@vm.inferred-type.metadata=#lib::A3] [@vm.inferred-type.metadata=#lib::B3?] self::bb3.aa3.foo.doTest3();
135135
exp::Expect::isTrue([@vm.inferred-type.metadata=dart.core::bool?] self::ok);
136136
}
137137
static method getDynamic4() → dynamic
138-
return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function] self::unknown4.call();
138+
return self::unknown4.call();
139139
static method test4() → void {
140140
self::getDynamic4().aa4(1, 2, 3, 4, 5, 6, 7, new self::T4::•());
141141
self::ok = false;

pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,5 @@ static method knownResult() → dynamic
2525
return new self::B::•();
2626
static method main(core::List<core::String> args) → dynamic {
2727
core::Function closure = () → self::B => new self::B::•();
28-
new self::TearOffDynamicMethod::•([@vm.call-site-attributes.metadata=receiverType:dart.core::Function] closure.call());
28+
new self::TearOffDynamicMethod::•(closure.call());
2929
}

pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ abstract class Base extends core::Object {
2222
method foo() → core::int
2323
return [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+] [@vm.inferred-type.metadata=int?] 3.{core::num::+}([@vm.direct-call.metadata=#lib::B::foo] [@vm.inferred-type.metadata=int?] [@vm.inferred-type.metadata=#lib::B] self::knownResult().foo() as{TypeError} core::num) as{TypeError} core::int;
2424
method doCall(dynamic x) → core::int
25-
return [@vm.call-site-attributes.metadata=receiverType:dynamic] x.call() as{TypeError} core::int;
25+
return x.call() as{TypeError} core::int;
2626
}
2727
class TearOffSuperMethod extends self::Base {
2828
synthetic constructor •() → void

runtime/tests/vm/dart/entrypoints/tearoff.dart

Lines changed: 0 additions & 37 deletions
This file was deleted.

runtime/tests/vm/dart/entrypoints/tearoff_inline_test.dart

Lines changed: 0 additions & 9 deletions
This file was deleted.

runtime/tests/vm/dart/entrypoints/tearoff_noinline_test.dart

Lines changed: 0 additions & 9 deletions
This file was deleted.

runtime/tests/vm/dart/entrypoints/tearoff_prologue.dart

Lines changed: 0 additions & 35 deletions
This file was deleted.

runtime/tests/vm/dart/entrypoints/tearoff_prologue_inline_test.dart

Lines changed: 0 additions & 5 deletions
This file was deleted.

runtime/tests/vm/dart/entrypoints/tearoff_prologue_noinline_test.dart

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)