29 import java.util.Arrays; |
29 import java.util.Arrays; |
30 |
30 |
31 import org.graalvm.compiler.nodes.ReturnNode; |
31 import org.graalvm.compiler.nodes.ReturnNode; |
32 import org.graalvm.compiler.nodes.StructuredGraph; |
32 import org.graalvm.compiler.nodes.StructuredGraph; |
33 import org.graalvm.compiler.phases.OptimisticOptimizations; |
33 import org.graalvm.compiler.phases.OptimisticOptimizations; |
34 import org.graalvm.compiler.phases.common.CanonicalizerPhase; |
|
35 import org.graalvm.compiler.phases.tiers.HighTierContext; |
34 import org.graalvm.compiler.phases.tiers.HighTierContext; |
36 import org.graalvm.compiler.replacements.nodes.ArrayEqualsNode; |
35 import org.graalvm.compiler.replacements.nodes.ArrayEqualsNode; |
37 import org.graalvm.compiler.virtual.phases.ea.PartialEscapePhase; |
36 import org.graalvm.compiler.virtual.phases.ea.PartialEscapePhase; |
38 import org.junit.Assert; |
37 import org.junit.Assert; |
39 import org.junit.Test; |
38 import org.junit.Test; |
130 @Test |
129 @Test |
131 public void testCanonicalLength() { |
130 public void testCanonicalLength() { |
132 StructuredGraph graph = parseEager("testCanonicalLengthSnippet", AllowAssumptions.NO); |
131 StructuredGraph graph = parseEager("testCanonicalLengthSnippet", AllowAssumptions.NO); |
133 HighTierContext context = new HighTierContext(getProviders(), getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL); |
132 HighTierContext context = new HighTierContext(getProviders(), getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL); |
134 createInliningPhase().apply(graph, context); |
133 createInliningPhase().apply(graph, context); |
135 new CanonicalizerPhase().apply(graph, getProviders()); |
134 createCanonicalizerPhase().apply(graph, getProviders()); |
136 |
135 |
137 Assert.assertTrue(graph.getNodes(ReturnNode.TYPE).first().result().asJavaConstant().asLong() == 0); |
136 Assert.assertTrue(graph.getNodes(ReturnNode.TYPE).first().result().asJavaConstant().asLong() == 0); |
138 } |
137 } |
139 |
138 |
140 public static final int[] constantArray3 = new int[]{1, 2, 3}; |
139 public static final int[] constantArray3 = new int[]{1, 2, 3}; |
146 @Test |
145 @Test |
147 public void testCanonicalEqual() { |
146 public void testCanonicalEqual() { |
148 StructuredGraph graph = parseEager("testCanonicalEqualSnippet", AllowAssumptions.NO); |
147 StructuredGraph graph = parseEager("testCanonicalEqualSnippet", AllowAssumptions.NO); |
149 HighTierContext context = new HighTierContext(getProviders(), getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL); |
148 HighTierContext context = new HighTierContext(getProviders(), getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL); |
150 createInliningPhase().apply(graph, context); |
149 createInliningPhase().apply(graph, context); |
151 new CanonicalizerPhase().apply(graph, getProviders()); |
150 createCanonicalizerPhase().apply(graph, getProviders()); |
152 |
151 |
153 Assert.assertTrue(graph.getNodes(ReturnNode.TYPE).first().result().asJavaConstant().asLong() == 1); |
152 Assert.assertTrue(graph.getNodes(ReturnNode.TYPE).first().result().asJavaConstant().asLong() == 1); |
154 } |
153 } |
155 |
154 |
156 public static boolean testCanonicalEqualSnippet() { |
155 public static boolean testCanonicalEqualSnippet() { |
160 @Test |
159 @Test |
161 public void testVirtualEqual() { |
160 public void testVirtualEqual() { |
162 StructuredGraph graph = parseEager("testVirtualEqualSnippet", AllowAssumptions.NO); |
161 StructuredGraph graph = parseEager("testVirtualEqualSnippet", AllowAssumptions.NO); |
163 HighTierContext context = new HighTierContext(getProviders(), getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL); |
162 HighTierContext context = new HighTierContext(getProviders(), getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL); |
164 createInliningPhase().apply(graph, context); |
163 createInliningPhase().apply(graph, context); |
165 new CanonicalizerPhase().apply(graph, getProviders()); |
164 createCanonicalizerPhase().apply(graph, getProviders()); |
166 new PartialEscapePhase(false, new CanonicalizerPhase(), graph.getOptions()).apply(graph, context); |
165 new PartialEscapePhase(false, this.createCanonicalizerPhase(), graph.getOptions()).apply(graph, context); |
167 new CanonicalizerPhase().apply(graph, getProviders()); |
166 createCanonicalizerPhase().apply(graph, getProviders()); |
168 |
167 |
169 Assert.assertTrue(graph.getNodes(ReturnNode.TYPE).first().result().asJavaConstant().asLong() == 1); |
168 Assert.assertTrue(graph.getNodes(ReturnNode.TYPE).first().result().asJavaConstant().asLong() == 1); |
170 } |
169 } |
171 |
170 |
172 public static boolean testVirtualEqualSnippet() { |
171 public static boolean testVirtualEqualSnippet() { |
178 @Test |
177 @Test |
179 public void testVirtualNotEqual() { |
178 public void testVirtualNotEqual() { |
180 StructuredGraph graph = parseEager("testVirtualNotEqualSnippet", AllowAssumptions.NO); |
179 StructuredGraph graph = parseEager("testVirtualNotEqualSnippet", AllowAssumptions.NO); |
181 HighTierContext context = getDefaultHighTierContext(); |
180 HighTierContext context = getDefaultHighTierContext(); |
182 createInliningPhase().apply(graph, context); |
181 createInliningPhase().apply(graph, context); |
183 new CanonicalizerPhase().apply(graph, getProviders()); |
182 createCanonicalizerPhase().apply(graph, getProviders()); |
184 new PartialEscapePhase(false, new CanonicalizerPhase(), graph.getOptions()).apply(graph, context); |
183 new PartialEscapePhase(false, this.createCanonicalizerPhase(), graph.getOptions()).apply(graph, context); |
185 new CanonicalizerPhase().apply(graph, getProviders()); |
184 createCanonicalizerPhase().apply(graph, getProviders()); |
186 |
185 |
187 Assert.assertTrue(graph.getNodes(ReturnNode.TYPE).first().result().asJavaConstant().asLong() == 0); |
186 Assert.assertTrue(graph.getNodes(ReturnNode.TYPE).first().result().asJavaConstant().asLong() == 0); |
188 } |
187 } |
189 |
188 |
190 public static boolean testVirtualNotEqualSnippet(int x) { |
189 public static boolean testVirtualNotEqualSnippet(int x) { |