Mercurial > hg > graal-jvmci-8
changeset 19337:dd3e15cfe5b8
Canonicalize CheckCastNode to unique concrete subtype on creation.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Thu, 12 Feb 2015 22:34:39 +0100 |
parents | 723142fed324 |
children | 1e5906acebb7 |
files | graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java |
diffstat | 2 files changed, 10 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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); }