annotate test/compiler/5091921/Test6890943.java @ 12986:1b422ef5288a

8025728: Missing volatile specifier for field G1AllocRegion::_alloc_region Summary: The field G1AllocRegion::_alloc_region needs to be declared volatile as it is used with that intention. Otherwise the compiler may generate the code that reloads the value which might have changed in the meantime, leading to spurious crashes. Reviewed-by: iveresov, simonis, tschatzl Contributed-by: Axel Siebenborn <axel.siebenborn@sap.com>
author tschatzl
date Wed, 23 Oct 2013 10:23:06 +0200
parents 514efad5e81a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3345
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
1 /*
8077
514efad5e81a 8008180: Several tests in compiler/5091921 need more time to run
drchase
parents: 3345
diff changeset
2 * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
3345
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
4 *
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
7 * published by the Free Software Foundation.
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
8 *
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
13 * accompanied this code).
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
14 *
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
18 *
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
21 * questions.
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
22 *
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
23 */
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
24
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
25 /**
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
26 * @test
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
27 * @bug 6890943
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
28 * @summary JVM mysteriously gives wrong result on 64-bit 1.6 VMs in hotspot mode.
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
29 *
8077
514efad5e81a 8008180: Several tests in compiler/5091921 need more time to run
drchase
parents: 3345
diff changeset
30 * @run shell/timeout=240 Test6890943.sh
3345
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
31 */
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
32 import java.util.*;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
33 import java.io.*;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
34 import java.util.regex.*;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
35
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
36 public class Test6890943 {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
37 public static final boolean AIR = true, ROCK = false;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
38 public static void main(String[] args) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
39 new Test6890943().go();
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
40 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
41
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
42 int r, c, f, t;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
43 boolean[][] grid;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
44
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
45 public void go() {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
46 Scanner s = new Scanner(System.in);
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
47 s.useDelimiter("\\s+");
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
48 int T = s.nextInt();
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
49 for (t = 0 ; t < T ; t++) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
50 r = s.nextInt(); c = s.nextInt(); f = s.nextInt();
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
51 grid = new boolean[r][c];
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
52 for (int x = 0 ; x < r ; x++) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
53 String line = s.next();
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
54 for (int y = 0 ; y < c ; y++) grid[x][y] = line.charAt(y) == '.';
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
55 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
56 int digs = solve();
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
57 String res = digs == -1 ? "No" : "Yes " + digs;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
58 System.out.printf("Case #%d: %s\n", t+1, res);
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
59 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
60 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
61
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
62 Map<Integer, Integer> M = new HashMap<Integer, Integer>();
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
63
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
64 private int solve() {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
65 M = new HashMap<Integer, Integer>();
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
66 M.put(calcWalkingRange(0, 0), 0);
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
67 for (int digDown = 0 ; digDown < r ; digDown++) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
68 Map<Integer, Integer> tries = new HashMap<Integer, Integer>();
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
69 for (Map.Entry<Integer, Integer> m : M.entrySet()) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
70 int q = m.getKey();
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
71 if (depth(q) != (digDown)) continue;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
72 if (stuck(q)) continue;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
73 tries.put(q, m.getValue());
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
74 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
75
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
76 for (Map.Entry<Integer, Integer> m : tries.entrySet()) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
77 int q = m.getKey();
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
78 int fallLeftDelta = 0, fallRightDelta = 0;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
79 //fall left
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
80 int fallLeft = fall(digDown, start(q));
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
81 if (fallLeft > 0) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
82 fallLeftDelta = 1;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
83 if (fallLeft <= f) addToM(calcWalkingRange(digDown+fallLeft, start(q)), m.getValue());
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
84 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
85
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
86 //fall right
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
87 int fallRight = fall(digDown, end(q));
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
88 if (fallRight > 0) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
89 fallRightDelta = 1;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
90
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
91 if (fallRight <= f) addToM(calcWalkingRange(digDown+fallRight, end(q)), m.getValue());
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
92 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
93
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
94 for (int p = start(q) + fallLeftDelta ; p <= end(q) - fallRightDelta ; p++) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
95 //goLeft
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
96 for (int digSpot = p ; digSpot > start(q) +fallLeftDelta ; digSpot--) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
97 int fallDown = 1+fall(digDown+1, digSpot);
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
98 if (fallDown <= f) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
99 if (fallDown == 1) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
100 addToM(calcWalkingRange(digDown + 1, digSpot, digSpot, p), m.getValue() + Math.abs(digSpot-p)+1);
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
101 } else {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
102 addToM(calcWalkingRange(digDown + fallDown, digSpot), m.getValue() + Math.abs(digSpot-p)+1);
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
103 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
104 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
105 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
106
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
107 //goRight
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
108 for (int digSpot = p ; digSpot < end(q)-fallRightDelta ;digSpot++) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
109 int fallDown = 1+fall(digDown+1, digSpot);
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
110 if (fallDown <= f) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
111 if (fallDown == 1) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
112 addToM(calcWalkingRange(digDown + 1, digSpot, p, digSpot), m.getValue() + Math.abs(digSpot-p)+1);
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
113 } else {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
114 addToM(calcWalkingRange(digDown + fallDown, digSpot), m.getValue() + Math.abs(digSpot-p)+1);
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
115 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
116 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
117 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
118 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
119 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
120 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
121
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
122 int result = Integer.MAX_VALUE;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
123 for (Map.Entry<Integer, Integer> m : M.entrySet()) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
124 if (depth(m.getKey()) == r-1) result = Math.min(m.getValue(), result);
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
125 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
126
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
127 if (result == Integer.MAX_VALUE) return -1;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
128 return result;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
129 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
130
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
131 private void addToM(int q, int i) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
132 Integer original = M.get(q);
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
133 if ( original == null ) M.put(q, i);
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
134 else M.put(q, Math.min(original, i));
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
135 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
136
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
137 private int fall(int row, int column) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
138 int res = 0;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
139 for ( int p = row+1 ; p < r ; p++) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
140 if (grid[p][column] == AIR) res++;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
141 else break;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
142 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
143 return res;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
144 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
145
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
146 private boolean stuck(int q) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
147 return start(q) == end(q);
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
148 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
149
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
150 private int depth(int q) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
151 return q % 50;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
152 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
153
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
154 private int start(int q) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
155 return q / (50*50);
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
156 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
157
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
158 private int end(int q) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
159 return (q / 50) % 50;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
160 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
161
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
162 private int calcWalkingRange(int depth, int pos) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
163 return calcWalkingRange(depth, pos, Integer.MAX_VALUE, Integer.MIN_VALUE);
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
164 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
165
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
166 private int calcWalkingRange(int depth, int pos, int airOverrideStart, int airOverrideEnd) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
167 int left = pos, right = pos;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
168 if (depth >= r) return (c-1)*50 + depth;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
169
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
170 while (left > 0) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
171 if (grid[depth][left-1] == ROCK && (left-1 < airOverrideStart || left-1 > airOverrideEnd)) break;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
172 if (depth < r-1 && grid[depth+1][left-1] == AIR) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
173 left--;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
174 break;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
175 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
176 left--;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
177 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
178 while (right < c-1) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
179 if (grid[depth][right+1] == ROCK && (right+1 < airOverrideStart || right+1 > airOverrideEnd)) break;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
180 if (depth < r-1 && grid[depth+1][right+1] == AIR) {
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
181 right++;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
182 break;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
183 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
184 right++;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
185 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
186
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
187 return left *50*50 + right*50 + depth;
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
188 }
bad7ecd0b6ed 5091921: Sign flip issues in loop optimizer
kvn
parents:
diff changeset
189 }