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 package org.graalvm.compiler.core.test;
24
25 import org.junit.Assert;
26 import org.junit.Test;
27
28 import org.graalvm.compiler.core.phases.HighTier;
29 import org.graalvm.compiler.core.phases.MidTier;
30 import org.graalvm.compiler.nodes.InvokeNode;
31 import org.graalvm.compiler.nodes.StructuredGraph;
32 import org.graalvm.compiler.nodes.extended.LoadHubNode;
33 import org.graalvm.compiler.nodes.extended.LoadMethodNode;
34 import org.graalvm.compiler.phases.OptimisticOptimizations;
35 import org.graalvm.compiler.phases.tiers.MidTierContext;
36
37 public class HashCodeTest extends GraalCompilerTest {
38
39 static class OverrideHashCode {
40 @Override
41 public int hashCode() {
42 return 42;
43 }
44 }
45
46 static final class DontOverrideHashCode {
47 }
48
49 public static final Object NonOverridingConstant = new Object();
50 public static final Object OverridingConstant = new OverrideHashCode();
51
52 private static void initialize(Class<?> c) {
53 try {
134 return o.hashCode();
135 }
136
137 @Test
138 public void test08() {
139 initialize(Appendable.class);
140 checkForGuardedIntrinsicPattern("hashCodeInterface");
141 checkForGuardedIntrinsicPattern("hashCodeSnippet01");
142 }
143
144 private void checkForGuardedIntrinsicPattern(String name) {
145 StructuredGraph g = parseForCompile(getResolvedJavaMethod(name));
146 Assert.assertEquals(1, g.getNodes().filter(InvokeNode.class).count());
147 Assert.assertEquals(1, g.getNodes().filter(LoadHubNode.class).count());
148 Assert.assertEquals(1, g.getNodes().filter(LoadMethodNode.class).count());
149 }
150
151 @SuppressWarnings("try")
152 private StructuredGraph buildGraphAfterMidTier(String name) {
153 StructuredGraph g = parseForCompile(getResolvedJavaMethod(name));
154 new HighTier().apply(g, getDefaultHighTierContext());
155 new MidTier().apply(g, new MidTierContext(getProviders(), getTargetProvider(), OptimisticOptimizations.ALL, g.getProfilingInfo()));
156 return g;
157 }
158
159 }
|
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 package org.graalvm.compiler.core.test;
24
25 import org.junit.Assert;
26 import org.junit.Test;
27
28 import org.graalvm.compiler.core.phases.HighTier;
29 import org.graalvm.compiler.core.phases.MidTier;
30 import org.graalvm.compiler.nodes.InvokeNode;
31 import org.graalvm.compiler.nodes.StructuredGraph;
32 import org.graalvm.compiler.nodes.extended.LoadHubNode;
33 import org.graalvm.compiler.nodes.extended.LoadMethodNode;
34 import org.graalvm.compiler.options.OptionValues;
35 import org.graalvm.compiler.phases.OptimisticOptimizations;
36 import org.graalvm.compiler.phases.tiers.MidTierContext;
37
38 public class HashCodeTest extends GraalCompilerTest {
39
40 static class OverrideHashCode {
41 @Override
42 public int hashCode() {
43 return 42;
44 }
45 }
46
47 static final class DontOverrideHashCode {
48 }
49
50 public static final Object NonOverridingConstant = new Object();
51 public static final Object OverridingConstant = new OverrideHashCode();
52
53 private static void initialize(Class<?> c) {
54 try {
135 return o.hashCode();
136 }
137
138 @Test
139 public void test08() {
140 initialize(Appendable.class);
141 checkForGuardedIntrinsicPattern("hashCodeInterface");
142 checkForGuardedIntrinsicPattern("hashCodeSnippet01");
143 }
144
145 private void checkForGuardedIntrinsicPattern(String name) {
146 StructuredGraph g = parseForCompile(getResolvedJavaMethod(name));
147 Assert.assertEquals(1, g.getNodes().filter(InvokeNode.class).count());
148 Assert.assertEquals(1, g.getNodes().filter(LoadHubNode.class).count());
149 Assert.assertEquals(1, g.getNodes().filter(LoadMethodNode.class).count());
150 }
151
152 @SuppressWarnings("try")
153 private StructuredGraph buildGraphAfterMidTier(String name) {
154 StructuredGraph g = parseForCompile(getResolvedJavaMethod(name));
155 OptionValues options = getInitialOptions();
156 new HighTier(options).apply(g, getDefaultHighTierContext());
157 new MidTier(options).apply(g, new MidTierContext(getProviders(), getTargetProvider(), OptimisticOptimizations.ALL, g.getProfilingInfo()));
158 return g;
159 }
160
161 }
|