Mercurial > hg > graal-compiler
changeset 11462:ff122ed4b9fd
LoweringPhase: insert begin node to make lowering more robust, if the predecessor is not a FixedWithNextNode anymore
fixes GRAAL-436 in a nicer way
author | Bernhard Urban <bernhard.urban@jku.at> |
---|---|
date | Thu, 29 Aug 2013 18:02:20 +0200 |
parents | 2da44804f720 |
children | 93c63975217e |
files | graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java |
diffstat | 1 files changed, 7 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Thu Aug 29 17:28:22 2013 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Thu Aug 29 18:02:20 2013 +0200 @@ -248,11 +248,14 @@ break; } else { Node nextLastFixed = nextNode.predecessor(); - if (nextLastFixed instanceof FixedWithNextNode) { - loweringTool.setLastFixedNode((FixedWithNextNode) nextLastFixed); - } else { - loweringTool.setLastFixedNode((FixedWithNextNode) nextNode); + if (!(nextLastFixed instanceof FixedWithNextNode)) { + // insert begin node, to have a valid last fixed for next lowerable node. + BeginNode begin = node.graph().add(new BeginNode()); + nextLastFixed.replaceFirstSuccessor(nextNode, begin); + begin.setNext(nextNode); + nextLastFixed = begin; } + loweringTool.setLastFixedNode((FixedWithNextNode) nextLastFixed); } } }