Mercurial > hg > graal-compiler
changeset 22427:f6a2cf072e8b
Don't introduce profiled checkcast if original checkcast would fold away
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Mon, 10 Aug 2015 16:22:59 -0700 |
parents | b20e743478d3 |
children | b8d59cd8a71b |
files | graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java |
diffstat | 2 files changed, 5 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java Mon Aug 10 16:22:43 2015 -0700 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java Mon Aug 10 16:22:59 2015 -0700 @@ -2969,7 +2969,10 @@ ValueNode checkCastNode = null; if (profile != null) { - if (profile.getNullSeen().isFalse()) { + if (CheckCastNode.findSynonym(resolvedType, object) == object) { + // Don't insert a profiled type check if the checkcast would simply go away + checkCastNode = object; + } else if (profile.getNullSeen().isFalse()) { object = appendNullCheck(object); ResolvedJavaType singleType = profile.asSingleType(); if (singleType != null) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Mon Aug 10 16:22:43 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Mon Aug 10 16:22:59 2015 -0700 @@ -193,7 +193,7 @@ return this; } - protected static ValueNode findSynonym(ResolvedJavaType type, ValueNode object) { + public static ValueNode findSynonym(ResolvedJavaType type, ValueNode 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