< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/cfg/ControlFlowGraph.java

Print this page




 575                     probability = multiplyProbabilities(probability, loopBegin.loopFrequency());
 576                 }
 577             }
 578             if (probability < MIN_PROBABILITY) {
 579                 probability = MIN_PROBABILITY;
 580             } else if (probability > MAX_PROBABILITY) {
 581                 probability = MAX_PROBABILITY;
 582             }
 583             block.setProbability(probability);
 584         }
 585 
 586     }
 587 
 588     private void computeLoopInformation() {
 589         loops = new ArrayList<>();
 590         if (graph.hasLoops()) {
 591             Block[] stack = new Block[this.reversePostOrder.length];
 592             for (Block block : reversePostOrder) {
 593                 AbstractBeginNode beginNode = block.getBeginNode();
 594                 if (beginNode instanceof LoopBeginNode) {
 595                     Loop<Block> loop = new HIRLoop(block.getLoop(), loops.size(), block);




 596                     loops.add(loop);
 597                     block.setLoop(loop);
 598                     loop.getBlocks().add(block);
 599 
 600                     LoopBeginNode loopBegin = (LoopBeginNode) beginNode;
 601                     for (LoopEndNode end : loopBegin.loopEnds()) {
 602                         Block endBlock = nodeToBlock.get(end);
 603                         computeLoopBlocks(endBlock, loop, stack, true);
 604                     }
 605 
 606                     if (graph.getGuardsStage() != GuardsStage.AFTER_FSA) {
 607                         for (LoopExitNode exit : loopBegin.loopExits()) {
 608                             Block exitBlock = nodeToBlock.get(exit);
 609                             assert exitBlock.getPredecessorCount() == 1;
 610                             computeLoopBlocks(exitBlock.getFirstPredecessor(), loop, stack, true);
 611                             loop.addExit(exitBlock);
 612                         }
 613 
 614                         // The following loop can add new blocks to the end of the loop's block
 615                         // list.




 575                     probability = multiplyProbabilities(probability, loopBegin.loopFrequency());
 576                 }
 577             }
 578             if (probability < MIN_PROBABILITY) {
 579                 probability = MIN_PROBABILITY;
 580             } else if (probability > MAX_PROBABILITY) {
 581                 probability = MAX_PROBABILITY;
 582             }
 583             block.setProbability(probability);
 584         }
 585 
 586     }
 587 
 588     private void computeLoopInformation() {
 589         loops = new ArrayList<>();
 590         if (graph.hasLoops()) {
 591             Block[] stack = new Block[this.reversePostOrder.length];
 592             for (Block block : reversePostOrder) {
 593                 AbstractBeginNode beginNode = block.getBeginNode();
 594                 if (beginNode instanceof LoopBeginNode) {
 595                     Loop<Block> parent = block.getLoop();
 596                     Loop<Block> loop = new HIRLoop(parent, loops.size(), block);
 597                     if (parent != null) {
 598                         parent.getChildren().add(loop);
 599                     }
 600                     loops.add(loop);
 601                     block.setLoop(loop);
 602                     loop.getBlocks().add(block);
 603 
 604                     LoopBeginNode loopBegin = (LoopBeginNode) beginNode;
 605                     for (LoopEndNode end : loopBegin.loopEnds()) {
 606                         Block endBlock = nodeToBlock.get(end);
 607                         computeLoopBlocks(endBlock, loop, stack, true);
 608                     }
 609 
 610                     if (graph.getGuardsStage() != GuardsStage.AFTER_FSA) {
 611                         for (LoopExitNode exit : loopBegin.loopExits()) {
 612                             Block exitBlock = nodeToBlock.get(exit);
 613                             assert exitBlock.getPredecessorCount() == 1;
 614                             computeLoopBlocks(exitBlock.getFirstPredecessor(), loop, stack, true);
 615                             loop.addExit(exitBlock);
 616                         }
 617 
 618                         // The following loop can add new blocks to the end of the loop's block
 619                         // list.


< prev index next >