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