Mercurial > hg > graal-compiler
changeset 23274:50079bd51344
Convert deoptimize to guard also when deoptimize is behind (possibly nested) loop exit
author | Christian Wimmer <christian.wimmer@oracle.com> |
---|---|
date | Fri, 08 Jan 2016 13:10:52 -0800 |
parents | 760c71be4a4a |
children | a886e9dc3a47 |
files | graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConvertDeoptimizeToGuardPhase.java |
diffstat | 1 files changed, 6 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConvertDeoptimizeToGuardPhase.java Wed Jan 06 18:18:22 2016 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConvertDeoptimizeToGuardPhase.java Fri Jan 08 13:10:52 2016 -0800 @@ -155,6 +155,12 @@ } private void visitDeoptBegin(AbstractBeginNode deoptBegin, DeoptimizationAction deoptAction, DeoptimizationReason deoptReason, JavaConstant speculation, StructuredGraph graph) { + if (deoptBegin.predecessor() instanceof AbstractBeginNode) { + /* Walk up chains of LoopExitNodes to the "real" BeginNode that leads to deoptimization. */ + visitDeoptBegin((AbstractBeginNode) deoptBegin.predecessor(), deoptAction, deoptReason, speculation, graph); + return; + } + if (deoptBegin instanceof AbstractMergeNode) { AbstractMergeNode mergeNode = (AbstractMergeNode) deoptBegin; Debug.log("Visiting %s", mergeNode);