Mercurial > hg > graal-compiler
changeset 23000:e7a33f98252a
NodeLIRBuilder: generalize allowObjectConstantToStackMove to allowConstantToStackMove and move it to MoveFactory.
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Mon, 16 Nov 2015 15:46:07 +0100 |
parents | 585a12d31a00 |
children | 8fbac394a175 |
files | graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64MoveFactory.java graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCMoveFactory.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotMoveFactory.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGeneratorTool.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/VerifyingMoveFactory.java |
diffstat | 6 files changed, 31 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64MoveFactory.java Tue Nov 17 12:20:13 2015 +0100 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64MoveFactory.java Mon Nov 16 15:46:07 2015 +0100 @@ -44,7 +44,7 @@ import com.oracle.graal.lir.amd64.AMD64Move.MoveToRegOp; import com.oracle.graal.lir.framemap.FrameMapBuilder; -public class AMD64MoveFactory extends AMD64MoveFactoryBase { +public abstract class AMD64MoveFactory extends AMD64MoveFactoryBase { private final FrameMapBuilder frameMapBuilder;
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCMoveFactory.java Tue Nov 17 12:20:13 2015 +0100 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCMoveFactory.java Mon Nov 16 15:46:07 2015 +0100 @@ -106,4 +106,10 @@ return false; } } + + @Override + public boolean allowConstantToStackMove(Constant value) { + return false; + } + }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java Tue Nov 17 12:20:13 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java Mon Nov 16 15:46:07 2015 +0100 @@ -67,6 +67,7 @@ import com.oracle.graal.lir.FullInfopointOp; import com.oracle.graal.lir.LIRFrameState; import com.oracle.graal.lir.LIRInstruction; +import com.oracle.graal.lir.LIRValueUtil; import com.oracle.graal.lir.LabelRef; import com.oracle.graal.lir.SimpleInfopointOp; import com.oracle.graal.lir.StandardOp.JumpOp; @@ -81,7 +82,6 @@ import com.oracle.graal.nodes.AbstractBeginNode; import com.oracle.graal.nodes.AbstractEndNode; import com.oracle.graal.nodes.AbstractMergeNode; -import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.DeoptimizingNode; import com.oracle.graal.nodes.DirectCallTargetNode; import com.oracle.graal.nodes.FixedNode; @@ -144,13 +144,6 @@ nodeMatchRules.lirBuilder = this; } - /** - * @return {@code true} if object constant to stack moves are supported. - */ - protected boolean allowObjectConstantToStackMove() { - return true; - } - public NodeMatchRules getNodeMatchRules() { return nodeMatchRules; } @@ -300,10 +293,11 @@ * new Variable. */ value = gen.emitMove(value); - } else if (!allowObjectConstantToStackMove() && node instanceof ConstantNode && !value.getLIRKind().isValue()) { + } else if (LIRValueUtil.isConstantValue(value) && !gen.getMoveFactory().allowConstantToStackMove(LIRValueUtil.asConstant(value))) { /* - * Object constants are not allowed as inputs for PHIs. Explicitly create a copy of - * this value to force it into a register. The new variable is only used in the PHI. + * Some constants are not allowed as inputs for PHIs in certain backends. Explicitly + * create a copy of this value to force it into a register. The new variable is only + * used in the PHI. */ Variable result = gen.newVariable(value.getLIRKind()); gen.emitMove(result, value);
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotMoveFactory.java Tue Nov 17 12:20:13 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotMoveFactory.java Mon Nov 16 15:46:07 2015 +0100 @@ -23,6 +23,7 @@ package com.oracle.graal.hotspot.amd64; import jdk.vm.ci.hotspot.HotSpotCompressedNullConstant; +import jdk.vm.ci.hotspot.HotSpotConstant; import jdk.vm.ci.hotspot.HotSpotMetaspaceConstant; import jdk.vm.ci.hotspot.HotSpotObjectConstant; import jdk.vm.ci.meta.AllocatableValue; @@ -51,6 +52,14 @@ } @Override + public boolean allowConstantToStackMove(Constant value) { + if (value instanceof HotSpotConstant) { + return ((HotSpotConstant) value).isCompressed(); + } + return true; + } + + @Override public AMD64LIRInstruction createLoad(AllocatableValue dst, Constant src) { if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(src)) { return super.createLoad(dst, JavaConstant.INT_0);
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGeneratorTool.java Tue Nov 17 12:20:13 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGeneratorTool.java Mon Nov 16 15:46:07 2015 +0100 @@ -67,6 +67,12 @@ */ boolean canInlineConstant(JavaConstant c); + /** + * @param constant The constant that might be moved to a stack slot. + * @return {@code true} if constant to stack moves are supported for this constant. + */ + boolean allowConstantToStackMove(Constant constant); + LIRInstruction createMove(AllocatableValue result, Value input); LIRInstruction createStackMove(AllocatableValue result, AllocatableValue input);
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/VerifyingMoveFactory.java Tue Nov 17 12:20:13 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/VerifyingMoveFactory.java Mon Nov 16 15:46:07 2015 +0100 @@ -54,6 +54,10 @@ return inner.canInlineConstant(c); } + public boolean allowConstantToStackMove(Constant constant) { + return inner.allowConstantToStackMove(constant); + } + public LIRInstruction createMove(AllocatableValue result, Value input) { LIRInstruction inst = inner.createMove(result, input); assert checkResult(inst, result, input);