Mercurial > hg > graal-compiler
changeset 23362:58fa03b34d5f
specialize OSRRootNode for the specific Frame class
author | Lukas Stadler <lukas.stadler@oracle.com> |
---|---|
date | Thu, 28 Jan 2016 18:45:33 +0100 |
parents | 1dc168caec9f |
children | 2a73030c41ad |
files | graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedOSRLoopNode.java |
diffstat | 1 files changed, 6 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedOSRLoopNode.java Thu Jan 28 18:44:59 2016 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedOSRLoopNode.java Thu Jan 28 18:45:33 2016 +0100 @@ -168,7 +168,7 @@ return null; } else { Node parent = getParent(); - OptimizedCallTarget osrTarget = (OptimizedCallTarget) Truffle.getRuntime().createCallTarget(new OSRRootNode(this)); + OptimizedCallTarget osrTarget = (OptimizedCallTarget) Truffle.getRuntime().createCallTarget(new OSRRootNode(this, frame.getClass())); // to avoid a deopt on first call we provide some profiling information osrTarget.profileReturnType(Boolean.TRUE); osrTarget.profileReturnType(Boolean.FALSE); @@ -210,16 +210,19 @@ private static class OSRRootNode extends RootNode { + private final Class<? extends VirtualFrame> clazz; + @Child private OptimizedOSRLoopNode loopNode; - OSRRootNode(OptimizedOSRLoopNode loop) { + OSRRootNode(OptimizedOSRLoopNode loop, Class<? extends VirtualFrame> clazz) { super(TruffleLanguage.class, loop.getSourceSection(), loop.getRootNode().getFrameDescriptor()); this.loopNode = loop; + this.clazz = clazz; } @Override public Object execute(VirtualFrame frame) { - VirtualFrame parentFrame = (VirtualFrame) frame.getArguments()[0]; + VirtualFrame parentFrame = clazz.cast(frame.getArguments()[0]); while (loopNode.getRepeatingNode().executeRepeating(parentFrame)) { if (CompilerDirectives.inInterpreter()) { return Boolean.FALSE;