# HG changeset patch # User Michael Van De Vanter # Date 1398216728 25200 # Node ID 041156bb59b237dd34eeb337420a8aefa88ca68a # Parent 417e2ae45b89bfcfd88042de55ade9c5a5ef16c1# Parent 3ef4196cf8e57250bbe7b5f0ece447934b7a2ddd Merge diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/BytecodeFrame.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/BytecodeFrame.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/BytecodeFrame.java Tue Apr 22 18:32:08 2014 -0700 @@ -94,6 +94,43 @@ public final boolean duringCall; /** + * This BCI should be used for frame states that are built for code with no meaningful BCI. + */ + public static final int UNKNOWN_BCI = -5; + + /** + * The BCI for exception unwind. This is synthetic code and has no representation in bytecode. + * In contrast with {@link #AFTER_EXCEPTION_BCI}, at this point, if the method is synchronized, + * the monitor is still held. + */ + public static final int UNWIND_BCI = -1; + + /** + * The BCI for the state before starting to execute a method. Note that if the method is + * synchronized, the monitor is not yet held. + */ + public static final int BEFORE_BCI = -2; + + /** + * The BCI for the state after finishing the execution of a method and returning normally. Note + * that if the method was synchronized the monitor is already released. + */ + public static final int AFTER_BCI = -3; + + /** + * The BCI for exception unwind. This is synthetic code and has no representation in bytecode. + * In contrast with {@link #UNWIND_BCI}, at this point, if the method is synchronized, the + * monitor is already released. + */ + public static final int AFTER_EXCEPTION_BCI = -4; + + /** + * This BCI should be used for states that cannot be the target of a deoptimization, like + * snippet frame states. + */ + public static final int INVALID_FRAMESTATE_BCI = -6; + + /** * Creates a new frame object. * * @param caller the caller frame (which may be {@code null}) diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestResolvedJavaMethod.java --- a/graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestResolvedJavaMethod.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestResolvedJavaMethod.java Tue Apr 22 18:32:08 2014 -0700 @@ -128,6 +128,18 @@ } @Test + public void isSynchronizedTest() { + for (Map.Entry e : methods.entrySet()) { + ResolvedJavaMethod m = e.getValue(); + assertEquals(Modifier.isSynchronized(e.getKey().getModifiers()), m.isSynchronized()); + } + for (Map.Entry, ResolvedJavaMethod> e : constructors.entrySet()) { + ResolvedJavaMethod m = e.getValue(); + assertEquals(Modifier.isSynchronized(e.getKey().getModifiers()), m.isSynchronized()); + } + } + + @Test public void canBeStaticallyBoundTest() { for (Map.Entry e : methods.entrySet()) { ResolvedJavaMethod m = e.getValue(); diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaMethod.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaMethod.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaMethod.java Tue Apr 22 18:32:08 2014 -0700 @@ -115,6 +115,8 @@ */ boolean canBeStaticallyBound(); + boolean isSynchronized(); + /** * Returns the list of exception handlers for this method. */ diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64Assembler.java --- a/graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64Assembler.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64Assembler.java Tue Apr 22 18:32:08 2014 -0700 @@ -1647,9 +1647,14 @@ public final void shrl(Register dst, int imm8) { assert isShiftCount(imm8) : "illegal shift count"; int encode = prefixAndEncode(dst.encoding); - emitByte(0xC1); - emitByte(0xE8 | encode); - emitByte(imm8); + if (imm8 == 1) { + emitByte(0xD1); + emitByte(0xE8 | encode); + } else { + emitByte(0xC1); + emitByte(0xE8 | encode); + emitByte(imm8); + } } public final void shrl(Register dst) { @@ -1658,6 +1663,82 @@ emitByte(0xE8 | encode); } + public final void roll(Register dst, int imm8) { + assert isShiftCount(imm8) : "illegal shift count"; + int encode = prefixAndEncode(dst.encoding); + if (imm8 == 1) { + emitByte(0xD1); + emitByte(0xC0 | encode); + } else { + emitByte(0xC1); + emitByte(0xC0 | encode); + emitByte(imm8); + } + } + + public final void roll(Register dst) { + int encode = prefixAndEncode(dst.encoding); + emitByte(0xD3); + emitByte(0xC0 | encode); + } + + public final void rorl(Register dst, int imm8) { + assert isShiftCount(imm8) : "illegal shift count"; + int encode = prefixAndEncode(dst.encoding); + if (imm8 == 1) { + emitByte(0xD1); + emitByte(0xC8 | encode); + } else { + emitByte(0xC1); + emitByte(0xC8 | encode); + emitByte(imm8); + } + } + + public final void rorl(Register dst) { + int encode = prefixAndEncode(dst.encoding); + emitByte(0xD3); + emitByte(0xC8 | encode); + } + + public final void rolq(Register dst, int imm8) { + assert isShiftCount(imm8) : "illegal shift count"; + int encode = prefixqAndEncode(dst.encoding); + if (imm8 == 1) { + emitByte(0xD1); + emitByte(0xC0 | encode); + } else { + emitByte(0xC1); + emitByte(0xC0 | encode); + emitByte(imm8); + } + } + + public final void rolq(Register dst) { + int encode = prefixqAndEncode(dst.encoding); + emitByte(0xD3); + emitByte(0xC0 | encode); + } + + public final void rorq(Register dst, int imm8) { + assert isShiftCount(imm8) : "illegal shift count"; + int encode = prefixqAndEncode(dst.encoding); + if (imm8 == 1) { + emitByte(0xD1); + emitByte(0xC8 | encode); + } else { + emitByte(0xC1); + emitByte(0xC8 | encode); + emitByte(imm8); + } + } + + public final void rorq(Register dst) { + int encode = prefixqAndEncode(dst.encoding); + emitByte(0xD3); + emitByte(0xC8 | encode); + } + public final void sqrtsd(Register dst, AMD64Address src) { assert dst.getRegisterCategory() == AMD64.XMM; emitByte(0xF2); @@ -2442,9 +2523,14 @@ public final void shrq(Register dst, int imm8) { assert isShiftCount(imm8 >> 1) : "illegal shift count"; int encode = prefixqAndEncode(dst.encoding); - emitByte(0xC1); - emitByte(0xE8 | encode); - emitByte(imm8); + if (imm8 == 1) { + emitByte(0xD1); + emitByte(0xE8 | encode); + } else { + emitByte(0xC1); + emitByte(0xE8 | encode); + emitByte(imm8); + } } public final void shrq(Register dst) { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java --- a/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,8 +22,7 @@ */ package com.oracle.graal.baseline; -import static com.oracle.graal.phases.GraalOptions.*; -import static java.lang.reflect.Modifier.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import java.util.*; @@ -106,7 +105,7 @@ } } - if (isSynchronized(method.getModifiers())) { + if (method.isSynchronized()) { throw GraalInternalError.unimplemented("Handle synchronized methods"); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineCompiler.java --- a/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineCompiler.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineCompiler.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.baseline; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java --- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Tue Apr 22 18:32:08 2014 -0700 @@ -37,6 +37,7 @@ import com.oracle.graal.asm.amd64.AMD64Assembler.ConditionFlag; import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.calc.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.compiler.gen.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.StandardOp.JumpOp; @@ -52,6 +53,7 @@ import com.oracle.graal.lir.amd64.AMD64Arithmetic.Unary1Op; import com.oracle.graal.lir.amd64.AMD64Arithmetic.Unary2MemoryOp; import com.oracle.graal.lir.amd64.AMD64Arithmetic.Unary2Op; +import com.oracle.graal.lir.amd64.AMD64Arithmetic.Unary2RegOp; import com.oracle.graal.lir.amd64.AMD64Compare.CompareMemoryOp; import com.oracle.graal.lir.amd64.AMD64Compare.CompareOp; import com.oracle.graal.lir.amd64.AMD64ControlFlow.BranchOp; @@ -70,7 +72,6 @@ import com.oracle.graal.lir.amd64.AMD64Move.ZeroExtendLoadOp; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.FloatConvertNode.FloatConvert; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.phases.util.*; /** @@ -765,9 +766,9 @@ } } - private AllocatableValue emitConvert1Op(PlatformKind kind, AMD64Arithmetic op, AllocatableValue input) { + private AllocatableValue emitConvert2RegOp(PlatformKind kind, AMD64Arithmetic op, AllocatableValue input) { Variable result = newVariable(kind); - append(new Unary1Op(op, result, input)); + append(new Unary2RegOp(op, result, input)); return result; } @@ -850,7 +851,7 @@ public Value emitNarrow(Value inputVal, int bits) { if (inputVal.getKind() == Kind.Long && bits <= 32) { // TODO make it possible to reinterpret Long as Int in LIR without move - return emitConvert1Op(Kind.Int, L2I, asAllocatable(inputVal)); + return emitConvert2RegOp(Kind.Int, L2I, asAllocatable(inputVal)); } else { return inputVal; } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64MemoryPeephole.java --- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64MemoryPeephole.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64MemoryPeephole.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,9 +23,9 @@ package com.oracle.graal.compiler.amd64; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.lir.amd64.AMD64Arithmetic.*; import static com.oracle.graal.nodes.ConstantNode.*; -import static com.oracle.graal.phases.GraalOptions.*; import java.util.*; @@ -44,7 +44,6 @@ import com.oracle.graal.nodes.calc.FloatConvertNode.FloatConvert; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; public class AMD64MemoryPeephole implements MemoryArithmeticLIRLowerer { protected final AMD64NodeLIRBuilder gen; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/GraalOptions.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/GraalOptions.java Tue Apr 22 18:32:08 2014 -0700 @@ -0,0 +1,283 @@ +/* + * 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 + * 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.common; + +import com.oracle.graal.options.*; + +/** + * This class encapsulates options that control the behavior of the Graal compiler. + */ +// @formatter:off +public final class GraalOptions { + + @Option(help = "Use baseline compiler configuration") + public static final OptionValue UseBaselineCompiler = new OptionValue<>(false); + @Option(help = "Enable use of compiler intrinsics") + public static final OptionValue Intrinsify = new OptionValue<>(true); + @Option(help = "Enable inlining of monomorphic calls") + public static final OptionValue InlineMonomorphicCalls = new OptionValue<>(true); + @Option(help = "Enable inlining of polymorphic calls") + public static final OptionValue InlinePolymorphicCalls = new OptionValue<>(true); + @Option(help = "Enable inlining of megamorphic calls") + public static final OptionValue InlineMegamorphicCalls = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue MegamorphicInliningMinMethodProbability = new OptionValue<>(0.33D); + @Option(help = "") + public static final OptionValue MaximumDesiredSize = new OptionValue<>(20000); + @Option(help = "") + public static final OptionValue MaximumRecursiveInlining = new OptionValue<>(5); + + // inlining settings + @Option(help = "") + public static final OptionValue BoostInliningForEscapeAnalysis = new OptionValue<>(2f); + @Option(help = "") + public static final OptionValue RelevanceCapForInlining = new OptionValue<>(1f); + @Option(help = "") + public static final OptionValue CapInheritedRelevance = new OptionValue<>(1f); + @Option(help = "") + public static final OptionValue IterativeInlining = new OptionValue<>(false); + + @Option(help = "") + public static final OptionValue TrivialInliningSize = new OptionValue<>(10); + @Option(help = "") + public static final OptionValue MaximumInliningSize = new OptionValue<>(300); + @Option(help = "") + public static final OptionValue SmallCompiledLowLevelGraphSize = new OptionValue<>(300); + @Option(help = "") + public static final OptionValue LimitInlinedInvokes = new OptionValue<>(5.0); + @Option(help = "") + public static final OptionValue InlineEverything = new OptionValue<>(false); + + // escape analysis settings + @Option(help = "") + public static final OptionValue PartialEscapeAnalysis = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue EscapeAnalysisIterations = new OptionValue<>(2); + @Option(help = "") + public static final OptionValue EscapeAnalyzeOnly = new OptionValue<>(null); + @Option(help = "") + public static final OptionValue MaximumEscapeAnalysisArrayLength = new OptionValue<>(32); + @Option(help = "") + public static final OptionValue PEAInliningHints = new OptionValue<>(false); + + @Option(help = "") + public static final OptionValue TailDuplicationProbability = new OptionValue<>(0.5); + @Option(help = "") + public static final OptionValue TailDuplicationTrivialSize = new OptionValue<>(1); + + // profiling information + @Option(help = "") + public static final OptionValue DeoptsToDisableOptimisticOptimization = new OptionValue<>(40); + + // graph caching + @Option(help = "") + public static final OptionValue CacheGraphs = new OptionValue<>(true); + + //loop transform settings TODO (gd) tune + @Option(help = "") + public static final OptionValue LoopPeeling = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue ReassociateInvariants = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue FullUnroll = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue LoopUnswitch = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue FullUnrollMaxNodes = new OptionValue<>(300); + @Option(help = "") + public static final OptionValue ExactFullUnrollMaxNodes = new OptionValue<>(1200); + @Option(help = "") + public static final OptionValue MinimumPeelProbability = new OptionValue<>(0.35f); + @Option(help = "") + public static final OptionValue LoopMaxUnswitch = new OptionValue<>(3); + @Option(help = "") + public static final OptionValue LoopUnswitchMaxIncrease = new OptionValue<>(50); + @Option(help = "") + public static final OptionValue LoopUnswitchUncertaintyBoost = new OptionValue<>(5); + @Option(help = "") + public static final OptionValue UseLoopLimitChecks = new OptionValue<>(true); + + // debugging settings + @Option(help = "") + public static final OptionValue ZapStackOnMethodEntry = new OptionValue<>(false); + @Option(help = "") + public static final OptionValue DeoptALot = new OptionValue<>(false); + @Option(help = "") + public static final OptionValue VerifyPhases = new OptionValue<>(false); + + @Option(help = "") + public static final OptionValue PrintFilter = new OptionValue<>(null); + + // Debug settings: + @Option(help = "") + public static final OptionValue BootstrapReplacements = new OptionValue<>(false); + @Option(help = "") + public static final OptionValue GCDebugStartCycle = new OptionValue<>(-1); + // Ideal graph visualizer output settings + @Option(help = "Dump IdealGraphVisualizer output in binary format") + public static final OptionValue PrintBinaryGraphs = new OptionValue<>(true); + @Option(help = "Output probabilities for fixed nodes during binary graph dumping") + public static final OptionValue PrintGraphProbabilities = new OptionValue<>(false); + @Option(help = "Enable dumping to the C1Visualizer. Enabling this option implies PrintBackendCFG.") + public static final OptionValue PrintCFG = new OptionValue<>(false); + @Option(help = "Enable dumping LIR, register allocation and code generation info to the C1Visualizer.") + public static final OptionValue PrintBackendCFG = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue PrintIdealGraphFile = new OptionValue<>(false); + @Option(help = "") + public static final OptionValue PrintIdealGraphAddress = new OptionValue<>("127.0.0.1"); + @Option(help = "") + public static final OptionValue PrintIdealGraphPort = new OptionValue<>(4444); + @Option(help = "") + public static final OptionValue PrintBinaryGraphPort = new OptionValue<>(4445); + + // Other printing settings + @Option(help = "") + public static final OptionValue PrintCompilation = new OptionValue<>(false); + @Option(help = "") + public static final OptionValue PrintAfterCompilation = new OptionValue<>(false); + @Option(help = "Print profiling information when parsing a method's bytecode") + public static final OptionValue PrintProfilingInformation = new OptionValue<>(false); + @Option(help = "") + public static final OptionValue PrintCodeBytes = new OptionValue<>(false); + @Option(help = "") + public static final OptionValue PrintBailout = new OptionValue<>(false); + @Option(help = "") + public static final OptionValue TraceEscapeAnalysis = new OptionValue<>(false); + @Option(help = "") + public static final OptionValue ExitVMOnBailout = new OptionValue<>(false); + @Option(help = "") + public static final OptionValue ExitVMOnException = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue PrintStackTraceOnException = new OptionValue<>(false); + @Option(help = "Set a phase after which the decompiler dumps the graph, -G:Dump= required") + public static final OptionValue DecompileAfterPhase = new OptionValue<>(null); + + // HotSpot command line options + @Option(help = "") + public static final OptionValue HotSpotPrintCompilation = new OptionValue<>(false); + @Option(help = "") + public static final OptionValue HotSpotCIPrintCompilerName = new OptionValue<>(false); + @Option(help = "") + public static final OptionValue HotSpotPrintInlining = new OptionValue<>(false); + + // Register allocator debugging + @Option(help = "") + public static final OptionValue RegisterPressure = new OptionValue<>(null); + + // Code generator settings + @Option(help = "") + public static final OptionValue ConditionalElimination = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue UseProfilingInformation = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue RemoveNeverExecutedCode = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue UseExceptionProbability = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue UseExceptionProbabilityForOperations = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue OmitHotExceptionStacktrace = new OptionValue<>(false); + @Option(help = "") + public static final OptionValue GenSafepoints = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue GenLoopSafepoints = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue UseTypeCheckHints = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue InlineVTableStubs = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue AlwaysInlineVTableStubs = new OptionValue<>(false); + @Option(help = "") + public static final OptionValue GenAssertionCode = new OptionValue<>(false); + @Option(help = "") + public static final OptionValue AlignCallsForPatching = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue ResolveClassBeforeStaticInvoke = new OptionValue<>(false); + @Option(help = "") + public static final OptionValue CanOmitFrame = new OptionValue<>(true); + + @Option(help = "") + public static final OptionValue MemoryAwareScheduling = new OptionValue<>(true); + + // Translating tableswitch instructions + @Option(help = "") + public static final OptionValue MinimumJumpTableSize = new OptionValue<>(5); + @Option(help = "") + public static final OptionValue RangeTestsSwitchDensity = new OptionValue<>(5); + @Option(help = "") + public static final OptionValue MinTableSwitchDensity = new OptionValue<>(0.5); + + // Ahead of time compilation + @Option(help = "Try to avoid emitting code where patching is required") + public static final OptionValue ImmutableCode = new OptionValue<>(false); + + @Option(help = "") + public static final OptionValue CallArrayCopy = new OptionValue<>(true); + + // Runtime settings + @Option(help = "") + public static final OptionValue SupportJsrBytecodes = new OptionValue<>(true); + + @Option(help = "") + public static final OptionValue OptAssumptions = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue OptConvertDeoptsToGuards = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue OptReadElimination = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue OptCanonicalizer = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue OptDeoptimizationGrouping = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue OptScheduleOutOfLoops = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue OptEliminateGuards = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue OptImplicitNullChecks = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue OptLivenessAnalysis = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue OptLoopTransform = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue OptFloatingReads = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue OptTailDuplication = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue OptEliminatePartiallyRedundantGuards = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue OptFilterProfiledTypes = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue OptDevirtualizeInvokesOptimistically = new OptionValue<>(true); + @Option(help = "") + public static final OptionValue OptPushThroughPi = new OptionValue<>(true); + @Option(help = "Allow backend to emit arithmetic and compares directly against memory.") + public static final OptionValue OptFoldMemory = new OptionValue<>(true); + + + /** + * Counts the various paths taken through snippets. + */ + @Option(help = "") + public static final OptionValue SnippetCounters = new OptionValue<>(false); +} diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/spi/LIRProviders.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/spi/LIRProviders.java Tue Apr 22 18:32:08 2014 -0700 @@ -0,0 +1,42 @@ +/* + * 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.compiler.common.spi; + +import com.oracle.graal.api.code.*; +import com.oracle.graal.api.meta.*; + +/** + * A set of providers which are required for LIR and/or code generation. Some may not be present + * (i.e., null). + */ +public interface LIRProviders { + + MetaAccessProvider getMetaAccess(); + + CodeCacheProvider getCodeCache(); + + ForeignCallsProvider getForeignCalls(); + + ConstantReflectionProvider getConstantReflection(); + +} diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/FloatStamp.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/FloatStamp.java Tue Apr 22 18:32:08 2014 -0700 @@ -0,0 +1,234 @@ +/* + * Copyright (c) 2012, 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.compiler.common.type; + +import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.*; +import com.oracle.graal.compiler.common.spi.*; + +public class FloatStamp extends PrimitiveStamp { + + private final double lowerBound; + private final double upperBound; + private final boolean nonNaN; + + protected FloatStamp(int bits) { + this(bits, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, false); + } + + public FloatStamp(int bits, double lowerBound, double upperBound, boolean nonNaN) { + super(bits); + this.lowerBound = lowerBound; + this.upperBound = upperBound; + this.nonNaN = nonNaN; + } + + @Override + public Stamp unrestricted() { + return new FloatStamp(getBits()); + } + + @Override + public Stamp illegal() { + return new FloatStamp(getBits(), Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, true); + } + + @Override + public boolean isLegal() { + return lowerBound <= upperBound || !nonNaN; + } + + @Override + public Kind getStackKind() { + if (getBits() > 32) { + return Kind.Double; + } else { + return Kind.Float; + } + } + + @Override + public PlatformKind getPlatformKind(LIRTypeTool tool) { + return tool.getFloatingKind(getBits()); + } + + @Override + public ResolvedJavaType javaType(MetaAccessProvider metaAccess) { + switch (getBits()) { + case 32: + return metaAccess.lookupJavaType(Float.TYPE); + case 64: + return metaAccess.lookupJavaType(Double.TYPE); + default: + throw GraalInternalError.shouldNotReachHere(); + } + } + + /** + * The (inclusive) lower bound on the value described by this stamp. + */ + public double lowerBound() { + return lowerBound; + } + + /** + * The (inclusive) upper bound on the value described by this stamp. + */ + public double upperBound() { + return upperBound; + } + + public boolean isNonNaN() { + return nonNaN; + } + + public boolean isUnrestricted() { + return lowerBound == Double.NEGATIVE_INFINITY && upperBound == Double.POSITIVE_INFINITY && !nonNaN; + } + + public boolean contains(double value) { + if (Double.isNaN(value)) { + return !nonNaN; + } else { + return value >= lowerBound && value <= upperBound; + } + } + + @Override + public String toString() { + StringBuilder str = new StringBuilder(); + str.append('f'); + str.append(getBits()); + str.append(nonNaN ? "!" : ""); + if (lowerBound == upperBound) { + str.append(" [").append(lowerBound).append(']'); + } else if (lowerBound != Double.NEGATIVE_INFINITY || upperBound != Double.POSITIVE_INFINITY) { + str.append(" [").append(lowerBound).append(" - ").append(upperBound).append(']'); + } + return str.toString(); + } + + @Override + public Stamp meet(Stamp otherStamp) { + if (otherStamp == this) { + return this; + } + if (!(otherStamp instanceof FloatStamp)) { + return StampFactory.illegal(Kind.Illegal); + } + FloatStamp other = (FloatStamp) otherStamp; + assert getBits() == other.getBits(); + double meetUpperBound = Math.max(upperBound, other.upperBound); + double meetLowerBound = Math.min(lowerBound, other.lowerBound); + boolean meetNonNaN = nonNaN && other.nonNaN; + if (meetLowerBound == lowerBound && meetUpperBound == upperBound && meetNonNaN == nonNaN) { + return this; + } else if (meetLowerBound == other.lowerBound && meetUpperBound == other.upperBound && meetNonNaN == other.nonNaN) { + return other; + } else { + return new FloatStamp(getBits(), meetLowerBound, meetUpperBound, meetNonNaN); + } + } + + @Override + public Stamp join(Stamp otherStamp) { + if (otherStamp == this) { + return this; + } + if (!(otherStamp instanceof FloatStamp)) { + return StampFactory.illegal(Kind.Illegal); + } + FloatStamp other = (FloatStamp) otherStamp; + assert getBits() == other.getBits(); + double joinUpperBound = Math.min(upperBound, other.upperBound); + double joinLowerBound = Math.max(lowerBound, other.lowerBound); + boolean joinNonNaN = nonNaN || other.nonNaN; + if (joinLowerBound == lowerBound && joinUpperBound == upperBound && joinNonNaN == nonNaN) { + return this; + } else if (joinLowerBound == other.lowerBound && joinUpperBound == other.upperBound && joinNonNaN == other.nonNaN) { + return other; + } else { + return new FloatStamp(getBits(), joinLowerBound, joinUpperBound, joinNonNaN); + } + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + long temp; + result = prime * result + super.hashCode(); + temp = Double.doubleToLongBits(lowerBound); + result = prime * result + (int) (temp ^ (temp >>> 32)); + result = prime * result + (nonNaN ? 1231 : 1237); + temp = Double.doubleToLongBits(upperBound); + result = prime * result + (int) (temp ^ (temp >>> 32)); + return result; + } + + @Override + public boolean isCompatible(Stamp stamp) { + if (this == stamp) { + return true; + } + if (stamp instanceof FloatStamp) { + FloatStamp other = (FloatStamp) stamp; + return getBits() == other.getBits(); + } + return false; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null || getClass() != obj.getClass() || !super.equals(obj)) { + return false; + } + FloatStamp other = (FloatStamp) obj; + if (Double.doubleToLongBits(lowerBound) != Double.doubleToLongBits(other.lowerBound)) { + return false; + } + if (Double.doubleToLongBits(upperBound) != Double.doubleToLongBits(other.upperBound)) { + return false; + } + if (nonNaN != other.nonNaN) { + return false; + } + return true; + } + + @Override + public Constant asConstant() { + if (nonNaN && lowerBound == upperBound) { + switch (getBits()) { + case 32: + return Constant.forFloat((float) lowerBound); + case 64: + return Constant.forDouble(lowerBound); + } + } + return null; + } +} diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/IllegalStamp.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/IllegalStamp.java Tue Apr 22 18:32:08 2014 -0700 @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2012, 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.compiler.common.type; + +import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.*; +import com.oracle.graal.compiler.common.spi.*; + +/** + * This stamp represents the illegal type. Values with this type can not exist at run time. + */ +public final class IllegalStamp extends Stamp { + + private IllegalStamp() { + } + + @Override + public Kind getStackKind() { + return Kind.Illegal; + } + + @Override + public PlatformKind getPlatformKind(LIRTypeTool tool) { + throw GraalInternalError.shouldNotReachHere("illegal stamp should not reach backend"); + } + + @Override + public Stamp unrestricted() { + return this; + } + + @Override + public Stamp illegal() { + return this; + } + + @Override + public ResolvedJavaType javaType(MetaAccessProvider metaAccess) { + throw GraalInternalError.shouldNotReachHere("illegal stamp has no Java type"); + } + + @Override + public Stamp meet(Stamp other) { + return this; + } + + @Override + public Stamp join(Stamp other) { + return this; + } + + @Override + public boolean isCompatible(Stamp stamp) { + return false; + } + + @Override + public String toString() { + return "ILLEGAL"; + } + + @Override + public boolean isLegal() { + return false; + } + + private static IllegalStamp instance = new IllegalStamp(); + + static IllegalStamp getInstance() { + return instance; + } +} diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/IntegerStamp.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/IntegerStamp.java Tue Apr 22 18:32:08 2014 -0700 @@ -0,0 +1,318 @@ +/* + * Copyright (c) 2012, 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.compiler.common.type; + +import java.util.*; + +import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.*; +import com.oracle.graal.compiler.common.spi.*; + +/** + * Describes the possible values of a {@link ValueNode} that produces an int or long result. + * + * The description consists of (inclusive) lower and upper bounds and up (may be set) and down + * (always set) bit-masks. + */ +@SuppressWarnings("javadoc") +public class IntegerStamp extends PrimitiveStamp { + + private final long lowerBound; + private final long upperBound; + private final long downMask; + private final long upMask; + + public IntegerStamp(int bits, long lowerBound, long upperBound, long downMask, long upMask) { + super(bits); + this.lowerBound = lowerBound; + this.upperBound = upperBound; + this.downMask = downMask; + this.upMask = upMask; + assert lowerBound >= defaultMinValue(bits) : this; + assert upperBound <= defaultMaxValue(bits) : this; + assert (downMask & defaultMask(bits)) == downMask : this; + assert (upMask & defaultMask(bits)) == upMask : this; + } + + @Override + public Stamp unrestricted() { + return new IntegerStamp(getBits(), defaultMinValue(getBits()), defaultMaxValue(getBits()), 0, defaultMask(getBits())); + } + + @Override + public Stamp illegal() { + return new IntegerStamp(getBits(), defaultMaxValue(getBits()), defaultMinValue(getBits()), defaultMask(getBits()), 0); + } + + @Override + public boolean isLegal() { + return lowerBound <= upperBound; + } + + @Override + public Kind getStackKind() { + if (getBits() > 32) { + return Kind.Long; + } else { + return Kind.Int; + } + } + + @Override + public PlatformKind getPlatformKind(LIRTypeTool tool) { + return tool.getIntegerKind(getBits()); + } + + @Override + public ResolvedJavaType javaType(MetaAccessProvider metaAccess) { + switch (getBits()) { + case 1: + return metaAccess.lookupJavaType(Boolean.TYPE); + case 8: + return metaAccess.lookupJavaType(Byte.TYPE); + case 16: + return metaAccess.lookupJavaType(Short.TYPE); + case 32: + return metaAccess.lookupJavaType(Integer.TYPE); + case 64: + return metaAccess.lookupJavaType(Long.TYPE); + default: + throw GraalInternalError.shouldNotReachHere(); + } + } + + /** + * The signed inclusive lower bound on the value described by this stamp. + */ + public long lowerBound() { + return lowerBound; + } + + /** + * The signed inclusive upper bound on the value described by this stamp. + */ + public long upperBound() { + return upperBound; + } + + /** + * This bit-mask describes the bits that are always set in the value described by this stamp. + */ + public long downMask() { + return downMask; + } + + /** + * This bit-mask describes the bits that can be set in the value described by this stamp. + */ + public long upMask() { + return upMask; + } + + public boolean isUnrestricted() { + return lowerBound == defaultMinValue(getBits()) && upperBound == defaultMaxValue(getBits()) && downMask == 0 && upMask == defaultMask(getBits()); + } + + public boolean contains(long value) { + return value >= lowerBound && value <= upperBound && (value & downMask) == downMask && (value & upMask) == (value & defaultMask(getBits())); + } + + public boolean isPositive() { + return lowerBound() >= 0; + } + + public boolean isNegative() { + return upperBound() <= 0; + } + + public boolean isStrictlyPositive() { + return lowerBound() > 0; + } + + public boolean isStrictlyNegative() { + return upperBound() < 0; + } + + public boolean canBePositive() { + return upperBound() > 0; + } + + public boolean canBeNegative() { + return lowerBound() < 0; + } + + @Override + public String toString() { + StringBuilder str = new StringBuilder(); + str.append('i'); + str.append(getBits()); + if (lowerBound == upperBound) { + str.append(" [").append(lowerBound).append(']'); + } else if (lowerBound != defaultMinValue(getBits()) || upperBound != defaultMaxValue(getBits())) { + str.append(" [").append(lowerBound).append(" - ").append(upperBound).append(']'); + } + if (downMask != 0) { + str.append(" \u21ca"); + new Formatter(str).format("%016x", downMask); + } + if (upMask != defaultMask(getBits())) { + str.append(" \u21c8"); + new Formatter(str).format("%016x", upMask); + } + return str.toString(); + } + + private Stamp createStamp(IntegerStamp other, long newUpperBound, long newLowerBound, long newDownMask, long newUpMask) { + assert getBits() == other.getBits(); + if (newLowerBound > newUpperBound || (newDownMask & (~newUpMask)) != 0) { + return illegal(); + } else if (newLowerBound == lowerBound && newUpperBound == upperBound && newDownMask == downMask && newUpMask == upMask) { + return this; + } else if (newLowerBound == other.lowerBound && newUpperBound == other.upperBound && newDownMask == other.downMask && newUpMask == other.upMask) { + return other; + } else { + return new IntegerStamp(getBits(), newLowerBound, newUpperBound, newDownMask, newUpMask); + } + } + + @Override + public Stamp meet(Stamp otherStamp) { + if (otherStamp == this) { + return this; + } + if (!(otherStamp instanceof IntegerStamp)) { + return StampFactory.illegal(Kind.Illegal); + } + IntegerStamp other = (IntegerStamp) otherStamp; + return createStamp(other, Math.max(upperBound, other.upperBound), Math.min(lowerBound, other.lowerBound), downMask & other.downMask, upMask | other.upMask); + } + + @Override + public Stamp join(Stamp otherStamp) { + if (otherStamp == this) { + return this; + } + if (!(otherStamp instanceof IntegerStamp)) { + return StampFactory.illegal(Kind.Illegal); + } + IntegerStamp other = (IntegerStamp) otherStamp; + long newDownMask = downMask | other.downMask; + long newLowerBound = Math.max(lowerBound, other.lowerBound) | newDownMask; + return createStamp(other, Math.min(upperBound, other.upperBound), newLowerBound, newDownMask, upMask & other.upMask); + } + + @Override + public boolean isCompatible(Stamp stamp) { + if (this == stamp) { + return true; + } + if (stamp instanceof IntegerStamp) { + IntegerStamp other = (IntegerStamp) stamp; + return getBits() == other.getBits(); + } + return false; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + super.hashCode(); + result = prime * result + (int) (lowerBound ^ (lowerBound >>> 32)); + result = prime * result + (int) (upperBound ^ (upperBound >>> 32)); + result = prime * result + (int) (downMask ^ (downMask >>> 32)); + result = prime * result + (int) (upMask ^ (upMask >>> 32)); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null || getClass() != obj.getClass() || !super.equals(obj)) { + return false; + } + IntegerStamp other = (IntegerStamp) obj; + if (lowerBound != other.lowerBound || upperBound != other.upperBound || downMask != other.downMask || upMask != other.upMask) { + return false; + } + return true; + } + + public static long defaultMask(int bits) { + assert 0 <= bits && bits <= 64; + if (bits == 64) { + return 0xffffffffffffffffL; + } else { + return (1L << bits) - 1; + } + } + + public static long defaultMinValue(int bits) { + return -1L << (bits - 1); + } + + public static long defaultMaxValue(int bits) { + return defaultMask(bits - 1); + } + + public static long upMaskFor(int bits, long lowerBound, long upperBound) { + long mask = lowerBound | upperBound; + if (mask == 0) { + return 0; + } else { + return ((-1L) >>> Long.numberOfLeadingZeros(mask)) & defaultMask(bits); + } + } + + /** + * Checks if the 2 stamps represent values of the same sign. Returns true if the two stamps are + * both positive of null or if they are both strictly negative + * + * @return true if the two stamps are both positive of null or if they are both strictly + * negative + */ + public static boolean sameSign(IntegerStamp s1, IntegerStamp s2) { + return s1.isPositive() && s2.isPositive() || s1.isStrictlyNegative() && s2.isStrictlyNegative(); + } + + @Override + public Constant asConstant() { + if (lowerBound == upperBound) { + switch (getBits()) { + case 1: + return Constant.forBoolean(lowerBound != 0); + case 8: + return Constant.forByte((byte) lowerBound); + case 16: + return Constant.forShort((short) lowerBound); + case 32: + return Constant.forInt((int) lowerBound); + case 64: + return Constant.forLong(lowerBound); + } + } + return null; + } +} diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/ObjectStamp.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/ObjectStamp.java Tue Apr 22 18:32:08 2014 -0700 @@ -0,0 +1,298 @@ +/* + * Copyright (c) 2012, 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.compiler.common.type; + +import java.lang.reflect.*; +import java.util.*; + +import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.spi.*; + +public class ObjectStamp extends Stamp { + + private final ResolvedJavaType type; + private final boolean exactType; + private final boolean nonNull; + private final boolean alwaysNull; + + public ObjectStamp(ResolvedJavaType type, boolean exactType, boolean nonNull, boolean alwaysNull) { + this.type = type; + this.exactType = exactType; + this.nonNull = nonNull; + this.alwaysNull = alwaysNull; + } + + @Override + public Stamp unrestricted() { + return StampFactory.object(); + } + + @Override + public Stamp illegal() { + return new ObjectStamp(null, true, true, false); + } + + @Override + public boolean isLegal() { + return !exactType || (type != null && (isConcreteType(type))); + } + + @Override + public Kind getStackKind() { + return Kind.Object; + } + + @Override + public PlatformKind getPlatformKind(LIRTypeTool tool) { + return tool.getObjectKind(); + } + + @Override + public ResolvedJavaType javaType(MetaAccessProvider metaAccess) { + if (type != null) { + return type; + } + return metaAccess.lookupJavaType(Object.class); + } + + public boolean nonNull() { + return nonNull; + } + + public boolean alwaysNull() { + return alwaysNull; + } + + public ResolvedJavaType type() { + return type; + } + + public boolean isExactType() { + return exactType; + } + + @Override + public String toString() { + StringBuilder str = new StringBuilder(); + str.append('a'); + str.append(nonNull ? "!" : "").append(exactType ? "#" : "").append(' ').append(type == null ? "-" : type.getName()).append(alwaysNull ? " NULL" : ""); + return str.toString(); + } + + @Override + public Stamp meet(Stamp otherStamp) { + if (this == otherStamp) { + return this; + } + if (!(otherStamp instanceof ObjectStamp)) { + return StampFactory.illegal(Kind.Illegal); + } + ObjectStamp other = (ObjectStamp) otherStamp; + ResolvedJavaType meetType; + boolean meetExactType; + boolean meetNonNull; + boolean meetAlwaysNull; + if (other.alwaysNull) { + meetType = type(); + meetExactType = exactType; + meetNonNull = false; + meetAlwaysNull = alwaysNull; + } else if (alwaysNull) { + meetType = other.type(); + meetExactType = other.exactType; + meetNonNull = false; + meetAlwaysNull = other.alwaysNull; + } else { + meetType = meetTypes(type(), other.type()); + meetExactType = exactType && other.exactType; + if (meetExactType && type != null && other.type != null) { + // meeting two valid exact types may result in a non-exact type + meetExactType = Objects.equals(meetType, type) && Objects.equals(meetType, other.type); + } + meetNonNull = nonNull && other.nonNull; + meetAlwaysNull = false; + } + + if (Objects.equals(meetType, type) && meetExactType == exactType && meetNonNull == nonNull && meetAlwaysNull == alwaysNull) { + return this; + } else if (Objects.equals(meetType, other.type) && meetExactType == other.exactType && meetNonNull == other.nonNull && meetAlwaysNull == other.alwaysNull) { + return other; + } else { + return new ObjectStamp(meetType, meetExactType, meetNonNull, meetAlwaysNull); + } + } + + @Override + public Stamp join(Stamp otherStamp) { + return join0(otherStamp, false); + } + + @Override + public boolean isCompatible(Stamp other) { + if (this == other) { + return true; + } + if (other instanceof ObjectStamp) { + return true; + } + return false; + } + + /** + * Returns the stamp representing the type of this stamp after a cast to the type represented by + * the {@code to} stamp. While this is very similar to a {@link #join} operation, in the case + * where both types are not obviously related, the cast operation will prefer the type of the + * {@code to} stamp. This is necessary as long as ObjectStamps are not able to accurately + * represent intersection types. + * + * For example when joining the {@link RandomAccess} type with the {@link AbstractList} type, + * without intersection types, this would result in the most generic type ({@link Object} ). For + * this reason, in some cases a {@code castTo} operation is preferable in order to keep at least + * the {@link AbstractList} type. + * + * @param to the stamp this stamp should be casted to + * @return This stamp casted to the {@code to} stamp + */ + public Stamp castTo(ObjectStamp to) { + return join0(to, true); + } + + private Stamp join0(Stamp otherStamp, boolean castToOther) { + if (this == otherStamp) { + return this; + } + if (!(otherStamp instanceof ObjectStamp)) { + return StampFactory.illegal(Kind.Illegal); + } + ObjectStamp other = (ObjectStamp) otherStamp; + if (!isLegal()) { + return this; + } else if (!other.isLegal()) { + return other; + } + + ResolvedJavaType joinType; + boolean joinAlwaysNull = alwaysNull || other.alwaysNull; + boolean joinNonNull = nonNull || other.nonNull; + boolean joinExactType = exactType || other.exactType; + if (Objects.equals(type, other.type)) { + joinType = type; + } else if (type == null && other.type == null) { + joinType = null; + } else if (type == null) { + joinType = other.type; + } else if (other.type == null) { + joinType = type; + } else { + // both types are != null and different + if (type.isAssignableFrom(other.type)) { + joinType = other.type; + if (exactType) { + joinAlwaysNull = true; + } + } else if (other.type.isAssignableFrom(type)) { + joinType = type; + if (other.exactType) { + joinAlwaysNull = true; + } + } else { + if (castToOther) { + joinType = other.type; + joinExactType = other.exactType; + } else { + joinType = null; + } + if (joinExactType || (!type.isInterface() && !other.type.isInterface())) { + joinAlwaysNull = true; + } + } + } + if (joinAlwaysNull) { + joinType = null; + joinExactType = false; + } + if (joinExactType && joinType == null) { + return StampFactory.illegal(Kind.Object); + } + if (joinAlwaysNull && joinNonNull) { + return StampFactory.illegal(Kind.Object); + } else if (joinExactType && !isConcreteType(joinType)) { + return StampFactory.illegal(Kind.Object); + } + if (Objects.equals(joinType, type) && joinExactType == exactType && joinNonNull == nonNull && joinAlwaysNull == alwaysNull) { + return this; + } else if (Objects.equals(joinType, other.type) && joinExactType == other.exactType && joinNonNull == other.nonNull && joinAlwaysNull == other.alwaysNull) { + return other; + } else { + return new ObjectStamp(joinType, joinExactType, joinNonNull, joinAlwaysNull); + } + } + + public static boolean isConcreteType(ResolvedJavaType type) { + return !(Modifier.isAbstract(type.getModifiers()) && !type.isArray()); + } + + private static ResolvedJavaType meetTypes(ResolvedJavaType a, ResolvedJavaType b) { + if (Objects.equals(a, b)) { + return a; + } else if (a == null || b == null) { + return null; + } else { + return a.findLeastCommonAncestor(b); + } + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (exactType ? 1231 : 1237); + result = prime * result + (nonNull ? 1231 : 1237); + result = prime * result + (alwaysNull ? 1231 : 1237); + result = prime * result + ((type == null) ? 0 : type.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null || getClass() != obj.getClass()) { + return false; + } + ObjectStamp other = (ObjectStamp) obj; + if (exactType != other.exactType || nonNull != other.nonNull || alwaysNull != other.alwaysNull) { + return false; + } + if (type == null) { + if (other.type != null) { + return false; + } + } else if (!type.equals(other.type)) { + return false; + } + return true; + } + +} diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/PrimitiveStamp.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/PrimitiveStamp.java Tue Apr 22 18:32:08 2014 -0700 @@ -0,0 +1,71 @@ +/* + * 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.compiler.common.type; + +/** + * Describes the possible values of a {@link ValueNode} that produces a primitive value as result. + */ +@SuppressWarnings("javadoc") +public abstract class PrimitiveStamp extends Stamp { + + private final int bits; + + protected PrimitiveStamp(int bits) { + this.bits = bits; + } + + /** + * The width in bits of the value described by this stamp. + */ + public int getBits() { + return bits; + } + + public static int getBits(Stamp stamp) { + if (stamp instanceof PrimitiveStamp) { + return ((PrimitiveStamp) stamp).getBits(); + } else { + return 0; + } + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + bits; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj instanceof PrimitiveStamp) { + PrimitiveStamp other = (PrimitiveStamp) obj; + return bits == other.bits; + } + return false; + } +} diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/StampFactory.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/StampFactory.java Tue Apr 22 18:32:08 2014 -0700 @@ -0,0 +1,254 @@ +/* + * 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.common.type; + +import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.*; + +public class StampFactory { + + // JaCoCo Exclude + + private static final Stamp[] stampCache = new Stamp[Kind.values().length]; + private static final Stamp[] illegalStampCache = new Stamp[Kind.values().length]; + private static final Stamp objectStamp = new ObjectStamp(null, false, false, false); + private static final Stamp objectNonNullStamp = new ObjectStamp(null, false, true, false); + private static final Stamp objectAlwaysNullStamp = new ObjectStamp(null, false, false, true); + private static final Stamp nodeIntrinsicStamp = new ObjectStamp(null, false, false, false); + private static final Stamp positiveInt = forInteger(Kind.Int, 0, Integer.MAX_VALUE, 0, Integer.MAX_VALUE); + + private static void setCache(Kind kind, Stamp stamp) { + stampCache[kind.ordinal()] = stamp; + } + + private static void setIntCache(Kind kind) { + int bits = kind.getStackKind().getBitCount(); + long mask; + if (kind.isUnsigned()) { + mask = IntegerStamp.defaultMask(kind.getBitCount()); + } else { + mask = IntegerStamp.defaultMask(bits); + } + setCache(kind, new IntegerStamp(bits, kind.getMinValue(), kind.getMaxValue(), 0, mask)); + } + + private static void setFloatCache(Kind kind) { + setCache(kind, new FloatStamp(kind.getBitCount())); + } + + static { + setIntCache(Kind.Boolean); + setIntCache(Kind.Byte); + setIntCache(Kind.Short); + setIntCache(Kind.Char); + setIntCache(Kind.Int); + setIntCache(Kind.Long); + + setFloatCache(Kind.Float); + setFloatCache(Kind.Double); + + setCache(Kind.Object, objectStamp); + setCache(Kind.Void, VoidStamp.getInstance()); + + for (Kind k : Kind.values()) { + if (stampCache[k.ordinal()] != null) { + illegalStampCache[k.ordinal()] = stampCache[k.ordinal()].illegal(); + } else { + illegalStampCache[k.ordinal()] = IllegalStamp.getInstance(); + } + } + } + + /** + * Return a stamp for a Java kind, as it would be represented on the bytecode stack. + */ + public static Stamp forKind(Kind kind) { + assert stampCache[kind.ordinal()] != null : "unexpected forKind(" + kind + ")"; + return stampCache[kind.ordinal()]; + } + + /** + * Return the stamp for the {@code void} type. This will return a singleton instance than can be + * compared using {@code ==}. + */ + public static Stamp forVoid() { + return VoidStamp.getInstance(); + } + + /** + * A stamp used only in the graph of intrinsics, e.g., snippets. It is then replaced by an + * actual stamp when the intrinsic is used, i.e., when the snippet template is instantiated. + */ + public static Stamp forNodeIntrinsic() { + return nodeIntrinsicStamp; + } + + public static Stamp intValue() { + return forKind(Kind.Int); + } + + public static Stamp positiveInt() { + return positiveInt; + } + + public static Stamp illegal() { + return illegal(Kind.Illegal); + } + + public static Stamp illegal(Kind kind) { + return illegalStampCache[kind.ordinal()]; + } + + public static IntegerStamp forInteger(Kind kind, long lowerBound, long upperBound, long downMask, long upMask) { + return new IntegerStamp(kind.getBitCount(), lowerBound, upperBound, downMask, upMask); + } + + public static IntegerStamp forInteger(Kind kind, long lowerBound, long upperBound) { + return forInteger(kind.getBitCount(), lowerBound, upperBound); + } + + public static IntegerStamp forInteger(int bits) { + return new IntegerStamp(bits, IntegerStamp.defaultMinValue(bits), IntegerStamp.defaultMaxValue(bits), 0, IntegerStamp.defaultMask(bits)); + } + + public static IntegerStamp forInteger(int bits, long lowerBound, long upperBound) { + long defaultMask = IntegerStamp.defaultMask(bits); + if (lowerBound == upperBound) { + return new IntegerStamp(bits, lowerBound, lowerBound, lowerBound & defaultMask, lowerBound & defaultMask); + } + final long downMask; + final long upMask; + if (lowerBound >= 0) { + int upperBoundLeadingZeros = Long.numberOfLeadingZeros(upperBound); + long differentBits = lowerBound ^ upperBound; + int sameBitCount = Long.numberOfLeadingZeros(differentBits << upperBoundLeadingZeros); + + upMask = upperBound | -1L >>> (upperBoundLeadingZeros + sameBitCount); + downMask = upperBound & ~(-1L >>> (upperBoundLeadingZeros + sameBitCount)); + } else { + if (upperBound >= 0) { + upMask = defaultMask; + downMask = 0; + } else { + int lowerBoundLeadingOnes = Long.numberOfLeadingZeros(~lowerBound); + long differentBits = lowerBound ^ upperBound; + int sameBitCount = Long.numberOfLeadingZeros(differentBits << lowerBoundLeadingOnes); + + upMask = lowerBound | -1L >>> (lowerBoundLeadingOnes + sameBitCount) | ~(-1L >>> lowerBoundLeadingOnes); + downMask = lowerBound & ~(-1L >>> (lowerBoundLeadingOnes + sameBitCount)) | ~(-1L >>> lowerBoundLeadingOnes); + } + } + return new IntegerStamp(bits, lowerBound, upperBound, downMask & defaultMask, upMask & defaultMask); + } + + public static FloatStamp forFloat(Kind kind, double lowerBound, double upperBound, boolean nonNaN) { + assert kind.isNumericFloat(); + return new FloatStamp(kind.getBitCount(), lowerBound, upperBound, nonNaN); + } + + public static Stamp forConstant(Constant value) { + Kind kind = value.getKind(); + switch (kind) { + case Boolean: + case Byte: + case Char: + case Short: + case Int: + case Long: + long mask = value.asLong() & IntegerStamp.defaultMask(kind.getBitCount()); + return forInteger(kind.getStackKind(), value.asLong(), value.asLong(), mask, mask); + case Float: + return forFloat(kind, value.asFloat(), value.asFloat(), !Float.isNaN(value.asFloat())); + case Double: + return forFloat(kind, value.asDouble(), value.asDouble(), !Double.isNaN(value.asDouble())); + case Illegal: + return illegal(Kind.Illegal); + case Object: + if (value.isNull()) { + return alwaysNull(); + } else { + return objectNonNull(); + } + default: + throw new GraalInternalError("unexpected kind: %s", kind); + } + } + + public static Stamp forConstant(Constant value, MetaAccessProvider metaAccess) { + assert value.getKind() == Kind.Object; + if (value.getKind() == Kind.Object) { + ResolvedJavaType type = value.isNull() ? null : metaAccess.lookupJavaType(value); + return new ObjectStamp(type, value.isNonNull(), value.isNonNull(), value.isNull()); + } else { + throw new GraalInternalError(Kind.Object + " expected, actual kind: %s", value.getKind()); + } + } + + public static Stamp object() { + return objectStamp; + } + + public static Stamp objectNonNull() { + return objectNonNullStamp; + } + + public static Stamp alwaysNull() { + return objectAlwaysNullStamp; + } + + public static Stamp declared(ResolvedJavaType type) { + return declared(type, false); + } + + public static Stamp declaredNonNull(ResolvedJavaType type) { + return declared(type, true); + } + + public static Stamp declared(ResolvedJavaType type, boolean nonNull) { + return object(type, false, nonNull); + } + + public static Stamp object(ResolvedJavaType type, boolean exactType, boolean nonNull) { + assert type != null; + assert type.getKind() == Kind.Object; + ResolvedJavaType exact = type.asExactType(); + if (exact != null) { + assert !exactType || type.equals(exact); + return new ObjectStamp(exact, true, nonNull, false); + } else { + return new ObjectStamp(type, exactType, nonNull, false); + } + } + + public static Stamp exactNonNull(ResolvedJavaType type) { + if (ObjectStamp.isConcreteType(type)) { + return new ObjectStamp(type, true, true, false); + } else { + return illegal(Kind.Object); + } + } + + public static Stamp exact(ResolvedJavaType type) { + return new ObjectStamp(type, true, false, false); + } +} diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/StampProvider.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/StampProvider.java Tue Apr 22 18:32:08 2014 -0700 @@ -0,0 +1,28 @@ +/* + * 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.common.type; + +public interface StampProvider { + + Stamp stamp(); +} diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/VoidStamp.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/VoidStamp.java Tue Apr 22 18:32:08 2014 -0700 @@ -0,0 +1,110 @@ +/* + * 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.compiler.common.type; + +import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.*; +import com.oracle.graal.compiler.common.spi.*; + +/** + * Singleton stamp representing the value of type {@code void}. + */ +public final class VoidStamp extends Stamp { + + private VoidStamp() { + } + + @Override + public Stamp unrestricted() { + return this; + } + + @Override + public Kind getStackKind() { + return Kind.Void; + } + + @Override + public PlatformKind getPlatformKind(LIRTypeTool tool) { + throw GraalInternalError.shouldNotReachHere("void stamp has no value"); + } + + @Override + public ResolvedJavaType javaType(MetaAccessProvider metaAccess) { + return metaAccess.lookupJavaType(Void.TYPE); + } + + @Override + public String toString() { + return "void"; + } + + @Override + public boolean alwaysDistinct(Stamp other) { + return this != other; + } + + @Override + public Stamp meet(Stamp other) { + if (other instanceof IllegalStamp) { + return other.join(this); + } + if (this == other) { + return this; + } + return StampFactory.illegal(Kind.Illegal); + } + + @Override + public Stamp join(Stamp other) { + if (other instanceof IllegalStamp) { + return other.join(this); + } + if (this == other) { + return this; + } + return StampFactory.illegal(Kind.Illegal); + } + + @Override + public boolean isCompatible(Stamp stamp) { + return this == stamp; + } + + @Override + public Stamp illegal() { + // there is no illegal void stamp + return this; + } + + @Override + public boolean isLegal() { + return true; + } + + private static VoidStamp instance = new VoidStamp(); + + static VoidStamp getInstance() { + return instance; + } +} diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.hsail.test.infra/src/com/oracle/graal/compiler/hsail/test/infra/GraalKernelTester.java --- a/graal/com.oracle.graal.compiler.hsail.test.infra/src/com/oracle/graal/compiler/hsail/test/infra/GraalKernelTester.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler.hsail.test.infra/src/com/oracle/graal/compiler/hsail/test/infra/GraalKernelTester.java Tue Apr 22 18:32:08 2014 -0700 @@ -27,8 +27,8 @@ * This class extends KernelTester and provides a base class * for which the HSAIL code comes from the Graal compiler. */ +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; -import static com.oracle.graal.phases.GraalOptions.*; import static org.junit.Assume.*; import java.io.*; @@ -47,7 +47,6 @@ import com.oracle.graal.hsail.*; import com.oracle.graal.options.*; import com.oracle.graal.options.OptionValue.OverrideScope; -import com.oracle.graal.phases.*; public abstract class GraalKernelTester extends KernelTester { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/EscapingNewFloatStringTest.java --- a/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/EscapingNewFloatStringTest.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/EscapingNewFloatStringTest.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,6 +22,8 @@ */ package com.oracle.graal.compiler.hsail.test; +import org.junit.*; + /** * Tests creating a new String from a float. */ @@ -35,8 +37,8 @@ myOutArray[gid] = Float.toString(gid * 2.22f); } - // problems runs out of memory space while inlining - // @Test + @Ignore("problems runs out of memory space while inlining") + @Test public void test() { testGeneratedHsail(); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ObjectArrayInstanceDerivedTest.java --- a/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ObjectArrayInstanceDerivedTest.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ObjectArrayInstanceDerivedTest.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,6 +23,8 @@ package com.oracle.graal.compiler.hsail.test.lambda; +import org.junit.*; + import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; /** @@ -69,12 +71,14 @@ }); } - // @Test + @Ignore + @Test public void test() { testGeneratedHsail(); } - // @Test + @Ignore + @Test public void testUsingLambdaMethod() { testGeneratedHsailUsingLambdaMethod(); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ObjectArrayInstanceTest.java --- a/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ObjectArrayInstanceTest.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler.hsail.test/src/com/oracle/graal/compiler/hsail/test/lambda/ObjectArrayInstanceTest.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,7 +24,8 @@ package com.oracle.graal.compiler.hsail.test.lambda; import com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester; -import org.junit.Test; + +import org.junit.*; /** * Tests calling a method on an object when there are no derived types of that object. @@ -53,11 +54,13 @@ }); } + @Ignore @Test public void test() { testGeneratedHsail(); } + @Ignore @Test public void testUsingLambdaMethod() { testGeneratedHsailUsingLambdaMethod(); diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.hsail/src/com/oracle/graal/compiler/hsail/HSAILNodeLIRBuilder.java --- a/graal/com.oracle.graal.compiler.hsail/src/com/oracle/graal/compiler/hsail/HSAILNodeLIRBuilder.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler.hsail/src/com/oracle/graal/compiler/hsail/HSAILNodeLIRBuilder.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,11 +25,11 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.compiler.gen.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.hsail.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.type.*; /** * This class implements the HSAIL specific portion of the LIR generator. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java --- a/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java Tue Apr 22 18:32:08 2014 -0700 @@ -34,6 +34,7 @@ import com.oracle.graal.asm.*; import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.calc.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.compiler.gen.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.StandardOp.JumpOp; @@ -61,7 +62,6 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.FloatConvertNode.FloatConvert; import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.phases.util.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java --- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Tue Apr 22 18:32:08 2014 -0700 @@ -35,6 +35,7 @@ import com.oracle.graal.asm.sparc.*; import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.calc.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.compiler.gen.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.StandardOp.JumpOp; @@ -60,7 +61,6 @@ import com.oracle.graal.lir.sparc.SPARCMove.StackLoadAddressOp; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.FloatConvertNode.FloatConvert; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.phases.util.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CheckGraalInvariants.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CheckGraalInvariants.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CheckGraalInvariants.java Tue Apr 22 18:32:08 2014 -0700 @@ -43,15 +43,16 @@ import com.oracle.graal.phases.util.*; import com.oracle.graal.phases.verify.*; import com.oracle.graal.runtime.*; +import com.oracle.graal.test.*; /** * Checks that all classes in graal.jar (which must be on the class path) comply with global * invariants such as using {@link Object#equals(Object)} to compare certain types instead of * identity comparisons. */ -public class CheckGraalInvariants { +public class CheckGraalInvariants extends GraalTest { - @Test + @LongTest public void test() { RuntimeProvider rt = Graal.getRequiredCapability(RuntimeProvider.class); Providers providers = rt.getHostBackend().getProviders(); diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,8 +24,8 @@ import static com.oracle.graal.api.code.CodeUtil.*; import static com.oracle.graal.compiler.GraalCompiler.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.nodes.ConstantNode.*; -import static com.oracle.graal.phases.GraalOptions.*; import java.io.*; import java.lang.reflect.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.compiler.test; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static org.junit.Assert.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/PushNodesThroughPiTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/PushNodesThroughPiTest.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/PushNodesThroughPiTest.java Tue Apr 22 18:32:08 2014 -0700 @@ -26,6 +26,7 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.debug.*; import com.oracle.graal.debug.Debug.Scope; import com.oracle.graal.nodes.*; @@ -71,7 +72,7 @@ for (ReadNode rn : graph.getNodes().filter(ReadNode.class)) { if (rn.location() instanceof ConstantLocationNode && rn.object().stamp() instanceof ObjectStamp) { long disp = ((ConstantLocationNode) rn.location()).getDisplacement(); - ResolvedJavaType receiverType = ObjectStamp.typeOrNull(rn.object()); + ResolvedJavaType receiverType = StampTool.typeOrNull(rn.object()); ResolvedJavaField field = receiverType.findInstanceFieldWithOffset(disp); assert field != null : "Node " + rn + " tries to access a field which doesn't exists for this type"; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/StampCanonicalizerTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/StampCanonicalizerTest.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/StampCanonicalizerTest.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,8 +25,8 @@ import org.junit.*; import com.oracle.graal.api.code.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.phases.common.*; import com.oracle.graal.phases.tiers.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/backend/AllocatorTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/backend/AllocatorTest.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/backend/AllocatorTest.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,7 +23,7 @@ package com.oracle.graal.compiler.test.backend; import static com.oracle.graal.api.code.CodeUtil.*; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,10 +25,10 @@ import org.junit.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.loop.phases.*; import com.oracle.graal.nodes.calc.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.virtual.*; import com.oracle.graal.phases.common.*; import com.oracle.graal.phases.schedule.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,7 +24,7 @@ import static com.oracle.graal.compiler.GraalCompiler.Options.*; import static com.oracle.graal.compiler.MethodFilter.*; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/DebugInfoBuilder.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/DebugInfoBuilder.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/DebugInfoBuilder.java Tue Apr 22 18:32:08 2014 -0700 @@ -129,7 +129,6 @@ if (state.outerFrameState() != null) { caller = computeFrameForState(state.outerFrameState()); } - assert state.bci >= FrameState.BEFORE_BCI : "bci == " + state.bci; return new BytecodeFrame(caller, state.method(), state.bci, state.rethrowException(), state.duringCall(), values, numLocals, numStack, numLocks); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,9 +24,9 @@ import static com.oracle.graal.api.code.ValueUtil.*; import static com.oracle.graal.api.meta.Value.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.lir.LIR.*; import static com.oracle.graal.lir.LIRValueUtil.*; -import static com.oracle.graal.phases.GraalOptions.*; import java.util.*; @@ -46,7 +46,6 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.options.*; -import com.oracle.graal.phases.util.*; /** * This class traverses the HIR instructions and generates LIR instructions from them. @@ -62,7 +61,7 @@ // @formatter:on } - private final Providers providers; + private final LIRProviders providers; private final CallingConvention cc; private DebugInfoBuilder debugInfoBuilder; @@ -163,7 +162,7 @@ */ public abstract boolean canStoreConstant(Constant c, boolean isCompressed); - public LIRGenerator(Providers providers, CallingConvention cc, LIRGenerationResult res) { + public LIRGenerator(LIRProviders providers, CallingConvention cc, LIRGenerationResult res) { this.res = res; this.providers = providers; this.cc = cc; @@ -184,7 +183,7 @@ return getCodeCache().getTarget(); } - public Providers getProviders() { + public LIRProviders getProviders() { return providers; } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java Tue Apr 22 18:32:08 2014 -0700 @@ -34,6 +34,7 @@ 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.type.*; import com.oracle.graal.compiler.gen.LIRGenerator.LoadConstant; import com.oracle.graal.compiler.target.*; import com.oracle.graal.debug.*; @@ -46,9 +47,7 @@ import com.oracle.graal.nodes.cfg.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.virtual.*; -import com.oracle.graal.phases.*; /** * This class traverses the HIR instructions and generates LIR instructions from them. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/HighTier.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/HighTier.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/HighTier.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,8 +22,8 @@ */ package com.oracle.graal.compiler.phases; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.compiler.phases.HighTier.Options.*; -import static com.oracle.graal.phases.GraalOptions.*; import com.oracle.graal.loop.phases.*; import com.oracle.graal.nodes.spi.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LowTier.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LowTier.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LowTier.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.compiler.phases; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.options.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/MidTier.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/MidTier.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/MidTier.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.compiler.phases; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import com.oracle.graal.loop.phases.*; import com.oracle.graal.nodes.spi.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Tue Apr 22 18:32:08 2014 -0700 @@ -227,10 +227,35 @@ } } + class NodeUsageWithModCountIterator extends NodeUsageIterator { + + private final int expectedModCount = usageModCount(); + + @Override + public boolean hasNext() { + if (expectedModCount != usageModCount()) { + throw new ConcurrentModificationException(); + } + return super.hasNext(); + } + + @Override + public Node next() { + if (expectedModCount != usageModCount()) { + throw new ConcurrentModificationException(); + } + return super.next(); + } + } + class NodeUsageIterable implements NodeIterable { public NodeUsageIterator iterator() { - return new NodeUsageIterator(); + if (MODIFICATION_COUNTS_ENABLED) { + return new NodeUsageWithModCountIterator(); + } else { + return new NodeUsageIterator(); + } } @Override diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,7 +25,7 @@ import static com.oracle.graal.amd64.AMD64.*; import static com.oracle.graal.api.code.CallingConvention.Type.*; import static com.oracle.graal.api.code.ValueUtil.*; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static java.lang.reflect.Modifier.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotNodeLIRBuilder.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotNodeLIRBuilder.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotNodeLIRBuilder.java Tue Apr 22 18:32:08 2014 -0700 @@ -160,7 +160,7 @@ @Override public void visitInfopointNode(InfopointNode i) { - if (i.getState() != null && i.getState().bci == FrameState.AFTER_BCI) { + if (i.getState() != null && i.getState().bci == BytecodeFrame.AFTER_BCI) { Debug.log("Ignoring InfopointNode for AFTER_BCI"); } else { super.visitInfopointNode(i); diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,7 +23,7 @@ package com.oracle.graal.hotspot.amd64; import static com.oracle.graal.amd64.AMD64.*; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import java.util.*; @@ -34,7 +34,6 @@ import com.oracle.graal.compiler.common.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.nodes.type.*; -import com.oracle.graal.phases.*; public class AMD64HotSpotRegisterConfig implements RegisterConfig { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotSafepointOp.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotSafepointOp.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotSafepointOp.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,7 +24,7 @@ import static com.oracle.graal.amd64.AMD64.*; import static com.oracle.graal.asm.NumUtil.*; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64RawNativeCallNode.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64RawNativeCallNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64RawNativeCallNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -26,11 +26,11 @@ import com.oracle.graal.api.code.CallingConvention.Type; 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.type.*; public class AMD64RawNativeCallNode extends FixedWithNextNode implements LIRGenLowerable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java --- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java Tue Apr 22 18:32:08 2014 -0700 @@ -48,6 +48,7 @@ import com.oracle.graal.asm.hsail.*; 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; @@ -68,7 +69,6 @@ import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.options.*; import com.oracle.graal.phases.*; import com.oracle.graal.phases.tiers.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/replacements/HSAILNewObjectSnippets.java --- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/replacements/HSAILNewObjectSnippets.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/replacements/HSAILNewObjectSnippets.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,15 +23,16 @@ package com.oracle.graal.hotspot.hsail.replacements; import static com.oracle.graal.api.code.UnsignedMath.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.hotspot.hsail.replacements.HSAILHotSpotReplacementsUtil.*; import static com.oracle.graal.hotspot.hsail.replacements.HSAILNewObjectSnippets.Options.*; import static com.oracle.graal.nodes.PiArrayNode.*; import static com.oracle.graal.nodes.extended.BranchProbabilityNode.*; -import static com.oracle.graal.phases.GraalOptions.*; import static com.oracle.graal.replacements.SnippetTemplate.*; import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.debug.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.meta.*; @@ -40,7 +41,6 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.options.*; import com.oracle.graal.replacements.*; import com.oracle.graal.replacements.Snippet.ConstantParameter; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXWrapperBuilder.java --- a/graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXWrapperBuilder.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXWrapperBuilder.java Tue Apr 22 18:32:08 2014 -0700 @@ -48,7 +48,6 @@ import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.replacements.*; import com.oracle.graal.replacements.nodes.*; import com.oracle.graal.word.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,7 +24,7 @@ import static com.oracle.graal.api.code.CallingConvention.Type.*; import static com.oracle.graal.api.code.ValueUtil.*; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.sparc.SPARC.*; import static java.lang.reflect.Modifier.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterConfig.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterConfig.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterConfig.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.sparc; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.sparc.SPARC.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java --- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,8 +24,8 @@ import static com.oracle.graal.api.code.CodeUtil.*; import static com.oracle.graal.compiler.GraalCompiler.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.nodes.ConstantNode.*; -import static com.oracle.graal.phases.GraalOptions.*; import org.junit.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/CompileTheWorldTest.java --- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/CompileTheWorldTest.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/CompileTheWorldTest.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.test; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import org.junit.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,9 +25,9 @@ import static com.oracle.graal.api.code.CallingConvention.Type.*; import static com.oracle.graal.api.code.CodeUtil.*; import static com.oracle.graal.compiler.GraalCompiler.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.hotspot.bridge.VMToCompilerImpl.*; import static com.oracle.graal.nodes.StructuredGraph.*; -import static com.oracle.graal.phases.GraalOptions.*; import static com.oracle.graal.phases.common.InliningUtil.*; import java.io.*; @@ -42,6 +42,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.baseline.*; import com.oracle.graal.compiler.*; +import com.oracle.graal.compiler.common.*; import com.oracle.graal.debug.*; import com.oracle.graal.debug.Debug.Scope; import com.oracle.graal.debug.internal.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorld.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorld.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorld.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; import static com.oracle.graal.nodes.StructuredGraph.*; -import static com.oracle.graal.phases.GraalOptions.*; import java.io.*; import java.lang.reflect.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotDebugInfoBuilder.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotDebugInfoBuilder.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotDebugInfoBuilder.java Tue Apr 22 18:32:08 2014 -0700 @@ -64,4 +64,10 @@ protected LIRFrameState newLIRFrameState(LabelRef exceptionEdge, BytecodeFrame frame, VirtualObject[] virtualObjectsArray) { return new HotSpotLIRFrameState(frame, virtualObjectsArray, exceptionEdge); } + + @Override + protected BytecodeFrame computeFrameForState(FrameState state) { + assert state.bci >= 0 || state.bci == BytecodeFrame.BEFORE_BCI; + return super.computeFrameForState(state); + } } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.graph.UnsafeAccess.*; import static com.oracle.graal.hotspot.HotSpotGraalRuntime.Options.*; -import static com.oracle.graal.phases.GraalOptions.*; import java.lang.reflect.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotHostBackend.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotHostBackend.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotHostBackend.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotReplacementsImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotReplacementsImpl.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotReplacementsImpl.java Tue Apr 22 18:32:08 2014 -0700 @@ -27,10 +27,10 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.api.replacements.*; +import com.oracle.graal.compiler.common.*; import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.hotspot.replacements.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.phases.*; import com.oracle.graal.phases.util.*; import com.oracle.graal.replacements.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/debug/BenchmarkCounters.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/debug/BenchmarkCounters.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/debug/BenchmarkCounters.java Tue Apr 22 18:32:08 2014 -0700 @@ -31,6 +31,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.bridge.*; import com.oracle.graal.hotspot.meta.*; @@ -40,7 +41,6 @@ import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.debug.*; import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.options.*; import com.oracle.graal.replacements.nodes.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstantPool.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstantPool.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstantPool.java Tue Apr 22 18:32:08 2014 -0700 @@ -529,6 +529,9 @@ } break; case InvokeDynamic: + if (!isInvokedynamicIndex(cpi)) { + throw new IllegalArgumentException("InvokeDynamic entries must be accessed"); + } runtime().getCompilerToVM().resolveInvokeDynamic(metaspaceConstantPool, cpi); break; default: diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotLoweringProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotLoweringProvider.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotLoweringProvider.java Tue Apr 22 18:32:08 2014 -0700 @@ -26,12 +26,12 @@ import static com.oracle.graal.api.meta.DeoptimizationAction.*; import static com.oracle.graal.api.meta.DeoptimizationReason.*; import static com.oracle.graal.api.meta.LocationIdentity.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; import static com.oracle.graal.hotspot.meta.HotSpotForeignCallsProviderImpl.*; import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.*; import static com.oracle.graal.hotspot.replacements.NewObjectSnippets.*; import static com.oracle.graal.nodes.java.ArrayLengthNode.*; -import static com.oracle.graal.phases.GraalOptions.*; import java.util.*; @@ -223,7 +223,7 @@ NodeInputList parameters = callTarget.arguments(); ValueNode receiver = parameters.size() <= 0 ? null : parameters.get(0); GuardingNode receiverNullCheck = null; - if (!callTarget.isStatic() && receiver.stamp() instanceof ObjectStamp && !ObjectStamp.isObjectNonNull(receiver)) { + if (!callTarget.isStatic() && receiver.stamp() instanceof ObjectStamp && !StampTool.isObjectNonNull(receiver)) { receiverNullCheck = createNullCheck(receiver, invoke.asNode(), tool); invoke.setGuard(receiverNullCheck); } @@ -429,10 +429,10 @@ CheckCastNode checkcastNode = null; CheckCastDynamicNode checkcastDynamicNode = null; - if (elementKind == Kind.Object && !ObjectStamp.isObjectAlwaysNull(value)) { + if (elementKind == Kind.Object && !StampTool.isObjectAlwaysNull(value)) { // Store check! - ResolvedJavaType arrayType = ObjectStamp.typeOrNull(array); - if (arrayType != null && ObjectStamp.isExactType(array)) { + ResolvedJavaType arrayType = StampTool.typeOrNull(array); + if (arrayType != null && StampTool.isExactType(array)) { ResolvedJavaType elementType = arrayType.getComponentType(); if (!MetaUtil.isJavaLangObject(elementType)) { checkcastNode = graph.add(new CheckCastNode(elementType, value, null, true)); @@ -807,8 +807,8 @@ private static boolean addReadBarrier(UnsafeLoadNode load) { if (useG1GC() && load.graph().getGuardsStage() == StructuredGraph.GuardsStage.FIXED_DEOPTS && load.object().getKind() == Kind.Object && load.accessKind() == Kind.Object && - !ObjectStamp.isObjectAlwaysNull(load.object())) { - ResolvedJavaType type = ObjectStamp.typeOrNull(load.object()); + !StampTool.isObjectAlwaysNull(load.object())) { + ResolvedJavaType type = StampTool.typeOrNull(load.object()); if (type != null && !type.isArray()) { return true; } @@ -886,7 +886,7 @@ private static BarrierType getUnsafeStoreBarrierType(UnsafeStoreNode store) { if (store.value().getKind() == Kind.Object) { - ResolvedJavaType type = ObjectStamp.typeOrNull(store.object()); + ResolvedJavaType type = StampTool.typeOrNull(store.object()); if (type != null && !type.isArray()) { return BarrierType.IMPRECISE; } else { @@ -898,7 +898,7 @@ private static BarrierType getCompareAndSwapBarrierType(CompareAndSwapNode cas) { if (cas.expected().getKind() == Kind.Object) { - ResolvedJavaType type = ObjectStamp.typeOrNull(cas.object()); + ResolvedJavaType type = StampTool.typeOrNull(cas.object()); if (type != null && !type.isArray()) { return BarrierType.IMPRECISE; } else { @@ -910,7 +910,7 @@ private static BarrierType getAtomicReadAndWriteBarrierType(AtomicReadAndWriteNode n) { if (n.newValue().getKind() == Kind.Object) { - ResolvedJavaType type = ObjectStamp.typeOrNull(n.object()); + ResolvedJavaType type = StampTool.typeOrNull(n.object()); if (type != null && !type.isArray()) { return BarrierType.IMPRECISE; } else { @@ -1003,7 +1003,7 @@ } private static GuardingNode createNullCheck(ValueNode object, FixedNode before, LoweringTool tool) { - if (ObjectStamp.isObjectNonNull(object)) { + if (StampTool.isObjectNonNull(object)) { return null; } return tool.createGuard(before, before.graph().unique(new IsNullNode(object)), DeoptimizationReason.NullCheckException, DeoptimizationAction.InvalidateReprofile, true); diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaField.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaField.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaField.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,9 +23,9 @@ package com.oracle.graal.hotspot.meta; import static com.oracle.graal.api.meta.MetaUtil.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; import static com.oracle.graal.hotspot.meta.HotSpotResolvedObjectType.*; -import static com.oracle.graal.phases.GraalOptions.*; import static java.lang.reflect.Modifier.*; import java.lang.annotation.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,12 +22,13 @@ */ package com.oracle.graal.hotspot.meta; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.graph.UnsafeAccess.*; import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; -import static com.oracle.graal.phases.GraalOptions.*; import java.lang.annotation.*; import java.lang.reflect.*; +import java.util.*; import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; @@ -55,7 +56,6 @@ private final HotSpotSignature signature; private HotSpotMethodData methodData; private byte[] code; - private SpeculationLog speculationLog; /** * Gets the holder of a HotSpot metaspace method native object. @@ -487,6 +487,10 @@ return ((getModifiers() & mask) == Modifier.PUBLIC) && getDeclaringClass().isInterface(); } + public boolean isSynchronized() { + return Modifier.isSynchronized(getModifiers()); + } + @Override public Type[] getGenericParameterTypes() { if (isConstructor()) { @@ -623,11 +627,33 @@ return result; } + /** + * The {@link SpeculationLog} for methods compiled by Graal hang off this per-declaring-type + * {@link ClassValue}. The raw Method* value is safe to use as a key in the map as a) it is + * never moves and b) we never read from it. + *

