# HG changeset patch # User Roland Schatz # Date 1448374874 -3600 # Node ID 84586c6568dd8722c0482bc33585c9af361bc2bb # Parent fb4379f87d4d93b1dc1e2b1cf2a912e33a7c7452 Use graph builder plugins in unit tests. diff -r fb4379f87d4d -r 84586c6568dd graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CountedLoopTest.java --- 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; + } } }); diff -r fb4379f87d4d -r 84586c6568dd graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/DataPatchInConstantsTest.java --- 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 { diff -r fb4379f87d4d -r 84586c6568dd graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/DataPatchTest.java --- 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 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); - } } diff -r fb4379f87d4d -r 84586c6568dd graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/ForeignCallDeoptimizeTest.java --- 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; }