28
29 import org.graalvm.compiler.api.directives.GraalDirectives;
30 import org.graalvm.compiler.code.SourceStackTraceBailoutException;
31 import org.graalvm.compiler.core.test.GraalCompilerTest;
32 import org.graalvm.compiler.phases.OptimisticOptimizations;
33 import org.graalvm.compiler.phases.OptimisticOptimizations.Optimization;
34 import org.graalvm.compiler.phases.tiers.HighTierContext;
35
36 public class PEAAssertionsTest extends GraalCompilerTest {
37
38 /**
39 * These tests assume all code paths are reachable so disable profile based dead code removal.
40 */
41 @Override
42 protected HighTierContext getDefaultHighTierContext() {
43 return new HighTierContext(getProviders(), getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL.remove(Optimization.RemoveNeverExecutedCode));
44 }
45
46 public static Object field;
47
48 @SuppressWarnings("deprecation")
49 public static void snippet1(int i) {
50 Integer object = new Integer(i);
51 GraalDirectives.ensureVirtualized(object);
52 }
53
54 @Test
55 public void test1() {
56 test("snippet1", 1);
57 }
58
59 @SuppressWarnings("deprecation")
60 public static void snippet2(int i) {
61 Integer object = new Integer(i);
62 GraalDirectives.ensureVirtualized(object);
63 field = object; // assert here
64 }
65
66 @Test(expected = SourceStackTraceBailoutException.class)
67 public void test2() {
68 test("snippet2", 1);
69 }
70
71 @SuppressWarnings("deprecation")
72 public static void snippet3(int i) {
73 Integer object = new Integer(i);
74 field = object;
75 GraalDirectives.ensureVirtualized(object); // assert here
76 }
77
78 @Test(expected = SourceStackTraceBailoutException.class)
79 public void test3() {
80 test("snippet3", 1);
81 }
82
83 @SuppressWarnings("deprecation")
84 public static void snippetHere1(int i) {
85 Integer object = new Integer(i);
86 GraalDirectives.ensureVirtualizedHere(object);
87 }
88
89 @Test
90 public void testHere1() {
91 test("snippetHere1", 1);
92 }
93
94 @SuppressWarnings("deprecation")
95 public static void snippetHere2(int i) {
96 Integer object = new Integer(i);
97 GraalDirectives.ensureVirtualizedHere(object);
98 field = object;
99 }
100
101 @Test
102 public void testHere2() {
103 test("snippetHere2", 1);
104 }
105
106 @SuppressWarnings("deprecation")
107 public static void snippetHere3(int i) {
108 Integer object = new Integer(i);
109 field = object;
110 GraalDirectives.ensureVirtualizedHere(object); // assert here
111 }
112
113 @Test(expected = SourceStackTraceBailoutException.class)
114 public void testHere3() {
115 test("snippetHere3", 1);
116 }
117
118 public static void snippetBoxing1(int i) {
119 Integer object = i;
120 GraalDirectives.ensureVirtualizedHere(object); // assert here
121 }
122
123 @Test(expected = SourceStackTraceBailoutException.class)
124 public void testBoxing1() {
125 test("snippetBoxing1", 1);
126 }
127
128 public static void snippetBoxing2(int i) {
129 Integer object = i;
130 GraalDirectives.ensureVirtualized(object); // assert here
131 field = object;
132 }
133
134 @Test(expected = SourceStackTraceBailoutException.class)
135 public void testBoxing2() {
136 test("snippetBoxing2", 1);
137 }
138
139 @SuppressWarnings("deprecation")
140 public static void snippetControlFlow1(boolean b, int i) {
141 Integer object = new Integer(i);
142 if (b) {
143 GraalDirectives.ensureVirtualized(object);
144 }
145 GraalDirectives.controlFlowAnchor();
146 field = object;
147 }
148
149 @Test
150 public void testControlFlow1() {
151 test("snippetControlFlow1", true, 1);
152 }
153
154 @SuppressWarnings("deprecation")
155 public static void snippetControlFlow2(boolean b, int i) {
156 Integer object = new Integer(i);
157 if (b) {
158 GraalDirectives.ensureVirtualized(object);
159 } else {
160 GraalDirectives.ensureVirtualized(object);
161 }
162 GraalDirectives.controlFlowAnchor();
163 field = object; // assert here
164 }
165
166 @Test(expected = SourceStackTraceBailoutException.class)
167 public void testControlFlow2() {
168 test("snippetControlFlow2", true, 1);
169 }
170
171 @SuppressWarnings("deprecation")
172 public static void snippetControlFlow3(boolean b, int i) {
173 Integer object = new Integer(i);
174 GraalDirectives.ensureVirtualized(object);
175 if (b) {
176 field = 1;
177 } else {
178 field = 2;
179 }
180 GraalDirectives.controlFlowAnchor();
181 field = object; // assert here
182 }
183
184 @Test(expected = SourceStackTraceBailoutException.class)
185 public void testControlFlow3() {
186 test("snippetControlFlow3", true, 1);
187 }
188
189 @SuppressWarnings("deprecation")
190 public static void snippetControlFlow4(boolean b, int i) {
191 Integer object = new Integer(i);
192 if (b) {
193 field = object;
194 } else {
195 field = 2;
196 }
197 GraalDirectives.ensureVirtualized(object); // assert here
198 }
199
200 @Test(expected = SourceStackTraceBailoutException.class)
201 public void testControlFlow4() {
202 test("snippetControlFlow4", true, 1);
203 }
204
205 @SuppressWarnings("deprecation")
206 public static void snippetControlFlow5(boolean b, int i) {
207 Integer object = new Integer(i);
208 if (b) {
209 field = object;
210 } else {
211 field = 2;
212 }
213 GraalDirectives.ensureVirtualizedHere(object); // assert here
214 }
215
216 @Test(expected = SourceStackTraceBailoutException.class)
217 public void testControlFlow5() {
218 test("snippetControlFlow5", true, 1);
219 }
220
221 public static final class TestClass {
222 Object a;
223 Object b;
224 }
225
226 @SuppressWarnings("deprecation")
227 public static void snippetIndirect1(boolean b, int i) {
228 Integer object = new Integer(i);
229 TestClass t = new TestClass();
230 t.a = object;
231 GraalDirectives.ensureVirtualized(object);
232
233 if (b) {
234 field = t; // assert here
235 } else {
236 field = 2;
237 }
238 }
239
240 @Test(expected = SourceStackTraceBailoutException.class)
241 public void testIndirect1() {
242 test("snippetIndirect1", true, 1);
243 }
244
245 @SuppressWarnings("deprecation")
246 public static void snippetIndirect2(boolean b, int i) {
247 Integer object = new Integer(i);
248 TestClass t = new TestClass();
249 t.a = object;
250 GraalDirectives.ensureVirtualized(t);
251
252 if (b) {
253 field = object;
254 } else {
255 field = 2;
256 }
257 }
258
259 @Test
260 public void testIndirect2() {
261 test("snippetIndirect2", true, 1);
262 }
263 }
|
28
29 import org.graalvm.compiler.api.directives.GraalDirectives;
30 import org.graalvm.compiler.code.SourceStackTraceBailoutException;
31 import org.graalvm.compiler.core.test.GraalCompilerTest;
32 import org.graalvm.compiler.phases.OptimisticOptimizations;
33 import org.graalvm.compiler.phases.OptimisticOptimizations.Optimization;
34 import org.graalvm.compiler.phases.tiers.HighTierContext;
35
36 public class PEAAssertionsTest extends GraalCompilerTest {
37
38 /**
39 * These tests assume all code paths are reachable so disable profile based dead code removal.
40 */
41 @Override
42 protected HighTierContext getDefaultHighTierContext() {
43 return new HighTierContext(getProviders(), getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL.remove(Optimization.RemoveNeverExecutedCode));
44 }
45
46 public static Object field;
47
48 @SuppressWarnings({"deprecation", "unused"})
49 public static void snippet1(int i) {
50 Integer object = new Integer(i);
51 GraalDirectives.ensureVirtualized(object);
52 }
53
54 @Test
55 public void test1() {
56 test("snippet1", 1);
57 }
58
59 @SuppressWarnings({"deprecation", "unused"})
60 public static void snippet2(int i) {
61 Integer object = new Integer(i);
62 GraalDirectives.ensureVirtualized(object);
63 field = object; // assert here
64 }
65
66 @Test(expected = SourceStackTraceBailoutException.class)
67 public void test2() {
68 test("snippet2", 1);
69 }
70
71 @SuppressWarnings({"deprecation", "unused"})
72 public static void snippet3(int i) {
73 Integer object = new Integer(i);
74 field = object;
75 GraalDirectives.ensureVirtualized(object); // assert here
76 }
77
78 @Test(expected = SourceStackTraceBailoutException.class)
79 public void test3() {
80 test("snippet3", 1);
81 }
82
83 @SuppressWarnings({"deprecation", "unused"})
84 public static void snippetHere1(int i) {
85 Integer object = new Integer(i);
86 GraalDirectives.ensureVirtualizedHere(object);
87 }
88
89 @Test
90 public void testHere1() {
91 test("snippetHere1", 1);
92 }
93
94 @SuppressWarnings({"deprecation", "unused"})
95 public static void snippetHere2(int i) {
96 Integer object = new Integer(i);
97 GraalDirectives.ensureVirtualizedHere(object);
98 field = object;
99 }
100
101 @Test
102 public void testHere2() {
103 test("snippetHere2", 1);
104 }
105
106 @SuppressWarnings({"deprecation", "unused"})
107 public static void snippetHere3(int i) {
108 Integer object = new Integer(i);
109 field = object;
110 GraalDirectives.ensureVirtualizedHere(object); // assert here
111 }
112
113 @Test(expected = SourceStackTraceBailoutException.class)
114 public void testHere3() {
115 test("snippetHere3", 1);
116 }
117
118 public static void snippetBoxing1(int i) {
119 Integer object = i;
120 GraalDirectives.ensureVirtualizedHere(object); // assert here
121 }
122
123 @Test(expected = SourceStackTraceBailoutException.class)
124 public void testBoxing1() {
125 test("snippetBoxing1", 1);
126 }
127
128 public static void snippetBoxing2(int i) {
129 Integer object = i;
130 GraalDirectives.ensureVirtualized(object); // assert here
131 field = object;
132 }
133
134 @Test(expected = SourceStackTraceBailoutException.class)
135 public void testBoxing2() {
136 test("snippetBoxing2", 1);
137 }
138
139 @SuppressWarnings({"deprecation", "unused"})
140 public static void snippetControlFlow1(boolean b, int i) {
141 Integer object = new Integer(i);
142 if (b) {
143 GraalDirectives.ensureVirtualized(object);
144 }
145 GraalDirectives.controlFlowAnchor();
146 field = object;
147 }
148
149 @Test
150 public void testControlFlow1() {
151 test("snippetControlFlow1", true, 1);
152 }
153
154 @SuppressWarnings({"deprecation", "unused"})
155 public static void snippetControlFlow2(boolean b, int i) {
156 Integer object = new Integer(i);
157 if (b) {
158 GraalDirectives.ensureVirtualized(object);
159 } else {
160 GraalDirectives.ensureVirtualized(object);
161 }
162 GraalDirectives.controlFlowAnchor();
163 field = object; // assert here
164 }
165
166 @Test(expected = SourceStackTraceBailoutException.class)
167 public void testControlFlow2() {
168 test("snippetControlFlow2", true, 1);
169 }
170
171 @SuppressWarnings({"deprecation", "unused"})
172 public static void snippetControlFlow3(boolean b, int i) {
173 Integer object = new Integer(i);
174 GraalDirectives.ensureVirtualized(object);
175 if (b) {
176 field = 1;
177 } else {
178 field = 2;
179 }
180 GraalDirectives.controlFlowAnchor();
181 field = object; // assert here
182 }
183
184 @Test(expected = SourceStackTraceBailoutException.class)
185 public void testControlFlow3() {
186 test("snippetControlFlow3", true, 1);
187 }
188
189 @SuppressWarnings({"deprecation", "unused"})
190 public static void snippetControlFlow4(boolean b, int i) {
191 Integer object = new Integer(i);
192 if (b) {
193 field = object;
194 } else {
195 field = 2;
196 }
197 GraalDirectives.ensureVirtualized(object); // assert here
198 }
199
200 @Test(expected = SourceStackTraceBailoutException.class)
201 public void testControlFlow4() {
202 test("snippetControlFlow4", true, 1);
203 }
204
205 @SuppressWarnings({"deprecation", "unused"})
206 public static void snippetControlFlow5(boolean b, int i) {
207 Integer object = new Integer(i);
208 if (b) {
209 field = object;
210 } else {
211 field = 2;
212 }
213 GraalDirectives.ensureVirtualizedHere(object); // assert here
214 }
215
216 @Test(expected = SourceStackTraceBailoutException.class)
217 public void testControlFlow5() {
218 test("snippetControlFlow5", true, 1);
219 }
220
221 public static final class TestClass {
222 Object a;
223 Object b;
224 }
225
226 @SuppressWarnings({"deprecation", "unused"})
227 public static void snippetIndirect1(boolean b, int i) {
228 Integer object = new Integer(i);
229 TestClass t = new TestClass();
230 t.a = object;
231 GraalDirectives.ensureVirtualized(object);
232
233 if (b) {
234 field = t; // assert here
235 } else {
236 field = 2;
237 }
238 }
239
240 @Test(expected = SourceStackTraceBailoutException.class)
241 public void testIndirect1() {
242 test("snippetIndirect1", true, 1);
243 }
244
245 @SuppressWarnings({"deprecation", "unused"})
246 public static void snippetIndirect2(boolean b, int i) {
247 Integer object = new Integer(i);
248 TestClass t = new TestClass();
249 t.a = object;
250 GraalDirectives.ensureVirtualized(t);
251
252 if (b) {
253 field = object;
254 } else {
255 field = 2;
256 }
257 }
258
259 @Test
260 public void testIndirect2() {
261 test("snippetIndirect2", true, 1);
262 }
263 }
|