# HG changeset patch # User Roland Schatz # Date 1397651238 -7200 # Node ID f9c9eedef118921e00a7ddfc207563b3a662530e # Parent 844cfee4041a26bdae38833b2faeb942178eadf3# Parent 118a3e4381504a99d2fbaea6f1496356054f873a Merge. diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64MemoryPeephole.java --- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64MemoryPeephole.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64MemoryPeephole.java Wed Apr 16 14:27:18 2014 +0200 @@ -81,7 +81,7 @@ } protected AMD64AddressValue makeAddress(Access access) { - return (AMD64AddressValue) access.accessLocation().generateAddress(gen, gen.operand(access.object())); + return (AMD64AddressValue) access.accessLocation().generateAddress(gen, gen.getLIRGeneratorTool(), gen.operand(access.object())); } protected Value emitBinaryMemory(AMD64Arithmetic op, boolean commutative, ValueNode x, ValueNode y, Access access) { diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java Wed Apr 16 14:27:18 2014 +0200 @@ -279,7 +279,7 @@ @SuppressWarnings("unused") public static void testNewNodeSnippet() { - new IntegerAddNode(new IntegerStamp(32, false, Integer.MIN_VALUE, Integer.MAX_VALUE, 0, 0xFFFFFFFF), null, null); + new IntegerAddNode(new IntegerStamp(32, Integer.MIN_VALUE, Integer.MAX_VALUE, 0, 0xFFFFFFFF), null, null); } /** diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Wed Apr 16 14:27:18 2014 +0200 @@ -585,7 +585,7 @@ return stamp.getPlatformKind(this); } - public PlatformKind getIntegerKind(int bits, boolean unsigned) { + public PlatformKind getIntegerKind(int bits) { if (bits <= 8) { return Kind.Byte; } else if (bits <= 16) { diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java Wed Apr 16 14:27:18 2014 +0200 @@ -412,7 +412,7 @@ } else if (node instanceof LIRLowerable) { ((LIRLowerable) node).generate(this); } else if (node instanceof ArithmeticLIRLowerable) { - ((ArithmeticLIRLowerable) node).generate(this); + ((ArithmeticLIRLowerable) node).generate(this, gen); } else { throw GraalInternalError.shouldNotReachHere("node is not LIRLowerable: " + node); } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java --- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java Wed Apr 16 14:27:18 2014 +0200 @@ -957,7 +957,7 @@ int longSize = providers.getCodeCache().getTarget().arch.getSizeInBytes(Kind.Long); long offset = config.hsailFrameSaveAreaOffset + longSize * (regNumber - HSAIL.d0.number); LocationNode numSRegsLocation = ConstantLocationNode.create(FINAL_LOCATION, Kind.Byte, config.hsailFrameNumSRegOffset, hostGraph); - ValueNode numSRegs = hostGraph.unique(new FloatingReadNode(hsailFrame, numSRegsLocation, null, StampFactory.forInteger(8, false))); + ValueNode numSRegs = hostGraph.unique(new FloatingReadNode(hsailFrame, numSRegsLocation, null, StampFactory.forInteger(8))); numSRegs = SignExtendNode.convert(numSRegs, StampFactory.forKind(Kind.Byte)); location = IndexedLocationNode.create(FINAL_LOCATION, valueKind, offset, numSRegs, hostGraph, 4); } else { diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/nodes/LoweredAtomicGetAndAddNode.java --- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/nodes/LoweredAtomicGetAndAddNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/nodes/LoweredAtomicGetAndAddNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -74,7 +74,7 @@ @Override public void generate(NodeLIRBuilderTool gen) { HSAILHotSpotNodeLIRBuilder hsailGen = (HSAILHotSpotNodeLIRBuilder) gen; - hsailGen.visitAtomicGetAndAdd(this, location().generateAddress(hsailGen, hsailGen.operand(object()))); + hsailGen.visitAtomicGetAndAdd(this, location().generateAddress(gen, gen.getLIRGeneratorTool(), gen.operand(object()))); } @Override diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotLoweringProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotLoweringProvider.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotLoweringProvider.java Wed Apr 16 14:27:18 2014 +0200 @@ -816,7 +816,7 @@ Stamp hubStamp; if (config.useCompressedClassPointers) { - hubStamp = StampFactory.forInteger(32, false); + hubStamp = StampFactory.forInteger(32); } else { hubStamp = StampFactory.forKind(wordKind); } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -73,7 +73,7 @@ } else if (input instanceof IntegerStamp) { // compressed metaspace pointer assert PrimitiveStamp.getBits(input) == 64; - return StampFactory.forInteger(32, false); + return StampFactory.forInteger(32); } break; case Uncompress: @@ -84,7 +84,7 @@ } else if (input instanceof IntegerStamp) { // metaspace pointer assert PrimitiveStamp.getBits(input) == 32; - return StampFactory.forInteger(64, false); + return StampFactory.forInteger(64); } break; } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java Wed Apr 16 14:27:18 2014 +0200 @@ -143,14 +143,14 @@ CompareNode cond; // we use a negated guard with a < condition to achieve a >= ConstantNode one = ConstantNode.forIntegerStamp(stamp, 1, graph); if (iv.direction() == Direction.Up) { - IntegerArithmeticNode v1 = sub(graph, ConstantNode.forIntegerStamp(stamp, IntegerStamp.defaultMaxValue(stamp.getBits(), stamp.isUnsigned()), graph), sub(graph, iv.strideNode(), one)); + IntegerArithmeticNode v1 = sub(graph, ConstantNode.forIntegerStamp(stamp, IntegerStamp.defaultMaxValue(stamp.getBits()), graph), sub(graph, iv.strideNode(), one)); if (oneOff) { v1 = sub(graph, v1, one); } cond = graph.unique(new IntegerLessThanNode(v1, end)); } else { assert iv.direction() == Direction.Down; - IntegerArithmeticNode v1 = add(graph, ConstantNode.forIntegerStamp(stamp, IntegerStamp.defaultMinValue(stamp.getBits(), stamp.isUnsigned()), graph), sub(graph, one, iv.strideNode())); + IntegerArithmeticNode v1 = add(graph, ConstantNode.forIntegerStamp(stamp, IntegerStamp.defaultMinValue(stamp.getBits()), graph), sub(graph, one, iv.strideNode())); if (oneOff) { v1 = add(graph, v1, one); } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/IntegerStampTest.java --- a/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/IntegerStampTest.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/IntegerStampTest.java Wed Apr 16 14:27:18 2014 +0200 @@ -44,83 +44,83 @@ @Test public void testBooleanConstant() { - assertEquals(new IntegerStamp(32, false, 1, 1, 0x1, 0x1), ConstantNode.forBoolean(true, graph).stamp()); - assertEquals(new IntegerStamp(32, false, 0, 0, 0x0, 0x0), ConstantNode.forBoolean(false, graph).stamp()); + assertEquals(new IntegerStamp(32, 1, 1, 0x1, 0x1), ConstantNode.forBoolean(true, graph).stamp()); + assertEquals(new IntegerStamp(32, 0, 0, 0x0, 0x0), ConstantNode.forBoolean(false, graph).stamp()); } @Test public void testByteConstant() { - assertEquals(new IntegerStamp(32, false, 0, 0, 0x0, 0x0), ConstantNode.forByte((byte) 0, graph).stamp()); - assertEquals(new IntegerStamp(32, false, 16, 16, 0x10, 0x10), ConstantNode.forByte((byte) 16, graph).stamp()); - assertEquals(new IntegerStamp(32, false, -16, -16, 0xfffffff0L, 0xfffffff0L), ConstantNode.forByte((byte) -16, graph).stamp()); - assertEquals(new IntegerStamp(32, false, 127, 127, 0x7f, 0x7f), ConstantNode.forByte((byte) 127, graph).stamp()); - assertEquals(new IntegerStamp(32, false, -128, -128, 0xffffff80L, 0xffffff80L), ConstantNode.forByte((byte) -128, graph).stamp()); + assertEquals(new IntegerStamp(32, 0, 0, 0x0, 0x0), ConstantNode.forByte((byte) 0, graph).stamp()); + assertEquals(new IntegerStamp(32, 16, 16, 0x10, 0x10), ConstantNode.forByte((byte) 16, graph).stamp()); + assertEquals(new IntegerStamp(32, -16, -16, 0xfffffff0L, 0xfffffff0L), ConstantNode.forByte((byte) -16, graph).stamp()); + assertEquals(new IntegerStamp(32, 127, 127, 0x7f, 0x7f), ConstantNode.forByte((byte) 127, graph).stamp()); + assertEquals(new IntegerStamp(32, -128, -128, 0xffffff80L, 0xffffff80L), ConstantNode.forByte((byte) -128, graph).stamp()); } @Test public void testShortConstant() { - assertEquals(new IntegerStamp(32, false, 0, 0, 0x0, 0x0), ConstantNode.forShort((short) 0, graph).stamp()); - assertEquals(new IntegerStamp(32, false, 128, 128, 0x80, 0x80), ConstantNode.forShort((short) 128, graph).stamp()); - assertEquals(new IntegerStamp(32, false, -128, -128, 0xffffff80L, 0xffffff80L), ConstantNode.forShort((short) -128, graph).stamp()); - assertEquals(new IntegerStamp(32, false, 32767, 32767, 0x7fff, 0x7fff), ConstantNode.forShort((short) 32767, graph).stamp()); - assertEquals(new IntegerStamp(32, false, -32768, -32768, 0xffff8000L, 0xffff8000L), ConstantNode.forShort((short) -32768, graph).stamp()); + assertEquals(new IntegerStamp(32, 0, 0, 0x0, 0x0), ConstantNode.forShort((short) 0, graph).stamp()); + assertEquals(new IntegerStamp(32, 128, 128, 0x80, 0x80), ConstantNode.forShort((short) 128, graph).stamp()); + assertEquals(new IntegerStamp(32, -128, -128, 0xffffff80L, 0xffffff80L), ConstantNode.forShort((short) -128, graph).stamp()); + assertEquals(new IntegerStamp(32, 32767, 32767, 0x7fff, 0x7fff), ConstantNode.forShort((short) 32767, graph).stamp()); + assertEquals(new IntegerStamp(32, -32768, -32768, 0xffff8000L, 0xffff8000L), ConstantNode.forShort((short) -32768, graph).stamp()); } @Test public void testCharConstant() { - assertEquals(new IntegerStamp(32, false, 0, 0, 0x0, 0x0), ConstantNode.forChar((char) 0, graph).stamp()); - assertEquals(new IntegerStamp(32, false, 'A', 'A', 'A', 'A'), ConstantNode.forChar('A', graph).stamp()); - assertEquals(new IntegerStamp(32, false, 128, 128, 0x80, 0x80), ConstantNode.forChar((char) 128, graph).stamp()); - assertEquals(new IntegerStamp(32, false, 65535, 65535, 0xffff, 0xffff), ConstantNode.forChar((char) 65535, graph).stamp()); + assertEquals(new IntegerStamp(32, 0, 0, 0x0, 0x0), ConstantNode.forChar((char) 0, graph).stamp()); + assertEquals(new IntegerStamp(32, 'A', 'A', 'A', 'A'), ConstantNode.forChar('A', graph).stamp()); + assertEquals(new IntegerStamp(32, 128, 128, 0x80, 0x80), ConstantNode.forChar((char) 128, graph).stamp()); + assertEquals(new IntegerStamp(32, 65535, 65535, 0xffff, 0xffff), ConstantNode.forChar((char) 65535, graph).stamp()); } @Test public void testIntConstant() { - assertEquals(new IntegerStamp(32, false, 0, 0, 0x0, 0x0), ConstantNode.forInt(0, graph).stamp()); - assertEquals(new IntegerStamp(32, false, 128, 128, 0x80, 0x80), ConstantNode.forInt(128, graph).stamp()); - assertEquals(new IntegerStamp(32, false, -128, -128, 0xffffff80L, 0xffffff80L), ConstantNode.forInt(-128, graph).stamp()); - assertEquals(new IntegerStamp(32, false, Integer.MAX_VALUE, Integer.MAX_VALUE, 0x7fffffff, 0x7fffffff), ConstantNode.forInt(Integer.MAX_VALUE, graph).stamp()); - assertEquals(new IntegerStamp(32, false, Integer.MIN_VALUE, Integer.MIN_VALUE, 0x80000000L, 0x80000000L), ConstantNode.forInt(Integer.MIN_VALUE, graph).stamp()); + assertEquals(new IntegerStamp(32, 0, 0, 0x0, 0x0), ConstantNode.forInt(0, graph).stamp()); + assertEquals(new IntegerStamp(32, 128, 128, 0x80, 0x80), ConstantNode.forInt(128, graph).stamp()); + assertEquals(new IntegerStamp(32, -128, -128, 0xffffff80L, 0xffffff80L), ConstantNode.forInt(-128, graph).stamp()); + assertEquals(new IntegerStamp(32, Integer.MAX_VALUE, Integer.MAX_VALUE, 0x7fffffff, 0x7fffffff), ConstantNode.forInt(Integer.MAX_VALUE, graph).stamp()); + assertEquals(new IntegerStamp(32, Integer.MIN_VALUE, Integer.MIN_VALUE, 0x80000000L, 0x80000000L), ConstantNode.forInt(Integer.MIN_VALUE, graph).stamp()); } @Test public void testLongConstant() { - assertEquals(new IntegerStamp(64, false, 0, 0, 0x0, 0x0), ConstantNode.forLong(0, graph).stamp()); - assertEquals(new IntegerStamp(64, false, 128, 128, 0x80, 0x80), ConstantNode.forLong(128, graph).stamp()); - assertEquals(new IntegerStamp(64, false, -128, -128, 0xffffffffffffff80L, 0xffffffffffffff80L), ConstantNode.forLong(-128, graph).stamp()); - assertEquals(new IntegerStamp(64, false, Long.MAX_VALUE, Long.MAX_VALUE, 0x7fffffffffffffffL, 0x7fffffffffffffffL), ConstantNode.forLong(Long.MAX_VALUE, graph).stamp()); - assertEquals(new IntegerStamp(64, false, Long.MIN_VALUE, Long.MIN_VALUE, 0x8000000000000000L, 0x8000000000000000L), ConstantNode.forLong(Long.MIN_VALUE, graph).stamp()); + assertEquals(new IntegerStamp(64, 0, 0, 0x0, 0x0), ConstantNode.forLong(0, graph).stamp()); + assertEquals(new IntegerStamp(64, 128, 128, 0x80, 0x80), ConstantNode.forLong(128, graph).stamp()); + assertEquals(new IntegerStamp(64, -128, -128, 0xffffffffffffff80L, 0xffffffffffffff80L), ConstantNode.forLong(-128, graph).stamp()); + assertEquals(new IntegerStamp(64, Long.MAX_VALUE, Long.MAX_VALUE, 0x7fffffffffffffffL, 0x7fffffffffffffffL), ConstantNode.forLong(Long.MAX_VALUE, graph).stamp()); + assertEquals(new IntegerStamp(64, Long.MIN_VALUE, Long.MIN_VALUE, 0x8000000000000000L, 0x8000000000000000L), ConstantNode.forLong(Long.MIN_VALUE, graph).stamp()); } @Test public void testPositiveRanges() { - assertEquals(new IntegerStamp(32, false, 0, 0, 0, 0), StampFactory.forInteger(Kind.Int, 0, 0)); - assertEquals(new IntegerStamp(32, false, 0, 1, 0, 1), StampFactory.forInteger(Kind.Int, 0, 1)); - assertEquals(new IntegerStamp(32, false, 0, 0x123, 0, 0x1ff), StampFactory.forInteger(Kind.Int, 0, 0x123)); - assertEquals(new IntegerStamp(32, false, 0x120, 0x123, 0x120, 0x123), StampFactory.forInteger(Kind.Int, 0x120, 0x123)); - assertEquals(new IntegerStamp(32, false, 10000, 15000, 0x2000, 0x3fff), StampFactory.forInteger(Kind.Int, 10000, 15000)); - assertEquals(new IntegerStamp(64, false, 0, 1, 0, 1), StampFactory.forInteger(Kind.Long, 0, 1)); - assertEquals(new IntegerStamp(64, false, 10000, 15000, 0x2000, 0x3fff), StampFactory.forInteger(Kind.Long, 10000, 15000)); - assertEquals(new IntegerStamp(64, false, 140000000000L, 150000000000L, 0x2000000000L, 0x23ffffffffL), StampFactory.forInteger(Kind.Long, 140000000000L, 150000000000L)); + assertEquals(new IntegerStamp(32, 0, 0, 0, 0), StampFactory.forInteger(Kind.Int, 0, 0)); + assertEquals(new IntegerStamp(32, 0, 1, 0, 1), StampFactory.forInteger(Kind.Int, 0, 1)); + assertEquals(new IntegerStamp(32, 0, 0x123, 0, 0x1ff), StampFactory.forInteger(Kind.Int, 0, 0x123)); + assertEquals(new IntegerStamp(32, 0x120, 0x123, 0x120, 0x123), StampFactory.forInteger(Kind.Int, 0x120, 0x123)); + assertEquals(new IntegerStamp(32, 10000, 15000, 0x2000, 0x3fff), StampFactory.forInteger(Kind.Int, 10000, 15000)); + assertEquals(new IntegerStamp(64, 0, 1, 0, 1), StampFactory.forInteger(Kind.Long, 0, 1)); + assertEquals(new IntegerStamp(64, 10000, 15000, 0x2000, 0x3fff), StampFactory.forInteger(Kind.Long, 10000, 15000)); + assertEquals(new IntegerStamp(64, 140000000000L, 150000000000L, 0x2000000000L, 0x23ffffffffL), StampFactory.forInteger(Kind.Long, 140000000000L, 150000000000L)); } @Test public void testNegativeRanges() { - assertEquals(new IntegerStamp(32, false, -2, -1, 0xfffffffeL, 0xffffffffL), StampFactory.forInteger(Kind.Int, -2, -1)); - assertEquals(new IntegerStamp(32, false, -20, -10, 0xffffffe0L, 0xffffffffL), StampFactory.forInteger(Kind.Int, -20, -10)); - assertEquals(new IntegerStamp(32, false, -10000, 0, 0, 0xffffffffL), StampFactory.forInteger(Kind.Int, -10000, 0)); - assertEquals(new IntegerStamp(32, false, -10000, -1, 0xffffc000L, 0xffffffffL), StampFactory.forInteger(Kind.Int, -10000, -1)); - assertEquals(new IntegerStamp(32, false, -10010, -10000, 0xffffd8e0L, 0xffffd8ffL), StampFactory.forInteger(Kind.Int, -10010, -10000)); - assertEquals(new IntegerStamp(64, false, -2, -1, 0xfffffffffffffffeL, 0xffffffffffffffffL), StampFactory.forInteger(Kind.Long, -2, -1)); - assertEquals(new IntegerStamp(64, false, -10010, -10000, 0xffffffffffffd8e0L, 0xffffffffffffd8ffL), StampFactory.forInteger(Kind.Long, -10010, -10000)); - assertEquals(new IntegerStamp(64, false, -150000000000L, -140000000000L, 0xffffffdc00000000L, 0xffffffdfffffffffL), StampFactory.forInteger(Kind.Long, -150000000000L, -140000000000L)); + assertEquals(new IntegerStamp(32, -2, -1, 0xfffffffeL, 0xffffffffL), StampFactory.forInteger(Kind.Int, -2, -1)); + assertEquals(new IntegerStamp(32, -20, -10, 0xffffffe0L, 0xffffffffL), StampFactory.forInteger(Kind.Int, -20, -10)); + assertEquals(new IntegerStamp(32, -10000, 0, 0, 0xffffffffL), StampFactory.forInteger(Kind.Int, -10000, 0)); + assertEquals(new IntegerStamp(32, -10000, -1, 0xffffc000L, 0xffffffffL), StampFactory.forInteger(Kind.Int, -10000, -1)); + assertEquals(new IntegerStamp(32, -10010, -10000, 0xffffd8e0L, 0xffffd8ffL), StampFactory.forInteger(Kind.Int, -10010, -10000)); + assertEquals(new IntegerStamp(64, -2, -1, 0xfffffffffffffffeL, 0xffffffffffffffffL), StampFactory.forInteger(Kind.Long, -2, -1)); + assertEquals(new IntegerStamp(64, -10010, -10000, 0xffffffffffffd8e0L, 0xffffffffffffd8ffL), StampFactory.forInteger(Kind.Long, -10010, -10000)); + assertEquals(new IntegerStamp(64, -150000000000L, -140000000000L, 0xffffffdc00000000L, 0xffffffdfffffffffL), StampFactory.forInteger(Kind.Long, -150000000000L, -140000000000L)); } @Test public void testMixedRanges() { - assertEquals(new IntegerStamp(32, false, -1, 0, 0, 0xffffffffL), StampFactory.forInteger(Kind.Int, -1, 0)); - assertEquals(new IntegerStamp(32, false, -10000, 1000, 0, 0xffffffffL), StampFactory.forInteger(Kind.Int, -10000, 1000)); - assertEquals(new IntegerStamp(64, false, -10000, 1000, 0, 0xffffffffffffffffL), StampFactory.forInteger(Kind.Long, -10000, 1000)); + assertEquals(new IntegerStamp(32, -1, 0, 0, 0xffffffffL), StampFactory.forInteger(Kind.Int, -1, 0)); + assertEquals(new IntegerStamp(32, -10000, 1000, 0, 0xffffffffL), StampFactory.forInteger(Kind.Int, -10000, 1000)); + assertEquals(new IntegerStamp(64, -10000, 1000, 0, 0xffffffffffffffffL), StampFactory.forInteger(Kind.Long, -10000, 1000)); } @Test @@ -159,15 +159,15 @@ @Test public void testXor() { - assertEquals(new IntegerStamp(32, false, 0, 0xff, 0, 0xff), StampTool.xor(new IntegerStamp(32, false, 0, 0, 0, 0), new IntegerStamp(32, false, 0, 0xff, 0, 0xff))); - assertEquals(new IntegerStamp(32, false, 0x10, 0x1f, 0x10, 0x1f), StampTool.xor(new IntegerStamp(32, false, 0, 0, 0, 0), new IntegerStamp(32, false, 0x10, 0x1f, 0x10, 0x1f))); - assertEquals(new IntegerStamp(32, false, 0x0, 0xf, 0x0, 0xf), StampTool.xor(new IntegerStamp(32, false, 0x10, 0x10, 0x10, 0x10), new IntegerStamp(32, false, 0x10, 0x1f, 0x10, 0x1f))); - assertEquals(new IntegerStamp(32, false, 0x10, 0x1f, 0x10, 0x1f), StampTool.xor(new IntegerStamp(32, false, 0x10, 0x10, 0x10, 0x10), new IntegerStamp(32, false, 0x0, 0xf, 0x0, 0xf))); + assertEquals(new IntegerStamp(32, 0, 0xff, 0, 0xff), StampTool.xor(new IntegerStamp(32, 0, 0, 0, 0), new IntegerStamp(32, 0, 0xff, 0, 0xff))); + assertEquals(new IntegerStamp(32, 0x10, 0x1f, 0x10, 0x1f), StampTool.xor(new IntegerStamp(32, 0, 0, 0, 0), new IntegerStamp(32, 0x10, 0x1f, 0x10, 0x1f))); + assertEquals(new IntegerStamp(32, 0x0, 0xf, 0x0, 0xf), StampTool.xor(new IntegerStamp(32, 0x10, 0x10, 0x10, 0x10), new IntegerStamp(32, 0x10, 0x1f, 0x10, 0x1f))); + assertEquals(new IntegerStamp(32, 0x10, 0x1f, 0x10, 0x1f), StampTool.xor(new IntegerStamp(32, 0x10, 0x10, 0x10, 0x10), new IntegerStamp(32, 0x0, 0xf, 0x0, 0xf))); } @Test public void testNot() { - assertEquals(new IntegerStamp(32, false, -11, -1, 0xffff_fff0L, 0xffff_ffffL), StampTool.not(new IntegerStamp(32, false, 0, 10, 0, 0xf))); + assertEquals(new IntegerStamp(32, -11, -1, 0xffff_fff0L, 0xffff_ffffL), StampTool.not(new IntegerStamp(32, 0, 10, 0, 0xf))); } @Test @@ -258,13 +258,13 @@ @Test public void testAnd() { - assertEquals(new IntegerStamp(32, false, Integer.MIN_VALUE, 0x40000000L, 0, 0xc0000000L), StampTool.and(StampFactory.forKind(Kind.Int), StampFactory.forConstant(Constant.forInt(0xc0000000)))); + assertEquals(new IntegerStamp(32, Integer.MIN_VALUE, 0x40000000L, 0, 0xc0000000L), StampTool.and(StampFactory.forKind(Kind.Int), StampFactory.forConstant(Constant.forInt(0xc0000000)))); } private static void testSignExtendShort(long lower, long upper) { - Stamp shortStamp = StampFactory.forInteger(16, false, lower, upper); + Stamp shortStamp = StampFactory.forInteger(16, lower, upper); Stamp intStamp = StampTool.signExtend(shortStamp, 32); - assertEquals(StampFactory.forInteger(32, false, lower, upper), intStamp); + assertEquals(StampFactory.forInteger(32, lower, upper), intStamp); } @Test @@ -278,9 +278,9 @@ } private static void testZeroExtendShort(long lower, long upper, long newLower, long newUpper) { - Stamp shortStamp = StampFactory.forInteger(16, false, lower, upper); + Stamp shortStamp = StampFactory.forInteger(16, lower, upper); Stamp intStamp = StampTool.zeroExtend(shortStamp, 32); - assertEquals(StampFactory.forInteger(32, false, newLower, newUpper), intStamp); + assertEquals(StampFactory.forInteger(32, newLower, newUpper), intStamp); } @Test @@ -292,36 +292,4 @@ testZeroExtendShort(-1, 1, 0, 0xFFFF); testZeroExtendShort(Short.MIN_VALUE, Short.MAX_VALUE, 0, 0xFFFF); } - - private static void testSignExtendChar(long lower, long upper, long newLower, long newUpper) { - Stamp charStamp = StampFactory.forInteger(16, true, lower, upper); - Stamp uintStamp = StampTool.signExtend(charStamp, 32); - assertEquals(StampFactory.forInteger(32, true, newLower, newUpper), uintStamp); - } - - @Test - public void testSignExtendUnsigned() { - testSignExtendChar(5, 7, 5, 7); - testSignExtendChar(0, 42, 0, 42); - testSignExtendChar(5, 0xF000, 5, 0xFFFFF000L); - testSignExtendChar(0, 0xF000, 0, 0xFFFFF000L); - testSignExtendChar(0xF000, Character.MAX_VALUE, 0xFFFFF000L, 0xFFFFFFFFL); - testSignExtendChar(Character.MIN_VALUE, Character.MAX_VALUE, 0, 0xFFFFFFFFL); - } - - private static void testZeroExtendChar(long lower, long upper) { - Stamp charStamp = StampFactory.forInteger(16, true, lower, upper); - Stamp uintStamp = StampTool.zeroExtend(charStamp, 32); - assertEquals(StampFactory.forInteger(32, true, lower, upper), uintStamp); - } - - @Test - public void testZeroExtendUnsigned() { - testZeroExtendChar(5, 7); - testZeroExtendChar(0, 42); - testZeroExtendChar(5, 0xF000); - testZeroExtendChar(0, 0xF000); - testZeroExtendChar(0xF000, Character.MAX_VALUE); - testZeroExtendChar(Character.MIN_VALUE, Character.MAX_VALUE); - } } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -176,7 +176,7 @@ if (stamp instanceof IntegerStamp) { assert constant.getKind().isNumericInteger() && stamp.getStackKind() == constant.getKind().getStackKind(); IntegerStamp istamp = (IntegerStamp) stamp; - return forIntegerBits(istamp.getBits(), istamp.isUnsigned(), constant, graph); + return forIntegerBits(istamp.getBits(), constant, graph); } else { assert constant.getKind().isNumericFloat() && stamp.getStackKind() == constant.getKind(); return forPrimitive(constant, graph); @@ -267,23 +267,18 @@ return graph.unique(node); } - private static ConstantNode forIntegerBits(int bits, boolean unsigned, Constant constant, StructuredGraph graph) { + private static ConstantNode forIntegerBits(int bits, Constant constant, StructuredGraph graph) { long value = constant.asLong(); - long bounds; - if (unsigned) { - bounds = ZeroExtendNode.zeroExtend(value, bits); - } else { - bounds = SignExtendNode.signExtend(value, bits); - } - return unique(graph, new ConstantNode(constant, StampFactory.forInteger(bits, unsigned, bounds, bounds))); + long bounds = SignExtendNode.signExtend(value, bits); + return unique(graph, new ConstantNode(constant, StampFactory.forInteger(bits, bounds, bounds))); } /** * Returns a node for a constant integer that's not directly representable as Java primitive * (e.g. short). */ - public static ConstantNode forIntegerBits(int bits, boolean unsigned, long value, StructuredGraph graph) { - return forIntegerBits(bits, unsigned, Constant.forPrimitiveInt(bits, value), graph); + public static ConstantNode forIntegerBits(int bits, long value, StructuredGraph graph) { + return forIntegerBits(bits, Constant.forPrimitiveInt(bits, value), graph); } /** @@ -292,7 +287,7 @@ public static ConstantNode forIntegerStamp(Stamp stamp, long value, StructuredGraph graph) { if (stamp instanceof IntegerStamp) { IntegerStamp intStamp = (IntegerStamp) stamp; - return forIntegerBits(intStamp.getBits(), intStamp.isUnsigned(), value, graph); + return forIntegerBits(intStamp.getBits(), value, graph); } else { return forIntegerKind(stamp.getStackKind(), value, graph); } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AndNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AndNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AndNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -88,8 +88,8 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitAnd(gen.operand(x()), gen.operand(y()))); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + builder.setResult(this, gen.emitAnd(builder.operand(x()), builder.operand(y()))); } @Override diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatAddNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatAddNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatAddNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -65,20 +65,20 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - Value op1 = gen.operand(x()); - Value op2 = gen.operand(y()); - if (!y().isConstant() && !livesLonger(this, y(), gen)) { + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + Value op1 = builder.operand(x()); + Value op2 = builder.operand(y()); + if (!y().isConstant() && !livesLonger(this, y(), builder)) { Value op = op1; op1 = op2; op2 = op; } - gen.setResult(this, gen.getLIRGeneratorTool().emitAdd(op1, op2)); + builder.setResult(this, gen.emitAdd(op1, op2)); } - public static boolean livesLonger(ValueNode after, ValueNode value, NodeLIRBuilderTool gen) { + public static boolean livesLonger(ValueNode after, ValueNode value, NodeMappableLIRBuilder builder) { for (Node usage : value.usages()) { - if (usage != after && usage instanceof ValueNode && gen.hasOperand(((ValueNode) usage))) { + if (usage != after && usage instanceof ValueNode && builder.hasOperand(((ValueNode) usage))) { return true; } } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatConvertNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatConvertNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatConvertNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -201,8 +201,8 @@ tool.getLowerer().lower(this, tool); } - public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitFloatConvert(op, gen.operand(getInput()))); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + builder.setResult(this, gen.emitFloatConvert(op, builder.operand(getInput()))); } public boolean generate(MemoryArithmeticLIRLowerer gen, Access access) { diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatDivNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatDivNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatDivNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -57,8 +57,8 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitDiv(gen.operand(x()), gen.operand(y()), null)); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + builder.setResult(this, gen.emitDiv(builder.operand(x()), builder.operand(y()), null)); } @Override diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatMulNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatMulNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatMulNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -60,15 +60,15 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - Value op1 = gen.operand(x()); - Value op2 = gen.operand(y()); - if (!y().isConstant() && !FloatAddNode.livesLonger(this, y(), gen)) { + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + Value op1 = builder.operand(x()); + Value op2 = builder.operand(y()); + if (!y().isConstant() && !FloatAddNode.livesLonger(this, y(), builder)) { Value op = op1; op1 = op2; op2 = op; } - gen.setResult(this, gen.getLIRGeneratorTool().emitMul(op1, op2)); + builder.setResult(this, gen.emitMul(op1, op2)); } @Override diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatRemNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatRemNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatRemNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -57,8 +57,8 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitRem(gen.operand(x()), gen.operand(y()), null)); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + builder.setResult(this, gen.emitRem(builder.operand(x()), builder.operand(y()), null)); } @Override diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatSubNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatSubNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatSubNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -76,8 +76,8 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitSub(gen.operand(x()), gen.operand(y()))); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + builder.setResult(this, gen.emitSub(builder.operand(x()), builder.operand(y()))); } @Override diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerAddNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerAddNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerAddNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -89,16 +89,16 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - Value op1 = gen.operand(x()); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + Value op1 = builder.operand(x()); assert op1 != null : x() + ", this=" + this; - Value op2 = gen.operand(y()); - if (!y().isConstant() && !FloatAddNode.livesLonger(this, y(), gen)) { + Value op2 = builder.operand(y()); + if (!y().isConstant() && !FloatAddNode.livesLonger(this, y(), builder)) { Value op = op1; op1 = op2; op2 = op; } - gen.setResult(this, gen.getLIRGeneratorTool().emitAdd(op1, op2)); + builder.setResult(this, gen.emitAdd(op1, op2)); } @Override diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -67,7 +67,7 @@ return getInput(); } else if (getInput().isConstant()) { Constant ret = evalConst(getInput().asConstant()); - return ConstantNode.forIntegerBits(resultBits, false, ret.asLong(), graph()); + return ConstantNode.forIntegerBits(resultBits, ret.asLong(), graph()); } } @@ -86,19 +86,11 @@ result = graph.unique(new NarrowNode(input, toStamp.getBits())); } else { // toStamp.getBits() > fromStamp.getBits() - if (fromStamp.isUnsigned()) { - result = graph.unique(new ZeroExtendNode(input, toStamp.getBits())); - } else { - result = graph.unique(new SignExtendNode(input, toStamp.getBits())); - } + result = graph.unique(new SignExtendNode(input, toStamp.getBits())); } IntegerStamp resultStamp = (IntegerStamp) result.stamp(); assert toStamp.getBits() == resultStamp.getBits(); - if (toStamp.isUnsigned() == resultStamp.isUnsigned()) { - return result; - } else { - return graph.unique(new ReinterpretNode(toStamp, result)); - } + return result; } } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerMulNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerMulNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerMulNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -75,15 +75,15 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - Value op1 = gen.operand(x()); - Value op2 = gen.operand(y()); - if (!y().isConstant() && !FloatAddNode.livesLonger(this, y(), gen)) { + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + Value op1 = builder.operand(x()); + Value op2 = builder.operand(y()); + if (!y().isConstant() && !FloatAddNode.livesLonger(this, y(), builder)) { Value op = op1; op1 = op2; op2 = op; } - gen.setResult(this, gen.getLIRGeneratorTool().emitMul(op1, op2)); + builder.setResult(this, gen.emitMul(op1, op2)); } @Override diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerSubNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerSubNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerSubNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -117,8 +117,8 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitSub(gen.operand(x()), gen.operand(y()))); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + builder.setResult(this, gen.emitSub(builder.operand(x()), builder.operand(y()))); } @Override diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/LeftShiftNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/LeftShiftNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/LeftShiftNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -92,7 +92,7 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitShl(gen.operand(x()), gen.operand(y()))); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + builder.setResult(this, gen.emitShl(builder.operand(x()), builder.operand(y()))); } } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NarrowNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NarrowNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NarrowNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -50,13 +50,7 @@ @Override public Constant reverse(Constant input) { - IntegerStamp stamp = (IntegerStamp) stamp(); - long result; - if (stamp.isUnsigned()) { - result = ZeroExtendNode.zeroExtend(input.asLong(), getResultBits()); - } else { - result = SignExtendNode.signExtend(input.asLong(), getResultBits()); - } + long result = SignExtendNode.signExtend(input.asLong(), getResultBits()); return Constant.forPrimitiveInt(getInputBits(), result); } @@ -110,8 +104,8 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitNarrow(gen.operand(getInput()), getResultBits())); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + builder.setResult(this, gen.emitNarrow(builder.operand(getInput()), getResultBits())); } @Override diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NegateNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NegateNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NegateNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -88,7 +88,7 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitNegate(gen.operand(x()))); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + builder.setResult(this, gen.emitNegate(builder.operand(x()))); } } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NotNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NotNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NotNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -73,7 +73,7 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitNot(gen.operand(x()))); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + builder.setResult(this, gen.emitNot(builder.operand(x()))); } } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/OrNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/OrNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/OrNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -73,8 +73,8 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitOr(gen.operand(x()), gen.operand(y()))); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + builder.setResult(this, gen.emitOr(builder.operand(x()), builder.operand(y()))); } @Override diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ReinterpretNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ReinterpretNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ReinterpretNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -102,9 +102,9 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - PlatformKind kind = gen.getLIRGeneratorTool().getPlatformKind(stamp()); - gen.setResult(this, gen.getLIRGeneratorTool().emitReinterpret(kind, gen.operand(value()))); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + PlatformKind kind = gen.getPlatformKind(stamp()); + builder.setResult(this, gen.emitReinterpret(kind, builder.operand(value()))); } @Override diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/RightShiftNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/RightShiftNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/RightShiftNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -98,7 +98,7 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitShr(gen.operand(x()), gen.operand(y()))); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + builder.setResult(this, gen.emitShr(builder.operand(x()), builder.operand(y()))); } } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SignExtendNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SignExtendNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SignExtendNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -105,8 +105,8 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitSignExtend(gen.operand(getInput()), getInputBits(), getResultBits())); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + builder.setResult(this, gen.emitSignExtend(builder.operand(getInput()), getInputBits(), getResultBits())); } @Override diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRightShiftNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRightShiftNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRightShiftNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -92,7 +92,7 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitUShr(gen.operand(x()), gen.operand(y()))); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + builder.setResult(this, gen.emitUShr(builder.operand(x()), builder.operand(y()))); } } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/XorNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/XorNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/XorNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -72,8 +72,8 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitXor(gen.operand(x()), gen.operand(y()))); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + builder.setResult(this, gen.emitXor(builder.operand(x()), builder.operand(y()))); } @Override diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ZeroExtendNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ZeroExtendNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ZeroExtendNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -98,8 +98,8 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitZeroExtend(gen.operand(getInput()), getInputBits(), getResultBits())); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + builder.setResult(this, gen.emitZeroExtend(builder.operand(getInput()), getInputBits(), getResultBits())); } @Override diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AddLocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AddLocationNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AddLocationNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -107,9 +107,9 @@ } @Override - public Value generateAddress(NodeLIRBuilderTool gen, Value base) { - Value xAddr = getX().generateAddress(gen, base); - return getY().generateAddress(gen, xAddr); + public Value generateAddress(NodeMappableLIRBuilder builder, LIRGeneratorTool gen, Value base) { + Value xAddr = getX().generateAddress(builder, gen, base); + return getY().generateAddress(builder, gen, xAddr); } @NodeIntrinsic diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ComputeAddressNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ComputeAddressNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ComputeAddressNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -50,7 +50,7 @@ @Override public void generate(NodeLIRBuilderTool gen) { - Value addr = getLocation().generateAddress(gen, gen.operand(getObject())); + Value addr = getLocation().generateAddress(gen, gen.getLIRGeneratorTool(), gen.operand(getObject())); gen.setResult(this, addr); } } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ConstantLocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ConstantLocationNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ConstantLocationNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -65,7 +65,7 @@ } @Override - public Value generateAddress(NodeLIRBuilderTool gen, Value base) { - return gen.getLIRGeneratorTool().emitAddress(base, getDisplacement(), Value.ILLEGAL, 0); + public Value generateAddress(NodeMappableLIRBuilder builder, LIRGeneratorTool gen, Value base) { + return gen.emitAddress(base, getDisplacement(), Value.ILLEGAL, 0); } } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -61,7 +61,7 @@ @Override public void generate(NodeLIRBuilderTool gen) { - Value address = location().generateAddress(gen, gen.operand(object())); + Value address = location().generateAddress(gen, gen.getLIRGeneratorTool(), gen.operand(object())); PlatformKind readKind = gen.getLIRGeneratorTool().getPlatformKind(stamp()); gen.setResult(this, gen.getLIRGeneratorTool().emitLoad(readKind, address, this)); } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -96,7 +96,7 @@ } @Override - public Value generateAddress(NodeLIRBuilderTool gen, Value base) { - return gen.getLIRGeneratorTool().emitAddress(base, displacement, gen.operand(getIndex()), getIndexScaling()); + public Value generateAddress(NodeMappableLIRBuilder builder, LIRGeneratorTool gen, Value base) { + return gen.emitAddress(base, displacement, builder.operand(getIndex()), getIndexScaling()); } } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LocationNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LocationNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -62,5 +62,5 @@ // nothing to do... } - public abstract Value generateAddress(NodeLIRBuilderTool gen, Value base); + public abstract Value generateAddress(NodeMappableLIRBuilder builder, LIRGeneratorTool gen, Value base); } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -54,7 +54,7 @@ @Override public void generate(NodeLIRBuilderTool gen) { - Value address = location().generateAddress(gen, gen.operand(object())); + Value address = location().generateAddress(gen, gen.getLIRGeneratorTool(), gen.operand(object())); PlatformKind readKind = gen.getLIRGeneratorTool().getPlatformKind(stamp()); gen.setResult(this, gen.getLIRGeneratorTool().emitLoad(readKind, address, this)); } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -44,7 +44,7 @@ @Override public void generate(NodeLIRBuilderTool gen) { - Value address = location().generateAddress(gen, gen.operand(object())); + Value address = location().generateAddress(gen, gen.getLIRGeneratorTool(), gen.operand(object())); // It's possible a constant was forced for other usages so inspect the value directly and // use a constant if it can be directly stored. Value v; diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredCompareAndSwapNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredCompareAndSwapNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredCompareAndSwapNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -80,7 +80,7 @@ @Override public void generate(NodeLIRBuilderTool gen) { assert getNewValue().stamp().isCompatible(getExpectedValue().stamp()); - Value address = location().generateAddress(gen, gen.operand(object())); + Value address = location().generateAddress(gen, gen.getLIRGeneratorTool(), gen.operand(object())); Value result = gen.getLIRGeneratorTool().emitCompareAndSwap(address, gen.operand(getExpectedValue()), gen.operand(getNewValue()), Constant.INT_1, Constant.INT_0); gen.setResult(this, result); } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ArithmeticLIRLowerable.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ArithmeticLIRLowerable.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ArithmeticLIRLowerable.java Wed Apr 16 14:27:18 2014 +0200 @@ -26,5 +26,5 @@ public interface ArithmeticLIRLowerable extends ArithmeticOperation { - void generate(NodeLIRBuilderTool gen); + void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen); } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRTypeTool.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRTypeTool.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRTypeTool.java Wed Apr 16 14:27:18 2014 +0200 @@ -29,7 +29,7 @@ */ public interface LIRTypeTool { - PlatformKind getIntegerKind(int bits, boolean unsigned); + PlatformKind getIntegerKind(int bits); PlatformKind getFloatingKind(int bits); diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/IntegerStamp.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/IntegerStamp.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/IntegerStamp.java Wed Apr 16 14:27:18 2014 +0200 @@ -37,43 +37,36 @@ */ public class IntegerStamp extends PrimitiveStamp { - private final boolean unsigned; - private final long lowerBound; private final long upperBound; private final long downMask; private final long upMask; - public IntegerStamp(int bits, boolean unsigned, long lowerBound, long upperBound, long downMask, long upMask) { + public IntegerStamp(int bits, long lowerBound, long upperBound, long downMask, long upMask) { super(bits); - this.unsigned = unsigned; this.lowerBound = lowerBound; this.upperBound = upperBound; this.downMask = downMask; this.upMask = upMask; - assert lowerBound >= defaultMinValue(bits, unsigned) : this; - assert upperBound <= defaultMaxValue(bits, unsigned) : this; + assert lowerBound >= defaultMinValue(bits) : this; + assert upperBound <= defaultMaxValue(bits) : this; assert (downMask & defaultMask(bits)) == downMask : this; assert (upMask & defaultMask(bits)) == upMask : this; } @Override public Stamp unrestricted() { - return new IntegerStamp(getBits(), unsigned, defaultMinValue(getBits(), unsigned), defaultMaxValue(getBits(), unsigned), 0, defaultMask(getBits())); + return new IntegerStamp(getBits(), defaultMinValue(getBits()), defaultMaxValue(getBits()), 0, defaultMask(getBits())); } @Override public Stamp illegal() { - return new IntegerStamp(getBits(), unsigned, defaultMaxValue(getBits(), unsigned), defaultMinValue(getBits(), unsigned), defaultMask(getBits()), 0); + return new IntegerStamp(getBits(), defaultMaxValue(getBits()), defaultMinValue(getBits()), defaultMask(getBits()), 0); } @Override public boolean isLegal() { - if (unsigned) { - return Long.compareUnsigned(lowerBound, upperBound) <= 0; - } else { - return lowerBound <= upperBound; - } + return lowerBound <= upperBound; } @Override @@ -87,29 +80,21 @@ @Override public PlatformKind getPlatformKind(LIRTypeTool tool) { - return tool.getIntegerKind(getBits(), unsigned); + return tool.getIntegerKind(getBits()); } @Override public ResolvedJavaType javaType(MetaAccessProvider metaAccess) { switch (getBits()) { case 1: - assert unsigned; return metaAccess.lookupJavaType(Boolean.TYPE); case 8: - assert !unsigned; return metaAccess.lookupJavaType(Byte.TYPE); case 16: - if (unsigned) { - return metaAccess.lookupJavaType(Character.TYPE); - } else { - return metaAccess.lookupJavaType(Short.TYPE); - } + return metaAccess.lookupJavaType(Short.TYPE); case 32: - assert !unsigned; return metaAccess.lookupJavaType(Integer.TYPE); case 64: - assert !unsigned; return metaAccess.lookupJavaType(Long.TYPE); default: throw GraalInternalError.shouldNotReachHere(); @@ -117,21 +102,14 @@ } /** - * Check whether the value described by this stamp is unsigned. - */ - public boolean isUnsigned() { - return unsigned; - } - - /** - * The (inclusive) lower bound on the value described by this stamp. + * The signed inclusive lower bound on the value described by this stamp. */ public long lowerBound() { return lowerBound; } /** - * The (inclusive) upper bound on the value described by this stamp. + * The signed inclusive upper bound on the value described by this stamp. */ public long upperBound() { return upperBound; @@ -152,7 +130,7 @@ } public boolean isUnrestricted() { - return lowerBound == defaultMinValue(getBits(), unsigned) && upperBound == defaultMaxValue(getBits(), unsigned) && downMask == 0 && upMask == defaultMask(getBits()); + return lowerBound == defaultMinValue(getBits()) && upperBound == defaultMaxValue(getBits()) && downMask == 0 && upMask == defaultMask(getBits()); } public boolean contains(long value) { @@ -186,11 +164,11 @@ @Override public String toString() { StringBuilder str = new StringBuilder(); - str.append(unsigned ? 'u' : 'i'); + str.append('i'); str.append(getBits()); if (lowerBound == upperBound) { str.append(" [").append(lowerBound).append(']'); - } else if (lowerBound != defaultMinValue(getBits(), unsigned) || upperBound != defaultMaxValue(getBits(), unsigned)) { + } else if (lowerBound != defaultMinValue(getBits()) || upperBound != defaultMaxValue(getBits())) { str.append(" [").append(lowerBound).append(" - ").append(upperBound).append(']'); } if (downMask != 0) { @@ -205,7 +183,7 @@ } private Stamp createStamp(IntegerStamp other, long newUpperBound, long newLowerBound, long newDownMask, long newUpMask) { - assert getBits() == other.getBits() && unsigned == other.unsigned; + assert getBits() == other.getBits(); if (newLowerBound > newUpperBound || (newDownMask & (~newUpMask)) != 0) { return illegal(); } else if (newLowerBound == lowerBound && newUpperBound == upperBound && newDownMask == downMask && newUpMask == upMask) { @@ -213,7 +191,7 @@ } else if (newLowerBound == other.lowerBound && newUpperBound == other.upperBound && newDownMask == other.downMask && newUpMask == other.upMask) { return other; } else { - return new IntegerStamp(getBits(), unsigned, newLowerBound, newUpperBound, newDownMask, newUpMask); + return new IntegerStamp(getBits(), newLowerBound, newUpperBound, newDownMask, newUpMask); } } @@ -250,7 +228,7 @@ } if (stamp instanceof IntegerStamp) { IntegerStamp other = (IntegerStamp) stamp; - return getBits() == other.getBits() && unsigned == other.unsigned; + return getBits() == other.getBits(); } return false; } @@ -283,7 +261,7 @@ } public static long defaultMask(int bits) { - assert 0 < bits && bits <= 64; + assert 0 <= bits && bits <= 64; if (bits == 64) { return 0xffffffffffffffffL; } else { @@ -291,16 +269,12 @@ } } - public static long defaultMinValue(int bits, boolean unsigned) { - if (unsigned) { - return 0; - } else { - return -1L << (bits - 1); - } + public static long defaultMinValue(int bits) { + return -1L << (bits - 1); } - public static long defaultMaxValue(int bits, boolean unsigned) { - return defaultMask(unsigned ? bits : bits - 1); + public static long defaultMaxValue(int bits) { + return defaultMask(bits - 1); } public static long upMaskFor(int bits, long lowerBound, long upperBound) { @@ -332,11 +306,7 @@ case 8: return Constant.forByte((byte) lowerBound); case 16: - if (unsigned) { - return Constant.forChar((char) lowerBound); - } else { - return Constant.forShort((short) lowerBound); - } + return Constant.forShort((short) lowerBound); case 32: return Constant.forInt((int) lowerBound); case 64: diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampFactory.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampFactory.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampFactory.java Wed Apr 16 14:27:18 2014 +0200 @@ -49,7 +49,7 @@ } else { mask = IntegerStamp.defaultMask(bits); } - setCache(kind, new IntegerStamp(bits, false, kind.getMinValue(), kind.getMaxValue(), 0, mask)); + setCache(kind, new IntegerStamp(bits, kind.getMinValue(), kind.getMaxValue(), 0, mask)); } private static void setFloatCache(Kind kind) { @@ -120,21 +120,21 @@ } public static IntegerStamp forInteger(Kind kind, long lowerBound, long upperBound, long downMask, long upMask) { - return new IntegerStamp(kind.getBitCount(), kind.isUnsigned(), lowerBound, upperBound, downMask, upMask); + return new IntegerStamp(kind.getBitCount(), lowerBound, upperBound, downMask, upMask); } public static IntegerStamp forInteger(Kind kind, long lowerBound, long upperBound) { - return forInteger(kind.getBitCount(), kind.isUnsigned(), lowerBound, upperBound); + return forInteger(kind.getBitCount(), lowerBound, upperBound); } - public static IntegerStamp forInteger(int bits, boolean unsigned) { - return new IntegerStamp(bits, unsigned, IntegerStamp.defaultMinValue(bits, unsigned), IntegerStamp.defaultMaxValue(bits, unsigned), 0, IntegerStamp.defaultMask(bits)); + public static IntegerStamp forInteger(int bits) { + return new IntegerStamp(bits, IntegerStamp.defaultMinValue(bits), IntegerStamp.defaultMaxValue(bits), 0, IntegerStamp.defaultMask(bits)); } - public static IntegerStamp forInteger(int bits, boolean unsigned, long lowerBound, long upperBound) { + public static IntegerStamp forInteger(int bits, long lowerBound, long upperBound) { long defaultMask = IntegerStamp.defaultMask(bits); if (lowerBound == upperBound) { - return new IntegerStamp(bits, unsigned, lowerBound, lowerBound, lowerBound & defaultMask, lowerBound & defaultMask); + return new IntegerStamp(bits, lowerBound, lowerBound, lowerBound & defaultMask, lowerBound & defaultMask); } final long downMask; final long upMask; @@ -158,7 +158,7 @@ downMask = lowerBound & ~(-1L >>> (lowerBoundLeadingOnes + sameBitCount)) | ~(-1L >>> lowerBoundLeadingOnes); } } - return new IntegerStamp(bits, unsigned, lowerBound, upperBound, downMask & defaultMask, upMask & defaultMask); + return new IntegerStamp(bits, lowerBound, upperBound, downMask & defaultMask, upMask & defaultMask); } public static FloatStamp forFloat(Kind kind, double lowerBound, double upperBound, boolean nonNaN) { diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampTool.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampTool.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampTool.java Wed Apr 16 14:27:18 2014 +0200 @@ -36,9 +36,9 @@ if (stamp instanceof IntegerStamp) { IntegerStamp integerStamp = (IntegerStamp) stamp; int bits = integerStamp.getBits(); - if (integerStamp.lowerBound() != IntegerStamp.defaultMinValue(bits, false)) { + if (integerStamp.lowerBound() != IntegerStamp.defaultMinValue(bits)) { // TODO(ls) check if the mask calculation is correct... - return StampFactory.forInteger(bits, false, -integerStamp.upperBound(), -integerStamp.lowerBound()); + return StampFactory.forInteger(bits, -integerStamp.upperBound(), -integerStamp.lowerBound()); } } else if (stamp instanceof FloatStamp) { FloatStamp floatStamp = (FloatStamp) stamp; @@ -53,8 +53,7 @@ IntegerStamp integerStamp = (IntegerStamp) stamp; int bits = integerStamp.getBits(); long defaultMask = IntegerStamp.defaultMask(bits); - return new IntegerStamp(bits, integerStamp.isUnsigned(), ~integerStamp.upperBound(), ~integerStamp.lowerBound(), (~integerStamp.upMask()) & defaultMask, (~integerStamp.downMask()) & - defaultMask); + return new IntegerStamp(bits, ~integerStamp.upperBound(), ~integerStamp.lowerBound(), (~integerStamp.upMask()) & defaultMask, (~integerStamp.downMask()) & defaultMask); } return stamp.unrestricted(); } @@ -95,45 +94,36 @@ } public static Stamp div(IntegerStamp stamp1, IntegerStamp stamp2) { - assert stamp1.getBits() == stamp2.getBits() && stamp1.isUnsigned() == stamp2.isUnsigned(); + assert stamp1.getBits() == stamp2.getBits(); if (stamp2.isStrictlyPositive()) { long lowerBound = stamp1.lowerBound() / stamp2.lowerBound(); long upperBound = stamp1.upperBound() / stamp2.lowerBound(); - return StampFactory.forInteger(stamp1.getBits(), stamp1.isUnsigned(), lowerBound, upperBound); + return StampFactory.forInteger(stamp1.getBits(), lowerBound, upperBound); } return stamp1.unrestricted(); } - private static boolean addOverflowsPositively(long x, long y, int bits, boolean unsigned) { + private static boolean addOverflowsPositively(long x, long y, int bits) { long result = x + y; if (bits == 64) { - if (unsigned) { - return ((x | y) & ~result) < 0; - } else { - return (~x & ~y & result) < 0; - } + return (~x & ~y & result) < 0; } else { - return result > IntegerStamp.defaultMaxValue(bits, unsigned); + return result > IntegerStamp.defaultMaxValue(bits); } } - private static boolean addOverflowsNegatively(long x, long y, int bits, boolean unsigned) { - if (unsigned) { - return false; - } - + private static boolean addOverflowsNegatively(long x, long y, int bits) { long result = x + y; if (bits == 64) { return (x & y & ~result) < 0; } else { - return result < IntegerStamp.defaultMinValue(bits, unsigned); + return result < IntegerStamp.defaultMinValue(bits); } } public static IntegerStamp add(IntegerStamp stamp1, IntegerStamp stamp2) { int bits = stamp1.getBits(); - boolean unsigned = stamp1.isUnsigned(); - assert bits == stamp2.getBits() && unsigned == stamp2.isUnsigned(); + assert bits == stamp2.getBits(); if (stamp1.isUnrestricted()) { return stamp1; @@ -151,30 +141,23 @@ long lowerBound; long upperBound; - boolean lowerOverflowsPositively = addOverflowsPositively(stamp1.lowerBound(), stamp2.lowerBound(), bits, unsigned); - boolean upperOverflowsPositively = addOverflowsPositively(stamp1.upperBound(), stamp2.upperBound(), bits, unsigned); - boolean lowerOverflowsNegatively = addOverflowsNegatively(stamp1.lowerBound(), stamp2.lowerBound(), bits, unsigned); - boolean upperOverflowsNegatively = addOverflowsNegatively(stamp1.upperBound(), stamp2.upperBound(), bits, unsigned); + boolean lowerOverflowsPositively = addOverflowsPositively(stamp1.lowerBound(), stamp2.lowerBound(), bits); + boolean upperOverflowsPositively = addOverflowsPositively(stamp1.upperBound(), stamp2.upperBound(), bits); + boolean lowerOverflowsNegatively = addOverflowsNegatively(stamp1.lowerBound(), stamp2.lowerBound(), bits); + boolean upperOverflowsNegatively = addOverflowsNegatively(stamp1.upperBound(), stamp2.upperBound(), bits); if ((lowerOverflowsNegatively && !upperOverflowsNegatively) || (!lowerOverflowsPositively && upperOverflowsPositively)) { - lowerBound = IntegerStamp.defaultMinValue(bits, unsigned); - upperBound = IntegerStamp.defaultMaxValue(bits, unsigned); + lowerBound = IntegerStamp.defaultMinValue(bits); + upperBound = IntegerStamp.defaultMaxValue(bits); } else { - lowerBound = (stamp1.lowerBound() + stamp2.lowerBound()) & defaultMask; - upperBound = (stamp1.upperBound() + stamp2.upperBound()) & defaultMask; - if (!unsigned) { - lowerBound = SignExtendNode.signExtend(lowerBound, bits); - upperBound = SignExtendNode.signExtend(upperBound, bits); - } + lowerBound = SignExtendNode.signExtend((stamp1.lowerBound() + stamp2.lowerBound()) & defaultMask, bits); + upperBound = SignExtendNode.signExtend((stamp1.upperBound() + stamp2.upperBound()) & defaultMask, bits); } - IntegerStamp limit = StampFactory.forInteger(bits, unsigned, lowerBound, upperBound); + IntegerStamp limit = StampFactory.forInteger(bits, lowerBound, upperBound); newUpMask &= limit.upMask(); - upperBound &= newUpMask; - if (!unsigned) { - upperBound = SignExtendNode.signExtend(upperBound, bits); - } + upperBound = SignExtendNode.signExtend(upperBound & newUpMask, bits); newDownMask |= limit.downMask(); lowerBound |= newDownMask; - return new IntegerStamp(bits, unsigned, lowerBound, upperBound, newDownMask, newUpMask); + return new IntegerStamp(bits, lowerBound, upperBound, newDownMask, newUpMask); } public static Stamp sub(IntegerStamp stamp1, IntegerStamp stamp2) { @@ -195,11 +178,11 @@ upperBound = upMask; } else { lowerBound = downMask | (-1L << (bits - 1)); - upperBound = IntegerStamp.defaultMaxValue(bits, false) & upMask; + upperBound = IntegerStamp.defaultMaxValue(bits) & upMask; } lowerBound = IntegerConvertNode.convert(lowerBound, bits, false); upperBound = IntegerConvertNode.convert(upperBound, bits, false); - return new IntegerStamp(bits, false, lowerBound, upperBound, downMask, upMask); + return new IntegerStamp(bits, lowerBound, upperBound, downMask, upMask); } public static Stamp and(Stamp stamp1, Stamp stamp2) { @@ -265,7 +248,7 @@ lowerBound = value.lowerBound() >>> shiftCount; upperBound = value.upperBound() >>> shiftCount; } - return new IntegerStamp(bits, value.isUnsigned(), lowerBound, upperBound, downMask, upMask); + return new IntegerStamp(bits, lowerBound, upperBound, downMask, upMask); } } long mask = IntegerStamp.upMaskFor(bits, value.lowerBound(), value.upperBound()); @@ -312,17 +295,7 @@ long downMask = SignExtendNode.signExtend(inputStamp.downMask(), inputBits) & defaultMask; long upMask = SignExtendNode.signExtend(inputStamp.upMask(), inputBits) & defaultMask; - long lowerBound; - long upperBound; - if (inputStamp.isUnsigned()) { - lowerBound = SignExtendNode.signExtend(inputStamp.lowerBound(), inputBits) & defaultMask; - upperBound = SignExtendNode.signExtend(inputStamp.upperBound(), inputBits) & defaultMask; - } else { - lowerBound = inputStamp.lowerBound(); - upperBound = inputStamp.upperBound(); - } - - return new IntegerStamp(resultBits, inputStamp.isUnsigned(), lowerBound, upperBound, downMask, upMask); + return new IntegerStamp(resultBits, inputStamp.lowerBound(), inputStamp.upperBound(), downMask, upMask); } else { return input.illegal(); } @@ -346,7 +319,7 @@ long lowerBound = ZeroExtendNode.zeroExtend(inputStamp.lowerBound(), inputBits); long upperBound = ZeroExtendNode.zeroExtend(inputStamp.upperBound(), inputBits); - return new IntegerStamp(resultBits, inputStamp.isUnsigned(), lowerBound, upperBound, downMask, upMask); + return new IntegerStamp(resultBits, lowerBound, upperBound, downMask, upMask); } else { return input.illegal(); } @@ -355,7 +328,6 @@ public static Stamp narrowingConversion(Stamp input, int resultBits) { if (input instanceof IntegerStamp) { IntegerStamp inputStamp = (IntegerStamp) input; - boolean unsigned = inputStamp.isUnsigned(); int inputBits = inputStamp.getBits(); assert resultBits <= inputBits; if (resultBits == inputBits) { @@ -363,28 +335,24 @@ } final long upperBound; - if (inputStamp.lowerBound() < IntegerStamp.defaultMinValue(resultBits, unsigned)) { - upperBound = IntegerStamp.defaultMaxValue(resultBits, unsigned); + if (inputStamp.lowerBound() < IntegerStamp.defaultMinValue(resultBits)) { + upperBound = IntegerStamp.defaultMaxValue(resultBits); } else { - upperBound = saturate(inputStamp.upperBound(), resultBits, unsigned); + upperBound = saturate(inputStamp.upperBound(), resultBits); } final long lowerBound; - if (inputStamp.upperBound() > IntegerStamp.defaultMaxValue(resultBits, unsigned)) { - lowerBound = IntegerStamp.defaultMinValue(resultBits, unsigned); + if (inputStamp.upperBound() > IntegerStamp.defaultMaxValue(resultBits)) { + lowerBound = IntegerStamp.defaultMinValue(resultBits); } else { - lowerBound = saturate(inputStamp.lowerBound(), resultBits, unsigned); + lowerBound = saturate(inputStamp.lowerBound(), resultBits); } long defaultMask = IntegerStamp.defaultMask(resultBits); long newDownMask = inputStamp.downMask() & defaultMask; long newUpMask = inputStamp.upMask() & defaultMask; - long newLowerBound = (lowerBound | newDownMask) & newUpMask; - long newUpperBound = (upperBound | newDownMask) & newUpMask; - if (!unsigned) { - newLowerBound = SignExtendNode.signExtend(newLowerBound, resultBits); - newUpperBound = SignExtendNode.signExtend(newUpperBound, resultBits); - } - return new IntegerStamp(resultBits, unsigned, newLowerBound, newUpperBound, newDownMask, newUpMask); + long newLowerBound = SignExtendNode.signExtend((lowerBound | newDownMask) & newUpMask, resultBits); + long newUpperBound = SignExtendNode.signExtend((upperBound | newDownMask) & newUpMask, resultBits); + return new IntegerStamp(resultBits, newLowerBound, newUpperBound, newDownMask, newUpMask); } else { return input.illegal(); } @@ -409,7 +377,7 @@ long intMask = IntegerStamp.defaultMask(32); long newUpMask = signExtend(fromStamp.upMask() & defaultMask, toKind) & intMask; long newDownMask = signExtend(fromStamp.downMask() & defaultMask, toKind) & intMask; - return new IntegerStamp(toKind.getStackKind().getBitCount(), false, (int) ((lowerBound | newDownMask) & newUpMask), (int) ((upperBound | newDownMask) & newUpMask), newDownMask, newUpMask); + return new IntegerStamp(toKind.getStackKind().getBitCount(), (int) ((lowerBound | newDownMask) & newUpMask), (int) ((upperBound | newDownMask) & newUpMask), newDownMask, newUpMask); } private static long signExtend(long value, Kind valueKind) { @@ -420,13 +388,13 @@ } } - private static long saturate(long v, int bits, boolean unsigned) { + private static long saturate(long v, int bits) { if (bits < 64) { - long max = IntegerStamp.defaultMaxValue(bits, unsigned); + long max = IntegerStamp.defaultMaxValue(bits); if (v > max) { return max; } - long min = IntegerStamp.defaultMinValue(bits, unsigned); + long min = IntegerStamp.defaultMinValue(bits); if (v < min) { return min; } @@ -471,14 +439,14 @@ } // If the test succeeds then this proves that n is at greater than c so the bounds // are [c+1..-n.upperBound)]. - return StampFactory.forInteger(x.getBits(), false, x.lowerBound() + 1, y.upperBound()); + return StampFactory.forInteger(x.getBits(), x.lowerBound() + 1, y.upperBound()); } return null; } // n <| c, where c is a strictly positive constant if (y.lowerBound() == y.upperBound() && y.isStrictlyPositive()) { // The test proves that n is positive and less than c, [0..c-1] - return StampFactory.forInteger(y.getBits(), false, 0, y.lowerBound() - 1); + return StampFactory.forInteger(y.getBits(), 0, y.lowerBound() - 1); } return null; } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64FloatConvertNode.java --- a/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64FloatConvertNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64FloatConvertNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -51,7 +51,7 @@ throw GraalInternalError.shouldNotReachHere(); } - public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitFloatConvert(op, gen.operand(value))); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + builder.setResult(this, gen.emitFloatConvert(op, builder.operand(value))); } } diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.replacements.hsail/src/com/oracle/graal/replacements/hsail/HSAILMathIntrinsicsNode.java --- a/graal/com.oracle.graal.replacements.hsail/src/com/oracle/graal/replacements/hsail/HSAILMathIntrinsicsNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.replacements.hsail/src/com/oracle/graal/replacements/hsail/HSAILMathIntrinsicsNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -49,7 +49,7 @@ /** * Gets the parameter passed to the math operation that this node represents. - * + * * @return the parameter */ public ValueNode getParameter() { @@ -58,7 +58,7 @@ /** * Returns the math operation represented by this node. - * + * * @return the operation */ public HSAILArithmetic operation() { @@ -67,7 +67,7 @@ /** * Creates a new HSAILMathIntrinsicNode. - * + * * @param x the argument to the math operation * @param op the math operation */ @@ -81,30 +81,30 @@ * Generates the LIR instructions for the math operation represented by this node. */ @Override - public void generate(NodeLIRBuilderTool gen) { - Value input = gen.operand(getParameter()); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + Value input = builder.operand(getParameter()); Value result; switch (operation()) { case ABS: - result = gen.getLIRGeneratorTool().emitMathAbs(input); + result = gen.emitMathAbs(input); break; case CEIL: - result = ((HSAILLIRGenerator) (gen.getLIRGeneratorTool())).emitMathCeil(input); + result = ((HSAILLIRGenerator) gen).emitMathCeil(input); break; case FLOOR: - result = ((HSAILLIRGenerator) (gen.getLIRGeneratorTool())).emitMathFloor(input); + result = ((HSAILLIRGenerator) gen).emitMathFloor(input); break; case RINT: - result = ((HSAILLIRGenerator) (gen.getLIRGeneratorTool())).emitMathRint(input); + result = ((HSAILLIRGenerator) gen).emitMathRint(input); break; case SQRT: - result = gen.getLIRGeneratorTool().emitMathSqrt(input); + result = gen.emitMathSqrt(input); break; default: throw GraalInternalError.shouldNotReachHere(); } - gen.setResult(this, result); + builder.setResult(this, result); } /** @@ -132,7 +132,7 @@ /** * Node intrinsic for {@link Math} routines taking a single int parameter. - * + * * @param value * @param op the math operation * @return the result of the operation @@ -142,7 +142,7 @@ /** * Node intrinsic for {@link Math} routines taking a single double parameter. - * + * * @param value the input parameter * @param op the math operation * @return the result of the operation @@ -152,7 +152,7 @@ /** * Node intrinsic for {@link Math} routines taking a single float parameter. - * + * * @param value the input parameter * @param op the math operation * @return the result of the operation @@ -162,10 +162,10 @@ /** * Node intrinsic for {@link Math} routines taking a single double parameter. - * + * * @param value the input parameter * @param op the math operation - * + * * @return the result of the operation */ @NodeIntrinsic diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -61,35 +61,35 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - Value input = gen.operand(x()); + public void generate(NodeMappableLIRBuilder builder, ArithmeticLIRGenerator gen) { + Value input = builder.operand(x()); Value result; switch (operation()) { case ABS: - result = gen.getLIRGeneratorTool().emitMathAbs(input); + result = gen.emitMathAbs(input); break; case SQRT: - result = gen.getLIRGeneratorTool().emitMathSqrt(input); + result = gen.emitMathSqrt(input); break; case LOG: - result = gen.getLIRGeneratorTool().emitMathLog(input, false); + result = gen.emitMathLog(input, false); break; case LOG10: - result = gen.getLIRGeneratorTool().emitMathLog(input, true); + result = gen.emitMathLog(input, true); break; case SIN: - result = gen.getLIRGeneratorTool().emitMathSin(input); + result = gen.emitMathSin(input); break; case COS: - result = gen.getLIRGeneratorTool().emitMathCos(input); + result = gen.emitMathCos(input); break; case TAN: - result = gen.getLIRGeneratorTool().emitMathTan(input); + result = gen.emitMathTan(input); break; default: throw GraalInternalError.shouldNotReachHere(); } - gen.setResult(this, result); + builder.setResult(this, result); } public Constant evalConst(Constant... inputs) { diff -r 118a3e438150 -r f9c9eedef118 graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/SnippetLocationNode.java --- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/SnippetLocationNode.java Wed Apr 16 11:07:42 2014 +0200 +++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/SnippetLocationNode.java Wed Apr 16 14:27:18 2014 +0200 @@ -107,7 +107,7 @@ } @Override - public Value generateAddress(NodeLIRBuilderTool gen, Value base) { + public Value generateAddress(NodeMappableLIRBuilder builder, LIRGeneratorTool gen, Value base) { throw new GraalInternalError("locationIdentity must be a constant so that this node can be canonicalized: " + locationIdentity); }