< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/alloc/trace/lsra/TraceLinearScanWalker.java

Print this page
rev 52509 : [mq]: graal

*** 449,466 **** int optimalSplitPos = allocator.getLastLirInstructionId(maxBlock) + 2; if (optimalSplitPos > maxSplitPos) { optimalSplitPos = allocator.getFirstLirInstructionId(maxBlock); } ! // minimal block probability ! double minProbability = maxBlock.probability(); for (int i = toBlockNr - 1; i >= fromBlockNr; i--) { AbstractBlockBase<?> cur = blockAt(i); ! if (cur.probability() < minProbability) { ! // Block with lower probability found. Split at the end of this block. ! minProbability = cur.probability(); optimalSplitPos = allocator.getLastLirInstructionId(cur) + 2; } } assert optimalSplitPos > allocator.maxOpId() || allocator.isBlockBegin(optimalSplitPos) : "algorithm must move split pos to block boundary"; --- 449,466 ---- int optimalSplitPos = allocator.getLastLirInstructionId(maxBlock) + 2; if (optimalSplitPos > maxSplitPos) { optimalSplitPos = allocator.getFirstLirInstructionId(maxBlock); } ! // minimal block frequency ! double minFrequency = maxBlock.getRelativeFrequency(); for (int i = toBlockNr - 1; i >= fromBlockNr; i--) { AbstractBlockBase<?> cur = blockAt(i); ! if (cur.getRelativeFrequency() < minFrequency) { ! // Block with lower frequency found. Split at the end of this block. ! minFrequency = cur.getRelativeFrequency(); optimalSplitPos = allocator.getLastLirInstructionId(cur) + 2; } } assert optimalSplitPos > allocator.maxOpId() || allocator.isBlockBegin(optimalSplitPos) : "algorithm must move split pos to block boundary";
*** 854,873 **** int optimalSplitPos = allocator.getLastLirInstructionId(maxBlock) - 2; if (optimalSplitPos > maxSplitPos) { optimalSplitPos = maxSplitPos; } ! // minimal block probability ! double minProbability = maxBlock.probability(); for (int i = toBlockNr - 1; i >= fromBlockNr; i--) { AbstractBlockBase<?> cur = blockAt(i); ! if (cur.probability() < minProbability) { ! // Block with lower probability found. Split at the end of this block. int opIdBeforeBlockEnd = allocator.getLastLirInstructionId(cur) - 2; if (allocator.getLIR().getLIRforBlock(cur).size() > 2) { ! minProbability = cur.probability(); optimalSplitPos = opIdBeforeBlockEnd; } else { /* * Skip blocks with only LabelOp and BlockEndOp since they cause move ordering * problems. --- 854,873 ---- int optimalSplitPos = allocator.getLastLirInstructionId(maxBlock) - 2; if (optimalSplitPos > maxSplitPos) { optimalSplitPos = maxSplitPos; } ! // minimal block frequency ! double minFrequency = maxBlock.getRelativeFrequency(); for (int i = toBlockNr - 1; i >= fromBlockNr; i--) { AbstractBlockBase<?> cur = blockAt(i); ! if (cur.getRelativeFrequency() < minFrequency) { ! // Block with lower frequency found. Split at the end of this block. int opIdBeforeBlockEnd = allocator.getLastLirInstructionId(cur) - 2; if (allocator.getLIR().getLIRforBlock(cur).size() > 2) { ! minFrequency = cur.getRelativeFrequency(); optimalSplitPos = opIdBeforeBlockEnd; } else { /* * Skip blocks with only LabelOp and BlockEndOp since they cause move ordering * problems.
< prev index next >