src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/gen/LIRGenerator.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/gen/LIRGenerator.java	Mon Mar 20 17:40:04 2017
--- new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/gen/LIRGenerator.java	Mon Mar 20 17:40:04 2017

*** 20,39 **** --- 20,37 ---- * or visit www.oracle.com if you need additional information or have any * questions. */ package org.graalvm.compiler.lir.gen; import static org.graalvm.compiler.lir.LIRValueUtil.asConstant; import static org.graalvm.compiler.lir.LIRValueUtil.asJavaConstant; import static org.graalvm.compiler.lir.LIRValueUtil.isConstantValue; import static org.graalvm.compiler.lir.LIRValueUtil.isJavaConstant; import static org.graalvm.compiler.lir.LIRValueUtil.isVariable; import static org.graalvm.compiler.lir.LIRValueUtil.isVirtualStackSlot; import static jdk.vm.ci.code.ValueUtil.asAllocatableValue; import static jdk.vm.ci.code.ValueUtil.isAllocatableValue; import static jdk.vm.ci.code.ValueUtil.isLegal; import static jdk.vm.ci.code.ValueUtil.isStackSlot; + import static org.graalvm.compiler.lir.LIRValueUtil.asConstant; + import static org.graalvm.compiler.lir.LIRValueUtil.isConstantValue; + import static org.graalvm.compiler.lir.LIRValueUtil.isVariable; + import static org.graalvm.compiler.lir.LIRValueUtil.isVirtualStackSlot; import java.util.ArrayList; import java.util.List; import org.graalvm.compiler.asm.Label;
*** 58,69 **** --- 56,68 ---- import org.graalvm.compiler.lir.StandardOp.LabelOp; import org.graalvm.compiler.lir.StandardOp.SaveRegistersOp; import org.graalvm.compiler.lir.SwitchStrategy; import org.graalvm.compiler.lir.Variable; import org.graalvm.compiler.options.Option; + import org.graalvm.compiler.options.OptionKey; import org.graalvm.compiler.options.OptionType; ! import org.graalvm.compiler.options.OptionValues; import jdk.vm.ci.code.CallingConvention; import jdk.vm.ci.code.CodeCacheProvider; import jdk.vm.ci.code.Register; import jdk.vm.ci.code.RegisterAttributes;
*** 84,96 **** --- 83,95 ---- public abstract class LIRGenerator implements LIRGeneratorTool { public static class Options { // @formatter:off @Option(help = "Print HIR along side LIR as the latter is generated", type = OptionType.Debug) ! public static final OptionValue<Boolean> PrintIRWithLIR = new OptionValue<>(false); ! public static final OptionKey<Boolean> PrintIRWithLIR = new OptionKey<>(false); @Option(help = "The trace level for the LIR generator", type = OptionType.Debug) ! public static final OptionValue<Integer> TraceLIRGeneratorLevel = new OptionValue<>(0); ! public static final OptionKey<Integer> TraceLIRGeneratorLevel = new OptionKey<>(0); // @formatter:on } private final LIRKindTool lirKindTool;
*** 101,115 **** --- 100,120 ---- private LIRGenerationResult res; protected final ArithmeticLIRGenerator arithmeticLIRGen; private final MoveFactory moveFactory; + private final boolean printIrWithLir; + private final int traceLIRGeneratorLevel; + public LIRGenerator(LIRKindTool lirKindTool, ArithmeticLIRGenerator arithmeticLIRGen, MoveFactory moveFactory, CodeGenProviders providers, LIRGenerationResult res) { this.lirKindTool = lirKindTool; this.arithmeticLIRGen = arithmeticLIRGen; this.res = res; this.providers = providers; + OptionValues options = res.getLIR().getOptions(); + this.printIrWithLir = !TTY.isSuppressed() && Options.PrintIRWithLIR.getValue(options); + this.traceLIRGeneratorLevel = TTY.isSuppressed() ? 0 : Options.TraceLIRGeneratorLevel.getValue(options); assert arithmeticLIRGen.lirGen == null; arithmeticLIRGen.lirGen = this; this.moveFactory = moveFactory; }
*** 217,227 **** --- 222,232 ---- append(moveFactory.createLoad(dst, src)); } @Override public Value emitConstant(LIRKind kind, Constant constant) { ! if (constant instanceof JavaConstant && moveFactory.canInlineConstant((JavaConstant) constant)) { return new ConstantValue(toRegisterKind(kind), constant); } else { return emitLoadConstant(kind, constant); } }
*** 257,267 **** --- 262,272 ---- return (Variable) value; } @Override public Value loadNonConst(Value value) { ! if (isJavaConstant(value) && !moveFactory.canInlineConstant(asJavaConstant(value))) { ! if (isConstantValue(value) && !moveFactory.canInlineConstant(asConstant(value))) { return emitMove(value); } return value; }
*** 295,318 **** --- 300,323 ---- currentPosition = position; } @Override public <I extends LIRInstruction> I append(I op) { ! if (Options.PrintIRWithLIR.getValue() && !TTY.isSuppressed()) { ! if (printIrWithLir) { TTY.println(op.toStringWithIdPrefix()); TTY.println(); } assert LIRVerifier.verify(op); ! ArrayList<LIRInstruction> lirForBlock = res.getLIR().getLIRforBlock(getCurrentBlock()); op.setPosition(currentPosition); lirForBlock.add(op); return op; } @Override public boolean hasBlockEnd(AbstractBlockBase<?> block) { ! ArrayList<LIRInstruction> ops = getResult().getLIR().getLIRforBlock(block); if (ops.size() == 0) { return false; } return ops.get(ops.size() - 1) instanceof BlockEndOp; }
*** 322,352 **** --- 327,357 ---- private BlockScopeImpl(AbstractBlockBase<?> block) { currentBlock = block; } private void doBlockStart() { ! if (Options.PrintIRWithLIR.getValue()) { ! if (printIrWithLir) { TTY.print(currentBlock.toString()); } // set up the list of LIR instructions assert res.getLIR().getLIRforBlock(currentBlock) == null : "LIR list already computed for this block"; res.getLIR().setLIRforBlock(currentBlock, new ArrayList<LIRInstruction>()); append(new LabelOp(new Label(currentBlock.getId()), currentBlock.isAligned())); ! if (Options.TraceLIRGeneratorLevel.getValue() >= 1) { ! if (traceLIRGeneratorLevel >= 1) { TTY.println("BEGIN Generating LIR for block B" + currentBlock.getId()); } } private void doBlockEnd() { ! if (Options.TraceLIRGeneratorLevel.getValue() >= 1) { ! if (traceLIRGeneratorLevel >= 1) { TTY.println("END Generating LIR for block B" + currentBlock.getId()); } ! if (Options.PrintIRWithLIR.getValue()) { ! if (printIrWithLir) { TTY.println(); } currentBlock = null; }

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