Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/hotspot/jtreg/compiler/loopopts/BadPredicateAfterPartialPeel.java
41149 views
1
/*
2
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/**
25
* @test
26
* @bug 8146792
27
* @summary Predicate moved after partial peel may lead to broken graph
28
* @run main/othervm -XX:-TieredCompilation -XX:-BackgroundCompilation
29
* -XX:-UseOnStackReplacement
30
* -XX:CompileCommand=compileonly,compiler.loopopts.BadPredicateAfterPartialPeel::m
31
* -XX:CompileCommand=dontinline,compiler.loopopts.BadPredicateAfterPartialPeel::not_inlined*
32
* -XX:CompileCommand=quiet
33
* compiler.loopopts.BadPredicateAfterPartialPeel
34
*/
35
36
package compiler.loopopts;
37
38
public class BadPredicateAfterPartialPeel {
39
40
static void not_inlined1() {}
41
static void not_inlined4() {}
42
43
static int m_helper(int i, int i3, int i4) {
44
return i3 == 4 ? i4 : i;
45
}
46
47
static float[] array = new float[1000];
48
static int[] array2 = new int[1000];
49
50
boolean flag;
51
int j;
52
53
static void m(BadPredicateAfterPartialPeel o1, BadPredicateAfterPartialPeel o2, BadPredicateAfterPartialPeel o, int i4) {
54
int i1 = 1;
55
56
// To delay partial peeling to the loop opts pass right before CCP
57
int i2 = 0;
58
for (; i2 < 10; i2 += i1);
59
i2 = i2 / 10;
60
61
// Simplified during CCP:
62
int i3 = 2;
63
for (; i3 < 4; i3 *= 2);
64
65
// Loop is partial peeled right before CCP
66
int i = 0;
67
boolean b = true;
68
69
not_inlined1();
70
71
array[0] = -1;
72
do {
73
// peeled section starts here
74
o.flag = false;
75
o.j = 0;
76
77
if (b) {
78
// The following store will be pinned between
79
// predicates and the loop after partial peeling. All
80
// control flow will be optimized out and so nothing
81
// will prevent predicates from being moved out the
82
// loop.
83
array[i] = 0;
84
}
85
if (array[0] != 0) {
86
}
87
if (i >= 10) {
88
// peeled section ends here
89
return;
90
}
91
i += i2;
92
b = false;
93
int i5 = m_helper(i, i3, i4); // This will be simpliflied during CCP
94
if (array[i5] != 0) { // and this will become a predicate
95
}
96
if (o2.flag) {
97
}
98
// A bunch of stuff to grow loop body size and prevent peeling:
99
array2[0] = 0;
100
array2[1] = 0;
101
array2[2] = 0;
102
array2[3] = 0;
103
array2[4] = 0;
104
array2[5] = 0;
105
array2[6] = 0;
106
array2[7] = 0;
107
array2[8] = 0;
108
array2[9] = 0;
109
array2[10] = 0;
110
array2[11] = 0;
111
array2[12] = 0;
112
array2[13] = 0;
113
array2[14] = 0;
114
array2[15] = 0;
115
array2[16] = 0;
116
array2[17] = 0;
117
array2[18] = 0;
118
array2[19] = 0;
119
array2[20] = 0;
120
array2[21] = 0;
121
array2[22] = 0;
122
array2[23] = 0;
123
array2[24] = 0;
124
array2[25] = 0;
125
array2[26] = 0;
126
array2[27] = 0;
127
array2[28] = 0;
128
array2[29] = 0;
129
array2[30] = 0;
130
array2[31] = 0;
131
array2[32] = 0;
132
array2[33] = 0;
133
array2[34] = 0;
134
array2[35] = 0;
135
array2[36] = 0;
136
array2[37] = 0;
137
array2[38] = 0;
138
array2[39] = 0;
139
array2[40] = 0;
140
array2[41] = 0;
141
array2[42] = 0;
142
array2[43] = 0;
143
array2[44] = 0;
144
array2[45] = 0;
145
array2[46] = 0;
146
array2[47] = 0;
147
array2[48] = 0;
148
array2[49] = 0;
149
array2[50] = 0;
150
array2[51] = 0;
151
array2[52] = 0;
152
array2[53] = 0;
153
array2[54] = 0;
154
array2[55] = 0;
155
array2[56] = 0;
156
array2[57] = 0;
157
array2[58] = 0;
158
array2[59] = 0;
159
array2[60] = 0;
160
array2[61] = 0;
161
array2[62] = 0;
162
array2[63] = 0;
163
array2[64] = 0;
164
array2[65] = 0;
165
array2[66] = 0;
166
array2[67] = 0;
167
array2[68] = 0;
168
array2[69] = 0;
169
array2[70] = 0;
170
array2[71] = 0;
171
array2[72] = 0;
172
array2[73] = 0;
173
array2[74] = 0;
174
array2[75] = 0;
175
array2[76] = 0;
176
array2[77] = 0;
177
array2[78] = 0;
178
array2[79] = 0;
179
array2[80] = 0;
180
array2[81] = 0;
181
array2[82] = 0;
182
array2[83] = 0;
183
array2[84] = 0;
184
array2[85] = 0;
185
array2[86] = 0;
186
array2[87] = 0;
187
array2[88] = 0;
188
array2[89] = 0;
189
array2[90] = 0;
190
array2[91] = 0;
191
array2[92] = 0;
192
array2[93] = 0;
193
array2[94] = 0;
194
array2[95] = 0;
195
array2[96] = 0;
196
array2[97] = 0;
197
array2[98] = 0;
198
array2[99] = 0;
199
200
array2[100] = 0;
201
array2[101] = 0;
202
array2[102] = 0;
203
array2[103] = 0;
204
array2[104] = 0;
205
array2[105] = 0;
206
array2[106] = 0;
207
array2[107] = 0;
208
array2[108] = 0;
209
array2[109] = 0;
210
array2[110] = 0;
211
array2[111] = 0;
212
array2[112] = 0;
213
array2[113] = 0;
214
array2[114] = 0;
215
array2[115] = 0;
216
array2[116] = 0;
217
array2[117] = 0;
218
array2[118] = 0;
219
array2[119] = 0;
220
array2[120] = 0;
221
array2[121] = 0;
222
array2[122] = 0;
223
array2[123] = 0;
224
array2[124] = 0;
225
array2[125] = 0;
226
array2[126] = 0;
227
array2[127] = 0;
228
array2[128] = 0;
229
array2[129] = 0;
230
array2[130] = 0;
231
array2[131] = 0;
232
array2[132] = 0;
233
array2[133] = 0;
234
array2[134] = 0;
235
array2[135] = 0;
236
array2[136] = 0;
237
array2[137] = 0;
238
array2[138] = 0;
239
array2[139] = 0;
240
array2[140] = 0;
241
array2[141] = 0;
242
array2[142] = 0;
243
array2[143] = 0;
244
array2[144] = 0;
245
array2[145] = 0;
246
array2[146] = 0;
247
array2[147] = 0;
248
array2[148] = 0;
249
array2[149] = 0;
250
array2[150] = 0;
251
array2[151] = 0;
252
array2[152] = 0;
253
array2[153] = 0;
254
array2[154] = 0;
255
array2[155] = 0;
256
array2[156] = 0;
257
array2[157] = 0;
258
array2[158] = 0;
259
array2[159] = 0;
260
array2[160] = 0;
261
array2[161] = 0;
262
array2[162] = 0;
263
array2[163] = 0;
264
array2[164] = 0;
265
array2[165] = 0;
266
array2[166] = 0;
267
array2[167] = 0;
268
array2[168] = 0;
269
array2[169] = 0;
270
array2[170] = 0;
271
array2[171] = 0;
272
array2[172] = 0;
273
array2[173] = 0;
274
array2[174] = 0;
275
array2[175] = 0;
276
array2[176] = 0;
277
array2[177] = 0;
278
array2[178] = 0;
279
array2[179] = 0;
280
array2[180] = 0;
281
array2[181] = 0;
282
array2[182] = 0;
283
array2[183] = 0;
284
array2[184] = 0;
285
array2[185] = 0;
286
array2[186] = 0;
287
array2[187] = 0;
288
array2[188] = 0;
289
array2[189] = 0;
290
array2[190] = 0;
291
array2[191] = 0;
292
array2[192] = 0;
293
array2[193] = 0;
294
array2[194] = 0;
295
array2[195] = 0;
296
array2[196] = 0;
297
array2[197] = 0;
298
array2[198] = 0;
299
array2[199] = 0;
300
if (o1.j >= 20) {
301
break;
302
}
303
o1.j++;
304
} while(true);
305
not_inlined4();
306
}
307
308
static public void main(String[] args) {
309
BadPredicateAfterPartialPeel o1 = new BadPredicateAfterPartialPeel();
310
BadPredicateAfterPartialPeel o2 = new BadPredicateAfterPartialPeel();
311
for (int i = 0; i < 20000; i++) {
312
o1.j = 0;
313
m(o1, o2, o2, 0);
314
m_helper(i, 2, i); // pollute profile
315
}
316
}
317
}
318
319