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