| // 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. | 
 |  | 
 | // Enforce proper S-overlapping register for temp (dartbug.com/36681). | 
 | // | 
 | // VMOptions=--deterministic --optimization_counter_threshold=5 | 
 |  | 
 | import "package:expect/expect.dart"; | 
 |  | 
 | double v = 0; | 
 |  | 
 | @pragma('vm:never-inline') | 
 | int foo(int a, int p, int q) { | 
 |   double p1 = 0; | 
 |   double p2 = 0; | 
 |   double p3 = 0; | 
 |   double p4 = 0; | 
 |   double p5 = 0; | 
 |   double p6 = 0; | 
 |   double p7 = 0; | 
 |   double p8 = 0; | 
 |   for (int z = 0; z < 8; z++) { | 
 |     a += (p ~/ q); | 
 |     a += (p % q); | 
 |     p += 3; | 
 |     q += 2; | 
 |     p1 += 1; | 
 |     p2 += 2; | 
 |     p3 += 3; | 
 |     p4 += 4; | 
 |     p5 += 1; | 
 |     p6 += 2; | 
 |     p7 += 3; | 
 |     p8 += 4; | 
 |   } | 
 |   v = p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8; | 
 |   return a; | 
 | } | 
 |  | 
 | main() { | 
 |   for (int j = 0; j < 10; j++) { | 
 |     int i = foo(1, 1, 1); | 
 |     Expect.equals(37, i); | 
 |     Expect.equals(160, v); | 
 |   } | 
 | } |