changeset 23077:84586c6568dd

Use graph builder plugins in unit tests.
author Roland Schatz <roland.schatz@oracle.com>
date Tue, 24 Nov 2015 15:21:14 +0100
parents fb4379f87d4d
children b00ef2b9cd00
files graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CountedLoopTest.java graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/DataPatchInConstantsTest.java graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/DataPatchTest.java graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/ForeignCallDeoptimizeTest.java
diffstat 4 files changed, 61 insertions(+), 94 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CountedLoopTest.java	Tue Nov 24 15:26:32 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CountedLoopTest.java	Tue Nov 24 15:21:14 2015 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,6 +22,7 @@
  */
 package com.oracle.graal.compiler.test;
 
+import jdk.vm.ci.meta.JavaKind;
 import jdk.vm.ci.meta.ResolvedJavaMethod;
 
 import org.junit.Test;
@@ -232,13 +233,6 @@
         public void generate(NodeLIRBuilderTool gen) {
             gen.setResult(this, gen.operand(iv));
         }
-
-        @NodeIntrinsic
-        public static native int get(@ConstantNodeParameter IVProperty property, int iv);
-    }
-
-    protected static int getIntrinsic(IVProperty property, int iv) {
-        return IVPropertyNode.get(property, iv);
     }
 
     @Override
@@ -246,11 +240,18 @@
         Plugins plugins = super.getDefaultGraphBuilderPlugins();
         Registration r = new Registration(plugins.getInvocationPlugins(), CountedLoopTest.class);
 
-        ResolvedJavaMethod intrinsic = getResolvedJavaMethod("getIntrinsic");
         r.register2("get", IVProperty.class, int.class, new InvocationPlugin() {
             public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode arg1, ValueNode arg2) {
-                b.intrinsify(targetMethod, intrinsic, new ValueNode[]{arg1, arg2});
-                return true;
+                IVProperty property = null;
+                if (arg1.isConstant()) {
+                    property = getSnippetReflection().asObject(IVProperty.class, arg1.asJavaConstant());
+                }
+                if (property != null) {
+                    b.addPush(JavaKind.Int, new IVPropertyNode(property, arg2));
+                    return true;
+                } else {
+                    return false;
+                }
             }
         });
 
--- a/graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/DataPatchInConstantsTest.java	Tue Nov 24 15:26:32 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/DataPatchInConstantsTest.java	Tue Nov 24 15:21:14 2015 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,18 +29,17 @@
 import jdk.vm.ci.amd64.AMD64;
 import jdk.vm.ci.meta.AllocatableValue;
 import jdk.vm.ci.meta.Constant;
+import jdk.vm.ci.meta.JavaKind;
+import jdk.vm.ci.meta.ResolvedJavaMethod;
 
 import org.junit.Assume;
 import org.junit.Before;
 import org.junit.Test;
 
-import com.oracle.graal.api.replacements.ClassSubstitution;
-import com.oracle.graal.api.replacements.MethodSubstitution;
 import com.oracle.graal.asm.amd64.AMD64Address;
 import com.oracle.graal.asm.amd64.AMD64MacroAssembler;
 import com.oracle.graal.graph.NodeClass;
 import com.oracle.graal.hotspot.nodes.CompressionNode;
-import com.oracle.graal.hotspot.nodes.CompressionNode.CompressionOp;
 import com.oracle.graal.hotspot.nodes.type.NarrowOopStamp;
 import com.oracle.graal.hotspot.test.HotSpotGraalCompilerTest;
 import com.oracle.graal.lir.LIRInstruction;
@@ -51,6 +50,10 @@
 import com.oracle.graal.nodeinfo.NodeInfo;
 import com.oracle.graal.nodes.FixedWithNextNode;
 import com.oracle.graal.nodes.ValueNode;
+import com.oracle.graal.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
+import com.oracle.graal.nodes.graphbuilderconf.GraphBuilderContext;
+import com.oracle.graal.nodes.graphbuilderconf.InvocationPlugin;
+import com.oracle.graal.nodes.graphbuilderconf.InvocationPlugins.Registration;
 import com.oracle.graal.nodes.spi.LIRLowerable;
 import com.oracle.graal.nodes.spi.NodeLIRBuilderTool;
 
