use of jdk.vm.ci.meta.Value in project graal by oracle.
the class MonitorCounterNode method generate.
@Override
public void generate(NodeLIRBuilderTool gen) {
assert graph().getNodes().filter(MonitorCounterNode.class).count() == 1 : "monitor counters not canonicalized to single instance";
VirtualStackSlot counter = gen.getLIRGeneratorTool().getResult().getFrameMapBuilder().allocateStackSlots(1, new BitSet(0), null);
Value result = gen.getLIRGeneratorTool().emitAddress(counter);
gen.setResult(this, result);
}
use of jdk.vm.ci.meta.Value in project graal by oracle.
the class VMErrorNode method generate.
@Override
public void generate(NodeLIRBuilderTool gen) {
String whereString;
if (stateBefore() != null) {
String nl = CodeUtil.NEW_LINE;
StringBuilder sb = new StringBuilder("in compiled code associated with frame state:");
FrameState fs = stateBefore();
while (fs != null) {
Bytecode.appendLocation(sb.append(nl).append("\t"), fs.getCode(), fs.bci);
fs = fs.outerFrameState();
}
whereString = sb.toString();
} else {
ResolvedJavaMethod method = graph().method();
whereString = "in compiled code for " + (method == null ? graph().toString() : method.format("%H.%n(%p)"));
}
LIRKind wordKind = gen.getLIRGeneratorTool().getLIRKind(StampFactory.pointer());
Value whereArg = gen.getLIRGeneratorTool().emitConstant(wordKind, new CStringConstant(whereString));
Value formatArg = gen.getLIRGeneratorTool().emitConstant(wordKind, new CStringConstant(format));
ForeignCallLinkage linkage = gen.getLIRGeneratorTool().getForeignCalls().lookupForeignCall(VM_ERROR);
gen.getLIRGeneratorTool().emitForeignCall(linkage, null, whereArg, formatArg, gen.operand(value));
}
use of jdk.vm.ci.meta.Value in project graal by oracle.
the class DimensionsNode method generate.
@Override
public void generate(NodeLIRBuilderTool gen) {
int size = rank.asJavaConstant().asInt() * 4;
int wordSize = gen.getLIRGeneratorTool().target().wordSize;
int slots = roundUp(size, wordSize) / wordSize;
VirtualStackSlot array = gen.getLIRGeneratorTool().getResult().getFrameMapBuilder().allocateStackSlots(slots, new BitSet(0), null);
Value result = gen.getLIRGeneratorTool().emitAddress(array);
gen.setResult(this, result);
}
use of jdk.vm.ci.meta.Value in project graal by oracle.
the class ReadReturnAddressNode method generate.
@Override
public void generate(NodeLIRBuilderTool gen) {
assert FrameAccess.returnAddressSize() > 0;
Value result = gen.getLIRGeneratorTool().emitMove(StackSlot.get(gen.getLIRGeneratorTool().getLIRKind(FrameAccess.getWordStamp()), -FrameAccess.returnAddressSize(), true));
gen.setResult(this, result);
}
use of jdk.vm.ci.meta.Value in project graal by oracle.
the class HotSpotBackend method gatherDestroyedCallerRegisters.
/**
* Finds all the registers that are defined by some given LIR.
*
* @param lir the LIR to examine
* @return the registers that are defined by or used as temps for any instruction in {@code lir}
*/
protected final EconomicSet<Register> gatherDestroyedCallerRegisters(LIR lir) {
final EconomicSet<Register> destroyedRegisters = EconomicSet.create(Equivalence.IDENTITY);
ValueConsumer defConsumer = new ValueConsumer() {
@Override
public void visitValue(Value value, OperandMode mode, EnumSet<OperandFlag> flags) {
if (ValueUtil.isRegister(value)) {
final Register reg = ValueUtil.asRegister(value);
destroyedRegisters.add(reg);
}
}
};
for (AbstractBlockBase<?> block : lir.codeEmittingOrder()) {
if (block == null) {
continue;
}
for (LIRInstruction op : lir.getLIRforBlock(block)) {
if (op instanceof LabelOp) {
// Don't consider this as a definition
} else {
op.visitEachTemp(defConsumer);
op.visitEachOutput(defConsumer);
}
}
}
return translateToCallerRegisters(destroyedRegisters);
}
Aggregations