src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/alloc/trace/TraceUtil.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/alloc/trace/TraceUtil.java	Mon Mar 20 17:39:55 2017
--- new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/alloc/trace/TraceUtil.java	Mon Mar 20 17:39:55 2017

*** 20,30 **** --- 20,30 ---- * or visit www.oracle.com if you need additional information or have any * questions. */ package org.graalvm.compiler.lir.alloc.trace; ! import java.util.ArrayList; import org.graalvm.compiler.core.common.alloc.Trace; import org.graalvm.compiler.core.common.alloc.TraceBuilderResult; import org.graalvm.compiler.core.common.cfg.AbstractBlockBase; import org.graalvm.compiler.lir.LIR;
*** 61,71 **** --- 61,71 ---- public static boolean isTrivialTrace(LIR lir, Trace trace) { if (trace.size() != 1) { return false; } ! ArrayList<LIRInstruction> instructions = lir.getLIRforBlock(trace.getBlocks()[0]); if (instructions.size() != 2) { return false; } assert instructions.get(0) instanceof LabelOp : "First instruction not a LabelOp: " + instructions.get(0); if (((LabelOp) instructions.get(0)).isPhiIn()) {
*** 84,89 **** --- 84,113 ---- * Now we need to check if the BlockEndOp has no special operand requirements (i.e. * stack-slot, register). For now we just check for JumpOp because we know that it doesn't. */ return instructions.get(1) instanceof JumpOp; } + + public static boolean hasInterTracePredecessor(TraceBuilderResult result, Trace trace, AbstractBlockBase<?> block) { + assert result.getTraceForBlock(block).equals(trace); + if (block.getPredecessorCount() == 0) { + // start block + return false; + } + if (block.getPredecessorCount() == 1) { + return !result.getTraceForBlock(block.getPredecessors()[0]).equals(trace); + } + return true; + } + + public static boolean hasInterTraceSuccessor(TraceBuilderResult result, Trace trace, AbstractBlockBase<?> block) { + assert result.getTraceForBlock(block).equals(trace); + if (block.getSuccessorCount() == 0) { + // method end block + return false; + } + if (block.getSuccessorCount() == 1) { + return !result.getTraceForBlock(block.getSuccessors()[0]).equals(trace); + } + return true; + } }

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/alloc/trace/TraceUtil.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File