Mercurial > hg > graal-compiler
changeset 15347:78882562556b
merge
author | Michael Haupt <michael.haupt@oracle.com> |
---|---|
date | Thu, 24 Apr 2014 08:38:00 +0200 |
parents | 1cd02b4d90d1 (current diff) 109d6c7c40b5 (diff) |
children | 1c347436d596 |
files | graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/LIRGenLowerable.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/LIRGenResLowerable.java graal/com.oracle.graal.test/src/com/oracle/graal/test/GraalLongUnitTest.java graal/com.oracle.graal.test/src/com/oracle/graal/test/LongTest.java test/baseline_whitelist.txt |
diffstat | 182 files changed, 2093 insertions(+), 1024 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.asm.hsail/src/com/oracle/graal/asm/hsail/HSAILAssembler.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.asm.hsail/src/com/oracle/graal/asm/hsail/HSAILAssembler.java Thu Apr 24 08:38:00 2014 +0200 @@ -548,6 +548,17 @@ } /** + * Emits an atomic_exch_global instruction. + * + * @param result result operand that gets the original contents of the memory location + * @param address the memory location + * @param newValue the new value to write to the memory location + */ + public void emitAtomicExch(Kind accessKind, AllocatableValue result, HSAILAddress address, Value newValue) { + emitString(String.format("atomic_exch_global_b%d %s, %s, %s;", getArgSizeFromKind(accessKind), HSAIL.mapRegister(result), mapAddress(address), mapRegOrConstToString(newValue))); + } + + /** * Emits a comment. Useful for debugging purposes. * * @param comment
--- a/graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCAddress.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCAddress.java Thu Apr 24 08:38:00 2014 +0200 @@ -30,11 +30,6 @@ public class SPARCAddress extends AbstractAddress { - /** - * Stack bias for stack and frame pointer loads. - */ - private static final int STACK_BIAS = 0x7ff; - private final Register base; private final Register index; private final int displacement; @@ -42,7 +37,7 @@ /** * Creates an {@link SPARCAddress} with given base register, no scaling and a given * displacement. - * + * * @param base the base register * @param displacement the displacement */ @@ -54,7 +49,7 @@ /** * Creates an {@link SPARCAddress} with given base register, no scaling and a given index. - * + * * @param base the base register * @param index the index register */ @@ -113,7 +108,7 @@ /** * This method adds the stack-bias to the displacement if the base register is either * {@link SPARC#sp} or {@link SPARC#fp}. - * + * * @return Optional additive displacement. */ public int getDisplacement() {
--- a/graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCAssembler.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCAssembler.java Thu Apr 24 08:38:00 2014 +0200 @@ -37,7 +37,7 @@ /** * Constructs an assembler for the SPARC architecture. - * + * * @param registerConfig the register configuration used to bind {@link Register#Frame} and * {@link Register#CallerFrame} to physical registers. This value can be null if this * assembler instance will not be used to assemble instructions using these logical @@ -50,7 +50,7 @@ // @formatter:off /** * Instruction format for sethi. - * + * * | 00 | rd | op2 | imm22 | * |31 30|29 25|24 22|21 0| */ @@ -123,7 +123,7 @@ // @formatter:off /** * Instruction format for branches. - * + * * | 00 |a | cond | op2 | disp22 | * |31 30|29|28 25|24 22|21 0| */ @@ -142,7 +142,7 @@ // @formatter:off /** * Instruction format for conditional branches. - * + * * | 00 |a | cond | op2 |cc1|cc0|p | disp19 | * |31 30|29|28 25|24 22|21 |20 |19| 0| */ @@ -330,7 +330,7 @@ // @formatter:off /** * Instruction format for calls. - * + * * | 01 | disp30 | * |31 30|29 0| */ @@ -457,7 +457,7 @@ // @formatter:off /** * Instruction format for Arithmetic, Logical, Moves, Tcc, Prefetch, and Misc. - * + * * | 10 | rd | op3 | rs1 | i| imm_asi | rs2 | * | 10 | rd | op3 | rs1 | i| simm13 | * | 10 | rd | op3 | rs1 | i| x| | rs2 | @@ -594,7 +594,7 @@ // @formatter:off /** * Instruction format for Loads, Stores and Misc. - * + * * | 11 | rd | op3 | rs1 | i| imm_asi | rs2 | * | 11 | rd | op3 | rs1 | i| simm13 | * |31 30|29 25|24 19|18 14|13|12 5|4 0| @@ -749,7 +749,7 @@ // @formatter:off /** * Instruction format for Movcc. - * + * * | 10 | rd | op3 |cc2| cond | i|cc1|cc0| - | rs2 | * | 10 | rd | op3 |cc2| cond | i|cc1|cc0| simm11 | * |31 30|29 25|24 19| 18|17 14|13| 12| 11|10 5|4 0| @@ -1007,7 +1007,7 @@ Wrreg(0x30, "wrreg"), Saved(0x31, "saved"), - Fpop1(0x34, "fpop1"), + Fpop1(0b11_0100, "fpop1"), Fpop2(0x35, "fpop2"), Impdep1(0x36, "impdep1"), Impdep2(0x37, "impdep2"), @@ -1036,14 +1036,14 @@ Ldx(0b001011, "ldx"), Stx(0b001110, "stx"), - Ldf(0x20, "ldf"), + Ldf(0b100000, "ldf"), Ldfsr(0x21, "ldfsr"), Ldaf(0x22, "ldaf"), - Lddf(0x23, "lddf"), - Stf(0x24, "stf"), + Lddf(0b100011, "lddf"), + Stf(0b100100, "stf"), Stfsr(0x25, "stfsr"), Staf(0x26, "staf"), - Stdf(0x27, "stdf"); + Stdf(0b100111, "stdf"); // @formatter:on @@ -1092,9 +1092,9 @@ public enum Opfs { // @formatter:off - Fmovs(0x01, "fmovs"), - Fmovd(0x02, "fmovd"), - Fmovq(0x03, "fmovq"), + Fmovs(0b0_0000_0001, "fmovs"), + Fmovd(0b0_0000_0010, "fmovd"), + Fmovq(0b0_0000_0011, "fmovq"), Fnegs(0x05, "fnegs"), Fnegd(0x06, "fnegd"), Fnegq(0x07, "fnegq"), @@ -2376,6 +2376,20 @@ } } + public static class Fmovs extends Fmt3p { + + public Fmovs(Register src, Register dst) { + super(Ops.ArithOp, Op3s.Fpop1, Opfs.Fmovs, g0, src, dst); + } + } + + public static class Fmovd extends Fmt3p { + + public Fmovd(Register src, Register dst) { + super(Ops.ArithOp, Op3s.Fpop1, Opfs.Fmovd, g0, src, dst); + } + } + public static class Fmuls extends Fmt3p { public Fmuls(Register src1, Register src2, Register dst) { @@ -3174,6 +3188,20 @@ } } + public static class Stdf extends Fmt11 { + + public Stdf(Register dst, SPARCAddress src) { + super(Op3s.Stdf, src, dst); + } + } + + public static class Stf extends Fmt11 { + + public Stf(Register dst, SPARCAddress src) { + super(Op3s.Stf, src, dst); + } + } + public static class Sth extends Fmt11 { public Sth(Register dst, SPARCAddress addr) {
--- a/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java Thu Apr 24 08:38:00 2014 +0200 @@ -50,7 +50,7 @@ public class BaselineBytecodeParser extends AbstractBytecodeParser<Value, BaselineFrameStateBuilder> implements BytecodeParserTool { private Backend backend; - protected LIRGenerator gen; + protected LIRGeneratorTool gen; private LIRGenerationResult lirGenRes; private BytecodeLIRBuilder lirBuilder; @SuppressWarnings("unused") private BciBlock[] loopHeaders;
--- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64MemoryPeephole.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64MemoryPeephole.java Thu Apr 24 08:38:00 2014 +0200 @@ -77,7 +77,7 @@ } protected Kind getMemoryKind(Access access) { - return (Kind) gen.getLIRGenerator().getPlatformKind(access.asNode().stamp()); + return (Kind) gen.getLIRGeneratorTool().getPlatformKind(access.asNode().stamp()); } protected AMD64AddressValue makeAddress(Access access) { @@ -94,7 +94,7 @@ } } ensureEvaluated(other); - return gen.getLIRGenerator().emitBinaryMemory(op, getMemoryKind(access), gen.getLIRGeneratorTool().asAllocatable(gen.operand(other)), makeAddress(access), getState(access)); + return gen.getLIRGeneratorTool().emitBinaryMemory(op, getMemoryKind(access), gen.getLIRGeneratorTool().asAllocatable(gen.operand(other)), makeAddress(access), getState(access)); } /** @@ -128,7 +128,7 @@ AMD64AddressValue address = makeAddress(access); LIRFrameState state = getState(access); evaluateDeferred(); - return gen.getLIRGenerator().emitConvert2MemoryOp(kind, op, address, state); + return gen.getLIRGeneratorTool().emitConvert2MemoryOp(kind, op, address, state); } @Override @@ -252,7 +252,7 @@ @Override public Value emitReinterpretMemory(Stamp stamp, Access access) { - PlatformKind to = gen.getLIRGenerator().getPlatformKind(stamp); + PlatformKind to = gen.getLIRGeneratorTool().getPlatformKind(stamp); Kind from = getMemoryKind(access); assert to != from : "should have been eliminated"; @@ -370,7 +370,7 @@ memoryKind = Kind.Char; } evaluateDeferred(); - return gen.getLIRGenerator().emitZeroExtendMemory(memoryKind, toBits, makeAddress(access), getState(access)); + return gen.getLIRGeneratorTool().emitZeroExtendMemory(memoryKind, toBits, makeAddress(access), getState(access)); } public boolean emitIfMemory(IfNode x, Access access) { @@ -463,7 +463,7 @@ } } ensureEvaluated(other); - gen.getLIRGenerator().emitCompareMemoryConOp(kind, makeAddress(access), constant, getState(access)); + gen.getLIRGeneratorTool().emitCompareMemoryConOp(kind, makeAddress(access), constant, getState(access)); mirrored = uncast(right) == access; } else { if (kind == Kind.Object) { @@ -473,7 +473,7 @@ } evaluateDeferred(); - gen.getLIRGenerator().emitCompareRegMemoryOp(kind, gen.operand(other), makeAddress(access), getState(access)); + gen.getLIRGeneratorTool().emitCompareRegMemoryOp(kind, gen.operand(other), makeAddress(access), getState(access)); mirrored = uncast(left) == access; }
--- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64NodeLIRBuilder.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64NodeLIRBuilder.java Thu Apr 24 08:38:00 2014 +0200 @@ -36,7 +36,7 @@ public abstract class AMD64NodeLIRBuilder extends NodeLIRBuilder { - public AMD64NodeLIRBuilder(StructuredGraph graph, LIRGenerator gen) { + public AMD64NodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool gen) { super(graph, gen); } @@ -108,7 +108,7 @@ } @Override - public AMD64LIRGenerator getLIRGenerator() { + public AMD64LIRGenerator getLIRGeneratorTool() { return (AMD64LIRGenerator) gen; } }
--- a/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/AtomicIntGetAndAddTest.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/AtomicIntGetAndAddTest.java Thu Apr 24 08:38:00 2014 +0200 @@ -27,13 +27,10 @@ import org.junit.*; -import sun.misc.*; - import com.oracle.graal.compiler.hsail.test.infra.*; /** - * Tests {@link AtomicInteger#getAndAdd(int)} which indirectly tests - * {@link Unsafe#compareAndSwapInt(Object, long, int, int)}. + * Tests {@link AtomicInteger#getAndAdd(int)} which tests HSAIL atomic_add codegen. */ public class AtomicIntGetAndAddTest extends GraalKernelTester {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/AtomicIntGetAndSetTest.java Thu Apr 24 08:38:00 2014 +0200 @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.compiler.hsail.test; + +import java.util.*; +import java.util.concurrent.atomic.*; + +import org.junit.*; + +import com.oracle.graal.compiler.hsail.test.infra.*; + +/** + * Tests {@link AtomicInteger#getAndSet(int)} which tests HSAIL atomic_exch codegen. + */ +public class AtomicIntGetAndSetTest extends GraalKernelTester { + + static final int NUM = 1000; + @Result public int[] outArray = new int[NUM]; + AtomicInteger atomicInt = new AtomicInteger(Integer.MAX_VALUE); + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchMethodKernel(NUM); + // to complete the circle, replace the initial get value with that of the last executor + for (int i = 0; i < NUM; i++) { + if (outArray[i] == Integer.MAX_VALUE) { + outArray[i] = atomicInt.get(); + } + } + + // note: the actual order of entries in outArray is not predictable + // thus we sort before we compare results + Arrays.sort(outArray); + } + + public void run(int gid) { + outArray[gid] = atomicInt.getAndSet(gid); + } + + @Test + public void test() { + testGeneratedHsail(); + } +}
--- a/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/AtomicLongGetAndAddTest.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/AtomicLongGetAndAddTest.java Thu Apr 24 08:38:00 2014 +0200 @@ -27,13 +27,10 @@ import org.junit.*; -import sun.misc.*; - import com.oracle.graal.compiler.hsail.test.infra.*; /** - * Tests {@link AtomicLong#getAndAdd(long)} which indirectly tests - * {@link Unsafe#compareAndSwapLong(Object, long, long, long)}. + * Tests {@link AtomicLong#getAndAdd(long)} which tests HSAIL atomic_add codegen. */ public class AtomicLongGetAndAddTest extends GraalKernelTester {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/AtomicLongGetAndSetTest.java Thu Apr 24 08:38:00 2014 +0200 @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.compiler.hsail.test; + +import java.util.*; +import java.util.concurrent.atomic.*; + +import org.junit.*; + +import com.oracle.graal.compiler.hsail.test.infra.*; + +/** + * Tests {@link AtomicLong#getAndSet(long)} which tests HSAIL atomic_exch codegen. + */ +public class AtomicLongGetAndSetTest extends GraalKernelTester { + + static final int NUM = 1000; + @Result public long[] outArray = new long[NUM]; + AtomicLong atomicLong = new AtomicLong(Long.MAX_VALUE); + + void setupArrays() { + for (int i = 0; i < NUM; i++) { + outArray[i] = -i; + } + } + + @Override + public void runTest() { + setupArrays(); + + dispatchMethodKernel(NUM); + // to complete the circle, replace the initial get value with that of the last executor + for (int i = 0; i < NUM; i++) { + if (outArray[i] == Long.MAX_VALUE) { + outArray[i] = atomicLong.get(); + } + } + + // note: the actual order of entries in outArray is not predictable + // thus we sort before we compare results + Arrays.sort(outArray); + } + + public void run(int gid) { + outArray[gid] = atomicLong.getAndSet(gid); + } + + @Test + public void test() { + testGeneratedHsail(); + } +}
--- a/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/AtomicReferenceGetAndSetTest.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/AtomicReferenceGetAndSetTest.java Thu Apr 24 08:38:00 2014 +0200 @@ -96,7 +96,6 @@ } @Test - @Ignore public void test() { testGeneratedHsail(); }
--- a/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StaticDoubleSpillTest.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StaticDoubleSpillTest.java Thu Apr 24 08:38:00 2014 +0200 @@ -118,9 +118,8 @@ dispatchMethodKernel(size, out, in); } - // Marked to only run on hardware until simulator spill bug is fixed. - @Ignore @Test + @Ignore("until stack slots are supported in deopt") public void test() { testGeneratedHsail(); }
--- a/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StaticIntSpillTest.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/StaticIntSpillTest.java Thu Apr 24 08:38:00 2014 +0200 @@ -87,9 +87,8 @@ dispatchMethodKernel(size, out, in); } - // Marked to only run on hardware until simulator spill bug is fixed. - @Ignore @Test + @Ignore("until stack slots are supported in deopt") public void test() { testGeneratedHsail(); }
--- a/graal/com.oracle.graal.compiler.hsail/src/com/oracle/graal/compiler/hsail/HSAILNodeLIRBuilder.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler.hsail/src/com/oracle/graal/compiler/hsail/HSAILNodeLIRBuilder.java Thu Apr 24 08:38:00 2014 +0200 @@ -37,7 +37,7 @@ */ public abstract class HSAILNodeLIRBuilder extends NodeLIRBuilder { - public HSAILNodeLIRBuilder(StructuredGraph graph, LIRGenerator lirGen) { + public HSAILNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen) { super(graph, lirGen); }
--- a/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXNodeLIRBuilder.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXNodeLIRBuilder.java Thu Apr 24 08:38:00 2014 +0200 @@ -56,7 +56,7 @@ } } - public PTXNodeLIRBuilder(StructuredGraph graph, LIRGenerator lirGen) { + public PTXNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen) { super(graph, lirGen); }
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Thu Apr 24 08:38:00 2014 +0200 @@ -27,7 +27,9 @@ import static com.oracle.graal.lir.sparc.SPARCArithmetic.*; import static com.oracle.graal.lir.sparc.SPARCBitManipulationOp.IntrinsicOpcode.*; import static com.oracle.graal.lir.sparc.SPARCCompare.*; +import static com.oracle.graal.lir.sparc.SPARCControlFlow.*; import static com.oracle.graal.lir.sparc.SPARCMathIntrinsicOp.IntrinsicOpcode.*; +import static com.oracle.graal.lir.sparc.SPARCMove.*; import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; @@ -40,25 +42,6 @@ import com.oracle.graal.lir.StandardOp.JumpOp; import com.oracle.graal.lir.gen.*; import com.oracle.graal.lir.sparc.*; -import com.oracle.graal.lir.sparc.SPARCArithmetic.BinaryCommutative; -import com.oracle.graal.lir.sparc.SPARCArithmetic.BinaryRegConst; -import com.oracle.graal.lir.sparc.SPARCArithmetic.BinaryRegReg; -import com.oracle.graal.lir.sparc.SPARCArithmetic.Op1Stack; -import com.oracle.graal.lir.sparc.SPARCArithmetic.Op2Stack; -import com.oracle.graal.lir.sparc.SPARCArithmetic.RemOp; -import com.oracle.graal.lir.sparc.SPARCArithmetic.Unary2Op; -import com.oracle.graal.lir.sparc.SPARCCompare.CompareOp; -import com.oracle.graal.lir.sparc.SPARCControlFlow.BranchOp; -import com.oracle.graal.lir.sparc.SPARCControlFlow.CondMoveOp; -import com.oracle.graal.lir.sparc.SPARCControlFlow.FloatCondMoveOp; -import com.oracle.graal.lir.sparc.SPARCControlFlow.ReturnOp; -import com.oracle.graal.lir.sparc.SPARCControlFlow.StrategySwitchOp; -import com.oracle.graal.lir.sparc.SPARCControlFlow.TableSwitchOp; -import com.oracle.graal.lir.sparc.SPARCMove.LoadAddressOp; -import com.oracle.graal.lir.sparc.SPARCMove.MembarOp; -import com.oracle.graal.lir.sparc.SPARCMove.MoveFromRegOp; -import com.oracle.graal.lir.sparc.SPARCMove.MoveToRegOp; -import com.oracle.graal.lir.sparc.SPARCMove.StackLoadAddressOp; import com.oracle.graal.phases.util.*; /** @@ -129,7 +112,7 @@ @Override public void emitData(AllocatableValue dst, byte[] data) { - throw GraalInternalError.unimplemented(); + append(new LoadDataAddressOp(dst, data)); } @Override @@ -156,7 +139,7 @@ indexRegister = Value.ILLEGAL; } else { if (scale != 1) { - Value longIndex = emitSignExtend(index, 32, 64); + Value longIndex = index.getKind() == Kind.Long ? index : emitSignExtend(index, 32, 64); if (CodeUtil.isPowerOf2(scale)) { indexRegister = emitShl(longIndex, Constant.forLong(CodeUtil.log2(scale))); } else { @@ -184,16 +167,20 @@ // If we don't have an index register we can use a displacement, otherwise load the // displacement into a register and add it to the base. if (indexRegister.equals(Value.ILLEGAL)) { - // TODO What if displacement if too big? displacementInt = (int) finalDisp; + assert SPARCAssembler.isSimm13(displacementInt) : displacementInt; } else { displacementInt = 0; if (baseRegister.equals(Value.ILLEGAL)) { baseRegister = load(Constant.forLong(finalDisp)); } else { - Variable longBaseRegister = newVariable(Kind.Long); - emitMove(longBaseRegister, baseRegister); // FIXME get rid of this move - baseRegister = emitAdd(longBaseRegister, Constant.forLong(finalDisp)); + if (finalDisp == 0) { + // Nothing to do. Just use the base register. + } else { + Variable longBaseRegister = newVariable(Kind.Long); + emitMove(longBaseRegister, baseRegister); + baseRegister = emitAdd(longBaseRegister, Constant.forLong(finalDisp)); + } } } @@ -282,15 +269,16 @@ Condition finalCondition = mirrored ? cond.mirror() : cond; Variable result = newVariable(trueValue.getKind()); - switch (left.getKind().getStackKind()) { + Kind kind = left.getKind().getStackKind(); + switch (kind) { case Int: case Long: case Object: - append(new CondMoveOp(result, finalCondition, load(trueValue), loadNonConst(falseValue))); + append(new CondMoveOp(kind, result, finalCondition, load(trueValue), loadNonConst(falseValue))); break; case Float: case Double: - append(new FloatCondMoveOp(result, finalCondition, unorderedIsTrue, load(trueValue), load(falseValue))); + append(new FloatCondMoveOp(kind, result, finalCondition, unorderedIsTrue, load(trueValue), load(falseValue))); break; default: throw GraalInternalError.shouldNotReachHere("" + left.getKind()); @@ -345,7 +333,8 @@ public Variable emitIntegerTestMove(Value left, Value right, Value trueValue, Value falseValue) { emitIntegerTest(left, right); Variable result = newVariable(trueValue.getKind()); - append(new CondMoveOp(result, Condition.EQ, load(trueValue), loadNonConst(falseValue))); + Kind kind = left.getKind().getStackKind(); + append(new CondMoveOp(kind, result, Condition.EQ, load(trueValue), loadNonConst(falseValue))); return result; } @@ -811,22 +800,23 @@ return inputVal; } else if (toBits > 32) { // sign extend to 64 bits - if (fromBits == 32) { - return emitConvert2Op(Kind.Long, I2L, asAllocatable(inputVal)); - } else if (fromBits < 32) { - // TODO implement direct x2L sign extension conversions - Value intVal = emitSignExtend(inputVal, fromBits, 32); - return emitSignExtend(intVal, 32, toBits); - } else { - throw GraalInternalError.unimplemented("unsupported sign extension (" + fromBits + " bit -> " + toBits + " bit)"); + switch (fromBits) { + case 8: + return emitConvert2Op(Kind.Long, B2L, asAllocatable(inputVal)); + case 16: + return emitConvert2Op(Kind.Long, S2L, asAllocatable(inputVal)); + case 32: + return emitConvert2Op(Kind.Long, I2L, asAllocatable(inputVal)); + default: + throw GraalInternalError.unimplemented("unsupported sign extension (" + fromBits + " bit -> " + toBits + " bit)"); } } else { // sign extend to 32 bits (smaller values are internally represented as 32 bit values) switch (fromBits) { case 8: - return emitConvert2Op(Kind.Int, I2B, asAllocatable(inputVal)); + return emitConvert2Op(Kind.Int, B2I, asAllocatable(inputVal)); case 16: - return emitConvert2Op(Kind.Int, I2S, asAllocatable(inputVal)); + return emitConvert2Op(Kind.Int, S2I, asAllocatable(inputVal)); case 32: return inputVal; default:
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCNodeLIRBuilder.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCNodeLIRBuilder.java Thu Apr 24 08:38:00 2014 +0200 @@ -37,7 +37,7 @@ */ public abstract class SPARCNodeLIRBuilder extends NodeLIRBuilder { - public SPARCNodeLIRBuilder(StructuredGraph graph, LIRGenerator lirGen) { + public SPARCNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen) { super(graph, lirGen); }
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CheckGraalInvariants.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CheckGraalInvariants.java Thu Apr 24 08:38:00 2014 +0200 @@ -52,7 +52,7 @@ */ public class CheckGraalInvariants extends GraalTest { - @LongTest + @Test public void test() { RuntimeProvider rt = Graal.getRequiredCapability(RuntimeProvider.class); Providers providers = rt.getHostBackend().getProviders();
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InfopointReasonTest.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InfopointReasonTest.java Thu Apr 24 08:38:00 2014 +0200 @@ -39,7 +39,6 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.phases.*; import com.oracle.graal.phases.tiers.*; -import com.oracle.graal.test.*; /** * Test that infopoints in {@link CompilationResult}s have correctly assigned reasons. @@ -72,7 +71,7 @@ } } - @LongTest + @Test public void lineInfopoints() { final Method method = getMethod("testMethod"); final StructuredGraph graph = parseDebug(method);
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/deopt/CompiledMethodTest.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/deopt/CompiledMethodTest.java Thu Apr 24 08:38:00 2014 +0200 @@ -32,7 +32,6 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.phases.common.*; import com.oracle.graal.phases.tiers.*; -import com.oracle.graal.test.*; /** * In the following tests, the usages of local variable "a" are replaced with the integer constant @@ -51,7 +50,7 @@ return f1 + " " + arg1 + " " + arg2 + " " + arg3; } - @LongTest + @Test public void test1() { Method method = getMethod("testMethod"); final StructuredGraph graph = parse(method); @@ -74,7 +73,7 @@ } } - @LongTest + @Test public void test3() { Method method = getMethod("testMethod"); final StructuredGraph graph = parse(method); @@ -88,7 +87,7 @@ } } - @LongTest + @Test public void test4() { Method method = getMethod("testMethodVirtual"); final StructuredGraph graph = parse(method);
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/inlining/InliningTest.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/inlining/InliningTest.java Thu Apr 24 08:38:00 2014 +0200 @@ -38,7 +38,6 @@ import com.oracle.graal.phases.*; import com.oracle.graal.phases.common.*; import com.oracle.graal.phases.tiers.*; -import com.oracle.graal.test.*; public class InliningTest extends GraalCompilerTest { @@ -73,7 +72,7 @@ assertInlined(getGraph("invokeMethodOnFieldSnippet", false)); } - @LongTest + @Test public void testStaticBindableInliningIP() { assertManyMethodInfopoints(assertInlined(getGraph("invokeConstructorSnippet", true))); assertManyMethodInfopoints(assertInlined(getGraph("invokeFinalMethodSnippet", true))); @@ -82,7 +81,7 @@ } @Ignore("would need read elimination/EA before inlining") - @LongTest + @Test public void testDependentStaticBindableInliningIP() { assertManyMethodInfopoints(assertInlined(getGraph("invokeMethodOnFinalFieldSnippet", true))); assertManyMethodInfopoints(assertInlined(getGraph("invokeMethodOnFieldSnippet", true))); @@ -180,7 +179,7 @@ assertNotInlined(getGraph("invokeOverriddenInterfaceMethodSnippet", false)); } - @LongTest + @Test public void testClassHierarchyAnalysisIP() { assertManyMethodInfopoints(assertInlined(getGraph("invokeLeafClassMethodSnippet", true))); assertManyMethodInfopoints(assertInlined(getGraph("invokeConcreteMethodSnippet", true)));
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Thu Apr 24 08:38:00 2014 +0200 @@ -35,7 +35,6 @@ import com.oracle.graal.api.meta.ProfilingInfo.TriState; import com.oracle.graal.compiler.alloc.*; import com.oracle.graal.compiler.common.cfg.*; -import com.oracle.graal.compiler.gen.*; import com.oracle.graal.compiler.target.*; import com.oracle.graal.debug.*; import com.oracle.graal.debug.Debug.Scope; @@ -45,6 +44,7 @@ import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.cfg.*; +import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.util.*; import com.oracle.graal.options.*; import com.oracle.graal.phases.*; @@ -208,7 +208,7 @@ } } - private static void emitBlock(NodeLIRBuilder nodeLirGen, LIRGenerationResult lirGenRes, Block b, StructuredGraph graph, BlockMap<List<ScheduledNode>> blockMap) { + private static void emitBlock(NodeLIRBuilderTool nodeLirGen, LIRGenerationResult lirGenRes, Block b, StructuredGraph graph, BlockMap<List<ScheduledNode>> blockMap) { if (lirGenRes.getLIR().getLIRforBlock(b) == null) { for (Block pred : b.getPredecessors()) { if (!b.isLoopHeader() || !pred.isLoopEnd()) { @@ -246,8 +246,8 @@ try (Scope ds = Debug.scope("BackEnd", lir)) { FrameMap frameMap = backend.newFrameMap(registerConfig); LIRGenerationResult lirGenRes = backend.newLIRGenerationResult(lir, frameMap, stub); - LIRGenerator lirGen = backend.newLIRGenerator(cc, lirGenRes); - NodeLIRBuilder nodeLirGen = backend.newNodeLIRGenerator(graph, lirGen); + LIRGeneratorTool lirGen = backend.newLIRGenerator(cc, lirGenRes); + NodeLIRBuilderTool nodeLirGen = backend.newNodeLIRBuilder(graph, lirGen); try (Scope s = Debug.scope("LIRGen", lirGen)) { for (Block b : linearScanOrder) {
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/BytecodeLIRBuilder.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/BytecodeLIRBuilder.java Thu Apr 24 08:38:00 2014 +0200 @@ -27,10 +27,10 @@ import com.oracle.graal.lir.gen.*; public class BytecodeLIRBuilder { - protected final LIRGenerator gen; + protected final LIRGeneratorTool gen; protected final BytecodeParserTool parser; - public BytecodeLIRBuilder(LIRGenerator gen, BytecodeParserTool parser) { + public BytecodeLIRBuilder(LIRGeneratorTool gen, BytecodeParserTool parser) { this.gen = gen; this.parser = parser; }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java Thu Apr 24 08:38:00 2014 +0200 @@ -35,14 +35,14 @@ import com.oracle.graal.compiler.common.calc.*; import com.oracle.graal.compiler.common.cfg.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.target.*; import com.oracle.graal.debug.*; import com.oracle.graal.debug.Debug.Scope; import com.oracle.graal.graph.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.StandardOp.JumpOp; import com.oracle.graal.lir.gen.*; -import com.oracle.graal.lir.gen.LIRGenerator.*; +import com.oracle.graal.lir.gen.LIRGenerator.LoadConstant; +import com.oracle.graal.lir.gen.LIRGenerator.Options; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.cfg.*; @@ -58,12 +58,12 @@ private final NodeMap<Value> nodeOperands; private final DebugInfoBuilder debugInfoBuilder; - protected final LIRGenerator gen; + protected final LIRGeneratorTool gen; private ValueNode currentInstruction; private ValueNode lastInstructionPrinted; // Debugging only - public NodeLIRBuilder(StructuredGraph graph, LIRGenerator gen) { + public NodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool gen) { this.gen = gen; this.nodeOperands = graph.createNodeMap(); this.debugInfoBuilder = createDebugInfoBuilder(nodeOperands); @@ -171,7 +171,7 @@ } public final void append(LIRInstruction op) { - if (gen.printIRWithLIR && !TTY.isSuppressed()) { + if (Options.PrintIRWithLIR.getValue() && !TTY.isSuppressed()) { if (currentInstruction != null && lastInstructionPrinted != currentInstruction) { lastInstructionPrinted = currentInstruction; InstructionPrinter ip = new InstructionPrinter(TTY.out()); @@ -195,7 +195,7 @@ int instructionsFolded = 0; for (int i = 0; i < nodes.size(); i++) { Node instr = nodes.get(i); - if (gen.traceLevel >= 3) { + if (Options.TraceLIRGeneratorLevel.getValue() >= 3) { TTY.println("LIRGen for " + instr); } if (instructionsFolded > 0) { @@ -393,7 +393,7 @@ protected abstract boolean peephole(ValueNode valueNode); private void doRoot(ValueNode instr) { - if (gen.traceLevel >= 2) { + if (Options.TraceLIRGeneratorLevel.getValue() >= 2) { TTY.println("Emitting LIR for instruction " + instr); } currentInstruction = instr; @@ -407,11 +407,7 @@ if (Debug.isLogEnabled() && node.stamp() instanceof IllegalStamp) { Debug.log("This node has invalid type, we are emitting dead code(?): %s", node); } - if (node instanceof LIRGenLowerable) { - ((LIRGenLowerable) node).generate(this); - } else if (node instanceof LIRGenResLowerable) { - ((LIRGenResLowerable) node).generate(this, gen.getResult()); - } else if (node instanceof LIRLowerable) { + if (node instanceof LIRLowerable) { ((LIRLowerable) node).generate(this); } else if (node instanceof ArithmeticLIRLowerable) { ((ArithmeticLIRLowerable) node).generate(this, gen); @@ -460,7 +456,7 @@ } private void moveToPhi(MergeNode merge, AbstractEndNode pred) { - if (gen.traceLevel >= 1) { + if (Options.TraceLIRGeneratorLevel.getValue() >= 1) { TTY.println("MOVE TO PHI from " + pred + " to " + merge); } PhiResolver resolver = new PhiResolver(gen); @@ -725,11 +721,7 @@ } @Override - public LIRGenerator getLIRGeneratorTool() { - return gen; - } - - public LIRGenerator getLIRGenerator() { + public LIRGeneratorTool getLIRGeneratorTool() { return gen; } }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/PhiResolver.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/PhiResolver.java Thu Apr 24 08:38:00 2014 +0200 @@ -34,18 +34,18 @@ /** * Converts {@link ValuePhiNode} instructions into moves. - * + * * Resolves cycles: - * + * * <pre> - * + * * r1 := r2 becomes temp := r1 * r2 := r1 r1 := r2 * r2 := temp * </pre> - * + * * and orders moves: - * + * * <pre> * r2 := r3 becomes r1 := r2 * r1 := r2 r2 := r3 @@ -104,7 +104,7 @@ } } - private final LIRGenerator gen; + private final LIRGeneratorTool gen; /** * The operand loop header phi for the operand currently being process in {@link #dispose()}. @@ -121,7 +121,7 @@ */ private final HashMap<Value, PhiResolverNode> operandToNodeMap = new HashMap<>(); - public PhiResolver(LIRGenerator gen) { + public PhiResolver(LIRGeneratorTool gen) { this.gen = gen; temp = ILLEGAL; }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/Backend.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/Backend.java Thu Apr 24 08:38:00 2014 +0200 @@ -32,6 +32,7 @@ import com.oracle.graal.lir.asm.*; import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.spi.*; import com.oracle.graal.phases.tiers.*; import com.oracle.graal.phases.util.*; @@ -72,17 +73,17 @@ */ public abstract FrameMap newFrameMap(RegisterConfig registerConfig); - public abstract LIRGenerator newLIRGenerator(CallingConvention cc, LIRGenerationResult lirGenRes); + public abstract LIRGeneratorTool newLIRGenerator(CallingConvention cc, LIRGenerationResult lirGenRes); public abstract LIRGenerationResult newLIRGenerationResult(LIR lir, FrameMap frameMap, Object stub); - public abstract NodeLIRBuilder newNodeLIRGenerator(StructuredGraph graph, LIRGenerator lirGen); + public abstract NodeLIRBuilderTool newNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen); /** * @param gen the LIRGenerator the BytecodeLIRBuilder should use * @param parser the bytecode parser the BytecodeLIRBuilder should use */ - public BytecodeLIRBuilder newBytecodeLIRBuilder(LIRGenerator gen, BytecodeParserTool parser) { + public BytecodeLIRBuilder newBytecodeLIRBuilder(LIRGeneratorTool gen, BytecodeParserTool parser) { throw GraalInternalError.unimplemented("Baseline compilation is not available for this Backend!"); }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/LIRGenLowerable.java Wed Apr 23 15:23:18 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.oracle.graal.compiler.target; - -import com.oracle.graal.compiler.gen.*; -import com.oracle.graal.lir.*; -import com.oracle.graal.lir.gen.*; -import com.oracle.graal.nodes.spi.*; - -/** - * An alternative to {@link LIRLowerable} for lowering that is tightly coupled to - * {@link LIRGenerator} and {@link LIRInstruction}. - */ -public interface LIRGenLowerable { - - void generate(NodeLIRBuilder generator); -}
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/LIRGenResLowerable.java Wed Apr 23 15:23:18 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.oracle.graal.compiler.target; - -import com.oracle.graal.lir.*; -import com.oracle.graal.lir.gen.*; -import com.oracle.graal.nodes.spi.*; - -/** - * An alternative to {@link LIRLowerable} for lowering that is tightly coupled to - * {@link LIRGenerationResult} and {@link LIRInstruction}. - */ -public interface LIRGenResLowerable { - - void generate(NodeLIRBuilderTool generator, LIRGenerationResult genRes); -}
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Thu Apr 24 08:38:00 2014 +0200 @@ -676,7 +676,7 @@ NodeClassIterator iter = usage.inputs().iterator(); while (iter.hasNext()) { Position pos = iter.nextPosition(); - if (pos.getInputType(usage) == type) { + if (pos.getInputType(usage) == type && pos.get(usage) == this) { pos.set(usage, other); } }
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java Thu Apr 24 08:38:00 2014 +0200 @@ -48,6 +48,7 @@ import com.oracle.graal.lir.asm.*; import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.spi.*; /** * HotSpot AMD64 specific backend. @@ -71,7 +72,7 @@ } @Override - public LIRGenerator newLIRGenerator(CallingConvention cc, LIRGenerationResult lirGenRes) { + public LIRGeneratorTool newLIRGenerator(CallingConvention cc, LIRGenerationResult lirGenRes) { return new AMD64HotSpotLIRGenerator(getProviders(), getRuntime().getConfig(), cc, lirGenRes); } @@ -81,12 +82,12 @@ } @Override - public NodeLIRBuilder newNodeLIRGenerator(StructuredGraph graph, LIRGenerator lirGen) { + public NodeLIRBuilderTool newNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen) { return new AMD64HotSpotNodeLIRBuilder(graph, lirGen); } @Override - public BytecodeLIRBuilder newBytecodeLIRBuilder(LIRGenerator gen, BytecodeParserTool parser) { + public BytecodeLIRBuilder newBytecodeLIRBuilder(LIRGeneratorTool gen, BytecodeParserTool parser) { return new AMD64HotSpotBytecodeLIRBuilder(gen, parser); }
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBytecodeLIRBuilder.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBytecodeLIRBuilder.java Thu Apr 24 08:38:00 2014 +0200 @@ -33,7 +33,7 @@ public class AMD64HotSpotBytecodeLIRBuilder extends BytecodeLIRBuilder { - public AMD64HotSpotBytecodeLIRBuilder(LIRGenerator gen, BytecodeParserTool parser) { + public AMD64HotSpotBytecodeLIRBuilder(LIRGeneratorTool gen, BytecodeParserTool parser) { super(gen, parser); }
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotMemoryPeephole.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotMemoryPeephole.java Thu Apr 24 08:38:00 2014 +0200 @@ -85,7 +85,7 @@ @Override protected Kind getMemoryKind(Access access) { - PlatformKind kind = gen.getLIRGenerator().getPlatformKind(access.asNode().stamp()); + PlatformKind kind = gen.getLIRGeneratorTool().getPlatformKind(access.asNode().stamp()); if (kind == NarrowOopStamp.NarrowOop) { return Kind.Int; } else {
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotNodeLIRBuilder.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotNodeLIRBuilder.java Thu Apr 24 08:38:00 2014 +0200 @@ -52,7 +52,7 @@ */ public class AMD64HotSpotNodeLIRBuilder extends AMD64NodeLIRBuilder implements HotSpotNodeLIRBuilder { - public AMD64HotSpotNodeLIRBuilder(StructuredGraph graph, LIRGenerator gen) { + public AMD64HotSpotNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool gen) { super(graph, gen); memoryPeephole = new AMD64HotSpotMemoryPeephole(this); assert gen instanceof AMD64HotSpotLIRGenerator;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64RawNativeCallNode.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64RawNativeCallNode.java Thu Apr 24 08:38:00 2014 +0200 @@ -27,12 +27,11 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.amd64.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.gen.*; -import com.oracle.graal.compiler.target.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.spi.*; -public class AMD64RawNativeCallNode extends FixedWithNextNode implements LIRGenLowerable { +public class AMD64RawNativeCallNode extends FixedWithNextNode implements LIRLowerable { private final Constant functionPointer; @Input private final NodeInputList<ValueNode> args; @@ -44,7 +43,7 @@ } @Override - public void generate(NodeLIRBuilder generator) { + public void generate(NodeLIRBuilderTool generator) { AMD64NodeLIRBuilder gen = (AMD64NodeLIRBuilder) generator; Value[] parameter = new Value[args.count()]; JavaType[] parameterTypes = new JavaType[args.count()]; @@ -55,7 +54,7 @@ ResolvedJavaType returnType = stamp().javaType(gen.getLIRGeneratorTool().getMetaAccess()); CallingConvention cc = generator.getLIRGeneratorTool().getCodeCache().getRegisterConfig().getCallingConvention(Type.NativeCall, returnType, parameterTypes, generator.getLIRGeneratorTool().target(), false); - ((AMD64LIRGenerator) gen.getLIRGeneratorTool()).emitCCall(functionPointer.asLong(), cc, parameter, countFloatingTypeArguments(args)); + gen.getLIRGeneratorTool().emitCCall(functionPointer.asLong(), cc, parameter, countFloatingTypeArguments(args)); if (this.getKind() != Kind.Void) { generator.setResult(this, gen.getLIRGeneratorTool().emitMove(cc.getReturn())); }
--- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java Thu Apr 24 08:38:00 2014 +0200 @@ -49,7 +49,6 @@ import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.cfg.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.gen.*; import com.oracle.graal.debug.*; import com.oracle.graal.debug.Debug.Scope; import com.oracle.graal.gpu.*; @@ -70,6 +69,7 @@ import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; +import com.oracle.graal.nodes.spi.*; import com.oracle.graal.options.*; import com.oracle.graal.phases.*; import com.oracle.graal.phases.tiers.*; @@ -376,7 +376,7 @@ } @Override - public LIRGenerator newLIRGenerator(CallingConvention cc, LIRGenerationResult lirGenRes) { + public LIRGeneratorTool newLIRGenerator(CallingConvention cc, LIRGenerationResult lirGenRes) { return new HSAILHotSpotLIRGenerator(getProviders(), getRuntime().getConfig(), cc, lirGenRes); } @@ -386,7 +386,7 @@ } @Override - public NodeLIRBuilder newNodeLIRGenerator(StructuredGraph graph, LIRGenerator lirGen) { + public NodeLIRBuilderTool newNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen) { return new HSAILHotSpotNodeLIRBuilder(graph, lirGen); }
--- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLIRGenerator.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLIRGenerator.java Thu Apr 24 08:38:00 2014 +0200 @@ -151,6 +151,7 @@ return nodeResult; } + @Override public Value emitAtomicReadAndAdd(Value address, Value delta) { PlatformKind kind = delta.getPlatformKind(); Kind memKind = getMemoryKind(kind); @@ -161,6 +162,16 @@ } @Override + public Value emitAtomicReadAndWrite(Value address, Value newValue) { + PlatformKind kind = newValue.getPlatformKind(); + Kind memKind = getMemoryKind(kind); + Variable result = newVariable(kind); + HSAILAddressValue addressValue = asAddressValue(address); + append(new HSAILMove.AtomicReadAndWriteOp(memKind, result, addressValue, asAllocatable(newValue))); + return result; + } + + @Override public void emitDeoptimize(Value actionAndReason, Value failedSpeculation, LIRFrameState state) { emitDeoptimizeInner(actionAndReason, state, "emitDeoptimize"); }
--- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotNodeLIRBuilder.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotNodeLIRBuilder.java Thu Apr 24 08:38:00 2014 +0200 @@ -44,7 +44,7 @@ */ public class HSAILHotSpotNodeLIRBuilder extends HSAILNodeLIRBuilder implements HotSpotNodeLIRBuilder { - public HSAILHotSpotNodeLIRBuilder(StructuredGraph graph, LIRGenerator lirGen) { + public HSAILHotSpotNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen) { super(graph, lirGen); }
--- a/graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXHotSpotBackend.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXHotSpotBackend.java Thu Apr 24 08:38:00 2014 +0200 @@ -38,7 +38,6 @@ import com.oracle.graal.asm.ptx.*; import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.cfg.*; -import com.oracle.graal.compiler.gen.*; import com.oracle.graal.debug.*; import com.oracle.graal.debug.Debug.Scope; import com.oracle.graal.gpu.*; @@ -55,6 +54,7 @@ import com.oracle.graal.lir.ptx.PTXControlFlow.PTXPredicatedLIRInstruction; import com.oracle.graal.lir.ptx.PTXMemOp.LoadReturnAddrOp; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.spi.*; import com.oracle.graal.phases.*; import com.oracle.graal.phases.common.*; import com.oracle.graal.phases.tiers.*; @@ -356,12 +356,12 @@ } @Override - public LIRGenerator newLIRGenerator(CallingConvention cc, LIRGenerationResult lirGenRes) { + public LIRGeneratorTool newLIRGenerator(CallingConvention cc, LIRGenerationResult lirGenRes) { return new PTXHotSpotLIRGenerator(getProviders(), getRuntime().getConfig(), cc, lirGenRes); } @Override - public NodeLIRBuilder newNodeLIRGenerator(StructuredGraph graph, LIRGenerator lirGen) { + public NodeLIRBuilderTool newNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen) { return new PTXHotSpotNodeLIRBuilder(graph, lirGen); }
--- a/graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXHotSpotNodeLIRBuilder.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXHotSpotNodeLIRBuilder.java Thu Apr 24 08:38:00 2014 +0200 @@ -35,7 +35,7 @@ */ public class PTXHotSpotNodeLIRBuilder extends PTXNodeLIRBuilder implements HotSpotNodeLIRBuilder { - protected PTXHotSpotNodeLIRBuilder(StructuredGraph graph, LIRGenerator lirGen) { + protected PTXHotSpotNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen) { super(graph, lirGen); }
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCDeoptimizationStub.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCDeoptimizationStub.java Thu Apr 24 08:38:00 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,11 +35,14 @@ public SPARCDeoptimizationStub(HotSpotProviders providers, TargetDescription target, HotSpotForeignCallLinkage linkage) { super(providers, target, linkage); - registerConfig = new SPARCHotSpotRegisterConfig(target, new Register[]{o0, o1, o2, o3, o4, o5, o7, l0, l1, l2, l3, l4, l5, l6, l7, i0, i1, i2, i3, i4, i5, f0, f1, f2, f3, f4, f5, f6, f7}); + // This is basically the maximum we can spare. All other G and O register are used. + Register[] allocatable = new Register[]{g1, g3, g4, g5, o0, o1, o2, o3, o4}; + registerConfig = new SPARCHotSpotRegisterConfig(target, allocatable); } @Override public RegisterConfig getRegisterConfig() { return registerConfig; } + }
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Thu Apr 24 08:38:00 2014 +0200 @@ -44,7 +44,6 @@ import com.oracle.graal.asm.sparc.SPARCMacroAssembler.RestoreWindow; import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Setx; import com.oracle.graal.compiler.common.*; -import com.oracle.graal.compiler.gen.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.meta.HotSpotCodeCacheProvider.MarkId; import com.oracle.graal.hotspot.meta.*; @@ -55,6 +54,7 @@ import com.oracle.graal.lir.gen.*; import com.oracle.graal.lir.sparc.*; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.spi.*; /** * HotSpot SPARC specific backend. @@ -78,12 +78,17 @@ } @Override - public LIRGenerator newLIRGenerator(CallingConvention cc, LIRGenerationResult lirGenRes) { + public LIRGeneratorTool newLIRGenerator(CallingConvention cc, LIRGenerationResult lirGenRes) { return new SPARCHotSpotLIRGenerator(getProviders(), getRuntime().getConfig(), cc, lirGenRes); } @Override - public NodeLIRBuilder newNodeLIRGenerator(StructuredGraph graph, LIRGenerator lirGen) { + public LIRGenerationResult newLIRGenerationResult(LIR lir, FrameMap frameMap, Object stub) { + return new SPARCHotSpotLIRGenerationResult(lir, frameMap, stub); + } + + @Override + public NodeLIRBuilderTool newNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen) { return new SPARCHotSpotNodeLIRBuilder(graph, lirGen); } @@ -190,11 +195,6 @@ } @Override - public LIRGenerationResult newLIRGenerationResult(LIR lir, FrameMap frameMap, Object stub) { - return new LIRGenerationResultBase(lir, frameMap); - } - - @Override public void emitCode(CompilationResultBuilder crb, LIR lir, ResolvedJavaMethod installedCodeOwner) { SPARCMacroAssembler masm = (SPARCMacroAssembler) crb.asm; FrameMap frameMap = crb.frameMap;
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotCRuntimeCallPrologueOp.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotCRuntimeCallPrologueOp.java Thu Apr 24 08:38:00 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,9 +48,8 @@ @Override public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { - // Save last Java frame. - new Add(stackPointer, new SPARCAddress(stackPointer, 0).getDisplacement(), g4).emit(masm); + new Add(stackPointer, STACK_BIAS, g4).emit(masm); new Stx(g4, new SPARCAddress(thread, threadLastJavaSpOffset)).emit(masm); // Save the thread register when calling out to the runtime.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotEnterUnpackFramesStackFrameOp.java Thu Apr 24 08:38:00 2014 +0200 @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.hotspot.sparc; + +import static com.oracle.graal.sparc.SPARC.*; +import static com.oracle.graal.api.code.ValueUtil.*; +import static com.oracle.graal.asm.sparc.SPARCMacroAssembler.*; +import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; + +import com.oracle.graal.api.code.*; +import com.oracle.graal.api.meta.*; +import com.oracle.graal.asm.sparc.*; +import com.oracle.graal.hotspot.stubs.*; +import com.oracle.graal.lir.*; +import com.oracle.graal.lir.sparc.*; +import com.oracle.graal.lir.asm.*; + +/** + * Emits code that enters a stack frame which is tailored to call the C++ method + * {@link DeoptimizationStub#UNPACK_FRAMES Deoptimization::unpack_frames}. + */ +@Opcode("ENTER_UNPACK_FRAMES_STACK_FRAME") +final class SPARCHotSpotEnterUnpackFramesStackFrameOp extends SPARCLIRInstruction { + + private final Register thread; + private final int threadLastJavaSpOffset; + private final int threadLastJavaPcOffset; + @Alive(REG) AllocatableValue framePc; + @Alive(REG) AllocatableValue senderSp; + @Temp(REG) AllocatableValue scratch; + + SPARCHotSpotEnterUnpackFramesStackFrameOp(Register thread, int threadLastJavaSpOffset, int threadLastJavaPcOffset, AllocatableValue framePc, AllocatableValue senderSp, AllocatableValue scratch) { + this.thread = thread; + this.threadLastJavaSpOffset = threadLastJavaSpOffset; + this.threadLastJavaPcOffset = threadLastJavaPcOffset; + this.framePc = framePc; + this.senderSp = senderSp; + this.scratch = scratch; + } + + @Override + public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { + final int totalFrameSize = crb.frameMap.totalFrameSize(); + Register framePcRegister = asRegister(framePc); + Register senderSpRegister = asRegister(senderSp); + Register scratchRegister = asRegister(scratch); + + // Save final sender SP to O5_savedSP. + new Mov(senderSpRegister, o5).emit(masm); + + // Load final frame PC. + new Mov(framePcRegister, o7).emit(masm); + + // Allocate a full sized frame. + new Save(sp, -totalFrameSize, sp).emit(masm); + + new Mov(i0, o0).emit(masm); + new Mov(i1, o1).emit(masm); + new Mov(i2, o2).emit(masm); + new Mov(i3, o3).emit(masm); + new Mov(i4, o4).emit(masm); + + // Set up last Java values. + new Add(sp, STACK_BIAS, scratchRegister).emit(masm); + new Stx(scratchRegister, new SPARCAddress(thread, threadLastJavaSpOffset)).emit(masm); + + // Clear last Java PC. + new Stx(g0, new SPARCAddress(thread, threadLastJavaPcOffset)).emit(masm); + + /* + * Safe thread register manually since we are not using LEAF_SP for {@link + * DeoptimizationStub#UNPACK_FRAMES}. + */ + new Mov(thread, l7).emit(masm); + } +}
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerationResult.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerationResult.java Thu Apr 24 08:38:00 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,14 +22,49 @@ */ package com.oracle.graal.hotspot.sparc; +import java.util.*; + import com.oracle.graal.api.code.*; import com.oracle.graal.hotspot.stubs.*; +import com.oracle.graal.lir.*; +import com.oracle.graal.lir.StandardOp.*; import com.oracle.graal.lir.gen.*; -public interface SPARCHotSpotLIRGenerationResult extends LIRGenerationResult { +public class SPARCHotSpotLIRGenerationResult extends LIRGenerationResultBase { + + /** + * The slot reserved for storing the original return address when a frame is marked for + * deoptimization. The return address slot in the callee is overwritten with the address of a + * deoptimization stub. + */ + private StackSlot deoptimizationRescueSlot; + private final Object stub; + + /** + * Map from debug infos that need to be updated with callee save information to the operations + * that provide the information. + */ + private Map<LIRFrameState, SaveRegistersOp> calleeSaveInfo = new HashMap<>(); - StackSlot getDeoptimizationRescueSlot(); + public SPARCHotSpotLIRGenerationResult(LIR lir, FrameMap frameMap, Object stub) { + super(lir, frameMap); + this.stub = stub; + } + + StackSlot getDeoptimizationRescueSlot() { + return deoptimizationRescueSlot; + } - Stub getStub(); + public final void setDeoptimizationRescueSlot(StackSlot deoptimizationRescueSlot) { + this.deoptimizationRescueSlot = deoptimizationRescueSlot; + } + + Stub getStub() { + return (Stub) stub; + } + + Map<LIRFrameState, SaveRegistersOp> getCalleeSaveInfo() { + return calleeSaveInfo; + } }
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Thu Apr 24 08:38:00 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,6 +24,8 @@ import static com.oracle.graal.api.code.ValueUtil.*; import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; +import static com.oracle.graal.hotspot.nodes.UncommonTrapCallNode.*; +import static com.oracle.graal.sparc.SPARC.*; import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; @@ -264,38 +266,78 @@ throw GraalInternalError.unimplemented(); } + /** + * @param savedRegisters the registers saved by this operation which may be subject to pruning + * @param savedRegisterLocations the slots to which the registers are saved + * @param supportsRemove determines if registers can be pruned + */ + protected SPARCSaveRegistersOp emitSaveRegisters(Register[] savedRegisters, StackSlot[] savedRegisterLocations, boolean supportsRemove) { + SPARCSaveRegistersOp save = new SPARCSaveRegistersOp(savedRegisters, savedRegisterLocations, supportsRemove); + append(save); + return save; + } + public SaveRegistersOp emitSaveAllRegisters() { - // TODO Auto-generated method stub - throw GraalInternalError.unimplemented(); + // We save all registers that were not saved by the save instruction. + // @formatter:off + Register[] savedRegisters = { + // CPU + g1, g3, g4, g5, + // FPU + f0, f1, f2, f3, f4, f5, f6, f7, + f8, f9, f10, f11, f12, f13, f14, f15, + f16, f17, f18, f19, f20, f21, f22, f23, + f24, f25, f26, f27, f28, f29, f30, f31 + }; + // @formatter:on + StackSlot[] savedRegisterLocations = new StackSlot[savedRegisters.length]; + for (int i = 0; i < savedRegisters.length; i++) { + PlatformKind kind = target().arch.getLargestStorableKind(savedRegisters[i].getRegisterCategory()); + assert kind != Kind.Illegal; + StackSlot spillSlot = getResult().getFrameMap().allocateSpillSlot(kind); + savedRegisterLocations[i] = spillSlot; + } + return emitSaveRegisters(savedRegisters, savedRegisterLocations, false); } public void emitLeaveCurrentStackFrame() { - // TODO Auto-generated method stub - throw GraalInternalError.unimplemented(); + append(new SPARCHotSpotLeaveCurrentStackFrameOp()); } public void emitLeaveDeoptimizedStackFrame(Value frameSize, Value initialInfo) { - // TODO Auto-generated method stub - throw GraalInternalError.unimplemented(); + append(new SPARCHotSpotLeaveDeoptimizedStackFrameOp()); } public void emitEnterUnpackFramesStackFrame(Value framePc, Value senderSp, Value senderFp) { - // TODO Auto-generated method stub - throw GraalInternalError.unimplemented(); + Register thread = getProviders().getRegisters().getThreadRegister(); + Variable framePcVariable = load(framePc); + Variable senderSpVariable = load(senderSp); + Variable scratchVariable = newVariable(getHostWordKind()); + append(new SPARCHotSpotEnterUnpackFramesStackFrameOp(thread, config.threadLastJavaSpOffset(), config.threadLastJavaPcOffset(), framePcVariable, senderSpVariable, scratchVariable)); } public void emitLeaveUnpackFramesStackFrame() { - // TODO Auto-generated method stub - throw GraalInternalError.unimplemented(); + Register thread = getProviders().getRegisters().getThreadRegister(); + append(new SPARCHotSpotLeaveUnpackFramesStackFrameOp(thread, config.threadLastJavaSpOffset(), config.threadLastJavaPcOffset(), config.threadJavaFrameAnchorFlagsOffset())); } public void emitPushInterpreterFrame(Value frameSize, Value framePc, Value senderSp, Value initialInfo) { - // TODO Auto-generated method stub - throw GraalInternalError.unimplemented(); + Variable frameSizeVariable = load(frameSize); + Variable framePcVariable = load(framePc); + Variable senderSpVariable = load(senderSp); + Variable initialInfoVariable = load(initialInfo); + append(new SPARCHotSpotPushInterpreterFrameOp(frameSizeVariable, framePcVariable, senderSpVariable, initialInfoVariable)); } public Value emitUncommonTrapCall(Value trapRequest, SaveRegistersOp saveRegisterOp) { - // TODO Auto-generated method stub - throw GraalInternalError.unimplemented(); + ForeignCallLinkage linkage = getForeignCalls().lookupForeignCall(UNCOMMON_TRAP); + + Register threadRegister = getProviders().getRegisters().getThreadRegister(); + Register stackPointerRegister = getProviders().getRegisters().getStackPointerRegister(); + append(new SPARCHotSpotCRuntimeCallPrologueOp(config.threadLastJavaSpOffset(), threadRegister, stackPointerRegister)); + Variable result = super.emitForeignCall(linkage, null, threadRegister.asValue(Kind.Long), trapRequest); + append(new SPARCHotSpotCRuntimeCallEpilogueOp(config.threadLastJavaSpOffset(), config.threadLastJavaPcOffset(), config.threadJavaFrameAnchorFlagsOffset(), threadRegister)); + + return result; } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLeaveCurrentStackFrameOp.java Thu Apr 24 08:38:00 2014 +0200 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.hotspot.sparc; + +import static com.oracle.graal.sparc.SPARC.*; + +import com.oracle.graal.asm.sparc.*; +import com.oracle.graal.asm.sparc.SPARCMacroAssembler.*; +import com.oracle.graal.lir.*; +import com.oracle.graal.lir.asm.*; + +/** + * Pops the current frame off the stack. + */ +@Opcode("LEAVE_CURRENT_STACK_FRAME") +final class SPARCHotSpotLeaveCurrentStackFrameOp extends SPARCHotSpotEpilogueOp { + + @Override + public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { + // Save O registers over restore. + new Mov(o0, i0).emit(masm); + new Mov(o1, i1).emit(masm); + new Mov(o2, i2).emit(masm); + new Mov(o3, i3).emit(masm); + new Mov(o4, i4).emit(masm); + + leaveFrame(crb); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLeaveDeoptimizedStackFrameOp.java Thu Apr 24 08:38:00 2014 +0200 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.hotspot.sparc; + +import static com.oracle.graal.asm.sparc.SPARCMacroAssembler.*; +import static com.oracle.graal.sparc.SPARC.*; + +import com.oracle.graal.asm.sparc.*; +import com.oracle.graal.lir.*; +import com.oracle.graal.lir.asm.*; + +/** + * Pops the current frame off the stack including the return address. + */ +@Opcode("LEAVE_DEOPTIMIZED_STACK_FRAME") +final class SPARCHotSpotLeaveDeoptimizedStackFrameOp extends SPARCHotSpotEpilogueOp { + + @Override + public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { + // Save O registers over restore. + new Mov(o0, i0).emit(masm); + new Mov(o1, i1).emit(masm); + new Mov(o2, i2).emit(masm); + new Mov(o3, i3).emit(masm); + new Mov(o4, i4).emit(masm); + + new RestoreWindow().emit(masm); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLeaveUnpackFramesStackFrameOp.java Thu Apr 24 08:38:00 2014 +0200 @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.hotspot.sparc; + +import static com.oracle.graal.asm.sparc.SPARCMacroAssembler.*; +import static com.oracle.graal.sparc.SPARC.*; + +import com.oracle.graal.api.code.*; +import com.oracle.graal.asm.sparc.*; +import com.oracle.graal.hotspot.stubs.*; +import com.oracle.graal.lir.*; +import com.oracle.graal.lir.sparc.*; +import com.oracle.graal.lir.asm.*; + +/** + * Emits code that leaves a stack frame which is tailored to call the C++ method + * {@link DeoptimizationStub#UNPACK_FRAMES Deoptimization::unpack_frames}. + */ +@Opcode("LEAVE_UNPACK_FRAMES_STACK_FRAME") +final class SPARCHotSpotLeaveUnpackFramesStackFrameOp extends SPARCLIRInstruction { + + private final Register thread; + private final int threadLastJavaSpOffset; + private final int threadLastJavaPcOffset; + private final int threadJavaFrameAnchorFlagsOffset; + + SPARCHotSpotLeaveUnpackFramesStackFrameOp(Register thread, int threadLastJavaSpOffset, int threadLastJavaPcOffset, int threadJavaFrameAnchorFlagsOffset) { + this.thread = thread; + this.threadLastJavaSpOffset = threadLastJavaSpOffset; + this.threadLastJavaPcOffset = threadLastJavaPcOffset; + this.threadJavaFrameAnchorFlagsOffset = threadJavaFrameAnchorFlagsOffset; + } + + @Override + public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { + /* + * Safe thread register manually since we are not using LEAF_SP for {@link + * DeoptimizationStub#UNPACK_FRAMES}. + */ + new Mov(l7, thread).emit(masm); + + // Clear last Java frame values. + new Stx(g0, new SPARCAddress(thread, threadLastJavaSpOffset)).emit(masm); + new Stx(g0, new SPARCAddress(thread, threadLastJavaPcOffset)).emit(masm); + new Stw(g0, new SPARCAddress(thread, threadJavaFrameAnchorFlagsOffset)).emit(masm); + } +}
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotNodeLIRBuilder.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotNodeLIRBuilder.java Thu Apr 24 08:38:00 2014 +0200 @@ -43,7 +43,7 @@ public class SPARCHotSpotNodeLIRBuilder extends SPARCNodeLIRBuilder implements HotSpotNodeLIRBuilder { - public SPARCHotSpotNodeLIRBuilder(StructuredGraph graph, LIRGenerator lirGen) { + public SPARCHotSpotNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen) { super(graph, lirGen); assert gen instanceof SPARCHotSpotLIRGenerator; assert getDebugInfoBuilder() instanceof HotSpotDebugInfoBuilder;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotPushInterpreterFrameOp.java Thu Apr 24 08:38:00 2014 +0200 @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.hotspot.sparc; + +import static com.oracle.graal.asm.sparc.SPARCMacroAssembler.*; +import static com.oracle.graal.sparc.SPARC.*; +import static com.oracle.graal.api.code.ValueUtil.*; +import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; + +import com.oracle.graal.api.code.*; +import com.oracle.graal.api.meta.*; +import com.oracle.graal.asm.sparc.*; +import com.oracle.graal.lir.*; +import com.oracle.graal.lir.sparc.*; +import com.oracle.graal.lir.asm.*; + +/** + * Pushes an interpreter frame to the stack. + */ +@Opcode("PUSH_INTERPRETER_FRAME") +final class SPARCHotSpotPushInterpreterFrameOp extends SPARCLIRInstruction { + + @Alive(REG) AllocatableValue frameSize; + @Alive(REG) AllocatableValue framePc; + @Alive(REG) AllocatableValue senderSp; + @Alive(REG) AllocatableValue initialInfo; + + SPARCHotSpotPushInterpreterFrameOp(AllocatableValue frameSize, AllocatableValue framePc, AllocatableValue senderSp, AllocatableValue initialInfo) { + this.frameSize = frameSize; + this.framePc = framePc; + this.senderSp = senderSp; + this.initialInfo = initialInfo; + } + + @Override + public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { + final Register frameSizeRegister = asRegister(frameSize); + final Register framePcRegister = asRegister(framePc); + final Register senderSpRegister = asRegister(senderSp); + + // Save sender SP to O5_savedSP. + new Mov(senderSpRegister, o5).emit(masm); + + new Neg(frameSizeRegister).emit(masm); + new Save(sp, frameSizeRegister, sp).emit(masm); + + new Mov(i0, o0).emit(masm); + new Mov(i1, o1).emit(masm); + new Mov(i2, o2).emit(masm); + new Mov(i3, o3).emit(masm); + new Mov(i4, o4).emit(masm); + + // NOTE: Don't touch I5 as it contains valuable saved SP! + + // Move frame's new PC into i7 + new Mov(framePcRegister, i7).emit(masm); + } +}
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterConfig.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterConfig.java Thu Apr 24 08:38:00 2014 +0200 @@ -98,25 +98,27 @@ private static Register[] initAllocatable(boolean reserveForHeapBase) { Register[] registers = null; - // @formatter:off if (reserveForHeapBase) { - registers = new Register[] { + // @formatter:off + registers = new Register[]{ // TODO this is not complete o0, o1, o2, o3, o4, o5, /*o6,*/ o7, l0, l1, l2, l3, l4, l5, l6, l7, i0, i1, i2, i3, i4, i5, /*i6,*/ /*i7,*/ f0, f1, f2, f3, f4, f5, f6, f7 - }; + }; + // @formatter:on } else { - registers = new Register[] { + // @formatter:off + registers = new Register[]{ // TODO this is not complete o0, o1, o2, o3, o4, o5, /*o6,*/ o7, l0, l1, l2, l3, l4, l5, l6, l7, i0, i1, i2, i3, i4, i5, /*i6,*/ /*i7,*/ f0, f1, f2, f3, f4, f5, f6, f7 - }; + }; + // @formatter:on } - // @formatter:on if (RegisterPressure.getValue() != null) { String[] names = RegisterPressure.getValue().split(",");
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotSafepointOp.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotSafepointOp.java Thu Apr 24 08:38:00 2014 +0200 @@ -36,6 +36,8 @@ import com.oracle.graal.lir.gen.*; import com.oracle.graal.lir.sparc.*; +import edu.umd.cs.findbugs.annotations.*; + /** * Emits a safepoint poll. */ @@ -43,7 +45,7 @@ public class SPARCHotSpotSafepointOp extends SPARCLIRInstruction { @State protected LIRFrameState state; - @Temp({OperandFlag.REG}) private AllocatableValue temp; + @SuppressFBWarnings(value = "BC_IMPOSSIBLE_CAST", justification = "changed by the register allocator") @Temp({OperandFlag.REG}) private AllocatableValue temp; private final HotSpotVMConfig config;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java Thu Apr 24 08:38:00 2014 +0200 @@ -794,6 +794,7 @@ // offsets, ... @HotSpotVMFlag(name = "StackShadowPages") @Stable public int stackShadowPages; @HotSpotVMFlag(name = "UseStackBanging") @Stable public boolean useStackBanging; + @HotSpotVMConstant(name = "STACK_BIAS") @Stable public int stackBias; @HotSpotVMField(name = "oopDesc::_mark", type = "markOop", get = HotSpotVMField.Type.OFFSET) @Stable public int markOffset; @HotSpotVMField(name = "oopDesc::_metadata._klass", type = "Klass*", get = HotSpotVMField.Type.OFFSET) @Stable public int hubOffset;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotHostForeignCallsProvider.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotHostForeignCallsProvider.java Thu Apr 24 08:38:00 2014 +0200 @@ -119,7 +119,14 @@ registerForeignCall(NEW_ARRAY_C, c.newArrayAddress, NativeCall, DESTROYS_REGISTERS, NOT_LEAF, REEXECUTABLE, ANY_LOCATION); registerForeignCall(NEW_INSTANCE_C, c.newInstanceAddress, NativeCall, DESTROYS_REGISTERS, NOT_LEAF, REEXECUTABLE, ANY_LOCATION); registerForeignCall(UNCOMMON_TRAP, c.deoptimizationUncommonTrap, NativeCall, DESTROYS_REGISTERS, NOT_LEAF, NOT_REEXECUTABLE, ANY_LOCATION); + + /* + * We cannot use LEAF_SP here because on some architectures we have to align the stack + * manually before calling into the VM. See {@link + * AMD64HotSpotEnterUnpackFramesStackFrameOp#emitCode}. + */ registerForeignCall(UNPACK_FRAMES, c.deoptimizationUnpackFrames, NativeCall, DESTROYS_REGISTERS, LEAF, NOT_REEXECUTABLE, ANY_LOCATION); + registerForeignCall(VM_MESSAGE_C, c.vmMessageAddress, NativeCall, DESTROYS_REGISTERS, NOT_LEAF, REEXECUTABLE, NO_LOCATIONS); link(new NewInstanceStub(providers, target, registerStubCall(NEW_INSTANCE, REEXECUTABLE, NOT_LEAF, ANY_LOCATION)));
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/AllocaNode.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/AllocaNode.java Thu Apr 24 08:38:00 2014 +0200 @@ -27,9 +27,7 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.target.*; import com.oracle.graal.hotspot.*; -import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; @@ -37,7 +35,7 @@ * Reserves a block of memory in the stack frame of a method. The block is reserved in the frame for * the entire execution of the associated method. */ -public final class AllocaNode extends FixedWithNextNode implements LIRGenResLowerable { +public final class AllocaNode extends FixedWithNextNode implements LIRLowerable { /** * The number of slots in block. @@ -58,8 +56,8 @@ } @Override - public void generate(NodeLIRBuilderTool gen, LIRGenerationResult res) { - StackSlot array = res.getFrameMap().allocateStackSlots(slots, objects, null); + public void generate(NodeLIRBuilderTool gen) { + StackSlot array = gen.getLIRGeneratorTool().getResult().getFrameMap().allocateStackSlots(slots, objects, null); Value result = gen.getLIRGeneratorTool().emitAddress(array); gen.setResult(this, result); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/BeginLockScopeNode.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/BeginLockScopeNode.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,12 +24,11 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; -import com.oracle.graal.compiler.gen.*; -import com.oracle.graal.compiler.target.*; import com.oracle.graal.graph.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; +import com.oracle.graal.nodes.spi.*; import com.oracle.graal.word.*; /** @@ -39,7 +38,7 @@ * check on the object. */ @NodeInfo(allowedUsageTypes = {InputType.Memory}) -public final class BeginLockScopeNode extends AbstractMemoryCheckpoint implements LIRGenLowerable, MonitorEnter, MemoryCheckpoint.Single { +public final class BeginLockScopeNode extends AbstractMemoryCheckpoint implements LIRLowerable, MonitorEnter, MemoryCheckpoint.Single { private int lockDepth; @@ -59,7 +58,7 @@ } @Override - public void generate(NodeLIRBuilder gen) { + public void generate(NodeLIRBuilderTool gen) { assert lockDepth != -1; HotSpotLIRGenerator hsGen = (HotSpotLIRGenerator) gen.getLIRGeneratorTool(); StackSlot slot = hsGen.getLockSlot(lockDepth);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CStringNode.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CStringNode.java Thu Apr 24 08:38:00 2014 +0200 @@ -23,8 +23,6 @@ package com.oracle.graal.hotspot.nodes; import com.oracle.graal.api.meta.*; -import com.oracle.graal.compiler.gen.*; -import com.oracle.graal.compiler.target.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.word.*; @@ -32,7 +30,7 @@ /** * Converts a compile-time constant Java string into a C string installed with the generated code. */ -public final class CStringNode extends FloatingNode implements LIRGenLowerable { +public final class CStringNode extends FloatingNode implements LIRLowerable { private final String string; @@ -41,7 +39,7 @@ this.string = string; } - public void generate(NodeLIRBuilder gen) { + public void generate(NodeLIRBuilderTool gen) { gen.setResult(this, emitCString(gen, string)); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DimensionsNode.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DimensionsNode.java Thu Apr 24 08:38:00 2014 +0200 @@ -28,7 +28,6 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; -import com.oracle.graal.compiler.target.*; import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; @@ -38,7 +37,7 @@ * Intrinsic for allocating an on-stack array of integers to hold the dimensions of a multianewarray * instruction. */ -public final class DimensionsNode extends FixedWithNextNode implements LIRGenResLowerable { +public final class DimensionsNode extends FixedWithNextNode implements LIRLowerable { private final int rank; @@ -48,12 +47,13 @@ } @Override - public void generate(NodeLIRBuilderTool gen, LIRGenerationResult res) { + public void generate(NodeLIRBuilderTool gen) { + LIRGeneratorTool lirGen = gen.getLIRGeneratorTool(); int size = rank * 4; - int wordSize = gen.getLIRGeneratorTool().target().wordSize; + int wordSize = lirGen.target().wordSize; int slots = roundUp(size, wordSize) / wordSize; - StackSlot array = res.getFrameMap().allocateStackSlots(slots, new BitSet(0), null); - Value result = gen.getLIRGeneratorTool().emitAddress(array); + StackSlot array = lirGen.getResult().getFrameMap().allocateStackSlots(slots, new BitSet(0), null); + Value result = lirGen.emitAddress(array); gen.setResult(this, result); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DirectCompareAndSwapNode.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DirectCompareAndSwapNode.java Thu Apr 24 08:38:00 2014 +0200 @@ -23,13 +23,12 @@ package com.oracle.graal.hotspot.nodes; import com.oracle.graal.api.meta.*; -import com.oracle.graal.compiler.gen.*; -import com.oracle.graal.compiler.target.*; import com.oracle.graal.graph.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; +import com.oracle.graal.nodes.spi.*; import com.oracle.graal.word.*; /** @@ -39,7 +38,7 @@ * expected value or the compared against value instead of a boolean. */ @NodeInfo(allowedUsageTypes = {InputType.Memory}) -public class DirectCompareAndSwapNode extends FixedWithNextNode implements LIRGenLowerable, MemoryCheckpoint.Single { +public class DirectCompareAndSwapNode extends FixedWithNextNode implements LIRLowerable, MemoryCheckpoint.Single { @Input private ValueNode object; @Input private ValueNode offset; @@ -79,7 +78,7 @@ } @Override - public void generate(NodeLIRBuilder gen) { + public void generate(NodeLIRBuilderTool gen) { ((HotSpotNodeLIRBuilder) gen).visitDirectCompareAndSwap(this); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/MonitorCounterNode.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/MonitorCounterNode.java Thu Apr 24 08:38:00 2014 +0200 @@ -26,8 +26,6 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; -import com.oracle.graal.compiler.target.*; -import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.word.*; @@ -35,16 +33,16 @@ /** * Node that is used to maintain a stack based counter of how many locks are currently held. */ -public final class MonitorCounterNode extends FloatingNode implements LIRGenResLowerable { +public final class MonitorCounterNode extends FloatingNode implements LIRLowerable { private MonitorCounterNode() { super(null); } @Override - public void generate(NodeLIRBuilderTool gen, LIRGenerationResult res) { + public void generate(NodeLIRBuilderTool gen) { assert graph().getNodes().filter(MonitorCounterNode.class).count() == 1 : "monitor counters not canonicalized to single instance"; - StackSlot counter = res.getFrameMap().allocateStackSlots(1, new BitSet(0), null); + StackSlot counter = gen.getLIRGeneratorTool().getResult().getFrameMap().allocateStackSlots(1, new BitSet(0), null); Value result = gen.getLIRGeneratorTool().emitAddress(counter); gen.setResult(this, result); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewArrayStubCall.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewArrayStubCall.java Thu Apr 24 08:38:00 2014 +0200 @@ -25,18 +25,17 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.gen.*; -import com.oracle.graal.compiler.target.*; import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.hotspot.stubs.*; import com.oracle.graal.lir.*; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.spi.*; import com.oracle.graal.word.*; /** * A call to the {@link NewArrayStub}. */ -public class NewArrayStubCall extends DeoptimizingStubCall implements LIRGenLowerable { +public class NewArrayStubCall extends DeoptimizingStubCall implements LIRLowerable { private static final Stamp defaultStamp = StampFactory.objectNonNull(); @@ -61,9 +60,9 @@ } @Override - public void generate(NodeLIRBuilder gen) { + public void generate(NodeLIRBuilderTool gen) { ForeignCallLinkage linkage = gen.getLIRGeneratorTool().getForeignCalls().lookupForeignCall(NEW_ARRAY); - Variable result = gen.getLIRGenerator().emitForeignCall(linkage, gen.state(this), gen.operand(hub), gen.operand(length)); + Variable result = gen.getLIRGeneratorTool().emitForeignCall(linkage, gen.state(this), gen.operand(hub), gen.operand(length)); gen.setResult(this, result); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PrefetchAllocateNode.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PrefetchAllocateNode.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,13 +24,12 @@ package com.oracle.graal.hotspot.nodes; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.gen.*; -import com.oracle.graal.compiler.target.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.spi.*; import com.oracle.graal.word.*; -public class PrefetchAllocateNode extends FixedWithNextNode implements LIRGenLowerable { +public class PrefetchAllocateNode extends FixedWithNextNode implements LIRLowerable { @Input private ValueNode distance; @Input private ValueNode address; @@ -42,7 +41,7 @@ } @Override - public void generate(NodeLIRBuilder gen) { + public void generate(NodeLIRBuilderTool gen) { ((HotSpotNodeLIRBuilder) gen).emitPrefetchAllocate(address, distance); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/TailcallNode.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/TailcallNode.java Thu Apr 24 08:38:00 2014 +0200 @@ -29,7 +29,6 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.target.*; import com.oracle.graal.graph.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.java.*; @@ -41,7 +40,7 @@ * Performs a tail call to the specified target compiled method, with the parameter taken from the * supplied FrameState. */ -public class TailcallNode extends FixedWithNextNode implements LIRGenResLowerable { +public class TailcallNode extends FixedWithNextNode implements LIRLowerable { @Input(InputType.State) private FrameState frameState; @Input private ValueNode target; @@ -58,20 +57,21 @@ this.frameState = frameState; } - public void generate(NodeLIRBuilderTool gen, LIRGenerationResult res) { + public void generate(NodeLIRBuilderTool gen) { HotSpotVMConfig config = runtime().getConfig(); + LIRGeneratorTool lirGen = gen.getLIRGeneratorTool(); ResolvedJavaMethod method = frameState.method(); boolean isStatic = method.isStatic(); JavaType[] signature = MetaUtil.signatureToTypes(method.getSignature(), isStatic ? null : method.getDeclaringClass()); - CallingConvention cc = res.getFrameMap().registerConfig.getCallingConvention(CallingConvention.Type.JavaCall, null, signature, gen.getLIRGeneratorTool().target(), false); + CallingConvention cc = lirGen.getResult().getFrameMap().registerConfig.getCallingConvention(CallingConvention.Type.JavaCall, null, signature, lirGen.target(), false); List<ValueNode> parameters = new ArrayList<>(); for (int i = 0, slot = 0; i < cc.getArgumentCount(); i++, slot += HIRFrameStateBuilder.stackSlots(frameState.localAt(slot).getKind())) { parameters.add(frameState.localAt(slot)); } Value[] args = gen.visitInvokeArguments(cc, parameters); - Value address = gen.getLIRGeneratorTool().emitAddress(gen.operand(target), config.nmethodEntryOffset, Value.ILLEGAL, 0); - Value entry = gen.getLIRGeneratorTool().emitLoad(Kind.Long, address, null); + Value address = lirGen.emitAddress(gen.operand(target), config.nmethodEntryOffset, Value.ILLEGAL, 0); + Value entry = lirGen.emitLoad(Kind.Long, address, null); HotSpotLIRGenerator hsgen = (HotSpotLIRGenerator) gen; hsgen.emitTailcall(args, entry); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/DeoptimizationStub.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/DeoptimizationStub.java Thu Apr 24 08:38:00 2014 +0200 @@ -126,8 +126,8 @@ // Pop all the frames we must move/replace. // // Frame picture (youngest to oldest) - // 1: self-frame (no frame link) - // 2: deoptimizing frame (no frame link) + // 1: self-frame + // 2: deoptimizing frame // 3: caller of deoptimizing frame (could be compiled/interpreted). // Pop self-frame. @@ -136,7 +136,7 @@ // Load the initial info we should save (e.g. frame pointer). final Word initialInfo = unrollBlock.readWord(deoptimizationUnrollBlockInitialInfoOffset()); - // Pop deoptimized frame + // Pop deoptimized frame. final int sizeOfDeoptimizedFrame = unrollBlock.readInt(deoptimizationUnrollBlockSizeOfDeoptimizedFrameOffset()); LeaveDeoptimizedStackFrameNode.leaveDeoptimizedStackFrame(sizeOfDeoptimizedFrame, initialInfo); @@ -144,13 +144,15 @@ * Stack bang to make sure there's enough room for the interpreter frames. Bang stack for * total size of the interpreter frames plus shadow page size. Bang one page at a time * because large sizes can bang beyond yellow and red zones. + * + * @deprecated This code should go away as soon as JDK-8032410 hits the Graal repository. */ final int totalFrameSizes = unrollBlock.readInt(deoptimizationUnrollBlockTotalFrameSizesOffset()); final int bangPages = NumUtil.roundUp(totalFrameSizes, pageSize()) / pageSize() + stackShadowPages(); Word stackPointer = readRegister(stackPointerRegister); for (int i = 1; i < bangPages; i++) { - stackPointer.writeInt(-(i * pageSize()), i); + stackPointer.writeInt((-i * pageSize()) + stackBias(), 0); } // Load number of interpreter frames. @@ -221,6 +223,19 @@ return config().useStackBanging ? config().stackShadowPages : 0; } + /** + * Returns the stack bias for the host architecture. + * + * @deprecated This method should go away as soon as JDK-8032410 hits the Graal repository. + * + * @return stack bias + */ + @Deprecated + @Fold + private static int stackBias() { + return config().stackBias; + } + @Fold private static int deoptimizationUnrollBlockSizeOfDeoptimizedFrameOffset() { return config().deoptimizationUnrollBlockSizeOfDeoptimizedFrameOffset;
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/except/Catch_NPE_07.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/except/Catch_NPE_07.java Thu Apr 24 08:38:00 2014 +0200 @@ -23,8 +23,9 @@ package com.oracle.graal.jtt.except; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -61,12 +62,12 @@ } } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/except/Catch_Two02.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/except/Catch_Two02.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.except; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -49,17 +50,17 @@ } } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 3); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/except/Catch_Two03.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/except/Catch_Two03.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.except; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -56,17 +57,17 @@ } } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/except/Throw_InNested.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/except/Throw_InNested.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.except; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public class Throw_InNested extends JTTTest { @@ -48,12 +49,12 @@ return i; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/except/Throw_Synchronized01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/except/Throw_Synchronized01.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.except; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public class Throw_Synchronized01 extends JTTTest { @@ -38,12 +39,12 @@ throw new Exception(); } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/except/Throw_Synchronized02.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/except/Throw_Synchronized02.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.except; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public class Throw_Synchronized02 extends JTTTest { @@ -36,12 +37,12 @@ throw new Exception(); } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/except/Throw_Synchronized03.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/except/Throw_Synchronized03.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.except; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public class Throw_Synchronized03 extends JTTTest { @@ -41,12 +42,12 @@ throw new Exception(); } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotpath/HP_allocate01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotpath/HP_allocate01.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.hotpath; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -37,27 +38,27 @@ return sum; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 80); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotpath/HP_field04.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotpath/HP_field04.java Thu Apr 24 08:38:00 2014 +0200 @@ -23,8 +23,9 @@ // Checkstyle: stop package com.oracle.graal.jtt.hotpath; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -55,12 +56,12 @@ return (int) (b + c + s + i + l + f + d); } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 40); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1000); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotpath/HP_invoke01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotpath/HP_invoke01.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ package com.oracle.graal.jtt.hotpath; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -104,12 +105,12 @@ } } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 40); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 80); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotpath/HP_life.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotpath/HP_life.java Thu Apr 24 08:38:00 2014 +0200 @@ -25,8 +25,9 @@ import java.util.*; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -106,7 +107,7 @@ } } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 5); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotpath/HP_nest02.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotpath/HP_nest02.java Thu Apr 24 08:38:00 2014 +0200 @@ -23,8 +23,9 @@ // Checkstyle: stop package com.oracle.graal.jtt.hotpath; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -48,7 +49,7 @@ return sum; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 15); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotspot/Test6196102.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotspot/Test6196102.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.hotspot; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /** * @bug 6196102 @@ -46,7 +47,7 @@ return "ok"; } - @LongTest + @Test public void run0() throws Throwable { runTest("test"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotspot/Test6850611.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotspot/Test6850611.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.hotspot; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; //@formatter:off @@ -50,7 +51,7 @@ return 95; } - @LongTest + @Test public void run0() throws Throwable { runTest("test"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/jdk/EnumMap02.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/jdk/EnumMap02.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ import java.util.*; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -45,17 +46,17 @@ C } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/jdk/System_setOut.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/jdk/System_setOut.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ import java.io.*; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -58,7 +59,7 @@ out.println(test(10000)); } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 10000); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/jdk/UnsafeAccess01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/jdk/UnsafeAccess01.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,10 +24,11 @@ import java.lang.reflect.*; +import org.junit.*; + import sun.misc.*; import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -55,7 +56,7 @@ } } - @LongTest + @Test public void run0() throws Throwable { runTest("test"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/ClassLoader_loadClass01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/ClassLoader_loadClass01.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ import java.net.*; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -43,22 +44,22 @@ return null; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 5); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Class_Literal01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Class_Literal01.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.lang; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public final class Class_Literal01 extends JTTTest { @@ -45,27 +46,27 @@ return null; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Class_asSubclass01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Class_asSubclass01.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.lang; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public final class Class_asSubclass01 extends JTTTest { @@ -53,27 +54,27 @@ return i; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Class_cast01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Class_cast01.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.lang; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public final class Class_cast01 extends JTTTest { @@ -57,27 +58,27 @@ return i; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Class_forName01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Class_forName01.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.lang; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public final class Class_forName01 extends JTTTest { @@ -45,27 +46,27 @@ return null; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Class_forName02.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Class_forName02.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.lang; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public final class Class_forName02 extends JTTTest { @@ -51,27 +52,27 @@ return null; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Class_forName03.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Class_forName03.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ import java.net.*; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -56,32 +57,32 @@ return null; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); } - @LongTest + @Test public void run5() throws Throwable { runTest("test", 5); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Class_forName04.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Class_forName04.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.lang; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -48,32 +49,32 @@ return null; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); } - @LongTest + @Test public void run5() throws Throwable { runTest("test", 5); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Class_forName05.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Class_forName05.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ import java.net.*; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -41,17 +42,17 @@ return null; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 5); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Class_getInterfaces01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Class_getInterfaces01.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.lang; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -81,27 +82,27 @@ } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Object_getClass01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Object_getClass01.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.lang; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public final class Object_getClass01 extends JTTTest { @@ -49,27 +50,27 @@ return null; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Object_toString01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/Object_toString01.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.lang; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public class Object_toString01 extends JTTTest { @@ -47,17 +48,17 @@ return string; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/String_intern02.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/String_intern02.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.lang; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -33,17 +34,17 @@ return ("id" + i).intern() == ("id" + i).intern(); } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/String_intern03.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/String_intern03.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.lang; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -33,17 +34,17 @@ return ("id" + i).intern().equals("id" + i); } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/loop/LoopParseLong.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/loop/LoopParseLong.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.loop; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public class LoopParseLong extends JTTTest { @@ -98,7 +99,7 @@ return negative ? result : -result; } - @LongTest + @Test public void run0() throws Throwable { runTest("testShortened", "7", 10); runTest("testShortened", "-100", 10);
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/loop/LoopSwitch01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/loop/LoopSwitch01.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.loop; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -58,7 +59,7 @@ return "" + ('a' + count); } - @LongTest + @Test public void run0() throws Throwable { runTest("test"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/micro/BigObjectParams02.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/micro/BigObjectParams02.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.micro; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -33,7 +34,7 @@ return p0 + p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8 + p9; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/micro/Matrix01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/micro/Matrix01.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.micro; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -155,32 +156,32 @@ ((Matrix[]) array)[val % array.length] = new Matrix(number); } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); } - @LongTest + @Test public void run5() throws Throwable { runTest("test", 5); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/micro/ReferenceMap01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/micro/ReferenceMap01.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.micro; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -57,7 +58,7 @@ return Integer.valueOf(foo(new String[]{"asdf"})); } - @LongTest + @Test public void run0() throws Throwable { runTest("test"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/micro/StrangeFrames.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/micro/StrangeFrames.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.micro; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -58,7 +59,7 @@ Object c = b; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/optimize/Conditional01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/optimize/Conditional01.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ import java.util.*; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -117,22 +118,22 @@ return c2 ? 1 : 0; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 10); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 20); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 40); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/optimize/NCE_FlowSensitive05.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/optimize/NCE_FlowSensitive05.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ import java.io.*; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -44,7 +45,7 @@ return (String) arg; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", (Object) null); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/optimize/VN_InstanceOf02.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/optimize/VN_InstanceOf02.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.optimize; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* * Tests value numbering of instanceof operations. @@ -76,17 +77,17 @@ return false; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Class_getField01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Class_getField01.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.reflect; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -37,22 +38,22 @@ return Class_getField01.class.getField(input).getName(); } - @LongTest + @Test public void run0() throws Throwable { runTest("test", "test"); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", "field"); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", "field2"); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", "field3"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Class_getField02.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Class_getField02.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.reflect; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -42,27 +43,27 @@ public String field4; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", "test"); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", "field"); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", "field2"); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", "field3"); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", "field4"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Class_getMethod01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Class_getMethod01.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.reflect; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -39,17 +40,17 @@ field = args[0]; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", "test"); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", "main"); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", "xx"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Class_getMethod02.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Class_getMethod02.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.reflect; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -52,37 +53,37 @@ field = args[0]; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); } - @LongTest + @Test public void run5() throws Throwable { runTest("test", 5); } - @LongTest + @Test public void run6() throws Throwable { runTest("test", 6); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Class_newInstance03.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Class_newInstance03.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.reflect; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public class Class_newInstance03 extends JTTTest { @@ -45,27 +46,27 @@ return false; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Field_get01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Field_get01.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.reflect; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -59,47 +60,47 @@ return false; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); } - @LongTest + @Test public void run5() throws Throwable { runTest("test", 5); } - @LongTest + @Test public void run6() throws Throwable { runTest("test", 6); } - @LongTest + @Test public void run7() throws Throwable { runTest("test", 7); } - @LongTest + @Test public void run8() throws Throwable { runTest("test", 8); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Field_get02.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Field_get02.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.reflect; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -61,47 +62,47 @@ return false; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); } - @LongTest + @Test public void run5() throws Throwable { runTest("test", 5); } - @LongTest + @Test public void run6() throws Throwable { runTest("test", 6); } - @LongTest + @Test public void run7() throws Throwable { runTest("test", 7); } - @LongTest + @Test public void run8() throws Throwable { runTest("test", 8); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Field_get03.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Field_get03.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ import java.lang.reflect.*; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -87,47 +88,47 @@ return false; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); } - @LongTest + @Test public void run5() throws Throwable { runTest("test", 5); } - @LongTest + @Test public void run6() throws Throwable { runTest("test", 6); } - @LongTest + @Test public void run7() throws Throwable { runTest("test", 7); } - @LongTest + @Test public void run8() throws Throwable { runTest("test", 8); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Field_get04.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Field_get04.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.reflect; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -61,47 +62,47 @@ return false; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); } - @LongTest + @Test public void run5() throws Throwable { runTest("test", 5); } - @LongTest + @Test public void run6() throws Throwable { runTest("test", 6); } - @LongTest + @Test public void run7() throws Throwable { runTest("test", 7); } - @LongTest + @Test public void run8() throws Throwable { runTest("test", 8); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Field_getType01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Field_getType01.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.reflect; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -59,47 +60,47 @@ return false; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); } - @LongTest + @Test public void run5() throws Throwable { runTest("test", 5); } - @LongTest + @Test public void run6() throws Throwable { runTest("test", 6); } - @LongTest + @Test public void run7() throws Throwable { runTest("test", 7); } - @LongTest + @Test public void run8() throws Throwable { runTest("test", 8); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Field_set01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Field_set01.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.reflect; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -67,47 +68,47 @@ return false; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); } - @LongTest + @Test public void run5() throws Throwable { runTest("test", 5); } - @LongTest + @Test public void run6() throws Throwable { runTest("test", 6); } - @LongTest + @Test public void run7() throws Throwable { runTest("test", 7); } - @LongTest + @Test public void run8() throws Throwable { runTest("test", 8); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Field_set02.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Field_set02.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.reflect; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -69,47 +70,47 @@ return false; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); } - @LongTest + @Test public void run5() throws Throwable { runTest("test", 5); } - @LongTest + @Test public void run6() throws Throwable { runTest("test", 6); } - @LongTest + @Test public void run7() throws Throwable { runTest("test", 7); } - @LongTest + @Test public void run8() throws Throwable { runTest("test", 8); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Field_set03.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Field_set03.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.reflect; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -69,47 +70,47 @@ return false; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); } - @LongTest + @Test public void run5() throws Throwable { runTest("test", 5); } - @LongTest + @Test public void run6() throws Throwable { runTest("test", 6); } - @LongTest + @Test public void run7() throws Throwable { runTest("test", 7); } - @LongTest + @Test public void run8() throws Throwable { runTest("test", 8); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Invoke_except01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Invoke_except01.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ import java.lang.reflect.*; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -56,27 +57,27 @@ return arg.length; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Invoke_main01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Invoke_main01.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ import java.lang.reflect.*; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -44,12 +45,12 @@ field = args[0]; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", "test1"); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", "test2"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Invoke_main03.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Invoke_main03.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ import java.lang.reflect.*; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -48,12 +49,12 @@ field = args[0]; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", "test1"); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", "test2"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Method_getParameterTypes01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Method_getParameterTypes01.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.reflect; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -51,22 +52,22 @@ public void method3(int arg1, Object arg2) { } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Method_getReturnType01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/reflect/Method_getReturnType01.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.reflect; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -51,22 +52,22 @@ public void method3() { } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Monitor_contended01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Monitor_contended01.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.threads; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public final class Monitor_contended01 extends JTTTest implements Runnable { @@ -71,7 +72,7 @@ } } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run0() throws Throwable { runTest("test"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Monitor_notowner01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Monitor_notowner01.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.threads; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public class Monitor_notowner01 extends JTTTest { @@ -62,7 +63,7 @@ } } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run0() throws Throwable { runTest("test"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait01.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.threads; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public class Object_wait01 extends JTTTest implements Runnable { @@ -57,22 +58,22 @@ } } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run0() throws Throwable { runTest("test", 0); } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run1() throws Throwable { runTest("test", 1); } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run2() throws Throwable { runTest("test", 3); } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run3() throws Throwable { runTest("test", 15); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait02.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait02.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.threads; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public class Object_wait02 extends JTTTest implements Runnable { @@ -57,17 +58,17 @@ } } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run0() throws Throwable { runTest("test", 0); } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run1() throws Throwable { runTest("test", 1); } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run2() throws Throwable { runTest("test", 2); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait03.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait03.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.threads; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public class Object_wait03 extends JTTTest implements Runnable { @@ -63,17 +64,17 @@ } } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run0() throws Throwable { runTest("test", 0); } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run1() throws Throwable { runTest("test", 1); } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run2() throws Throwable { runTest("test", 2); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait04.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait04.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.threads; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public class Object_wait04 extends JTTTest implements Runnable { @@ -67,32 +68,32 @@ } } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run0() throws Throwable { runTest("test", 0); } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run1() throws Throwable { runTest("test", 1); } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run2() throws Throwable { runTest("test", 2); } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run3() throws Throwable { runTest("test", 3); } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run4() throws Throwable { runTest("test", 4); } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run5() throws Throwable { runTest("test", 5); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/ThreadLocal03.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/ThreadLocal03.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.threads; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -59,22 +60,22 @@ } } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_getState02.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_getState02.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.threads; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public final class Thread_getState02 extends JTTTest { @@ -33,7 +34,7 @@ return new Thread().getState() == Thread.State.NEW; } - @LongTest + @Test public void run0() throws Throwable { runTest("test"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted02.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted02.java Thu Apr 24 08:38:00 2014 +0200 @@ -26,8 +26,9 @@ package com.oracle.graal.jtt.threads; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; //Test all, mainly monitors public class Thread_isInterrupted02 extends JTTTest { @@ -85,12 +86,12 @@ } } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run0() throws Throwable { runTest("test", 0, 0); } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run1() throws Throwable { runTest("test", 1, 500); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted03.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted03.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.threads; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -68,7 +69,7 @@ } } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run0() throws Throwable { runTest("test"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted04.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted04.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.threads; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -66,7 +67,7 @@ } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run0() throws Throwable { runTest("test"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted05.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted05.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,8 +22,9 @@ */ package com.oracle.graal.jtt.threads; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; /* */ @@ -66,7 +67,7 @@ } } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run0() throws Throwable { runTest("test"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_join01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_join01.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.threads; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public class Thread_join01 extends JTTTest implements Runnable { @@ -43,7 +44,7 @@ cont = false; } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run0() throws Throwable { runTest("test"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_join02.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_join02.java Thu Apr 24 08:38:00 2014 +0200 @@ -27,8 +27,9 @@ */ package com.oracle.graal.jtt.threads; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public class Thread_join02 extends JTTTest implements Runnable { @@ -50,7 +51,7 @@ cont = false; } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run0() throws Throwable { runTest("test"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_join03.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_join03.java Thu Apr 24 08:38:00 2014 +0200 @@ -27,8 +27,9 @@ */ package com.oracle.graal.jtt.threads; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public class Thread_join03 extends JTTTest implements Runnable { @@ -47,7 +48,7 @@ cont = false; } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run0() throws Throwable { runTest("test"); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_new01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_new01.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.threads; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public final class Thread_new01 extends JTTTest { @@ -45,27 +46,27 @@ return false; } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_new02.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_new02.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.threads; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public class Thread_new02 extends JTTTest implements Runnable { @@ -51,27 +52,27 @@ // do nothing. } - @LongTest + @Test public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @Test public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @Test public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @Test public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @Test public void run4() throws Throwable { runTest("test", 4); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_sleep01.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_sleep01.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,9 @@ */ package com.oracle.graal.jtt.threads; +import org.junit.*; + import com.oracle.graal.jtt.*; -import com.oracle.graal.test.*; public final class Thread_sleep01 extends JTTTest { @@ -35,17 +36,17 @@ return System.currentTimeMillis() - before >= i; } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run0() throws Throwable { runTest("test", 10); } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run1() throws Throwable { runTest("test", 20); } - @LongTest(timeout = 20000) + @Test(timeout = 20000) public void run2() throws Throwable { runTest("test", 100); }
--- a/graal/com.oracle.graal.lir.hsail/src/com/oracle/graal/lir/hsail/HSAILMove.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.lir.hsail/src/com/oracle/graal/lir/hsail/HSAILMove.java Thu Apr 24 08:38:00 2014 +0200 @@ -479,6 +479,32 @@ } } + @Opcode("ATOMIC_READ_AND_WRITE") + public static class AtomicReadAndWriteOp extends HSAILLIRInstruction { + + private final Kind accessKind; + + @Def protected AllocatableValue result; + @Use({COMPOSITE}) protected HSAILAddressValue address; + @Use({REG, CONST}) protected Value newValue; + + public AtomicReadAndWriteOp(Kind accessKind, AllocatableValue result, HSAILAddressValue address, Value newValue) { + this.accessKind = accessKind; + this.result = result; + this.address = address; + this.newValue = newValue; + } + + public HSAILAddressValue getAddress() { + return address; + } + + @Override + public void emitCode(CompilationResultBuilder crb, HSAILAssembler masm) { + masm.emitAtomicExch(accessKind, result, address.toAddress(), newValue); + } + } + public static class NullCheckOp extends HSAILLIRInstruction { @Use protected Value input;
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCArithmetic.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCArithmetic.java Thu Apr 24 08:38:00 2014 +0200 @@ -68,7 +68,7 @@ FADD, FSUB, FMUL, FDIV, FREM, FAND, FOR, FXOR, DADD, DSUB, DMUL, DDIV, DREM, DAND, DOR, DXOR, INEG, LNEG, FNEG, DNEG, INOT, LNOT, - I2L, L2I, I2B, I2C, I2S, + L2I, B2I, S2I, B2L, S2L, I2L, F2D, D2F, I2F, I2D, F2I, D2I, L2F, L2D, F2L, D2L, @@ -572,11 +572,11 @@ case L2I: new Signx(asLongReg(src), asIntReg(dst)).emit(masm); break; - case I2B: + case B2I: new Sll(asIntReg(src), 24, asIntReg(dst)).emit(masm); new Srl(asIntReg(dst), 24, asIntReg(dst)).emit(masm); break; - case I2C: + case S2I: new Sll(asIntReg(src), 16, asIntReg(dst)).emit(masm); new Srl(asIntReg(dst), 16, asIntReg(dst)).emit(masm); break;
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCControlFlow.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCControlFlow.java Thu Apr 24 08:38:00 2014 +0200 @@ -270,13 +270,16 @@ @Opcode("CMOVE") public static class CondMoveOp extends SPARCLIRInstruction { + private final Kind kind; + @Def({REG, HINT}) protected Value result; @Alive({REG}) protected Value trueValue; @Use({REG, STACK, CONST}) protected Value falseValue; private final ConditionFlag condition; - public CondMoveOp(Variable result, Condition condition, Variable trueValue, Value falseValue) { + public CondMoveOp(Kind kind, Variable result, Condition condition, Variable trueValue, Value falseValue) { + this.kind = kind; this.result = result; this.condition = intCond(condition); this.trueValue = trueValue; @@ -285,20 +288,28 @@ @Override public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { - cmove(crb, masm, result, false, condition, false, trueValue, falseValue); + // check that we don't overwrite an input operand before it is used. + assert !result.equals(trueValue); + + SPARCMove.move(crb, masm, result, falseValue); + cmove(crb, masm, kind, result, condition, trueValue); } } @Opcode("CMOVE") public static class FloatCondMoveOp extends SPARCLIRInstruction { + private final Kind kind; + @Def({REG}) protected Value result; @Alive({REG}) protected Value trueValue; @Alive({REG}) protected Value falseValue; + private final ConditionFlag condition; private final boolean unorderedIsTrue; - public FloatCondMoveOp(Variable result, Condition condition, boolean unorderedIsTrue, Variable trueValue, Variable falseValue) { + public FloatCondMoveOp(Kind kind, Variable result, Condition condition, boolean unorderedIsTrue, Variable trueValue, Variable falseValue) { + this.kind = kind; this.result = result; this.condition = floatCond(condition); this.unorderedIsTrue = unorderedIsTrue; @@ -308,18 +319,12 @@ @Override public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { - cmove(crb, masm, result, true, condition, unorderedIsTrue, trueValue, falseValue); - } - } + // check that we don't overwrite an input operand before it is used. + assert !result.equals(trueValue); - private static void cmove(CompilationResultBuilder crb, SPARCMacroAssembler masm, Value result, boolean isFloat, ConditionFlag condition, boolean unorderedIsTrue, Value trueValue, Value falseValue) { - // check that we don't overwrite an input operand before it is used. - assert !result.equals(trueValue); + SPARCMove.move(crb, masm, result, falseValue); + cmove(crb, masm, kind, result, condition, trueValue); - SPARCMove.move(crb, masm, result, falseValue); - cmove(crb, masm, result, condition, trueValue); - - if (isFloat) { if (unorderedIsTrue && !trueOnUnordered(condition)) { // cmove(crb, masm, result, ConditionFlag.Parity, trueValue); throw GraalInternalError.unimplemented(); @@ -330,18 +335,20 @@ } } - private static void cmove(CompilationResultBuilder crb, SPARCMacroAssembler masm, Value result, ConditionFlag cond, Value other) { + private static void cmove(CompilationResultBuilder crb, SPARCMacroAssembler masm, Kind kind, Value result, ConditionFlag cond, Value other) { if (!isRegister(other)) { SPARCMove.move(crb, masm, result, other); - throw new InternalError("result should be scratch"); + throw GraalInternalError.shouldNotReachHere("result should be scratch"); } assert !asRegister(other).equals(asRegister(result)) : "other already overwritten by previous move"; - switch (other.getKind()) { + switch (kind) { case Int: - // XXX CC depends on compare new Movcc(cond, CC.Icc, asRegister(other), asRegister(result)).emit(masm); break; case Long: + case Object: + new Movcc(cond, CC.Xcc, asRegister(other), asRegister(result)).emit(masm); + break; default: throw GraalInternalError.shouldNotReachHere(); }
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCFrameMap.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCFrameMap.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,6 +24,7 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.asm.*; import com.oracle.graal.lir.*; /** @@ -33,7 +34,7 @@ * * <pre> * Base Contents - * + * * : : ----- * caller | incoming overflow argument n | ^ * frame : ... : | positive @@ -88,8 +89,7 @@ @Override protected int alignFrameSize(int size) { - int x = size + (target.stackAlignment - 1); - return (x / target.stackAlignment) * target.stackAlignment; + return NumUtil.roundUp(size, target.stackAlignment); } @Override
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Thu Apr 24 08:38:00 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,32 +23,14 @@ package com.oracle.graal.lir.sparc; import static com.oracle.graal.api.code.ValueUtil.*; +import static com.oracle.graal.asm.sparc.SPARCMacroAssembler.*; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; import static com.oracle.graal.sparc.SPARC.*; import com.oracle.graal.api.code.*; +import com.oracle.graal.api.code.CompilationResult.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.asm.sparc.*; -import com.oracle.graal.asm.sparc.SPARCAssembler.Add; -import com.oracle.graal.asm.sparc.SPARCAssembler.Lddf; -import com.oracle.graal.asm.sparc.SPARCAssembler.Ldf; -import com.oracle.graal.asm.sparc.SPARCAssembler.Ldsb; -import com.oracle.graal.asm.sparc.SPARCAssembler.Ldsh; -import com.oracle.graal.asm.sparc.SPARCAssembler.Ldsw; -import com.oracle.graal.asm.sparc.SPARCAssembler.Lduh; -import com.oracle.graal.asm.sparc.SPARCAssembler.Ldx; -import com.oracle.graal.asm.sparc.SPARCAssembler.Membar; -import com.oracle.graal.asm.sparc.SPARCAssembler.Rdpc; -import com.oracle.graal.asm.sparc.SPARCAssembler.Stb; -import com.oracle.graal.asm.sparc.SPARCAssembler.Sth; -import com.oracle.graal.asm.sparc.SPARCAssembler.Stw; -import com.oracle.graal.asm.sparc.SPARCAssembler.Stx; -import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Cas; -import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Casx; -import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Clr; -import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Mov; -import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Setuw; -import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Setx; import com.oracle.graal.compiler.common.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.StandardOp.ImplicitNullCheck; @@ -154,32 +136,33 @@ @Override public void emitMemAccess(SPARCMacroAssembler masm) { - SPARCAddress addr = address.toAddress(); + final SPARCAddress addr = address.toAddress(); + final Register dst = asRegister(result); switch (kind) { case Boolean: case Byte: - new Ldsb(addr, asRegister(result)).emit(masm); + new Ldsb(addr, dst).emit(masm); break; case Short: - new Ldsh(addr, asRegister(result)).emit(masm); + new Ldsh(addr, dst).emit(masm); break; case Char: - new Lduh(addr, asRegister(result)).emit(masm); + new Lduh(addr, dst).emit(masm); break; case Int: - new Ldsw(addr, asRegister(result)).emit(masm); + new Ldsw(addr, dst).emit(masm); break; case Long: - new Ldx(addr, asRegister(result)).emit(masm); + new Ldx(addr, dst).emit(masm); break; case Float: - new Ldf(addr, asRegister(result)).emit(masm); + new Ldf(addr, dst).emit(masm); break; case Double: - new Lddf(addr, asRegister(result)).emit(masm); + new Lddf(addr, dst).emit(masm); break; case Object: - new Ldx(addr, asRegister(result)).emit(masm); + new Ldx(addr, dst).emit(masm); break; default: throw GraalInternalError.shouldNotReachHere(); @@ -208,6 +191,26 @@ } } + public static class LoadDataAddressOp extends SPARCLIRInstruction { + + @Def({REG}) protected AllocatableValue result; + private final byte[] data; + + public LoadDataAddressOp(AllocatableValue result, byte[] data) { + this.result = result; + this.data = data; + } + + @Override + public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { + RawData rawData = new RawData(data, 16); + SPARCAddress addr = (SPARCAddress) crb.recordDataReferenceInCode(rawData); + assert addr == masm.getPlaceholder(); + final boolean forceRelocatable = true; + new Setx(0, asRegister(result), forceRelocatable).emit(masm); + } + } + public static class MembarOp extends SPARCLIRInstruction { private final int barriers; @@ -395,19 +398,25 @@ } private static void reg2reg(SPARCAssembler masm, Value result, Value input) { - if (asRegister(input).equals(asRegister(result))) { + final Register src = asRegister(input); + final Register dst = asRegister(result); + if (src.equals(dst)) { return; } switch (input.getKind()) { case Int: case Long: case Object: - new Mov(asRegister(input), asRegister(result)).emit(masm); + new Mov(src, dst).emit(masm); break; case Float: + new Fmovs(src, dst).emit(masm); + break; case Double: + new Fmovd(src, dst).emit(masm); + break; default: - throw GraalInternalError.shouldNotReachHere("missing: " + input.getKind()); + throw GraalInternalError.shouldNotReachHere(); } } @@ -423,7 +432,11 @@ new Stx(src, dst).emit(masm); break; case Float: + new Stf(src, dst).emit(masm); + break; case Double: + new Stdf(src, dst).emit(masm); + break; default: throw GraalInternalError.shouldNotReachHere(); } @@ -461,7 +474,7 @@ } } break; - case Long: { + case Long: if (crb.codeCache.needsDataPatch(input)) { crb.recordInlineDataInCode(input); new Setx(input.asLong(), asRegister(result), true).emit(masm); @@ -473,8 +486,10 @@ } } break; - } - case Object: { + case Float: + new Ldf((SPARCAddress) crb.asFloatConstRef(input), asFloatReg(result)).emit(masm); + break; + case Object: if (input.isNull()) { new Clr(asRegister(result)).emit(masm); } else if (crb.target.inlineObjects) { @@ -488,7 +503,6 @@ throw GraalInternalError.shouldNotReachHere("the patched offset might be too big for the load"); } break; - } default: throw GraalInternalError.shouldNotReachHere("missing: " + input.getKind()); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCSaveRegistersOp.java Thu Apr 24 08:38:00 2014 +0200 @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.lir.sparc; + +import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; + +import java.util.*; + +import com.oracle.graal.api.code.*; +import com.oracle.graal.asm.sparc.*; +import com.oracle.graal.lir.*; +import com.oracle.graal.lir.StandardOp.SaveRegistersOp; +import com.oracle.graal.lir.asm.*; + +/** + * Saves registers to stack slots. + */ +@Opcode("SAVE_REGISTER") +public class SPARCSaveRegistersOp extends SPARCLIRInstruction implements SaveRegistersOp { + + /** + * The registers (potentially) saved by this operation. + */ + protected final Register[] savedRegisters; + + /** + * The slots to which the registers are saved. + */ + @Def(STACK) protected final StackSlot[] slots; + + /** + * Specifies if {@link #remove(Set)} should have an effect. + */ + protected final boolean supportsRemove; + + /** + * + * @param savedRegisters the registers saved by this operation which may be subject to + * {@linkplain #remove(Set) pruning} + * @param slots the slots to which the registers are saved + * @param supportsRemove determines if registers can be {@linkplain #remove(Set) pruned} + */ + public SPARCSaveRegistersOp(Register[] savedRegisters, StackSlot[] slots, boolean supportsRemove) { + this.savedRegisters = savedRegisters; + this.slots = slots; + this.supportsRemove = supportsRemove; + } + + private static void saveRegister(CompilationResultBuilder crb, SPARCMacroAssembler masm, StackSlot result, Register register) { + RegisterValue input = register.asValue(result.getKind()); + SPARCMove.move(crb, masm, result, input); + } + + @Override + public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { + for (int i = 0; i < savedRegisters.length; i++) { + if (savedRegisters[i] != null) { + saveRegister(crb, masm, slots[i], savedRegisters[i]); + } + } + } + + public StackSlot[] getSlots() { + return slots; + } + + public boolean supportsRemove() { + return supportsRemove; + } + + public int remove(Set<Register> doNotSave) { + if (!supportsRemove) { + throw new UnsupportedOperationException(); + } + return prune(doNotSave, savedRegisters); + } + + static int prune(Set<Register> toRemove, Register[] registers) { + int pruned = 0; + for (int i = 0; i < registers.length; i++) { + if (registers[i] != null) { + if (toRemove.contains(registers[i])) { + registers[i] = null; + pruned++; + } + } + } + return pruned; + } + + public RegisterSaveLayout getMap(FrameMap frameMap) { + int total = 0; + for (int i = 0; i < savedRegisters.length; i++) { + if (savedRegisters[i] != null) { + total++; + } + } + Register[] keys = new Register[total]; + int[] values = new int[total]; + if (total != 0) { + int mapIndex = 0; + for (int i = 0; i < savedRegisters.length; i++) { + if (savedRegisters[i] != null) { + keys[mapIndex] = savedRegisters[i]; + values[mapIndex] = frameMap.indexForStackSlot(slots[i]); + mapIndex++; + } + } + assert mapIndex == total; + } + return new RegisterSaveLayout(keys, values); + } +}
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java Thu Apr 24 08:38:00 2014 +0200 @@ -48,7 +48,7 @@ /** * This class traverses the HIR instructions and generates LIR instructions from them. */ -public abstract class LIRGenerator implements ArithmeticLIRGenerator, LIRGeneratorTool, PlatformKindTool { +public abstract class LIRGenerator implements LIRGeneratorTool, PlatformKindTool { public static class Options { // @formatter:off @@ -62,9 +62,7 @@ private final CodeGenProviders providers; private final CallingConvention cc; - protected AbstractBlock<?> currentBlock; - public final int traceLevel; - public final boolean printIRWithLIR; + private AbstractBlock<?> currentBlock; /** * Handle for an operation that loads a constant into a variable. The operation starts in the @@ -173,8 +171,6 @@ this.res = res; this.providers = providers; this.cc = cc; - this.traceLevel = Options.TraceLIRGeneratorLevel.getValue(); - this.printIRWithLIR = Options.PrintIRWithLIR.getValue(); } /** @@ -272,7 +268,7 @@ } public void append(LIRInstruction op) { - if (printIRWithLIR && !TTY.isSuppressed()) { + if (Options.PrintIRWithLIR.getValue() && !TTY.isSuppressed()) { TTY.println(op.toStringWithIdPrefix()); TTY.println(); } @@ -289,7 +285,7 @@ } public final void doBlockStart(AbstractBlock<?> block) { - if (printIRWithLIR) { + if (Options.PrintIRWithLIR.getValue()) { TTY.print(block.toString()); } @@ -301,20 +297,20 @@ append(new LabelOp(new Label(block.getId()), block.isAligned())); - if (traceLevel >= 1) { + if (Options.TraceLIRGeneratorLevel.getValue() >= 1) { TTY.println("BEGIN Generating LIR for block B" + block.getId()); } } public final void doBlockEnd(AbstractBlock<?> block) { - if (traceLevel >= 1) { + if (Options.TraceLIRGeneratorLevel.getValue() >= 1) { TTY.println("END Generating LIR for block B" + block.getId()); } currentBlock = null; - if (printIRWithLIR) { + if (Options.PrintIRWithLIR.getValue()) { TTY.println(); } }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGeneratorTool.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGeneratorTool.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,13 +22,21 @@ */ package com.oracle.graal.lir.gen; +import java.util.*; + import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; +import com.oracle.graal.compiler.common.calc.*; +import com.oracle.graal.compiler.common.cfg.*; +import com.oracle.graal.compiler.common.spi.*; import com.oracle.graal.lir.*; +import com.oracle.graal.lir.gen.LIRGenerator.*; public interface LIRGeneratorTool extends ArithmeticLIRGenerator { + CodeGenProviders getProviders(); + TargetDescription target(); MetaAccessProvider getMetaAccess(); @@ -37,6 +45,20 @@ ForeignCallsProvider getForeignCalls(); + AbstractBlock<?> getCurrentBlock(); + + LIRGenerationResult getResult(); + + boolean hasBlockEnd(AbstractBlock<?> block); + + void doBlockStart(AbstractBlock<?> block); + + void doBlockEnd(AbstractBlock<?> block); + + Map<Constant, LoadConstant> getConstantLoads(); + + void setConstantLoads(Map<Constant, LoadConstant> constantLoads); + Value emitLoad(PlatformKind kind, Value address, LIRFrameState state); void emitStore(PlatformKind kind, Value address, Value input, LIRFrameState state); @@ -65,7 +87,7 @@ void emitDeoptimize(Value actionAndReason, Value failedSpeculation, LIRFrameState state); - Value emitForeignCall(ForeignCallLinkage linkage, LIRFrameState state, Value... args); + Variable emitForeignCall(ForeignCallLinkage linkage, LIRFrameState state, Value... args); /** * Checks whether the supplied constant can be used without loading it into a register for most @@ -81,9 +103,9 @@ RegisterAttributes attributes(Register register); - AllocatableValue newVariable(PlatformKind kind); + Variable newVariable(PlatformKind kind); - AllocatableValue emitMove(Value input); + Variable emitMove(Value input); void emitMove(AllocatableValue dst, Value src); @@ -116,4 +138,62 @@ * correct location. */ void emitReturn(Value input); + + AllocatableValue asAllocatable(Value value); + + Variable load(Value value); + + Value loadNonConst(Value value); + + /** + * Returns true if the redundant move elimination optimization should be done after register + * allocation. + */ + boolean canEliminateRedundantMoves(); + + /** + * Determines if only oop maps are required for the code generated from the LIR. + */ + boolean needOnlyOopMaps(); + + /** + * Gets the ABI specific operand used to return a value of a given kind from a method. + * + * @param kind the kind of value being returned + * @return the operand representing the ABI defined location used return a value of kind + * {@code kind} + */ + AllocatableValue resultOperandFor(Kind kind); + + void append(LIRInstruction op); + + void emitJump(LabelRef label); + + void emitCompareBranch(PlatformKind cmpKind, Value left, Value right, Condition cond, boolean unorderedIsTrue, LabelRef trueDestination, LabelRef falseDestination, + double trueDestinationProbability); + + void emitOverflowCheckBranch(LabelRef overflow, LabelRef noOverflow, double overflowProbability); + + void emitIntegerTestBranch(Value left, Value right, LabelRef trueDestination, LabelRef falseDestination, double trueSuccessorProbability); + + Variable emitConditionalMove(PlatformKind cmpKind, Value leftVal, Value right, Condition cond, boolean unorderedIsTrue, Value trueValue, Value falseValue); + + Variable emitIntegerTestMove(Value leftVal, Value right, Value trueValue, Value falseValue); + + void emitStrategySwitch(Constant[] keyConstants, double[] keyProbabilities, LabelRef[] keyTargets, LabelRef defaultTarget, Variable value); + + void emitStrategySwitch(SwitchStrategy strategy, Variable key, LabelRef[] keyTargets, LabelRef defaultTarget); + + CallingConvention getCallingConvention(); + + void emitBitCount(Variable result, Value operand); + + void emitBitScanForward(Variable result, Value operand); + + void emitBitScanReverse(Variable result, Value operand); + + void emitByteSwap(Variable result, Value operand); + + void emitArrayEquals(Kind kind, Variable result, Value array1, Value array2, Value length); + }
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java Thu Apr 24 08:38:00 2014 +0200 @@ -114,7 +114,7 @@ FrameState exitState = exit.stateAfter(); if (exitState != null) { exitState.applyToVirtual(v -> { - if (v.usages().filter(n -> nodes.isMarked(n) && !(n instanceof VirtualState && exitState.isPartOfThisState((VirtualState) n))).isEmpty()) { + if (v.usages().filter(n -> nodes.isMarked(n) && n != exit).isEmpty()) { nodes.clear(v); } });
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedWithNextNode.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedWithNextNode.java Thu Apr 24 08:38:00 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,4 +44,9 @@ public FixedWithNextNode(Stamp stamp) { super(stamp); } + + @Override + public FixedWithNextNode asNode() { + return this; + } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java Thu Apr 24 08:38:00 2014 +0200 @@ -220,6 +220,19 @@ * correctly in slot encoding: a long or double will be followed by a null slot. */ public FrameState duplicateModified(int newBci, boolean newRethrowException, Kind popKind, ValueNode... pushedValues) { + return duplicateModified(newBci, method, newRethrowException, popKind, pushedValues); + } + + /** + * Creates a copy of this frame state with one stack element of type popKind popped from the + * stack and the values in pushedValues pushed on the stack. The pushedValues will be formatted + * correctly in slot encoding: a long or double will be followed by a null slot. + */ + public FrameState duplicateModified(Kind popKind, ValueNode... pushedValues) { + return duplicateModified(bci, method, rethrowException, popKind, pushedValues); + } + + private FrameState duplicateModified(int newBci, ResolvedJavaMethod newMethod, boolean newRethrowException, Kind popKind, ValueNode... pushedValues) { ArrayList<ValueNode> copy = new ArrayList<>(values.subList(0, localsSize + stackSize)); if (popKind != Kind.Void) { if (stackAt(stackSize() - 1) == null) { @@ -238,7 +251,7 @@ int newStackSize = copy.size() - localsSize; copy.addAll(values.subList(localsSize + stackSize, values.size())); - FrameState other = graph().add(new FrameState(method, newBci, copy, localsSize, newStackSize, newRethrowException, false, monitorIds, virtualObjectMappings)); + FrameState other = graph().add(new FrameState(newMethod, newBci, copy, localsSize, newStackSize, newRethrowException, false, monitorIds, virtualObjectMappings)); other.setOuterFrameState(outerFrameState()); return other; }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/VirtualState.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/VirtualState.java Thu Apr 24 08:38:00 2014 +0200 @@ -45,6 +45,10 @@ public abstract void applyToNonVirtual(NodeClosure<? super ValueNode> closure); + /** + * Performs a <b>pre-order</b> iteration over all elements reachable from this state that are a + * subclass of {@link VirtualState}. + */ public abstract void applyToVirtual(VirtualClosure closure); public abstract boolean isPartOfThisState(VirtualState state);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatingNode.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatingNode.java Thu Apr 24 08:38:00 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,4 +31,9 @@ public FloatingNode(Stamp stamp) { super(stamp); } + + @Override + public FloatingNode asNode() { + return this; + } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AddLocationNode.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AddLocationNode.java Thu Apr 24 08:38:00 2014 +0200 @@ -38,8 +38,8 @@ @NodeInfo(nameTemplate = "AddLoc {p#locationIdentity/s}") public final class AddLocationNode extends LocationNode implements Canonicalizable { - @Input private ValueNode x; - @Input private ValueNode y; + @Input(InputType.Association) private ValueNode x; + @Input(InputType.Association) private ValueNode y; protected LocationNode getX() { return (LocationNode) x;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java Thu Apr 24 08:38:00 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,7 +34,7 @@ * The ValueAnchor instruction keeps non-CFG (floating) nodes above a certain point in the graph. */ @NodeInfo(allowedUsageTypes = {InputType.Anchor, InputType.Guard}) -public final class ValueAnchorNode extends FixedWithNextNode implements LIRLowerable, Simplifiable, Virtualizable, GuardingNode { +public final class ValueAnchorNode extends FixedWithNextNode implements LIRLowerable, Simplifiable, Virtualizable, AnchoringNode, GuardingNode { @Input(InputType.Guard) private ValueNode anchored;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/NodeLIRBuilderTool.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/NodeLIRBuilderTool.java Thu Apr 24 08:38:00 2014 +0200 @@ -26,10 +26,12 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.cfg.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; +import com.oracle.graal.nodes.cfg.*; import com.oracle.graal.nodes.extended.*; public interface NodeLIRBuilderTool extends NodeMappableLIRBuilder { @@ -69,4 +71,14 @@ Value[] visitInvokeArguments(CallingConvention cc, Collection<ValueNode> arguments); MemoryArithmeticLIRLowerer getMemoryLowerer(); + + Variable newVariable(Kind kind); + + void emitArrayEquals(Kind kind, Variable result, Value array1, Value array2, Value length); + + void emitBitCount(Variable result, Value operand); + + void emitBitScanForward(Variable result, Value operand); + + void doBlock(Block block, StructuredGraph graph, BlockMap<List<ScheduledNode>> blockMap); }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java Thu Apr 24 08:38:00 2014 +0200 @@ -1316,8 +1316,6 @@ assert inlineGraph.getGuardsStage().ordinal() >= graph.getGuardsStage().ordinal(); assert !invokeNode.graph().isAfterFloatingReadPhase() : "inline isn't handled correctly after floating reads phase"; - Kind returnKind = invokeNode.getKind(); - FrameState stateAfter = invoke.stateAfter(); assert stateAfter == null || stateAfter.isAlive(); if (receiverNullCheck && !((MethodCallTargetNode) invoke.callTarget()).isStatic()) { @@ -1401,38 +1399,8 @@ } if (stateAfter != null) { - FrameState outerFrameState = null; + processFrameStates(invoke, inlineGraph, duplicates, stateAtExceptionEdge); int callerLockDepth = stateAfter.nestedLockDepth(); - for (FrameState original : inlineGraph.getNodes(FrameState.class)) { - FrameState frameState = (FrameState) duplicates.get(original); - if (frameState != null && frameState.isAlive()) { - assert frameState.bci != BytecodeFrame.BEFORE_BCI : frameState; - if (frameState.bci == BytecodeFrame.AFTER_BCI) { - frameState.replaceAndDelete(returnKind == Kind.Void ? stateAfter : stateAfter.duplicateModified(stateAfter.bci, stateAfter.rethrowException(), returnKind, - frameState.stackAt(0))); - } else if (frameState.bci == BytecodeFrame.AFTER_EXCEPTION_BCI || (frameState.bci == BytecodeFrame.UNWIND_BCI && !frameState.method().isSynchronized())) { - if (stateAtExceptionEdge != null) { - frameState.replaceAndDelete(stateAtExceptionEdge); - } else { - handleMissingAfterExceptionFrameState(frameState); - } - } else if (frameState.bci == BytecodeFrame.UNWIND_BCI) { - handleMissingAfterExceptionFrameState(frameState); - } else { - // only handle the outermost frame states - if (frameState.outerFrameState() == null) { - assert frameState.bci == BytecodeFrame.INVALID_FRAMESTATE_BCI || frameState.method().equals(inlineGraph.method()); - assert frameState.bci != BytecodeFrame.AFTER_EXCEPTION_BCI && frameState.bci != BytecodeFrame.BEFORE_BCI && frameState.bci != BytecodeFrame.AFTER_EXCEPTION_BCI && - frameState.bci != BytecodeFrame.UNWIND_BCI : frameState.bci; - if (outerFrameState == null) { - outerFrameState = stateAfter.duplicateModified(invoke.bci(), stateAfter.rethrowException(), invokeNode.getKind()); - outerFrameState.setDuringCall(true); - } - frameState.setOuterFrameState(outerFrameState); - } - } - } - } if (callerLockDepth != 0) { for (MonitorIdNode original : inlineGraph.getNodes(MonitorIdNode.class)) { MonitorIdNode monitor = (MonitorIdNode) duplicates.get(original); @@ -1470,6 +1438,57 @@ return duplicates; } + protected static void processFrameStates(Invoke invoke, StructuredGraph inlineGraph, Map<Node, Node> duplicates, FrameState stateAtExceptionEdge) { + FrameState stateAfter = invoke.stateAfter(); + FrameState outerFrameState = null; + Kind invokeReturnKind = invoke.asNode().getKind(); + for (FrameState original : inlineGraph.getNodes(FrameState.class)) { + FrameState frameState = (FrameState) duplicates.get(original); + if (frameState != null && frameState.isAlive()) { + assert frameState.bci != BytecodeFrame.BEFORE_BCI : frameState; + if (frameState.bci == BytecodeFrame.AFTER_BCI) { + /* + * pop return kind from invoke's stateAfter and replace with this frameState's + * return value (top of stack) + */ + Node otherFrameState = stateAfter; + if (invokeReturnKind != Kind.Void && frameState.stackSize() > 0) { + otherFrameState = stateAfter.duplicateModified(invokeReturnKind, frameState.stackAt(0)); + } + frameState.replaceAndDelete(otherFrameState); + } else if (frameState.bci == BytecodeFrame.AFTER_EXCEPTION_BCI || (frameState.bci == BytecodeFrame.UNWIND_BCI && !frameState.method().isSynchronized())) { + if (stateAtExceptionEdge != null) { + /* + * pop exception object from invoke's stateAfter and replace with this + * frameState's exception object (top of stack) + */ + Node newFrameState = stateAtExceptionEdge; + if (frameState.stackSize() > 0 && stateAtExceptionEdge.stackAt(0) != frameState.stackAt(0)) { + newFrameState = stateAtExceptionEdge.duplicateModified(Kind.Object, frameState.stackAt(0)); + } + frameState.replaceAndDelete(newFrameState); + } else { + handleMissingAfterExceptionFrameState(frameState); + } + } else if (frameState.bci == BytecodeFrame.UNWIND_BCI) { + handleMissingAfterExceptionFrameState(frameState); + } else { + // only handle the outermost frame states + if (frameState.outerFrameState() == null) { + assert frameState.bci == BytecodeFrame.INVALID_FRAMESTATE_BCI || frameState.method().equals(inlineGraph.method()); + assert frameState.bci != BytecodeFrame.AFTER_EXCEPTION_BCI && frameState.bci != BytecodeFrame.BEFORE_BCI && frameState.bci != BytecodeFrame.AFTER_EXCEPTION_BCI && + frameState.bci != BytecodeFrame.UNWIND_BCI : frameState.bci; + if (outerFrameState == null) { + outerFrameState = stateAfter.duplicateModified(invoke.bci(), stateAfter.rethrowException(), invoke.asNode().getKind()); + outerFrameState.setDuringCall(true); + } + frameState.setOuterFrameState(outerFrameState); + } + } + } + } + } + protected static void handleMissingAfterExceptionFrameState(FrameState nonReplacableFrameState) { Graph graph = nonReplacableFrameState.graph(); NodeWorkList workList = graph.createNodeWorkList(); @@ -1494,7 +1513,10 @@ GraphUtil.killCFG(end); } } else { - DeoptimizeNode deoptimizeNode = graph.add(new DeoptimizeNode(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.NotCompiledExceptionHandler)); + FixedNode deoptimizeNode = graph.add(new DeoptimizeNode(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.NotCompiledExceptionHandler)); + if (fixedStateSplit instanceof BeginNode) { + deoptimizeNode = BeginNode.begin(deoptimizeNode); + } fixedStateSplit.replaceAtPredecessor(deoptimizeNode); GraphUtil.killCFG(fixedStateSplit); }
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/CheckCastTest.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/CheckCastTest.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,10 +22,11 @@ */ package com.oracle.graal.replacements.test; +import org.junit.*; + import com.oracle.graal.api.meta.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.java.*; -import com.oracle.graal.test.*; /** * Tests the implementation of checkcast, allowing profiling information to be manually specified. @@ -41,7 +42,7 @@ } } - @LongTest + @Test public void test1() { test("asNumber", profile(), 111); test("asNumber", profile(Integer.class), 111); @@ -51,7 +52,7 @@ test("asNumberExt", profile(Long.class, Short.class), 111); } - @LongTest + @Test public void test2() { test("asString", profile(), "111"); test("asString", profile(String.class), "111"); @@ -67,27 +68,27 @@ test("asStringExt", profile(String.class), "111"); } - @LongTest + @Test public void test3() { test("asNumber", profile(), "111"); } - @LongTest + @Test public void test4() { test("asString", profile(String.class), 111); } - @LongTest + @Test public void test5() { test("asNumberExt", profile(), "111"); } - @LongTest + @Test public void test6() { test("asStringExt", profile(String.class), 111); } - @LongTest + @Test public void test7() { Throwable throwable = new Exception(); test("asThrowable", profile(), throwable); @@ -95,12 +96,12 @@ test("asThrowable", profile(Exception.class, Error.class), throwable); } - @LongTest + @Test public void test8() { test("arrayStore", new Object[100], "111"); } - @LongTest + @Test public void test801() { test("arrayFill", new Object[100], "111"); } @@ -197,7 +198,7 @@ return (Cloneable) o; } - @LongTest + @Test public void test9() { Object o = new Depth13(); test("asDepth12", profile(), o); @@ -205,7 +206,7 @@ test("asDepth12", profile(Depth13.class, Depth14.class), o); } - @LongTest + @Test public void test10() { Object o = new Depth13[3][]; test("asDepth12Arr", o);
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/InstanceOfDynamicTest.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/InstanceOfDynamicTest.java Thu Apr 24 08:38:00 2014 +0200 @@ -22,9 +22,10 @@ */ package com.oracle.graal.replacements.test; +import org.junit.*; + import com.oracle.graal.compiler.test.*; import com.oracle.graal.nodes.java.*; -import com.oracle.graal.test.*; /** * Tests for {@link InstanceOfDynamicNode}. @@ -35,7 +36,7 @@ return value; } - @LongTest + @Test public void test100() { final Object nul = null; test("isStringDynamic", nul); @@ -43,7 +44,7 @@ test("isStringDynamic", Object.class); } - @LongTest + @Test public void test101() { final Object nul = null; test("isStringIntDynamic", nul); @@ -51,7 +52,7 @@ test("isStringIntDynamic", Object.class); } - @LongTest + @Test public void test103() { test("isInstanceDynamic", String.class, null); test("isInstanceDynamic", String.class, "object"); @@ -61,7 +62,7 @@ test("isInstanceDynamic", int.class, Object.class); } - @LongTest + @Test public void test104() { test("isInstanceIntDynamic", String.class, null); test("isInstanceIntDynamic", String.class, "object");
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/InstanceOfTest.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/InstanceOfTest.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,6 +24,8 @@ import java.util.*; +import org.junit.*; + import com.oracle.graal.api.code.CompilationResult.Call; import com.oracle.graal.api.code.CompilationResult.Mark; import com.oracle.graal.api.code.CompilationResult.Site; @@ -34,7 +36,6 @@ import com.oracle.graal.replacements.test.CheckCastTest.Depth12; import com.oracle.graal.replacements.test.CheckCastTest.Depth13; import com.oracle.graal.replacements.test.CheckCastTest.Depth14; -import com.oracle.graal.test.*; /** * Tests the implementation of instanceof, allowing profiling information to be manually specified. @@ -54,7 +55,7 @@ } } - @LongTest + @Test public void test1() { test("isString", profile(), "object"); test("isString", profile(String.class), "object"); @@ -63,7 +64,7 @@ test("isString", profile(String.class), Object.class); } - @LongTest + @Test public void test2() { test("isStringInt", profile(), "object"); test("isStringInt", profile(String.class), "object"); @@ -72,7 +73,7 @@ test("isStringInt", profile(String.class), Object.class); } - @LongTest + @Test public void test201() { test("isStringIntComplex", profile(), "object"); test("isStringIntComplex", profile(String.class), "object"); @@ -81,7 +82,7 @@ test("isStringIntComplex", profile(String.class), Object.class); } - @LongTest + @Test public void test3() { Throwable throwable = new Exception(); test("isThrowable", profile(), throwable); @@ -93,7 +94,7 @@ test("isThrowable", profile(Exception.class, Error.class), Object.class); } - @LongTest + @Test public void test301() { onlyFirstIsException(new Exception(), new Error()); test("onlyFirstIsException", profile(), new Exception(), new Error()); @@ -102,7 +103,7 @@ test("onlyFirstIsException", profile(), new Error(), new Error()); } - @LongTest + @Test public void test4() { Throwable throwable = new Exception(); test("isThrowableInt", profile(), throwable); @@ -114,7 +115,7 @@ test("isThrowableInt", profile(Exception.class, Error.class), Object.class); } - @LongTest + @Test public void test5() { Map<?, ?> map = new HashMap<>(); test("isMap", profile(), map); @@ -127,7 +128,7 @@ test("isMap", profile(String.class, HashMap.class), Object.class); } - @LongTest + @Test public void test6() { Map<?, ?> map = new HashMap<>(); test("isMapInt", profile(), map); @@ -139,7 +140,7 @@ test("isMapInt", profile(TreeMap.class, HashMap.class), Object.class); } - @LongTest + @Test public void test7() { Object o = new Depth13(); test("isDepth12", profile(), o); @@ -153,7 +154,7 @@ test("isDepth12", profile(String.class, HashMap.class), o); } - @LongTest + @Test public void test8() { Object o = new Depth13(); test("isDepth12Int", profile(), o); @@ -259,7 +260,7 @@ } } - @LongTest + @Test public void test9() { MyCall callAt63 = new MyCall(63); MyMark markAt63 = new MyMark(63); @@ -276,7 +277,7 @@ return s1.offset - s2.offset; } - @LongTest + @Test public void test10() { Mark[] noMarks = {}; Call callAt63 = new Call(null, 63, 5, true, null); @@ -301,7 +302,7 @@ * The test exists in this source file as the transformation was originally motivated by the * need to remove use of special JumpNodes in the {@code InstanceOfSnippets}. */ - @LongTest + @Test public void testRemoveIntermediateMaterialization() { List<String> list = Arrays.asList("1", "2", "3", "4"); test("removeIntermediateMaterialization", profile(), list, "2", "yes", "no"); @@ -356,7 +357,7 @@ return o instanceof D[]; } - @LongTest + @Test public void testArray() { Object aArray = new A[10]; test("isArrayOfA", aArray);
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/NewArrayTest.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/NewArrayTest.java Thu Apr 24 08:38:00 2014 +0200 @@ -25,7 +25,6 @@ import org.junit.*; import com.oracle.graal.compiler.test.*; -import com.oracle.graal.test.*; /** * Tests the implementation of {@code [A]NEWARRAY}. @@ -58,7 +57,7 @@ } } - @LongTest + @Test public void test1() { for (String type : new String[]{"Byte", "Char", "Short", "Int", "Float", "Long", "Double", "String"}) { test("new" + type + "Array7");
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/NewInstanceTest.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/NewInstanceTest.java Thu Apr 24 08:38:00 2014 +0200 @@ -27,7 +27,6 @@ import org.junit.*; import com.oracle.graal.compiler.test.*; -import com.oracle.graal.test.*; /** * Tests the implementation of {@code NEW}. @@ -57,12 +56,12 @@ } } - @LongTest + @Test public void test1() { test("newObject"); } - @LongTest + @Test public void test2() { test("newObjectTwice"); } @@ -71,37 +70,37 @@ return new Object(); } - @LongTest + @Test public void test3() { test("newObjectLoop", 100); } - @LongTest + @Test public void test4() { test("newBigObject"); } - @LongTest + @Test public void test5() { test("newSomeObject"); } - @LongTest + @Test public void test6() { test("newEmptyString"); } - @LongTest + @Test public void test7() { test("newString", "value"); } - @LongTest + @Test public void test8() { test("newHashMap", 31); } - @LongTest + @Test public void test9() { test("newRegression", true); }
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/NewMultiArrayTest.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/NewMultiArrayTest.java Thu Apr 24 08:38:00 2014 +0200 @@ -25,12 +25,13 @@ import java.lang.reflect.*; import java.util.*; +import org.junit.*; + import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.test.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.java.*; -import com.oracle.graal.test.*; /** * Tests the lowering of the MULTIANEWARRAY instruction. @@ -86,7 +87,7 @@ Class<?> bottomClass; int[] dimensions; - @LongTest + @Test public void test1() { for (Class<?> clazz : new Class[]{byte.class, char.class, short.class, int.class, float.class, long.class, double.class, String.class}) { bottomClass = clazz; @@ -117,7 +118,7 @@ return new Object[10][9][8]; } - @LongTest + @Test public void test2() { test("newMultiArrayException"); }
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/WordTest.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/WordTest.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,6 +24,8 @@ import java.lang.reflect.*; +import org.junit.*; + import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.test.*; @@ -31,7 +33,6 @@ import com.oracle.graal.replacements.*; import com.oracle.graal.replacements.ReplacementsImpl.FrameStateProcessing; import com.oracle.graal.replacements.Snippet.SnippetInliningPolicy; -import com.oracle.graal.test.*; import com.oracle.graal.word.*; /** @@ -53,7 +54,7 @@ return installer.makeGraph(resolvedMethod, null, resolvedMethod, inliningPolicy.get(), FrameStateProcessing.CollapseFrameForSingleSideEffect); } - @LongTest + @Test public void construction() { long[] words = new long[]{Long.MIN_VALUE, Long.MIN_VALUE + 1, -1L, 0L, 1L, Long.MAX_VALUE - 1, Long.MAX_VALUE, Integer.MAX_VALUE - 1L, Integer.MAX_VALUE, Integer.MAX_VALUE + 1L, Integer.MIN_VALUE - 1L, Integer.MIN_VALUE, Integer.MIN_VALUE + 1L}; @@ -65,7 +66,7 @@ } } - @LongTest + @Test public void testArithmetic() { long[] words = new long[]{Long.MIN_VALUE, Long.MIN_VALUE + 1, -1L, 0L, 1L, Long.MAX_VALUE - 1, Long.MAX_VALUE, Integer.MAX_VALUE - 1L, Integer.MAX_VALUE, Integer.MAX_VALUE + 1L, Integer.MIN_VALUE - 1L, Integer.MIN_VALUE, Integer.MIN_VALUE + 1L}; @@ -102,7 +103,7 @@ } } - @LongTest + @Test public void testCompare() { long[] words = new long[]{Long.MIN_VALUE, Long.MIN_VALUE + 1, -1L, 0L, 1L, Long.MAX_VALUE - 1, Long.MAX_VALUE}; for (long word1 : words) {
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,8 +24,6 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.gen.*; -import com.oracle.graal.compiler.target.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.lir.*; @@ -36,7 +34,7 @@ /** * Compares two arrays with the same length. */ -public class ArrayEqualsNode extends FixedWithNextNode implements LIRGenLowerable, Canonicalizable, Virtualizable { +public class ArrayEqualsNode extends FixedWithNextNode implements LIRLowerable, Canonicalizable, Virtualizable { /** {@link Kind} of the arrays to compare. */ private final Kind kind; @@ -131,7 +129,7 @@ public static native boolean equals(double[] array1, double[] array2, int length); @Override - public void generate(NodeLIRBuilder gen) { + public void generate(NodeLIRBuilderTool gen) { Variable result = gen.newVariable(Kind.Int); gen.emitArrayEquals(kind, result, gen.operand(array1), gen.operand(array2), gen.operand(length)); gen.setResult(this, result);
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitCountNode.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitCountNode.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,15 +24,14 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.gen.*; -import com.oracle.graal.compiler.target.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.lir.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; +import com.oracle.graal.nodes.spi.*; -public class BitCountNode extends FloatingNode implements LIRGenLowerable, Canonicalizable { +public class BitCountNode extends FloatingNode implements LIRLowerable, Canonicalizable { @Input private ValueNode value; @@ -65,7 +64,7 @@ } @Override - public void generate(NodeLIRBuilder gen) { + public void generate(NodeLIRBuilderTool gen) { Variable result = gen.newVariable(Kind.Int); gen.emitBitCount(result, gen.operand(value)); gen.setResult(this, result);
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanForwardNode.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanForwardNode.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,15 +24,14 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.gen.*; -import com.oracle.graal.compiler.target.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.lir.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; +import com.oracle.graal.nodes.spi.*; -public class BitScanForwardNode extends FloatingNode implements LIRGenLowerable, Canonicalizable { +public class BitScanForwardNode extends FloatingNode implements LIRLowerable, Canonicalizable { @Input private ValueNode value; @@ -72,7 +71,7 @@ } @Override - public void generate(NodeLIRBuilder gen) { + public void generate(NodeLIRBuilderTool gen) { Variable result = gen.newVariable(Kind.Int); gen.emitBitScanForward(result, gen.operand(value)); gen.setResult(this, result);
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanReverseNode.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanReverseNode.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,15 +24,14 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.gen.*; -import com.oracle.graal.compiler.target.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.lir.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; +import com.oracle.graal.nodes.spi.*; -public class BitScanReverseNode extends FloatingNode implements LIRGenLowerable, Canonicalizable { +public class BitScanReverseNode extends FloatingNode implements LIRLowerable, Canonicalizable { @Input private ValueNode value; @@ -79,7 +78,7 @@ } @Override - public void generate(NodeLIRBuilder gen) { + public void generate(NodeLIRBuilderTool gen) { Variable result = gen.newVariable(Kind.Int); gen.getLIRGeneratorTool().emitBitScanReverse(result, gen.operand(value)); gen.setResult(this, result);
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReverseBytesNode.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReverseBytesNode.java Thu Apr 24 08:38:00 2014 +0200 @@ -24,15 +24,14 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.gen.*; -import com.oracle.graal.compiler.target.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.lir.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; +import com.oracle.graal.nodes.spi.*; -public class ReverseBytesNode extends FloatingNode implements LIRGenLowerable, Canonicalizable { +public class ReverseBytesNode extends FloatingNode implements LIRLowerable, Canonicalizable { @Input private ValueNode value; @@ -66,9 +65,9 @@ } @Override - public void generate(NodeLIRBuilder gen) { + public void generate(NodeLIRBuilderTool gen) { Variable result = gen.newVariable(value.getKind()); - gen.getLIRGenerator().emitByteSwap(result, gen.operand(value)); + gen.getLIRGeneratorTool().emitByteSwap(result, gen.operand(value)); gen.setResult(this, result); } }
--- a/graal/com.oracle.graal.sparc/src/com/oracle/graal/sparc/SPARC.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.sparc/src/com/oracle/graal/sparc/SPARC.java Thu Apr 24 08:38:00 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,28 +35,28 @@ */ public class SPARC extends Architecture { - // @formatter:off - public static final RegisterCategory CPU = new RegisterCategory("CPU"); public static final RegisterCategory FPU = new RegisterCategory("FPU"); // General purpose registers - public static final Register r0 = new Register(0, 0, "g0", CPU); - public static final Register r1 = new Register(1, 1, "g1", CPU); - public static final Register r2 = new Register(2, 2, "g2", CPU); - public static final Register r3 = new Register(3, 3, "g3", CPU); - public static final Register r4 = new Register(4, 4, "g4", CPU); - public static final Register r5 = new Register(5, 5, "g5", CPU); - public static final Register r6 = new Register(6, 6, "g6", CPU); - public static final Register r7 = new Register(7, 7, "g7", CPU); - public static final Register r8 = new Register(8, 8, "o0", CPU); - public static final Register r9 = new Register(9, 9, "o1", CPU); + public static final Register r0 = new Register(0, 0, "g0", CPU); + public static final Register r1 = new Register(1, 1, "g1", CPU); + public static final Register r2 = new Register(2, 2, "g2", CPU); + public static final Register r3 = new Register(3, 3, "g3", CPU); + public static final Register r4 = new Register(4, 4, "g4", CPU); + public static final Register r5 = new Register(5, 5, "g5", CPU); + public static final Register r6 = new Register(6, 6, "g6", CPU); + public static final Register r7 = new Register(7, 7, "g7", CPU); + + public static final Register r8 = new Register(8, 8, "o0", CPU); + public static final Register r9 = new Register(9, 9, "o1", CPU); public static final Register r10 = new Register(10, 10, "o2", CPU); public static final Register r11 = new Register(11, 11, "o3", CPU); public static final Register r12 = new Register(12, 12, "o4", CPU); public static final Register r13 = new Register(13, 13, "o5", CPU); public static final Register r14 = new Register(14, 14, "o6", CPU); public static final Register r15 = new Register(15, 15, "o7", CPU); + public static final Register r16 = new Register(16, 16, "l0", CPU); public static final Register r17 = new Register(17, 17, "l1", CPU); public static final Register r18 = new Register(18, 18, "l2", CPU); @@ -65,6 +65,7 @@ public static final Register r21 = new Register(21, 21, "l5", CPU); public static final Register r22 = new Register(22, 22, "l6", CPU); public static final Register r23 = new Register(23, 23, "l7", CPU); + public static final Register r24 = new Register(24, 24, "i0", CPU); public static final Register r25 = new Register(25, 25, "i1", CPU); public static final Register r26 = new Register(26, 26, "i2", CPU); @@ -113,12 +114,14 @@ public static final Register sp = o6; public static final Register fp = i6; + // @formatter:off public static final Register[] cpuRegisters = { r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, r30, r31 }; + // @formatter:on // Floating point registers public static final Register f0 = new Register(32, 0, "f0", FPU); @@ -130,6 +133,43 @@ public static final Register f6 = new Register(38, 6, "f6", FPU); public static final Register f7 = new Register(39, 7, "f7", FPU); + public static final Register f8 = new Register(40, 8, "f8", FPU); + public static final Register f9 = new Register(41, 9, "f9", FPU); + public static final Register f10 = new Register(42, 10, "f10", FPU); + public static final Register f11 = new Register(43, 11, "f11", FPU); + public static final Register f12 = new Register(44, 12, "f12", FPU); + public static final Register f13 = new Register(45, 13, "f13", FPU); + public static final Register f14 = new Register(46, 14, "f14", FPU); + public static final Register f15 = new Register(47, 15, "f15", FPU); + + public static final Register f16 = new Register(48, 16, "f16", FPU); + public static final Register f17 = new Register(49, 17, "f17", FPU); + public static final Register f18 = new Register(50, 18, "f18", FPU); + public static final Register f19 = new Register(51, 19, "f19", FPU); + public static final Register f20 = new Register(52, 20, "f20", FPU); + public static final Register f21 = new Register(53, 21, "f21", FPU); + public static final Register f22 = new Register(54, 22, "f22", FPU); + public static final Register f23 = new Register(55, 23, "f23", FPU); + + public static final Register f24 = new Register(56, 24, "f24", FPU); + public static final Register f25 = new Register(57, 25, "f25", FPU); + public static final Register f26 = new Register(58, 26, "f26", FPU); + public static final Register f27 = new Register(59, 27, "f27", FPU); + public static final Register f28 = new Register(60, 28, "f28", FPU); + public static final Register f29 = new Register(61, 29, "f29", FPU); + public static final Register f30 = new Register(62, 30, "f30", FPU); + public static final Register f31 = new Register(63, 31, "f31", FPU); + + // @formatter:off + public static final Register[] fpuRegisters = { + f0, f1, f2, f3, f4, f5, f6, f7, + f8, f9, f10, f11, f12, f13, f14, f15, + f16, f17, f18, f19, f20, f21, f22, f23, + f24, f25, f26, f27, f28, f29, f30, f31 + }; + // @formatter:on + + // @formatter:off public static final Register[] allRegisters = { // CPU r0, r1, r2, r3, r4, r5, r6, r7, @@ -138,9 +178,16 @@ r24, r25, r26, r27, r28, r29, r30, r31, // FPU f0, f1, f2, f3, f4, f5, f6, f7, + f8, f9, f10, f11, f12, f13, f14, f15, + f16, f17, f18, f19, f20, f21, f22, f23, + f24, f25, f26, f27, f28, f29, f30, f31 }; + // @formatter:on - // @formatter:on + /** + * Stack bias for stack and frame pointer loads. + */ + public static final int STACK_BIAS = 0x7ff; public SPARC() { super("SPARC", 8, ByteOrder.BIG_ENDIAN, false, allRegisters, LOAD_STORE | STORE_STORE, 1, r31.encoding + 1, 8);
--- a/graal/com.oracle.graal.test/src/com/oracle/graal/test/GraalLongUnitTest.java Wed Apr 23 15:23:18 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.oracle.graal.test; - -import java.util.*; - -import org.junit.*; -import org.junit.runners.*; -import org.junit.runners.model.*; - -public class GraalLongUnitTest extends BlockJUnit4ClassRunner { - - public GraalLongUnitTest(Class<?> klass) throws InitializationError { - super(klass); - } - - @Override - protected List<FrameworkMethod> computeTestMethods() { - List<FrameworkMethod> methods = new ArrayList<>(5); - methods.addAll(getTestClass().getAnnotatedMethods(Test.class)); - methods.addAll(getTestClass().getAnnotatedMethods(LongTest.class)); - return methods; - } -}
--- a/graal/com.oracle.graal.test/src/com/oracle/graal/test/GraalTest.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.test/src/com/oracle/graal/test/GraalTest.java Thu Apr 24 08:38:00 2014 +0200 @@ -26,14 +26,12 @@ import java.util.*; import org.junit.*; -import org.junit.runner.*; /** * Base class for Graal tests. * <p> * This contains common utility methods that are used in multiple test projects. */ -@RunWith(GraalLongUnitTest.class) public class GraalTest { protected Method getMethod(String methodName) {
--- a/graal/com.oracle.graal.test/src/com/oracle/graal/test/LongTest.java Wed Apr 23 15:23:18 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.oracle.graal.test; - -import java.lang.annotation.*; - -/* copy of org.junit.Test */ -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.METHOD}) -public @interface LongTest { - - static final class None extends Throwable { - - private static final long serialVersionUID = 1L; - - private None() { - } - } - - Class<? extends Throwable> expected() default None.class; - - long timeout() default 0L; -}
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Thu Apr 24 08:38:00 2014 +0200 @@ -247,16 +247,16 @@ logInliningDecision(result); } - private void performInlining(TruffleInliningResult result) { - if (inliningPerformed) { + private static void performInlining(TruffleInliningResult result) { + if (result.getCallTarget().inliningPerformed) { return; } - inliningPerformed = true; + result.getCallTarget().inliningPerformed = true; for (TruffleInliningProfile profile : result) { profile.getCallNode().inline(); TruffleInliningResult recursiveResult = profile.getRecursiveResult(); if (recursiveResult != null) { - recursiveResult.getCallTarget().performInlining(recursiveResult); + performInlining(recursiveResult); } } }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTargetLog.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTargetLog.java Thu Apr 24 08:38:00 2014 +0200 @@ -171,7 +171,7 @@ } if (node instanceof DirectCallNode) { DirectCallNode callNode = (DirectCallNode) node; - if (callNode.isInliningForced()) { + if (callNode.isInlined()) { callNode.getCurrentRootNode().accept(this); } }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInliningHandler.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInliningHandler.java Thu Apr 24 08:38:00 2014 +0200 @@ -117,7 +117,7 @@ } private static double calculateFrequency(OptimizedCallTarget target, OptimizedDirectCallNode ocn) { - return (double) Math.max(1, target.getCompilationProfile().getCallCount()) / Math.max(1, ocn.getCallCount()); + return (double) Math.max(1, ocn.getCallCount()) / (double) Math.max(1, target.getCompilationProfile().getCallCount()); } private final static class ProfileScoreComparator implements Comparator<TruffleInliningProfile> {
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/ForceMaterializeNode.java Wed Apr 23 15:23:18 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/ForceMaterializeNode.java Thu Apr 24 08:38:00 2014 +0200 @@ -23,11 +23,10 @@ package com.oracle.graal.truffle.nodes.frame; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.gen.*; -import com.oracle.graal.compiler.target.*; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.spi.*; -public class ForceMaterializeNode extends FixedWithNextNode implements LIRGenLowerable { +public class ForceMaterializeNode extends FixedWithNextNode implements LIRLowerable { @Input private ValueNode object; @@ -36,7 +35,7 @@ this.object = object; } - public void generate(NodeLIRBuilder generator) { + public void generate(NodeLIRBuilderTool generator) { // nothing to do }
--- a/mx/mx_graal.py Wed Apr 23 15:23:18 2014 +0200 +++ b/mx/mx_graal.py Thu Apr 24 08:38:00 2014 +0200 @@ -35,6 +35,7 @@ import sanitycheck import itertools import json, textwrap +import fnmatch # This works because when mx loads this file, it makes sure __file__ gets an absolute path _graal_home = dirname(dirname(__file__)) @@ -861,7 +862,7 @@ projectscp = mx.classpath(projs) if whitelist: - classes = list(set(classes) & set(whitelist)) + classes = [c for c in classes if any((glob.match(c) for glob in whitelist))] if len(classes) != 0: f_testfile = open(testfile, 'w') @@ -905,10 +906,8 @@ _unittestHelpSuffix = """ Unittest options: - --short-only run short testcases only - --long-only run long testcases only - --baseline-whitelist run only testcases which are known to - work with the baseline compiler + --whitelist run only testcases which are included + in the given whitelist To avoid conflicts with VM options '--' can be used as delimiter. @@ -945,10 +944,7 @@ formatter_class=RawDescriptionHelpFormatter, epilog=_unittestHelpSuffix, ) - group = parser.add_mutually_exclusive_group() - group.add_argument('--short-only', action='store_true', help='run short testcases only') - group.add_argument('--long-only', action='store_true', help='run long testcases only') - parser.add_argument('--baseline-whitelist', action='store_true', help='run baseline testcases only') + parser.add_argument('--whitelist', help='run testcases specified in whitelist only', metavar='<path>') ut_args = [] delimiter = False @@ -968,33 +964,19 @@ parsed_args, args = parser.parse_known_args(ut_args) whitelist = None - if parsed_args.baseline_whitelist: - baseline_whitelist_file = 'test/baseline_whitelist.txt' + if parsed_args.whitelist: try: - with open(join(_graal_home, baseline_whitelist_file)) as fp: - whitelist = [l.rstrip() for l in fp.readlines()] + with open(join(_graal_home, parsed_args.whitelist)) as fp: + whitelist = [re.compile(fnmatch.translate(l.rstrip())) for l in fp.readlines() if not l.startswith('#')] except IOError: - mx.log('warning: could not read baseline whitelist: ' + baseline_whitelist_file) + mx.log('warning: could not read whitelist: ' + parsed_args.whitelist) - if parsed_args.long_only: - annotations = ['@LongTest', '@Parameters'] - elif parsed_args.short_only: - annotations = ['@Test'] - else: - annotations = ['@Test', '@LongTest', '@Parameters'] - - _unittest(args, annotations, whitelist=whitelist) + _unittest(args, ['@Test', '@Parameters'], whitelist=whitelist) def shortunittest(args): - """alias for 'unittest --short-only'{0}""" - - args.insert(0, '--short-only') - unittest(args) + """alias for 'unittest --whitelist test/whitelist_shortunittest.txt'{0}""" -def longunittest(args): - """alias for 'unittest --long-only'{0}""" - - args.insert(0, '--long-only') + args = ['--whitelist', 'test/whitelist_shortunittest.txt'] + args unittest(args) def buildvms(args): @@ -1104,6 +1086,11 @@ unittest([]) tasks.append(t.stop()) + with VM('server', 'product'): # hosted mode + t = Task('UnitTests-BaselineCompiler:hosted-product') + unittest(['--whitelist', 'test/whitelist_baseline.txt', '-G:+UseBaselineCompiler']) + tasks.append(t.stop()) + for vmbuild in ['fastdebug', 'product']: for test in sanitycheck.getDacapos(level=sanitycheck.SanityCheckLevel.Gate, gateBuildLevel=vmbuild) + sanitycheck.getScalaDacapos(level=sanitycheck.SanityCheckLevel.Gate, gateBuildLevel=vmbuild): t = Task(str(test) + ':' + vmbuild) @@ -1723,14 +1710,14 @@ """make truffle.jar""" # Test with the built classes - _unittest(["com.oracle.truffle.api.test", "com.oracle.truffle.api.dsl.test"], ['@Test', '@LongTest', '@Parameters']) + _unittest(["com.oracle.truffle.api.test", "com.oracle.truffle.api.dsl.test"], ['@Test', '@Parameters']) # We use the DSL processor as the starting point for the classpath - this # therefore includes the DSL processor, the DSL and the API. packagejar(mx.classpath("com.oracle.truffle.dsl.processor").split(os.pathsep), "truffle.jar", None, "com.oracle.truffle.dsl.processor.TruffleProcessor") # Test with the JAR - _unittest(["com.oracle.truffle.api.test", "com.oracle.truffle.api.dsl.test"], ['@Test', '@LongTest', '@Parameters'], "truffle.jar:") + _unittest(["com.oracle.truffle.api.test", "com.oracle.truffle.api.dsl.test"], ['@Test', '@Parameters'], "truffle.jar:") def isGraalEnabled(vm): @@ -1953,7 +1940,6 @@ 'gate' : [gate, '[-options]'], 'bench' : [bench, '[-resultfile file] [all(default)|dacapo|specjvm2008|bootstrap]'], 'unittest' : [unittest, '[unittest options] [--] [VM options] [filters...]', _unittestHelpSuffix], - 'longunittest' : [longunittest, '[unittest options] [--] [VM options] [filters...]', _unittestHelpSuffix], 'makejmhdeps' : [makejmhdeps, ''], 'shortunittest' : [shortunittest, '[unittest options] [--] [VM options] [filters...]', _unittestHelpSuffix], 'jacocoreport' : [jacocoreport, '[output directory]'],
--- a/mx/projects Wed Apr 23 15:23:18 2014 +0200 +++ b/mx/projects Thu Apr 24 08:38:00 2014 +0200 @@ -42,15 +42,15 @@ library@DACAPO_SCALA@urls=http://repo.scalabench.org/snapshots/org/scalabench/benchmarks/scala-benchmark-suite/0.1.0-SNAPSHOT/scala-benchmark-suite-0.1.0-20120216.103539-3.jar library@DACAPO_SCALA@sha1=59b64c974662b5cf9dbd3cf9045d293853dd7a51 -library@OKRA@path=lib/okra-1.8.jar -library@OKRA@urls=http://cr.openjdk.java.net/~tdeneau/okra-1.8.jar -library@OKRA@sourcePath=lib/okra-1.8-src.jar -library@OKRA@sourceUrls=http://cr.openjdk.java.net/~tdeneau/okra-1.8-src.jar +library@OKRA@path=lib/okra-1.9.jar +library@OKRA@urls=http://cr.openjdk.java.net/~tdeneau/okra-1.9.jar +library@OKRA@sourcePath=lib/okra-1.9-src.jar +library@OKRA@sourceUrls=http://cr.openjdk.java.net/~tdeneau/okra-1.9-src.jar -library@OKRA_WITH_SIM@path=lib/okra-1.8-with-sim.jar -library@OKRA_WITH_SIM@urls=http://cr.openjdk.java.net/~tdeneau/okra-1.8-with-sim.jar -library@OKRA_WITH_SIM@sourcePath=lib/okra-1.8-with-sim-src.jar -library@OKRA_WITH_SIM@sourceUrls=http://cr.openjdk.java.net/~tdeneau/okra-1.8-with-sim-src.jar +library@OKRA_WITH_SIM@path=lib/okra-1.9-with-sim.jar +library@OKRA_WITH_SIM@urls=http://cr.openjdk.java.net/~tdeneau/okra-1.9-with-sim.jar +library@OKRA_WITH_SIM@sourcePath=lib/okra-1.9-with-sim-src.jar +library@OKRA_WITH_SIM@sourceUrls=http://cr.openjdk.java.net/~tdeneau/okra-1.9-with-sim-src.jar library@JAVA_ALLOCATION_INSTRUMENTER@path=lib/java-allocation-instrumenter.jar library@JAVA_ALLOCATION_INSTRUMENTER@urls=http://lafo.ssw.uni-linz.ac.at/java-allocation-instrumenter/java-allocation-instrumenter-8f0db117e64e.jar
--- a/test/baseline_whitelist.txt Wed Apr 23 15:23:18 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,19 +0,0 @@ -com.oracle.graal.jtt.loop.Loop03 -com.oracle.graal.jtt.loop.Loop04 -com.oracle.graal.jtt.loop.Loop08 -com.oracle.graal.jtt.loop.Loop11 -com.oracle.graal.jtt.bytecode.BC_iadd -com.oracle.graal.jtt.bytecode.BC_iadd2 -com.oracle.graal.jtt.bytecode.BC_iadd3 -com.oracle.graal.jtt.bytecode.BC_ifeq_2 -com.oracle.graal.jtt.bytecode.BC_ifeq_3 -com.oracle.graal.jtt.bytecode.BC_ifeq -com.oracle.graal.jtt.bytecode.BC_aload_3 -com.oracle.graal.jtt.bytecode.BC_aload_2 -com.oracle.graal.jtt.bytecode.BC_aload_1 -com.oracle.graal.jtt.bytecode.BC_aload_0 -com.oracle.graal.jtt.bytecode.BC_areturn -com.oracle.graal.jtt.bytecode.BC_freturn -com.oracle.graal.jtt.bytecode.BC_iconst -com.oracle.graal.jtt.bytecode.BC_ireturn -com.oracle.graal.jtt.bytecode.BC_lreturn
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/whitelist_baseline.txt Thu Apr 24 08:38:00 2014 +0200 @@ -0,0 +1,19 @@ +# com.oracle.graal.jtt.loop.Loop03 +# com.oracle.graal.jtt.loop.Loop04 +# com.oracle.graal.jtt.loop.Loop08 +# com.oracle.graal.jtt.loop.Loop11 +com.oracle.graal.jtt.bytecode.BC_iadd +com.oracle.graal.jtt.bytecode.BC_iadd2 +com.oracle.graal.jtt.bytecode.BC_iadd3 +com.oracle.graal.jtt.bytecode.BC_ifeq_2 +com.oracle.graal.jtt.bytecode.BC_ifeq_3 +com.oracle.graal.jtt.bytecode.BC_ifeq +com.oracle.graal.jtt.bytecode.BC_aload_3 +com.oracle.graal.jtt.bytecode.BC_aload_2 +com.oracle.graal.jtt.bytecode.BC_aload_1 +com.oracle.graal.jtt.bytecode.BC_aload_0 +com.oracle.graal.jtt.bytecode.BC_areturn +com.oracle.graal.jtt.bytecode.BC_freturn +com.oracle.graal.jtt.bytecode.BC_iconst +com.oracle.graal.jtt.bytecode.BC_ireturn +com.oracle.graal.jtt.bytecode.BC_lreturn
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/whitelist_shortunittest.txt Thu Apr 24 08:38:00 2014 +0200 @@ -0,0 +1,214 @@ +com.oracle.graal.jtt.bytecode.BC_aaload_1 +com.oracle.graal.jtt.bytecode.BC_aaload +com.oracle.graal.jtt.bytecode.BC_aastore +com.oracle.graal.jtt.bytecode.BC_aload_0 +com.oracle.graal.jtt.bytecode.BC_aload_1 +com.oracle.graal.jtt.bytecode.BC_aload_2 +com.oracle.graal.jtt.bytecode.BC_aload_3 +com.oracle.graal.jtt.bytecode.BC_anewarray +com.oracle.graal.jtt.bytecode.BC_areturn +com.oracle.graal.jtt.bytecode.BC_arraylength +com.oracle.graal.jtt.bytecode.BC_athrow +com.oracle.graal.jtt.bytecode.BC_baload +com.oracle.graal.jtt.bytecode.BC_bastore +com.oracle.graal.jtt.bytecode.BC_caload +com.oracle.graal.jtt.bytecode.BC_castore +com.oracle.graal.jtt.bytecode.BC_checkcast01 +com.oracle.graal.jtt.bytecode.BC_checkcast02 +com.oracle.graal.jtt.bytecode.BC_d2f +com.oracle.graal.jtt.bytecode.BC_d2i01 +com.oracle.graal.jtt.bytecode.BC_d2i02 +com.oracle.graal.jtt.bytecode.BC_d2l01 +com.oracle.graal.jtt.bytecode.BC_d2l02 +com.oracle.graal.jtt.bytecode.BC_d2l03 +com.oracle.graal.jtt.bytecode.BC_dadd +com.oracle.graal.jtt.bytecode.BC_daload +com.oracle.graal.jtt.bytecode.BC_dastore +com.oracle.graal.jtt.bytecode.BC_dcmp01 +com.oracle.graal.jtt.bytecode.BC_dcmp02 +com.oracle.graal.jtt.bytecode.BC_dcmp03 +com.oracle.graal.jtt.bytecode.BC_dcmp04 +com.oracle.graal.jtt.bytecode.BC_dcmp05 +com.oracle.graal.jtt.bytecode.BC_dcmp06 +com.oracle.graal.jtt.bytecode.BC_dcmp07 +com.oracle.graal.jtt.bytecode.BC_dcmp08 +com.oracle.graal.jtt.bytecode.BC_dcmp09 +com.oracle.graal.jtt.bytecode.BC_dcmp10 +com.oracle.graal.jtt.bytecode.BC_ddiv +com.oracle.graal.jtt.bytecode.BC_dmul +com.oracle.graal.jtt.bytecode.BC_dneg2 +com.oracle.graal.jtt.bytecode.BC_dneg +com.oracle.graal.jtt.bytecode.BC_drem +com.oracle.graal.jtt.bytecode.BC_dreturn +com.oracle.graal.jtt.bytecode.BC_dsub2 +com.oracle.graal.jtt.bytecode.BC_dsub +com.oracle.graal.jtt.bytecode.BC_f2d +com.oracle.graal.jtt.bytecode.BC_f2i01 +com.oracle.graal.jtt.bytecode.BC_f2i02 +com.oracle.graal.jtt.bytecode.BC_f2l01 +com.oracle.graal.jtt.bytecode.BC_f2l02 +com.oracle.graal.jtt.bytecode.BC_fadd +com.oracle.graal.jtt.bytecode.BC_faload +com.oracle.graal.jtt.bytecode.BC_fastore +com.oracle.graal.jtt.bytecode.BC_fcmp01 +com.oracle.graal.jtt.bytecode.BC_fcmp02 +com.oracle.graal.jtt.bytecode.BC_fcmp03 +com.oracle.graal.jtt.bytecode.BC_fcmp04 +com.oracle.graal.jtt.bytecode.BC_fcmp05 +com.oracle.graal.jtt.bytecode.BC_fcmp06 +com.oracle.graal.jtt.bytecode.BC_fcmp07 +com.oracle.graal.jtt.bytecode.BC_fcmp08 +com.oracle.graal.jtt.bytecode.BC_fcmp09 +com.oracle.graal.jtt.bytecode.BC_fcmp10 +com.oracle.graal.jtt.bytecode.BC_fdiv +com.oracle.graal.jtt.bytecode.BC_fload_2 +com.oracle.graal.jtt.bytecode.BC_fload +com.oracle.graal.jtt.bytecode.BC_fmul +com.oracle.graal.jtt.bytecode.BC_fneg +com.oracle.graal.jtt.bytecode.BC_frem +com.oracle.graal.jtt.bytecode.BC_freturn +com.oracle.graal.jtt.bytecode.BC_fsub +com.oracle.graal.jtt.bytecode.BC_getfield_b +com.oracle.graal.jtt.bytecode.BC_getfield_c +com.oracle.graal.jtt.bytecode.BC_getfield_d +com.oracle.graal.jtt.bytecode.BC_getfield_f +com.oracle.graal.jtt.bytecode.BC_getfield_i +com.oracle.graal.jtt.bytecode.BC_getfield +com.oracle.graal.jtt.bytecode.BC_getfield_l +com.oracle.graal.jtt.bytecode.BC_getfield_o +com.oracle.graal.jtt.bytecode.BC_getfield_s +com.oracle.graal.jtt.bytecode.BC_getfield_z +com.oracle.graal.jtt.bytecode.BC_getstatic_b +com.oracle.graal.jtt.bytecode.BC_getstatic_c +com.oracle.graal.jtt.bytecode.BC_getstatic_d +com.oracle.graal.jtt.bytecode.BC_getstatic_f +com.oracle.graal.jtt.bytecode.BC_getstatic_i +com.oracle.graal.jtt.bytecode.BC_getstatic_l +com.oracle.graal.jtt.bytecode.BC_getstatic_s +com.oracle.graal.jtt.bytecode.BC_getstatic_z +com.oracle.graal.jtt.bytecode.BC_i2b +com.oracle.graal.jtt.bytecode.BC_i2c +com.oracle.graal.jtt.bytecode.BC_i2d +com.oracle.graal.jtt.bytecode.BC_i2f +com.oracle.graal.jtt.bytecode.BC_i2l +com.oracle.graal.jtt.bytecode.BC_i2s +com.oracle.graal.jtt.bytecode.BC_iadd2 +com.oracle.graal.jtt.bytecode.BC_iadd3 +com.oracle.graal.jtt.bytecode.BC_iadd +com.oracle.graal.jtt.bytecode.BC_iaload +com.oracle.graal.jtt.bytecode.BC_iand +com.oracle.graal.jtt.bytecode.BC_iastore +com.oracle.graal.jtt.bytecode.BC_iconst +com.oracle.graal.jtt.bytecode.BC_idiv2 +com.oracle.graal.jtt.bytecode.BC_idiv +com.oracle.graal.jtt.bytecode.BC_ifeq_2 +com.oracle.graal.jtt.bytecode.BC_ifeq_3 +com.oracle.graal.jtt.bytecode.BC_ifeq +com.oracle.graal.jtt.bytecode.BC_ifge_2 +com.oracle.graal.jtt.bytecode.BC_ifge_3 +com.oracle.graal.jtt.bytecode.BC_ifge +com.oracle.graal.jtt.bytecode.BC_ifgt +com.oracle.graal.jtt.bytecode.BC_ificmplt1 +com.oracle.graal.jtt.bytecode.BC_ificmplt2 +com.oracle.graal.jtt.bytecode.BC_ificmpne1 +com.oracle.graal.jtt.bytecode.BC_ificmpne2 +com.oracle.graal.jtt.bytecode.BC_ifle +com.oracle.graal.jtt.bytecode.BC_iflt +com.oracle.graal.jtt.bytecode.BC_ifne +com.oracle.graal.jtt.bytecode.BC_ifnonnull_2 +com.oracle.graal.jtt.bytecode.BC_ifnonnull_3 +com.oracle.graal.jtt.bytecode.BC_ifnonnull +com.oracle.graal.jtt.bytecode.BC_ifnull_2 +com.oracle.graal.jtt.bytecode.BC_ifnull_3 +com.oracle.graal.jtt.bytecode.BC_ifnull +com.oracle.graal.jtt.bytecode.BC_iinc_1 +com.oracle.graal.jtt.bytecode.BC_iinc_2 +com.oracle.graal.jtt.bytecode.BC_iinc_3 +com.oracle.graal.jtt.bytecode.BC_iinc_4 +com.oracle.graal.jtt.bytecode.BC_iload_0_1 +com.oracle.graal.jtt.bytecode.BC_iload_0_2 +com.oracle.graal.jtt.bytecode.BC_iload_0 +com.oracle.graal.jtt.bytecode.BC_iload_1_1 +com.oracle.graal.jtt.bytecode.BC_iload_1 +com.oracle.graal.jtt.bytecode.BC_iload_2 +com.oracle.graal.jtt.bytecode.BC_iload_3 +com.oracle.graal.jtt.bytecode.BC_imul +com.oracle.graal.jtt.bytecode.BC_ineg +com.oracle.graal.jtt.bytecode.BC_instanceof +com.oracle.graal.jtt.bytecode.BC_invokeinterface +com.oracle.graal.jtt.bytecode.BC_invokespecial2 +com.oracle.graal.jtt.bytecode.BC_invokespecial +com.oracle.graal.jtt.bytecode.BC_invokestatic +com.oracle.graal.jtt.bytecode.BC_invokevirtual +com.oracle.graal.jtt.bytecode.BC_ior +com.oracle.graal.jtt.bytecode.BC_irem2 +com.oracle.graal.jtt.bytecode.BC_irem3 +com.oracle.graal.jtt.bytecode.BC_irem +com.oracle.graal.jtt.bytecode.BC_ireturn +com.oracle.graal.jtt.bytecode.BC_ishl +com.oracle.graal.jtt.bytecode.BC_ishr +com.oracle.graal.jtt.bytecode.BC_isub +com.oracle.graal.jtt.bytecode.BC_iushr +com.oracle.graal.jtt.bytecode.BC_ixor +com.oracle.graal.jtt.bytecode.BC_l2d +com.oracle.graal.jtt.bytecode.BC_l2f +com.oracle.graal.jtt.bytecode.BC_l2i_2 +com.oracle.graal.jtt.bytecode.BC_l2i +com.oracle.graal.jtt.bytecode.BC_ladd2 +com.oracle.graal.jtt.bytecode.BC_ladd +com.oracle.graal.jtt.bytecode.BC_laload +com.oracle.graal.jtt.bytecode.BC_land +com.oracle.graal.jtt.bytecode.BC_lastore +com.oracle.graal.jtt.bytecode.BC_lcmp +com.oracle.graal.jtt.bytecode.BC_ldc_01 +com.oracle.graal.jtt.bytecode.BC_ldc_02 +com.oracle.graal.jtt.bytecode.BC_ldc_03 +com.oracle.graal.jtt.bytecode.BC_ldc_04 +com.oracle.graal.jtt.bytecode.BC_ldc_05 +com.oracle.graal.jtt.bytecode.BC_ldc_06 +com.oracle.graal.jtt.bytecode.BC_ldiv2 +com.oracle.graal.jtt.bytecode.BC_ldiv3 +com.oracle.graal.jtt.bytecode.BC_ldiv +com.oracle.graal.jtt.bytecode.BC_lload_01 +com.oracle.graal.jtt.bytecode.BC_lload_0 +com.oracle.graal.jtt.bytecode.BC_lload_1 +com.oracle.graal.jtt.bytecode.BC_lload_2 +com.oracle.graal.jtt.bytecode.BC_lload_3 +com.oracle.graal.jtt.bytecode.BC_lmul +com.oracle.graal.jtt.bytecode.BC_lneg +com.oracle.graal.jtt.bytecode.BC_lookupswitch01 +com.oracle.graal.jtt.bytecode.BC_lookupswitch02 +com.oracle.graal.jtt.bytecode.BC_lookupswitch03 +com.oracle.graal.jtt.bytecode.BC_lookupswitch04 +com.oracle.graal.jtt.bytecode.BC_lookupswitch05 +com.oracle.graal.jtt.bytecode.BC_lor +com.oracle.graal.jtt.bytecode.BC_lrem2 +com.oracle.graal.jtt.bytecode.BC_lrem +com.oracle.graal.jtt.bytecode.BC_lreturn +com.oracle.graal.jtt.bytecode.BC_lshl +com.oracle.graal.jtt.bytecode.BC_lshr02 +com.oracle.graal.jtt.bytecode.BC_lshr +com.oracle.graal.jtt.bytecode.BC_lsub +com.oracle.graal.jtt.bytecode.BC_lushr +com.oracle.graal.jtt.bytecode.BC_lxor +com.oracle.graal.jtt.bytecode.BC_monitorenter02 +com.oracle.graal.jtt.bytecode.BC_monitorenter +com.oracle.graal.jtt.bytecode.BC_multianewarray01 +com.oracle.graal.jtt.bytecode.BC_multianewarray02 +com.oracle.graal.jtt.bytecode.BC_multianewarray03 +com.oracle.graal.jtt.bytecode.BC_multianewarray04 +com.oracle.graal.jtt.bytecode.BC_newarray +com.oracle.graal.jtt.bytecode.BC_new +com.oracle.graal.jtt.bytecode.BC_putfield_01 +com.oracle.graal.jtt.bytecode.BC_putfield_02 +com.oracle.graal.jtt.bytecode.BC_putfield_03 +com.oracle.graal.jtt.bytecode.BC_putfield_04 +com.oracle.graal.jtt.bytecode.BC_putstatic +com.oracle.graal.jtt.bytecode.BC_saload +com.oracle.graal.jtt.bytecode.BC_sastore +com.oracle.graal.jtt.bytecode.BC_tableswitch2 +com.oracle.graal.jtt.bytecode.BC_tableswitch3 +com.oracle.graal.jtt.bytecode.BC_tableswitch4 +com.oracle.graal.jtt.bytecode.BC_tableswitch +com.oracle.graal.jtt.bytecode.BC_wide01 +com.oracle.graal.jtt.bytecode.BC_wide02