/** * Adds a phi insn to the beginning of this block. This is to be used * when the result type or local-association can be determined at phi * insert time. * * @param resultSpec {@code non-null;} reg */ public void addPhiInsnForReg(RegisterSpec resultSpec) { insns.add(0, new PhiInsn(resultSpec, this)); }
public void visitPhiInsn (PhiInsn insn) { int ropReg; ropReg = insn.getRopResultReg(); /* * Never add a version 0 register as a phi * operand. Version 0 registers represent the * initial register state, and thus are never * significant. Furthermore, the register liveness * algorithm doesn't properly count them as "live * in" at the beginning of the method. */ RegisterSpec stackTop = currentMapping[ropReg]; if (!isVersionZeroRegister(stackTop.getReg())) { insn.addPhiOperand(stackTop, block); } } };
/** {@inheritDoc} */ @Override public boolean hasSideEffect() { return Optimizer.getPreserveLocals() && getLocalAssignment() != null; }
public void visitPhiInsn(PhiInsn insn) { RegisterSpecList sources = insn.getSources(); RegisterSpec result = insn.getResult(); int sz = sources.size(); for (int i = 0; i < sz; i++) { RegisterSpec source = sources.get(i); SsaBasicBlock predBlock = blocks.get( insn.predBlockIndexForSourcesIndex(i)); predBlock.addMoveToEnd(result, source); } } }
/** * Changes the result type. Used during phi type resolution * * @param type {@code non-null;} new TypeBearer * @param local {@code null-ok;} new local info, if available */ public void changeResultType(TypeBearer type, LocalItem local) { setResult(RegisterSpec.makeLocalOptional( getResult().getReg(), type, local)); }
insn.updateSourcesToDefinitions(ssaMeth); RegisterSpecList sources = insn.getSources(); RegisterSpec result = insn.getResult(); insn.changeResultType(newResultType, newLocal);
RegisterSpec result = getResult(); int sz = getSources().size(); if (sz == 0) { sb.append(" .");
/** {@inheritDoc} */ @Override public void visitPhiInsn (PhiInsn phi) { // If we're tracking local vars, then some phis have side effects. if (!hasSideEffect(phi)) { noSideEffectRegs.set(phi.getResult().getReg()); } }
phi.predBlocksForReg(regV, ssaMeth)) { blockN = pred;
/** {@inheritDoc} */ @Override public final void mapSourceRegisters(RegisterMapper mapper) { for (Operand o : operands) { RegisterSpec old = o.regSpec; o.regSpec = mapper.map(old); if (old != o.regSpec) { getBlock().getParent().onSourceChanged(this, old, o.regSpec); } } sources = null; }
public void visitPhiInsn(PhiInsn insn) { RegisterSpecList sources = insn.getSources(); RegisterSpec result = insn.getResult(); int sz = sources.size(); for (int i = 0; i < sz; i++) { RegisterSpec source = sources.get(i); SsaBasicBlock predBlock = blocks.get( insn.predBlockIndexForSourcesIndex(i)); predBlock.addMoveToEnd(result, source); } } }
insn.updateSourcesToDefinitions(ssaMeth); RegisterSpecList sources = insn.getSources(); RegisterSpec result = insn.getResult(); insn.changeResultType(newResultType, newLocal);
RegisterSpec result = getResult(); int sz = getSources().size(); if (sz == 0) { sb.append(" .");
/** * Changes the result type. Used during phi type resolution * * @param type {@code non-null;} new TypeBearer * @param local {@code null-ok;} new local info, if available */ public void changeResultType(TypeBearer type, LocalItem local) { setResult(RegisterSpec.makeLocalOptional( getResult().getReg(), type, local)); }
@Override public void visitPhiInsn (PhiInsn phi) { definitionList[phi.getResult().getReg()] = phi; } @Override
phi.predBlocksForReg(regV, ssaMeth)) { blockN = pred;
/** {@inheritDoc} */ @Override public final void mapSourceRegisters(RegisterMapper mapper) { for (Operand o : operands) { RegisterSpec old = o.regSpec; o.regSpec = mapper.map(old); if (old != o.regSpec) { getBlock().getParent().onSourceChanged(this, old, o.regSpec); } } sources = null; }
public void visitPhiInsn(PhiInsn insn) { RegisterSpecList sources = insn.getSources(); RegisterSpec result = insn.getResult(); int sz = sources.size(); for (int i = 0; i < sz; i++) { RegisterSpec source = sources.get(i); SsaBasicBlock predBlock = blocks.get( insn.predBlockIndexForSourcesIndex(i)); predBlock.addMoveToEnd(result, source); } } }
insn.updateSourcesToDefinitions(ssaMeth); RegisterSpecList sources = insn.getSources(); RegisterSpec result = insn.getResult(); insn.changeResultType(newResultType, newLocal);
RegisterSpec result = getResult(); int sz = getSources().size(); if (sz == 0) { sb.append(" .");