# HG changeset patch # User Gilles Duboscq # Date 1363265037 -3600 # Node ID ae7e78091f03bde36d3a27f115b10e5c5643ca53 # Parent ad4f977b49ced57a4b0d6274f41f3df7c5e1b0c6 Cleanup branching and jumps in LIRGenerator: JumpOp/BranchOp do not need a state. In emitBranch, emitNullCheckBranch, emitCompareBranch, emitOverflowCheckBranch and emitIntegerTestBranch both targets are always provided. diff -r ad4f977b49ce -r ae7e78091f03 graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java --- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Thu Mar 14 13:25:28 2013 +0100 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Thu Mar 14 13:43:57 2013 +0100 @@ -254,23 +254,23 @@ } @Override - public void emitJump(LabelRef label, LIRFrameState info) { - append(new JumpOp(label, info)); + public void emitJump(LabelRef label) { + append(new JumpOp(label)); } @Override - public void emitCompareBranch(Value left, Value right, Condition cond, boolean unorderedIsTrue, LabelRef label, LIRFrameState info) { + public void emitCompareBranch(Value left, Value right, Condition cond, boolean unorderedIsTrue, LabelRef label) { boolean mirrored = emitCompare(left, right); Condition finalCondition = mirrored ? cond.mirror() : cond; switch (left.getKind().getStackKind()) { case Int: case Long: case Object: - append(new BranchOp(finalCondition, label, info)); + append(new BranchOp(finalCondition, label)); break; case Float: case Double: - append(new FloatBranchOp(finalCondition, unorderedIsTrue, label, info)); + append(new FloatBranchOp(finalCondition, unorderedIsTrue, label)); break; default: throw GraalInternalError.shouldNotReachHere("" + left.getKind()); @@ -278,14 +278,14 @@ } @Override - public void emitOverflowCheckBranch(LabelRef destination, LIRFrameState info, boolean negated) { - append(new BranchOp(negated ? ConditionFlag.NoOverflow : ConditionFlag.Overflow, destination, info)); + public void emitOverflowCheckBranch(LabelRef destination, boolean negated) { + append(new BranchOp(negated ? ConditionFlag.NoOverflow : ConditionFlag.Overflow, destination)); } @Override - public void emitIntegerTestBranch(Value left, Value right, boolean negated, LabelRef label, LIRFrameState info) { + public void emitIntegerTestBranch(Value left, Value right, boolean negated, LabelRef label) { emitIntegerTest(left, right); - append(new BranchOp(negated ? Condition.NE : Condition.EQ, label, info)); + append(new BranchOp(negated ? Condition.NE : Condition.EQ, label)); } @Override diff -r ad4f977b49ce -r ae7e78091f03 graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java --- a/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java Thu Mar 14 13:25:28 2013 +0100 +++ b/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java Thu Mar 14 13:43:57 2013 +0100 @@ -179,20 +179,20 @@ } @Override - public void emitJump(LabelRef label, LIRFrameState info) { - append(new JumpOp(label, info)); + public void emitJump(LabelRef label) { + append(new JumpOp(label)); } @Override - public void emitCompareBranch(Value left, Value right, Condition cond, boolean unorderedIsTrue, LabelRef label, LIRFrameState info) { + public void emitCompareBranch(Value left, Value right, Condition cond, boolean unorderedIsTrue, LabelRef label) { switch (left.getKind().getStackKind()) { case Int: append(new CompareOp(ICMP, cond, left, right)); - append(new BranchOp(cond, label, info)); + append(new BranchOp(cond, label)); break; case Object: append(new CompareOp(ACMP, cond, left, right)); - append(new BranchOp(cond, label, info)); + append(new BranchOp(cond, label)); break; default: throw GraalInternalError.shouldNotReachHere("" + left.getKind()); @@ -200,12 +200,12 @@ } @Override - public void emitOverflowCheckBranch(LabelRef label, LIRFrameState info, boolean negated) { + public void emitOverflowCheckBranch(LabelRef label, boolean negated) { throw new InternalError("NYI"); } @Override - public void emitIntegerTestBranch(Value left, Value right, boolean negated, LabelRef label, LIRFrameState info) { + public void emitIntegerTestBranch(Value left, Value right, boolean negated, LabelRef label) { throw new InternalError("NYI"); } diff -r ad4f977b49ce -r ae7e78091f03 graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java --- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Thu Mar 14 13:25:28 2013 +0100 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Thu Mar 14 13:43:57 2013 +0100 @@ -62,7 +62,7 @@ } @Override - public void emitJump(LabelRef label, LIRFrameState info) { + public void emitJump(LabelRef label) { @SuppressWarnings("unused") SPARCLIRInstruction instruction = null; // SPARC: Auto-generated method stub @@ -70,19 +70,19 @@ } @Override - public void emitCompareBranch(Value left, Value right, Condition cond, boolean unorderedIsTrue, LabelRef label, LIRFrameState info) { + public void emitCompareBranch(Value left, Value right, Condition cond, boolean unorderedIsTrue, LabelRef label) { // SPARC: Auto-generated method stub } @Override - public void emitOverflowCheckBranch(LabelRef label, LIRFrameState info, boolean negated) { + public void emitOverflowCheckBranch(LabelRef label, boolean negated) { // SPARC: Auto-generated method stub } @Override - public void emitIntegerTestBranch(Value left, Value right, boolean negated, LabelRef label, LIRFrameState info) { + public void emitIntegerTestBranch(Value left, Value right, boolean negated, LabelRef label) { // SPARC: Auto-generated method stub } diff -r ad4f977b49ce -r ae7e78091f03 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Thu Mar 14 13:25:28 2013 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Thu Mar 14 13:43:57 2013 +0100 @@ -410,7 +410,7 @@ NodeClassIterable successors = block.getEndNode().successors(); assert successors.isNotEmpty() : "should have at least one successor : " + block.getEndNode(); - emitJump(getLIRBlock((FixedNode) successors.first()), null); + emitJump(getLIRBlock((FixedNode) successors.first())); } if (GraalOptions.TraceLIRGeneratorLevel >= 1) { @@ -571,7 +571,7 @@ } resolver.dispose(); - append(new JumpOp(getLIRBlock(merge), null)); + append(new JumpOp(getLIRBlock(merge))); } private Value operandForPhi(PhiNode phi) { @@ -589,72 +589,46 @@ @Override public void emitIf(IfNode x) { - emitBranch(x.condition(), getLIRBlock(x.trueSuccessor()), getLIRBlock(x.falseSuccessor()), null); + emitBranch(x.condition(), getLIRBlock(x.trueSuccessor()), getLIRBlock(x.falseSuccessor())); } - public void emitBranch(LogicNode node, LabelRef trueSuccessor, LabelRef falseSuccessor, LIRFrameState info) { + public void emitBranch(LogicNode node, LabelRef trueSuccessor, LabelRef falseSuccessor) { if (node instanceof IsNullNode) { - emitNullCheckBranch((IsNullNode) node, trueSuccessor, falseSuccessor, info); + emitNullCheckBranch((IsNullNode) node, trueSuccessor, falseSuccessor); } else if (node instanceof CompareNode) { - emitCompareBranch((CompareNode) node, trueSuccessor, falseSuccessor, info); + emitCompareBranch((CompareNode) node, trueSuccessor, falseSuccessor); } else if (node instanceof LogicConstantNode) { - emitConstantBranch(((LogicConstantNode) node).getValue(), trueSuccessor, falseSuccessor, info); + emitConstantBranch(((LogicConstantNode) node).getValue(), trueSuccessor, falseSuccessor); } else if (node instanceof IntegerTestNode) { - emitIntegerTestBranch((IntegerTestNode) node, trueSuccessor, falseSuccessor, info); + emitIntegerTestBranch((IntegerTestNode) node, trueSuccessor, falseSuccessor); } else { throw GraalInternalError.unimplemented(node.toString()); } } - private void emitNullCheckBranch(IsNullNode node, LabelRef trueSuccessor, LabelRef falseSuccessor, LIRFrameState info) { - if (falseSuccessor != null) { - emitCompareBranch(operand(node.object()), Constant.NULL_OBJECT, Condition.NE, false, falseSuccessor, info); - if (trueSuccessor != null) { - emitJump(trueSuccessor, null); - } - } else { - emitCompareBranch(operand(node.object()), Constant.NULL_OBJECT, Condition.EQ, false, trueSuccessor, info); - } + private void emitNullCheckBranch(IsNullNode node, LabelRef trueSuccessor, LabelRef falseSuccessor) { + emitCompareBranch(operand(node.object()), Constant.NULL_OBJECT, Condition.NE, false, falseSuccessor); + emitJump(trueSuccessor); } - public void emitCompareBranch(CompareNode compare, LabelRef trueSuccessorBlock, LabelRef falseSuccessorBlock, LIRFrameState info) { - if (falseSuccessorBlock != null) { - emitCompareBranch(operand(compare.x()), operand(compare.y()), compare.condition().negate(), !compare.unorderedIsTrue(), falseSuccessorBlock, info); - if (trueSuccessorBlock != null) { - emitJump(trueSuccessorBlock, null); - } - } else { - emitCompareBranch(operand(compare.x()), operand(compare.y()), compare.condition(), compare.unorderedIsTrue(), trueSuccessorBlock, info); - } + public void emitCompareBranch(CompareNode compare, LabelRef trueSuccessorBlock, LabelRef falseSuccessorBlock) { + emitCompareBranch(operand(compare.x()), operand(compare.y()), compare.condition().negate(), !compare.unorderedIsTrue(), falseSuccessorBlock); + emitJump(trueSuccessorBlock); } - public void emitOverflowCheckBranch(LabelRef noOverflowBlock, LabelRef overflowBlock, LIRFrameState info) { - if (overflowBlock != null) { - emitOverflowCheckBranch(overflowBlock, info, false); - if (noOverflowBlock != null) { - emitJump(noOverflowBlock, null); - } - } else { - emitOverflowCheckBranch(noOverflowBlock, info, true); - } + public void emitOverflowCheckBranch(LabelRef noOverflowBlock, LabelRef overflowBlock) { + emitOverflowCheckBranch(overflowBlock, false); + emitJump(noOverflowBlock); } - public void emitIntegerTestBranch(IntegerTestNode test, LabelRef trueSuccessorBlock, LabelRef falseSuccessorBlock, LIRFrameState info) { - if (falseSuccessorBlock != null) { - emitIntegerTestBranch(operand(test.x()), operand(test.y()), true, falseSuccessorBlock, info); - if (trueSuccessorBlock != null) { - emitJump(trueSuccessorBlock, null); - } - } else { - emitIntegerTestBranch(operand(test.x()), operand(test.y()), false, trueSuccessorBlock, info); - } + public void emitIntegerTestBranch(IntegerTestNode test, LabelRef trueSuccessorBlock, LabelRef falseSuccessorBlock) { + emitIntegerTestBranch(operand(test.x()), operand(test.y()), true, falseSuccessorBlock); + emitJump(trueSuccessorBlock); } - public void emitConstantBranch(boolean value, LabelRef trueSuccessorBlock, LabelRef falseSuccessorBlock, LIRFrameState info) { + public void emitConstantBranch(boolean value, LabelRef trueSuccessorBlock, LabelRef falseSuccessorBlock) { LabelRef block = value ? trueSuccessorBlock : falseSuccessorBlock; - if (block != null) { - emitJump(block, info); - } + emitJump(block); } @Override @@ -681,13 +655,13 @@ } } - public abstract void emitJump(LabelRef label, LIRFrameState info); + public abstract void emitJump(LabelRef label); - public abstract void emitCompareBranch(Value left, Value right, Condition cond, boolean unorderedIsTrue, LabelRef label, LIRFrameState info); + public abstract void emitCompareBranch(Value left, Value right, Condition cond, boolean unorderedIsTrue, LabelRef label); - public abstract void emitOverflowCheckBranch(LabelRef label, LIRFrameState info, boolean negated); + public abstract void emitOverflowCheckBranch(LabelRef label, boolean negated); - public abstract void emitIntegerTestBranch(Value left, Value right, boolean negated, LabelRef label, LIRFrameState info); + public abstract void emitIntegerTestBranch(Value left, Value right, boolean negated, LabelRef label); public abstract Variable emitConditionalMove(Value leftVal, Value right, Condition cond, boolean unorderedIsTrue, Value trueValue, Value falseValue); @@ -827,7 +801,7 @@ public void emitSwitch(SwitchNode x) { int keyCount = x.keyCount(); if (keyCount == 0) { - emitJump(getLIRBlock(x.defaultSuccessor()), null); + emitJump(getLIRBlock(x.defaultSuccessor())); } else { Variable value = load(operand(x.value())); LabelRef defaultTarget = x.defaultSuccessor() == null ? null : getLIRBlock(x.defaultSuccessor()); @@ -839,7 +813,7 @@ long valueRange = x.keyAt(keyCount - 1).asLong() - x.keyAt(0).asLong() + 1; int switchRangeCount = switchRangeCount(x); if (switchRangeCount == 0) { - emitJump(getLIRBlock(x.defaultSuccessor()), null); + emitJump(getLIRBlock(x.defaultSuccessor())); } else if (switchRangeCount >= GraalOptions.MinimumJumpTableSize && keyCount / (double) valueRange >= GraalOptions.MinTableSwitchDensity) { int minValue = x.keyAt(0).asInt(); assert valueRange < Integer.MAX_VALUE; diff -r ad4f977b49ce -r ae7e78091f03 graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ControlFlow.java --- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ControlFlow.java Thu Mar 14 13:25:28 2013 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ControlFlow.java Thu Mar 14 13:43:57 2013 +0100 @@ -63,16 +63,14 @@ public static class BranchOp extends AMD64LIRInstruction implements StandardOp.BranchOp { protected ConditionFlag condition; protected LabelRef destination; - @State protected LIRFrameState state; - public BranchOp(Condition condition, LabelRef destination, LIRFrameState info) { - this(intCond(condition), destination, info); + public BranchOp(Condition condition, LabelRef destination) { + this(intCond(condition), destination); } - public BranchOp(ConditionFlag condition, LabelRef destination, LIRFrameState state) { + public BranchOp(ConditionFlag condition, LabelRef destination) { this.condition = condition; this.destination = destination; - this.state = state; } @Override @@ -96,8 +94,8 @@ public static class FloatBranchOp extends BranchOp { protected boolean unorderedIsTrue; - public FloatBranchOp(Condition condition, boolean unorderedIsTrue, LabelRef destination, LIRFrameState info) { - super(floatCond(condition), destination, info); + public FloatBranchOp(Condition condition, boolean unorderedIsTrue, LabelRef destination) { + super(floatCond(condition), destination); this.unorderedIsTrue = unorderedIsTrue; } diff -r ad4f977b49ce -r ae7e78091f03 graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXControlFlow.java --- a/graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXControlFlow.java Thu Mar 14 13:25:28 2013 +0100 +++ b/graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXControlFlow.java Thu Mar 14 13:43:57 2013 +0100 @@ -54,12 +54,10 @@ protected Condition condition; protected LabelRef destination; - @State protected LIRFrameState state; - public BranchOp(Condition condition, LabelRef destination, LIRFrameState state) { + public BranchOp(Condition condition, LabelRef destination) { this.condition = condition; this.destination = destination; - this.state = state; } @Override diff -r ad4f977b49ce -r ae7e78091f03 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/StandardOp.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/StandardOp.java Thu Mar 14 13:25:28 2013 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/StandardOp.java Thu Mar 14 13:43:57 2013 +0100 @@ -80,11 +80,9 @@ public static class JumpOp extends LIRInstruction { private final LabelRef destination; - @State protected LIRFrameState state; - public JumpOp(LabelRef destination, LIRFrameState state) { + public JumpOp(LabelRef destination) { this.destination = destination; - this.state = state; } @Override