@@ -135,30 +138,28 @@
         test("compareSnippet");
     }
 
-    private static boolean initReplacements = false;
-
-    @Before
-    public void initReplacements() {
-        if (!initReplacements) {
-            getReplacements().registerSubstitutions(DataPatchInConstantsTest.class, DataPatchInConstantsTestSubstitutions.class);
-            initReplacements = true;
-        }
-    }
+    @Override
+    protected Plugins getDefaultGraphBuilderPlugins() {
+        Plugins plugins = super.getDefaultGraphBuilderPlugins();
+        Registration r = new Registration(plugins.getInvocationPlugins(), DataPatchInConstantsTest.class);
 
-    @ClassSubstitution(DataPatchInConstantsTest.class)
-    private static class DataPatchInConstantsTestSubstitutions {
+        r.register1("loadThroughPatch", Object.class, new InvocationPlugin() {
+            public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode arg) {
+                b.addPush(JavaKind.Object, new LoadThroughPatchNode(arg));
+                return true;
+            }
+        });
 
-        @MethodSubstitution
-        public static Object loadThroughPatch(Object obj) {
-            return LoadThroughPatchNode.load(obj);
-        }
+        r.register1("loadThroughCompressedPatch", Object.class, new InvocationPlugin() {
+            public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode arg) {
+                ValueNode compressed = b.add(CompressionNode.compress(arg, config().getOopEncoding()));
+                ValueNode patch = b.add(new LoadThroughPatchNode(compressed));
+                b.addPush(JavaKind.Object, CompressionNode.uncompress(patch, config().getOopEncoding()));
+                return true;
+            }
+        });
 
-        @MethodSubstitution
-        public static Object loadThroughCompressedPatch(Object obj) {
-            Object compressed = CompressionNode.compression(CompressionOp.Compress, obj, config().getOopEncoding());
-            Object patch = LoadThroughPatchNode.load(compressed);
-            return CompressionNode.compression(CompressionOp.Uncompress, patch, config().getOopEncoding());
-        }
+        return plugins;
     }
 
     @NodeInfo
@@ -181,9 +182,6 @@
             gen.append(new LoadThroughPatchOp(input.asConstant(), stamp() instanceof NarrowOopStamp, ret));
             generator.setResult(this, ret);
         }
-
-        @NodeIntrinsic
-        public static native Object load(Object obj);
     }
 
     private static final class LoadThroughPatchOp extends LIRInstruction {
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/DataPatchTest.java	Tue Nov 24 15:26:32 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/DataPatchTest.java	Tue Nov 24 15:21:14 2015 +0100
@@ -30,17 +30,12 @@
 import org.junit.Before;
 import org.junit.Test;
 
+import com.oracle.graal.api.directives.GraalDirectives;
 import com.oracle.graal.api.replacements.ClassSubstitution;
 import com.oracle.graal.api.replacements.MethodSubstitution;
 import com.oracle.graal.compiler.test.GraalCompilerTest;
-import com.oracle.graal.graph.NodeClass;
 import com.oracle.graal.hotspot.nodes.CompressionNode;
 import com.oracle.graal.hotspot.nodes.CompressionNode.CompressionOp;
-import com.oracle.graal.nodeinfo.NodeInfo;
-import com.oracle.graal.nodes.ValueNode;
-import com.oracle.graal.nodes.calc.FloatingNode;
-import com.oracle.graal.nodes.spi.LIRLowerable;
-import com.oracle.graal.nodes.spi.NodeLIRBuilderTool;
 
 public class DataPatchTest extends GraalCompilerTest {
 
@@ -93,27 +88,8 @@
         @MethodSubstitution
         public static Object compressUncompress(Object obj) {
             Object compressed = CompressionNode.compression(CompressionOp.Compress, obj, config.getOopEncoding());
-            Object proxy = ConstantFoldBarrier.wrap(compressed);
+            Object proxy = GraalDirectives.opaque(compressed);
             return CompressionNode.compression(CompressionOp.Uncompress, proxy, config.getOopEncoding());
         }
     }
-
-    @NodeInfo
-    private static final class ConstantFoldBarrier extends FloatingNode implements LIRLowerable {
-
-        public static final NodeClass<ConstantFoldBarrier> TYPE = NodeClass.create(ConstantFoldBarrier.class);
-        @Input protected ValueNode input;
-
-        public ConstantFoldBarrier(ValueNode input) {
-            super(TYPE, input.stamp());
-            this.input = input;
-        }
-
-        public void generate(NodeLIRBuilderTool generator) {
-            generator.setResult(this, generator.operand(input));
-        }
-
-        @NodeIntrinsic
-        public static native Object wrap(Object object);
-    }
 }
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/ForeignCallDeoptimizeTest.java	Tue Nov 24 15:26:32 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/ForeignCallDeoptimizeTest.java	Tue Nov 24 15:21:14 2015 +0100
@@ -22,50 +22,42 @@
  */
 package com.oracle.graal.hotspot.test;
 
