Mercurial > hg > truffle
changeset 18567:fb558b41d348
Propagate framestate when simplifying DynamicNewArray to NewArray.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Thu, 27 Nov 2014 16:40:45 +0100 |
parents | b650870fe2fe |
children | c91f49e8d5ac |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java |
diffstat | 1 files changed, 10 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java Thu Nov 27 16:27:22 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java Thu Nov 27 16:40:45 2014 +0100 @@ -63,13 +63,21 @@ return elementType; } + protected NewArrayNode forConstantType(ResolvedJavaType type) { + ValueNode len = length(); + NewArrayNode ret = graph().add(NewArrayNode.create(type, len.isAlive() ? len : graph().addOrUniqueWithInputs(len), fillContents())); + if (stateBefore() != null) { + ret.setStateBefore(stateBefore()); + } + return ret; + } + @Override public void simplify(SimplifierTool tool) { if (isAlive() && elementType.isConstant()) { ResolvedJavaType javaType = tool.getConstantReflection().asJavaType(elementType.asConstant()); if (javaType != null && !javaType.equals(tool.getMetaAccess().lookupJavaType(void.class))) { - ValueNode len = length(); - NewArrayNode newArray = graph().add(NewArrayNode.create(javaType, len.isAlive() ? len : graph().addOrUniqueWithInputs(len), fillContents())); + NewArrayNode newArray = forConstantType(javaType); List<Node> snapshot = inputs().snapshot(); graph().replaceFixedWithFixed(this, newArray); for (Node input : snapshot) {