3208230580
This CL temporarily remove deoptimzation history which was put in to prevent repeated deoptimization caused by loop invariant code motion. It caused illegal code motion under certain conditions. BUG=https://code.google.com/p/dart/issues/detail?id=11245 TEST=tests/language/licm3_test.dart Review URL: https://codereview.chromium.org//16844011 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@23989 260f80e4-7a28-3924-810f-c04153c831b5
32 lines
694 B
Dart
32 lines
694 B
Dart
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
// Test that a loop invariant code motion optimization correctly hoists
|
|
// instructions that may cause deoptimization.
|
|
|
|
import "package:expect/expect.dart";
|
|
|
|
foo(o) {
|
|
var r = 0;
|
|
for (var i = 0; i < 3; i++) {
|
|
r += o.z;
|
|
}
|
|
return r;
|
|
}
|
|
|
|
|
|
class A {
|
|
var z = 3;
|
|
}
|
|
|
|
main() {
|
|
var a = new A();
|
|
for(var i = 0; i < 10000; i++) foo(a);
|
|
Expect.equals(9, foo(a));
|
|
Expect.throws(() => foo(42));
|
|
for(var i = 0; i < 10000; i++) foo(a);
|
|
Expect.throws(() => foo(42));
|
|
}
|
|
|