src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/stackslotalloc/FixPointIntervalBuilder.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/stackslotalloc/FixPointIntervalBuilder.java	Mon Mar 20 17:40:09 2017
--- new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/stackslotalloc/FixPointIntervalBuilder.java	Mon Mar 20 17:40:09 2017

*** 24,39 **** --- 24,37 ---- import static org.graalvm.compiler.lir.LIRValueUtil.asVirtualStackSlot; import static org.graalvm.compiler.lir.LIRValueUtil.isVirtualStackSlot; import java.util.ArrayDeque; + import java.util.ArrayList; import java.util.BitSet; import java.util.Deque; import java.util.EnumSet; import java.util.HashSet; import java.util.List; import java.util.Set; import org.graalvm.compiler.core.common.cfg.AbstractBlockBase; import org.graalvm.compiler.core.common.cfg.BlockMap; import org.graalvm.compiler.debug.Debug; import org.graalvm.compiler.debug.DebugCounter;
*** 42,51 **** --- 40,51 ---- import org.graalvm.compiler.lir.InstructionValueProcedure; import org.graalvm.compiler.lir.LIR; import org.graalvm.compiler.lir.LIRInstruction; import org.graalvm.compiler.lir.LIRInstruction.OperandFlag; import org.graalvm.compiler.lir.LIRInstruction.OperandMode; + import org.graalvm.util.Equivalence; + import org.graalvm.util.EconomicSet; import org.graalvm.compiler.lir.VirtualStackSlot; import jdk.vm.ci.meta.Value; /**
*** 55,65 **** --- 55,65 ---- private final BlockMap<BitSet> liveInMap; private final BlockMap<BitSet> liveOutMap; private final LIR lir; private final int maxOpId; private final StackInterval[] stackSlotMap; ! private final HashSet<LIRInstruction> usePos; ! private final EconomicSet<LIRInstruction> usePos; /** * The number of allocated stack slots. */ private static final DebugCounter uninitializedSlots = Debug.counter("StackSlotAllocator[uninitializedSlots]");
*** 68,86 **** --- 68,86 ---- this.lir = lir; this.stackSlotMap = stackSlotMap; this.maxOpId = maxOpId; liveInMap = new BlockMap<>(lir.getControlFlowGraph()); liveOutMap = new BlockMap<>(lir.getControlFlowGraph()); ! this.usePos = new HashSet<>(); ! this.usePos = EconomicSet.create(Equivalence.IDENTITY); } /** * Builds the lifetime intervals for {@link VirtualStackSlot virtual stack slots}, sets up * {@link #stackSlotMap} and returns a set of use positions, i.e. instructions that contain * virtual stack slots. */ ! EconomicSet<LIRInstruction> build() { Deque<AbstractBlockBase<?>> worklist = new ArrayDeque<>(); AbstractBlockBase<?>[] blocks = lir.getControlFlowGraph().getBlocks(); for (int i = blocks.length - 1; i >= 0; i--) { worklist.add(blocks[i]); }
*** 113,123 **** --- 113,123 ---- @SuppressWarnings("try") private void processBlock(AbstractBlockBase<?> block, Deque<AbstractBlockBase<?>> worklist) { if (updateOutBlock(block)) { try (Indent indent = Debug.logAndIndent("handle block %s", block)) { ! ArrayList<LIRInstruction> instructions = lir.getLIRforBlock(block); // get out set and mark intervals BitSet outSet = liveOutMap.get(block); markOutInterval(outSet, getBlockEnd(instructions)); printLiveSet("liveOut", outSet);
*** 304,317 **** --- 304,317 ---- private StackInterval getIntervalFromStackId(int id) { return stackSlotMap[id]; } ! private static int getBlockBegin(ArrayList<LIRInstruction> instructions) { return instructions.get(0).id(); } ! private static int getBlockEnd(ArrayList<LIRInstruction> instructions) { return instructions.get(instructions.size() - 1).id() + 1; } }

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