+import jdk.vm.ci.meta.JavaKind;
+import jdk.vm.ci.meta.ResolvedJavaMethod;
+
 import org.junit.Test;
 
-import com.oracle.graal.api.replacements.ClassSubstitution;
-import com.oracle.graal.api.replacements.MethodSubstitution;
-import com.oracle.graal.api.test.Graal;
-import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor;
+import com.oracle.graal.compiler.common.spi.ForeignCallsProvider;
 import com.oracle.graal.compiler.test.GraalCompilerTest;
-import com.oracle.graal.graph.Node.ConstantNodeParameter;
-import com.oracle.graal.graph.Node.NodeIntrinsic;
 import com.oracle.graal.hotspot.meta.HotSpotForeignCallsProviderImpl;
+import com.oracle.graal.hotspot.meta.HotSpotProviders;
+import com.oracle.graal.nodes.ValueNode;
 import com.oracle.graal.nodes.extended.ForeignCallNode;
-import com.oracle.graal.nodes.spi.Replacements;
-import com.oracle.graal.runtime.RuntimeProvider;
+import com.oracle.graal.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
+import com.oracle.graal.nodes.graphbuilderconf.GraphBuilderContext;
+import com.oracle.graal.nodes.graphbuilderconf.InvocationPlugin;
 
 /**
  * Tests that deoptimization upon exception handling works.
  */
 public class ForeignCallDeoptimizeTest extends GraalCompilerTest {
 
-    private static boolean substitutionsInstalled;
+    @Override
+    protected Plugins getDefaultGraphBuilderPlugins() {
+        ForeignCallsProvider foreignCalls = ((HotSpotProviders) getProviders()).getForeignCalls();
 
-    public ForeignCallDeoptimizeTest() {
-        if (!substitutionsInstalled) {
-            Replacements replacements = Graal.getRequiredCapability(RuntimeProvider.class).getHostBackend().getProviders().getReplacements();
-            replacements.registerSubstitutions(ForeignCallDeoptimizeTest.class, Substitutions.class);
-            substitutionsInstalled = true;
-        }
-    }
+        Plugins ret = super.getDefaultGraphBuilderPlugins();
+        ret.getInvocationPlugins().register(new InvocationPlugin() {
 
-    @ClassSubstitution(ForeignCallDeoptimizeTest.class)
-    static class Substitutions {
-
-        @MethodSubstitution(isStatic = true)
-        static int testCallInt(int value) {
-            return testDeoptimizeCallInt(HotSpotForeignCallsProviderImpl.TEST_DEOPTIMIZE_CALL_INT, value);
-        }
+            public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode arg) {
+                ForeignCallNode node = new ForeignCallNode(foreignCalls, HotSpotForeignCallsProviderImpl.TEST_DEOPTIMIZE_CALL_INT, arg);
+                b.addPush(JavaKind.Int, node);
+                return true;
+            }
+        }, ForeignCallDeoptimizeTest.class, "testCallInt", int.class);
+        return ret;
     }
 
-    /**
-     * Exercise deoptimization inside of a non leaf runtime call.
-     */
-    @NodeIntrinsic(ForeignCallNode.class)
-    static native int testDeoptimizeCallInt(@ConstantNodeParameter ForeignCallDescriptor descriptor, int value);
-
     public static int testCallInt(int value) {
         return value;
     }