comparison test/compiler/8009761/Test8009761.java @ 8727:0094485b46c7

8009761: Deoptimization on sparc doesn't set Llast_SP correctly in the interpreter frames it creates Summary: deoptimization doesn't set up callee frames so that they restore caller frames correctly. Reviewed-by: kvn
author roland
date Wed, 13 Mar 2013 09:44:45 +0100
parents
children 6c4abd4a9595
comparison
equal deleted inserted replaced
8708:8196357e95b5 8727:0094485b46c7
1 /*
2 * Copyright (c) 2013, 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 8009761
27 * @summary Deoptimization on sparc doesn't set Llast_SP correctly in the interpreter frames it creates
28 * @run main/othervm -XX:-UseOnStackReplacement -XX:-BackgroundCompilation Test8009761
29 *
30 */
31
32 public class Test8009761 {
33
34 static class UnloadedClass {
35 volatile int i;
36 }
37
38 static Object m1(boolean deopt) {
39 // When running interpreted, on sparc, the caller's stack is
40 // extended for the locals and the caller's frame is restored
41 // on return.
42 long l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12,
43 l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24,
44 l25, l26, l27, l28, l29, l30, l31, l32, l33, l34, l35, l36,
45 l37, l38, l39, l40, l41, l42, l43, l44, l45, l46, l47, l48,
46 l49, l50, l51, l52, l53, l54, l55, l56, l57, l58, l59, l60,
47 l61, l62, l63, l64, l65, l66, l67, l68, l69, l70, l71, l72,
48 l73, l74, l75, l76, l77, l78, l79, l80, l81, l82, l83, l84,
49 l85, l86, l87, l88, l89, l90, l91, l92, l93, l94, l95, l96,
50 l97, l98, l99, l100, l101, l102, l103, l104, l105, l106, l107,
51 l108, l109, l110, l111, l112, l113, l114, l115, l116, l117,
52 l118, l119, l120, l121, l122, l123, l124, l125, l126, l127,
53 l128, l129, l130, l131, l132, l133, l134, l135, l136, l137,
54 l138, l139, l140, l141, l142, l143, l144, l145, l146, l147,
55 l148, l149, l150, l151, l152, l153, l154, l155, l156, l157,
56 l158, l159, l160, l161, l162, l163, l164, l165, l166, l167,
57 l168, l169, l170, l171, l172, l173, l174, l175, l176, l177,
58 l178, l179, l180, l181, l182, l183, l184, l185, l186, l187,
59 l188, l189, l190, l191, l192, l193, l194, l195, l196, l197,
60 l198, l199, l200, l201, l202, l203, l204, l205, l206, l207,
61 l208, l209, l210, l211, l212, l213, l214, l215, l216, l217,
62 l218, l219, l220, l221, l222, l223, l224, l225, l226, l227,
63 l228, l229, l230, l231, l232, l233, l234, l235, l236, l237,
64 l238, l239, l240, l241, l242, l243, l244, l245, l246, l247,
65 l248, l249, l250, l251, l252, l253, l254, l255, l256, l257,
66 l258, l259, l260, l261, l262, l263, l264, l265, l266, l267,
67 l268, l269, l270, l271, l272, l273, l274, l275, l276, l277,
68 l278, l279, l280, l281, l282, l283, l284, l285, l286, l287,
69 l288, l289, l290, l291, l292, l293, l294, l295, l296, l297,
70 l298, l299, l300, l301, l302, l303, l304, l305, l306, l307,
71 l308, l309, l310, l311, l312, l313, l314, l315, l316, l317,
72 l318, l319, l320, l321, l322, l323, l324, l325, l326, l327,
73 l328, l329, l330, l331, l332, l333, l334, l335, l336, l337,
74 l338, l339, l340, l341, l342, l343, l344, l345, l346, l347,
75 l348, l349, l350, l351, l352, l353, l354, l355, l356, l357,
76 l358, l359, l360, l361, l362, l363, l364, l365, l366, l367,
77 l368, l369, l370, l371, l372, l373, l374, l375, l376, l377,
78 l378, l379, l380, l381, l382, l383, l384, l385, l386, l387,
79 l388, l389, l390, l391, l392, l393, l394, l395, l396, l397,
80 l398, l399, l400, l401, l402, l403, l404, l405, l406, l407,
81 l408, l409, l410, l411, l412, l413, l414, l415, l416, l417,
82 l418, l419, l420, l421, l422, l423, l424, l425, l426, l427,
83 l428, l429, l430, l431, l432, l433, l434, l435, l436, l437,
84 l438, l439, l440, l441, l442, l443, l444, l445, l446, l447,
85 l448, l449, l450, l451, l452, l453, l454, l455, l456, l457,
86 l458, l459, l460, l461, l462, l463, l464, l465, l466, l467,
87 l468, l469, l470, l471, l472, l473, l474, l475, l476, l477,
88 l478, l479, l480, l481, l482, l483, l484, l485, l486, l487,
89 l488, l489, l490, l491, l492, l493, l494, l495, l496, l497,
90 l498, l499, l500, l501, l502, l503, l504, l505, l506, l507,
91 l508, l509, l510, l511;
92
93 long ll0, ll1, ll2, ll3, ll4, ll5, ll6, ll7, ll8, ll9, ll10, ll11, ll12,
94 ll13, ll14, ll15, ll16, ll17, ll18, ll19, ll20, ll21, ll22, ll23, ll24,
95 ll25, ll26, ll27, ll28, ll29, ll30, ll31, ll32, ll33, ll34, ll35, ll36,
96 ll37, ll38, ll39, ll40, ll41, ll42, ll43, ll44, ll45, ll46, ll47, ll48,
97 ll49, ll50, ll51, ll52, ll53, ll54, ll55, ll56, ll57, ll58, ll59, ll60,
98 ll61, ll62, ll63, ll64, ll65, ll66, ll67, ll68, ll69, ll70, ll71, ll72,
99 ll73, ll74, ll75, ll76, ll77, ll78, ll79, ll80, ll81, ll82, ll83, ll84,
100 ll85, ll86, ll87, ll88, ll89, ll90, ll91, ll92, ll93, ll94, ll95, ll96,
101 ll97, ll98, ll99, ll100, ll101, ll102, ll103, ll104, ll105, ll106, ll107,
102 ll108, ll109, ll110, ll111, ll112, ll113, ll114, ll115, ll116, ll117,
103 ll118, ll119, ll120, ll121, ll122, ll123, ll124, ll125, ll126, ll127,
104 ll128, ll129, ll130, ll131, ll132, ll133, ll134, ll135, ll136, ll137,
105 ll138, ll139, ll140, ll141, ll142, ll143, ll144, ll145, ll146, ll147,
106 ll148, ll149, ll150, ll151, ll152, ll153, ll154, ll155, ll156, ll157,
107 ll158, ll159, ll160, ll161, ll162, ll163, ll164, ll165, ll166, ll167,
108 ll168, ll169, ll170, ll171, ll172, ll173, ll174, ll175, ll176, ll177,
109 ll178, ll179, ll180, ll181, ll182, ll183, ll184, ll185, ll186, ll187,
110 ll188, ll189, ll190, ll191, ll192, ll193, ll194, ll195, ll196, ll197,
111 ll198, ll199, ll200, ll201, ll202, ll203, ll204, ll205, ll206, ll207,
112 ll208, ll209, ll210, ll211, ll212, ll213, ll214, ll215, ll216, ll217,
113 ll218, ll219, ll220, ll221, ll222, ll223, ll224, ll225, ll226, ll227,
114 ll228, ll229, ll230, ll231, ll232, ll233, ll234, ll235, ll236, ll237,
115 ll238, ll239, ll240, ll241, ll242, ll243, ll244, ll245, ll246, ll247,
116 ll248, ll249, ll250, ll251, ll252, ll253, ll254, ll255, ll256, ll257,
117 ll258, ll259, ll260, ll261, ll262, ll263, ll264, ll265, ll266, ll267,
118 ll268, ll269, ll270, ll271, ll272, ll273, ll274, ll275, ll276, ll277,
119 ll278, ll279, ll280, ll281, ll282, ll283, ll284, ll285, ll286, ll287,
120 ll288, ll289, ll290, ll291, ll292, ll293, ll294, ll295, ll296, ll297,
121 ll298, ll299, ll300, ll301, ll302, ll303, ll304, ll305, ll306, ll307,
122 ll308, ll309, ll310, ll311, ll312, ll313, ll314, ll315, ll316, ll317,
123 ll318, ll319, ll320, ll321, ll322, ll323, ll324, ll325, ll326, ll327,
124 ll328, ll329, ll330, ll331, ll332, ll333, ll334, ll335, ll336, ll337,
125 ll338, ll339, ll340, ll341, ll342, ll343, ll344, ll345, ll346, ll347,
126 ll348, ll349, ll350, ll351, ll352, ll353, ll354, ll355, ll356, ll357,
127 ll358, ll359, ll360, ll361, ll362, ll363, ll364, ll365, ll366, ll367,
128 ll368, ll369, ll370, ll371, ll372, ll373, ll374, ll375, ll376, ll377,
129 ll378, ll379, ll380, ll381, ll382, ll383, ll384, ll385, ll386, ll387,
130 ll388, ll389, ll390, ll391, ll392, ll393, ll394, ll395, ll396, ll397,
131 ll398, ll399, ll400, ll401, ll402, ll403, ll404, ll405, ll406, ll407,
132 ll408, ll409, ll410, ll411, ll412, ll413, ll414, ll415, ll416, ll417,
133 ll418, ll419, ll420, ll421, ll422, ll423, ll424, ll425, ll426, ll427,
134 ll428, ll429, ll430, ll431, ll432, ll433, ll434, ll435, ll436, ll437,
135 ll438, ll439, ll440, ll441, ll442, ll443, ll444, ll445, ll446, ll447,
136 ll448, ll449, ll450, ll451, ll452, ll453, ll454, ll455, ll456, ll457,
137 ll458, ll459, ll460, ll461, ll462, ll463, ll464, ll465, ll466, ll467,
138 ll468, ll469, ll470, ll471, ll472, ll473, ll474, ll475, ll476, ll477,
139 ll478, ll479, ll480, ll481, ll482, ll483, ll484, ll485, ll486, ll487,
140 ll488, ll489, ll490, ll491, ll492, ll493, ll494, ll495, ll496, ll497,
141 ll498, ll499, ll500, ll501, ll502, ll503, ll504, ll505, ll506, ll507,
142 ll508, ll509, ll510, ll511;
143
144 if (deopt) {
145 UnloadedClass res = new UnloadedClass(); // sufficient to force deopt with c2 but not c1
146 res.i = 0; // forces deopt with c1
147 return res;
148 }
149 return null;
150 }
151
152 static int count = 0;
153
154 static void m2() {
155 // Will be called recursively until a stack overflow
156 // exception. Makes sure it has a lot of locals so that it's
157 // not called a sufficient number of times to trigger
158 // compilation.
159
160 long l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12,
161 l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24,
162 l25, l26, l27, l28, l29, l30, l31, l32, l33, l34, l35, l36,
163 l37, l38, l39, l40, l41, l42, l43, l44, l45, l46, l47, l48,
164 l49, l50, l51, l52, l53, l54, l55, l56, l57, l58, l59, l60,
165 l61, l62, l63, l64, l65, l66, l67, l68, l69, l70, l71, l72,
166 l73, l74, l75, l76, l77, l78, l79, l80, l81, l82, l83, l84,
167 l85, l86, l87, l88, l89, l90, l91, l92, l93, l94, l95, l96,
168 l97, l98, l99, l100, l101, l102, l103, l104, l105, l106, l107,
169 l108, l109, l110, l111, l112, l113, l114, l115, l116, l117,
170 l118, l119, l120, l121, l122, l123, l124, l125, l126, l127,
171 l128, l129, l130, l131, l132, l133, l134, l135, l136, l137,
172 l138, l139, l140, l141, l142, l143, l144, l145, l146, l147,
173 l148, l149, l150, l151, l152, l153, l154, l155, l156, l157,
174 l158, l159, l160, l161, l162, l163, l164, l165, l166, l167,
175 l168, l169, l170, l171, l172, l173, l174, l175, l176, l177,
176 l178, l179, l180, l181, l182, l183, l184, l185, l186, l187,
177 l188, l189, l190, l191, l192, l193, l194, l195, l196, l197,
178 l198, l199, l200, l201, l202, l203, l204, l205, l206, l207,
179 l208, l209, l210, l211, l212, l213, l214, l215, l216, l217,
180 l218, l219, l220, l221, l222, l223, l224, l225, l226, l227,
181 l228, l229, l230, l231, l232, l233, l234, l235, l236, l237,
182 l238, l239, l240, l241, l242, l243, l244, l245, l246, l247,
183 l248, l249, l250, l251, l252, l253, l254, l255, l256, l257,
184 l258, l259, l260, l261, l262, l263, l264, l265, l266, l267,
185 l268, l269, l270, l271, l272, l273, l274, l275, l276, l277,
186 l278, l279, l280, l281, l282, l283, l284, l285, l286, l287,
187 l288, l289, l290, l291, l292, l293, l294, l295, l296, l297,
188 l298, l299, l300, l301, l302, l303, l304, l305, l306, l307,
189 l308, l309, l310, l311, l312, l313, l314, l315, l316, l317,
190 l318, l319, l320, l321, l322, l323, l324, l325, l326, l327,
191 l328, l329, l330, l331, l332, l333, l334, l335, l336, l337,
192 l338, l339, l340, l341, l342, l343, l344, l345, l346, l347,
193 l348, l349, l350, l351, l352, l353, l354, l355, l356, l357,
194 l358, l359, l360, l361, l362, l363, l364, l365, l366, l367,
195 l368, l369, l370, l371, l372, l373, l374, l375, l376, l377,
196 l378, l379, l380, l381, l382, l383, l384, l385, l386, l387,
197 l388, l389, l390, l391, l392, l393, l394, l395, l396, l397,
198 l398, l399, l400, l401, l402, l403, l404, l405, l406, l407,
199 l408, l409, l410, l411, l412, l413, l414, l415, l416, l417,
200 l418, l419, l420, l421, l422, l423, l424, l425, l426, l427,
201 l428, l429, l430, l431, l432, l433, l434, l435, l436, l437,
202 l438, l439, l440, l441, l442, l443, l444, l445, l446, l447,
203 l448, l449, l450, l451, l452, l453, l454, l455, l456, l457,
204 l458, l459, l460, l461, l462, l463, l464, l465, l466, l467,
205 l468, l469, l470, l471, l472, l473, l474, l475, l476, l477,
206 l478, l479, l480, l481, l482, l483, l484, l485, l486, l487,
207 l488, l489, l490, l491, l492, l493, l494, l495, l496, l497,
208 l498, l499, l500, l501, l502, l503, l504, l505, l506, l507,
209 l508, l509, l510, l511;
210
211 count++;
212 m2();
213 }
214
215 static Object m3(boolean overflow_stack, boolean deopt) {
216 if (overflow_stack) {
217 m2();
218 return null;
219 }
220 Object o = m1(deopt);
221 if (deopt) {
222 m2();
223 }
224 return o;
225 }
226
227 static public void main(String[] args) {
228 int c1;
229 // Call m2 from m3 recursively until stack overflow. Count the number of recursive calls.
230 try {
231 m3(true, false);
232 } catch(StackOverflowError soe) {
233 }
234 c1 = count;
235 // Force the compilation of m3() that will inline m1()
236 for (int i = 0; i < 20000; i++) {
237 m3(false, false);
238 }
239 count = 0;
240 // Force deoptimization of m3() in m1(), then return from m1()
241 // to m3(), call recursively m2(). If deoptimization correctly
242 // built the interpreter stack for m3()/m1() then we should be
243 // able to call m2() recursively as many times as before.
244 try {
245 m3(false, true);
246 } catch(StackOverflowError soe) {
247 }
248 if (c1 != count) {
249 System.out.println("Failed: init recursive calls: " + c1 + ". After deopt " + count);
250 System.exit(97);
251 } else {
252 System.out.println("PASSED");
253 }
254 }
255 }