// Copyright (c) 2017, 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.
//
// Check that optimizer correctly handles (x << y) & MASK_32 pattern on 32-bit
// platforms: given the pattern
//
//     v1 <- UnboxedIntConverter([tr] mint->uint32, v0)
//     v2 <- UnboxedIntConverter(uint32->mint, v1)
//
// optimizer must *not* replace v2 with v0 because the first conversion is
// truncating and is erasing the high part of the mint value.
//
// VMOptions=--optimization-counter-threshold=5 --no-background-compilation

// @dart = 2.9

import "package:expect/expect.dart";

const _MASK_32 = 0xffffffff;
int _rotl32(int val, int shift) {
  final mod_shift = shift & 31;
  return ((val << mod_shift) & _MASK_32) |
      ((val & _MASK_32) >> (32 - mod_shift));
}

rot8(v) => _rotl32(v, 8);

main() {
  // Note: value is selected in such a way that (value << 8) is not a smi - this
  // triggers emission of BinaryMintOp instructions for shifts.
  const value = 0xF0F00000;
  const rotated = 0xF00000F0;
  Expect.equals(rotated, rot8(value));
  for (var i = 0; i < 10; i++) {
    Expect.equals(rotated, rot8(value));
  }
}
