Mercurial > hg > graal-compiler
changeset 22532:6ba6a4aef241
Merge
author | Christian Wimmer <christian.wimmer@oracle.com> |
---|---|
date | Fri, 28 Aug 2015 12:19:57 -0700 |
parents | 5b0239e1d562 (current diff) ce2b71115ade (diff) |
children | b28a6a1ac58e |
files | |
diffstat | 15 files changed, 73 insertions(+), 80 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java Fri Aug 28 14:32:42 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java Fri Aug 28 12:19:57 2015 -0700 @@ -964,9 +964,10 @@ if (type != null && type.isArray()) { ResolvedJavaType element = type.getComponentType(); if (element != null && !element.isPrimitive() && !element.getElementalType().isInterface()) { + Assumptions assumptions = object.graph().getAssumptions(); AssumptionResult<ResolvedJavaType> leafType = element.findLeafConcreteSubtype(); - if (leafType != null) { - object.graph().getAssumptions().record(leafType); + if (leafType != null && leafType.canRecordTo(assumptions)) { + leafType.recordTo(assumptions); return ConstantNode.forConstant(read.stamp(), leafType.getResult().getObjectHub(), tool.getMetaAccess()); } }
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/BciBlockMapping.java Fri Aug 28 14:32:42 2015 +0200 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/BciBlockMapping.java Fri Aug 28 12:19:57 2015 -0700 @@ -563,6 +563,7 @@ case BALOAD: case CALOAD: case SALOAD: + case ARRAYLENGTH: case PUTFIELD: case GETFIELD: { ExceptionDispatchBlock handler = handleExceptions(blockMap, bci);
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java Fri Aug 28 14:32:42 2015 +0200 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java Fri Aug 28 12:19:57 2015 -0700 @@ -3619,7 +3619,8 @@ } private void genArrayLength() { - frameState.push(Kind.Int, append(genArrayLength(frameState.pop(Kind.Object)))); + ValueNode array = emitExplicitExceptions(frameState.pop(Kind.Object), null); + frameState.push(Kind.Int, append(genArrayLength(array))); } public ResolvedJavaMethod getMethod() {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeCheckHints.java Fri Aug 28 14:32:42 2015 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeCheckHints.java Fri Aug 28 12:19:57 2015 -0700 @@ -96,14 +96,10 @@ if (targetType != null && targetType.isLeaf()) { exact = targetType; } else { - if (assumptions != null) { - AssumptionResult<ResolvedJavaType> leafConcreteSubtype = targetType == null ? null : targetType.findLeafConcreteSubtype(); - if (leafConcreteSubtype != null) { - assumptions.record(leafConcreteSubtype); - exact = leafConcreteSubtype.getResult(); - } else { - exact = null; - } + AssumptionResult<ResolvedJavaType> leafConcreteSubtype = targetType == null ? null : targetType.findLeafConcreteSubtype(); + if (leafConcreteSubtype != null && leafConcreteSubtype.canRecordTo(assumptions)) { + leafConcreteSubtype.recordTo(assumptions); + exact = leafConcreteSubtype.getResult(); } else { exact = null; }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/GetClassNode.java Fri Aug 28 14:32:42 2015 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/GetClassNode.java Fri Aug 28 12:19:57 2015 -0700 @@ -65,11 +65,12 @@ ResolvedJavaType exactType = null; if (objectStamp.isExactType()) { exactType = objectStamp.type(); - } else if (objectStamp.type() != null && object.graph().getAssumptions() != null) { + } else if (objectStamp.type() != null) { + Assumptions assumptions = object.graph().getAssumptions(); AssumptionResult<ResolvedJavaType> leafConcreteSubtype = objectStamp.type().findLeafConcreteSubtype(); - if (leafConcreteSubtype != null) { + if (leafConcreteSubtype != null && leafConcreteSubtype.canRecordTo(assumptions)) { + leafConcreteSubtype.recordTo(assumptions); exactType = leafConcreteSubtype.getResult(); - object.graph().getAssumptions().record(leafConcreteSubtype); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java Fri Aug 28 14:32:42 2015 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java Fri Aug 28 12:19:57 2015 -0700 @@ -103,11 +103,12 @@ ObjectStamp objectStamp = (ObjectStamp) curValue.stamp(); if (objectStamp.isExactType()) { exactType = objectStamp.type(); - } else if (objectStamp.type() != null && graph != null && graph.getAssumptions() != null) { + } else if (objectStamp.type() != null && graph != null) { + Assumptions assumptions = graph.getAssumptions(); AssumptionResult<ResolvedJavaType> leafConcreteSubtype = objectStamp.type().findLeafConcreteSubtype(); - if (leafConcreteSubtype != null) { + if (leafConcreteSubtype != null && leafConcreteSubtype.canRecordTo(assumptions)) { + leafConcreteSubtype.recordTo(assumptions); exactType = leafConcreteSubtype.getResult(); - graph.getAssumptions().record(leafConcreteSubtype); } } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadMethodNode.java Fri Aug 28 14:32:42 2015 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadMethodNode.java Fri Aug 28 12:19:57 2015 -0700 @@ -74,11 +74,11 @@ if (StampTool.isExactType(object)) { return resolveExactMethod(tool, type); } - Assumptions assumptions = graph().getAssumptions(); - if (type != null && assumptions != null) { + if (type != null) { + Assumptions assumptions = graph().getAssumptions(); AssumptionResult<ResolvedJavaMethod> resolvedMethod = type.findUniqueConcreteMethod(method); - if (resolvedMethod != null && !type.isInterface() && method.getDeclaringClass().isAssignableFrom(type)) { - assumptions.record(resolvedMethod); + if (resolvedMethod != null && resolvedMethod.canRecordTo(assumptions) && !type.isInterface() && method.getDeclaringClass().isAssignableFrom(type)) { + resolvedMethod.recordTo(assumptions); return ConstantNode.forConstant(stamp(), resolvedMethod.getResult().getEncoding(), tool.getMetaAccess()); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Fri Aug 28 14:32:42 2015 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Fri Aug 28 12:19:57 2015 -0700 @@ -76,12 +76,10 @@ return synonym; } assert object.stamp() instanceof ObjectStamp : object; - if (assumptions != null) { - AssumptionResult<ResolvedJavaType> leafConcreteSubtype = type.findLeafConcreteSubtype(); - if (leafConcreteSubtype != null && !leafConcreteSubtype.getResult().equals(type)) { - assumptions.record(leafConcreteSubtype); - type = leafConcreteSubtype.getResult(); - } + AssumptionResult<ResolvedJavaType> leafConcreteSubtype = type.findLeafConcreteSubtype(); + if (leafConcreteSubtype != null && leafConcreteSubtype.canRecordTo(assumptions) && !leafConcreteSubtype.getResult().equals(type)) { + leafConcreteSubtype.recordTo(assumptions); + type = leafConcreteSubtype.getResult(); } return new CheckCastNode(type, object, profile, forStoreCheck); } @@ -180,14 +178,13 @@ return synonym; } + AssumptionResult<ResolvedJavaType> leafConcreteSubtype = type.findLeafConcreteSubtype(); Assumptions assumptions = graph().getAssumptions(); - if (assumptions != null) { - AssumptionResult<ResolvedJavaType> leafConcreteSubtype = type.findLeafConcreteSubtype(); - if (leafConcreteSubtype != null && !leafConcreteSubtype.getResult().equals(type)) { - // Propagate more precise type information to usages of the checkcast. - assumptions.record(leafConcreteSubtype); - return new CheckCastNode(leafConcreteSubtype.getResult(), object, profile, forStoreCheck); - } + if (leafConcreteSubtype != null && leafConcreteSubtype.canRecordTo(assumptions) && !leafConcreteSubtype.getResult().equals(type)) { + // Propagate more precise type information to usages of the checkcast. + leafConcreteSubtype.recordTo(assumptions); + CheckCastNode result = new CheckCastNode(leafConcreteSubtype.getResult(), object, profile, forStoreCheck); + return result; } return this;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java Fri Aug 28 14:32:42 2015 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java Fri Aug 28 12:19:57 2015 -0700 @@ -85,15 +85,14 @@ if (result != null) { return result; } + Assumptions assumptions = graph() == null ? null : graph().getAssumptions(); - if (assumptions != null) { - AssumptionResult<ResolvedJavaType> leafConcreteSubtype = stampType.findLeafConcreteSubtype(); - if (leafConcreteSubtype != null) { - result = checkInstanceOf(forValue, leafConcreteSubtype.getResult(), objectStamp.nonNull(), true); - if (result != null) { - assumptions.record(leafConcreteSubtype); - return result; - } + AssumptionResult<ResolvedJavaType> leafConcreteSubtype = stampType.findLeafConcreteSubtype(); + if (leafConcreteSubtype != null && leafConcreteSubtype.canRecordTo(assumptions)) { + result = checkInstanceOf(forValue, leafConcreteSubtype.getResult(), objectStamp.nonNull(), true); + if (result != null) { + leafConcreteSubtype.recordTo(assumptions); + return result; } } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java Fri Aug 28 14:32:42 2015 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java Fri Aug 28 12:19:57 2015 -0700 @@ -129,22 +129,21 @@ if (resolvedMethod != null && (resolvedMethod.canBeStaticallyBound() || StampTool.isExactType(receiver) || type.isArray())) { return resolvedMethod; } + Assumptions assumptions = receiver.graph().getAssumptions(); - if (assumptions != null) { - AssumptionResult<ResolvedJavaType> leafConcreteSubtype = type.findLeafConcreteSubtype(); - if (leafConcreteSubtype != null) { - ResolvedJavaMethod methodFromUniqueType = leafConcreteSubtype.getResult().resolveConcreteMethod(targetMethod, contextType); - if (methodFromUniqueType != null) { - assumptions.record(leafConcreteSubtype); - return methodFromUniqueType; - } + AssumptionResult<ResolvedJavaType> leafConcreteSubtype = type.findLeafConcreteSubtype(); + if (leafConcreteSubtype != null && leafConcreteSubtype.canRecordTo(assumptions)) { + ResolvedJavaMethod methodFromUniqueType = leafConcreteSubtype.getResult().resolveConcreteMethod(targetMethod, contextType); + if (methodFromUniqueType != null) { + leafConcreteSubtype.recordTo(assumptions); + return methodFromUniqueType; } + } - AssumptionResult<ResolvedJavaMethod> uniqueConcreteMethod = type.findUniqueConcreteMethod(targetMethod); - if (uniqueConcreteMethod != null) { - assumptions.record(uniqueConcreteMethod); - return uniqueConcreteMethod.getResult(); - } + AssumptionResult<ResolvedJavaMethod> uniqueConcreteMethod = type.findUniqueConcreteMethod(targetMethod); + if (uniqueConcreteMethod != null && uniqueConcreteMethod.canRecordTo(assumptions)) { + uniqueConcreteMethod.recordTo(assumptions); + return uniqueConcreteMethod.getResult(); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java Fri Aug 28 14:32:42 2015 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java Fri Aug 28 12:19:57 2015 -0700 @@ -74,10 +74,8 @@ return objectStamp.type().hasFinalizer(); } else if (objectStamp.type() != null) { AssumptionResult<Boolean> result = objectStamp.type().hasFinalizableSubclass(); - if (result.isAssumptionFree()) { - return result.getResult(); - } else if (assumptions != null) { - assumptions.record(result); + if (result.canRecordTo(assumptions)) { + result.recordTo(assumptions); return result.getResult(); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeCheckNode.java Fri Aug 28 14:32:42 2015 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeCheckNode.java Fri Aug 28 12:19:57 2015 -0700 @@ -79,15 +79,14 @@ if (result != null) { return result; } + Assumptions assumptions = graph() == null ? null : graph().getAssumptions(); - if (assumptions != null) { - AssumptionResult<ResolvedJavaType> leafConcreteSubtype = stampType.findLeafConcreteSubtype(); - if (leafConcreteSubtype != null) { - result = findSynonym(type(), leafConcreteSubtype.getResult(), true, true); - if (result != null) { - assumptions.record(leafConcreteSubtype); - return result; - } + AssumptionResult<ResolvedJavaType> leafConcreteSubtype = stampType.findLeafConcreteSubtype(); + if (leafConcreteSubtype != null && leafConcreteSubtype.canRecordTo(assumptions)) { + result = findSynonym(type(), leafConcreteSubtype.getResult(), true, true); + if (result != null) { + leafConcreteSubtype.recordTo(assumptions); + return result; } } }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AssumptionInlineInfo.java Fri Aug 28 14:32:42 2015 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AssumptionInlineInfo.java Fri Aug 28 12:19:57 2015 -0700 @@ -48,13 +48,13 @@ @Override public Collection<Node> inline(Providers providers) { - invoke.asNode().graph().getAssumptions().record(takenAssumption); + takenAssumption.recordTo(invoke.asNode().graph().getAssumptions()); return super.inline(providers); } @Override public void tryToDevirtualizeInvoke(Providers providers) { - invoke.asNode().graph().getAssumptions().record(takenAssumption); + takenAssumption.recordTo(invoke.asNode().graph().getAssumptions()); InliningUtil.replaceInvokeCallTarget(invoke, graph(), InvokeKind.Special, concrete); }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicObjectCloneNode.java Fri Aug 28 14:32:42 2015 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicObjectCloneNode.java Fri Aug 28 12:19:57 2015 -0700 @@ -66,7 +66,7 @@ /* * Looks at the given stamp and determines if it is an exact type (or can be assumed to be an * exact type) and if it is a cloneable type. - * + * * If yes, then the exact type is returned, otherwise it returns null. */ protected static ResolvedJavaType getConcreteType(Stamp stamp, Assumptions assumptions, MetaAccessProvider metaAccess) { @@ -78,12 +78,12 @@ return null; } else if (objectStamp.isExactType()) { return isCloneableType(objectStamp.type(), metaAccess) ? objectStamp.type() : null; - } else if (assumptions != null) { - AssumptionResult<ResolvedJavaType> leafConcreteSubtype = objectStamp.type().findLeafConcreteSubtype(); - if (leafConcreteSubtype != null && isCloneableType(leafConcreteSubtype.getResult(), metaAccess)) { - assumptions.record(leafConcreteSubtype); - return leafConcreteSubtype.getResult(); - } + } + + AssumptionResult<ResolvedJavaType> leafConcreteSubtype = objectStamp.type().findLeafConcreteSubtype(); + if (leafConcreteSubtype != null && leafConcreteSubtype.canRecordTo(assumptions) && isCloneableType(leafConcreteSubtype.getResult(), metaAccess)) { + leafConcreteSubtype.recordTo(assumptions); + return leafConcreteSubtype.getResult(); } return null; }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MethodHandleNode.java Fri Aug 28 14:32:42 2015 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MethodHandleNode.java Fri Aug 28 12:19:57 2015 -0700 @@ -191,15 +191,15 @@ ResolvedJavaType receiverType = StampTool.typeOrNull(receiver.stamp()); if (receiverType != null) { AssumptionResult<ResolvedJavaMethod> concreteMethod = receiverType.findUniqueConcreteMethod(target); - if (concreteMethod != null) { - assumptions.record(concreteMethod); + if (concreteMethod != null && concreteMethod.canRecordTo(assumptions)) { + concreteMethod.recordTo(assumptions); return createTargetInvokeNode(intrinsicMethod, concreteMethod.getResult(), original, bci, returnType, arguments); } } } else { AssumptionResult<ResolvedJavaMethod> concreteMethod = target.getDeclaringClass().findUniqueConcreteMethod(target); - if (concreteMethod != null) { - assumptions.record(concreteMethod); + if (concreteMethod != null && concreteMethod.canRecordTo(assumptions)) { + concreteMethod.recordTo(assumptions); return createTargetInvokeNode(intrinsicMethod, concreteMethod.getResult(), original, bci, returnType, arguments); } }