Mercurial > hg > graal-compiler
changeset 20945:1ed58a90b510
Truffle-DSL: fixed isFrameUsedByAnyGuard() was incomplete
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Tue, 14 Apr 2015 19:23:33 +0200 |
parents | 354b7f1b4acf |
children | 56eb34a5aa22 |
files | graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/NodeData.java |
diffstat | 2 files changed, 17 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java Tue Apr 14 19:23:32 2015 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java Tue Apr 14 19:23:33 2015 +0200 @@ -1792,7 +1792,11 @@ if (specialization.isFallback()) { builder.startIf().startCall("guardFallback"); if (node.isFrameUsedByAnyGuard()) { - builder.string(FRAME_VALUE); + if (currentValues.get(FRAME_VALUE) != null) { + builder.string(FRAME_VALUE); + } else { + builder.nullLiteral(); + } } currentValues.addReferencesTo(builder);
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/NodeData.java Tue Apr 14 19:23:32 2015 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/NodeData.java Tue Apr 14 19:23:33 2015 +0200 @@ -143,8 +143,18 @@ if (!specialization.isReachable()) { continue; } - if (specialization.isFrameUsed()) { - return true; + Parameter frame = specialization.getFrame(); + if (frame != null) { + for (GuardExpression guard : specialization.getGuards()) { + if (guard.getExpression().findBoundVariableElements().contains(frame.getVariableElement())) { + return true; + } + } + for (CacheExpression cache : specialization.getCaches()) { + if (cache.getExpression().findBoundVariableElements().contains(frame.getVariableElement())) { + return true; + } + } } } return false;