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