+ * One implication is that we will preserve {@link SpeculationLog}s for methods that have been + * redefined via class redefinition. It's tempting to periodically flush such logs but we cannot + * read the JVM_ACC_IS_OBSOLETE bit (or anything else) via the raw pointer as obsoleted methods + * are subject to clean up and deletion (see InstanceKlass::purge_previous_versions_internal). + */ + private static final ClassValue> SpeculationLogs = new ClassValue>() { + @Override + protected Map computeValue(java.lang.Class type) { + return new HashMap<>(4); + } + }; + public SpeculationLog getSpeculationLog() { - if (speculationLog == null) { - speculationLog = new HotSpotSpeculationLog(); + Map map = SpeculationLogs.get(holder.mirror()); + synchronized (map) { + SpeculationLog log = map.get(this.metaspaceMethod); + if (log == null) { + log = new HotSpotSpeculationLog(); + map.put(metaspaceMethod, log); + } + return log; } - return speculationLog; } public int intrinsicId() { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSuitesProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSuitesProvider.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSuitesProvider.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.meta; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.phases.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nfi/NativeCallStubGraphBuilder.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nfi/NativeCallStubGraphBuilder.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nfi/NativeCallStubGraphBuilder.java Tue Apr 22 18:32:08 2014 -0700 @@ -33,7 +33,6 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.virtual.*; import com.oracle.graal.word.phases.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/AllocaNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/AllocaNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/AllocaNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -26,12 +26,12 @@ 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.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Reserves a block of memory in the stack frame of a method. The block is reserved in the frame for diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -109,7 +109,7 @@ HotSpotLIRGenerator hsGen = (HotSpotLIRGenerator) gen.getLIRGeneratorTool(); boolean nonNull; if (input.stamp() instanceof ObjectStamp) { - nonNull = ObjectStamp.isObjectNonNull(input.stamp()); + nonNull = StampTool.isObjectNonNull(input.stamp()); } else { // metaspace pointers are never null nonNull = true; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CurrentJavaThreadNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CurrentJavaThreadNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CurrentJavaThreadNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -27,11 +27,11 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.word.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizeCallerNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizeCallerNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizeCallerNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,11 +23,11 @@ package com.oracle.graal.hotspot.nodes; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Removes the current frame and tail calls the uncommon trap routine. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EndLockScopeNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EndLockScopeNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EndLockScopeNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,11 +23,11 @@ package com.oracle.graal.hotspot.nodes; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Intrinsic for closing a {@linkplain BeginLockScopeNode scope} binding a stack-based lock with an diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EnterUnpackFramesStackFrameNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EnterUnpackFramesStackFrameNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EnterUnpackFramesStackFrameNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,11 +23,11 @@ package com.oracle.graal.hotspot.nodes; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.stubs.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.word.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/GetObjectAddressNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/GetObjectAddressNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/GetObjectAddressNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,9 +23,9 @@ package com.oracle.graal.hotspot.nodes; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Intrinsification for getting the address of an object. The code path(s) between a call to diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/JumpToExceptionHandlerInCallerNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/JumpToExceptionHandlerInCallerNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/JumpToExceptionHandlerInCallerNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,10 +22,10 @@ */ package com.oracle.graal.hotspot.nodes; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.word.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveCurrentStackFrameNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveCurrentStackFrameNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveCurrentStackFrameNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,10 +22,10 @@ */ package com.oracle.graal.hotspot.nodes; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Emits code to leave (pop) the current low-level stack frame. This operation also removes the diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveDeoptimizedStackFrameNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveDeoptimizedStackFrameNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveDeoptimizedStackFrameNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,11 +23,11 @@ package com.oracle.graal.hotspot.nodes; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.stubs.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.word.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveUnpackFramesStackFrameNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveUnpackFramesStackFrameNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveUnpackFramesStackFrameNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,11 +22,11 @@ */ package com.oracle.graal.hotspot.nodes; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.stubs.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Emits code to leave a low-level stack frame specifically to call out to the C++ method diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewArrayStubCall.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewArrayStubCall.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewArrayStubCall.java Tue Apr 22 18:32:08 2014 -0700 @@ -31,7 +31,6 @@ import com.oracle.graal.hotspot.stubs.*; import com.oracle.graal.lir.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.word.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.java Tue Apr 22 18:32:08 2014 -0700 @@ -29,7 +29,6 @@ import com.oracle.graal.hotspot.stubs.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.word.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewMultiArrayStubCall.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewMultiArrayStubCall.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewMultiArrayStubCall.java Tue Apr 22 18:32:08 2014 -0700 @@ -29,7 +29,6 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.word.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PatchReturnAddressNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PatchReturnAddressNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PatchReturnAddressNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,10 +22,10 @@ */ package com.oracle.graal.hotspot.nodes; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.word.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PrefetchAllocateNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PrefetchAllocateNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PrefetchAllocateNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,11 +23,11 @@ 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.type.*; import com.oracle.graal.word.*; public class PrefetchAllocateNode extends FixedWithNextNode implements LIRGenLowerable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PushInterpreterFrameNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PushInterpreterFrameNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PushInterpreterFrameNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,10 +23,10 @@ package com.oracle.graal.hotspot.nodes; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.word.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SaveAllRegistersNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SaveAllRegistersNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SaveAllRegistersNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,11 +23,11 @@ package com.oracle.graal.hotspot.nodes; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.lir.StandardOp.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Saves all allocatable registers. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SnippetAnchorNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SnippetAnchorNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SnippetAnchorNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,11 +22,11 @@ */ package com.oracle.graal.hotspot.nodes; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(allowedUsageTypes = {InputType.Value, InputType.Anchor, InputType.Guard}) public final class SnippetAnchorNode extends FixedWithNextNode implements Simplifiable, GuardingNode { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SnippetLocationProxyNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SnippetLocationProxyNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SnippetLocationProxyNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,12 +22,12 @@ */ package com.oracle.graal.hotspot.nodes; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(allowedUsageTypes = {InputType.Association, InputType.Value}) public final class SnippetLocationProxyNode extends FloatingNode implements Canonicalizable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/StubForeignCallNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/StubForeignCallNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/StubForeignCallNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,11 +24,11 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Node for a {@linkplain ForeignCallDescriptor foreign} call from within a stub. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/TailcallNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/TailcallNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/TailcallNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -29,6 +29,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.gen.*; import com.oracle.graal.compiler.target.*; import com.oracle.graal.graph.*; @@ -36,7 +37,6 @@ import com.oracle.graal.java.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Performs a tail call to the specified target compiled method, with the parameter taken from the diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/UncommonTrapCallNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/UncommonTrapCallNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/UncommonTrapCallNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,13 +24,13 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.lir.StandardOp.SaveRegistersOp; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.word.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VMErrorNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VMErrorNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VMErrorNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -27,9 +27,9 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.replacements.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrier.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrier.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrier.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,11 +22,11 @@ */ package com.oracle.graal.hotspot.nodes; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; public abstract class WriteBarrier extends FixedWithNextNode implements Lowerable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/NarrowOopStamp.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/NarrowOopStamp.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/NarrowOopStamp.java Tue Apr 22 18:32:08 2014 -0700 @@ -26,7 +26,6 @@ import com.oracle.graal.compiler.common.spi.*; import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.hotspot.HotSpotVMConfig.CompressEncoding; -import com.oracle.graal.nodes.type.*; public class NarrowOopStamp extends ObjectStamp { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/AheadOfTimeVerificationPhase.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/AheadOfTimeVerificationPhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/AheadOfTimeVerificationPhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -66,7 +66,7 @@ if (!isObject(node)) { return false; } - return "Ljava/lang/invoke/DirectMethodHandle;".equals(ObjectStamp.typeOrNull(node).getName()); + return "Ljava/lang/invoke/DirectMethodHandle;".equals(StampTool.typeOrNull(node).getName()); } @SuppressFBWarnings(value = "ES_COMPARING_STRINGS_WITH_EQ", justification = "reference equality is what we want") diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/LoadJavaMirrorWithKlassPhase.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/LoadJavaMirrorWithKlassPhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/LoadJavaMirrorWithKlassPhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -30,7 +30,6 @@ import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.phases.*; import com.oracle.graal.phases.common.*; import com.oracle.graal.phases.tiers.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -75,12 +75,12 @@ } protected void addG1PostWriteBarrier(FixedAccessNode node, ValueNode object, ValueNode value, LocationNode location, boolean precise, StructuredGraph graph) { - final boolean alwaysNull = ObjectStamp.isObjectAlwaysNull(value); + final boolean alwaysNull = StampTool.isObjectAlwaysNull(value); graph.addAfterFixed(node, graph.add(new G1PostWriteBarrier(object, value, location, precise, alwaysNull))); } protected void addSerialPostWriteBarrier(FixedAccessNode node, ValueNode object, ValueNode value, LocationNode location, boolean precise, StructuredGraph graph) { - final boolean alwaysNull = ObjectStamp.isObjectAlwaysNull(value); + final boolean alwaysNull = StampTool.isObjectAlwaysNull(value); final LocationNode loc = (precise ? location : null); graph.addAfterFixed(node, graph.add(new SerialWriteBarrier(object, loc, precise, alwaysNull))); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/AbstractMethodHandleNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/AbstractMethodHandleNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/AbstractMethodHandleNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -27,6 +27,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.hotspot.meta.*; @@ -53,7 +54,7 @@ /** * Search for an instance field with the given name in a class. - * + * * @param className name of the class to search in * @param fieldName name of the field to be searched * @return resolved java field @@ -100,7 +101,7 @@ /** * Get the receiver of a MethodHandle.invokeBasic call. - * + * * @return the receiver argument node */ private ValueNode getReceiver() { @@ -109,7 +110,7 @@ /** * Get the MemberName argument of a MethodHandle.linkTo* call. - * + * * @return the MemberName argument node (which is the last argument) */ private ValueNode getMemberName() { @@ -119,7 +120,7 @@ /** * Used from {@link MethodHandleInvokeBasicNode} to get the target {@link InvokeNode} if the * method handle receiver is constant. - * + * * @return invoke node for the {@link java.lang.invoke.MethodHandle} target */ protected InvokeNode getInvokeBasicTarget() { @@ -138,7 +139,7 @@ * Used from {@link MethodHandleLinkToStaticNode}, {@link MethodHandleLinkToSpecialNode}, * {@link MethodHandleLinkToVirtualNode}, and {@link MethodHandleLinkToInterfaceNode} to get the * target {@link InvokeNode} if the member name argument is constant. - * + * * @return invoke node for the member name target */ protected InvokeNode getLinkToTarget() { @@ -153,7 +154,7 @@ /** * Helper function to get the {@link InvokeNode} for the vmtarget of a * java.lang.invoke.MemberName. - * + * * @param memberName constant member name node * @return invoke node for the member name target */ @@ -189,7 +190,7 @@ // Try to get the most accurate receiver type if (this instanceof MethodHandleLinkToVirtualNode || this instanceof MethodHandleLinkToInterfaceNode) { - ResolvedJavaType receiverType = ObjectStamp.typeOrNull(getReceiver().stamp()); + ResolvedJavaType receiverType = StampTool.typeOrNull(getReceiver().stamp()); if (receiverType != null) { ResolvedJavaMethod concreteMethod = receiverType.findUniqueConcreteMethod(targetMethod); if (concreteMethod != null) { @@ -213,7 +214,7 @@ /** * Inserts a node to cast the argument at index to the given type if the given type is more * concrete than the argument type. - * + * * @param index of the argument to be cast * @param type the type the argument should be cast to */ @@ -222,7 +223,7 @@ ResolvedJavaType targetType = (ResolvedJavaType) type; if (!targetType.isPrimitive()) { ValueNode argument = arguments.get(index); - ResolvedJavaType argumentType = ObjectStamp.typeOrNull(argument.stamp()); + ResolvedJavaType argumentType = StampTool.typeOrNull(argument.stamp()); if (argumentType == null || (argumentType.isAssignableFrom(targetType) && !argumentType.equals(targetType))) { PiNode piNode = graph().unique(new PiNode(argument, StampFactory.declared(targetType))); arguments.set(index, piNode); @@ -234,7 +235,7 @@ /** * Creates an {@link InvokeNode} for the given target method. The {@link CallTargetNode} passed * to the InvokeNode is in fact a {@link SelfReplacingMethodCallTargetNode}. - * + * * @param targetMethod the method the be called * @return invoke node for the member name target */ diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopyCallNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopyCallNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopyCallNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -27,6 +27,8 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.api.runtime.*; +import com.oracle.graal.compiler.common.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.hotspot.nodes.*; @@ -34,8 +36,6 @@ import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; -import com.oracle.graal.phases.*; import com.oracle.graal.replacements.SnippetTemplate.Arguments; import com.oracle.graal.runtime.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopyNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopyNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopyNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -26,6 +26,7 @@ import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.*; import com.oracle.graal.debug.*; import com.oracle.graal.debug.Debug.Scope; import com.oracle.graal.loop.phases.*; @@ -33,7 +34,6 @@ import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.virtual.*; -import com.oracle.graal.phases.*; import com.oracle.graal.phases.common.*; import com.oracle.graal.phases.tiers.*; import com.oracle.graal.replacements.nodes.*; @@ -69,8 +69,8 @@ } private StructuredGraph selectSnippet(LoweringTool tool, final Replacements replacements) { - ResolvedJavaType srcType = ObjectStamp.typeOrNull(getSource().stamp()); - ResolvedJavaType destType = ObjectStamp.typeOrNull(getDestination().stamp()); + ResolvedJavaType srcType = StampTool.typeOrNull(getSource().stamp()); + ResolvedJavaType destType = StampTool.typeOrNull(getDestination().stamp()); if (srcType == null || !srcType.isArray() || destType == null || !destType.isArray()) { return null; @@ -143,13 +143,13 @@ * Returns true if this copy doesn't require store checks. Trivially true for primitive arrays. */ private boolean isExact() { - ResolvedJavaType srcType = ObjectStamp.typeOrNull(getSource().stamp()); + ResolvedJavaType srcType = StampTool.typeOrNull(getSource().stamp()); if (srcType.getComponentType().getKind().isPrimitive() || getSource() == getDestination()) { return true; } - ResolvedJavaType destType = ObjectStamp.typeOrNull(getDestination().stamp()); - if (ObjectStamp.isExactType(getDestination().stamp())) { + ResolvedJavaType destType = StampTool.typeOrNull(getDestination().stamp()); + if (StampTool.isExactType(getDestination().stamp())) { if (destType != null && destType.isAssignableFrom(srcType)) { return true; } @@ -171,10 +171,10 @@ if (state.getState() == EscapeState.Virtual) { type = state.getVirtualObject().type(); } else { - type = ObjectStamp.typeOrNull(state.getMaterializedValue()); + type = StampTool.typeOrNull(state.getMaterializedValue()); } } else { - type = ObjectStamp.typeOrNull(entry); + type = StampTool.typeOrNull(entry); } if (type == null || !destComponentType.isAssignableFrom(type)) { return false; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopySnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopySnippets.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopySnippets.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,10 +22,10 @@ */ package com.oracle.graal.hotspot.replacements; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.*; import static com.oracle.graal.nodes.GuardingPiNode.*; import static com.oracle.graal.nodes.extended.BranchProbabilityNode.*; -import static com.oracle.graal.phases.GraalOptions.*; import java.lang.reflect.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CheckCastDynamicSnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CheckCastDynamicSnippets.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CheckCastDynamicSnippets.java Tue Apr 22 18:32:08 2014 -0700 @@ -31,6 +31,7 @@ import static com.oracle.graal.replacements.SnippetTemplate.*; import com.oracle.graal.api.code.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.debug.*; import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.hotspot.nodes.*; @@ -38,7 +39,6 @@ import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.replacements.*; import com.oracle.graal.replacements.SnippetTemplate.AbstractTemplates; import com.oracle.graal.replacements.SnippetTemplate.Arguments; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CompositeValueClassSubstitutions.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CompositeValueClassSubstitutions.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CompositeValueClassSubstitutions.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.replacements; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.api.replacements.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNodeClassSubstitutions.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNodeClassSubstitutions.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNodeClassSubstitutions.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.replacements; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.api.replacements.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java Tue Apr 22 18:32:08 2014 -0700 @@ -33,6 +33,7 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.api.meta.ProfilingInfo.TriState; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.hotspot.nodes.*; import com.oracle.graal.hotspot.replacements.TypeCheckSnippetUtils.Hints; @@ -40,7 +41,6 @@ import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.options.*; import com.oracle.graal.replacements.*; import com.oracle.graal.replacements.Snippet.ConstantParameter; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/LoadExceptionObjectSnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/LoadExceptionObjectSnippets.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/LoadExceptionObjectSnippets.java Tue Apr 22 18:32:08 2014 -0700 @@ -28,12 +28,12 @@ import static com.oracle.graal.replacements.SnippetTemplate.*; import com.oracle.graal.api.code.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.hotspot.meta.*; 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.nodes.type.*; import com.oracle.graal.replacements.*; import com.oracle.graal.replacements.Snippet.ConstantParameter; import com.oracle.graal.replacements.SnippetTemplate.AbstractTemplates; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java Tue Apr 22 18:32:08 2014 -0700 @@ -457,7 +457,7 @@ } static boolean isTracingEnabledForType(ValueNode object) { - ResolvedJavaType type = ObjectStamp.typeOrNull(object.stamp()); + ResolvedJavaType type = StampTool.typeOrNull(object.stamp()); if (TRACE_TYPE_FILTER == null) { return false; } else { @@ -511,7 +511,7 @@ callTarget = graph.add(new MethodCallTargetNode(InvokeKind.Static, checkCounter.getMethod(), new ValueNode[]{errMsg}, returnType)); invoke = graph.add(new InvokeNode(callTarget, 0)); List stack = Collections.emptyList(); - FrameState stateAfter = new FrameState(graph.method(), FrameState.AFTER_BCI, new ValueNode[0], stack, new ValueNode[0], new MonitorIdNode[0], false, false); + FrameState stateAfter = new FrameState(graph.method(), BytecodeFrame.AFTER_BCI, new ValueNode[0], stack, new ValueNode[0], new MonitorIdNode[0], false, false); invoke.setStateAfter(graph.add(stateAfter)); graph.addBeforeFixed(ret, invoke); diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,17 +24,18 @@ import static com.oracle.graal.api.code.UnsignedMath.*; import static com.oracle.graal.api.meta.MetaUtil.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.*; import static com.oracle.graal.hotspot.replacements.NewObjectSnippets.Options.*; import static com.oracle.graal.nodes.PiArrayNode.*; import static com.oracle.graal.nodes.extended.BranchProbabilityNode.*; -import static com.oracle.graal.phases.GraalOptions.*; import static com.oracle.graal.replacements.SnippetTemplate.*; import static com.oracle.graal.replacements.nodes.ExplodeLoopNode.*; import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.debug.*; import com.oracle.graal.graph.Node.ConstantNodeParameter; import com.oracle.graal.graph.Node.NodeIntrinsic; @@ -46,7 +47,6 @@ import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.options.*; import com.oracle.graal.replacements.*; import com.oracle.graal.replacements.Snippet.ConstantParameter; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -60,7 +60,7 @@ return null; } - ResolvedJavaType type = ObjectStamp.typeOrNull(getObject()); + ResolvedJavaType type = StampTool.typeOrNull(getObject()); if (type != null) { if (type.isArray()) { Method method = ObjectCloneSnippets.arrayCloneMethods.get(type.getComponentType().getKind()); @@ -106,7 +106,7 @@ /* * Looks at the given stamp and determines if it is an exact type (or can be assumed to be an * exact type) and if it is a cloneable type. - * + * * If yes, then the exact type is returned, otherwise it returns null. */ private static ResolvedJavaType getConcreteType(Stamp stamp, Assumptions assumptions, MetaAccessProvider metaAccess) { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectGetClassNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectGetClassNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectGetClassNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,11 +22,10 @@ */ package com.oracle.graal.hotspot.replacements; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.api.meta.ResolvedJavaType.Representation; -import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; @@ -68,13 +67,10 @@ if (usages().isEmpty()) { return null; } else { - Stamp stamp = getObject().stamp(); - if (stamp instanceof ObjectStamp) { - ObjectStamp objectStamp = (ObjectStamp) stamp; - if (objectStamp.isLegal() && objectStamp.isExactType()) { - Constant clazz = objectStamp.type().getEncoding(Representation.JavaClass); - return ConstantNode.forConstant(clazz, tool.getMetaAccess(), graph()); - } + if (StampTool.isExactType(getObject())) { + ResolvedJavaType type = StampTool.typeOrNull(getObject()); + Constant clazz = type.getEncoding(Representation.JavaClass); + return ConstantNode.forConstant(clazz, tool.getMetaAccess(), graph()); } return this; } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/SystemIdentityHashCodeNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/SystemIdentityHashCodeNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/SystemIdentityHashCodeNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.replacements; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.hotspot.meta.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/TypeCheckSnippetUtils.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/TypeCheckSnippetUtils.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/TypeCheckSnippetUtils.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.replacements; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.*; import static com.oracle.graal.nodes.extended.BranchProbabilityNode.*; -import static com.oracle.graal.phases.GraalOptions.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/UnsafeArrayCopyNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/UnsafeArrayCopyNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/UnsafeArrayCopyNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,11 +25,11 @@ import static com.oracle.graal.api.meta.LocationIdentity.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.replacements.SnippetTemplate.Arguments; @NodeInfo(allowedUsageTypes = {InputType.Memory}) diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/WriteBarrierSnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/WriteBarrierSnippets.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/WriteBarrierSnippets.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,13 +22,14 @@ */ package com.oracle.graal.hotspot.replacements; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.*; import static com.oracle.graal.nodes.extended.BranchProbabilityNode.*; -import static com.oracle.graal.phases.GraalOptions.*; import static com.oracle.graal.replacements.SnippetTemplate.*; import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.*; import com.oracle.graal.graph.Node.ConstantNodeParameter; import com.oracle.graal.graph.Node.NodeIntrinsic; import com.oracle.graal.hotspot.HotSpotVMConfig.CompressEncoding; @@ -39,7 +40,6 @@ import com.oracle.graal.nodes.HeapAccess.BarrierType; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.phases.*; import com.oracle.graal.replacements.*; import com.oracle.graal.replacements.Snippet.ConstantParameter; import com.oracle.graal.replacements.SnippetTemplate.AbstractTemplates; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/ForeignCallStub.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/ForeignCallStub.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/ForeignCallStub.java Tue Apr 22 18:32:08 2014 -0700 @@ -35,7 +35,6 @@ import com.oracle.graal.hotspot.nodes.*; import com.oracle.graal.hotspot.replacements.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.replacements.*; import com.oracle.graal.replacements.nodes.*; import com.oracle.graal.word.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,8 +23,8 @@ package com.oracle.graal.hotspot.stubs; import static com.oracle.graal.compiler.GraalCompiler.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; -import static com.oracle.graal.phases.GraalOptions.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.java/src/com/oracle/graal/java/BciBlockMapping.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/BciBlockMapping.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/BciBlockMapping.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,7 +23,7 @@ package com.oracle.graal.java; import static com.oracle.graal.bytecode.Bytecodes.*; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,10 +25,9 @@ import static com.oracle.graal.api.meta.DeoptimizationAction.*; import static com.oracle.graal.api.meta.DeoptimizationReason.*; import static com.oracle.graal.bytecode.Bytecodes.*; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static java.lang.reflect.Modifier.*; -import java.lang.reflect.*; import java.util.*; import com.oracle.graal.api.code.*; @@ -38,6 +37,7 @@ import com.oracle.graal.bytecode.*; import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.calc.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.debug.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.Node.ValueNumberable; @@ -219,9 +219,9 @@ liveness = blockMap.liveness; lastInstr = currentGraph.start(); - if (isSynchronized(method.getModifiers())) { + if (method.isSynchronized()) { // add a monitor enter to the start block - currentGraph.start().setStateAfter(frameState.create(FrameState.BEFORE_BCI)); + currentGraph.start().setStateAfter(frameState.create(BytecodeFrame.BEFORE_BCI)); methodSynchronizedObject = synchronizedObject(frameState, method); lastInstr = genMonitorEnter(methodSynchronizedObject); } @@ -289,7 +289,7 @@ unwindBlock = new ExceptionDispatchBlock(); unwindBlock.startBci = -1; unwindBlock.endBci = -1; - unwindBlock.deoptBci = FrameState.UNWIND_BCI; + unwindBlock.deoptBci = method.isSynchronized() ? BytecodeFrame.UNWIND_BCI : BytecodeFrame.AFTER_EXCEPTION_BCI; unwindBlock.setId(Integer.MAX_VALUE); } return unwindBlock; @@ -409,7 +409,7 @@ } private DispatchBeginNode handleException(ValueNode exceptionObject, int bci) { - assert bci == FrameState.BEFORE_BCI || bci == bci() : "invalid bci"; + assert bci == BytecodeFrame.BEFORE_BCI || bci == bci() : "invalid bci"; Debug.log("Creating exception dispatch edges at %d, exception object=%s, exception seen=%s", bci, exceptionObject, profilingInfo.getExceptionSeen(bci)); BciBlock dispatchBlock = currentBlock.exceptionDispatchBlock(); @@ -636,7 +636,7 @@ @Override protected void emitNullCheck(ValueNode receiver) { - if (ObjectStamp.isObjectNonNull(receiver.stamp())) { + if (StampTool.isObjectNonNull(receiver.stamp())) { return; } BlockPlaceholderNode trueSucc = currentGraph.add(new BlockPlaceholderNode(this)); @@ -816,7 +816,7 @@ append(new InfopointNode(InfopointReason.METHOD_END, frameState.create(bci()))); } - synchronizedEpilogue(FrameState.AFTER_BCI, x); + synchronizedEpilogue(BytecodeFrame.AFTER_BCI, x); if (frameState.lockDepth() != 0) { throw new BailoutException("unbalanced monitors"); } @@ -1155,13 +1155,12 @@ private void createUnwind() { assert frameState.stackSize() == 1 : frameState; ValueNode exception = frameState.apop(); - append(new FixedGuardNode(currentGraph.unique(new IsNullNode(exception)), NullCheckException, InvalidateReprofile, true)); - synchronizedEpilogue(FrameState.AFTER_EXCEPTION_BCI, null); + synchronizedEpilogue(BytecodeFrame.AFTER_EXCEPTION_BCI, null); append(new UnwindNode(exception)); } private void synchronizedEpilogue(int bci, ValueNode returnValue) { - if (Modifier.isSynchronized(method.getModifiers())) { + if (method.isSynchronized()) { MonitorExitNode monitorExit = genMonitorExit(methodSynchronizedObject, returnValue); if (returnValue != null) { frameState.push(returnValue.getKind(), returnValue); diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.java/src/com/oracle/graal/java/HIRFrameStateBuilder.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/HIRFrameStateBuilder.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/HIRFrameStateBuilder.java Tue Apr 22 18:32:08 2014 -0700 @@ -35,7 +35,6 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.java.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.util.*; public class HIRFrameStateBuilder extends AbstractFrameStateBuilder { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotpath/HP_series.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotpath/HP_series.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotpath/HP_series.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,6 +24,8 @@ package com.oracle.graal.jtt.hotpath; +import org.junit.*; + import com.oracle.graal.jtt.*; /* @@ -104,7 +106,8 @@ * different implementation may return different results. The 11 ulp delta allowed for test(100) * tries to account for that but is not guaranteed to work forever. */ - // @Test + @Ignore("failure-prone because of the variabiliy of pow/cos/sin") + @Test public void run0() throws Throwable { double expected = 0.6248571921291398d; runTestWithDelta(11 * Math.ulp(expected), "test", 100); diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotspot/Test6959129.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotspot/Test6959129.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotspot/Test6959129.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,30 +22,16 @@ */ package com.oracle.graal.jtt.hotspot; +import org.junit.*; + import com.oracle.graal.jtt.*; -//@formatter:off - -/** - * @test - * @bug 6959129 - * @summary COMPARISON WITH INTEGER.MAX_INT DOES NOT WORK CORRECTLY IN THE CLIENT VM. - * - * This test will not run properly without assertions - * - * @run main/othervm -ea Test6959129 - */ public class Test6959129 extends JTTTest { - public static int test() { + public static long test() { int min = Integer.MAX_VALUE - 30000; int max = Integer.MAX_VALUE; - try { - maxMoves(min, max); - } catch (AssertionError e) { - return 95; - } - return 97; + return maxMoves(min, max); } /** @@ -55,7 +41,9 @@ long n = n2; long moves = 0; while (n != 1) { - assert n > 1; + if (n <= 1) { + throw new IllegalStateException(); + } if (isEven(n)) { n = n / 2; } else { @@ -86,7 +74,7 @@ return maxmoves; } - //@Test + @Test(timeout = 20000) public void run0() throws Throwable { runTest("test"); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/LambdaEagerTest.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/LambdaEagerTest.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/LambdaEagerTest.java Tue Apr 22 18:32:08 2014 -0700 @@ -29,11 +29,11 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.test.*; import com.oracle.graal.nodes.*; import com.oracle.graal.options.*; import com.oracle.graal.options.OptionValue.OverrideScope; -import com.oracle.graal.phases.*; public class LambdaEagerTest extends GraalCompilerTest { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/micro/FloatingReads.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/micro/FloatingReads.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/micro/FloatingReads.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,6 +22,8 @@ */ package com.oracle.graal.jtt.micro; +import org.junit.*; + import com.oracle.graal.jtt.*; public class FloatingReads extends JTTTest { @@ -61,22 +63,22 @@ return a + b + c; } - // @Test + @Test public void run0() { runTest("test", 10); } - // @Test + @Test public void run1() { runTest("test", 1000); } - // @Test + @Test public void run2() { runTest("test", 1); } - // @Test + @Test public void run3() { runTest("test", 0); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Monitor_contended01.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Monitor_contended01.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Monitor_contended01.java Tue Apr 22 18:32:08 2014 -0700 @@ -71,7 +71,7 @@ } } - @LongTest + @LongTest(timeout = 20000) public void run0() throws Throwable { runTest("test"); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Monitor_notowner01.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Monitor_notowner01.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Monitor_notowner01.java Tue Apr 22 18:32:08 2014 -0700 @@ -62,7 +62,7 @@ } } - @LongTest + @LongTest(timeout = 20000) public void run0() throws Throwable { runTest("test"); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Monitorenter01.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Monitorenter01.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Monitorenter01.java Tue Apr 22 18:32:08 2014 -0700 @@ -41,7 +41,7 @@ } } - @Test + @Test(timeout = 20000) public void run0() throws Throwable { runTest("test"); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Monitorenter02.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Monitorenter02.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Monitorenter02.java Tue Apr 22 18:32:08 2014 -0700 @@ -45,7 +45,7 @@ } } - @Test + @Test(timeout = 20000) public void run0() throws Throwable { runTest("test"); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait01.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait01.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait01.java Tue Apr 22 18:32:08 2014 -0700 @@ -57,22 +57,22 @@ } } - @LongTest + @LongTest(timeout = 20000) public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @LongTest(timeout = 20000) public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @LongTest(timeout = 20000) public void run2() throws Throwable { runTest("test", 3); } - @LongTest + @LongTest(timeout = 20000) public void run3() throws Throwable { runTest("test", 15); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait02.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait02.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait02.java Tue Apr 22 18:32:08 2014 -0700 @@ -57,17 +57,17 @@ } } - @LongTest + @LongTest(timeout = 20000) public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @LongTest(timeout = 20000) public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @LongTest(timeout = 20000) public void run2() throws Throwable { runTest("test", 2); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait03.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait03.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait03.java Tue Apr 22 18:32:08 2014 -0700 @@ -63,17 +63,17 @@ } } - @LongTest + @LongTest(timeout = 20000) public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @LongTest(timeout = 20000) public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @LongTest(timeout = 20000) public void run2() throws Throwable { runTest("test", 2); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait04.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait04.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Object_wait04.java Tue Apr 22 18:32:08 2014 -0700 @@ -67,32 +67,32 @@ } } - @LongTest + @LongTest(timeout = 20000) public void run0() throws Throwable { runTest("test", 0); } - @LongTest + @LongTest(timeout = 20000) public void run1() throws Throwable { runTest("test", 1); } - @LongTest + @LongTest(timeout = 20000) public void run2() throws Throwable { runTest("test", 2); } - @LongTest + @LongTest(timeout = 20000) public void run3() throws Throwable { runTest("test", 3); } - @LongTest + @LongTest(timeout = 20000) public void run4() throws Throwable { runTest("test", 4); } - @LongTest + @LongTest(timeout = 20000) public void run5() throws Throwable { runTest("test", 5); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/SynchronizedLoopExit01.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/SynchronizedLoopExit01.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/SynchronizedLoopExit01.java Tue Apr 22 18:32:08 2014 -0700 @@ -30,9 +30,9 @@ /** * Inspired by {@code com.sun.media.sound.DirectAudioDevice$DirectDL.drain()}. - * + * * Two loop exits hold a monitor while merging. - * + * */ public final class SynchronizedLoopExit01 extends JTTTest { @@ -53,7 +53,7 @@ return b; } - @Test + @Test(timeout = 20000) public void run0() throws Throwable { runTest("test"); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted02.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted02.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted02.java Tue Apr 22 18:32:08 2014 -0700 @@ -85,12 +85,12 @@ } } - @LongTest + @LongTest(timeout = 20000) public void run0() throws Throwable { runTest("test", 0, 0); } - @LongTest + @LongTest(timeout = 20000) public void run1() throws Throwable { runTest("test", 1, 500); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted03.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted03.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted03.java Tue Apr 22 18:32:08 2014 -0700 @@ -68,7 +68,7 @@ } } - @LongTest + @LongTest(timeout = 20000) public void run0() throws Throwable { runTest("test"); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted04.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted04.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted04.java Tue Apr 22 18:32:08 2014 -0700 @@ -66,7 +66,7 @@ } - @LongTest + @LongTest(timeout = 20000) public void run0() throws Throwable { runTest("test"); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted05.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted05.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_isInterrupted05.java Tue Apr 22 18:32:08 2014 -0700 @@ -66,7 +66,7 @@ } } - @LongTest + @LongTest(timeout = 20000) public void run0() throws Throwable { runTest("test"); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_join01.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_join01.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_join01.java Tue Apr 22 18:32:08 2014 -0700 @@ -43,7 +43,7 @@ cont = false; } - @LongTest + @LongTest(timeout = 20000) public void run0() throws Throwable { runTest("test"); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_join02.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_join02.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_join02.java Tue Apr 22 18:32:08 2014 -0700 @@ -50,7 +50,7 @@ cont = false; } - @LongTest + @LongTest(timeout = 20000) public void run0() throws Throwable { runTest("test"); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_join03.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_join03.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_join03.java Tue Apr 22 18:32:08 2014 -0700 @@ -47,7 +47,7 @@ cont = false; } - @LongTest + @LongTest(timeout = 20000) public void run0() throws Throwable { runTest("test"); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_sleep01.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_sleep01.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_sleep01.java Tue Apr 22 18:32:08 2014 -0700 @@ -35,17 +35,17 @@ return System.currentTimeMillis() - before >= i; } - @LongTest + @LongTest(timeout = 20000) public void run0() throws Throwable { runTest("test", 10); } - @LongTest + @LongTest(timeout = 20000) public void run1() throws Throwable { runTest("test", 20); } - @LongTest + @LongTest(timeout = 20000) public void run2() throws Throwable { runTest("test", 100); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_yield01.java --- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_yield01.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/threads/Thread_yield01.java Tue Apr 22 18:32:08 2014 -0700 @@ -35,7 +35,7 @@ return true; } - @Test + @Test(timeout = 20000) public void run0() throws Throwable { runTest("test"); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Arithmetic.java --- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Arithmetic.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Arithmetic.java Tue Apr 22 18:32:08 2014 -0700 @@ -82,6 +82,27 @@ } /** + * Unary operation with separate source and destination operand but register only. + */ + public static class Unary2RegOp extends AMD64LIRInstruction { + + @Opcode private final AMD64Arithmetic opcode; + @Def({REG}) protected AllocatableValue result; + @Use({REG}) protected AllocatableValue x; + + public Unary2RegOp(AMD64Arithmetic opcode, AllocatableValue result, AllocatableValue x) { + this.opcode = opcode; + this.result = result; + this.x = x; + } + + @Override + public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { + emit(crb, masm, opcode, result, x, null); + } + } + + /** * Unary operation with single operand for source and destination. */ public static class Unary1Op extends AMD64LIRInstruction { @@ -431,9 +452,6 @@ case LNOT: masm.notq(asLongReg(result)); break; - case L2I: - masm.andl(asIntReg(result), 0xFFFFFFFF); - break; default: throw GraalInternalError.shouldNotReachHere(); } @@ -568,6 +586,9 @@ case I2L: masm.movslq(asLongReg(dst), asIntReg(src)); break; + case L2I: + masm.movl(asIntReg(dst), asLongReg(src)); + break; case F2D: masm.cvtss2sd(asDoubleReg(dst), asFloatReg(src)); break; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/BasicInductionVariable.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/BasicInductionVariable.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/BasicInductionVariable.java Tue Apr 22 18:32:08 2014 -0700 @@ -26,7 +26,6 @@ import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; -import com.oracle.graal.nodes.type.*; public class BasicInductionVariable extends InductionVariable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java Tue Apr 22 18:32:08 2014 -0700 @@ -30,7 +30,6 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.type.*; public class CountedLoopInfo { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DerivedScaledInductionVariable.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DerivedScaledInductionVariable.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DerivedScaledInductionVariable.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,7 +25,6 @@ import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; -import com.oracle.graal.nodes.type.*; public class DerivedScaledInductionVariable extends InductionVariable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopPolicies.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopPolicies.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopPolicies.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.loop; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import com.oracle.graal.debug.*; import com.oracle.graal.graph.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopTransformations.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopTransformations.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopTransformations.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.loop; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import com.oracle.graal.api.code.*; import com.oracle.graal.graph.Graph.Mark; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopTransformHighPhase.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopTransformHighPhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopTransformHighPhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.loop.phases; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import com.oracle.graal.debug.*; import com.oracle.graal.loop.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopTransformLowPhase.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopTransformLowPhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopTransformLowPhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.loop.phases; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import com.oracle.graal.debug.*; import com.oracle.graal.debug.Debug.Scope; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampJoinTest.java --- a/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampJoinTest.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampJoinTest.java Tue Apr 22 18:32:08 2014 -0700 @@ -81,7 +81,7 @@ public void testJoin3() { Stamp d = StampFactory.declared(getType(D.class)); Stamp c = StampFactory.declared(getType(C.class)); - Assert.assertTrue(ObjectStamp.isObjectAlwaysNull(join(c, d))); + Assert.assertTrue(StampTool.isObjectAlwaysNull(join(c, d))); } @Test @@ -96,9 +96,9 @@ Stamp dExact = StampFactory.exact(getType(D.class)); Stamp c = StampFactory.declared(getType(C.class)); Stamp join = join(c, dExact); - Assert.assertTrue(ObjectStamp.isObjectAlwaysNull(join)); - Assert.assertNull(ObjectStamp.typeOrNull(join)); - Assert.assertFalse(ObjectStamp.isExactType(join)); + Assert.assertTrue(StampTool.isObjectAlwaysNull(join)); + Assert.assertNull(StampTool.typeOrNull(join)); + Assert.assertFalse(StampTool.isExactType(join)); } @Test @@ -107,8 +107,8 @@ Stamp alwaysNull = StampFactory.alwaysNull(); Stamp join = join(alwaysNull, dExactNonNull); Assert.assertFalse(join.isLegal()); - Assert.assertFalse(ObjectStamp.isObjectNonNull(join)); - Assert.assertFalse(ObjectStamp.isObjectAlwaysNull(join)); + Assert.assertFalse(StampTool.isObjectNonNull(join)); + Assert.assertFalse(StampTool.isObjectAlwaysNull(join)); } @Test @@ -116,9 +116,9 @@ Stamp aExact = StampFactory.exact(getType(A.class)); Stamp e = StampFactory.declared(getType(E.class)); Stamp join = join(aExact, e); - Assert.assertTrue(ObjectStamp.isObjectAlwaysNull(join)); - Assert.assertNull(ObjectStamp.typeOrNull(join)); - Assert.assertFalse(ObjectStamp.isExactType(join)); + Assert.assertTrue(StampTool.isObjectAlwaysNull(join)); + Assert.assertNull(StampTool.typeOrNull(join)); + Assert.assertFalse(StampTool.isExactType(join)); } @Test diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractDeoptimizeNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractDeoptimizeNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractDeoptimizeNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,8 +23,8 @@ package com.oracle.graal.nodes; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; -import com.oracle.graal.nodes.type.*; /** * This node represents an unconditional explicit request for immediate deoptimization. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractEndNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractEndNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractEndNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,9 +24,9 @@ import java.util.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; public abstract class AbstractEndNode extends FixedNode implements IterableNodeType, LIRLowerable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractFixedGuardNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractFixedGuardNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractFixedGuardNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,10 +23,10 @@ package com.oracle.graal.nodes; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.util.*; public abstract class AbstractFixedGuardNode extends DeoptimizingFixedWithNextNode implements Simplifiable, GuardingNode { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -32,7 +32,6 @@ import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(allowedUsageTypes = {InputType.Guard, InputType.Anchor}) public class BeginNode extends FixedWithNextNode implements LIRLowerable, Simplifiable, GuardingNode, AnchoringNode, IterableNodeType { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BreakpointNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BreakpointNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BreakpointNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * A node that results in a platform dependent breakpoint instruction being emitted. A number of diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/CallTargetNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/CallTargetNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/CallTargetNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -27,7 +27,6 @@ import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(allowedUsageTypes = {InputType.Extension}) public abstract class CallTargetNode extends ValueNode implements LIRLowerable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConditionAnchorNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConditionAnchorNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConditionAnchorNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,11 +22,11 @@ */ package com.oracle.graal.nodes; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(nameTemplate = "ConditionAnchor(!={p#negated})", allowedUsageTypes = {InputType.Guard}) public final class ConditionAnchorNode extends FixedWithNextNode implements Canonicalizable, Lowerable, GuardingNode { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -32,7 +32,6 @@ import com.oracle.graal.graph.iterators.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * The {@code ConstantNode} represents a {@link Constant constant}. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java Tue Apr 22 18:32:08 2014 -0700 @@ -51,41 +51,6 @@ private boolean duringCall; - /** - * This BCI should be used for frame states that are built for code with no meaningful BCI. - */ - public static final int UNKNOWN_BCI = -5; - - /** - * The BCI for the exception unwind block, i.e., the block containing the {@link UnwindNode}. - * This block and node is synthetic and has no representation in bytecode. - */ - public static final int UNWIND_BCI = -1; - - /** - * When a node whose frame state has this BCI value is inlined, its frame state will be replaced - * with the frame state before the inlined invoke node. - */ - public static final int BEFORE_BCI = -2; - - /** - * When a node whose frame state has this BCI value is inlined, its frame state will be replaced - * with the frame state {@linkplain Invoke#stateAfter() after} the inlined invoke node. - */ - public static final int AFTER_BCI = -3; - - /** - * When a node whose frame state has this BCI value is inlined, its frame state will be replaced - * with the frame state at the exception edge of the inlined invoke node. - */ - public static final int AFTER_EXCEPTION_BCI = -4; - - /** - * This BCI should be used for frame states that cannot be the target of a deoptimization, like - * snippet frame states. - */ - public static final int INVALID_FRAMESTATE_BCI = -6; - @Input(InputType.State) private FrameState outerFrameState; /** @@ -141,7 +106,8 @@ */ public FrameState(int bci) { this(null, bci, Collections. emptyList(), 0, 0, false, false, Collections. emptyList(), Collections. emptyList()); - assert bci == BEFORE_BCI || bci == AFTER_BCI || bci == AFTER_EXCEPTION_BCI || bci == UNKNOWN_BCI || bci == INVALID_FRAMESTATE_BCI; + assert bci == BytecodeFrame.BEFORE_BCI || bci == BytecodeFrame.AFTER_BCI || bci == BytecodeFrame.AFTER_EXCEPTION_BCI || bci == BytecodeFrame.UNKNOWN_BCI || + bci == BytecodeFrame.INVALID_FRAMESTATE_BCI; } public FrameState(ResolvedJavaMethod method, int bci, ValueNode[] locals, List stack, ValueNode[] locks, MonitorIdNode[] monitorIds, boolean rethrowException, boolean duringCall) { @@ -401,6 +367,19 @@ properties.put("sourceLine", ste.getLineNumber()); } } + if (bci == BytecodeFrame.AFTER_BCI) { + properties.put("bci", "AFTER_BCI"); + } else if (bci == BytecodeFrame.AFTER_EXCEPTION_BCI) { + properties.put("bci", "AFTER_EXCEPTION_BCI"); + } else if (bci == BytecodeFrame.INVALID_FRAMESTATE_BCI) { + properties.put("bci", "INVALID_FRAMESTATE_BCI"); + } else if (bci == BytecodeFrame.BEFORE_BCI) { + properties.put("bci", "BEFORE_BCI"); + } else if (bci == BytecodeFrame.UNKNOWN_BCI) { + properties.put("bci", "UNKNOWN_BCI"); + } else if (bci == BytecodeFrame.UNWIND_BCI) { + properties.put("bci", "UNWIND_BCI"); + } properties.put("locksSize", values.size() - stackSize - localsSize); return properties; } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,10 +23,10 @@ package com.oracle.graal.nodes; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.type.*; /** * A guard is a node that deoptimizes based on a conditional expression. Guards are not attached to diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardPhiNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardPhiNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardPhiNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(nameTemplate = "GuardPhi({i#values})", allowedUsageTypes = {InputType.Guard}) public class GuardPhiNode extends PhiNode implements GuardingNode { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardProxyNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardProxyNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardProxyNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,10 +22,10 @@ */ package com.oracle.graal.nodes; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(allowedUsageTypes = {InputType.Guard}) public class GuardProxyNode extends ProxyNode implements GuardingNode, Proxy { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardedValueNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardedValueNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardedValueNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -28,7 +28,6 @@ import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * A node that changes the type of its input, usually narrowing it. For example, a GuardedValueNode diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -88,7 +88,7 @@ @Override public void virtualize(VirtualizerTool tool) { State state = tool.getObjectState(object); - if (state != null && state.getState() == EscapeState.Virtual && ObjectStamp.typeOrNull(this) != null && ObjectStamp.typeOrNull(this).isAssignableFrom(state.getVirtualObject().type())) { + if (state != null && state.getState() == EscapeState.Virtual && StampTool.typeOrNull(this) != null && StampTool.typeOrNull(this).isAssignableFrom(state.getVirtualObject().type())) { tool.replaceWithVirtual(state.getVirtualObject()); } } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -37,7 +37,6 @@ import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.util.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InfopointNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InfopointNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InfopointNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,9 +23,9 @@ package com.oracle.graal.nodes; import com.oracle.graal.api.code.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Nodes of this type are inserted into the graph to denote points of interest to debugging. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/Invoke.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/Invoke.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/Invoke.java Tue Apr 22 18:32:08 2014 -0700 @@ -78,4 +78,11 @@ default ResolvedJavaType getContextType() { return getContextMethod().getDeclaringClass(); } + + @Override + default void computeStateDuring(FrameState stateAfter) { + FrameState newStateDuring = stateAfter.duplicateModified(bci(), stateAfter.rethrowException(), asNode().getKind()); + newStateDuring.setDuringCall(true); + setStateDuring(newStateDuring); + } } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -185,13 +185,6 @@ } @Override - public void computeStateDuring(FrameState stateAfter) { - FrameState newStateDuring = stateAfter.duplicateModified(bci(), stateAfter.rethrowException(), getKind()); - newStateDuring.setDuringCall(true); - setStateDuring(newStateDuring); - } - - @Override public GuardingNode getGuard() { return guard; } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -223,13 +223,6 @@ } @Override - public void computeStateDuring(FrameState tempStateAfter) { - FrameState newStateDuring = tempStateAfter.duplicateModified(bci(), tempStateAfter.rethrowException(), getKind()); - newStateDuring.setDuringCall(true); - setStateDuring(newStateDuring); - } - - @Override public GuardingNode getGuard() { return guard; } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,9 +24,9 @@ import static com.oracle.graal.graph.InputType.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.calc.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(allowedUsageTypes = {Condition}) public abstract class LogicNode extends FloatingNode { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryMapNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryMapNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryMapNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,10 +25,10 @@ import java.util.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(allowedUsageTypes = {InputType.Extension}) public abstract class MemoryMapNode extends FloatingNode { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryPhiNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryPhiNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryPhiNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,9 +23,9 @@ package com.oracle.graal.nodes; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.type.*; /** * The {@code PhiNode} represents the merging of dataflow in the memory graph. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryProxyNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryProxyNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryProxyNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,10 +23,10 @@ package com.oracle.graal.nodes; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(allowedUsageTypes = {InputType.Memory}) public class MemoryProxyNode extends ProxyNode implements MemoryProxy, LIRLowerable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -59,7 +59,7 @@ } public PiNode(ValueNode object, ResolvedJavaType toType, boolean exactType, boolean nonNull) { - this(object, StampFactory.object(toType, exactType, nonNull || ObjectStamp.isObjectNonNull(object.stamp()))); + this(object, StampFactory.object(toType, exactType, nonNull || StampTool.isObjectNonNull(object.stamp()))); } @Override @@ -80,7 +80,7 @@ @Override public void virtualize(VirtualizerTool tool) { State state = tool.getObjectState(object); - if (state != null && state.getState() == EscapeState.Virtual && ObjectStamp.typeOrNull(this) != null && ObjectStamp.typeOrNull(this).isAssignableFrom(state.getVirtualObject().type())) { + if (state != null && state.getState() == EscapeState.Virtual && StampTool.typeOrNull(this) != null && StampTool.typeOrNull(this).isAssignableFrom(state.getVirtualObject().type())) { tool.replaceWithVirtual(state.getVirtualObject()); } } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ReturnNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ReturnNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ReturnNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; public final class ReturnNode extends ControlSinkNode implements LIRLowerable, IterableNodeType { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SafepointNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SafepointNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SafepointNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Marks a position in the graph where a safepoint should be emitted. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StateSplit.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StateSplit.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StateSplit.java Tue Apr 22 18:32:08 2014 -0700 @@ -29,6 +29,8 @@ */ public interface StateSplit extends NodeWithState { + FixedNode asNode(); + /** * Gets the {@link FrameState} corresponding to the state of the JVM after execution of this * node. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeProfileProxyNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeProfileProxyNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeProfileProxyNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -75,7 +75,7 @@ @Override public Node canonical(CanonicalizerTool tool) { - if (ObjectStamp.isExactType(object)) { + if (StampTool.isExactType(object)) { // The profile is useless - we know the type! return object; } else if (object instanceof TypeProfileProxyNode) { @@ -96,8 +96,8 @@ Debug.log("Improved profile via other profile."); return TypeProfileProxyNode.create(object, newProfile); } - } else if (ObjectStamp.typeOrNull(object) != null) { - ResolvedJavaType type = ObjectStamp.typeOrNull(object); + } else if (StampTool.typeOrNull(object) != null) { + ResolvedJavaType type = StampTool.typeOrNull(object); ResolvedJavaType uniqueConcrete = type.findUniqueConcreteSubtype(); if (uniqueConcrete != null) { // Profile is useless => remove. @@ -109,7 +109,7 @@ return this; } lastCheckedType = type; - JavaTypeProfile newProfile = this.profile.restrict(type, ObjectStamp.isObjectNonNull(object)); + JavaTypeProfile newProfile = this.profile.restrict(type, StampTool.isObjectNonNull(object)); if (newProfile != this.profile) { Debug.log("Improved profile via static type information."); if (newProfile.getTypes().length == 0) { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,8 +23,8 @@ package com.oracle.graal.nodes; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Unwinds the current frame to an exception handler in the caller frame. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -26,7 +26,6 @@ import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.iterators.*; -import com.oracle.graal.nodes.type.*; /** * This class represents a value within the graph, including local variables, phis, and all other diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -26,7 +26,6 @@ import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.iterators.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.type.*; /** * The {@code BinaryNode} class is the base of arithmetic and logic operations with two inputs. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -26,12 +26,12 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.calc.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * The {@code ConditionalNode} class represents a comparison that yields one of two values. Note diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatArithmeticNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatArithmeticNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatArithmeticNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,7 +25,6 @@ import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; public abstract class FloatArithmeticNode extends BinaryNode implements ArithmeticLIRLowerable, MemoryArithmeticLIRLowerable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatConvertNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatConvertNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatConvertNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -30,7 +30,6 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * A {@code FloatConvert} converts between integers and floating point numbers according to Java diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatEqualsNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatEqualsNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatEqualsNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,9 +23,9 @@ package com.oracle.graal.nodes.calc; import com.oracle.graal.compiler.common.calc.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(shortName = "==") public final class FloatEqualsNode extends CompareNode { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatLessThanNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatLessThanNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatLessThanNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,10 +23,10 @@ package com.oracle.graal.nodes.calc; import com.oracle.graal.compiler.common.calc.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(shortName = "<") public final class FloatLessThanNode extends CompareNode { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowThanNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowThanNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowThanNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,10 +24,10 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.calc.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(shortName = "|<|") public final class IntegerBelowThanNode extends CompareNode { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -27,7 +27,6 @@ import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * An {@code IntegerConvert} converts an integer to an integer of different width. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,10 +24,10 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.calc.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.util.*; @NodeInfo(shortName = "==") diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,10 +24,10 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.calc.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(shortName = "<") public final class IntegerLessThanNode extends CompareNode { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerMulNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerMulNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerMulNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -30,7 +30,6 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(shortName = "*") public class IntegerMulNode extends IntegerArithmeticNode implements Canonicalizable, NarrowableArithmeticNode { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerRemNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerRemNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerRemNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -28,7 +28,6 @@ import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(shortName = "%") public class IntegerRemNode extends FixedBinaryNode implements Canonicalizable, Lowerable, LIRLowerable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,10 +22,10 @@ */ package com.oracle.graal.nodes.calc; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.type.*; /** * This node will perform a "test" operation on its arguments. Its result is equivalent to the diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IsNullNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IsNullNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IsNullNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,6 +23,7 @@ package com.oracle.graal.nodes.calc; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; @@ -68,7 +69,7 @@ assert constant.getKind() == Kind.Object; return LogicConstantNode.forBoolean(constant.isNull(), graph()); } - if (ObjectStamp.isObjectNonNull(object.stamp())) { + if (StampTool.isObjectNonNull(object.stamp())) { return LogicConstantNode.contradiction(graph()); } return this; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NarrowNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NarrowNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NarrowNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,6 +23,7 @@ package com.oracle.graal.nodes.calc; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NormalizeCompareNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NormalizeCompareNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NormalizeCompareNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,9 +23,9 @@ package com.oracle.graal.nodes.calc; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Returns -1, 0, or 1 if either x < y, x == y, or x > y. If the comparison is undecided (one diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NotNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NotNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NotNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,6 +23,7 @@ package com.oracle.graal.nodes.calc; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ObjectEqualsNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ObjectEqualsNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ObjectEqualsNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -61,9 +61,9 @@ return LogicConstantNode.tautology(graph()); } - if (ObjectStamp.isObjectAlwaysNull(x())) { + if (StampTool.isObjectAlwaysNull(x())) { return graph().unique(new IsNullNode(y())); - } else if (ObjectStamp.isObjectAlwaysNull(y())) { + } else if (StampTool.isObjectAlwaysNull(y())) { return graph().unique(new IsNullNode(x())); } if (x().stamp().alwaysDistinct(y().stamp())) { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ReinterpretNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ReinterpretNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ReinterpretNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -30,7 +30,6 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * The {@code ReinterpretNode} class represents a reinterpreting conversion that changes the stamp diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/RightShiftNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/RightShiftNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/RightShiftNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -28,7 +28,6 @@ import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(shortName = ">>") public final class RightShiftNode extends ShiftNode implements Canonicalizable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SignExtendNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SignExtendNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SignExtendNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,6 +23,7 @@ package com.oracle.graal.nodes.calc; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedDivNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedDivNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedDivNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -29,7 +29,6 @@ import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(shortName = "|/|") public class UnsignedDivNode extends FixedBinaryNode implements Canonicalizable, Lowerable, LIRLowerable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRemNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRemNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRemNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -29,7 +29,6 @@ import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(shortName = "|%|") public class UnsignedRemNode extends FixedBinaryNode implements Canonicalizable, Lowerable, LIRLowerable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/DynamicCounterNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/DynamicCounterNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/DynamicCounterNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes.debug; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * This node can be used to add a counter to the code that will estimate the dynamic number of calls diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AbstractWriteNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AbstractWriteNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AbstractWriteNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,9 +23,9 @@ package com.oracle.graal.nodes.extended; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(allowedUsageTypes = {InputType.Memory}) public abstract class AbstractWriteNode extends FixedAccessNode implements StateSplit, MemoryCheckpoint.Single, MemoryAccess, GuardingNode { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AddLocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AddLocationNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AddLocationNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,12 +23,12 @@ package com.oracle.graal.nodes.extended; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Location node that is the sum of two other location nodes. Can represent locations in the form of diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BoxNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BoxNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BoxNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,6 +25,7 @@ import java.util.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; @@ -77,7 +78,7 @@ @Override public void virtualize(VirtualizerTool tool) { ValueNode v = tool.getReplacedValue(getValue()); - ResolvedJavaType type = ObjectStamp.typeOrNull(stamp()); + ResolvedJavaType type = StampTool.typeOrNull(stamp()); VirtualBoxingNode newVirtual = new VirtualBoxingNode(type, boxingKind); assert newVirtual.getFields().length == 1; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BytecodeExceptionNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BytecodeExceptionNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BytecodeExceptionNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,10 +23,10 @@ package com.oracle.graal.nodes.extended; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * A node that represents an exception thrown implicitly by a Java bytecode. It can be lowered to diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ConstantLocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ConstantLocationNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ConstantLocationNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,9 +23,9 @@ package com.oracle.graal.nodes.extended; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Location node that has a constant displacement. Can represent addresses of the form [base + disp] diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FixedValueAnchorNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FixedValueAnchorNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FixedValueAnchorNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes.extended; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; public final class FixedValueAnchorNode extends FixedWithNextNode implements LIRLowerable, ValueProxy { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -30,7 +30,6 @@ import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Node for a {@linkplain ForeignCallDescriptor foreign} call. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,11 +23,11 @@ package com.oracle.graal.nodes.extended; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Location node that has a displacement and a scaled index. Can represent locations in the form of diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IntegerSwitchNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IntegerSwitchNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IntegerSwitchNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,10 +25,10 @@ import java.util.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.util.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/JavaReadNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/JavaReadNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/JavaReadNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes.extended; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Read a raw memory location according to Java field or array read semantics. It will perform read diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -29,7 +29,6 @@ import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Loads an object's {@linkplain Representation#ObjectHub hub}. The object is not null-checked by diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadMethodNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadMethodNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadMethodNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,9 +25,9 @@ import java.lang.reflect.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Loads a method from the virtual method table of a given hub. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MembarNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MembarNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MembarNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -31,10 +31,10 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Creates a memory barrier. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/NullCheckNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/NullCheckNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/NullCheckNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes.extended; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; public class NullCheckNode extends DeoptimizingFixedWithNextNode implements LIRLowerable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -144,7 +144,7 @@ } ObjectStamp valueStamp = (ObjectStamp) parent.object().stamp(); - ResolvedJavaType valueType = ObjectStamp.typeOrNull(valueStamp); + ResolvedJavaType valueType = StampTool.typeOrNull(valueStamp); if (valueType != null && field.getDeclaringClass().isAssignableFrom(valueType)) { if (piStamp.nonNull() == valueStamp.nonNull() && piStamp.alwaysNull() == valueStamp.alwaysNull()) { replaceFirstInput(parent, parent.object()); diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/StoreHubNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/StoreHubNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/StoreHubNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes.extended; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; public final class StoreHubNode extends FixedWithNextNode implements Lowerable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SwitchNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SwitchNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SwitchNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -26,9 +26,9 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.type.*; /** * The {@code SwitchNode} class is the base of both lookup and table switches. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnboxNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnboxNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnboxNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,12 +23,12 @@ package com.oracle.graal.nodes.extended; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; public class UnboxNode extends FloatingNode implements Virtualizable, Lowerable, Canonicalizable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeAccessNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeAccessNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeAccessNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -67,7 +67,7 @@ long constantOffset = offset().asConstant().asLong(); // Try to canonicalize to a field access. - ResolvedJavaType receiverType = ObjectStamp.typeOrNull(object()); + ResolvedJavaType receiverType = StampTool.typeOrNull(object()); if (receiverType != null) { ResolvedJavaField field = receiverType.findInstanceFieldWithOffset(constantOffset); // No need for checking that the receiver is non-null. The field access includes @@ -79,15 +79,15 @@ } } } - // Temporarily disable this as it appears to break truffle. - // ResolvedJavaType receiverType = ObjectStamp.typeOrNull(object()); - // if (receiverType != null && receiverType.isArray()) { - // LocationIdentity identity = - // NamedLocationIdentity.getArrayLocation(receiverType.getComponentType().getKind()); - // // Try to build a better location node - // ValueNode location = offset(); - // return cloneAsArrayAccess(location, identity); - // } + if (this.getLocationIdentity() == LocationIdentity.ANY_LOCATION) { + ResolvedJavaType receiverType = StampTool.typeOrNull(object()); + // Try to build a better location identity. + if (receiverType != null && receiverType.isArray()) { + LocationIdentity identity = NamedLocationIdentity.getArrayLocation(receiverType.getComponentType().getKind()); + assert !graph().isAfterFloatingReadPhase() : "cannot add more precise memory location after floating read phase"; + return cloneAsArrayAccess(offset(), identity); + } + } return this; } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -51,7 +51,7 @@ } public UnsafeCastNode(ValueNode object, ResolvedJavaType toType, boolean exactType, boolean nonNull) { - this(object, toType.getKind() == Kind.Object ? StampFactory.object(toType, exactType, nonNull || ObjectStamp.isObjectNonNull(object.stamp())) : StampFactory.forKind(toType.getKind())); + this(object, toType.getKind() == Kind.Object ? StampFactory.object(toType, exactType, nonNull || StampTool.isObjectNonNull(object.stamp())) : StampFactory.forKind(toType.getKind())); } @Override @@ -80,7 +80,7 @@ @Override public void virtualize(VirtualizerTool tool) { State state = tool.getObjectState(object); - if (state != null && state.getState() == EscapeState.Virtual && ObjectStamp.typeOrNull(this) != null && ObjectStamp.typeOrNull(this).isAssignableFrom(state.getVirtualObject().type())) { + if (state != null && state.getState() == EscapeState.Virtual && StampTool.typeOrNull(this) != null && StampTool.typeOrNull(this).isAssignableFrom(state.getVirtualObject().type())) { tool.replaceWithVirtual(state.getVirtualObject()); } } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,11 +25,11 @@ import static com.oracle.graal.graph.UnsafeAccess.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Load of a value from a location specified as an offset relative to an object. No null check is diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,11 +25,11 @@ import static com.oracle.graal.graph.UnsafeAccess.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Store of a value at a location specified as an offset relative to an object. No null check is diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,12 +22,12 @@ */ package com.oracle.graal.nodes.extended; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.util.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewArrayNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewArrayNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewArrayNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -26,7 +26,6 @@ import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * The {@code AbstractNewArrayNode} is used for all 1-dimensional array allocations. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessMonitorNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessMonitorNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessMonitorNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,10 +23,10 @@ package com.oracle.graal.nodes.java; import com.oracle.graal.api.code.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.type.*; /** * The {@code AccessMonitorNode} is the base class of both monitor acquisition and release. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ArrayLengthNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ArrayLengthNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ArrayLengthNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,11 +23,11 @@ package com.oracle.graal.nodes.java; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.util.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndAddNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndAddNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndAddNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,12 +25,11 @@ import static com.oracle.graal.graph.UnsafeAccess.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; - import sun.misc.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndWriteNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndWriteNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndWriteNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,11 +25,10 @@ import static com.oracle.graal.graph.UnsafeAccess.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; - import sun.misc.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastDynamicNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastDynamicNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastDynamicNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -73,7 +73,7 @@ public Node canonical(CanonicalizerTool tool) { assert object() != null : this; - if (ObjectStamp.isObjectAlwaysNull(object())) { + if (StampTool.isObjectAlwaysNull(object())) { return object(); } if (hub.isConstant()) { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -107,7 +107,7 @@ // This is a check cast that will always fail condition = LogicConstantNode.contradiction(graph()); stamp = StampFactory.declared(type); - } else if (ObjectStamp.isObjectNonNull(object)) { + } else if (StampTool.isObjectNonNull(object)) { condition = graph().addWithoutUnique(new InstanceOfNode(type, object, profile)); } else { if (profile != null && profile.getNullSeen() == TriState.FALSE) { @@ -142,7 +142,7 @@ public Node canonical(CanonicalizerTool tool) { assert object() != null : this; - ResolvedJavaType objectType = ObjectStamp.typeOrNull(object()); + ResolvedJavaType objectType = StampTool.typeOrNull(object()); if (objectType != null && type.isAssignableFrom(objectType)) { // we don't have to check for null types here because they will also pass the // checkcast. @@ -161,7 +161,7 @@ } } - if (ObjectStamp.isObjectAlwaysNull(object())) { + if (StampTool.isObjectAlwaysNull(object())) { return object(); } if (tool.assumptions() != null && tool.assumptions().useOptimisticAssumptions()) { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,11 +25,11 @@ import static com.oracle.graal.graph.UnsafeAccess.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Represents an atomic compare-and-swap operation The result is a boolean that contains whether the diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -26,10 +26,10 @@ import java.util.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.type.*; /** * The {@code DynamicNewArrayNode} is used for allocation of arrays when the type is not a diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewInstanceNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewInstanceNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewInstanceNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,10 +23,10 @@ package com.oracle.graal.nodes.java; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.type.*; public class DynamicNewInstanceNode extends AbstractNewObjectNode implements Canonicalizable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -26,12 +26,12 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * The entry to an exception handler with the exception coming from a call (as opposed to a local diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfDynamicNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfDynamicNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfDynamicNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -47,8 +47,8 @@ this.mirror = mirror; this.object = object; assert mirror.getKind() == Kind.Object : mirror.getKind(); - assert ObjectStamp.isExactType(mirror); - assert ObjectStamp.typeOrNull(mirror).getName().equals("Ljava/lang/Class;"); + assert StampTool.isExactType(mirror); + assert StampTool.typeOrNull(mirror).getName().equals("Ljava/lang/Class;"); } @Override diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -29,7 +29,6 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * The {@code InstanceOfNode} represents an instanceof test. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -62,7 +62,7 @@ @Override public Node canonical(CanonicalizerTool tool) { - if (usages().isEmpty() && !isVolatile() && (isStatic() || ObjectStamp.isObjectNonNull(object().stamp()))) { + if (usages().isEmpty() && !isVolatile() && (isStatic() || StampTool.isObjectNonNull(object().stamp()))) { return null; } MetaAccessProvider metaAccess = tool.getMetaAccess(); diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadIndexedNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadIndexedNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadIndexedNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -45,7 +45,7 @@ } private static Stamp createStamp(ValueNode array, Kind kind) { - ResolvedJavaType type = ObjectStamp.typeOrNull(array); + ResolvedJavaType type = StampTool.typeOrNull(array); if (kind == Kind.Object && type != null) { return StampFactory.declared(type.getComponentType()); } else { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredCompareAndSwapNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredCompareAndSwapNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredCompareAndSwapNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,11 +23,11 @@ package com.oracle.graal.nodes.java; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Represents the lowered version of an atomic compare-and-swap operation{@code CompareAndSwapNode}. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -143,11 +143,11 @@ // check if the type of the receiver can narrow the result ValueNode receiver = receiver(); - ResolvedJavaType type = ObjectStamp.typeOrNull(receiver); + ResolvedJavaType type = StampTool.typeOrNull(receiver); if (type != null) { // either the holder class is exact, or the receiver object has an exact type ResolvedJavaMethod resolvedMethod = type.resolveMethod(targetMethod); - if (resolvedMethod != null && (resolvedMethod.canBeStaticallyBound() || ObjectStamp.isExactType(receiver))) { + if (resolvedMethod != null && (resolvedMethod.canBeStaticallyBound() || StampTool.isExactType(receiver))) { invokeKind = InvokeKind.Special; targetMethod = resolvedMethod; return this; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorExitNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorExitNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorExitNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,6 +22,7 @@ */ package com.oracle.graal.nodes.java; +import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; @@ -58,7 +59,7 @@ @Override public void simplify(SimplifierTool tool) { - if (escapedReturnValue != null && stateAfter() != null && stateAfter().bci != FrameState.AFTER_BCI) { + if (escapedReturnValue != null && stateAfter() != null && stateAfter().bci != BytecodeFrame.AFTER_BCI) { ValueNode returnValue = escapedReturnValue; setEscapedReturnValue(null); tool.removeIfUnused(returnValue); @@ -74,7 +75,7 @@ public void virtualize(VirtualizerTool tool) { State state = tool.getObjectState(object()); // the monitor exit for a synchronized method should never be virtualized - assert stateAfter().bci != FrameState.AFTER_BCI || state == null; + assert stateAfter().bci != BytecodeFrame.AFTER_BCI || state == null; if (state != null && state.getState() == EscapeState.Virtual && state.getVirtualObject().hasIdentity()) { MonitorIdNode removedLock = state.removeLock(); assert removedLock == getMonitorId() : "mismatch at " + this + ": " + removedLock + " vs. " + getMonitorId(); diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorIdNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorIdNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorIdNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,10 +22,10 @@ */ package com.oracle.graal.nodes.java; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * This node describes one locking scope; it ties the monitor enter, monitor exit and the frame diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,6 +25,7 @@ import java.util.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; @@ -54,7 +55,7 @@ * @return the element type of the array */ public ResolvedJavaType elementType() { - return ObjectStamp.typeOrNull(this).getComponentType(); + return StampTool.typeOrNull(this).getComponentType(); } @Override diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -26,10 +26,10 @@ import java.util.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.virtual.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewMultiArrayNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewMultiArrayNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewMultiArrayNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,10 +23,10 @@ package com.oracle.graal.nodes.java; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * The {@code NewMultiArrayNode} represents an allocation of a multi-dimensional object array. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,11 +24,11 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * This node is used to perform the finalizer registration at the end of the java.lang.Object diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,10 +23,10 @@ package com.oracle.graal.nodes.java; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.virtual.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,6 +23,7 @@ package com.oracle.graal.nodes.java; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; @@ -75,8 +76,8 @@ int index = indexValue.isConstant() ? indexValue.asConstant().asInt() : -1; if (index >= 0 && index < arrayState.getVirtualObject().entryCount()) { ResolvedJavaType componentType = arrayState.getVirtualObject().type().getComponentType(); - if (componentType.isPrimitive() || ObjectStamp.isObjectAlwaysNull(value) || componentType.getSuperclass() == null || - (ObjectStamp.typeOrNull(value) != null && componentType.isAssignableFrom(ObjectStamp.typeOrNull(value)))) { + if (componentType.isPrimitive() || StampTool.isObjectAlwaysNull(value) || componentType.getSuperclass() == null || + (StampTool.typeOrNull(value) != null && componentType.isAssignableFrom(StampTool.typeOrNull(value)))) { tool.setVirtualEntry(arrayState, index, value(), false); tool.delete(); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeSwitchNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeSwitchNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeSwitchNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -26,11 +26,11 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.api.meta.ResolvedJavaType.Representation; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.util.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/FloatStamp.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/FloatStamp.java Tue Apr 22 18:22:40 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,235 +0,0 @@ -/* - * Copyright (c) 2012, 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.nodes.type; - -import com.oracle.graal.api.meta.*; -import com.oracle.graal.compiler.common.*; -import com.oracle.graal.compiler.common.spi.*; -import com.oracle.graal.compiler.common.type.*; - -public class FloatStamp extends PrimitiveStamp { - - private final double lowerBound; - private final double upperBound; - private final boolean nonNaN; - - protected FloatStamp(int bits) { - this(bits, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, false); - } - - protected FloatStamp(int bits, double lowerBound, double upperBound, boolean nonNaN) { - super(bits); - this.lowerBound = lowerBound; - this.upperBound = upperBound; - this.nonNaN = nonNaN; - } - - @Override - public Stamp unrestricted() { - return new FloatStamp(getBits()); - } - - @Override - public Stamp illegal() { - return new FloatStamp(getBits(), Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, true); - } - - @Override - public boolean isLegal() { - return lowerBound <= upperBound || !nonNaN; - } - - @Override - public Kind getStackKind() { - if (getBits() > 32) { - return Kind.Double; - } else { - return Kind.Float; - } - } - - @Override - public PlatformKind getPlatformKind(LIRTypeTool tool) { - return tool.getFloatingKind(getBits()); - } - - @Override - public ResolvedJavaType javaType(MetaAccessProvider metaAccess) { - switch (getBits()) { - case 32: - return metaAccess.lookupJavaType(Float.TYPE); - case 64: - return metaAccess.lookupJavaType(Double.TYPE); - default: - throw GraalInternalError.shouldNotReachHere(); - } - } - - /** - * The (inclusive) lower bound on the value described by this stamp. - */ - public double lowerBound() { - return lowerBound; - } - - /** - * The (inclusive) upper bound on the value described by this stamp. - */ - public double upperBound() { - return upperBound; - } - - public boolean isNonNaN() { - return nonNaN; - } - - public boolean isUnrestricted() { - return lowerBound == Double.NEGATIVE_INFINITY && upperBound == Double.POSITIVE_INFINITY && !nonNaN; - } - - public boolean contains(double value) { - if (Double.isNaN(value)) { - return !nonNaN; - } else { - return value >= lowerBound && value <= upperBound; - } - } - - @Override - public String toString() { - StringBuilder str = new StringBuilder(); - str.append('f'); - str.append(getBits()); - str.append(nonNaN ? "!" : ""); - if (lowerBound == upperBound) { - str.append(" [").append(lowerBound).append(']'); - } else if (lowerBound != Double.NEGATIVE_INFINITY || upperBound != Double.POSITIVE_INFINITY) { - str.append(" [").append(lowerBound).append(" - ").append(upperBound).append(']'); - } - return str.toString(); - } - - @Override - public Stamp meet(Stamp otherStamp) { - if (otherStamp == this) { - return this; - } - if (!(otherStamp instanceof FloatStamp)) { - return StampFactory.illegal(Kind.Illegal); - } - FloatStamp other = (FloatStamp) otherStamp; - assert getBits() == other.getBits(); - double meetUpperBound = Math.max(upperBound, other.upperBound); - double meetLowerBound = Math.min(lowerBound, other.lowerBound); - boolean meetNonNaN = nonNaN && other.nonNaN; - if (meetLowerBound == lowerBound && meetUpperBound == upperBound && meetNonNaN == nonNaN) { - return this; - } else if (meetLowerBound == other.lowerBound && meetUpperBound == other.upperBound && meetNonNaN == other.nonNaN) { - return other; - } else { - return new FloatStamp(getBits(), meetLowerBound, meetUpperBound, meetNonNaN); - } - } - - @Override - public Stamp join(Stamp otherStamp) { - if (otherStamp == this) { - return this; - } - if (!(otherStamp instanceof FloatStamp)) { - return StampFactory.illegal(Kind.Illegal); - } - FloatStamp other = (FloatStamp) otherStamp; - assert getBits() == other.getBits(); - double joinUpperBound = Math.min(upperBound, other.upperBound); - double joinLowerBound = Math.max(lowerBound, other.lowerBound); - boolean joinNonNaN = nonNaN || other.nonNaN; - if (joinLowerBound == lowerBound && joinUpperBound == upperBound && joinNonNaN == nonNaN) { - return this; - } else if (joinLowerBound == other.lowerBound && joinUpperBound == other.upperBound && joinNonNaN == other.nonNaN) { - return other; - } else { - return new FloatStamp(getBits(), joinLowerBound, joinUpperBound, joinNonNaN); - } - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - long temp; - result = prime * result + super.hashCode(); - temp = Double.doubleToLongBits(lowerBound); - result = prime * result + (int) (temp ^ (temp >>> 32)); - result = prime * result + (nonNaN ? 1231 : 1237); - temp = Double.doubleToLongBits(upperBound); - result = prime * result + (int) (temp ^ (temp >>> 32)); - return result; - } - - @Override - public boolean isCompatible(Stamp stamp) { - if (this == stamp) { - return true; - } - if (stamp instanceof FloatStamp) { - FloatStamp other = (FloatStamp) stamp; - return getBits() == other.getBits(); - } - return false; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass() || !super.equals(obj)) { - return false; - } - FloatStamp other = (FloatStamp) obj; - if (Double.doubleToLongBits(lowerBound) != Double.doubleToLongBits(other.lowerBound)) { - return false; - } - if (Double.doubleToLongBits(upperBound) != Double.doubleToLongBits(other.upperBound)) { - return false; - } - if (nonNaN != other.nonNaN) { - return false; - } - return true; - } - - @Override - public Constant asConstant() { - if (nonNaN && lowerBound == upperBound) { - switch (getBits()) { - case 32: - return Constant.forFloat((float) lowerBound); - case 64: - return Constant.forDouble(lowerBound); - } - } - return null; - } -} diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/IllegalStamp.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/IllegalStamp.java Tue Apr 22 18:22:40 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2012, 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.nodes.type; - -import com.oracle.graal.api.meta.*; -import com.oracle.graal.compiler.common.*; -import com.oracle.graal.compiler.common.spi.*; -import com.oracle.graal.compiler.common.type.*; - -/** - * This stamp represents the illegal type. Values with this type can not exist at run time. - */ -public final class IllegalStamp extends Stamp { - - private IllegalStamp() { - } - - @Override - public Kind getStackKind() { - return Kind.Illegal; - } - - @Override - public PlatformKind getPlatformKind(LIRTypeTool tool) { - throw GraalInternalError.shouldNotReachHere("illegal stamp should not reach backend"); - } - - @Override - public Stamp unrestricted() { - return this; - } - - @Override - public Stamp illegal() { - return this; - } - - @Override - public ResolvedJavaType javaType(MetaAccessProvider metaAccess) { - throw GraalInternalError.shouldNotReachHere("illegal stamp has no Java type"); - } - - @Override - public Stamp meet(Stamp other) { - return this; - } - - @Override - public Stamp join(Stamp other) { - return this; - } - - @Override - public boolean isCompatible(Stamp stamp) { - return false; - } - - @Override - public String toString() { - return "ILLEGAL"; - } - - @Override - public boolean isLegal() { - return false; - } - - private static IllegalStamp instance = new IllegalStamp(); - - static IllegalStamp getInstance() { - return instance; - } -} diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/IntegerStamp.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/IntegerStamp.java Tue Apr 22 18:22:40 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,319 +0,0 @@ -/* - * Copyright (c) 2012, 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.nodes.type; - -import java.util.*; - -import com.oracle.graal.api.meta.*; -import com.oracle.graal.compiler.common.*; -import com.oracle.graal.compiler.common.spi.*; -import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.nodes.*; - -/** - * Describes the possible values of a {@link ValueNode} that produces an int or long result. - * - * The description consists of (inclusive) lower and upper bounds and up (may be set) and down - * (always set) bit-masks. - */ -public class IntegerStamp extends PrimitiveStamp { - - private final long lowerBound; - private final long upperBound; - private final long downMask; - private final long upMask; - - public IntegerStamp(int bits, long lowerBound, long upperBound, long downMask, long upMask) { - super(bits); - this.lowerBound = lowerBound; - this.upperBound = upperBound; - this.downMask = downMask; - this.upMask = upMask; - assert lowerBound >= defaultMinValue(bits) : this; - assert upperBound <= defaultMaxValue(bits) : this; - assert (downMask & defaultMask(bits)) == downMask : this; - assert (upMask & defaultMask(bits)) == upMask : this; - } - - @Override - public Stamp unrestricted() { - return new IntegerStamp(getBits(), defaultMinValue(getBits()), defaultMaxValue(getBits()), 0, defaultMask(getBits())); - } - - @Override - public Stamp illegal() { - return new IntegerStamp(getBits(), defaultMaxValue(getBits()), defaultMinValue(getBits()), defaultMask(getBits()), 0); - } - - @Override - public boolean isLegal() { - return lowerBound <= upperBound; - } - - @Override - public Kind getStackKind() { - if (getBits() > 32) { - return Kind.Long; - } else { - return Kind.Int; - } - } - - @Override - public PlatformKind getPlatformKind(LIRTypeTool tool) { - return tool.getIntegerKind(getBits()); - } - - @Override - public ResolvedJavaType javaType(MetaAccessProvider metaAccess) { - switch (getBits()) { - case 1: - return metaAccess.lookupJavaType(Boolean.TYPE); - case 8: - return metaAccess.lookupJavaType(Byte.TYPE); - case 16: - return metaAccess.lookupJavaType(Short.TYPE); - case 32: - return metaAccess.lookupJavaType(Integer.TYPE); - case 64: - return metaAccess.lookupJavaType(Long.TYPE); - default: - throw GraalInternalError.shouldNotReachHere(); - } - } - - /** - * The signed inclusive lower bound on the value described by this stamp. - */ - public long lowerBound() { - return lowerBound; - } - - /** - * The signed inclusive upper bound on the value described by this stamp. - */ - public long upperBound() { - return upperBound; - } - - /** - * This bit-mask describes the bits that are always set in the value described by this stamp. - */ - public long downMask() { - return downMask; - } - - /** - * This bit-mask describes the bits that can be set in the value described by this stamp. - */ - public long upMask() { - return upMask; - } - - public boolean isUnrestricted() { - return lowerBound == defaultMinValue(getBits()) && upperBound == defaultMaxValue(getBits()) && downMask == 0 && upMask == defaultMask(getBits()); - } - - public boolean contains(long value) { - return value >= lowerBound && value <= upperBound && (value & downMask) == downMask && (value & upMask) == (value & defaultMask(getBits())); - } - - public boolean isPositive() { - return lowerBound() >= 0; - } - - public boolean isNegative() { - return upperBound() <= 0; - } - - public boolean isStrictlyPositive() { - return lowerBound() > 0; - } - - public boolean isStrictlyNegative() { - return upperBound() < 0; - } - - public boolean canBePositive() { - return upperBound() > 0; - } - - public boolean canBeNegative() { - return lowerBound() < 0; - } - - @Override - public String toString() { - StringBuilder str = new StringBuilder(); - str.append('i'); - str.append(getBits()); - if (lowerBound == upperBound) { - str.append(" [").append(lowerBound).append(']'); - } else if (lowerBound != defaultMinValue(getBits()) || upperBound != defaultMaxValue(getBits())) { - str.append(" [").append(lowerBound).append(" - ").append(upperBound).append(']'); - } - if (downMask != 0) { - str.append(" \u21ca"); - new Formatter(str).format("%016x", downMask); - } - if (upMask != defaultMask(getBits())) { - str.append(" \u21c8"); - new Formatter(str).format("%016x", upMask); - } - return str.toString(); - } - - private Stamp createStamp(IntegerStamp other, long newUpperBound, long newLowerBound, long newDownMask, long newUpMask) { - assert getBits() == other.getBits(); - if (newLowerBound > newUpperBound || (newDownMask & (~newUpMask)) != 0) { - return illegal(); - } else if (newLowerBound == lowerBound && newUpperBound == upperBound && newDownMask == downMask && newUpMask == upMask) { - return this; - } else if (newLowerBound == other.lowerBound && newUpperBound == other.upperBound && newDownMask == other.downMask && newUpMask == other.upMask) { - return other; - } else { - return new IntegerStamp(getBits(), newLowerBound, newUpperBound, newDownMask, newUpMask); - } - } - - @Override - public Stamp meet(Stamp otherStamp) { - if (otherStamp == this) { - return this; - } - if (!(otherStamp instanceof IntegerStamp)) { - return StampFactory.illegal(Kind.Illegal); - } - IntegerStamp other = (IntegerStamp) otherStamp; - return createStamp(other, Math.max(upperBound, other.upperBound), Math.min(lowerBound, other.lowerBound), downMask & other.downMask, upMask | other.upMask); - } - - @Override - public Stamp join(Stamp otherStamp) { - if (otherStamp == this) { - return this; - } - if (!(otherStamp instanceof IntegerStamp)) { - return StampFactory.illegal(Kind.Illegal); - } - IntegerStamp other = (IntegerStamp) otherStamp; - long newDownMask = downMask | other.downMask; - long newLowerBound = Math.max(lowerBound, other.lowerBound) | newDownMask; - return createStamp(other, Math.min(upperBound, other.upperBound), newLowerBound, newDownMask, upMask & other.upMask); - } - - @Override - public boolean isCompatible(Stamp stamp) { - if (this == stamp) { - return true; - } - if (stamp instanceof IntegerStamp) { - IntegerStamp other = (IntegerStamp) stamp; - return getBits() == other.getBits(); - } - return false; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + super.hashCode(); - result = prime * result + (int) (lowerBound ^ (lowerBound >>> 32)); - result = prime * result + (int) (upperBound ^ (upperBound >>> 32)); - result = prime * result + (int) (downMask ^ (downMask >>> 32)); - result = prime * result + (int) (upMask ^ (upMask >>> 32)); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass() || !super.equals(obj)) { - return false; - } - IntegerStamp other = (IntegerStamp) obj; - if (lowerBound != other.lowerBound || upperBound != other.upperBound || downMask != other.downMask || upMask != other.upMask) { - return false; - } - return true; - } - - public static long defaultMask(int bits) { - assert 0 <= bits && bits <= 64; - if (bits == 64) { - return 0xffffffffffffffffL; - } else { - return (1L << bits) - 1; - } - } - - public static long defaultMinValue(int bits) { - return -1L << (bits - 1); - } - - public static long defaultMaxValue(int bits) { - return defaultMask(bits - 1); - } - - public static long upMaskFor(int bits, long lowerBound, long upperBound) { - long mask = lowerBound | upperBound; - if (mask == 0) { - return 0; - } else { - return ((-1L) >>> Long.numberOfLeadingZeros(mask)) & defaultMask(bits); - } - } - - /** - * Checks if the 2 stamps represent values of the same sign. Returns true if the two stamps are - * both positive of null or if they are both strictly negative - * - * @return true if the two stamps are both positive of null or if they are both strictly - * negative - */ - public static boolean sameSign(IntegerStamp s1, IntegerStamp s2) { - return s1.isPositive() && s2.isPositive() || s1.isStrictlyNegative() && s2.isStrictlyNegative(); - } - - @Override - public Constant asConstant() { - if (lowerBound == upperBound) { - switch (getBits()) { - case 1: - return Constant.forBoolean(lowerBound != 0); - case 8: - return Constant.forByte((byte) lowerBound); - case 16: - return Constant.forShort((short) lowerBound); - case 32: - return Constant.forInt((int) lowerBound); - case 64: - return Constant.forLong(lowerBound); - } - } - return null; - } -} diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/ObjectStamp.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/ObjectStamp.java Tue Apr 22 18:22:40 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,337 +0,0 @@ -/* - * Copyright (c) 2012, 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.nodes.type; - -import java.lang.reflect.*; -import java.util.*; - -import com.oracle.graal.api.meta.*; -import com.oracle.graal.compiler.common.spi.*; -import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.nodes.*; - -public class ObjectStamp extends Stamp { - - private final ResolvedJavaType type; - private final boolean exactType; - private final boolean nonNull; - private final boolean alwaysNull; - - public ObjectStamp(ResolvedJavaType type, boolean exactType, boolean nonNull, boolean alwaysNull) { - this.type = type; - this.exactType = exactType; - this.nonNull = nonNull; - this.alwaysNull = alwaysNull; - } - - @Override - public Stamp unrestricted() { - return StampFactory.object(); - } - - @Override - public Stamp illegal() { - return new ObjectStamp(null, true, true, false); - } - - @Override - public boolean isLegal() { - return !exactType || (type != null && (isConcreteType(type))); - } - - @Override - public Kind getStackKind() { - return Kind.Object; - } - - @Override - public PlatformKind getPlatformKind(LIRTypeTool tool) { - return tool.getObjectKind(); - } - - @Override - public ResolvedJavaType javaType(MetaAccessProvider metaAccess) { - if (type != null) { - return type; - } - return metaAccess.lookupJavaType(Object.class); - } - - public boolean nonNull() { - return nonNull; - } - - public boolean alwaysNull() { - return alwaysNull; - } - - public ResolvedJavaType type() { - return type; - } - - public boolean isExactType() { - return exactType; - } - - @Override - public String toString() { - StringBuilder str = new StringBuilder(); - str.append('a'); - str.append(nonNull ? "!" : "").append(exactType ? "#" : "").append(' ').append(type == null ? "-" : type.getName()).append(alwaysNull ? " NULL" : ""); - return str.toString(); - } - - @Override - public Stamp meet(Stamp otherStamp) { - if (this == otherStamp) { - return this; - } - if (!(otherStamp instanceof ObjectStamp)) { - return StampFactory.illegal(Kind.Illegal); - } - ObjectStamp other = (ObjectStamp) otherStamp; - ResolvedJavaType meetType; - boolean meetExactType; - boolean meetNonNull; - boolean meetAlwaysNull; - if (other.alwaysNull) { - meetType = type(); - meetExactType = exactType; - meetNonNull = false; - meetAlwaysNull = alwaysNull; - } else if (alwaysNull) { - meetType = other.type(); - meetExactType = other.exactType; - meetNonNull = false; - meetAlwaysNull = other.alwaysNull; - } else { - meetType = meetTypes(type(), other.type()); - meetExactType = exactType && other.exactType; - if (meetExactType && type != null && other.type != null) { - // meeting two valid exact types may result in a non-exact type - meetExactType = Objects.equals(meetType, type) && Objects.equals(meetType, other.type); - } - meetNonNull = nonNull && other.nonNull; - meetAlwaysNull = false; - } - - if (Objects.equals(meetType, type) && meetExactType == exactType && meetNonNull == nonNull && meetAlwaysNull == alwaysNull) { - return this; - } else if (Objects.equals(meetType, other.type) && meetExactType == other.exactType && meetNonNull == other.nonNull && meetAlwaysNull == other.alwaysNull) { - return other; - } else { - return new ObjectStamp(meetType, meetExactType, meetNonNull, meetAlwaysNull); - } - } - - @Override - public Stamp join(Stamp otherStamp) { - return join0(otherStamp, false); - } - - @Override - public boolean isCompatible(Stamp other) { - if (this == other) { - return true; - } - if (other instanceof ObjectStamp) { - return true; - } - return false; - } - - /** - * Returns the stamp representing the type of this stamp after a cast to the type represented by - * the {@code to} stamp. While this is very similar to a {@link #join} operation, in the case - * where both types are not obviously related, the cast operation will prefer the type of the - * {@code to} stamp. This is necessary as long as ObjectStamps are not able to accurately - * represent intersection types. - * - * For example when joining the {@link RandomAccess} type with the {@link AbstractList} type, - * without intersection types, this would result in the most generic type ({@link Object} ). For - * this reason, in some cases a {@code castTo} operation is preferable in order to keep at least - * the {@link AbstractList} type. - * - * @param to the stamp this stamp should be casted to - * @return This stamp casted to the {@code to} stamp - */ - public Stamp castTo(ObjectStamp to) { - return join0(to, true); - } - - private Stamp join0(Stamp otherStamp, boolean castToOther) { - if (this == otherStamp) { - return this; - } - if (!(otherStamp instanceof ObjectStamp)) { - return StampFactory.illegal(Kind.Illegal); - } - ObjectStamp other = (ObjectStamp) otherStamp; - if (!isLegal()) { - return this; - } else if (!other.isLegal()) { - return other; - } - - ResolvedJavaType joinType; - boolean joinAlwaysNull = alwaysNull || other.alwaysNull; - boolean joinNonNull = nonNull || other.nonNull; - boolean joinExactType = exactType || other.exactType; - if (Objects.equals(type, other.type)) { - joinType = type; - } else if (type == null && other.type == null) { - joinType = null; - } else if (type == null) { - joinType = other.type; - } else if (other.type == null) { - joinType = type; - } else { - // both types are != null and different - if (type.isAssignableFrom(other.type)) { - joinType = other.type; - if (exactType) { - joinAlwaysNull = true; - } - } else if (other.type.isAssignableFrom(type)) { - joinType = type; - if (other.exactType) { - joinAlwaysNull = true; - } - } else { - if (castToOther) { - joinType = other.type; - joinExactType = other.exactType; - } else { - joinType = null; - } - if (joinExactType || (!type.isInterface() && !other.type.isInterface())) { - joinAlwaysNull = true; - } - } - } - if (joinAlwaysNull) { - joinType = null; - joinExactType = false; - } - if (joinExactType && joinType == null) { - return StampFactory.illegal(Kind.Object); - } - if (joinAlwaysNull && joinNonNull) { - return StampFactory.illegal(Kind.Object); - } else if (joinExactType && !isConcreteType(joinType)) { - return StampFactory.illegal(Kind.Object); - } - if (Objects.equals(joinType, type) && joinExactType == exactType && joinNonNull == nonNull && joinAlwaysNull == alwaysNull) { - return this; - } else if (Objects.equals(joinType, other.type) && joinExactType == other.exactType && joinNonNull == other.nonNull && joinAlwaysNull == other.alwaysNull) { - return other; - } else { - return new ObjectStamp(joinType, joinExactType, joinNonNull, joinAlwaysNull); - } - } - - public static boolean isConcreteType(ResolvedJavaType type) { - return !(Modifier.isAbstract(type.getModifiers()) && !type.isArray()); - } - - private static ResolvedJavaType meetTypes(ResolvedJavaType a, ResolvedJavaType b) { - if (Objects.equals(a, b)) { - return a; - } else if (a == null || b == null) { - return null; - } else { - return a.findLeastCommonAncestor(b); - } - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + (exactType ? 1231 : 1237); - result = prime * result + (nonNull ? 1231 : 1237); - result = prime * result + (alwaysNull ? 1231 : 1237); - result = prime * result + ((type == null) ? 0 : type.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - ObjectStamp other = (ObjectStamp) obj; - if (exactType != other.exactType || nonNull != other.nonNull || alwaysNull != other.alwaysNull) { - return false; - } - if (type == null) { - if (other.type != null) { - return false; - } - } else if (!type.equals(other.type)) { - return false; - } - return true; - } - - public static boolean isObjectAlwaysNull(ValueNode node) { - return isObjectAlwaysNull(node.stamp()); - } - - public static boolean isObjectAlwaysNull(Stamp stamp) { - return (stamp instanceof ObjectStamp && ((ObjectStamp) stamp).isLegal() && ((ObjectStamp) stamp).alwaysNull()); - } - - public static boolean isObjectNonNull(ValueNode node) { - return isObjectNonNull(node.stamp()); - } - - public static boolean isObjectNonNull(Stamp stamp) { - return stamp instanceof ObjectStamp && ((ObjectStamp) stamp).isLegal() && ((ObjectStamp) stamp).nonNull(); - } - - public static ResolvedJavaType typeOrNull(ValueNode node) { - return typeOrNull(node.stamp()); - } - - public static ResolvedJavaType typeOrNull(Stamp stamp) { - if (stamp instanceof ObjectStamp) { - return ((ObjectStamp) stamp).type(); - } - return null; - } - - public static boolean isExactType(ValueNode node) { - return isExactType(node.stamp()); - } - - public static boolean isExactType(Stamp stamp) { - if (stamp instanceof ObjectStamp) { - return ((ObjectStamp) stamp).isExactType(); - } - return false; - } -} diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/PrimitiveStamp.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/PrimitiveStamp.java Tue Apr 22 18:22:40 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -/* - * 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.nodes.type; - -import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.nodes.*; - -/** - * Describes the possible values of a {@link ValueNode} that produces a primitive value as result. - */ -public abstract class PrimitiveStamp extends Stamp { - - private final int bits; - - protected PrimitiveStamp(int bits) { - this.bits = bits; - } - - /** - * The width in bits of the value described by this stamp. - */ - public int getBits() { - return bits; - } - - public static int getBits(Stamp stamp) { - if (stamp instanceof PrimitiveStamp) { - return ((PrimitiveStamp) stamp).getBits(); - } else { - return 0; - } - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + bits; - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof PrimitiveStamp) { - PrimitiveStamp other = (PrimitiveStamp) obj; - return bits == other.bits; - } - return false; - } -} diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampFactory.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampFactory.java Tue Apr 22 18:22:40 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,255 +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.nodes.type; - -import com.oracle.graal.api.meta.*; -import com.oracle.graal.compiler.common.*; -import com.oracle.graal.compiler.common.type.*; - -public class StampFactory { - - // JaCoCo Exclude - - private static final Stamp[] stampCache = new Stamp[Kind.values().length]; - private static final Stamp[] illegalStampCache = new Stamp[Kind.values().length]; - private static final Stamp objectStamp = new ObjectStamp(null, false, false, false); - private static final Stamp objectNonNullStamp = new ObjectStamp(null, false, true, false); - private static final Stamp objectAlwaysNullStamp = new ObjectStamp(null, false, false, true); - private static final Stamp nodeIntrinsicStamp = new ObjectStamp(null, false, false, false); - private static final Stamp positiveInt = forInteger(Kind.Int, 0, Integer.MAX_VALUE, 0, Integer.MAX_VALUE); - - private static void setCache(Kind kind, Stamp stamp) { - stampCache[kind.ordinal()] = stamp; - } - - private static void setIntCache(Kind kind) { - int bits = kind.getStackKind().getBitCount(); - long mask; - if (kind.isUnsigned()) { - mask = IntegerStamp.defaultMask(kind.getBitCount()); - } else { - mask = IntegerStamp.defaultMask(bits); - } - setCache(kind, new IntegerStamp(bits, kind.getMinValue(), kind.getMaxValue(), 0, mask)); - } - - private static void setFloatCache(Kind kind) { - setCache(kind, new FloatStamp(kind.getBitCount())); - } - - static { - setIntCache(Kind.Boolean); - setIntCache(Kind.Byte); - setIntCache(Kind.Short); - setIntCache(Kind.Char); - setIntCache(Kind.Int); - setIntCache(Kind.Long); - - setFloatCache(Kind.Float); - setFloatCache(Kind.Double); - - setCache(Kind.Object, objectStamp); - setCache(Kind.Void, VoidStamp.getInstance()); - - for (Kind k : Kind.values()) { - if (stampCache[k.ordinal()] != null) { - illegalStampCache[k.ordinal()] = stampCache[k.ordinal()].illegal(); - } else { - illegalStampCache[k.ordinal()] = IllegalStamp.getInstance(); - } - } - } - - /** - * Return a stamp for a Java kind, as it would be represented on the bytecode stack. - */ - public static Stamp forKind(Kind kind) { - assert stampCache[kind.ordinal()] != null : "unexpected forKind(" + kind + ")"; - return stampCache[kind.ordinal()]; - } - - /** - * Return the stamp for the {@code void} type. This will return a singleton instance than can be - * compared using {@code ==}. - */ - public static Stamp forVoid() { - return VoidStamp.getInstance(); - } - - /** - * A stamp used only in the graph of intrinsics, e.g., snippets. It is then replaced by an - * actual stamp when the intrinsic is used, i.e., when the snippet template is instantiated. - */ - public static Stamp forNodeIntrinsic() { - return nodeIntrinsicStamp; - } - - public static Stamp intValue() { - return forKind(Kind.Int); - } - - public static Stamp positiveInt() { - return positiveInt; - } - - public static Stamp illegal() { - return illegal(Kind.Illegal); - } - - public static Stamp illegal(Kind kind) { - return illegalStampCache[kind.ordinal()]; - } - - public static IntegerStamp forInteger(Kind kind, long lowerBound, long upperBound, long downMask, long upMask) { - return new IntegerStamp(kind.getBitCount(), lowerBound, upperBound, downMask, upMask); - } - - public static IntegerStamp forInteger(Kind kind, long lowerBound, long upperBound) { - return forInteger(kind.getBitCount(), lowerBound, upperBound); - } - - public static IntegerStamp forInteger(int bits) { - return new IntegerStamp(bits, IntegerStamp.defaultMinValue(bits), IntegerStamp.defaultMaxValue(bits), 0, IntegerStamp.defaultMask(bits)); - } - - public static IntegerStamp forInteger(int bits, long lowerBound, long upperBound) { - long defaultMask = IntegerStamp.defaultMask(bits); - if (lowerBound == upperBound) { - return new IntegerStamp(bits, lowerBound, lowerBound, lowerBound & defaultMask, lowerBound & defaultMask); - } - final long downMask; - final long upMask; - if (lowerBound >= 0) { - int upperBoundLeadingZeros = Long.numberOfLeadingZeros(upperBound); - long differentBits = lowerBound ^ upperBound; - int sameBitCount = Long.numberOfLeadingZeros(differentBits << upperBoundLeadingZeros); - - upMask = upperBound | -1L >>> (upperBoundLeadingZeros + sameBitCount); - downMask = upperBound & ~(-1L >>> (upperBoundLeadingZeros + sameBitCount)); - } else { - if (upperBound >= 0) { - upMask = defaultMask; - downMask = 0; - } else { - int lowerBoundLeadingOnes = Long.numberOfLeadingZeros(~lowerBound); - long differentBits = lowerBound ^ upperBound; - int sameBitCount = Long.numberOfLeadingZeros(differentBits << lowerBoundLeadingOnes); - - upMask = lowerBound | -1L >>> (lowerBoundLeadingOnes + sameBitCount) | ~(-1L >>> lowerBoundLeadingOnes); - downMask = lowerBound & ~(-1L >>> (lowerBoundLeadingOnes + sameBitCount)) | ~(-1L >>> lowerBoundLeadingOnes); - } - } - return new IntegerStamp(bits, lowerBound, upperBound, downMask & defaultMask, upMask & defaultMask); - } - - public static FloatStamp forFloat(Kind kind, double lowerBound, double upperBound, boolean nonNaN) { - assert kind.isNumericFloat(); - return new FloatStamp(kind.getBitCount(), lowerBound, upperBound, nonNaN); - } - - public static Stamp forConstant(Constant value) { - Kind kind = value.getKind(); - switch (kind) { - case Boolean: - case Byte: - case Char: - case Short: - case Int: - case Long: - long mask = value.asLong() & IntegerStamp.defaultMask(kind.getBitCount()); - return forInteger(kind.getStackKind(), value.asLong(), value.asLong(), mask, mask); - case Float: - return forFloat(kind, value.asFloat(), value.asFloat(), !Float.isNaN(value.asFloat())); - case Double: - return forFloat(kind, value.asDouble(), value.asDouble(), !Double.isNaN(value.asDouble())); - case Illegal: - return illegal(Kind.Illegal); - case Object: - if (value.isNull()) { - return alwaysNull(); - } else { - return objectNonNull(); - } - default: - throw new GraalInternalError("unexpected kind: %s", kind); - } - } - - public static Stamp forConstant(Constant value, MetaAccessProvider metaAccess) { - assert value.getKind() == Kind.Object; - if (value.getKind() == Kind.Object) { - ResolvedJavaType type = value.isNull() ? null : metaAccess.lookupJavaType(value); - return new ObjectStamp(type, value.isNonNull(), value.isNonNull(), value.isNull()); - } else { - throw new GraalInternalError(Kind.Object + " expected, actual kind: %s", value.getKind()); - } - } - - public static Stamp object() { - return objectStamp; - } - - public static Stamp objectNonNull() { - return objectNonNullStamp; - } - - public static Stamp alwaysNull() { - return objectAlwaysNullStamp; - } - - public static Stamp declared(ResolvedJavaType type) { - return declared(type, false); - } - - public static Stamp declaredNonNull(ResolvedJavaType type) { - return declared(type, true); - } - - public static Stamp declared(ResolvedJavaType type, boolean nonNull) { - return object(type, false, nonNull); - } - - public static Stamp object(ResolvedJavaType type, boolean exactType, boolean nonNull) { - assert type != null; - assert type.getKind() == Kind.Object; - ResolvedJavaType exact = type.asExactType(); - if (exact != null) { - assert !exactType || type.equals(exact); - return new ObjectStamp(exact, true, nonNull, false); - } else { - return new ObjectStamp(type, exactType, nonNull, false); - } - } - - public static Stamp exactNonNull(ResolvedJavaType type) { - if (ObjectStamp.isConcreteType(type)) { - return new ObjectStamp(type, true, true, false); - } else { - return illegal(Kind.Object); - } - } - - public static Stamp exact(ResolvedJavaType type) { - return new ObjectStamp(type, true, false, false); - } -} diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampProvider.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampProvider.java Tue Apr 22 18:22:40 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +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.nodes.type; - -import com.oracle.graal.compiler.common.type.*; - -public interface StampProvider { - - Stamp stamp(); -} diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampTool.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampTool.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampTool.java Tue Apr 22 18:32:08 2014 -0700 @@ -26,6 +26,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; +import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; /** @@ -451,4 +452,110 @@ } return null; } + + /** + * Checks whether this {@link ValueNode} represents a {@linkplain Stamp#isLegal() legal} Object + * value which is known to be always null. + * + * @param node the node to check + * @return true if this node represents a legal object value which is known to be always null + */ + public static boolean isObjectAlwaysNull(ValueNode node) { + return isObjectAlwaysNull(node.stamp()); + } + + /** + * Checks whether this {@link Stamp} represents a {@linkplain Stamp#isLegal() legal} Object + * stamp whose values are known to be always null. + * + * @param stamp the stamp to check + * @return true if this stamp represents a legal object stamp whose values are known to be + * always null + */ + public static boolean isObjectAlwaysNull(Stamp stamp) { + if (stamp instanceof ObjectStamp && stamp.isLegal()) { + return ((ObjectStamp) stamp).alwaysNull(); + } + return false; + } + + /** + * Checks whether this {@link ValueNode} represents a {@linkplain Stamp#isLegal() legal} Object + * value which is known to never be null. + * + * @param node the node to check + * @return true if this node represents a legal object value which is known to never be null + */ + public static boolean isObjectNonNull(ValueNode node) { + return isObjectNonNull(node.stamp()); + } + + /** + * Checks whether this {@link Stamp} represents a {@linkplain Stamp#isLegal() legal} Object + * stamp whose values known to be always null. + * + * @param stamp the stamp to check + * @return true if this stamp represents a legal object stamp whose values are known to be + * always null + */ + public static boolean isObjectNonNull(Stamp stamp) { + if (stamp instanceof ObjectStamp && stamp.isLegal()) { + return ((ObjectStamp) stamp).nonNull(); + } + return false; + } + + /** + * Returns the {@linkplain ResolvedJavaType java type} this {@linkplain ValueNode} has if it is + * a {@linkplain Stamp#isLegal() legal} Object value. + * + * @param node the node to check + * @return the javat type this value has if it is a legal Object type, null otherwise + */ + public static ResolvedJavaType typeOrNull(ValueNode node) { + return typeOrNull(node.stamp()); + } + + /** + * Returns the {@linkplain ResolvedJavaType java type} this {@linkplain Stamp} has if it is a + * {@linkplain Stamp#isLegal() legal} Object stamp. + * + * @param stamp the stamp to check + * @return the java type this stamp has if it is a legal Object stamp, null otherwise + */ + public static ResolvedJavaType typeOrNull(Stamp stamp) { + if (stamp instanceof ObjectStamp && stamp.isLegal()) { + return ((ObjectStamp) stamp).type(); + } + return null; + } + + /** + * Checks whether this {@link ValueNode} represents a {@linkplain Stamp#isLegal() legal} Object + * value whose java type is known exactly. If this method returns true then the + * {@linkplain ResolvedJavaType java type} returned by {@link #typeOrNull(ValueNode)} is the + * concrete dynamic/runtime java type of this value. + * + * @param node the node to check + * @return true if this node represents a legal object value whose java type is known exactly + */ + public static boolean isExactType(ValueNode node) { + return isExactType(node.stamp()); + } + + /** + * Checks whether this {@link Stamp} represents a {@linkplain Stamp#isLegal() legal} Object + * stamp whose {@linkplain ResolvedJavaType java type} is known exactly. If this method returns + * true then the java type returned by {@link #typeOrNull(Stamp)} is the only concrete + * dynamic/runtime java type possible for values of this stamp. + * + * @param stamp the stamp to check + * @return true if this node represents a legal object stamp whose java type is known exactly + */ + public static boolean isExactType(Stamp stamp) { + if (stamp instanceof ObjectStamp && stamp.isLegal()) { + return ((ObjectStamp) stamp).isExactType(); + } + return false; + } } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/VoidStamp.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/VoidStamp.java Tue Apr 22 18:22:40 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111 +0,0 @@ -/* - * 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.nodes.type; - -import com.oracle.graal.api.meta.*; -import com.oracle.graal.compiler.common.*; -import com.oracle.graal.compiler.common.spi.*; -import com.oracle.graal.compiler.common.type.*; - -/** - * Singleton stamp representing the value of type {@code void}. - */ -public final class VoidStamp extends Stamp { - - private VoidStamp() { - } - - @Override - public Stamp unrestricted() { - return this; - } - - @Override - public Kind getStackKind() { - return Kind.Void; - } - - @Override - public PlatformKind getPlatformKind(LIRTypeTool tool) { - throw GraalInternalError.shouldNotReachHere("void stamp has no value"); - } - - @Override - public ResolvedJavaType javaType(MetaAccessProvider metaAccess) { - return metaAccess.lookupJavaType(Void.TYPE); - } - - @Override - public String toString() { - return "void"; - } - - @Override - public boolean alwaysDistinct(Stamp other) { - return this != other; - } - - @Override - public Stamp meet(Stamp other) { - if (other instanceof IllegalStamp) { - return other.join(this); - } - if (this == other) { - return this; - } - return StampFactory.illegal(Kind.Illegal); - } - - @Override - public Stamp join(Stamp other) { - if (other instanceof IllegalStamp) { - return other.join(this); - } - if (this == other) { - return this; - } - return StampFactory.illegal(Kind.Illegal); - } - - @Override - public boolean isCompatible(Stamp stamp) { - return this == stamp; - } - - @Override - public Stamp illegal() { - // there is no illegal void stamp - return this; - } - - @Override - public boolean isLegal() { - return true; - } - - private static VoidStamp instance = new VoidStamp(); - - static VoidStamp getInstance() { - return instance; - } -} diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/AllocatedObjectNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/AllocatedObjectNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/AllocatedObjectNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,11 +22,11 @@ */ package com.oracle.graal.nodes.virtual; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Selects one object from a {@link CommitAllocationNode}. The object is identified by its diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/CommitAllocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/CommitAllocationNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/CommitAllocationNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,12 +25,12 @@ import java.util.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(nameTemplate = "Alloc {i#virtualObjects}", allowedUsageTypes = {InputType.Extension}) public final class CommitAllocationNode extends FixedWithNextNode implements VirtualizableAllocation, Lowerable, Simplifiable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualObjectNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualObjectNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualObjectNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,10 +23,10 @@ package com.oracle.graal.nodes.virtual; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; public abstract class VirtualObjectNode extends ValueNode implements LIRLowerable, IterableNodeType { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -152,7 +152,7 @@ break; } } - if (type != null && type != ObjectStamp.typeOrNull(node)) { + if (type != null && type != StampTool.typeOrNull(node)) { newKnownTypes.put(node, type); } } @@ -235,15 +235,15 @@ public ResolvedJavaType getNodeType(ValueNode node) { ResolvedJavaType result = knownTypes.get(GraphUtil.unproxify(node)); - return result == null ? ObjectStamp.typeOrNull(node) : result; + return result == null ? StampTool.typeOrNull(node) : result; } public boolean isNull(ValueNode value) { - return ObjectStamp.isObjectAlwaysNull(value) || knownNull.contains(GraphUtil.unproxify(value)); + return StampTool.isObjectAlwaysNull(value) || knownNull.contains(GraphUtil.unproxify(value)); } public boolean isNonNull(ValueNode value) { - return ObjectStamp.isObjectNonNull(value) || knownNonNull.contains(GraphUtil.unproxify(value)); + return StampTool.isObjectNonNull(value) || knownNonNull.contains(GraphUtil.unproxify(value)); } @Override @@ -812,7 +812,7 @@ ValueNode receiver = callTarget.receiver(); if (receiver != null && (callTarget.invokeKind() == InvokeKind.Interface || callTarget.invokeKind() == InvokeKind.Virtual)) { ResolvedJavaType type = state.getNodeType(receiver); - if (!Objects.equals(type, ObjectStamp.typeOrNull(receiver))) { + if (!Objects.equals(type, StampTool.typeOrNull(receiver))) { ResolvedJavaMethod method = type.resolveMethod(callTarget.targetMethod()); if (method != null) { if (method.canBeStaticallyBound() || Modifier.isFinal(type.getModifiers())) { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeoptimizationGroupingPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeoptimizationGroupingPhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeoptimizationGroupingPhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -26,9 +26,9 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.cfg.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.cfg.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.phases.*; import com.oracle.graal.phases.tiers.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.phases.common; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import java.util.*; import java.util.Map.Entry; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningPhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningPhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.phases.common; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.phases.common.InliningPhase.Options.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,8 +24,8 @@ import static com.oracle.graal.api.meta.DeoptimizationAction.*; import static com.oracle.graal.api.meta.DeoptimizationReason.*; -import static com.oracle.graal.nodes.type.StampFactory.*; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; +import static com.oracle.graal.compiler.common.type.StampFactory.*; import static java.lang.reflect.Modifier.*; import java.lang.reflect.*; @@ -1399,19 +1399,8 @@ } else { if (unwindNode != null) { UnwindNode unwindDuplicate = (UnwindNode) duplicates.get(unwindNode); - MonitorExitNode monitorExit = findPrecedingMonitorExit(unwindDuplicate); - DeoptimizeNode deoptimizeNode = new DeoptimizeNode(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.NotCompiledExceptionHandler); - unwindDuplicate.replaceAndDelete(graph.add(deoptimizeNode)); - // move the deopt upwards if there is a monitor exit that tries to use the - // "after exception" frame state - // (because there is no "after exception" frame state!) - if (monitorExit != null) { - if (monitorExit.stateAfter() != null && monitorExit.stateAfter().bci == FrameState.AFTER_EXCEPTION_BCI) { - FrameState monitorFrameState = monitorExit.stateAfter(); - graph.removeFixed(monitorExit); - monitorFrameState.safeDelete(); - } - } + DeoptimizeNode deoptimizeNode = graph.add(new DeoptimizeNode(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.NotCompiledExceptionHandler)); + unwindDuplicate.replaceAndDelete(deoptimizeNode); } } @@ -1420,22 +1409,25 @@ int callerLockDepth = stateAfter.nestedLockDepth(); for (FrameState original : inlineGraph.getNodes(FrameState.class)) { FrameState frameState = (FrameState) duplicates.get(original); - if (frameState != null) { - assert frameState.bci != FrameState.BEFORE_BCI : frameState; - if (frameState.bci == FrameState.AFTER_BCI) { + 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 == FrameState.AFTER_EXCEPTION_BCI) { - if (frameState.isAlive()) { - assert stateAtExceptionEdge != null; + } else if (frameState.bci == BytecodeFrame.AFTER_EXCEPTION_BCI || (frameState.bci == BytecodeFrame.UNWIND_BCI && !frameState.method().isSynchronized())) { + if (stateAtExceptionEdge != null) { frameState.replaceAndDelete(stateAtExceptionEdge); } else { - assert stateAtExceptionEdge == null; + 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 == FrameState.INVALID_FRAMESTATE_BCI || frameState.method().equals(inlineGraph.method()); + 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); @@ -1482,6 +1474,39 @@ return duplicates; } + protected static void handleMissingAfterExceptionFrameState(FrameState nonReplacableFrameState) { + Graph graph = nonReplacableFrameState.graph(); + NodeWorkList workList = graph.createNodeWorkList(); + workList.add(nonReplacableFrameState); + for (Node node : workList) { + FrameState fs = (FrameState) node; + for (Node usage : fs.usages().snapshot()) { + if (!usage.isAlive()) { + continue; + } + if (usage instanceof FrameState) { + workList.add(usage); + } else { + StateSplit stateSplit = (StateSplit) usage; + FixedNode fixedStateSplit = stateSplit.asNode(); + if (fixedStateSplit instanceof MergeNode) { + MergeNode merge = (MergeNode) fixedStateSplit; + while (merge.isAlive()) { + AbstractEndNode end = merge.forwardEnds().first(); + DeoptimizeNode deoptimizeNode = graph.add(new DeoptimizeNode(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.NotCompiledExceptionHandler)); + end.replaceAtPredecessor(deoptimizeNode); + GraphUtil.killCFG(end); + } + } else { + DeoptimizeNode deoptimizeNode = graph.add(new DeoptimizeNode(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.NotCompiledExceptionHandler)); + fixedStateSplit.replaceAtPredecessor(deoptimizeNode); + GraphUtil.killCFG(fixedStateSplit); + } + } + } + } + } + public static ValueNode mergeReturns(MergeNode merge, List returnNodes) { PhiNode returnValuePhi = null; @@ -1507,7 +1532,7 @@ for (Node node : duplicates.values()) { if (node instanceof FrameState) { FrameState frameState = (FrameState) node; - assert frameState.bci == FrameState.AFTER_BCI || frameState.bci == FrameState.INVALID_FRAMESTATE_BCI : node.toString(Verbosity.Debugger); + assert frameState.bci == BytecodeFrame.AFTER_BCI || frameState.bci == BytecodeFrame.INVALID_FRAMESTATE_BCI : node.toString(Verbosity.Debugger); } } return true; @@ -1521,7 +1546,7 @@ assert !callTarget.isStatic() : callTarget.targetMethod(); StructuredGraph graph = callTarget.graph(); ValueNode firstParam = callTarget.arguments().get(0); - if (firstParam.getKind() == Kind.Object && !ObjectStamp.isObjectNonNull(firstParam)) { + if (firstParam.getKind() == Kind.Object && !StampTool.isObjectNonNull(firstParam)) { IsNullNode condition = graph.unique(new IsNullNode(firstParam)); Stamp stamp = firstParam.stamp().join(objectNonNull()); GuardingPiNode nonNullReceiver = graph.add(new GuardingPiNode(firstParam, condition, true, NullCheckException, InvalidateReprofile, stamp)); diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoopSafepointInsertionPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoopSafepointInsertionPhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoopSafepointInsertionPhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.phases.common; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import com.oracle.graal.nodes.*; import com.oracle.graal.phases.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,12 +22,13 @@ */ package com.oracle.graal.phases.common; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import java.util.*; import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.Graph.Mark; import com.oracle.graal.graph.*; import com.oracle.graal.graph.iterators.*; @@ -36,7 +37,6 @@ import com.oracle.graal.nodes.cfg.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.phases.*; import com.oracle.graal.phases.schedule.*; import com.oracle.graal.phases.tiers.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/NonNullParametersPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/NonNullParametersPhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/NonNullParametersPhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,8 +22,8 @@ */ package com.oracle.graal.phases.common; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.phases.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.phases.common; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import java.util.*; @@ -39,7 +39,6 @@ import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.util.*; import com.oracle.graal.nodes.virtual.*; import com.oracle.graal.phases.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java Tue Apr 22 18:22:40 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,283 +0,0 @@ -/* - * 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 - * 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.phases; - -import com.oracle.graal.options.*; - -/** - * This class encapsulates options that control the behavior of the Graal compiler. - */ -// @formatter:off -public final class GraalOptions { - - @Option(help = "Use baseline compiler configuration") - public static final OptionValue UseBaselineCompiler = new OptionValue<>(false); - @Option(help = "Enable use of compiler intrinsics") - public static final OptionValue Intrinsify = new OptionValue<>(true); - @Option(help = "Enable inlining of monomorphic calls") - static final OptionValue InlineMonomorphicCalls = new OptionValue<>(true); - @Option(help = "Enable inlining of polymorphic calls") - static final OptionValue InlinePolymorphicCalls = new OptionValue<>(true); - @Option(help = "Enable inlining of megamorphic calls") - static final OptionValue InlineMegamorphicCalls = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue MegamorphicInliningMinMethodProbability = new OptionValue<>(0.33D); - @Option(help = "") - public static final OptionValue MaximumDesiredSize = new OptionValue<>(20000); - @Option(help = "") - public static final OptionValue MaximumRecursiveInlining = new OptionValue<>(5); - - // inlining settings - @Option(help = "") - public static final OptionValue BoostInliningForEscapeAnalysis = new OptionValue<>(2f); - @Option(help = "") - public static final OptionValue RelevanceCapForInlining = new OptionValue<>(1f); - @Option(help = "") - public static final OptionValue CapInheritedRelevance = new OptionValue<>(1f); - @Option(help = "") - public static final OptionValue IterativeInlining = new OptionValue<>(false); - - @Option(help = "") - public static final OptionValue TrivialInliningSize = new OptionValue<>(10); - @Option(help = "") - public static final OptionValue MaximumInliningSize = new OptionValue<>(300); - @Option(help = "") - public static final OptionValue SmallCompiledLowLevelGraphSize = new OptionValue<>(300); - @Option(help = "") - public static final OptionValue LimitInlinedInvokes = new OptionValue<>(5.0); - @Option(help = "") - public static final OptionValue InlineEverything = new OptionValue<>(false); - - // escape analysis settings - @Option(help = "") - public static final OptionValue PartialEscapeAnalysis = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue EscapeAnalysisIterations = new OptionValue<>(2); - @Option(help = "") - public static final OptionValue EscapeAnalyzeOnly = new OptionValue<>(null); - @Option(help = "") - public static final OptionValue MaximumEscapeAnalysisArrayLength = new OptionValue<>(32); - @Option(help = "") - public static final OptionValue PEAInliningHints = new OptionValue<>(false); - - @Option(help = "") - public static final OptionValue TailDuplicationProbability = new OptionValue<>(0.5); - @Option(help = "") - public static final OptionValue TailDuplicationTrivialSize = new OptionValue<>(1); - - // profiling information - @Option(help = "") - public static final OptionValue DeoptsToDisableOptimisticOptimization = new OptionValue<>(40); - - // graph caching - @Option(help = "") - public static final OptionValue CacheGraphs = new OptionValue<>(true); - - //loop transform settings TODO (gd) tune - @Option(help = "") - public static final OptionValue LoopPeeling = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue ReassociateInvariants = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue FullUnroll = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue LoopUnswitch = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue FullUnrollMaxNodes = new OptionValue<>(300); - @Option(help = "") - public static final OptionValue ExactFullUnrollMaxNodes = new OptionValue<>(1200); - @Option(help = "") - public static final OptionValue MinimumPeelProbability = new OptionValue<>(0.35f); - @Option(help = "") - public static final OptionValue LoopMaxUnswitch = new OptionValue<>(3); - @Option(help = "") - public static final OptionValue LoopUnswitchMaxIncrease = new OptionValue<>(50); - @Option(help = "") - public static final OptionValue LoopUnswitchUncertaintyBoost = new OptionValue<>(5); - @Option(help = "") - public static final OptionValue UseLoopLimitChecks = new OptionValue<>(true); - - // debugging settings - @Option(help = "") - public static final OptionValue ZapStackOnMethodEntry = new OptionValue<>(false); - @Option(help = "") - public static final OptionValue DeoptALot = new OptionValue<>(false); - @Option(help = "") - public static final OptionValue VerifyPhases = new OptionValue<>(false); - - @Option(help = "") - public static final OptionValue PrintFilter = new OptionValue<>(null); - - // Debug settings: - @Option(help = "") - public static final OptionValue BootstrapReplacements = new OptionValue<>(false); - @Option(help = "") - public static final OptionValue GCDebugStartCycle = new OptionValue<>(-1); - // Ideal graph visualizer output settings - @Option(help = "Dump IdealGraphVisualizer output in binary format") - public static final OptionValue PrintBinaryGraphs = new OptionValue<>(true); - @Option(help = "Output probabilities for fixed nodes during binary graph dumping") - public static final OptionValue PrintGraphProbabilities = new OptionValue<>(false); - @Option(help = "Enable dumping to the C1Visualizer. Enabling this option implies PrintBackendCFG.") - public static final OptionValue PrintCFG = new OptionValue<>(false); - @Option(help = "Enable dumping LIR, register allocation and code generation info to the C1Visualizer.") - public static final OptionValue PrintBackendCFG = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue PrintIdealGraphFile = new OptionValue<>(false); - @Option(help = "") - public static final OptionValue PrintIdealGraphAddress = new OptionValue<>("127.0.0.1"); - @Option(help = "") - public static final OptionValue PrintIdealGraphPort = new OptionValue<>(4444); - @Option(help = "") - public static final OptionValue PrintBinaryGraphPort = new OptionValue<>(4445); - - // Other printing settings - @Option(help = "") - public static final OptionValue PrintCompilation = new OptionValue<>(false); - @Option(help = "") - public static final OptionValue PrintAfterCompilation = new OptionValue<>(false); - @Option(help = "Print profiling information when parsing a method's bytecode") - public static final OptionValue PrintProfilingInformation = new OptionValue<>(false); - @Option(help = "") - public static final OptionValue PrintCodeBytes = new OptionValue<>(false); - @Option(help = "") - public static final OptionValue PrintBailout = new OptionValue<>(false); - @Option(help = "") - public static final OptionValue TraceEscapeAnalysis = new OptionValue<>(false); - @Option(help = "") - public static final OptionValue ExitVMOnBailout = new OptionValue<>(false); - @Option(help = "") - public static final OptionValue ExitVMOnException = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue PrintStackTraceOnException = new OptionValue<>(false); - @Option(help = "Set a phase after which the decompiler dumps the graph, -G:Dump= required") - public static final OptionValue DecompileAfterPhase = new OptionValue<>(null); - - // HotSpot command line options - @Option(help = "") - public static final OptionValue HotSpotPrintCompilation = new OptionValue<>(false); - @Option(help = "") - public static final OptionValue HotSpotCIPrintCompilerName = new OptionValue<>(false); - @Option(help = "") - public static final OptionValue HotSpotPrintInlining = new OptionValue<>(false); - - // Register allocator debugging - @Option(help = "") - public static final OptionValue RegisterPressure = new OptionValue<>(null); - - // Code generator settings - @Option(help = "") - public static final OptionValue ConditionalElimination = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue UseProfilingInformation = new OptionValue<>(true); - @Option(help = "") - static final OptionValue RemoveNeverExecutedCode = new OptionValue<>(true); - @Option(help = "") - static final OptionValue UseExceptionProbability = new OptionValue<>(true); - @Option(help = "") - static final OptionValue UseExceptionProbabilityForOperations = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue OmitHotExceptionStacktrace = new OptionValue<>(false); - @Option(help = "") - public static final OptionValue GenSafepoints = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue GenLoopSafepoints = new OptionValue<>(true); - @Option(help = "") - static final OptionValue UseTypeCheckHints = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue InlineVTableStubs = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue AlwaysInlineVTableStubs = new OptionValue<>(false); - @Option(help = "") - public static final OptionValue GenAssertionCode = new OptionValue<>(false); - @Option(help = "") - public static final OptionValue AlignCallsForPatching = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue ResolveClassBeforeStaticInvoke = new OptionValue<>(false); - @Option(help = "") - public static final OptionValue CanOmitFrame = new OptionValue<>(true); - - @Option(help = "") - public static final OptionValue MemoryAwareScheduling = new OptionValue<>(true); - - // Translating tableswitch instructions - @Option(help = "") - public static final OptionValue MinimumJumpTableSize = new OptionValue<>(5); - @Option(help = "") - public static final OptionValue RangeTestsSwitchDensity = new OptionValue<>(5); - @Option(help = "") - public static final OptionValue MinTableSwitchDensity = new OptionValue<>(0.5); - - // Ahead of time compilation - @Option(help = "Try to avoid emitting code where patching is required") - public static final OptionValue ImmutableCode = new OptionValue<>(false); - - @Option(help = "") - public static final OptionValue CallArrayCopy = new OptionValue<>(true); - - // Runtime settings - @Option(help = "") - public static final OptionValue SupportJsrBytecodes = new OptionValue<>(true); - - @Option(help = "") - public static final OptionValue OptAssumptions = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue OptConvertDeoptsToGuards = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue OptReadElimination = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue OptCanonicalizer = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue OptDeoptimizationGrouping = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue OptScheduleOutOfLoops = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue OptEliminateGuards = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue OptImplicitNullChecks = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue OptLivenessAnalysis = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue OptLoopTransform = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue OptFloatingReads = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue OptTailDuplication = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue OptEliminatePartiallyRedundantGuards = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue OptFilterProfiledTypes = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue OptDevirtualizeInvokesOptimistically = new OptionValue<>(true); - @Option(help = "") - public static final OptionValue OptPushThroughPi = new OptionValue<>(true); - @Option(help = "Allow backend to emit arithmetic and compares directly against memory.") - public static final OptionValue OptFoldMemory = new OptionValue<>(true); - - - /** - * Counts the various paths taken through snippets. - */ - @Option(help = "") - public static final OptionValue SnippetCounters = new OptionValue<>(false); -} diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/OptimisticOptimizations.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/OptimisticOptimizations.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/OptimisticOptimizations.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,6 +25,7 @@ import java.util.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.*; import com.oracle.graal.debug.*; public final class OptimisticOptimizations { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/InferStamps.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/InferStamps.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/InferStamps.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,10 +22,10 @@ */ package com.oracle.graal.phases.graph; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; public class InferStamps { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,8 +23,8 @@ package com.oracle.graal.phases.schedule; import static com.oracle.graal.api.meta.LocationIdentity.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.nodes.cfg.ControlFlowGraph.*; -import static com.oracle.graal.phases.GraalOptions.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/util/Providers.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/util/Providers.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/util/Providers.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,13 +24,14 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.spi.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.phases.tiers.*; /** * A set of providers, some of which may not be present (i.e., null). */ -public class Providers { +public class Providers implements LIRProviders { private final MetaAccessProvider metaAccess; private final CodeCacheProvider codeCache; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/verify/VerifyUsageWithEquals.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/verify/VerifyUsageWithEquals.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/verify/VerifyUsageWithEquals.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,6 +23,7 @@ package com.oracle.graal.phases.verify; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.type.*; @@ -45,7 +46,7 @@ private boolean isAssignableType(ValueNode node, MetaAccessProvider metaAccess) { if (node.stamp() instanceof ObjectStamp) { ResolvedJavaType valueType = metaAccess.lookupJavaType(klass); - ResolvedJavaType nodeType = ObjectStamp.typeOrNull(node); + ResolvedJavaType nodeType = StampTool.typeOrNull(node); if (nodeType != null && valueType.isAssignableFrom(nodeType)) { return true; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.printer/src/com/oracle/graal/printer/BinaryGraphPrinter.java --- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/BinaryGraphPrinter.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/BinaryGraphPrinter.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.printer; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import java.io.*; import java.nio.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.printer/src/com/oracle/graal/printer/DebugEnvironment.java --- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/DebugEnvironment.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/DebugEnvironment.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,7 +23,7 @@ package com.oracle.graal.printer; import static com.oracle.graal.compiler.GraalDebugConfig.*; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import java.io.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.printer/src/com/oracle/graal/printer/DecompilerDebugDumpHandler.java --- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/DecompilerDebugDumpHandler.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/DecompilerDebugDumpHandler.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.printer; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import java.io.*; import java.util.concurrent.atomic.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.printer/src/com/oracle/graal/printer/GraphPrinterDumpHandler.java --- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/GraphPrinterDumpHandler.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/GraphPrinterDumpHandler.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,7 +23,7 @@ package com.oracle.graal.printer; import static com.oracle.graal.compiler.GraalDebugConfig.*; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import java.io.*; import java.net.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64Substitutions.java --- a/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64Substitutions.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64Substitutions.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,7 +23,7 @@ package com.oracle.graal.replacements.amd64; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements.hsail/src/com/oracle/graal/replacements/hsail/HSAILMathIntrinsicsNode.java --- a/graal/com.oracle.graal.replacements.hsail/src/com/oracle/graal/replacements/hsail/HSAILMathIntrinsicsNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements.hsail/src/com/oracle/graal/replacements/hsail/HSAILMathIntrinsicsNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,6 +24,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.compiler.hsail.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; @@ -31,7 +32,6 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * This node implements HSAIL intrinsics for specific {@link Math} routines. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/ObjectAccessTest.java --- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/ObjectAccessTest.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/ObjectAccessTest.java Tue Apr 22 18:32:08 2014 -0700 @@ -127,7 +127,7 @@ JavaWriteNode write = (JavaWriteNode) graph.start().next(); Assert.assertEquals(graph.getParameter(2), write.value()); Assert.assertEquals(graph.getParameter(0), write.object()); - Assert.assertEquals(FrameState.AFTER_BCI, write.stateAfter().bci); + Assert.assertEquals(BytecodeFrame.AFTER_BCI, write.stateAfter().bci); IndexedLocationNode location = (IndexedLocationNode) write.location(); Assert.assertEquals(kind, location.getValueKind()); diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/PointerTest.java --- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/PointerTest.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/PointerTest.java Tue Apr 22 18:32:08 2014 -0700 @@ -139,7 +139,7 @@ JavaWriteNode write = (JavaWriteNode) cast.next(); Assert.assertEquals(graph.getParameter(2), write.value()); - Assert.assertEquals(FrameState.AFTER_BCI, write.stateAfter().bci); + Assert.assertEquals(BytecodeFrame.AFTER_BCI, write.stateAfter().bci); Assert.assertEquals(cast, write.object()); Assert.assertEquals(graph.getParameter(0), cast.getInput()); diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/BoxingSnippets.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/BoxingSnippets.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/BoxingSnippets.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.replacements; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.replacements.SnippetTemplate.*; import java.lang.reflect.*; @@ -31,13 +31,13 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.api.replacements.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.debug.*; import com.oracle.graal.graph.Node.NodeIntrinsic; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.util.*; import com.oracle.graal.phases.util.*; import com.oracle.graal.replacements.Snippet.Fold; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/CollapseFrameForSingleSideEffectPhase.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/CollapseFrameForSingleSideEffectPhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/CollapseFrameForSingleSideEffectPhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,6 +24,7 @@ import java.util.*; +import com.oracle.graal.api.code.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.util.*; @@ -33,12 +34,12 @@ import com.oracle.graal.phases.graph.ReentrantNodeIterator.NodeIteratorClosure; /** - * This phase ensures that there's a single {@linkplain FrameState#AFTER_BCI collapsed frame state} - * per path. + * This phase ensures that there's a single {@linkplain BytecodeFrame#AFTER_BCI collapsed frame + * state} per path. * * Removes other frame states from {@linkplain StateSplit#hasSideEffect() non-side-effecting} nodes - * in the graph, and replaces them with {@linkplain FrameState#INVALID_FRAMESTATE_BCI invalid frame - * states}. + * in the graph, and replaces them with {@linkplain BytecodeFrame#INVALID_FRAMESTATE_BCI invalid + * frame states}. * * The invalid frame states ensure that no deoptimization to a snippet frame state will happen. */ @@ -176,7 +177,7 @@ if (!unwindSideEffects.contains(returnSideEffect) && !maskedSideEffects.contains(returnSideEffect)) { StateSplit split = (StateSplit) returnSideEffect; if (split.stateAfter() != null) { - split.setStateAfter(graph.add(new FrameState(FrameState.AFTER_BCI))); + split.setStateAfter(graph.add(new FrameState(BytecodeFrame.AFTER_BCI))); } } } @@ -185,7 +186,7 @@ if (!returnSideEffects.contains(unwindSideEffect) && !maskedSideEffects.contains(unwindSideEffect)) { StateSplit split = (StateSplit) unwindSideEffect; if (split.stateAfter() != null) { - split.setStateAfter(graph.add(new FrameState(FrameState.AFTER_EXCEPTION_BCI))); + split.setStateAfter(graph.add(new FrameState(BytecodeFrame.AFTER_EXCEPTION_BCI))); } } } @@ -214,7 +215,7 @@ } private static FrameState createInvalidFrameState(FixedNode node) { - return node.graph().add(new FrameState(FrameState.INVALID_FRAMESTATE_BCI)); + return node.graph().add(new FrameState(BytecodeFrame.INVALID_FRAMESTATE_BCI)); } } } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalMethodSubstitutions.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalMethodSubstitutions.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalMethodSubstitutions.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.replacements; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraphKit.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraphKit.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraphKit.java Tue Apr 22 18:32:08 2014 -0700 @@ -96,7 +96,7 @@ } public InvokeNode createInvoke(Class declaringClass, String name, ValueNode... args) { - return createInvoke(declaringClass, name, InvokeKind.Static, null, FrameState.UNKNOWN_BCI, args); + return createInvoke(declaringClass, name, InvokeKind.Static, null, BytecodeFrame.UNKNOWN_BCI, args); } /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPhase.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -42,7 +42,6 @@ import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.util.*; import com.oracle.graal.phases.*; import com.oracle.graal.phases.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,7 +24,7 @@ import static com.oracle.graal.api.meta.MetaUtil.*; import static com.oracle.graal.compiler.GraalCompiler.*; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import java.lang.reflect.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Tue Apr 22 18:32:08 2014 -0700 @@ -49,7 +49,6 @@ import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.util.*; import com.oracle.graal.phases.common.*; import com.oracle.graal.phases.common.FloatingReadPhase.MemoryMapImpl; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,6 +23,7 @@ package com.oracle.graal.replacements.nodes; 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.*; @@ -30,7 +31,6 @@ import com.oracle.graal.lir.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.util.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitCountNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitCountNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitCountNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,6 +23,7 @@ package com.oracle.graal.replacements.nodes; 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.*; @@ -30,7 +31,6 @@ import com.oracle.graal.lir.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; -import com.oracle.graal.nodes.type.*; public class BitCountNode extends FloatingNode implements LIRGenLowerable, Canonicalizable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanForwardNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanForwardNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanForwardNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,6 +23,7 @@ package com.oracle.graal.replacements.nodes; 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.*; @@ -30,7 +31,6 @@ import com.oracle.graal.lir.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; -import com.oracle.graal.nodes.type.*; public class BitScanForwardNode extends FloatingNode implements LIRGenLowerable, Canonicalizable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanReverseNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanReverseNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanReverseNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,6 +23,7 @@ package com.oracle.graal.replacements.nodes; 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.*; @@ -30,7 +31,6 @@ import com.oracle.graal.lir.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; -import com.oracle.graal.nodes.type.*; public class BitScanReverseNode extends FloatingNode implements LIRGenLowerable, Canonicalizable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectObjectStoreNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectObjectStoreNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectObjectStoreNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,11 +23,11 @@ package com.oracle.graal.replacements.nodes; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.HeapAccess.BarrierType; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * A special purpose store node that differs from {@link UnsafeStoreNode} in that it is not a diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectReadNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectReadNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectReadNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,10 +25,10 @@ import static com.oracle.graal.graph.UnsafeAccess.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * A special purpose store node that differs from {@link UnsafeStoreNode} in that it is not a diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectStoreNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectStoreNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectStoreNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -25,10 +25,10 @@ import static com.oracle.graal.graph.UnsafeAccess.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * A special purpose store node that differs from {@link UnsafeStoreNode} in that it is not a diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ExplodeLoopNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ExplodeLoopNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ExplodeLoopNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,9 +24,9 @@ import java.util.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.replacements.Snippet.VarargsParameter; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,6 +24,7 @@ import static java.lang.reflect.Modifier.*; +import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; import com.oracle.graal.debug.*; @@ -89,7 +90,7 @@ StructuredGraph methodSubstitution = tool.getReplacements().getMethodSubstitution(getTargetMethod()); if (methodSubstitution != null) { methodSubstitution = methodSubstitution.copy(); - if (stateAfter() == null || stateAfter().bci == FrameState.AFTER_BCI) { + if (stateAfter() == null || stateAfter().bci == BytecodeFrame.AFTER_BCI) { /* * handles the case of a MacroNode inside a snippet used for another MacroNode * lowering @@ -173,7 +174,7 @@ if (!call.targetMethod().equals(getTargetMethod())) { throw new GraalInternalError("unexpected invoke %s in snippet", getClass().getSimpleName()); } - assert invoke.stateAfter().bci == FrameState.AFTER_BCI; + assert invoke.stateAfter().bci == BytecodeFrame.AFTER_BCI; // Here we need to fix the bci of the invoke InvokeNode newInvoke = snippetGraph.add(new InvokeNode(invoke.callTarget(), getBci())); newInvoke.setStateAfter(invoke.stateAfter()); diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,12 +24,12 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; public class MathIntrinsicNode extends FloatingNode implements Canonicalizable, ArithmeticLIRLowerable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MemoryAnchorNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MemoryAnchorNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MemoryAnchorNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,12 +22,12 @@ */ package com.oracle.graal.replacements.nodes; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; @NodeInfo(allowedUsageTypes = {InputType.Memory}) public class MemoryAnchorNode extends FixedWithNextNode implements LIRLowerable, MemoryNode, Canonicalizable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReadRegisterNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReadRegisterNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReadRegisterNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,10 +24,10 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Access the value of a specific register. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReverseBytesNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReverseBytesNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReverseBytesNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,6 +23,7 @@ package com.oracle.graal.replacements.nodes; 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.*; @@ -30,7 +31,6 @@ import com.oracle.graal.lir.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; -import com.oracle.graal.nodes.type.*; public class ReverseBytesNode extends FloatingNode implements LIRGenLowerable, Canonicalizable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/WriteRegisterNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/WriteRegisterNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/WriteRegisterNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,10 +24,10 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Changes the value of a specific register. diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.truffle; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.truffle.TruffleCompilerOptions.*; import java.lang.reflect.*; @@ -124,7 +124,16 @@ if (TraceTruffleCompilationHistogram.getValue() && constantReceivers != null) { DebugHistogram histogram = Debug.createHistogram("Expanded Truffle Nodes"); for (Constant c : constantReceivers) { - histogram.add(providers.getMetaAccess().lookupJavaType(c).getName()); + String javaName = MetaUtil.toJavaName(providers.getMetaAccess().lookupJavaType(c), false); + + // The DSL uses nested classes with redundant names - only show the inner class + int index = javaName.indexOf('$'); + if (index != -1) { + javaName = javaName.substring(index + 1); + } + + histogram.add(javaName); + } new DebugHistogramAsciiPrinter(TTY.out().out()).print(histogram); } diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.truffle; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import java.lang.reflect.*; import java.util.*; @@ -251,7 +251,7 @@ if (methodCallTargetNode.targetMethod().isConstructor()) { ResolvedJavaType runtimeException = providers.getMetaAccess().lookupJavaType(RuntimeException.class); ResolvedJavaType controlFlowException = providers.getMetaAccess().lookupJavaType(ControlFlowException.class); - ResolvedJavaType exceptionType = Objects.requireNonNull(ObjectStamp.typeOrNull(methodCallTargetNode.receiver().stamp())); + ResolvedJavaType exceptionType = Objects.requireNonNull(StampTool.typeOrNull(methodCallTargetNode.receiver().stamp())); if (runtimeException.isAssignableFrom(methodCallTargetNode.targetMethod().getDeclaringClass()) && !controlFlowException.isAssignableFrom(exceptionType)) { DeoptimizeNode deoptNode = methodCallTargetNode.graph().add(new DeoptimizeNode(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.UnreachedCode)); FixedNode invokeNode = methodCallTargetNode.invoke().asNode(); diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/LoadIndexedFinalNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/LoadIndexedFinalNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/LoadIndexedFinalNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -59,7 +59,7 @@ } private static Stamp createStamp(ValueNode array, Kind kind) { - ResolvedJavaType type = ObjectStamp.typeOrNull(array); + ResolvedJavaType type = StampTool.typeOrNull(array); if (kind == Kind.Object && type != null) { return StampFactory.declared(type.getComponentType()); } else { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerAddExactNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerAddExactNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerAddExactNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,6 +23,7 @@ package com.oracle.graal.truffle.nodes.arithmetic; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerMulExactNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerMulExactNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerMulExactNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,12 +23,12 @@ package com.oracle.graal.truffle.nodes.arithmetic; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.truffle.api.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerSubExactNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerSubExactNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerSubExactNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,6 +23,7 @@ package com.oracle.graal.truffle.nodes.arithmetic; import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/ForceMaterializeNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/ForceMaterializeNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/ForceMaterializeNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,10 +22,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.type.*; public class ForceMaterializeNode extends FixedWithNextNode implements LIRGenLowerable { diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/NewFrameNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/NewFrameNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/NewFrameNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -34,7 +34,6 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.util.*; import com.oracle.graal.nodes.virtual.*; import com.oracle.graal.truffle.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadFinalNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadFinalNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadFinalNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -24,13 +24,13 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.calc.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.truffle.nodes.*; import com.oracle.truffle.api.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/UnsafeTypeCastMacroNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/UnsafeTypeCastMacroNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/UnsafeTypeCastMacroNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -30,7 +30,6 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.truffle.nodes.asserts.*; import com.oracle.truffle.api.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/OptimizedCallTargetSubstitutions.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/OptimizedCallTargetSubstitutions.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/OptimizedCallTargetSubstitutions.java Tue Apr 22 18:32:08 2014 -0700 @@ -23,8 +23,8 @@ package com.oracle.graal.truffle.substitutions; import com.oracle.graal.api.replacements.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.truffle.*; import com.oracle.graal.truffle.nodes.frame.*; import com.oracle.truffle.api.frame.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/EarlyReadEliminationPhase.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/EarlyReadEliminationPhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/EarlyReadEliminationPhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.virtual.phases.ea; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import com.oracle.graal.nodes.*; import com.oracle.graal.phases.common.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/EffectsClosure.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/EffectsClosure.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/EffectsClosure.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.virtual.phases.ea; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/IterativeInliningPhase.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/IterativeInliningPhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/IterativeInliningPhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,8 +22,8 @@ */ package com.oracle.graal.virtual.phases.ea; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.debug.Debug.*; -import static com.oracle.graal.phases.GraalOptions.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java Tue Apr 22 18:32:08 2014 -0700 @@ -36,7 +36,6 @@ import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.spi.Virtualizable.EscapeState; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.virtual.*; import com.oracle.graal.phases.schedule.*; import com.oracle.graal.phases.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapePhase.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapePhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapePhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.virtual.phases.ea; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.virtual.phases.ea.PartialEscapePhase.Options.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualUtil.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualUtil.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualUtil.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.virtual.phases.ea; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualizerToolImpl.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualizerToolImpl.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualizerToolImpl.java Tue Apr 22 18:32:08 2014 -0700 @@ -22,7 +22,7 @@ */ package com.oracle.graal.virtual.phases.ea; -import static com.oracle.graal.phases.GraalOptions.*; +import static com.oracle.graal.compiler.common.GraalOptions.*; import java.util.*; diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/SnippetLocationNode.java --- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/SnippetLocationNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/SnippetLocationNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -27,12 +27,12 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.api.replacements.*; import com.oracle.graal.compiler.common.*; +import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /** * Location node that can be used inside a snippet without having the elements (including the diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/WordCastNode.java --- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/WordCastNode.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/WordCastNode.java Tue Apr 22 18:32:08 2014 -0700 @@ -28,7 +28,6 @@ import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; import com.oracle.graal.word.phases.*; /** diff -r 417e2ae45b89 -r 041156bb59b2 graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java --- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java Tue Apr 22 18:22:40 2014 -0700 +++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java Tue Apr 22 18:32:08 2014 -0700 @@ -144,7 +144,7 @@ * own and not in the stamp, {@link #changeToWord} does not perform all necessary changes. */ protected void rewriteAccessIndexed(StructuredGraph graph, AccessIndexedNode node) { - ResolvedJavaType arrayType = ObjectStamp.typeOrNull(node.array()); + ResolvedJavaType arrayType = StampTool.typeOrNull(node.array()); /* * There are cases where the array does not have a known type yet, i.e., the type is null. * In that case we assume it is not a word type. @@ -403,7 +403,7 @@ } protected boolean isWord(ValueNode node) { - return isWord(ObjectStamp.typeOrNull(node)); + return isWord(StampTool.typeOrNull(node)); } protected boolean isWord(ResolvedJavaType type) { diff -r 417e2ae45b89 -r 041156bb59b2 mx/mx_graal.py --- a/mx/mx_graal.py Tue Apr 22 18:22:40 2014 -0700 +++ b/mx/mx_graal.py Tue Apr 22 18:32:08 2014 -0700 @@ -1305,10 +1305,10 @@ else: executable = join(libpath, 'c1visualizer', 'bin', 'c1visualizer') - archive = join(libpath, 'c1visualizer.zip') + archive = join(libpath, 'c1visualizer_2014-04-22.zip') if not exists(executable): if not exists(archive): - mx.download(archive, ['https://java.net/downloads/c1visualizer/c1visualizer.zip']) + mx.download(archive, ['https://java.net/downloads/c1visualizer/c1visualizer_2014-04-22.zip']) zf = zipfile.ZipFile(archive, 'r') zf.extractall(libpath) diff -r 417e2ae45b89 -r 041156bb59b2 mx/projects --- a/mx/projects Tue Apr 22 18:22:40 2014 -0700 +++ b/mx/projects Tue Apr 22 18:32:08 2014 -0700 @@ -390,7 +390,7 @@ # graal.phases project@com.oracle.graal.phases@subDir=graal project@com.oracle.graal.phases@sourceDirs=src -project@com.oracle.graal.phases@dependencies=com.oracle.graal.nodes,com.oracle.graal.options +project@com.oracle.graal.phases@dependencies=com.oracle.graal.nodes project@com.oracle.graal.phases@checkstyle=com.oracle.graal.graph project@com.oracle.graal.phases@javaCompliance=1.8 project@com.oracle.graal.phases@workingSets=Graal,Phases @@ -502,7 +502,7 @@ # graal.compiler.common project@com.oracle.graal.compiler.common@subDir=graal project@com.oracle.graal.compiler.common@sourceDirs=src -project@com.oracle.graal.compiler.common@dependencies=com.oracle.graal.api.code +project@com.oracle.graal.compiler.common@dependencies=com.oracle.graal.api.code,com.oracle.graal.options project@com.oracle.graal.compiler.common@checkstyle=com.oracle.graal.graph project@com.oracle.graal.compiler.common@javaCompliance=1.8 project@com.oracle.graal.compiler.common@workingSets=Graal,Java diff -r 417e2ae45b89 -r 041156bb59b2 mxtool/mx.py --- a/mxtool/mx.py Tue Apr 22 18:22:40 2014 -0700 +++ b/mxtool/mx.py Tue Apr 22 18:32:08 2014 -0700 @@ -2058,6 +2058,39 @@ return args return None +def _chunk_files_for_command_line(files, limit=None, pathFunction=None): + """ + Returns a generator for splitting up a list of files into chunks such that the + size of the space separated file paths in a chunk is less than a given limit. + This is used to work around system command line length limits. + """ + chunkSize = 0 + chunkStart = 0 + if limit is None: + commandLinePrefixAllowance = 3000 + if get_os() == 'windows': + # The CreateProcess function on Windows limits the length of a command line to + # 32,768 characters (http://msdn.microsoft.com/en-us/library/ms682425%28VS.85%29.aspx) + limit = 32768 - commandLinePrefixAllowance + else: + # Using just SC_ARG_MAX without extra downwards adjustment + # results in "[Errno 7] Argument list too long" on MacOS. + syslimit = os.sysconf('SC_ARG_MAX') - 20000 + limit = syslimit - commandLinePrefixAllowance + for i in range(len(files)): + path = files[i] if pathFunction is None else pathFunction(files[i]) + size = len(path) + 1 + if chunkSize + size < limit: + chunkSize += size + else: + assert i > chunkStart + yield files[chunkStart:i] + chunkStart = i + chunkSize = 0 + if chunkStart == 0: + assert chunkSize < limit + yield files + def eclipseformat(args): """run the Eclipse Code Formatter on the Java sources @@ -2160,18 +2193,19 @@ if res is not batch: res.javafiles = res.javafiles + batch.javafiles - print "we have: " + str(len(batches)) + " batches" + log("we have: " + str(len(batches)) + " batches") for batch in batches.itervalues(): - run([args.eclipse_exe, - '-nosplash', - '-application', - 'org.eclipse.jdt.core.JavaCodeFormatter', - '-vm', java(batch.javaCompliance).java, - '-config', batch.path] - + [f.path for f in batch.javafiles]) - for fi in batch.javafiles: - if fi.update(batch.removeTrailingWhitespace): - modified.append(fi) + for chunk in _chunk_files_for_command_line(batch.javafiles, pathFunction=lambda f: f.path): + run([args.eclipse_exe, + '-nosplash', + '-application', + 'org.eclipse.jdt.core.JavaCodeFormatter', + '-vm', java(batch.javaCompliance).java, + '-config', batch.path] + + [f.path for f in chunk]) + for fi in chunk: + if fi.update(batch.removeTrailingWhitespace): + modified.append(fi) log('{0} files were modified'.format(len(modified))) @@ -2503,26 +2537,9 @@ log('Running Checkstyle on {0} using {1}...'.format(sourceDir, config)) try: - - # Checkstyle is unable to read the filenames to process from a file, and the - # CreateProcess function on Windows limits the length of a command line to - # 32,768 characters (http://msdn.microsoft.com/en-us/library/ms682425%28VS.85%29.aspx) - # so calling Checkstyle must be done in batches. - while len(javafilelist) != 0: - i = 0 - size = 0 - while i < len(javafilelist): - s = len(javafilelist[i]) + 1 - if size + s < 30000: - size += s - i += 1 - else: - break - - batch = javafilelist[:i] - javafilelist = javafilelist[i:] + for chunk in _chunk_files_for_command_line(javafilelist): try: - run_java(['-Xmx1g', '-jar', library('CHECKSTYLE').get_path(True), '-f', 'xml', '-c', config, '-o', auditfileName] + batch, nonZeroIsFatal=False) + run_java(['-Xmx1g', '-jar', library('CHECKSTYLE').get_path(True), '-f', 'xml', '-c', config, '-o', auditfileName] + chunk, nonZeroIsFatal=False) finally: if exists(auditfileName): errors = [] diff -r 417e2ae45b89 -r 041156bb59b2 src/share/vm/graal/graalCodeInstaller.cpp --- a/src/share/vm/graal/graalCodeInstaller.cpp Tue Apr 22 18:22:40 2014 -0700 +++ b/src/share/vm/graal/graalCodeInstaller.cpp Tue Apr 22 18:32:08 2014 -0700 @@ -676,8 +676,11 @@ oop hotspot_method = BytecodePosition::method(frame); Method* method = getMethodFromHotSpotMethod(hotspot_method); jint bci = BytecodePosition::bci(frame); + if (bci == BytecodeFrame::BEFORE_BCI()) { + bci = SynchronizationEntryBCI; + } bool reexecute; - if (bci == -1 || bci == -2){ + if (bci == SynchronizationEntryBCI){ reexecute = false; } else { Bytecodes::Code code = Bytecodes::java_code_at(method, method->bcp_from(bci)); diff -r 417e2ae45b89 -r 041156bb59b2 src/share/vm/graal/graalJavaAccess.cpp --- a/src/share/vm/graal/graalJavaAccess.cpp Tue Apr 22 18:22:40 2014 -0700 +++ b/src/share/vm/graal/graalJavaAccess.cpp Tue Apr 22 18:32:08 2014 -0700 @@ -59,10 +59,11 @@ #define FLOAT_FIELD(klass, name) FIELD(klass, name, "F", false) #define OOP_FIELD(klass, name, signature) FIELD(klass, name, signature, false) #define STATIC_OOP_FIELD(klass, name, signature) FIELD(klass, name, signature, true) +#define STATIC_INT_FIELD(klass, name) FIELD(klass, name, "I", true) void graal_compute_offsets() { - COMPILER_CLASSES_DO(START_CLASS, END_CLASS, CHAR_FIELD, INT_FIELD, BOOLEAN_FIELD, LONG_FIELD, FLOAT_FIELD, OOP_FIELD, STATIC_OOP_FIELD) + COMPILER_CLASSES_DO(START_CLASS, END_CLASS, CHAR_FIELD, INT_FIELD, BOOLEAN_FIELD, LONG_FIELD, FLOAT_FIELD, OOP_FIELD, STATIC_OOP_FIELD, STATIC_INT_FIELD) guarantee(InstalledCode::_address_offset == sizeof(oopDesc), "codeBlob must be first field!"); } @@ -72,7 +73,7 @@ #define FIELD2(klass, name) int klass::_##name##_offset = 0; #define FIELD3(klass, name, sig) FIELD2(klass, name) -COMPILER_CLASSES_DO(EMPTY1, EMPTY0, FIELD2, FIELD2, FIELD2, FIELD2, FIELD2, FIELD3, FIELD3) +COMPILER_CLASSES_DO(EMPTY1, EMPTY0, FIELD2, FIELD2, FIELD2, FIELD2, FIELD2, FIELD3, FIELD3, FIELD2) diff -r 417e2ae45b89 -r 041156bb59b2 src/share/vm/graal/graalJavaAccess.hpp --- a/src/share/vm/graal/graalJavaAccess.hpp Tue Apr 22 18:22:40 2014 -0700 +++ b/src/share/vm/graal/graalJavaAccess.hpp Tue Apr 22 18:32:08 2014 -0700 @@ -47,7 +47,7 @@ * */ -#define COMPILER_CLASSES_DO(start_class, end_class, char_field, int_field, boolean_field, long_field, float_field, oop_field, static_oop_field) \ +#define COMPILER_CLASSES_DO(start_class, end_class, char_field, int_field, boolean_field, long_field, float_field, oop_field, static_oop_field, static_int_field) \ start_class(HotSpotResolvedObjectType) \ oop_field(HotSpotResolvedObjectType, javaClass, "Ljava/lang/Class;") \ end_class \ @@ -196,6 +196,7 @@ int_field(BytecodeFrame, numLocks) \ boolean_field(BytecodeFrame, rethrowException) \ boolean_field(BytecodeFrame, duringCall) \ + static_int_field(BytecodeFrame, BEFORE_BCI) \ end_class \ start_class(BytecodePosition) \ oop_field(BytecodePosition, caller, "Lcom/oracle/graal/api/code/BytecodePosition;") \ @@ -313,7 +314,19 @@ oop_store((oop*)addr, x); \ } \ } -COMPILER_CLASSES_DO(START_CLASS, END_CLASS, CHAR_FIELD, INT_FIELD, BOOLEAN_FIELD, LONG_FIELD, FLOAT_FIELD, OOP_FIELD, STATIC_OOP_FIELD) +#define STATIC_INT_FIELD(klassName, name) \ + static int _##name##_offset; \ + static int name() { \ + InstanceKlass* ik = InstanceKlass::cast(klassName::klass()); \ + address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \ + return *((jint *)addr); \ + } \ + static void set_##name(int x) { \ + InstanceKlass* ik = InstanceKlass::cast(klassName::klass()); \ + address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \ + *((jint *)addr) = x; \ + } +COMPILER_CLASSES_DO(START_CLASS, END_CLASS, CHAR_FIELD, INT_FIELD, BOOLEAN_FIELD, LONG_FIELD, FLOAT_FIELD, OOP_FIELD, STATIC_OOP_FIELD, STATIC_INT_FIELD) #undef START_CLASS #undef END_CLASS #undef FIELD @@ -324,6 +337,7 @@ #undef FLOAT_FIELD #undef OOP_FIELD #undef STATIC_OOP_FIELD +#undef STATIC_INT_FIELD void compute_offset(int &dest_offset, Klass* klass, const char* name, const char* signature, bool static_field); diff -r 417e2ae45b89 -r 041156bb59b2 src/share/vm/runtime/gpu.cpp --- a/src/share/vm/runtime/gpu.cpp Tue Apr 22 18:22:40 2014 -0700 +++ b/src/share/vm/runtime/gpu.cpp Tue Apr 22 18:32:08 2014 -0700 @@ -32,10 +32,10 @@ void Gpu::initialized_gpu(Gpu* gpu) { // GPUs are always initialized on the same thread so no need for locking guarantee(_initialized_gpus_count < MAX_GPUS, "oob"); + _initialized_gpus[_initialized_gpus_count++] = gpu; if (TraceGPUInteraction) { - tty->print_cr("[GPU] registered initialization of %s (total initialized: %d)", gpu->name(), _initialized_gpus); + tty->print_cr("[GPU] registered initialization of %s (total initialized: %d)", gpu->name(), _initialized_gpus_count); } - _initialized_gpus[_initialized_gpus_count++] = gpu; } void Gpu::safepoint_event(SafepointEvent event) {