src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BciBlockMapping.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
hotspot Cdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BciBlockMapping.java
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BciBlockMapping.java
Print this page
*** 91,101 ****
import org.graalvm.compiler.bytecode.BytecodeStream;
import org.graalvm.compiler.bytecode.BytecodeSwitch;
import org.graalvm.compiler.bytecode.BytecodeTableSwitch;
import org.graalvm.compiler.bytecode.Bytecodes;
import org.graalvm.compiler.core.common.PermanentBailoutException;
! import org.graalvm.compiler.debug.Debug;
import org.graalvm.compiler.options.OptionValues;
import org.graalvm.util.EconomicMap;
import org.graalvm.util.Equivalence;
import jdk.vm.ci.code.BytecodeFrame;
--- 91,101 ----
import org.graalvm.compiler.bytecode.BytecodeStream;
import org.graalvm.compiler.bytecode.BytecodeSwitch;
import org.graalvm.compiler.bytecode.BytecodeTableSwitch;
import org.graalvm.compiler.bytecode.Bytecodes;
import org.graalvm.compiler.core.common.PermanentBailoutException;
! import org.graalvm.compiler.debug.DebugContext;
import org.graalvm.compiler.options.OptionValues;
import org.graalvm.util.EconomicMap;
import org.graalvm.util.Equivalence;
import jdk.vm.ci.code.BytecodeFrame;
*** 435,450 ****
private static final int LOOP_HEADER_MAX_CAPACITY = Long.SIZE;
private static final int LOOP_HEADER_INITIAL_CAPACITY = 4;
private int blocksNotYetAssignedId;
/**
* Creates a new BlockMap instance from {@code code}.
*/
! private BciBlockMapping(Bytecode code) {
this.code = code;
this.exceptionHandlers = code.getExceptionHandlers();
}
public BciBlock[] getBlocks() {
return this.blocks;
--- 435,452 ----
private static final int LOOP_HEADER_MAX_CAPACITY = Long.SIZE;
private static final int LOOP_HEADER_INITIAL_CAPACITY = 4;
private int blocksNotYetAssignedId;
+ private final DebugContext debug;
/**
* Creates a new BlockMap instance from {@code code}.
*/
! private BciBlockMapping(Bytecode code, DebugContext debug) {
this.code = code;
+ this.debug = debug;
this.exceptionHandlers = code.getExceptionHandlers();
}
public BciBlock[] getBlocks() {
return this.blocks;
*** 462,481 ****
if (!SupportJsrBytecodes.getValue(options)) {
throw new JsrNotSupportedBailout("jsr/ret parsing disabled");
}
createJsrAlternatives(blockMap, blockMap[0]);
}
! if (Debug.isLogEnabled()) {
this.log(blockMap, "Before BlockOrder");
}
computeBlockOrder(blockMap);
fixLoopBits(blockMap);
assert verify();
startBlock = blockMap[0];
! if (Debug.isLogEnabled()) {
this.log(blockMap, "Before LivenessAnalysis");
}
}
private boolean verify() {
--- 464,483 ----
if (!SupportJsrBytecodes.getValue(options)) {
throw new JsrNotSupportedBailout("jsr/ret parsing disabled");
}
createJsrAlternatives(blockMap, blockMap[0]);
}
! if (debug.isLogEnabled()) {
this.log(blockMap, "Before BlockOrder");
}
computeBlockOrder(blockMap);
fixLoopBits(blockMap);
assert verify();
startBlock = blockMap[0];
! if (debug.isLogEnabled()) {
this.log(blockMap, "Before LivenessAnalysis");
}
}
private boolean verify() {
*** 701,711 ****
if (block.endsWithRet()) {
block.setRetSuccessor(blockMap[scope.nextReturnAddress()]);
block.addSuccessor(block.getRetSuccessor());
assert block.getRetSuccessor() != block.getJsrSuccessor();
}
! Debug.log("JSR alternatives block %s sux %s jsrSux %s retSux %s jsrScope %s", block, block.getSuccessors(), block.getJsrSuccessor(), block.getRetSuccessor(), block.getJsrScope());
if (block.getJsrSuccessor() != null || !scope.isEmpty()) {
for (int i = 0; i < block.getSuccessorCount(); i++) {
BciBlock successor = block.getSuccessor(i);
JsrScope nextScope = scope;
--- 703,713 ----
if (block.endsWithRet()) {
block.setRetSuccessor(blockMap[scope.nextReturnAddress()]);
block.addSuccessor(block.getRetSuccessor());
assert block.getRetSuccessor() != block.getJsrSuccessor();
}
! debug.log("JSR alternatives block %s sux %s jsrSux %s retSux %s jsrScope %s", block, block.getSuccessors(), block.getJsrSuccessor(), block.getRetSuccessor(), block.getJsrScope());
if (block.getJsrSuccessor() != null || !scope.isEmpty()) {
for (int i = 0; i < block.getSuccessorCount(); i++) {
BciBlock successor = block.getSuccessor(i);
JsrScope nextScope = scope;
*** 868,880 ****
loopHeader.loopEnd = endOfLoop;
return next;
}
public void log(BciBlock[] blockMap, String name) {
! if (Debug.isLogEnabled()) {
String n = System.lineSeparator();
! StringBuilder sb = new StringBuilder(Debug.currentScope()).append("BlockMap ").append(name).append(" :");
sb.append(n);
Iterable<BciBlock> it;
if (blocks == null) {
it = new HashSet<>(Arrays.asList(blockMap));
} else {
--- 870,882 ----
loopHeader.loopEnd = endOfLoop;
return next;
}
public void log(BciBlock[] blockMap, String name) {
! if (debug.isLogEnabled()) {
String n = System.lineSeparator();
! StringBuilder sb = new StringBuilder(debug.getCurrentScopeName()).append("BlockMap ").append(name).append(" :");
sb.append(n);
Iterable<BciBlock> it;
if (blocks == null) {
it = new HashSet<>(Arrays.asList(blockMap));
} else {
*** 903,913 ****
for (int pos : b.loopIdIterable()) {
sb.append("B").append(loopHeaders[pos].getId()).append(" ");
}
sb.append(n);
}
! Debug.log("%s", sb);
}
}
/**
* Get the header block for a loop index.
--- 905,915 ----
for (int pos : b.loopIdIterable()) {
sb.append("B").append(loopHeaders[pos].getId()).append(" ");
}
sb.append(n);
}
! debug.log("%s", sb);
}
}
/**
* Get the header block for a loop index.
*** 944,954 ****
throw new PermanentBailoutException("Too many loops in method");
}
assert block.loops == 0;
block.loops = 1L << nextLoop;
! Debug.log("makeLoopHeader(%s) -> %x", block, block.loops);
if (loopHeaders == null) {
loopHeaders = new BciBlock[LOOP_HEADER_INITIAL_CAPACITY];
} else if (nextLoop >= loopHeaders.length) {
loopHeaders = Arrays.copyOf(loopHeaders, LOOP_HEADER_MAX_CAPACITY);
}
--- 946,956 ----
throw new PermanentBailoutException("Too many loops in method");
}
assert block.loops == 0;
block.loops = 1L << nextLoop;
! debug.log("makeLoopHeader(%s) -> %x", block, block.loops);
if (loopHeaders == null) {
loopHeaders = new BciBlock[LOOP_HEADER_INITIAL_CAPACITY];
} else if (nextLoop >= loopHeaders.length) {
loopHeaders = Arrays.copyOf(loopHeaders, LOOP_HEADER_MAX_CAPACITY);
}
*** 990,1000 ****
loops |= (1L << successor.loopId);
}
}
block.loops = loops;
! Debug.log("computeBlockOrder(%s) -> %x", block, block.loops);
if (block.isLoopHeader) {
loops &= ~(1L << block.loopId);
}
--- 992,1002 ----
loops |= (1L << successor.loopId);
}
}
block.loops = loops;
! debug.log("computeBlockOrder(%s) -> %x", block, block.loops);
if (block.isLoopHeader) {
loops &= ~(1L << block.loopId);
}
*** 1022,1046 ****
loops |= fixLoopBits(blockMap, successor);
}
if (block.loops != loops) {
loopChanges = true;
block.loops = loops;
! Debug.log("fixLoopBits0(%s) -> %x", block, block.loops);
}
if (block.isLoopHeader) {
loops &= ~(1L << block.loopId);
}
return loops;
}
! public static BciBlockMapping create(BytecodeStream stream, Bytecode code, OptionValues options) {
! BciBlockMapping map = new BciBlockMapping(code);
map.build(stream, options);
! if (Debug.isDumpEnabled(Debug.INFO_LEVEL)) {
! Debug.dump(Debug.INFO_LEVEL, map, code.getMethod().format("After block building %f %R %H.%n(%P)"));
}
return map;
}
--- 1024,1048 ----
loops |= fixLoopBits(blockMap, successor);
}
if (block.loops != loops) {
loopChanges = true;
block.loops = loops;
! debug.log("fixLoopBits0(%s) -> %x", block, block.loops);
}
if (block.isLoopHeader) {
loops &= ~(1L << block.loopId);
}
return loops;
}
! public static BciBlockMapping create(BytecodeStream stream, Bytecode code, OptionValues options, DebugContext debug) {
! BciBlockMapping map = new BciBlockMapping(code, debug);
map.build(stream, options);
! if (debug.isDumpEnabled(DebugContext.INFO_LEVEL)) {
! debug.dump(DebugContext.INFO_LEVEL, map, code.getMethod().format("After block building %f %R %H.%n(%P)"));
}
return map;
}
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BciBlockMapping.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File