# HG changeset patch # User Thomas Wuerthinger # Date 1425906842 -3600 # Node ID 70d565f6e127bf5042f9c681e8cdeb10bea8d14a # Parent 1a9bfa2c3cc9082420480db2caedf91ed10f3878 Convert API for tryFold from Boolean return value to TriState return value. diff -r 1a9bfa2c3cc9 -r 70d565f6e127 graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/JavaTypeProfile.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/JavaTypeProfile.java Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/JavaTypeProfile.java Mon Mar 09 14:14:02 2015 +0100 @@ -25,7 +25,6 @@ import java.util.*; import com.oracle.graal.api.meta.JavaTypeProfile.ProfiledType; -import com.oracle.graal.api.meta.ProfilingInfo.TriState; /** * This profile object represents the type profile at a specific BCI. The precision of the supplied diff -r 1a9bfa2c3cc9 -r 70d565f6e127 graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ProfilingInfo.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ProfilingInfo.java Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ProfilingInfo.java Mon Mar 09 14:14:02 2015 +0100 @@ -31,34 +31,6 @@ public interface ProfilingInfo { /** - * Represents the three possibilities that an exception was seen at a specific BCI. - */ - public enum TriState { - TRUE, - FALSE, - UNKNOWN; - - public static TriState get(boolean value) { - return value ? TRUE : FALSE; - } - - /** - * This is optimistic about {@link #UNKNOWN} (it prefers known values over {@link #UNKNOWN}) - * and pesimistic about known (it perfers {@link #TRUE} over {@link #FALSE}). - */ - public static TriState merge(TriState a, TriState b) { - if (a == TRUE || b == TRUE) { - return TRUE; - } - if (a == FALSE || b == FALSE) { - return FALSE; - } - assert a == UNKNOWN && b == UNKNOWN; - return UNKNOWN; - } - } - - /** * Returns the length of the bytecodes associated with this profile. */ int getCodeSize(); diff -r 1a9bfa2c3cc9 -r 70d565f6e127 graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/TriState.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/TriState.java Mon Mar 09 14:14:02 2015 +0100 @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2012, 2015, 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.api.meta; + +/** + * Represents the three possibilities that an exception was seen at a specific BCI. + */ +public enum TriState { + TRUE, + FALSE, + UNKNOWN; + + public static TriState get(boolean value) { + return value ? TRUE : FALSE; + } + + /** + * This is optimistic about {@link #UNKNOWN} (it prefers known values over {@link #UNKNOWN}) and + * pesimistic about known (it perfers {@link #TRUE} over {@link #FALSE}). + */ + public static TriState merge(TriState a, TriState b) { + if (a == TRUE || b == TRUE) { + return TRUE; + } + if (a == FALSE || b == FALSE) { + return FALSE; + } + assert a == UNKNOWN && b == UNKNOWN; + return UNKNOWN; + } + + public boolean isTrue() { + return this == TRUE; + } + + public boolean isFalse() { + return this == FALSE; + } + + public boolean isUnknown() { + return this == UNKNOWN; + } + + public boolean isKnown() { + return this != UNKNOWN; + } + + public boolean toBoolean() { + if (isTrue()) { + return true; + } else if (isFalse()) { + return false; + } else { + throw new IllegalStateException("Cannot convert to boolean, TriState is in an unknown state"); + } + } +} diff -r 1a9bfa2c3cc9 -r 70d565f6e127 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ProfilingInfoTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ProfilingInfoTest.java Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ProfilingInfoTest.java Mon Mar 09 14:14:02 2015 +0100 @@ -27,7 +27,6 @@ import org.junit.*; import com.oracle.graal.api.meta.*; -import com.oracle.graal.api.meta.ProfilingInfo.TriState; /** * Tests profiling information provided by the runtime. diff -r 1a9bfa2c3cc9 -r 70d565f6e127 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 Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Mon Mar 09 14:14:02 2015 +0100 @@ -32,7 +32,6 @@ import com.oracle.graal.api.code.CompilationResult.ConstantReference; import com.oracle.graal.api.code.CompilationResult.DataPatch; import com.oracle.graal.api.meta.*; -import com.oracle.graal.api.meta.ProfilingInfo.TriState; import com.oracle.graal.compiler.LIRGenerationPhase.LIRGenerationContext; import com.oracle.graal.compiler.common.alloc.*; import com.oracle.graal.compiler.common.cfg.*; diff -r 1a9bfa2c3cc9 -r 70d565f6e127 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 Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorld.java Mon Mar 09 14:14:02 2015 +0100 @@ -34,7 +34,6 @@ import java.util.jar.*; import com.oracle.graal.api.meta.*; -import com.oracle.graal.api.meta.ProfilingInfo.TriState; import com.oracle.graal.bytecode.*; import com.oracle.graal.compiler.common.*; import com.oracle.graal.debug.*; diff -r 1a9bfa2c3cc9 -r 70d565f6e127 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodData.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodData.java Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodData.java Mon Mar 09 14:14:02 2015 +0100 @@ -33,7 +33,6 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.api.meta.JavaMethodProfile.ProfiledMethod; import com.oracle.graal.api.meta.JavaTypeProfile.ProfiledType; -import com.oracle.graal.api.meta.ProfilingInfo.TriState; import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.meta.HotSpotMethodDataAccessor.Tag; diff -r 1a9bfa2c3cc9 -r 70d565f6e127 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodDataAccessor.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodDataAccessor.java Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodDataAccessor.java Mon Mar 09 14:14:02 2015 +0100 @@ -25,7 +25,6 @@ import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; import com.oracle.graal.api.meta.*; -import com.oracle.graal.api.meta.ProfilingInfo.TriState; import com.oracle.graal.hotspot.*; /** diff -r 1a9bfa2c3cc9 -r 70d565f6e127 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethodImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethodImpl.java Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethodImpl.java Mon Mar 09 14:14:02 2015 +0100 @@ -33,7 +33,6 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; -import com.oracle.graal.api.meta.ProfilingInfo.TriState; import com.oracle.graal.debug.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.debug.*; diff -r 1a9bfa2c3cc9 -r 70d565f6e127 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nfi/HotSpotNativeFunctionInterface.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nfi/HotSpotNativeFunctionInterface.java Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nfi/HotSpotNativeFunctionInterface.java Mon Mar 09 14:14:02 2015 +0100 @@ -29,7 +29,6 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.code.CallingConvention.Type; import com.oracle.graal.api.meta.*; -import com.oracle.graal.api.meta.ProfilingInfo.TriState; import com.oracle.graal.compiler.*; import com.oracle.graal.compiler.target.*; import com.oracle.graal.debug.*; diff -r 1a9bfa2c3cc9 -r 70d565f6e127 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 Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java Mon Mar 09 14:14:02 2015 +0100 @@ -31,7 +31,6 @@ 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.*; import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.hotspot.meta.*; diff -r 1a9bfa2c3cc9 -r 70d565f6e127 graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java Mon Mar 09 14:14:02 2015 +0100 @@ -31,7 +31,6 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; -import com.oracle.graal.api.meta.ProfilingInfo.TriState; import com.oracle.graal.bytecode.*; import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.calc.*; diff -r 1a9bfa2c3cc9 -r 70d565f6e127 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 Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Mon Mar 09 14:14:02 2015 +0100 @@ -34,7 +34,6 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; -import com.oracle.graal.api.meta.ProfilingInfo.TriState; import com.oracle.graal.api.replacements.*; import com.oracle.graal.bytecode.*; import com.oracle.graal.compiler.common.*; diff -r 1a9bfa2c3cc9 -r 70d565f6e127 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BinaryOpLogicNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BinaryOpLogicNode.java Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BinaryOpLogicNode.java Mon Mar 09 14:14:02 2015 +0100 @@ -22,6 +22,7 @@ */ 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.*; @@ -89,5 +90,5 @@ public abstract Stamp getSucceedingStampForY(boolean negated); - public abstract Boolean tryFold(Stamp xStamp, Stamp yStamp); + public abstract TriState tryFold(Stamp xStamp, Stamp yStamp); } diff -r 1a9bfa2c3cc9 -r 70d565f6e127 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 Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java Mon Mar 09 14:14:02 2015 +0100 @@ -26,7 +26,6 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.api.meta.JavaTypeProfile.ProfiledType; -import com.oracle.graal.api.meta.ProfilingInfo.TriState; import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.calc.*; import com.oracle.graal.compiler.common.type.*; diff -r 1a9bfa2c3cc9 -r 70d565f6e127 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnaryOpLogicNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnaryOpLogicNode.java Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnaryOpLogicNode.java Mon Mar 09 14:14:02 2015 +0100 @@ -22,6 +22,7 @@ */ 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.*; @@ -50,5 +51,5 @@ public abstract Stamp getSucceedingStampForValue(boolean negated); - public abstract Boolean tryFold(Stamp valueStamp); + public abstract TriState tryFold(Stamp valueStamp); } diff -r 1a9bfa2c3cc9 -r 70d565f6e127 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 Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatEqualsNode.java Mon Mar 09 14:14:02 2015 +0100 @@ -99,16 +99,16 @@ } @Override - public Boolean tryFold(Stamp xStampGeneric, Stamp yStampGeneric) { + public TriState tryFold(Stamp xStampGeneric, Stamp yStampGeneric) { if (xStampGeneric instanceof FloatStamp && yStampGeneric instanceof FloatStamp) { FloatStamp xStamp = (FloatStamp) xStampGeneric; FloatStamp yStamp = (FloatStamp) yStampGeneric; if (xStamp.alwaysDistinct(yStamp)) { - return false; + return TriState.FALSE; } else if (xStamp.neverDistinct(yStamp)) { - return true; + return TriState.TRUE; } } - return null; + return TriState.UNKNOWN; } } diff -r 1a9bfa2c3cc9 -r 70d565f6e127 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 Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatLessThanNode.java Mon Mar 09 14:14:02 2015 +0100 @@ -32,6 +32,8 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.util.*; +import edu.umd.cs.findbugs.annotations.*; + @NodeInfo(shortName = "<") public final class FloatLessThanNode extends CompareNode { public static final NodeClass TYPE = NodeClass.create(FloatLessThanNode.class); @@ -84,7 +86,8 @@ } @Override - public Boolean tryFold(Stamp xStampGeneric, Stamp yStampGeneric) { + @SuppressFBWarnings(value = "NP_BOOLEAN_RETURN_NULL", justification = "null indicates no folding possible") + public TriState tryFold(Stamp xStampGeneric, Stamp yStampGeneric) { return null; } } diff -r 1a9bfa2c3cc9 -r 70d565f6e127 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowNode.java Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowNode.java Mon Mar 09 14:14:02 2015 +0100 @@ -170,20 +170,20 @@ } @Override - public Boolean tryFold(Stamp xStampGeneric, Stamp yStampGeneric) { + public TriState tryFold(Stamp xStampGeneric, Stamp yStampGeneric) { if (xStampGeneric instanceof IntegerStamp) { IntegerStamp xStamp = (IntegerStamp) xStampGeneric; if (yStampGeneric instanceof IntegerStamp) { IntegerStamp yStamp = (IntegerStamp) yStampGeneric; if (yStamp.isPositive()) { if (xStamp.isPositive() && xStamp.upperBound() < yStamp.lowerBound()) { - return true; + return TriState.TRUE; } else if (xStamp.isStrictlyNegative() || xStamp.lowerBound() >= yStamp.upperBound()) { - return false; + return TriState.FALSE; } } } } - return null; + return TriState.UNKNOWN; } } diff -r 1a9bfa2c3cc9 -r 70d565f6e127 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 Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java Mon Mar 09 14:14:02 2015 +0100 @@ -172,14 +172,14 @@ } @Override - public Boolean tryFold(Stamp xStampGeneric, Stamp yStampGeneric) { + public TriState tryFold(Stamp xStampGeneric, Stamp yStampGeneric) { if (xStampGeneric instanceof IntegerStamp && yStampGeneric instanceof IntegerStamp) { IntegerStamp xStamp = (IntegerStamp) xStampGeneric; IntegerStamp yStamp = (IntegerStamp) yStampGeneric; if (xStamp.alwaysDistinct(yStamp)) { - return false; + return TriState.FALSE; } else if (xStamp.neverDistinct(yStamp)) { - return true; + return TriState.TRUE; } } return null; diff -r 1a9bfa2c3cc9 -r 70d565f6e127 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 Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java Mon Mar 09 14:14:02 2015 +0100 @@ -183,17 +183,17 @@ } @Override - public Boolean tryFold(Stamp xStampGeneric, Stamp yStampGeneric) { + public TriState tryFold(Stamp xStampGeneric, Stamp yStampGeneric) { if (xStampGeneric instanceof IntegerStamp && yStampGeneric instanceof IntegerStamp) { IntegerStamp xStamp = (IntegerStamp) xStampGeneric; IntegerStamp yStamp = (IntegerStamp) yStampGeneric; if (xStamp.upperBound() < yStamp.lowerBound()) { - return true; + return TriState.TRUE; } if (xStamp.lowerBound() >= yStamp.upperBound()) { - return false; + return TriState.FALSE; } } - return null; + return TriState.UNKNOWN; } } diff -r 1a9bfa2c3cc9 -r 70d565f6e127 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 Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java Mon Mar 09 14:14:02 2015 +0100 @@ -22,6 +22,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.Canonicalizable.BinaryCommutative; @@ -70,7 +71,7 @@ } @Override - public Boolean tryFold(Stamp xStampGeneric, Stamp yStampGeneric) { - return null; + public TriState tryFold(Stamp xStampGeneric, Stamp yStampGeneric) { + return TriState.UNKNOWN; } } diff -r 1a9bfa2c3cc9 -r 70d565f6e127 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 Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IsNullNode.java Mon Mar 09 14:14:02 2015 +0100 @@ -22,6 +22,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.*; @@ -93,15 +94,15 @@ } @Override - public Boolean tryFold(Stamp valueStamp) { + public TriState tryFold(Stamp valueStamp) { if (valueStamp instanceof ObjectStamp) { ObjectStamp objectStamp = (ObjectStamp) valueStamp; if (objectStamp.alwaysNull()) { - return true; + return TriState.TRUE; } else if (objectStamp.nonNull()) { - return false; + return TriState.FALSE; } } - return null; + return TriState.UNKNOWN; } } diff -r 1a9bfa2c3cc9 -r 70d565f6e127 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/PointerEqualsNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/PointerEqualsNode.java Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/PointerEqualsNode.java Mon Mar 09 14:14:02 2015 +0100 @@ -22,6 +22,7 @@ */ package com.oracle.graal.nodes.calc; +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.*; @@ -99,16 +100,16 @@ } @Override - public Boolean tryFold(Stamp xStampGeneric, Stamp yStampGeneric) { + public TriState tryFold(Stamp xStampGeneric, Stamp yStampGeneric) { if (xStampGeneric instanceof ObjectStamp && yStampGeneric instanceof ObjectStamp) { ObjectStamp xStamp = (ObjectStamp) xStampGeneric; ObjectStamp yStamp = (ObjectStamp) yStampGeneric; if (xStamp.alwaysDistinct(yStamp)) { - return false; + return TriState.FALSE; } else if (xStamp.neverDistinct(yStamp)) { - return true; + return TriState.TRUE; } } - return null; + return TriState.UNKNOWN; } } diff -r 1a9bfa2c3cc9 -r 70d565f6e127 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 Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Mon Mar 09 14:14:02 2015 +0100 @@ -28,7 +28,6 @@ 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.graph.*; import com.oracle.graal.graph.spi.*; @@ -240,16 +239,16 @@ return object; } - public Boolean tryFold(Stamp testStamp) { + public TriState tryFold(Stamp testStamp) { if (testStamp instanceof ObjectStamp) { ObjectStamp objectStamp = (ObjectStamp) testStamp; ResolvedJavaType objectType = objectStamp.type(); if (objectType != null && type.isAssignableFrom(objectType)) { - return true; + return TriState.TRUE; } else if (objectStamp.alwaysNull()) { - return true; + return TriState.TRUE; } } - return null; + return TriState.UNKNOWN; } } diff -r 1a9bfa2c3cc9 -r 70d565f6e127 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 Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java Mon Mar 09 14:14:02 2015 +0100 @@ -171,11 +171,11 @@ } @Override - public Boolean tryFold(Stamp valueStamp) { + public TriState tryFold(Stamp valueStamp) { if (valueStamp instanceof ObjectStamp) { ObjectStamp objectStamp = (ObjectStamp) valueStamp; if (objectStamp.alwaysNull()) { - return false; + return TriState.FALSE; } ResolvedJavaType objectType = objectStamp.type(); @@ -183,15 +183,15 @@ ResolvedJavaType instanceofType = type; if (instanceofType.isAssignableFrom(objectType)) { if (objectStamp.nonNull()) { - return true; + return TriState.TRUE; } } else { if (objectStamp.isExactType()) { - return false; + return TriState.FALSE; } else { boolean superType = objectType.isAssignableFrom(instanceofType); if (!superType && !objectType.isInterface() && !instanceofType.isInterface()) { - return false; + return TriState.FALSE; } } } diff -r 1a9bfa2c3cc9 -r 70d565f6e127 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DominatorConditionalEliminationPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DominatorConditionalEliminationPhase.java Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DominatorConditionalEliminationPhase.java Mon Mar 09 14:14:02 2015 +0100 @@ -28,6 +28,7 @@ import java.util.*; import java.util.function.*; +import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.cfg.*; import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.debug.*; @@ -295,9 +296,9 @@ ValueNode value = unaryLogicNode.getValue(); for (InfoElement infoElement : getInfoElements(value)) { Stamp stamp = infoElement.getStamp(); - Boolean result = unaryLogicNode.tryFold(stamp); - if (result != null) { - return rewireGuards(infoElement.getGuard(), result, rewireGuardFunction); + TriState result = unaryLogicNode.tryFold(stamp); + if (result.isKnown()) { + return rewireGuards(infoElement.getGuard(), result.toBoolean(), rewireGuardFunction); } } } else if (node instanceof BinaryOpLogicNode) { @@ -313,24 +314,24 @@ ValueNode x = binaryOpLogicNode.getX(); ValueNode y = binaryOpLogicNode.getY(); for (InfoElement infoElement : getInfoElements(x)) { - Boolean result = binaryOpLogicNode.tryFold(infoElement.getStamp(), y.stamp()); - if (result != null) { - return rewireGuards(infoElement.getGuard(), result, rewireGuardFunction); + TriState result = binaryOpLogicNode.tryFold(infoElement.getStamp(), y.stamp()); + if (result.isKnown()) { + return rewireGuards(infoElement.getGuard(), result.toBoolean(), rewireGuardFunction); } } for (InfoElement infoElement : getInfoElements(y)) { - Boolean result = binaryOpLogicNode.tryFold(x.stamp(), infoElement.getStamp()); - if (result != null) { - return rewireGuards(infoElement.getGuard(), result, rewireGuardFunction); + TriState result = binaryOpLogicNode.tryFold(x.stamp(), infoElement.getStamp()); + if (result.isKnown()) { + return rewireGuards(infoElement.getGuard(), result.toBoolean(), rewireGuardFunction); } } } else if (node instanceof CheckCastNode) { CheckCastNode checkCastNode = (CheckCastNode) node; for (InfoElement infoElement : getInfoElements(checkCastNode.object())) { - Boolean result = checkCastNode.tryFold(infoElement.getStamp()); - if (result != null) { - return rewireGuards(infoElement.getGuard(), result, rewireGuardFunction); + TriState result = checkCastNode.tryFold(infoElement.getStamp()); + if (result.isKnown()) { + return rewireGuards(infoElement.getGuard(), result.toBoolean(), rewireGuardFunction); } } } else if (node instanceof ShortCircuitOrNode) { diff -r 1a9bfa2c3cc9 -r 70d565f6e127 graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/TypeCheckTest.java --- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/TypeCheckTest.java Mon Mar 09 12:32:48 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/TypeCheckTest.java Mon Mar 09 14:14:02 2015 +0100 @@ -25,7 +25,6 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.api.meta.JavaTypeProfile.ProfiledType; -import com.oracle.graal.api.meta.ProfilingInfo.TriState; import com.oracle.graal.compiler.test.*; import com.oracle.graal.nodes.*;