Mercurial > hg > graal-jvmci-8
diff jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java @ 23340:22c3bdf28fff
Don't generate LeafType assumptions for isLeaf == true types
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Fri, 01 Apr 2016 10:32:24 -0700 |
parents | a3471785190d |
children | 7ae6a635fad0 |
line wrap: on
line diff
--- a/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java Thu Mar 31 10:21:27 2016 -0700 +++ b/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java Fri Apr 01 10:32:24 2016 -0700 @@ -169,6 +169,10 @@ @Override public AssumptionResult<ResolvedJavaType> findLeafConcreteSubtype() { + if (isLeaf()) { + // No assumptions are required. + return new AssumptionResult<>(this); + } HotSpotVMConfig config = config(); if (isArray()) { ResolvedJavaType elementalType = getElementalType(); @@ -206,8 +210,7 @@ } return null; } - - return new AssumptionResult<>(implementor, new LeafType(implementor), new ConcreteSubtype(this, implementor)); + return concreteSubtype(implementor); } else { HotSpotResolvedObjectTypeImpl type = this; while (type.isAbstract()) { @@ -221,7 +224,7 @@ return null; } if (this.isAbstract()) { - return new AssumptionResult<>(type, new LeafType(type), new ConcreteSubtype(this, type)); + return concreteSubtype(type); } else { assert this.equals(type); return new AssumptionResult<>(type, new LeafType(type)); @@ -229,6 +232,14 @@ } } + private AssumptionResult<ResolvedJavaType> concreteSubtype(HotSpotResolvedObjectTypeImpl type) { + if (type.isLeaf()) { + return new AssumptionResult<>(type, new ConcreteSubtype(this, type)); + } else { + return new AssumptionResult<>(type, new LeafType(type), new ConcreteSubtype(this, type)); + } + } + /** * Returns if type {@code type} is a leaf class. This is the case if the * {@code Klass::_subklass} field of the underlying class is zero.