# HG changeset patch # User Thomas Wuerthinger # Date 1423776879 -3600 # Node ID dd3e15cfe5b8a8587eee406fa6524922d466f1a1 # Parent 723142fed3243fe78e3da852062f562e4882d1b1 Canonicalize CheckCastNode to unique concrete subtype on creation. diff -r 723142fed324 -r dd3e15cfe5b8 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 Thu Feb 12 22:33:34 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Thu Feb 12 22:34:39 2015 +0100 @@ -665,7 +665,7 @@ @Override protected ValueNode createCheckCast(ResolvedJavaType type, ValueNode object, JavaTypeProfile profileForTypeCheck, boolean forStoreCheck) { - return CheckCastNode.create(type, object, profileForTypeCheck, forStoreCheck); + return CheckCastNode.create(type, object, profileForTypeCheck, forStoreCheck, currentGraph.getAssumptions()); } @Override diff -r 723142fed324 -r dd3e15cfe5b8 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 Thu Feb 12 22:33:34 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Thu Feb 12 22:34:39 2015 +0100 @@ -63,11 +63,19 @@ this.forStoreCheck = forStoreCheck; } - public static ValueNode create(ResolvedJavaType type, ValueNode object, JavaTypeProfile profile, boolean forStoreCheck) { + public static ValueNode create(ResolvedJavaType inputType, ValueNode object, JavaTypeProfile profile, boolean forStoreCheck, Assumptions assumptions) { + ResolvedJavaType type = inputType; ValueNode synonym = findSynonym(type, object); if (synonym != null) { return synonym; } + if (assumptions != null) { + ResolvedJavaType uniqueConcreteType = type.findUniqueConcreteSubtype(); + if (uniqueConcreteType != null) { + assumptions.recordConcreteSubtype(type, uniqueConcreteType); + type = uniqueConcreteType; + } + } return new CheckCastNode(type, object, profile, forStoreCheck); }