// Copyright (c) 2019, 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.
//
// VMOptions=--deterministic --optimization-counter-threshold=5 --use-bytecode-compiler
//
// Test that block merging takes phis into account.
//
// The problem only reproduces with bytecode compiler (--use-bytecode-compiler)
// as bytecode doesn't have backward branches for the redundant loops.
// OSR handling code inserts Phi instructions to JoinEntry
// even when there is only one predecessor. This results in a flow graph
// suitable for block merging with a successor block containing Phi.

import 'package:expect/expect.dart';

void testBottomUpInference() {
  Expect.type<List<int>>([for (; false;) 1]);
  Expect.type<List<int>>([for (; false;) 1]);
  Expect.type<List<int>>([for (; false;) 1]);
  Expect.type<List<int>>([for (; false;) 1]);
  Expect.type<List<int>>([for (; false;) 1]);
  Expect.type<List<int>>([for (; false;) 1]);
  Expect.type<List<int>>([for (; false;) 1]);
  Expect.type<List<int>>([for (; false;) 1]);
  Expect.type<List<int>>([for (; false;) 1]);
  Expect.type<List<int>>([for (; false;) 1]);
  Expect.type<List<int>>([for (; false;) 1]);
  Expect.type<List<int>>([for (; false;) 1]);
  Expect.type<List<int>>([for (; false;) 1]);
}

main() {
  testBottomUpInference();
}
