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.
|