Search in sources :

Example 76 with Type

use of com.oracle.truffle.llvm.runtime.types.Type 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);
}
Also used : PrimitiveType(com.oracle.truffle.llvm.runtime.types.PrimitiveType) VariableBitWidthType(com.oracle.truffle.llvm.runtime.types.VariableBitWidthType) VectorType(com.oracle.truffle.llvm.runtime.types.VectorType) PointerType(com.oracle.truffle.llvm.runtime.types.PointerType) Type(com.oracle.truffle.llvm.runtime.types.Type) VectorType(com.oracle.truffle.llvm.runtime.types.VectorType) VariableBitWidthType(com.oracle.truffle.llvm.runtime.types.VariableBitWidthType) PrimitiveType(com.oracle.truffle.llvm.runtime.types.PrimitiveType) PointerType(com.oracle.truffle.llvm.runtime.types.PointerType)

Aggregations

Type (com.oracle.truffle.llvm.runtime.types.Type)76 PointerType (com.oracle.truffle.llvm.runtime.types.PointerType)68 PrimitiveType (com.oracle.truffle.llvm.runtime.types.PrimitiveType)64 StructureType (com.oracle.truffle.llvm.runtime.types.StructureType)63 FunctionType (com.oracle.truffle.llvm.runtime.types.FunctionType)57 ArrayType (com.oracle.truffle.llvm.runtime.types.ArrayType)54 AggregateType (com.oracle.truffle.llvm.runtime.types.AggregateType)50 VoidType (com.oracle.truffle.llvm.runtime.types.VoidType)43 LLVMExpressionNode (com.oracle.truffle.llvm.runtime.nodes.api.LLVMExpressionNode)33 VectorType (com.oracle.truffle.llvm.runtime.types.VectorType)32 LLVMArithmeticInstructionType (com.oracle.truffle.llvm.parser.instructions.LLVMArithmeticInstructionType)28 LLVMConversionType (com.oracle.truffle.llvm.parser.instructions.LLVMConversionType)28 MetaType (com.oracle.truffle.llvm.runtime.types.MetaType)13 SymbolImpl (com.oracle.truffle.llvm.parser.model.SymbolImpl)9 LLVMInteropType (com.oracle.truffle.llvm.runtime.interop.access.LLVMInteropType)8 VariableBitWidthType (com.oracle.truffle.llvm.runtime.types.VariableBitWidthType)8 LLVMSourcePointerType (com.oracle.truffle.llvm.runtime.debug.LLVMSourcePointerType)6 LLVMSourceType (com.oracle.truffle.llvm.runtime.debug.LLVMSourceType)6 FrameSlot (com.oracle.truffle.api.frame.FrameSlot)5 LLVMUnsupportedInlineAssemblerNode (com.oracle.truffle.llvm.nodes.others.LLVMUnsupportedInlineAssemblerNode)5