# HG changeset patch # User Gilles Duboscq # Date 1308160482 -7200 # Node ID f4968508163032df62d028784e02a83d2bcd423b # Parent f01de7799e05adc98d106d2407ea87335a8965a5# Parent 11dfbb40ca6905635cfad051fb1b4a2a2009e178 Merge diff -r 11dfbb40ca69 -r f49685081630 .hgignore --- a/.hgignore Wed Jun 15 16:36:37 2011 +0200 +++ b/.hgignore Wed Jun 15 19:54:42 2011 +0200 @@ -17,6 +17,7 @@ \.orig$ output\.txt$ output\.cfg$ +java\.hprof\.txt$ /nbproject/private/ ^graal/hotspot/java$ ^scratch/ diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/GraalOptions.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/GraalOptions.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/GraalOptions.java Wed Jun 15 19:54:42 2011 +0200 @@ -57,6 +57,8 @@ public static boolean BailoutOnException = ____; public static boolean DeoptALot = ____; + public static boolean TestGraphDuplication = ____; + /** * See {@link Filter#Filter(String, Object)}. */ @@ -105,7 +107,7 @@ // Code generator settings public static boolean GenLIR = true; public static boolean GenCode = true; - public static boolean UseBranchPrediction = ____; + public static boolean UseBranchPrediction = true; public static boolean UseConstDirectCall = ____; diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/alloc/EdgeMoveOptimizer.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/alloc/EdgeMoveOptimizer.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/alloc/EdgeMoveOptimizer.java Wed Jun 15 19:54:42 2011 +0200 @@ -25,8 +25,10 @@ import java.util.*; import com.oracle.max.graal.compiler.*; +import com.oracle.max.graal.compiler.debug.*; import com.oracle.max.graal.compiler.ir.*; import com.oracle.max.graal.compiler.lir.*; +import com.oracle.max.graal.graph.*; /** * This class optimizes moves, particularly those that result from eliminating SSA form. @@ -190,6 +192,12 @@ List instructions = block.lir().instructionsList(); assert numSux == 2 : "method should not be called otherwise"; + + if ( instructions.get(instructions.size() - 1).code != LIROpcode.Branch) { + for (Node n : block.getInstructions()) { + TTY.println("instr: " + n); + } + } assert instructions.get(instructions.size() - 1).code == LIROpcode.Branch : "block with successor must end with branch block=B" + block.blockID(); assert instructions.get(instructions.size() - 1) instanceof LIRBranch : "branch must be LIROpBranch"; assert ((LIRBranch) instructions.get(instructions.size() - 1)).cond() == Condition.TRUE : "block must end with unconditional branch"; diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/LIRGenerator.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/LIRGenerator.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/LIRGenerator.java Wed Jun 15 19:54:42 2011 +0200 @@ -252,10 +252,8 @@ } } } - if (!(instr instanceof Merge) && instr != instr.graph().start()) { + if (instr != instr.graph().start()) { walkState(instr, stateAfter); - } - if (instr instanceof Value) { doRoot((Value) instr); } if (stateAfter != null) { @@ -268,9 +266,8 @@ } } } - if (block.blockSuccessors().size() >= 1 && (block.getInstructions().size() == 0 || !jumpsToNextBlock(block.getInstructions().get(block.getInstructions().size() - 1)))) { - moveToPhi(); - block.lir().jump(block.blockSuccessors().get(0)); + if (block.blockSuccessors().size() >= 1 && !jumpsToNextBlock(block.lastInstruction())) { + block.lir().jump(getLIRBlock((FixedNode) block.lastInstruction().successors().get(0))); } if (GraalOptions.TraceLIRGeneratorLevel >= 1) { @@ -282,8 +279,13 @@ blockDoEpilog(); } + @Override + public void visitMerge(Merge x) { + // Nothing to do. + } + private static boolean jumpsToNextBlock(Node node) { - return node instanceof BlockEnd || node instanceof Anchor; + return node instanceof BlockEnd || node instanceof EndNode || node instanceof LoopEnd; } @Override @@ -463,12 +465,6 @@ @Override public void visitAnchor(Anchor x) { setNoResult(x); - - // emit phi-instruction moves after safepoint since this simplifies - // describing the state at the safepoint. - - moveToPhi(); - lir.jump(getLIRBlock(x.next())); } @Override @@ -476,7 +472,9 @@ emitCompare(x.compare()); emitBranch(x.compare(), getLIRBlock(x.trueSuccessor()), getLIRBlock(x.falseSuccessor())); assert x.defaultSuccessor() == x.falseSuccessor() : "wrong destination above"; - lir.jump(getLIRBlock(x.defaultSuccessor())); + LIRBlock block = getLIRBlock(x.defaultSuccessor()); + assert block != null : x; + lir.jump(block); } public void emitBranch(Compare compare, LIRBlock trueSuccessor, LIRBlock falseSucc) { @@ -705,7 +703,7 @@ } } - protected LIRBlock getLIRBlock(Instruction b) { + protected LIRBlock getLIRBlock(FixedNode b) { if (b == null) { return null; } @@ -1423,68 +1421,60 @@ return null; } - protected void moveToPhi() { - // Moves all stack values into their phi position - LIRBlock bb = currentBlock; - if (bb.numberOfSux() == 1) { - LIRBlock sux = bb.suxAt(0); - assert sux.numberOfPreds() > 0 : "invalid CFG"; - - // a block with only one predecessor never has phi functions - if (sux.numberOfPreds() > 1) { + @Override + public void visitEndNode(EndNode end) { + setNoResult(end); + Merge merge = end.merge(); + moveToPhi(merge, merge.endIndex(end)); + lir.jump(getLIRBlock(end.merge())); + } - List phis = getPhis(sux); - - if (phis != null) { - - int predIndex = 0; - for (; predIndex < sux.numberOfPreds(); ++predIndex) { - if (sux.predAt(predIndex) == bb) { - break; - } - } - assert predIndex < sux.numberOfPreds(); + @Override + public void visitLoopEnd(LoopEnd x) { + setNoResult(x); + moveToPhi(x.loopBegin(), x.loopBegin().endCount()); + lir.jump(getLIRBlock(x.loopBegin())); + } - PhiResolver resolver = new PhiResolver(this); - for (Phi phi : phis) { - if (!phi.isDead()) { - Value curVal = phi.valueAt(predIndex); - if (curVal != null && curVal != phi) { - if (curVal instanceof Phi) { - operandForPhi((Phi) curVal); - } - CiValue operand = curVal.operand(); - if (operand.isIllegal()) { - assert curVal instanceof Constant || curVal instanceof Local : "these can be produced lazily" + curVal + "/" + phi; - operand = operandForInstruction(curVal); - } - resolver.move(operand, operandForPhi(phi)); - } + private void moveToPhi(Merge merge, int nextSuccIndex) { + PhiResolver resolver = new PhiResolver(this); + for (Node n : merge.usages()) { + if (n instanceof Phi) { + Phi phi = (Phi) n; + if (!phi.isDead()) { + Value curVal = phi.valueAt(nextSuccIndex); + if (curVal != null && curVal != phi) { + if (curVal instanceof Phi) { + operandForPhi((Phi) curVal); } + CiValue operand = curVal.operand(); + if (operand.isIllegal()) { + assert curVal instanceof Constant || curVal instanceof Local : "these can be produced lazily" + curVal + "/" + phi; + operand = operandForInstruction(curVal); + } + resolver.move(operand, operandForPhi(phi)); } - resolver.dispose(); - - //TODO (gd) remove that later - Node suxFirstInstr = sux.firstInstruction(); - if (suxFirstInstr instanceof LoopBegin) { - for (Node n : suxFirstInstr.usages()) { - if (n instanceof LoopCounter) { - LoopCounter counter = (LoopCounter) n; - if (counter.operand().isIllegal()) { - createResultVariable(counter); - } - if (predIndex == 0) { - lir.move(operandForInstruction(counter.init()), counter.operand()); - } else { - if (counter.kind == CiKind.Int) { - this.arithmeticOpInt(IADD, counter.operand(), counter.operand(), operandForInstruction(counter.stride()), CiValue.IllegalValue); - } else { - assert counter.kind == CiKind.Long; - this.arithmeticOpLong(LADD, counter.operand(), counter.operand(), operandForInstruction(counter.stride())); - } - } - } + } + } + } + resolver.dispose(); + //TODO (gd) remove that later + if (merge instanceof LoopBegin) { + for (Node usage : merge.usages()) { + if (usage instanceof LoopCounter) { + LoopCounter counter = (LoopCounter) usage; + if (counter.operand().isIllegal()) { + createResultVariable(counter); + } + if (nextSuccIndex == 0) { // (gd) nasty + lir.move(operandForInstruction(counter.init()), counter.operand()); + } else { + if (counter.kind == CiKind.Int) { + this.arithmeticOpInt(IADD, counter.operand(), counter.operand(), operandForInstruction(counter.stride()), CiValue.IllegalValue); + } else { + assert counter.kind == CiKind.Long; + this.arithmeticOpLong(LADD, counter.operand(), counter.operand(), operandForInstruction(counter.stride())); } } } diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/graph/IR.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/graph/IR.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/graph/IR.java Wed Jun 15 19:54:42 2011 +0200 @@ -69,8 +69,14 @@ */ public void build() { new GraphBuilderPhase(compilation, compilation.method, false, false).apply(compilation.graph); + //printGraph("After GraphBuilding", compilation.graph); - //new DuplicationPhase().apply(compilation.graph); + + if (GraalOptions.TestGraphDuplication) { + new DuplicationPhase().apply(compilation.graph); + //printGraph("After Duplication", compilation.graph); + } + new DeadCodeEliminationPhase().apply(compilation.graph); //printGraph("After DeadCodeElimination", compilation.graph); @@ -88,15 +94,13 @@ if (GraalOptions.OptCanonicalizer) { new CanonicalizerPhase().apply(graph); new DeadCodeEliminationPhase().apply(compilation.graph); - //printGraph("After Canonicalization", graph); + printGraph("After Canonicalization", graph); } new LoopPhase().apply(graph); new LoweringPhase().apply(graph); - new SplitCriticalEdgesPhase().apply(graph); - IdentifyBlocksPhase schedule = new IdentifyBlocksPhase(true); schedule.apply(graph); @@ -132,7 +136,7 @@ valueToBlock.put(i, b); } } - startBlock = lirBlocks.get(0); + startBlock = valueToBlock.get(graph.start()); assert startBlock != null; assert startBlock.blockPredecessors().size() == 0; diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/BlockEnd.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/BlockEnd.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/BlockEnd.java Wed Jun 15 19:54:42 2011 +0200 @@ -51,14 +51,14 @@ /** * The list of instructions that produce input for this instruction. */ - public Instruction blockSuccessor(int index) { + public FixedNode blockSuccessor(int index) { assert index >= 0 && index < blockSuccessorCount; - return (Instruction) successors().get(super.successorCount() + SUCCESSOR_COUNT + index); + return (FixedNode) successors().get(super.successorCount() + SUCCESSOR_COUNT + index); } - public Instruction setBlockSuccessor(int index, Instruction n) { + public FixedNode setBlockSuccessor(int index, FixedNode n) { assert index >= 0 && index < blockSuccessorCount; - return (Merge) successors().set(super.successorCount() + SUCCESSOR_COUNT + index, n); + return (FixedNode) successors().set(super.successorCount() + SUCCESSOR_COUNT + index, n); } public int blockSuccessorCount() { @@ -87,19 +87,6 @@ } /** - * Gets the block begin associated with this block end. - * @return the beginning of this basic block - */ - public Merge begin() { - for (Node n : predecessors()) { - if (n instanceof Merge) { - return (Merge) n; - } - } - return null; - } - - /** * Substitutes a successor block in this block end's successor list. Note that * this method updates all occurrences in the list. * @param oldSucc the old successor to replace @@ -121,7 +108,7 @@ * Gets the successor corresponding to the default (fall through) case. * @return the default successor */ - public Instruction defaultSuccessor() { + public FixedNode defaultSuccessor() { return blockSuccessor(blockSuccessorCount - 1); } diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Condition.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Condition.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Condition.java Wed Jun 15 19:54:42 2011 +0200 @@ -121,7 +121,7 @@ case AT: return BE; case AE: return BT; } - throw new IllegalArgumentException(); + throw new IllegalArgumentException(this.toString()); } /** diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/EndNode.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/EndNode.java Wed Jun 15 19:54:42 2011 +0200 @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.max.graal.compiler.ir; + +import com.oracle.max.graal.compiler.debug.*; +import com.oracle.max.graal.graph.*; +import com.sun.cri.ci.*; + + +public final class EndNode extends FixedNode { + public static final int SUCCESSOR_COUNT = 0; + public static final int INPUT_COUNT = 0; + public EndNode(Graph graph) { + super(CiKind.Illegal, INPUT_COUNT, SUCCESSOR_COUNT, graph); + } + + @Override + public void accept(ValueVisitor v) { + v.visitEndNode(this); + } + + @Override + public void print(LogStream out) { + out.print("end"); + } + + @Override + public Node copy(Graph into) { + return new EndNode(into); + } + + public Merge merge() { + if (usages().size() == 0) { + return null; + } else { + assert usages().size() == 1; + return (Merge) usages().get(0); + } + } +} diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/ExceptionDispatch.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/ExceptionDispatch.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/ExceptionDispatch.java Wed Jun 15 19:54:42 2011 +0200 @@ -64,7 +64,7 @@ /** * Constructs a new ExceptionDispatch instruction. */ - public ExceptionDispatch(Value exception, Instruction catchSuccessor, Instruction otherSuccessor, RiType catchType, Graph graph) { + public ExceptionDispatch(Value exception, FixedNode catchSuccessor, FixedNode otherSuccessor, RiType catchType, Graph graph) { super(CiKind.Int, 2, INPUT_COUNT, SUCCESSOR_COUNT, graph); setException(exception); setBlockSuccessor(0, otherSuccessor); @@ -80,7 +80,7 @@ * Gets the block corresponding to the catch block. * @return the true successor */ - public Instruction catchSuccessor() { + public FixedNode catchSuccessor() { return blockSuccessor(1); } @@ -88,7 +88,7 @@ * Gets the block corresponding to the rest of the dispatch chain. * @return the false successor */ - public Instruction otherSuccessor() { + public FixedNode otherSuccessor() { return blockSuccessor(0); } @@ -97,7 +97,7 @@ * @param istrue {@code true} if the true successor is requested, {@code false} otherwise * @return the corresponding successor */ - public Instruction successor(boolean istrue) { + public FixedNode successor(boolean istrue) { return blockSuccessor(istrue ? 1 : 0); } diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/If.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/If.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/If.java Wed Jun 15 19:54:42 2011 +0200 @@ -67,7 +67,7 @@ * Gets the block corresponding to the true successor. * @return the true successor */ - public Instruction trueSuccessor() { + public FixedNode trueSuccessor() { return blockSuccessor(0); } @@ -75,7 +75,7 @@ * Gets the block corresponding to the false successor. * @return the false successor */ - public Instruction falseSuccessor() { + public FixedNode falseSuccessor() { return blockSuccessor(1); } @@ -84,7 +84,7 @@ * @param istrue {@code true} if the true successor is requested, {@code false} otherwise * @return the corresponding successor */ - public Instruction successor(boolean istrue) { + public FixedNode successor(boolean istrue) { return blockSuccessor(istrue ? 0 : 1); } diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Instruction.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Instruction.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Instruction.java Wed Jun 15 19:54:42 2011 +0200 @@ -22,8 +22,6 @@ */ package com.oracle.max.graal.compiler.ir; -import java.util.*; - import com.oracle.max.graal.compiler.*; import com.oracle.max.graal.compiler.value.*; import com.oracle.max.graal.graph.*; @@ -62,11 +60,11 @@ * Links to next instruction in a basic block, to {@code null} if this instruction is the end of a basic block or to * itself if not in a block. */ - public Instruction next() { - return (Instruction) successors().get(super.successorCount() + SUCCESSOR_NEXT); + public FixedNode next() { + return (FixedNode) successors().get(super.successorCount() + SUCCESSOR_NEXT); } - public Node setNext(Instruction next) { + public Node setNext(FixedNode next) { return successors().set(super.successorCount() + SUCCESSOR_NEXT, next); } @@ -88,28 +86,6 @@ GraalMetrics.HIRInstructions++; } - - /** - * Gets the list of predecessors of this block. - * @return the predecessor list - */ - @SuppressWarnings({ "unchecked", "rawtypes" }) - public List blockPredecessors() { - return (List) Collections.unmodifiableList(predecessors()); - } - - /** - * Get the number of predecessors. - * @return the number of predecessors - */ - public int numberOfPreds() { - return predecessors().size(); - } - - public Instruction predAt(int j) { - return (Instruction) predecessors().get(j); - } - /** * Gets the state after the instruction, if it is recorded. * @return the state after the instruction diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Local.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Local.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Local.java Wed Jun 15 19:54:42 2011 +0200 @@ -26,7 +26,6 @@ import com.oracle.max.graal.compiler.debug.*; import com.oracle.max.graal.graph.*; -import com.sun.cri.bytecode.*; import com.sun.cri.ci.*; import com.sun.cri.ri.*; @@ -115,7 +114,7 @@ @Override public Node copy(Graph into) { - Local x = new Local(kind, index, start(), into); + Local x = new Local(kind, index, null, into); x.setDeclaredType(declaredType()); return x; } diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/LoopEnd.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/LoopEnd.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/LoopEnd.java Wed Jun 15 19:54:42 2011 +0200 @@ -78,4 +78,9 @@ LoopEnd x = new LoopEnd(into); return x; } + + @Override + public String toString() { + return "LoopEnd:" + super.toString(); + } } diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Merge.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Merge.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Merge.java Wed Jun 15 19:54:42 2011 +0200 @@ -73,6 +73,23 @@ v.visitMerge(this); } + public int endIndex(EndNode end) { + assert inputs().variablePart().contains(end); + return inputs().variablePart().indexOf(end); + } + + public void addEnd(EndNode end) { + inputs().variablePart().add(end); + } + + public int endCount() { + return inputs().variablePart().size(); + } + + public EndNode endAt(int index) { + return (EndNode) inputs().variablePart().get(index); + } + @Override public String toString() { StringBuilder builder = new StringBuilder(); @@ -96,7 +113,6 @@ } hasSucc = true; } - return builder.toString(); } @@ -263,18 +279,17 @@ @Override public Node copy(Graph into) { assert getClass() == Merge.class : "copy of " + getClass(); - Merge x = new Merge(into); - return x; + return new Merge(into); } - public void removePhiPredecessor(Node pred) { - int predIndex = predecessors().lastIndexOf(pred); + public void removeEnd(EndNode pred) { + int predIndex = inputs().variablePart().indexOf(pred); assert predIndex != -1; + inputs().variablePart().remove(predIndex); for (Node usage : usages()) { if (usage instanceof Phi) { Phi phi = (Phi) usage; -// assert phi.valueCount() == predecessors().size(); phi.removeInput(predIndex); } } diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Phi.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Phi.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Phi.java Wed Jun 15 19:54:42 2011 +0200 @@ -30,23 +30,20 @@ * The {@code Phi} instruction represents the merging of dataflow * in the instruction graph. It refers to a join block and a variable. */ -public class Phi extends FloatingNode { +public final class Phi extends FloatingNode { private static final int DEFAULT_MAX_VALUES = 2; private static final int INPUT_COUNT = 1; private static final int INPUT_MERGE = 0; - private final int maxValues; - private static final int SUCCESSOR_COUNT = 0; - private int usedInputCount; private boolean isDead; @Override protected int inputCount() { - return super.inputCount() + INPUT_COUNT + maxValues; + return super.inputCount() + INPUT_COUNT; } @Override @@ -61,24 +58,12 @@ return (Merge) inputs().get(super.inputCount() + INPUT_MERGE); } - public Value setMerge(Value n) { - return (Merge) inputs().set(super.inputCount() + INPUT_MERGE, n); + public void setMerge(Value n) { + inputs().set(super.inputCount() + INPUT_MERGE, n); } - /** - * Create a new Phi for the specified join block and local variable (or operand stack) slot. - * @param kind the type of the variable - * @param merge the join point - * @param graph - */ public Phi(CiKind kind, Merge merge, Graph graph) { - this(kind, merge, DEFAULT_MAX_VALUES, graph); - } - - public Phi(CiKind kind, Merge merge, int maxValues, Graph graph) { - super(kind, INPUT_COUNT + maxValues, SUCCESSOR_COUNT, graph); - this.maxValues = maxValues; - usedInputCount = 0; + super(kind, INPUT_COUNT, SUCCESSOR_COUNT, graph); setMerge(merge); } @@ -89,11 +74,11 @@ * @return the instruction that produced the value in the i'th predecessor */ public Value valueAt(int i) { - return (Value) inputs().get(INPUT_COUNT + i); + return (Value) inputs().variablePart().get(i); } - public Value setValueAt(int i, Value x) { - return (Value) inputs().set(INPUT_COUNT + i, x); + public void setValueAt(int i, Value x) { + inputs().set(INPUT_COUNT + i, x); } /** @@ -101,7 +86,7 @@ * @return the number of inputs in this phi */ public int valueCount() { - return usedInputCount; + return inputs().variablePart().size(); } @Override @@ -144,36 +129,17 @@ return "Phi: (" + str + ")"; } - public Phi addInput(Value y) { - assert !this.isDeleted() && !y.isDeleted(); - Phi phi = this; - if (usedInputCount == maxValues) { - phi = new Phi(kind, merge(), maxValues * 2, graph()); - for (int i = 0; i < valueCount(); ++i) { - phi.addInput(valueAt(i)); - } - phi.addInput(y); - this.replace(phi); - } else { - setValueAt(usedInputCount++, y); - } - return phi; + public void addInput(Node y) { + inputs().variablePart().add(y); } public void removeInput(int index) { - assert index < valueCount() : "index: " + index + ", valueCount: " + valueCount() + "@phi " + id(); - setValueAt(index, null); - for (int i = index + 1; i < valueCount(); ++i) { - setValueAt(i - 1, valueAt(i)); - } - setValueAt(valueCount() - 1, null); - usedInputCount--; + inputs().variablePart().remove(index); } @Override public Node copy(Graph into) { - Phi x = new Phi(kind, null, maxValues, into); - x.usedInputCount = usedInputCount; + Phi x = new Phi(kind, null, into); x.isDead = isDead; return x; } diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Value.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Value.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Value.java Wed Jun 15 19:54:42 2011 +0200 @@ -134,19 +134,6 @@ return null; // default: unknown declared type } - /** - * Apply the specified closure to all the input values of this instruction. - * @param closure the closure to apply - */ - public void inputValuesDo(ValueClosure closure) { - for (int i = 0; i < inputs().size(); i++) { - inputs().set(i, closure.apply((Value) inputs().get(i))); - } - for (int i = 0; i < successors().size(); i++) { - successors().set(i, closure.apply((Value) successors().get(i))); - } - } - @Override public String toString() { StringBuilder builder = new StringBuilder(); diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/ValueVisitor.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/ValueVisitor.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/ValueVisitor.java Wed Jun 15 19:54:42 2011 +0200 @@ -39,6 +39,7 @@ public abstract void visitConstant(Constant i); public abstract void visitConvert(Convert i); public abstract void visitExceptionObject(ExceptionObject i); + public abstract void visitEndNode(EndNode i); public abstract void visitFrameState(FrameState i); public abstract void visitAnchor(Anchor i); public abstract void visitIf(If i); diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/lir/FrameMap.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/lir/FrameMap.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/lir/FrameMap.java Wed Jun 15 19:54:42 2011 +0200 @@ -74,10 +74,6 @@ * * Note that the size {@link Bytecodes#ALLOCA ALLOCA} blocks and {@code monitor}s in the frame may be greater * than the size of a {@linkplain CiTarget#spillSlotSize spill slot}. - * - * @author Thomas Wuerthinger - * @author Ben L. Titzer - * @author Doug Simon */ public final class FrameMap { diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/DeadCodeEliminationPhase.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/DeadCodeEliminationPhase.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/DeadCodeEliminationPhase.java Wed Jun 15 19:54:42 2011 +0200 @@ -43,25 +43,25 @@ this.brokenLoops = new ArrayList(); // remove chained Merges - for (Merge merge : graph.getNodes(Merge.class)) { - if (merge.predecessors().size() == 1 && merge.usages().size() == 0) { - if (merge.successors().get(0) instanceof Merge) { - Node pred = merge.predecessors().get(0); - int predIndex = merge.predecessorsIndex().get(0); - pred.successors().setAndClear(predIndex, merge, 0); - merge.delete(); - } - } - } - Node startSuccessor = graph.start().successors().get(0); - if (startSuccessor instanceof Merge) { - Merge startMerge = (Merge) startSuccessor; - if (startMerge.predecessors().size() == 1 && startMerge.usages().size() == 0) { - int predIndex = startMerge.predecessorsIndex().get(0); - graph.start().successors().setAndClear(predIndex, startMerge, 0); - startMerge.delete(); - } - } +// for (Merge merge : graph.getNodes(Merge.class)) { +// if (merge.predecessors().size() == 1 && merge.usages().size() == 0) { +// if (merge.successors().get(0) instanceof Merge) { +// Node pred = merge.predecessors().get(0); +// int predIndex = merge.predecessorsIndex().get(0); +// pred.successors().setAndClear(predIndex, merge, 0); +// merge.delete(); +// } +// } +// } +// Node startSuccessor = graph.start().successors().get(0); +// if (startSuccessor instanceof Merge) { +// Merge startMerge = (Merge) startSuccessor; +// if (startMerge.predecessors().size() == 1 && startMerge.usages().size() == 0) { +// int predIndex = startMerge.predecessorsIndex().get(0); +// graph.start().successors().setAndClear(predIndex, startMerge, 0); +// startMerge.delete(); +// } +// } flood.add(graph.start()); @@ -78,7 +78,6 @@ new PhiSimplifier(graph); - if (GraalOptions.TraceDeadCodeElimination) { System.out.printf("dead code elimination finished\n"); } @@ -90,27 +89,28 @@ private void iterateSuccessors() { for (Node current : flood) { - for (Node successor : current.successors()) { - flood.add(successor); + if (current instanceof EndNode) { + EndNode end = (EndNode) current; + flood.add(end.merge()); + } else { + for (Node successor : current.successors()) { + flood.add(successor); + } } } } private void disconnectCFGNodes() { for (Node node : graph.getNodes()) { + if (node != Node.Null && !flood.isMarked(node) && node instanceof EndNode) { + EndNode end = (EndNode) node; + Merge merge = end.merge(); + merge.removeEnd(end); + } + } + + for (Node node : graph.getNodes()) { if (node != Node.Null && !flood.isMarked(node) && isCFG(node)) { - if (node instanceof LoopEnd) { - brokenLoops.add(((LoopEnd) node).loopBegin()); - } - // iterate backwards so that the predecessor indexes in removePhiPredecessor are correct - for (int i = node.successors().size() - 1; i >= 0; i--) { - Node successor = node.successors().get(i); - if (successor != Node.Null && flood.isMarked(successor)) { - if (successor instanceof Merge) { - ((Merge) successor).removePhiPredecessor(node); - } - } - } node.successors().clearAll(); node.inputs().clearAll(); } @@ -125,10 +125,11 @@ usage.replace(((Phi) usage).valueAt(0)); } - Node pred = loop.predecessors().get(0); - int predIndex = loop.predecessorsIndex().get(0); - pred.successors().setAndClear(predIndex, loop, 0); - loop.delete(); +// Node pred = loop.predecessors().get(0); +// int predIndex = loop.predecessorsIndex().get(0); +// pred.successors().setAndClear(predIndex, loop, 0); +// loop.delete(); + loop.replace(loop.next()); } } diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java Wed Jun 15 19:54:42 2011 +0200 @@ -162,7 +162,7 @@ // 1. create the start block Block startBlock = nextBlock(Instruction.SYNCHRONIZATION_ENTRY_BCI); markOnWorkList(startBlock); - lastInstr = createTarget(startBlock, frameState); + lastInstr = (Instruction) createTarget(startBlock, frameState); graph.start().setStart(lastInstr); if (isSynchronized(method.accessFlags())) { @@ -193,11 +193,7 @@ for (Node n : graph.getNodes()) { if (n instanceof Placeholder) { Placeholder p = (Placeholder) n; - assert p.blockPredecessors().size() == 1; - Node pred = p.blockPredecessors().get(0); - int predIndex = p.predecessorsIndex().get(0); - pred.successors().setAndClear(predIndex, p, 0); - p.delete(); + p.replace(p.next()); } } @@ -264,8 +260,7 @@ private void finishStartBlock(Block startBlock) { assert bci() == 0; - Instruction target = createTargetAt(0, frameState); - appendGoto(target); + appendGoto(createTargetAt(0, frameState)); } public void mergeOrClone(Block target, FrameStateAccess newState) { @@ -305,9 +300,16 @@ assert !target.isLoopHeader; Merge merge = new Merge(graph); + + Placeholder p = (Placeholder) first; + assert p.predecessors().size() == 1; assert p.next() == null; - p.replace(merge); + + EndNode end = new EndNode(graph); + p.replace(end); + merge.addEnd(end); + //end.setNext(merge); target.firstInstruction = merge; merge.setStateBefore(existingState); first = merge; @@ -423,8 +425,7 @@ } FrameState stateWithException = entryState.duplicateModified(bci, CiKind.Void, currentExceptionObject); - Instruction successor = createTarget(dispatchBlock, stateWithException); - currentNext.setNext(successor); + currentNext.setNext(createTarget(dispatchBlock, stateWithException)); return entry; } return null; @@ -657,14 +658,14 @@ If ifNode = new If(new Compare(x, cond, y, graph), graph); append(ifNode); BlockMap.BranchOverride override = branchOverride.get(bci()); - Instruction tsucc; + FixedNode tsucc; if (override == null || override.taken == false) { tsucc = createTargetAt(stream().readBranchDest(), frameState); } else { tsucc = createTarget(override.block, frameState); } ifNode.setBlockSuccessor(0, tsucc); - Instruction fsucc; + FixedNode fsucc; if (override == null || override.taken == true) { fsucc = createTargetAt(stream().nextBCI(), frameState); } else { @@ -1110,11 +1111,11 @@ return x; } - private Instruction createTargetAt(int bci, FrameStateAccess stateAfter) { + private FixedNode createTargetAt(int bci, FrameStateAccess stateAfter) { return createTarget(blockFromBci[bci], stateAfter); } - private Instruction createTarget(Block block, FrameStateAccess stateAfter) { + private FixedNode createTarget(Block block, FrameStateAccess stateAfter) { assert block != null && stateAfter != null; assert block.isLoopHeader || block.firstInstruction == null || block.firstInstruction.next() == null : "non-loop block must be iterated after all its predecessors. startBci=" + block.startBci + ", " + block.getClass().getSimpleName() + ", " + block.firstInstruction.next(); @@ -1125,8 +1126,6 @@ if (block.firstInstruction == null) { if (block.isLoopHeader) { -// block.firstInstruction = new Merge(block.startBci, graph); - LoopBegin loopBegin = new LoopBegin(graph); LoopEnd loopEnd = new LoopEnd(graph); loopEnd.setLoopBegin(loopBegin); @@ -1138,11 +1137,22 @@ mergeOrClone(block, stateAfter); addToWorkList(block); + FixedNode result = null; if (block.firstInstruction instanceof LoopBegin && isVisited(block)) { - return ((LoopBegin) block.firstInstruction).loopEnd(); + result = ((LoopBegin) block.firstInstruction).loopEnd(); } else { - return block.firstInstruction; + result = block.firstInstruction; } + + assert result instanceof Merge || result instanceof Placeholder : result; + + if (result instanceof Merge) { + EndNode end = new EndNode(graph); + //end.setNext(result); + ((Merge) result).addEnd(end); + result = end; + } + return result; } private Value synchronizedObject(FrameStateAccess state, RiMethod target) { @@ -1201,7 +1211,8 @@ } else { end.delete(); Merge merge = new Merge(graph); - merge.successors().setAndClear(merge.nextIndex(), begin, begin.nextIndex()); + merge.setNext(begin.next()); + begin.setNext(null); begin.replace(merge); } } @@ -1245,20 +1256,20 @@ Block nextBlock = block.next == null ? unwindBlock() : block.next; if (block.handler.catchType().isResolved()) { - Instruction catchSuccessor = createTarget(blockFromBci[block.handler.handlerBCI()], frameState); - Instruction nextDispatch = createTarget(nextBlock, frameState); + FixedNode catchSuccessor = createTarget(blockFromBci[block.handler.handlerBCI()], frameState); + FixedNode nextDispatch = createTarget(nextBlock, frameState); append(new ExceptionDispatch(frameState.stackAt(0), catchSuccessor, nextDispatch, block.handler.catchType(), graph)); } else { Deoptimize deopt = new Deoptimize(DeoptAction.InvalidateRecompile, graph); deopt.setMessage("unresolved " + block.handler.catchType().name()); append(deopt); - Instruction nextDispatch = createTarget(nextBlock, frameState); + FixedNode nextDispatch = createTarget(nextBlock, frameState); appendGoto(nextDispatch); } } } - private void appendGoto(Instruction target) { + private void appendGoto(FixedNode target) { lastInstr.setNext(target); } diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/InliningPhase.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/InliningPhase.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/InliningPhase.java Wed Jun 15 19:54:42 2011 +0200 @@ -236,6 +236,7 @@ System.out.println("inlining " + name + ": " + frameStates.size() + " frame states, " + nodes.size() + " nodes"); } + assert invoke.successors().get(0) != null : invoke; assert invoke.predecessors().size() == 1 : "size: " + invoke.predecessors().size(); Instruction pred; if (withReceiver) { @@ -243,7 +244,7 @@ clipNode.setNode(new IsNonNull(parameters[0], compilation.graph)); pred = clipNode; } else { - pred = new Merge(compilation.graph); + pred = new Placeholder(compilation.graph);//(Instruction) invoke.predecessors().get(0);//new Merge(compilation.graph); } invoke.predecessors().get(0).successors().replace(invoke, pred); replacements.put(startNode, pred); @@ -261,6 +262,10 @@ } } + if (pred instanceof Placeholder) { + pred.replace(((Placeholder)pred).next()); + } + if (returnNode != null) { List usages = new ArrayList(invoke.usages()); for (Node usage : usages) { @@ -272,18 +277,8 @@ } Node returnDuplicate = duplicates.get(returnNode); returnDuplicate.inputs().clearAll(); - - Merge mergeAfter = new Merge(compilation.graph); - - assert returnDuplicate.predecessors().size() == 1; - Node returnPred = returnDuplicate.predecessors().get(0); - int index = returnDuplicate.predecessorsIndex().get(0); - mergeAfter.successors().setAndClear(0, invoke, 0); - returnPred.successors().set(index, mergeAfter); - - returnDuplicate.delete(); - - mergeAfter.setStateBefore(stateAfter); + returnDuplicate.replace(invoke.next()); + invoke.setNext(null); } if (exceptionEdge != null) { @@ -298,14 +293,7 @@ usage.inputs().replace(obj, unwindDuplicate.exception()); } unwindDuplicate.inputs().clearAll(); - - assert unwindDuplicate.predecessors().size() == 1; - Node unwindPred = unwindDuplicate.predecessors().get(0); - int index = unwindDuplicate.predecessorsIndex().get(0); - unwindPred.successors().setAndClear(index, obj, 0); - - obj.inputs().clearAll(); - unwindDuplicate.delete(); + unwindDuplicate.replace(obj.next()); } } diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/LoopPhase.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/LoopPhase.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/LoopPhase.java Wed Jun 15 19:54:42 2011 +0200 @@ -61,7 +61,7 @@ acounters[j] = null; IntegerSub sub = new IntegerSub(c1.kind, c2.init(), c1.init(), graph); IntegerAdd add = new IntegerAdd(c1.kind, c1, sub, graph); - Phi phi = new Phi(c1.kind, loopBegin, 2, graph); // TODO (gd) assumes order on loppBegin preds + Phi phi = new Phi(c1.kind, loopBegin, graph); // TODO (gd) assumes order on loppBegin preds phi.addInput(c2.init()); phi.addInput(add); c2.replace(phi); @@ -141,6 +141,12 @@ for (Node pred : n.predecessors()) { workCFG.add(pred); } + if (n instanceof Merge) { + Merge merge = (Merge) n; + for (int i = 0; i < merge.endCount(); i++) { + workCFG.add(merge.endAt(i)); + } + } } for (Node n : workData) { loopNodes.mark(n); diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/LoweringPhase.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/LoweringPhase.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/LoweringPhase.java Wed Jun 15 19:54:42 2011 +0200 @@ -24,6 +24,7 @@ import com.oracle.max.graal.compiler.ir.*; import com.oracle.max.graal.compiler.schedule.*; +import com.oracle.max.graal.compiler.util.*; import com.oracle.max.graal.graph.*; public class LoweringPhase extends Phase { @@ -33,21 +34,22 @@ s.apply(graph); for (Block b : s.getBlocks()) { - final Node firstNode = b.firstNode(); + //final Node firstNode = b.firstNode(); final LoweringTool loweringTool = new LoweringTool() { @Override public Node createStructuredBlockAnchor() { - if (!(firstNode instanceof Anchor) && !(firstNode instanceof Merge)) { - Anchor a = new Anchor(graph); - assert firstNode.predecessors().size() == 1; - Node pred = firstNode.predecessors().get(0); - int predIndex = firstNode.predecessorsIndex().get(0); - a.successors().setAndClear(Instruction.SUCCESSOR_NEXT, pred, predIndex); - pred.successors().set(predIndex, a); - return a; - } - return firstNode; + throw Util.unimplemented(); +// if (!(firstNode instanceof Anchor) && !(firstNode instanceof Merge)) { +// Anchor a = new Anchor(graph); +// assert firstNode.predecessors().size() == 1; +// Node pred = firstNode.predecessors().get(0); +// int predIndex = firstNode.predecessorsIndex().get(0); +// a.successors().setAndClear(Instruction.SUCCESSOR_NEXT, pred, predIndex); +// pred.successors().set(predIndex, a); +// return a; +// } +// return firstNode; } }; diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/SplitCriticalEdgesPhase.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/SplitCriticalEdgesPhase.java Wed Jun 15 16:36:37 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.oracle.max.graal.compiler.phases; - -import java.util.*; - -import com.oracle.max.graal.compiler.ir.*; -import com.oracle.max.graal.compiler.schedule.*; -import com.oracle.max.graal.graph.*; - - -public class SplitCriticalEdgesPhase extends Phase { - - @Override - protected void run(Graph graph) { - List nodes = graph.getNodes(); - for (int i = 0; i < nodes.size(); ++i) { - Node n = nodes.get(i); - if (IdentifyBlocksPhase.trueSuccessorCount(n) > 1) { - for (int j = 0; j < n.successors().size(); ++j) { - Node succ = n.successors().get(j); - if (IdentifyBlocksPhase.truePredecessorCount(succ) > 1) { - Anchor a = new Anchor(graph); - a.successors().setAndClear(Instruction.SUCCESSOR_NEXT, n, j); - n.successors().set(j, a); - } - } - } - } - } -} diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java Wed Jun 15 19:54:42 2011 +0200 @@ -78,6 +78,13 @@ private Block assignBlock(Node n, Block b) { assert nodeToBlock.get(n) == null; nodeToBlock.set(n, b); + for (Node input : n.inputs()) { + if (input instanceof FrameState) { + assert nodeToBlock.get(n) == null; + nodeToBlock.set(n, b); + } + } + if (b.firstNode() == null) { b.setFirstNode(n); b.setLastNode(n); @@ -91,6 +98,26 @@ return b; } + private Block assignBlockNew(Node n, Block b) { + if (b == null) { + b = createBlock(); + } + + assert nodeToBlock.get(n) == null; + nodeToBlock.set(n, b); + if (b.lastNode() == null) { + b.setFirstNode(n); + b.setLastNode(n); + } else { + if (b.firstNode() != b.lastNode()) { + b.getInstructions().add(0, b.firstNode()); + } + b.setFirstNode(n); + } + + return b; + } + public static boolean isFixed(Node n) { return n != null && ((n instanceof FixedNode) || n == n.graph().start()); } @@ -100,69 +127,51 @@ } private void identifyBlocks() { + // Identify blocks. - final ArrayList blockBeginNodes = new ArrayList(); - NodeIterator.iterate(EdgeType.SUCCESSORS, graph.start(), null, new NodeVisitor() { - @Override - public boolean visit(Node n) { - if (!isFixed(n)) { - return false; - } - - if (n instanceof LoopBegin) { - // a LoopBegin is always a merge - assignBlock(n); - blockBeginNodes.add(n); - return true; - } - - Node singlePred = null; - for (Node pred : n.predecessors()) { - if (isFixed(pred)) { - if (singlePred == null) { - singlePred = pred; - } else { - // We have more than one predecessor => we are a merge block. - assignBlock(n); - blockBeginNodes.add(n); - return true; + for (Node n : graph.getNodes()) { + if (n != null) { + if (n instanceof EndNode || n instanceof Return || n instanceof Unwind || n instanceof LoopEnd || n instanceof Deoptimize) { + Block block = null; + while (nodeToBlock.get(n) == null) { + if (block != null && IdentifyBlocksPhase.trueSuccessorCount(n) > 1) { + // We are at a split node => start a new block. + block = null; } + block = assignBlockNew(n, block); + if (n.predecessors().size() == 0) { + // Either dead code or at a merge node => stop iteration. + break; + } + assert n.predecessors().size() == 1 : "preds: " + n; + n = n.predecessors().get(0); } } - - if (singlePred == null) { - // We have no predecessor => we are the start block. - assignBlock(n); - blockBeginNodes.add(n); - } else { - // We have a single predecessor => check its successor count. - if (isBlockEnd(singlePred)) { - assignBlock(n); - blockBeginNodes.add(n); - } else { - assignBlock(n, nodeToBlock.get(singlePred)); - } - } - return true; - }} - ); + } + } // Connect blocks. - for (Node n : blockBeginNodes) { - Block block = nodeToBlock.get(n); - for (Node pred : n.predecessors()) { - if (isFixed(pred)) { - Block predBlock = nodeToBlock.get(pred); - predBlock.addSuccessor(block); - } - } - + for (Block block : blocks) { + Node n = block.firstNode(); if (n instanceof Merge) { for (Node usage : n.usages()) { if (usage instanceof Phi || usage instanceof LoopCounter) { nodeToBlock.set(usage, block); } } + Merge m = (Merge) n; + for (int i = 0; i < m.endCount(); ++i) { + EndNode end = m.endAt(i); + Block predBlock = nodeToBlock.get(end); + predBlock.addSuccessor(block); + } + } else { + for (Node pred : n.predecessors()) { + if (isFixed(pred)) { + Block predBlock = nodeToBlock.get(pred); + predBlock.addSuccessor(block); + } + } } } @@ -186,8 +195,8 @@ if (scheduleAllNodes) { // Add successors of loop end nodes. Makes the graph cyclic. - for (Node n : blockBeginNodes) { - Block block = nodeToBlock.get(n); + for (Block block : blocks) { + Node n = block.firstNode(); if (n instanceof LoopBegin) { LoopBegin loopBegin = (LoopBegin) n; nodeToBlock.get(loopBegin.loopEnd()).addSuccessor(block); @@ -295,10 +304,9 @@ } } else if (usage instanceof FrameState && ((FrameState) usage).block() != null) { Merge merge = ((FrameState) usage).block(); - for (Node pred : merge.predecessors()) { - if (isFixed(pred)) { - block = getCommonDominator(block, nodeToBlock.get(pred)); - } + for (int i = 0; i < merge.endCount(); ++i) { + EndNode pred = merge.endAt(i); + block = getCommonDominator(block, nodeToBlock.get(pred)); } } else if (usage instanceof LoopCounter) { LoopCounter counter = (LoopCounter) usage; @@ -342,6 +350,8 @@ assert !map.isMarked(b.firstNode()) && nodeToBlock.get(b.firstNode()) == b; boolean scheduleFirst = true; + assert !instructions.contains(b.lastNode()); + assert !instructions.contains(b.firstNode()); if (b.firstNode() == b.lastNode()) { Node node = b.firstNode(); @@ -356,6 +366,7 @@ addToSorting(b, i, sortedInstructions, map); } addToSorting(b, b.lastNode(), sortedInstructions, map); + assert sortedInstructions.get(sortedInstructions.size() - 1) == b.lastNode() : "lastNode=" + b.lastNode() + ", firstNode=" + b.firstNode() + ", sorted(sz-1)=" + sortedInstructions.get(sortedInstructions.size() - 1); b.setInstructions(sortedInstructions); } @@ -364,8 +375,13 @@ return; } + FrameState state = null; for (Node input : i.inputs()) { - addToSorting(b, input, sortedInstructions, map); +// if (input instanceof FrameState) { +// state = (FrameState) input; +// } else { + addToSorting(b, input, sortedInstructions, map); +// } } for (Node pred : i.predecessors()) { @@ -374,6 +390,10 @@ map.mark(i); + if (state != null) { + addToSorting(b, state, sortedInstructions, map); + } + for (Node succ : i.successors()) { if (succ instanceof FrameState) { addToSorting(b, succ, sortedInstructions, map); @@ -465,21 +485,4 @@ } return i; } - - public static int truePredecessorCount(Node n) { - if (n == null) { - return 0; - } - int i = 0; - for (Node s : n.predecessors()) { - if (isFixed(s)) { - i++; - } - } - - if (n instanceof LoopBegin) { - i++; - } - return i; - } } diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/target/amd64/AMD64LIRGenerator.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/target/amd64/AMD64LIRGenerator.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/target/amd64/AMD64LIRGenerator.java Wed Jun 15 19:54:42 2011 +0200 @@ -466,11 +466,6 @@ } @Override - public void visitMerge(Merge x) { - // nothing to do for now - } - - @Override public void visitExceptionDispatch(ExceptionDispatch x) { // TODO ls: this needs some more work... @@ -494,13 +489,6 @@ } @Override - public void visitLoopEnd(LoopEnd x) { - setNoResult(x); - //moveToPhi(); - //lir.jump(getLIRBlock(x.loopBegin())); - } - - @Override public void visitValueAnchor(ValueAnchor valueAnchor) { // nothing to do for ValueAnchors } diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameState.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameState.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameState.java Wed Jun 15 19:54:42 2011 +0200 @@ -377,28 +377,20 @@ phi = setupPhiForStack(block, i - localsSize); } - Phi originalPhi = phi; if (phi.valueCount() == 0) { - int size = block.predecessors().size(); + int size = block.endCount(); for (int j = 0; j < size; ++j) { - phi = phi.addInput(x); + phi.addInput(x); } - phi = phi.addInput((x == y) ? phi : y); + phi.addInput((x == y) ? phi : y); } else { - phi = phi.addInput((x == y) ? phi : y); - } - if (originalPhi != phi) { - for (int j = 0; j < other.localsSize() + other.stackSize(); ++j) { - if (other.valueAt(j) == originalPhi) { - other.setValueAt(j, phi); - } - } + phi.addInput((x == y) ? phi : y); } if (block instanceof LoopBegin) { // assert phi.valueCount() == ((LoopBegin) block).loopEnd().predecessors().size() + 1 : "loop, valueCount=" + phi.valueCount() + " predSize= " + ((LoopBegin) block).loopEnd().predecessors().size(); } else { - assert phi.valueCount() == block.predecessors().size() + 1 : "valueCount=" + phi.valueCount() + " predSize= " + block.predecessors().size(); + assert phi.valueCount() == block.endCount() + 1 : "valueCount=" + phi.valueCount() + " predSize= " + block.endCount(); } } } diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.graph/src/com/oracle/max/graal/graph/Graph.java --- a/graal/com.oracle.max.graal.graph/src/com/oracle/max/graal/graph/Graph.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.graph/src/com/oracle/max/graal/graph/Graph.java Wed Jun 15 19:54:42 2011 +0200 @@ -171,7 +171,7 @@ if (target == null) { target = newNodes.get(input); } - node.inputs().set(i, target); + node.inputs().setOrExpand(i, target); } } for (Entry entry : replacements.entrySet()) { @@ -180,32 +180,31 @@ for (int i = 0; i < oldNode.inputs().size(); i++) { Node input = oldNode.inputs().get(i); if (newNodes.containsKey(input)) { - node.inputs().set(i, newNodes.get(input)); + node.inputs().setOrExpand(i, newNodes.get(input)); } } } + // re-wire successors for (Entry entry : newNodes.entrySet()) { Node oldNode = entry.getKey(); Node node = entry.getValue(); - for (int i = 0; i < oldNode.predecessors().size(); i++) { - Node pred = oldNode.predecessors().get(i); - int predIndex = oldNode.predecessorsIndex().get(i); - Node source = replacements.get(pred); - if (source == null) { - source = newNodes.get(pred); + for (int i = 0; i < oldNode.successors().size(); i++) { + Node succ = oldNode.successors().get(i); + Node target = replacements.get(succ); + if (target == null) { + target = newNodes.get(succ); } - source.successors().set(predIndex, node); + node.successors().setOrExpand(i, target); } } for (Entry entry : replacements.entrySet()) { Node oldNode = entry.getKey(); Node node = entry.getValue(); - for (int i = 0; i < oldNode.predecessors().size(); i++) { - Node pred = oldNode.predecessors().get(i); - int predIndex = oldNode.predecessorsIndex().get(i); - if (newNodes.containsKey(pred)) { - newNodes.get(pred).successors().set(predIndex, node); + for (int i = 0; i < oldNode.successors().size(); i++) { + Node succ = oldNode.successors().get(i); + if (newNodes.containsKey(succ)) { + node.successors().setOrExpand(i, newNodes.get(succ)); } } } diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.graph/src/com/oracle/max/graal/graph/Node.java --- a/graal/com.oracle.max.graal.graph/src/com/oracle/max/graal/graph/Node.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.graph/src/com/oracle/max/graal/graph/Node.java Wed Jun 15 19:54:42 2011 +0200 @@ -39,7 +39,6 @@ final NodeArray successors; final ArrayList usages; final ArrayList predecessors; - final ArrayList predecessorsIndex; public Node(int inputCount, int successorCount, Graph graph) { assert graph != null : "cannot create a node for a null graph"; @@ -47,19 +46,14 @@ this.id = graph.register(this); this.inputs = new NodeArray(this, inputCount); this.successors = new NodeArray(this, successorCount); - this.predecessors = new ArrayList(); - this.usages = new ArrayList(); - this.predecessorsIndex = new ArrayList(); + this.predecessors = new ArrayList(1); + this.usages = new ArrayList(4); } public List predecessors() { return Collections.unmodifiableList(predecessors); } - public List predecessorsIndex() { - return Collections.unmodifiableList(predecessorsIndex); - } - public List usages() { return Collections.unmodifiableList(usages); } @@ -96,18 +90,19 @@ } int z = 0; for (Node predecessor : predecessors) { - int predIndex = predecessorsIndex.get(z); - predecessor.successors.nodes[predIndex] = other; + for (int i=0; i { private final Node node; - final Node[] nodes; + private Node[] nodes; + private final int fixedLength; + private int variableLength; public NodeArray(Node node, int length) { this.node = node; this.nodes = new Node[length]; + this.fixedLength = length; } @Override @@ -50,14 +53,84 @@ nodes[index] = node; return result; } + + public AbstractList variablePart() { + return new AbstractList() { + + @Override + public Node get(int index) { + checkIndex(index); + return NodeArray.this.get(fixedLength + index); + } + + @Override + public int size() { + return variableLength; + } + + public Node set(int index, Node element) { + checkIndex(index); + return NodeArray.this.set(fixedLength + index, element); + } + + public void add(int index, Node element) { + variableLength++; + checkIndex(index); + NodeArray.this.ensureSize(); + for (int i=size() - 1; i > index; i--) { + NodeArray.this.nodes[fixedLength + i] = NodeArray.this.nodes[fixedLength + i-1]; + } + set(index, element); + } + + private void checkIndex(int index) { + if (index < 0 || index >= size()) { + throw new IndexOutOfBoundsException(); + } + } + + @Override + public Node remove(int index) { + checkIndex(index); + Node n = get(index); + set(index, Node.Null); + for (int i=index; i < size() - 1; i++) { + NodeArray.this.nodes[fixedLength + i] = NodeArray.this.nodes[fixedLength + i + 1]; + } + NodeArray.this.nodes[fixedLength + size() - 1] = Node.Null; + variableLength--; + assert variableLength >= 0; + return n; + } + }; + } + + private void ensureSize() { + if (size() > nodes.length) { + nodes = Arrays.copyOf(nodes, (nodes.length + 1)*2); + } + } + + public void setOrExpand(int index, Node node) { + if (index < 0) { + throw new IndexOutOfBoundsException(); + } + + while (index >= size()) { + variablePart().add(Node.Null); + } + + set(index, node); + } @Override public Node set(int index, Node node) { assert !self().isDeleted() : "trying to set input/successor of deleted node: " + self().shortName(); assert node == Node.Null || node.graph == self().graph : "node is from different graph: (this=" + self() + ") and (node=" + node + ")"; assert node == Node.Null || node.id() != Node.DeletedID : "inserted node must not be deleted"; - Node old = nodes[index]; - + assert node != self() || node.getClass().toString().contains("Phi") : "No direct circles allowed in the graph! " + node; + + Node old = get(index); if (old != node) { silentSet(index, node); if (self().inputs == this) { @@ -72,15 +145,14 @@ if (old != null) { for (int i = 0; i < old.predecessors.size(); ++i) { Node cur = old.predecessors.get(i); - if (cur == self() && old.predecessorsIndex.get(i) == index) { + if (cur == self()) { old.predecessors.remove(i); - old.predecessorsIndex.remove(i); + break; } } } if (node != null) { node.predecessors.add(self()); - node.predecessorsIndex.add(index); } } } @@ -94,19 +166,26 @@ set(i, other.get(i)); } } + + private void checkIndex(int index) { + if (index < 0 || index >= size()) { + throw new IndexOutOfBoundsException(); + } + } @Override public Node get(int index) { + checkIndex(index); return nodes[index]; } @Override public Node[] toArray() { - return Arrays.copyOf(nodes, nodes.length); + return Arrays.copyOf(nodes, size()); } boolean replaceFirstOccurrence(Node toReplace, Node replacement) { - for (int i = 0; i < nodes.length; i++) { + for (int i = 0; i < size(); i++) { if (nodes[i] == toReplace) { nodes[i] = replacement; return true; @@ -121,7 +200,7 @@ public int replace(Node toReplace, Node replacement) { int result = 0; - for (int i = 0; i < nodes.length; i++) { + for (int i = 0; i < size(); i++) { if (nodes[i] == toReplace) { set(i, replacement); result++; @@ -136,7 +215,7 @@ int silentReplace(Node toReplace, Node replacement) { int result = 0; - for (int i = 0; i < nodes.length; i++) { + for (int i = 0; i < size(); i++) { if (nodes[i] == toReplace) { silentSet(i, replacement); result++; @@ -145,32 +224,13 @@ return result; } - public void setAndClear(int index, Node clearedNode, int clearedIndex) { - assert !self().isDeleted() : "trying to setAndClear successor of deleted node: " + self().shortName(); - assert self().successors == this; - Node value = clearedNode.successors.get(clearedIndex); - assert value != Node.Null; - clearedNode.successors.nodes[clearedIndex] = Node.Null; - set(index, Node.Null); - nodes[index] = value; - - for (int i = 0; i < value.predecessors.size(); ++i) { - if (value.predecessors.get(i) == clearedNode && value.predecessorsIndex.get(i) == clearedIndex) { - value.predecessors.set(i, self()); - value.predecessorsIndex.set(i, index); - return; - } - } - assert false; - } - @Override public int size() { - return nodes.length; + return fixedLength + variableLength; } public void clearAll() { - for (int i = 0; i < nodes.length; i++) { + for (int i = 0; i < size(); i++) { set(i, Node.Null); } } diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.graph/src/com/oracle/max/graal/graph/NodeBitMap.java --- a/graal/com.oracle.max.graal.graph/src/com/oracle/max/graal/graph/NodeBitMap.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.graph/src/com/oracle/max/graal/graph/NodeBitMap.java Wed Jun 15 19:54:42 2011 +0200 @@ -77,6 +77,7 @@ private void check(Node node) { assert node.graph == graph : "this node is not part of the graph"; assert !isNew(node) : "this node (" + node.id() + ") was added to the graph after creating the node bitmap (" + bitMap.length() + ")"; + assert !node.isDeleted() : "node " + node + " is deleted!"; } @Override diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/Compiler.java --- a/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/Compiler.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/Compiler.java Wed Jun 15 19:54:42 2011 +0200 @@ -23,11 +23,13 @@ package com.oracle.max.graal.runtime; import com.oracle.max.graal.compiler.*; +import com.sun.cri.ri.*; public interface Compiler { VMEntries getVMEntries(); VMExits getVMExits(); GraalCompiler getCompiler(); + RiType lookupType(String returnType, HotSpotTypeResolved accessingClass); } diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/CompilerImpl.java --- a/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/CompilerImpl.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/CompilerImpl.java Wed Jun 15 19:54:42 2011 +0200 @@ -155,4 +155,42 @@ return vmExits; } + @Override + public RiType lookupType(String returnType, HotSpotTypeResolved accessingClass) { + if (returnType.length() == 1 && vmExits instanceof VMExitsNative) { + VMExitsNative exitsNative = (VMExitsNative) vmExits; + CiKind kind = CiKind.fromPrimitiveOrVoidTypeChar(returnType.charAt(0)); + switch(kind) { + case Boolean: + return exitsNative.typeBoolean; + case Byte: + return exitsNative.typeByte; + case Char: + return exitsNative.typeChar; + case Double: + return exitsNative.typeDouble; + case Float: + return exitsNative.typeFloat; + case Illegal: + break; + case Int: + return exitsNative.typeInt; + case Jsr: + break; + case Long: + return exitsNative.typeLong; + case Object: + break; + case Short: + return exitsNative.typeShort; + case Void: + return exitsNative.typeVoid; + case Word: + break; + + } + } + return vmEntries.RiSignature_lookupType(returnType, accessingClass); + } + } diff -r 11dfbb40ca69 -r f49685081630 graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotSignature.java --- a/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotSignature.java Wed Jun 15 16:36:37 2011 +0200 +++ b/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotSignature.java Wed Jun 15 19:54:42 2011 +0200 @@ -117,7 +117,7 @@ } RiType type = argumentTypes[index]; if (type == null) { - type = compiler.getVMEntries().RiSignature_lookupType(arguments.get(index), (HotSpotTypeResolved) accessingClass); + type = compiler.lookupType(arguments.get(index), (HotSpotTypeResolved) accessingClass); argumentTypes[index] = type; } return type; @@ -136,7 +136,7 @@ @Override public RiType returnType(RiType accessingClass) { if (returnTypeCache == null) { - returnTypeCache = compiler.getVMEntries().RiSignature_lookupType(returnType, (HotSpotTypeResolved) accessingClass); + returnTypeCache = compiler.lookupType(returnType, (HotSpotTypeResolved) accessingClass); } return returnTypeCache; } diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/BatikSVGProxy/src/com/sun/hotspot/igv/svg/BatikSVG.java --- a/src/share/tools/IdealGraphVisualizer/BatikSVGProxy/src/com/sun/hotspot/igv/svg/BatikSVG.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/BatikSVGProxy/src/com/sun/hotspot/igv/svg/BatikSVG.java Wed Jun 15 19:54:42 2011 +0200 @@ -44,7 +44,7 @@ private static Method createDefaultMethod; private static Method getDOMImplementationMethod; private static Method setEmbeddedFontsOnMethod; - private static Class classSVGGraphics2D; + private static Class classSVGGraphics2D; /** * Creates a graphics object that allows to be exported to SVG data using the {@link #printToStream(Graphics2D, Writer, boolean) printToStream} method. @@ -54,8 +54,8 @@ try { if (SVGGraphics2DConstructor == null) { ClassLoader cl = BatikSVG.class.getClassLoader(); - Class classGenericDOMImplementation = cl.loadClass("org.apache.batik.dom.GenericDOMImplementation"); - Class classSVGGeneratorContext = cl.loadClass("org.apache.batik.svggen.SVGGeneratorContext"); + Class classGenericDOMImplementation = cl.loadClass("org.apache.batik.dom.GenericDOMImplementation"); + Class classSVGGeneratorContext = cl.loadClass("org.apache.batik.svggen.SVGGeneratorContext"); classSVGGraphics2D = cl.loadClass("org.apache.batik.svggen.SVGGraphics2D"); getDOMImplementationMethod = classGenericDOMImplementation.getDeclaredMethod("getDOMImplementation", new Class[0]); createDefaultMethod = classSVGGeneratorContext.getDeclaredMethod("createDefault", new Class[]{org.w3c.dom.Document.class}); diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/Bytecodes/src/com/sun/hotspot/igv/bytecodes/BytecodeNode.java --- a/src/share/tools/IdealGraphVisualizer/Bytecodes/src/com/sun/hotspot/igv/bytecodes/BytecodeNode.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Bytecodes/src/com/sun/hotspot/igv/bytecodes/BytecodeNode.java Wed Jun 15 19:54:42 2011 +0200 @@ -29,7 +29,6 @@ import com.sun.hotspot.igv.data.Properties; import com.sun.hotspot.igv.data.Properties.StringPropertyMatcher; import java.awt.Image; -import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -37,7 +36,7 @@ import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; import org.openide.nodes.Node; -import org.openide.util.Utilities; +import org.openide.util.ImageUtilities; /** * @@ -70,9 +69,9 @@ @Override public Image getIcon(int i) { if (nodes != null) { - return Utilities.loadImage("com/sun/hotspot/igv/bytecodes/images/link.gif"); + return ImageUtilities.loadImage("com/sun/hotspot/igv/bytecodes/images/link.gif"); } else { - return Utilities.loadImage("com/sun/hotspot/igv/bytecodes/images/bytecode.gif"); + return ImageUtilities.loadImage("com/sun/hotspot/igv/bytecodes/images/bytecode.gif"); } } @@ -92,6 +91,7 @@ } @Override + @SuppressWarnings("unchecked") public T getCookie(Class aClass) { if (aClass == SelectBytecodesCookie.class && nodes != null) { return (T) (new SelectBytecodesCookie(nodes)); diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/Bytecodes/src/com/sun/hotspot/igv/bytecodes/BytecodeViewTopComponent.java --- a/src/share/tools/IdealGraphVisualizer/Bytecodes/src/com/sun/hotspot/igv/bytecodes/BytecodeViewTopComponent.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Bytecodes/src/com/sun/hotspot/igv/bytecodes/BytecodeViewTopComponent.java Wed Jun 15 19:54:42 2011 +0200 @@ -128,7 +128,7 @@ @Override public void componentOpened() { - Lookup.Template tpl = new Lookup.Template(InputGraphProvider.class); + Lookup.Template tpl = new Lookup.Template(InputGraphProvider.class); result = Utilities.actionsGlobalContext().lookup(tpl); result.addLookupListener(this); } diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/Bytecodes/src/com/sun/hotspot/igv/bytecodes/MethodNode.java --- a/src/share/tools/IdealGraphVisualizer/Bytecodes/src/com/sun/hotspot/igv/bytecodes/MethodNode.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Bytecodes/src/com/sun/hotspot/igv/bytecodes/MethodNode.java Wed Jun 15 19:54:42 2011 +0200 @@ -30,7 +30,7 @@ import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; import org.openide.nodes.Node; -import org.openide.util.Utilities; +import org.openide.util.ImageUtilities; /** * @@ -38,7 +38,7 @@ */ public class MethodNode extends AbstractNode { - private static class MethodNodeChildren extends Children.Keys { + private static class MethodNodeChildren extends Children.Keys { private InputMethod method; private InputGraph graph; @@ -50,9 +50,7 @@ this.graph = graph; } - protected Node[] createNodes(Object object) { - assert object instanceof InputBytecode; - InputBytecode bc = (InputBytecode) object; + protected Node[] createNodes(InputBytecode bc) { if (bc.getInlined() == null) { return new Node[]{new BytecodeNode(bc, graph, bciString)}; } else { @@ -84,7 +82,7 @@ @Override public Image getIcon(int i) { - return Utilities.loadImage("com/sun/hotspot/igv/bytecodes/images/method.gif"); + return ImageUtilities.loadImage("com/sun/hotspot/igv/bytecodes/images/method.gif"); } @Override diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowScene.java --- a/src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowScene.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowScene.java Wed Jun 15 19:54:42 2011 +0200 @@ -24,7 +24,6 @@ package com.sun.hotspot.igv.controlflow; import com.sun.hotspot.igv.data.InputBlock; -import com.sun.hotspot.igv.controlflow.InputBlockEdge; import com.sun.hotspot.igv.data.InputGraph; import com.sun.hotspot.igv.data.services.InputGraphProvider; import com.sun.hotspot.igv.data.InputNode; @@ -44,15 +43,14 @@ import org.netbeans.api.visual.action.WidgetAction; import org.netbeans.api.visual.anchor.AnchorFactory; import org.netbeans.api.visual.anchor.AnchorShape; -import org.netbeans.api.visual.layout.LayoutFactory; import org.netbeans.api.visual.router.RouterFactory; import org.netbeans.api.visual.widget.LayerWidget; import org.netbeans.api.visual.widget.Widget; import org.netbeans.api.visual.graph.GraphScene; import org.netbeans.api.visual.graph.layout.GraphLayout; +import org.netbeans.api.visual.layout.LayoutFactory; import org.netbeans.api.visual.layout.SceneLayout; import org.netbeans.api.visual.widget.ConnectionWidget; -import org.openide.util.Utilities; /** * @@ -121,7 +119,7 @@ } } - GraphLayout layout = new HierarchicalGraphLayout();//GridGraphLayout(); + GraphLayout layout = new HierarchicalGraphLayout();//GridGraphLayout(); SceneLayout sceneLayout = LayoutFactory.createSceneGraphLayout(this, layout); sceneLayout.invokeLayout(); diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowTopComponent.java --- a/src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowTopComponent.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/ControlFlowTopComponent.java Wed Jun 15 19:54:42 2011 +0200 @@ -123,7 +123,7 @@ @Override public void componentOpened() { - Lookup.Template tpl = new Lookup.Template(InputGraphProvider.class); + Lookup.Template tpl = new Lookup.Template(InputGraphProvider.class); result = Utilities.actionsGlobalContext().lookup(tpl); result.addLookupListener(this); } diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/HierarchicalGraphLayout.java --- a/src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/HierarchicalGraphLayout.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/ControlFlow/src/com/sun/hotspot/igv/controlflow/HierarchicalGraphLayout.java Wed Jun 15 19:54:42 2011 +0200 @@ -34,7 +34,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; -import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -128,6 +127,7 @@ } public int compareTo(Vertex o) { + @SuppressWarnings("unchecked") VertexWrapper vw = (VertexWrapper) o; return node.toString().compareTo(vw.node.toString()); } diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/FolderNode.java --- a/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/FolderNode.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/FolderNode.java Wed Jun 15 19:54:42 2011 +0200 @@ -36,7 +36,7 @@ import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; import org.openide.nodes.Node; -import org.openide.util.Utilities; +import org.openide.util.ImageUtilities; import org.openide.util.lookup.AbstractLookup; import org.openide.util.lookup.InstanceContent; @@ -52,7 +52,7 @@ private List subFolders; private FolderChildren children; - private static class FolderChildren extends Children.Keys implements ChangedListener { + private static class FolderChildren extends Children.Keys>> implements ChangedListener { private FolderNode parent; private List registeredGroups; @@ -68,14 +68,13 @@ } @Override - protected Node[] createNodes(Object arg0) { + protected Node[] createNodes(Pair> p) { for(Group g : registeredGroups) { g.getChangedEvent().removeListener(this); } registeredGroups.clear(); - Pair> p = (Pair>) arg0; if (p.getLeft().length() == 0) { List curNodes = new ArrayList(); @@ -116,7 +115,7 @@ @Override public Image getIcon(int i) { - return Utilities.loadImage("com/sun/hotspot/igv/coordinator/images/folder.gif"); + return ImageUtilities.loadImage("com/sun/hotspot/igv/coordinator/images/folder.gif"); } protected FolderNode(GraphDocument document, String name, GroupOrganizer organizer, List subFolders, List groups) { diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/GraphNode.java --- a/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/GraphNode.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/GraphNode.java Wed Jun 15 19:54:42 2011 +0200 @@ -37,8 +37,8 @@ import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; import org.openide.nodes.Sheet; +import org.openide.util.ImageUtilities; import org.openide.util.Lookup; -import org.openide.util.Utilities; import org.openide.util.lookup.AbstractLookup; import org.openide.util.lookup.InstanceContent; @@ -98,7 +98,7 @@ @Override public Image getIcon(int i) { - return Utilities.loadImage("com/sun/hotspot/igv/coordinator/images/graph.gif"); + return ImageUtilities.loadImage("com/sun/hotspot/igv/coordinator/images/graph.gif"); } @Override diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/StandardConfiguration.xml --- a/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/StandardConfiguration.xml Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/StandardConfiguration.xml Wed Jun 15 19:54:42 2011 +0200 @@ -5,7 +5,6 @@ - diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/actions/StructuredViewAction.java --- a/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/actions/StructuredViewAction.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/actions/StructuredViewAction.java Wed Jun 15 19:54:42 2011 +0200 @@ -51,8 +51,8 @@ import javax.swing.event.PopupMenuListener; import org.openide.awt.DropDownButtonFactory; import org.openide.util.HelpCtx; +import org.openide.util.ImageUtilities; import org.openide.util.Lookup; -import org.openide.util.Utilities; import org.openide.util.actions.CallableSystemAction; public class StructuredViewAction extends CallableSystemAction { @@ -71,7 +71,7 @@ @Override public Component getToolbarPresenter() { - Image iconImage = Utilities.loadImage("com/sun/hotspot/igv/coordinator/images/structure.gif"); + Image iconImage = ImageUtilities.loadImage("com/sun/hotspot/igv/coordinator/images/structure.gif"); ImageIcon icon = new ImageIcon(iconImage); popup = new JPopupMenu(); diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/layer.xml --- a/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/layer.xml Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/layer.xml Wed Jun 15 19:54:42 2011 +0200 @@ -1,5 +1,5 @@ - + @@ -96,19 +96,16 @@ - - - - + + + + - + + - - - diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Properties.java --- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Properties.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/Properties.java Wed Jun 15 19:54:42 2011 +0200 @@ -183,8 +183,12 @@ private String name; private Pattern valuePattern; + + public RegexpPropertyMatcher(String name, String value) { + this(name, value, 0); + } - public RegexpPropertyMatcher(String name, String value) { + public RegexpPropertyMatcher(String name, String value, int flags) { if (name == null) { throw new IllegalArgumentException("Property name must not be null!"); @@ -197,7 +201,7 @@ this.name = name; try { - valuePattern = Pattern.compile(value); + valuePattern = Pattern.compile(value, flags); } catch (PatternSyntaxException e) { throw new IllegalArgumentException("Bad pattern: " + value); } diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Parser.java --- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Parser.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Parser.java Wed Jun 15 19:54:42 2011 +0200 @@ -32,7 +32,6 @@ import com.sun.hotspot.igv.data.InputNode; import com.sun.hotspot.igv.data.Pair; import com.sun.hotspot.igv.data.Properties; -import com.sun.hotspot.igv.data.Property; import com.sun.hotspot.igv.data.services.GroupCallback; import com.sun.hotspot.igv.data.serialization.XMLParser.ElementHandler; import com.sun.hotspot.igv.data.serialization.XMLParser.HandoverElementHandler; @@ -92,7 +91,7 @@ public static final String SUCCESSOR_ELEMENT = "successor"; public static final String ASSEMBLY_ELEMENT = "assembly"; public static final String DIFFERENCE_PROPERTY = "difference"; - private TopElementHandler xmlDocument = new TopElementHandler(); + private TopElementHandler xmlDocument = new TopElementHandler(); private boolean difference; private GroupCallback groupCallback; private HashMap idCache = new HashMap(); diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/XMLParser.java --- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/XMLParser.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/XMLParser.java Wed Jun 15 19:54:42 2011 +0200 @@ -23,7 +23,6 @@ */ package com.sun.hotspot.igv.data.serialization; -import com.sun.hotspot.igv.data.Property; import com.sun.hotspot.igv.data.Properties; import java.util.HashMap; import java.util.Stack; @@ -209,9 +208,10 @@ public void endPrefixMapping(String prefix) throws SAXException { } + @SuppressWarnings("unchecked") public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { + assert !stack.isEmpty(); - assert !stack.isEmpty(); ElementHandler parent = stack.peek(); if (parent != null) { ElementHandler child = parent.getChild(qName); diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/Data/test/unit/src/com/sun/hotspot/igv/data/ChangedEventTest.java --- a/src/share/tools/IdealGraphVisualizer/Data/test/unit/src/com/sun/hotspot/igv/data/ChangedEventTest.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Data/test/unit/src/com/sun/hotspot/igv/data/ChangedEventTest.java Wed Jun 15 19:54:42 2011 +0200 @@ -62,7 +62,7 @@ @Test public void testBase() { - ChangedEvent e = new ChangedEvent(5); + ChangedEvent e = new ChangedEvent(5); final int[] fireCount = new int[1]; e.addListener(new ChangedListener() { diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/CustomFilter.java --- a/src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/CustomFilter.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Filter/src/com/sun/hotspot/igv/filter/CustomFilter.java Wed Jun 15 19:54:42 2011 +0200 @@ -38,6 +38,7 @@ import org.openide.filesystems.Repository; import org.openide.filesystems.FileSystem; import org.openide.filesystems.FileObject; +import org.openide.filesystems.FileUtil; import org.openide.util.Exceptions; import org.openide.util.Lookup; @@ -126,8 +127,7 @@ InputStream is = null; StringBuilder sb = new StringBuilder("importPackage(Packages.com.sun.hotspot.igv.filter);importPackage(Packages.com.sun.hotspot.igv.graph);importPackage(Packages.com.sun.hotspot.igv.data);importPackage(Packages.com.sun.hotspot.igv.util);importPackage(java.awt);"); try { - FileSystem fs = Repository.getDefault().getDefaultFileSystem(); - FileObject fo = fs.getRoot().getFileObject(JAVASCRIPT_HELPER_ID); + FileObject fo = FileUtil.getConfigRoot().getFileObject(JAVASCRIPT_HELPER_ID); is = fo.getInputStream(); BufferedReader r = new BufferedReader(new InputStreamReader(is)); String s; diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/FilterWindow/src/com/sun/hotspot/igv/filterwindow/FilterTopComponent.java --- a/src/share/tools/IdealGraphVisualizer/FilterWindow/src/com/sun/hotspot/igv/filterwindow/FilterTopComponent.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/FilterWindow/src/com/sun/hotspot/igv/filterwindow/FilterTopComponent.java Wed Jun 15 19:54:42 2011 +0200 @@ -82,6 +82,7 @@ import org.openide.filesystems.Repository; import org.openide.filesystems.FileSystem; import org.openide.filesystems.FileObject; +import org.openide.filesystems.FileUtil; /** * @@ -267,20 +268,18 @@ } } - private class FilterChildren extends Children.Keys implements ChangedListener { + private class FilterChildren extends Children.Keys implements ChangedListener { - private HashMap nodeHash = new HashMap(); + private HashMap nodeHash = new HashMap(); - protected Node[] createNodes(Object object) { - if (nodeHash.containsKey(object)) { - return new Node[]{nodeHash.get(object)}; + protected Node[] createNodes(Filter filter) { + if (nodeHash.containsKey(filter)) { + return new Node[]{nodeHash.get(filter)}; } - assert object instanceof Filter; - Filter filter = (Filter) object; FilterNode node = new FilterNode(filter); node.getSelectionChangedEvent().addListener(this); - nodeHash.put(object, node); + nodeHash.put(filter, node); return new Node[]{node}; } @@ -295,6 +294,7 @@ setBefore(false); } + @Override protected void addNotify() { setKeys(sequence.getFilters()); updateSelection(); @@ -420,9 +420,7 @@ } public void initFilters() { - - FileSystem fs = Repository.getDefault().getDefaultFileSystem(); - FileObject folder = fs.getRoot().getFileObject(FOLDER_ID); + FileObject folder = FileUtil.getConfigRoot().getFileObject(FOLDER_ID); FileObject[] children = folder.getChildren(); List customFilters = new ArrayList(); @@ -585,10 +583,10 @@ } private FileObject getFileObject(CustomFilter cf) { - FileObject fo = Repository.getDefault().getDefaultFileSystem().getRoot().getFileObject(FOLDER_ID + "/" + cf.getName()); + FileObject fo = FileUtil.getConfigRoot().getFileObject(FOLDER_ID + "/" + cf.getName()); if (fo == null) { try { - fo = org.openide.filesystems.Repository.getDefault().getDefaultFileSystem().getRoot().getFileObject(FOLDER_ID).createData(cf.getName()); + fo = FileUtil.getConfigRoot().getFileObject(FOLDER_ID).createData(cf.getName()); } catch (IOException ex) { Exceptions.printStackTrace(ex); } diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/GraphTextEditor/src/com/sun/hotspot/igv/graphtexteditor/TextTopComponent.java --- a/src/share/tools/IdealGraphVisualizer/GraphTextEditor/src/com/sun/hotspot/igv/graphtexteditor/TextTopComponent.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/GraphTextEditor/src/com/sun/hotspot/igv/graphtexteditor/TextTopComponent.java Wed Jun 15 19:54:42 2011 +0200 @@ -260,7 +260,7 @@ DiagramProvider p = LookupHistory.getLast(DiagramProvider.class); updateDiagramProvider(p); - Lookup.Template tpl = new Lookup.Template(DiagramProvider.class); + Lookup.Template tpl = new Lookup.Template(DiagramProvider.class); result = Utilities.actionsGlobalContext().lookup(tpl); result.addLookupListener(this); } diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/HierarchicalLayoutManager.java --- a/src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/HierarchicalLayoutManager.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/HierarchicalLayoutManager.java Wed Jun 15 19:54:42 2011 +0200 @@ -565,12 +565,16 @@ n.x = space[n.layer].get(n.pos); } } - - protected void run() { - + + @SuppressWarnings("unchecked") + private void createArrays() { space = new ArrayList[layers.length]; downProcessingOrder = new ArrayList[layers.length]; upProcessingOrder = new ArrayList[layers.length]; + } + + protected void run() { + createArrays(); for (int i = 0; i < layers.length; i++) { space[i] = new ArrayList(); @@ -1106,14 +1110,18 @@ assert n.layer < layerCount; } } - - protected void run() { - + + @SuppressWarnings("unchecked") + private void createLayers() { layers = new List[layerCount]; for (int i = 0; i < layerCount; i++) { layers[i] = new ArrayList(); } + } + + protected void run() { + createLayers(); // Generate initial ordering HashSet visited = new HashSet(); diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/OldHierarchicalLayoutManager.java --- a/src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/OldHierarchicalLayoutManager.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/OldHierarchicalLayoutManager.java Wed Jun 15 19:54:42 2011 +0200 @@ -499,7 +499,8 @@ //} - ArrayList> layers[] = new ArrayList[maxLayer + 1]; + @SuppressWarnings("unchecked") + ArrayList> layers[] = (ArrayList>[]) new ArrayList[maxLayer + 1]; int layerSizes[] = new int[maxLayer + 1]; for (int i = 0; i < maxLayer + 1; i++) { layers[i] = new ArrayList>(); @@ -1113,7 +1114,7 @@ int removedCount = 0; int reversedCount = 0; - Graph.DFSTraversalVisitor visitor = graph.new DFSTraversalVisitor() { + Graph.DFSTraversalVisitor visitor = graph.new DFSTraversalVisitor() { @Override public boolean visitEdge(Edge e, boolean backEdge) { @@ -1159,7 +1160,7 @@ n.getData().setLayer(-1); } - Graph.BFSTraversalVisitor traverser = graph.new BFSTraversalVisitor() { + Graph.BFSTraversalVisitor traverser = graph.new BFSTraversalVisitor() { @Override public void visitNode(Node n, int depth) { diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/Java6ScriptingProxy/src/com/sun/hotspot/igv/java6scriptingproxy/JavaSE6ScriptEngine.java --- a/src/share/tools/IdealGraphVisualizer/Java6ScriptingProxy/src/com/sun/hotspot/igv/java6scriptingproxy/JavaSE6ScriptEngine.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Java6ScriptingProxy/src/com/sun/hotspot/igv/java6scriptingproxy/JavaSE6ScriptEngine.java Wed Jun 15 19:54:42 2011 +0200 @@ -43,13 +43,12 @@ public boolean initialize(String jsHelperText) { try { - ClassLoader cl = JavaSE6ScriptEngine.class.getClassLoader(); - Class managerClass = cl.loadClass("javax.script.ScriptEngineManager"); - Class engineClass = cl.loadClass("javax.script.ScriptEngine"); - Class bindingsClass = cl.loadClass("javax.script.Bindings"); - Class contextClass = cl.loadClass("javax.script.ScriptContext"); - + Class managerClass = cl.loadClass("javax.script.ScriptEngineManager"); + Class engineClass = cl.loadClass("javax.script.ScriptEngine"); + Class bindingsClass = cl.loadClass("javax.script.Bindings"); + Class contextClass = cl.loadClass("javax.script.ScriptContext"); + Object manager = managerClass.newInstance(); Method getEngineByName = managerClass.getMethod("getEngineByName", String.class); engine = getEngineByName.invoke(manager, "ECMAScript"); @@ -63,7 +62,7 @@ bindings = getBindings.invoke(context, f.getInt(null)); Bindings_put = bindingsClass.getMethod("put", String.class, Object.class); Bindings_put.invoke(bindings, "IO", System.out); - + /* * Non-reflective code: ScriptEngineManager sem = new ScriptEngineManager(); diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/RhinoScriptEngineProxy/src/com/sun/hotspot/igv/rhino/RhinoScriptEngine.java --- a/src/share/tools/IdealGraphVisualizer/RhinoScriptEngineProxy/src/com/sun/hotspot/igv/rhino/RhinoScriptEngine.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/RhinoScriptEngineProxy/src/com/sun/hotspot/igv/rhino/RhinoScriptEngine.java Wed Jun 15 19:54:42 2011 +0200 @@ -27,7 +27,6 @@ import com.sun.hotspot.igv.filter.ScriptEngineAbstraction; import com.sun.hotspot.igv.graph.Diagram; import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** @@ -45,11 +44,11 @@ public boolean initialize(String s) { this.jsHelperText = s; - Class importerTopLevel = null; + Class importerTopLevel = null; try { ClassLoader cl = RhinoScriptEngine.class.getClassLoader(); - Class context = cl.loadClass("org.mozilla.javascript.Context"); - Class scriptable = cl.loadClass("org.mozilla.javascript.Scriptable"); + Class context = cl.loadClass("org.mozilla.javascript.Context"); + Class scriptable = cl.loadClass("org.mozilla.javascript.Scriptable"); importerTopLevel = cl.loadClass("org.mozilla.javascript.ImporterTopLevel"); importer = importerTopLevel.getDeclaredConstructor(context); scope_put = importerTopLevel.getMethod("put", String.class, scriptable, Object.class); diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/ServerCompiler/src/com/sun/hotspot/igv/servercompiler/ServerCompilerGraphToTextConverter.java --- a/src/share/tools/IdealGraphVisualizer/ServerCompiler/src/com/sun/hotspot/igv/servercompiler/ServerCompilerGraphToTextConverter.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/ServerCompiler/src/com/sun/hotspot/igv/servercompiler/ServerCompilerGraphToTextConverter.java Wed Jun 15 19:54:42 2011 +0200 @@ -149,7 +149,7 @@ private static final PropertyMatcher MATCHER = new Properties.RegexpPropertyMatcher("name", "Root"); public boolean canConvert(InputGraph graph) { - return new PropertySelector(graph.getNodes()).selectSingle(MATCHER) != null; + return new PropertySelector(graph.getNodes()).selectSingle(MATCHER) != null; } private Color calcColor(InputNode node) { diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/Settings/src/com/sun/hotspot/igv/settings/ViewOptionsCategory.java --- a/src/share/tools/IdealGraphVisualizer/Settings/src/com/sun/hotspot/igv/settings/ViewOptionsCategory.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Settings/src/com/sun/hotspot/igv/settings/ViewOptionsCategory.java Wed Jun 15 19:54:42 2011 +0200 @@ -27,8 +27,8 @@ import javax.swing.ImageIcon; import org.netbeans.spi.options.OptionsCategory; import org.netbeans.spi.options.OptionsPanelController; +import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; -import org.openide.util.Utilities; /** * @@ -38,7 +38,7 @@ @Override public Icon getIcon() { - return new ImageIcon(Utilities.loadImage("com/sun/hotspot/igv/settings/settings.gif")); + return new ImageIcon(ImageUtilities.loadImage("com/sun/hotspot/igv/settings/settings.gif")); } public String getCategoryName() { diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/Util/src/com/sun/hotspot/igv/util/LookupHistory.java --- a/src/share/tools/IdealGraphVisualizer/Util/src/com/sun/hotspot/igv/util/LookupHistory.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Util/src/com/sun/hotspot/igv/util/LookupHistory.java Wed Jun 15 19:54:42 2011 +0200 @@ -21,10 +21,9 @@ * questions. * */ - package com.sun.hotspot.igv.util; -import java.util.Hashtable; +import java.util.HashMap; import java.util.Map; import org.openide.util.Lookup.Result; import org.openide.util.LookupEvent; @@ -37,13 +36,12 @@ */ public class LookupHistory { - private static Map cache = new Hashtable(); + private static Map cache = new HashMap(); private static class LookupHistoryImpl implements LookupListener { private Class klass; private Result result; - private T last; public LookupHistoryImpl(Class klass) { @@ -65,20 +63,16 @@ } } - - public static void init(Class klass) { - + public static void init(Class klass) { if (!cache.containsKey(klass)) { - cache.put(klass, new LookupHistoryImpl(klass)); + cache.put(klass, new LookupHistoryImpl(klass)); } } + @SuppressWarnings("unchecked") public static T getLast(Class klass) { - init(klass); - assert cache.containsKey(klass); - return (T) cache.get(klass).getLast(); } } diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramScene.java --- a/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramScene.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramScene.java Wed Jun 15 19:54:42 2011 +0200 @@ -57,8 +57,6 @@ import java.awt.Point; import java.awt.Rectangle; import java.awt.event.ActionEvent; -import java.awt.event.MouseEvent; -import java.awt.event.MouseMotionListener; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.util.ArrayList; @@ -123,6 +121,7 @@ private DiagramViewModel model; private DiagramViewModel modelCopy; private WidgetAction zoomAction; + private boolean rebuilding; /** * The alpha level of partially visible figures. @@ -327,6 +326,11 @@ } public void selectionChanged(ObjectSceneEvent e, Set oldSet, Set newSet) { + DiagramScene scene = (DiagramScene) e.getObjectScene(); + if (scene.isRebuilding()) { + return; + } + content.set(newSet, null); Set nodeSelection = new HashSet(); @@ -507,6 +511,8 @@ private void update() { mainLayer.removeChildren(); blockLayer.removeChildren(); + + rebuilding = true; Collection objects = new ArrayList(this.getObjects()); for (Object o : objects) { @@ -515,7 +521,7 @@ Diagram d = getModel().getDiagramToView(); - if (d.getGraph().getBlocks().size() == 0) { + if (d.getGraph().getBlocks().isEmpty()) { Scheduler s = Lookup.getDefault().lookup(Scheduler.class); d.getGraph().clearBlocks(); s.schedule(d.getGraph()); @@ -557,9 +563,13 @@ blockLayer.addChild(w); } } - + + rebuilding = false; this.smallUpdate(true); - + } + + public boolean isRebuilding() { + return rebuilding; } private void smallUpdate(boolean relayout) { diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramViewModel.java --- a/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramViewModel.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramViewModel.java Wed Jun 15 19:54:42 2011 +0200 @@ -249,7 +249,6 @@ index++; } } - this.setColors(colors); } setColors(colors); viewChangedEvent.fire(); diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramViewer.java --- a/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramViewer.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramViewer.java Wed Jun 15 19:54:42 2011 +0200 @@ -27,6 +27,7 @@ import com.sun.hotspot.igv.graph.Figure; import java.awt.Component; import java.awt.Graphics2D; +import java.util.Collection; import java.util.List; import javax.swing.JComponent; import org.openide.awt.UndoRedo; @@ -57,6 +58,8 @@ public void componentShowing(); public void initialize(); + + public void setSelection(Collection
list); public void centerFigures(List
list); diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/EditorTopComponent.java --- a/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/EditorTopComponent.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/EditorTopComponent.java Wed Jun 15 19:54:42 2011 +0200 @@ -46,7 +46,6 @@ import com.sun.hotspot.igv.data.services.InputGraphProvider; import com.sun.hotspot.igv.filter.FilterChainProvider; import com.sun.hotspot.igv.graph.services.DiagramProvider; -import com.sun.hotspot.igv.selectioncoordinator.SelectionCoordinator; import com.sun.hotspot.igv.util.RangeSlider; import com.sun.hotspot.igv.svg.BatikSVG; import com.sun.hotspot.igv.util.LookupHistory; @@ -54,7 +53,6 @@ import java.awt.CardLayout; import java.awt.Color; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.event.HierarchyBoundsListener; import java.awt.event.HierarchyEvent; import java.awt.event.KeyEvent; @@ -436,7 +434,7 @@ } public void setSelectedFigures(List
list) { - getModel().setSelectedFigures(list); + scene.setSelection(list); scene.centerFigures(list); } diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/NodeQuickSearch.java --- a/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/NodeQuickSearch.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/NodeQuickSearch.java Wed Jun 15 19:54:42 2011 +0200 @@ -33,11 +33,13 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.regex.Pattern; import org.netbeans.spi.quicksearch.SearchProvider; import org.netbeans.spi.quicksearch.SearchRequest; import org.netbeans.spi.quicksearch.SearchResponse; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; +import org.openide.NotifyDescriptor.Message; /** * @@ -45,6 +47,8 @@ */ public class NodeQuickSearch implements SearchProvider { + private static final String DEFAULT_PROPERTY = "name"; + /** * Method is called by infrastructure when search operation was requested. * Implementors should evaluate given request and fill response object with @@ -54,51 +58,67 @@ * @param response Search response object that stores search results. Note that it's important to react to return value of SearchResponse.addResult(...) method and stop computation if false value is returned. */ public void evaluate(SearchRequest request, SearchResponse response) { - - final String[] parts = request.getText().split("="); - if (parts.length == 0) { + String query = request.getText(); + if (query.trim().isEmpty()) { return; } - String tmpName = parts[0]; + final String[] parts = query.split("=", 2); + + String name; + String value; - String value = null; - if (parts.length == 2) { + if (parts.length == 1) { + name = DEFAULT_PROPERTY; + value = ".*" + Pattern.quote(parts[0]) + ".*"; + } else { + name = parts[0]; value = parts[1]; } - if (parts.length == 1 && request.getText().endsWith("=")) { + if (value.isEmpty()) { value = ".*"; } - final String name = tmpName; + final InputGraphProvider p = LookupHistory.getLast(InputGraphProvider.class); + if (p != null && p.getGraph() != null) { + List matches = null; + try { + RegexpPropertyMatcher matcher = new RegexpPropertyMatcher(name, value, Pattern.CASE_INSENSITIVE); + Properties.PropertySelector selector = new Properties.PropertySelector(p.getGraph().getNodes()); - if (value != null) { - final InputGraphProvider p = LookupHistory.getLast(InputGraphProvider.class);//)Utilities.actionsGlobalContext().lookup(InputGraphProvider.class); - if (p != null) { - final InputGraph graph = p.getGraph(); - if (graph != null) { - final RegexpPropertyMatcher matcher = new RegexpPropertyMatcher(name, value); - final Properties.PropertySelector selector = new Properties.PropertySelector(graph.getNodes()); - final List list = selector.selectMultiple(matcher); - final Set set = new HashSet(list); + matches = selector.selectMultiple(matcher); + } catch (Exception e) { + final String msg = e.getMessage(); + response.addResult(new Runnable() { + public void run() { + Message desc = new NotifyDescriptor.Message("An exception occurred during the search, " + + "perhaps due to a malformed query string:\n" + msg, + NotifyDescriptor.WARNING_MESSAGE); + DialogDisplayer.getDefault().notify(desc); + } + }, + "(Error during search)" + ); + } - response.addResult(new Runnable() { - + if (matches != null) { + final Set set = new HashSet(matches); + response.addResult(new Runnable() { public void run() { - final EditorTopComponent comp = EditorTopComponent.getActive(); if (comp != null) { comp.setSelectedNodes(set); comp.requestActive(); } } - }, "All " + list.size() + " matching nodes (" + name + "=" + value + ")"); - for (final InputNode n : list) { + }, + "All " + matches.size() + " matching nodes (" + name + "=" + value + ")" + ); - - response.addResult(new Runnable() { - + // Single matches + for (final InputNode n : matches) { + response.addResult(new Runnable() { public void run() { final EditorTopComponent comp = EditorTopComponent.getActive(); if (comp != null) { @@ -106,68 +126,15 @@ tmpSet.add(n); comp.setSelectedNodes(tmpSet); comp.requestActive(); - comp.requestFocus(); } } - }, n.getProperties().get(name) + " (" + n.getId() + " " + n.getProperties().get("name") + ")"); - } - } - - } else { - System.out.println("no input graph provider!"); - } - - } else if (parts.length == 1) { - - final InputGraphProvider p = LookupHistory.getLast(InputGraphProvider.class);//Utilities.actionsGlobalContext().lookup(InputGraphProvider.class); - - if (p != null) { - - final InputGraph graph = p.getGraph(); - if (p != null && graph != null) { - - Set properties = new HashSet(); - for (InputNode n : p.getGraph().getNodes()) { - for (Property property : n.getProperties()) { - properties.add(property.getName()); - } - } - - for (final String propertyName : properties) { - - if (propertyName.startsWith(name)) { - - response.addResult(new Runnable() { - - public void run() { - - NotifyDescriptor.InputLine d = - new NotifyDescriptor.InputLine("Value of the property?", "Property Value Input"); - if (DialogDisplayer.getDefault().notify(d) == NotifyDescriptor.OK_OPTION) { - String value = d.getInputText(); - final RegexpPropertyMatcher matcher = new RegexpPropertyMatcher(propertyName, value); - final Properties.PropertySelector selector = new Properties.PropertySelector(graph.getNodes()); - final List list = selector.selectMultiple(matcher); - final Set set = new HashSet(list); - - final EditorTopComponent comp = EditorTopComponent.getActive(); - if (comp != null) { - comp.setSelectedNodes(set); - comp.requestActive(); - } - - } - - - } - }, propertyName + "="); - } - } - - } else { - System.out.println("no input graph provider!"); + }, + n.getProperties().get(name) + " (" + n.getId() + " " + n.getProperties().get("name") + ")" + ); } } + } else { + System.out.println("no input graph provider!"); } } } diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/actions/EnableBlockLayoutAction.java --- a/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/actions/EnableBlockLayoutAction.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/actions/EnableBlockLayoutAction.java Wed Jun 15 19:54:42 2011 +0200 @@ -27,6 +27,7 @@ import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.ImageIcon; +import org.openide.util.ImageUtilities; /** * @@ -39,7 +40,7 @@ public EnableBlockLayoutAction() { state = true; - putValue(AbstractAction.SMALL_ICON, new ImageIcon(org.openide.util.Utilities.loadImage(iconResource()))); + putValue(AbstractAction.SMALL_ICON, new ImageIcon(ImageUtilities.loadImage(iconResource()))); putValue(STATE, true); putValue(Action.SHORT_DESCRIPTION, "Cluster nodes into blocks"); } diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/actions/NextDiagramAction.java --- a/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/actions/NextDiagramAction.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/actions/NextDiagramAction.java Wed Jun 15 19:54:42 2011 +0200 @@ -29,6 +29,7 @@ import javax.swing.Action; import javax.swing.ImageIcon; import org.openide.util.HelpCtx; +import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.Utilities; @@ -47,7 +48,7 @@ public NextDiagramAction(Lookup lookup) { putValue(Action.SHORT_DESCRIPTION, "Show next graph of current group"); - putValue(Action.SMALL_ICON, new ImageIcon(Utilities.loadImage("com/sun/hotspot/igv/view/images/next_diagram.png"))); + putValue(Action.SMALL_ICON, new ImageIcon(ImageUtilities.loadImage("com/sun/hotspot/igv/view/images/next_diagram.png"))); } public String getName() { diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/actions/OverviewAction.java --- a/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/actions/OverviewAction.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/actions/OverviewAction.java Wed Jun 15 19:54:42 2011 +0200 @@ -27,6 +27,7 @@ import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.ImageIcon; +import org.openide.util.ImageUtilities; /** * @@ -38,7 +39,7 @@ public static final String STATE = "state"; public OverviewAction() { - putValue(AbstractAction.SMALL_ICON, new ImageIcon(org.openide.util.Utilities.loadImage(iconResource()))); + putValue(AbstractAction.SMALL_ICON, new ImageIcon(ImageUtilities.loadImage(iconResource()))); putValue(Action.SHORT_DESCRIPTION, "Show satellite view of whole graph"); setState(false); } diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/actions/PredSuccAction.java --- a/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/actions/PredSuccAction.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/actions/PredSuccAction.java Wed Jun 15 19:54:42 2011 +0200 @@ -27,6 +27,7 @@ import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.ImageIcon; +import org.openide.util.ImageUtilities; /** * @@ -39,7 +40,7 @@ public PredSuccAction() { state = true; - putValue(AbstractAction.SMALL_ICON, new ImageIcon(org.openide.util.Utilities.loadImage(iconResource()))); + putValue(AbstractAction.SMALL_ICON, new ImageIcon(ImageUtilities.loadImage(iconResource()))); putValue(STATE, true); putValue(Action.SHORT_DESCRIPTION, "Show neighboring nodes of fully visible nodes semi-transparent"); } diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/actions/PrevDiagramAction.java --- a/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/actions/PrevDiagramAction.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/actions/PrevDiagramAction.java Wed Jun 15 19:54:42 2011 +0200 @@ -29,6 +29,7 @@ import javax.swing.Action; import javax.swing.ImageIcon; import org.openide.util.HelpCtx; +import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.Utilities; @@ -47,7 +48,7 @@ public PrevDiagramAction(Lookup lookup) { putValue(Action.SHORT_DESCRIPTION, "Show previous graph of current group"); - putValue(Action.SMALL_ICON, new ImageIcon(Utilities.loadImage("com/sun/hotspot/igv/view/images/prev_diagram.png"))); + putValue(Action.SMALL_ICON, new ImageIcon(ImageUtilities.loadImage("com/sun/hotspot/igv/view/images/prev_diagram.png"))); } public String getName() { diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/widgets/SlotWidget.java --- a/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/widgets/SlotWidget.java Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/widgets/SlotWidget.java Wed Jun 15 19:54:42 2011 +0200 @@ -152,9 +152,9 @@ protected abstract int calculateSlotWidth(); protected int calculateWidth(int count) { - return (int)getFigureWidget().getFigure().getWidth() / count; + return getFigureWidget().getFigure().getWidth() / count; } - + public void handleDoubleClick(Widget w, WidgetAction.WidgetMouseEvent e) { Set hiddenNodes = new HashSet(diagramScene.getModel().getHiddenNodes()); if (diagramScene.isAllVisible()) { diff -r 11dfbb40ca69 -r f49685081630 src/share/tools/IdealGraphVisualizer/nbproject/project.properties --- a/src/share/tools/IdealGraphVisualizer/nbproject/project.properties Wed Jun 15 16:36:37 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/nbproject/project.properties Wed Jun 15 19:54:42 2011 +0200 @@ -55,4 +55,3 @@ project.com.sun.hotspot.igv.util=Util project.test=module1 run.args = -J-client -J-Xms128m -J-Xmx512m -J-ea -debug.args = -J-client -J-Xms128m -J-Xmx512m -J-ea