// Copyright (c) 2014, 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.

// @dart = 2.9

// Test that the ParalleMoveResolver in the VM uses valid registers
// when requiring scratch registers.

main() {
  // Iterate enough to ensure optimizing `spillingMethod`.
  for (int i = 0; i < 100000; i++) {
    spillingMethod(i, () => 0);
  }
}

spillingMethod(what, obfuscate) {
  // Define lots of variables to get a few in stack.
  var a = obfuscate();
  var b = obfuscate();
  var c = obfuscate();
  var d = obfuscate();
  var e = obfuscate();
  var f = obfuscate();
  var g = obfuscate();
  var h = obfuscate();
  var i = obfuscate();
  var j = obfuscate();
  var k = obfuscate();
  var l = obfuscate();
  var m = obfuscate();
  var n = obfuscate();
  var o = obfuscate();
  var p = obfuscate();
  var q = obfuscate();
  var r = obfuscate();
  var s = obfuscate();
  var t = obfuscate();
  var u = obfuscate();
  var v = obfuscate();

  // Swap all variables, in the hope of a memory <-> memory swap operation.
  while (what == 42) {
    a = b;
    b = a;
    c = d;
    d = c;
    e = f;
    f = e;
    g = h;
    h = g;
    i = j;
    j = i;
    k = l;
    l = k;
    m = n;
    n = m;
    o = p;
    p = o;
    q = r;
    r = q;
    s = t;
    t = s;
    u = v;
    v = u;
    what++;
  }

  // Keep all variables alive.
  return a +
      b +
      c +
      d +
      e +
      f +
      g +
      h +
      i +
      j +
      k +
      l +
      m +
      n +
      o +
      p +
      q +
      r +
      s +
      t +
      u +
      v;
}
