Mercurial > hg > graal-compiler
changeset 15086:22acaa9fb7f8
Don't rely on every memory read reading the value kind of the access location.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Mon, 14 Apr 2014 15:10:10 +0200 |
parents | 9f1995f6d9a3 |
children | f3e74d317e83 |
files | graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64MemoryPeephole.java graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotMemoryPeephole.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatConvertNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SignExtendNode.java |
diffstat | 4 files changed, 28 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64MemoryPeephole.java Mon Apr 14 15:07:23 2014 +0200 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64MemoryPeephole.java Mon Apr 14 15:10:10 2014 +0200 @@ -76,6 +76,10 @@ return null; } + protected Kind getMemoryKind(Access access) { + return (Kind) gen.getLIRGenerator().getPlatformKind(access.asNode().stamp()); + } + protected AMD64AddressValue makeAddress(Access access) { return (AMD64AddressValue) access.accessLocation().generateAddress(gen, gen.operand(access.object())); } @@ -90,7 +94,7 @@ } } ensureEvaluated(other); - return gen.getLIRGenerator().emitBinaryMemory(op, access.accessLocation().getValueKind(), gen.getLIRGeneratorTool().asAllocatable(gen.operand(other)), makeAddress(access), getState(access)); + return gen.getLIRGenerator().emitBinaryMemory(op, getMemoryKind(access), gen.getLIRGeneratorTool().asAllocatable(gen.operand(other)), makeAddress(access), getState(access)); } /** @@ -129,7 +133,7 @@ @Override public Value emitAddMemory(ValueNode x, ValueNode y, Access access) { - switch (access.accessLocation().getValueKind()) { + switch (getMemoryKind(access)) { case Int: return emitBinaryMemory(IADD, true, x, y, access); case Long: @@ -145,7 +149,7 @@ @Override public Value emitSubMemory(ValueNode x, ValueNode y, Access access) { - switch (access.accessLocation().getValueKind()) { + switch (getMemoryKind(access)) { case Int: return emitBinaryMemory(ISUB, false, x, y, access); case Long: @@ -161,7 +165,7 @@ @Override public Value emitMulMemory(ValueNode x, ValueNode y, Access access) { - switch (access.accessLocation().getValueKind()) { + switch (getMemoryKind(access)) { case Int: return emitBinaryMemory(IMUL, true, x, y, access); case Long: @@ -187,7 +191,7 @@ @Override public Value emitAndMemory(ValueNode x, ValueNode y, Access access) { - Kind kind = access.accessLocation().getValueKind(); + Kind kind = getMemoryKind(access); switch (kind) { case Int: return emitBinaryMemory(IAND, true, x, y, access); @@ -224,7 +228,7 @@ @Override public Value emitOrMemory(ValueNode x, ValueNode y, Access access) { - switch (access.accessLocation().getValueKind()) { + switch (getMemoryKind(access)) { case Int: return emitBinaryMemory(IOR, true, x, y, access); case Long: @@ -236,7 +240,7 @@ @Override public Value emitXorMemory(ValueNode x, ValueNode y, Access access) { - switch (access.accessLocation().getValueKind()) { + switch (getMemoryKind(access)) { case Int: return emitBinaryMemory(IXOR, true, x, y, access); case Long: @@ -249,7 +253,7 @@ @Override public Value emitReinterpretMemory(Stamp stamp, Access access) { PlatformKind to = gen.getLIRGenerator().getPlatformKind(stamp); - Kind from = access.accessLocation().getValueKind(); + Kind from = getMemoryKind(access); assert to != from : "should have been eliminated"; /* @@ -355,7 +359,7 @@ @Override public Value emitZeroExtendMemory(int fromBits, int toBits, Access access) { assert fromBits != toBits; - Kind memoryKind = access.accessLocation().getValueKind(); + Kind memoryKind = getMemoryKind(access); if (memoryKind.getBitCount() != fromBits && !memoryKind.isUnsigned()) { // The memory being read from is signed and smaller than the result size so // this is a sign extension to inputBits followed by a zero extension to resultBits @@ -399,7 +403,7 @@ private boolean emitIntegerTestBranchMemory(ValueNode left, ValueNode right, Access access, LabelRef trueLabel, LabelRef falseLabel, double trueLabelProbability) { ValueNode other = selectOtherInput(left, right, access); - Kind kind = access.accessLocation().getValueKind(); + Kind kind = getMemoryKind(access); if (other.isConstant()) { if (kind != kind.getStackKind()) { return false; @@ -439,7 +443,7 @@ protected boolean emitCompareBranchMemory(ValueNode left, ValueNode right, Access access, Condition cond, boolean unorderedIsTrue, LabelRef trueLabel, LabelRef falseLabel, double trueLabelProbability) { ValueNode other = selectOtherInput(left, right, access); - Kind kind = access.accessLocation().getValueKind(); + Kind kind = getMemoryKind(access); boolean mirrored = false; if (other.isConstant()) {
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotMemoryPeephole.java Mon Apr 14 15:07:23 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotMemoryPeephole.java Mon Apr 14 15:10:10 2014 +0200 @@ -32,6 +32,7 @@ import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.data.*; import com.oracle.graal.hotspot.meta.*; +import com.oracle.graal.hotspot.nodes.type.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.amd64.*; import com.oracle.graal.lir.amd64.AMD64ControlFlow.BranchOp; @@ -83,11 +84,21 @@ } @Override + protected Kind getMemoryKind(Access access) { + PlatformKind kind = gen.getLIRGenerator().getPlatformKind(access.asNode().stamp()); + if (kind == NarrowOopStamp.NarrowOop) { + return Kind.Int; + } else { + return (Kind) kind; + } + } + + @Override protected boolean emitCompareBranchMemory(ValueNode left, ValueNode right, Access access, Condition cond, boolean unorderedIsTrue, LabelRef trueLabel, LabelRef falseLabel, double trueLabelProbability) { if (HotSpotGraalRuntime.runtime().getConfig().useCompressedOops) { ValueNode other = selectOtherInput(left, right, access); - Kind kind = access.accessLocation().getValueKind(); + Kind kind = getMemoryKind(access); if (other.isConstant() && kind == Kind.Object && access.isCompressible()) { ensureEvaluated(other);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatConvertNode.java Mon Apr 14 15:07:23 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatConvertNode.java Mon Apr 14 15:10:10 2014 +0200 @@ -206,12 +206,6 @@ } public boolean generate(MemoryArithmeticLIRLowerer gen, Access access) { - Kind kind = access.accessLocation().getValueKind(); - if (kind != kind.getStackKind()) { - // Doesn't work for subword operations - return false; - } - Value result = gen.emitFloatConvertMemory(getOp(), access); if (result != null) { gen.setResult(this, result);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SignExtendNode.java Mon Apr 14 15:07:23 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SignExtendNode.java Mon Apr 14 15:10:10 2014 +0200 @@ -111,7 +111,7 @@ @Override public boolean generate(MemoryArithmeticLIRLowerer gen, Access access) { - Value result = gen.emitSignExtendMemory(access, access.accessLocation().getValueKind().getBitCount(), getResultBits()); + Value result = gen.emitSignExtendMemory(access, getInputBits(), getResultBits()); if (result != null) { gen.setResult(this, result); }