use of com.oracle.truffle.llvm.runtime.types.PointerType in project sulong by graalvm.
the class LazyToTruffleConverterImpl method copyArgumentsToFrame.
private List<LLVMExpressionNode> copyArgumentsToFrame(FrameDescriptor frame) {
List<FunctionParameter> parameters = method.getParameters();
List<LLVMExpressionNode> formalParamInits = new ArrayList<>();
LLVMExpressionNode stackPointerNode = nodeFactory.createFunctionArgNode(0, PrimitiveType.I64);
formalParamInits.add(nodeFactory.createFrameWrite(runtime, PointerType.VOID, stackPointerNode, frame.findFrameSlot(LLVMStack.FRAME_ID), null));
int argIndex = 1;
if (method.getType().getReturnType() instanceof StructureType) {
argIndex++;
}
for (FunctionParameter parameter : parameters) {
LLVMExpressionNode parameterNode = nodeFactory.createFunctionArgNode(argIndex++, parameter.getType());
FrameSlot slot = frame.findFrameSlot(parameter.getName());
if (isStructByValue(parameter)) {
Type type = ((PointerType) parameter.getType()).getPointeeType();
formalParamInits.add(nodeFactory.createFrameWrite(runtime, parameter.getType(), nodeFactory.createCopyStructByValue(runtime, type, parameterNode), slot, null));
} else {
formalParamInits.add(nodeFactory.createFrameWrite(runtime, parameter.getType(), parameterNode, slot, null));
}
}
return formalParamInits;
}
use of com.oracle.truffle.llvm.runtime.types.PointerType in project sulong by graalvm.
the class LLVMFrameNullerUtil method nullObject.
public static void nullObject(VirtualFrame frame, FrameSlot frameSlot) {
CompilerAsserts.partialEvaluationConstant(frameSlot.getInfo());
CompilerAsserts.partialEvaluationConstant(frameSlot.getInfo() == null);
if (frameSlot.getInfo() != null) {
Type type = (Type) frameSlot.getInfo();
CompilerAsserts.partialEvaluationConstant(Type.isFunctionOrFunctionPointer(type));
CompilerAsserts.partialEvaluationConstant(type instanceof VectorType);
CompilerAsserts.partialEvaluationConstant(type instanceof VariableBitWidthType);
CompilerAsserts.partialEvaluationConstant(type instanceof PrimitiveType && ((PrimitiveType) type).getPrimitiveKind() == PrimitiveKind.X86_FP80);
if (Type.isFunctionOrFunctionPointer(type)) {
nullFunction(frame, frameSlot);
} else if (type instanceof VectorType && ((VectorType) type).getElementType() instanceof PrimitiveType) {
nullVector(frame, frameSlot, ((PrimitiveType) ((VectorType) type).getElementType()).getPrimitiveKind());
} else if (type instanceof VectorType && ((VectorType) type).getElementType() instanceof PointerType) {
frame.setObject(frameSlot, LLVMAddressVector.createNullVector());
} else if (type instanceof VariableBitWidthType) {
nullIVarBit(frame, frameSlot);
} else if (type instanceof PrimitiveType && ((PrimitiveType) type).getPrimitiveKind() == PrimitiveKind.X86_FP80) {
null80BitFloat(frame, frameSlot);
}
}
// This is a best effort approach. It could still be that LLVMAddress clashes with some
// other class.
nullAddress(frame, frameSlot);
}
Aggregations