OLD | NEW |
---|---|
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 part of ssa; | 5 part of ssa; |
6 | 6 |
7 class Interceptors { | 7 class Interceptors { |
8 Compiler compiler; | 8 Compiler compiler; |
9 Interceptors(Compiler this.compiler); | 9 Interceptors(Compiler this.compiler); |
10 | 10 |
(...skipping 2031 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2042 bodyEntryBlock.setBlockFlow(info, conditionBlock); | 2042 bodyEntryBlock.setBlockFlow(info, conditionBlock); |
2043 } | 2043 } |
2044 open(conditionBlock); | 2044 open(conditionBlock); |
2045 | 2045 |
2046 visit(node.condition); | 2046 visit(node.condition); |
2047 assert(!isAborted()); | 2047 assert(!isAborted()); |
2048 HInstruction conditionInstruction = popBoolified(); | 2048 HInstruction conditionInstruction = popBoolified(); |
2049 conditionEndBlock = close( | 2049 conditionEndBlock = close( |
2050 new HLoopBranch(conditionInstruction, HLoopBranch.DO_WHILE_LOOP)); | 2050 new HLoopBranch(conditionInstruction, HLoopBranch.DO_WHILE_LOOP)); |
2051 | 2051 |
2052 conditionEndBlock.addSuccessor(loopEntryBlock); // The back-edge. | 2052 HBasicBlock avoidCriticalEdge = addNewBlock(); |
2053 conditionEndBlock.addSuccessor(avoidCriticalEdge); // The back-edge. | |
Lasse Reichstein Nielsen
2012/11/16 15:12:17
Seems like the avoidCriticalEdge's successor is th
ngeoffray
2012/11/16 16:39:45
Done.
| |
2054 open(avoidCriticalEdge); | |
2055 close(new HGoto()); | |
2056 avoidCriticalEdge.addSuccessor(loopEntryBlock); | |
2057 | |
2053 conditionExpression = | 2058 conditionExpression = |
2054 new SubExpression(conditionBlock, conditionEndBlock); | 2059 new SubExpression(conditionBlock, conditionEndBlock); |
2055 } | 2060 } |
2056 | 2061 |
2057 loopEntryBlock.postProcessLoopHeader(); | 2062 loopEntryBlock.postProcessLoopHeader(); |
2058 | 2063 |
2059 endLoop(loopEntryBlock, conditionEndBlock, jumpHandler, localsHandler); | 2064 endLoop(loopEntryBlock, conditionEndBlock, jumpHandler, localsHandler); |
2060 jumpHandler.close(); | 2065 jumpHandler.close(); |
2061 | 2066 |
2062 SubGraph bodyGraph = new SubGraph(bodyEntryBlock, bodyExitBlock); | 2067 SubGraph bodyGraph = new SubGraph(bodyEntryBlock, bodyExitBlock); |
(...skipping 2781 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4844 new HSubGraphBlockInformation(elseBranch.graph)); | 4849 new HSubGraphBlockInformation(elseBranch.graph)); |
4845 | 4850 |
4846 HBasicBlock conditionStartBlock = conditionBranch.block; | 4851 HBasicBlock conditionStartBlock = conditionBranch.block; |
4847 conditionStartBlock.setBlockFlow(info, joinBlock); | 4852 conditionStartBlock.setBlockFlow(info, joinBlock); |
4848 SubGraph conditionGraph = conditionBranch.graph; | 4853 SubGraph conditionGraph = conditionBranch.graph; |
4849 HIf branch = conditionGraph.end.last; | 4854 HIf branch = conditionGraph.end.last; |
4850 assert(branch is HIf); | 4855 assert(branch is HIf); |
4851 branch.blockInformation = conditionStartBlock.blockFlow; | 4856 branch.blockInformation = conditionStartBlock.blockFlow; |
4852 } | 4857 } |
4853 } | 4858 } |
OLD | NEW |