public void Initiate() { ClassSkeletons = new Dictionary<string, LLVMTypeRef>(); Context = LLVM.ContextCreate(); Module = LLVM.ModuleCreateWithNameInContext("ADefaultModuleId", Context); Builder = LLVM.CreateBuilderInContext(Context); }
public static LLVMTypeRef ToLLVMTy(TyRef ty, LLVMContextRef context) { if (ty is TyInt) return IntTypeInContext(context, (ty as TyInt).BitWidth); else if (ty is TyUint) return IntTypeInContext(context, (ty as TyUint).BitWidth); else if (ty is TyFloat) { switch ((ty as TyFloat).BitWidth) { case 16: return HalfTypeInContext(context); case 32: return FloatTypeInContext(context); case 64: return DoubleTypeInContext(context); // EW default: throw new ArgumentException("ty"); } } else if (ty is TyBool) return Int1TypeInContext(context); else if (ty is TyVoid) return VoidTypeInContext(context); else if (ty is PointerTyRef) return PointerType(ToLLVMTy((ty as PointerTyRef).ty.Raw, context), 0); else if (ty is FnTyRef) { var fnTy = ty as FnTyRef; var llvmTyParams = fnTy.parameterTys.Select(param => ToLLVMTy(param.Raw, context)).ToArray(); var llvmTyReturn = ToLLVMTy(fnTy.returnTy.Raw, context); return FunctionType(llvmTyReturn, llvmTyParams, false); } // TODO(kai): structs and things go here pls else throw new ArgumentException("ty"); }
public static LLVMBool ParseIRInContext(LLVMContextRef ContextRef, LLVMMemoryBufferRef MemBuf, out LLVMModuleRef OutM, out string OutMessage) { var retVal = ParseIRInContext(ContextRef, MemBuf, out OutM, out IntPtr message); OutMessage = message != IntPtr.Zero && retVal.Value != 0 ? Marshal.PtrToStringAnsi(message) : null; DisposeMessage(message); return(retVal); }
public ModCompiler(DetailLogger log, SymbolTableWalker walker, LLVMContextRef context, LLVMModuleRef module, LLVMBuilderRef builder) { this.log = log; this.walker = walker; this.context = context; this.module = module; this.builder = builder; }
public static LLVMValueRef ConstStructInContext(LLVMContextRef C, LLVMValueRef[] ConstantVals, bool Packed) { if (ConstantVals.Length == 0) { LLVMValueRef dummy; return(ConstStructInContext(C, out dummy, 0, Packed)); } return(ConstStructInContext(C, out ConstantVals[0], (uint)ConstantVals.Length, Packed)); }
public static LLVMTypeRef StructTypeInContext(LLVMContextRef C, LLVMTypeRef[] ElementTypes, bool Packed) { if (ElementTypes.Length == 0) { LLVMTypeRef dummy; return(StructTypeInContext(C, out dummy, 0, Packed)); } return(StructTypeInContext(C, out ElementTypes[0], (uint)ElementTypes.Length, Packed)); }
public static LLVMValueRef MDNodeInContext(LLVMContextRef C, LLVMValueRef[] Vals) { if (Vals.Length == 0) { LLVMValueRef dummy; return(MDNodeInContext(C, out dummy, 0)); } return(MDNodeInContext(C, out Vals[0], (uint)Vals.Length)); }
public static extern LLVMMetadataRef MDNode2(LLVMContextRef @C, out LLVMMetadataRef @MDs, uint @Count);
public static extern LLVMTypeRef X86MMXTypeInContext(LLVMContextRef @C);
public static extern LLVMTypeRef StructTypeInContext(LLVMContextRef @C, out LLVMTypeRef @ElementTypes, uint @ElementCount, LLVMBool @Packed);
public static extern LLVMTypeRef PPCFP128TypeInContext(LLVMContextRef @C);
public static extern LLVMModuleRef ModuleCreateWithNameInContext([MarshalAs(UnmanagedType.LPStr)] string @ModuleID, LLVMContextRef @C);
public static extern LLVMValueRef MDNodeInContext(LLVMContextRef @C, out LLVMValueRef @Vals, uint @Count);
public static extern LLVMTypeRef FloatTypeInContext(LLVMContextRef @C);
public static extern LLVMTypeRef DoubleTypeInContext(LLVMContextRef @C);
public static extern LLVMBuilderRef CreateBuilderInContext(LLVMContextRef @C);
public static extern void ContextSetYieldCallback(LLVMContextRef @C, LLVMYieldCallback @Callback, IntPtr @OpaqueHandle);
public static extern void ContextSetDiagnosticHandler(LLVMContextRef @C, LLVMDiagnosticHandler @Handler, IntPtr @DiagnosticContext);
public static extern void ContextDispose(LLVMContextRef @C);
public static extern LLVMBool GetBitcodeModuleProviderInContext(LLVMContextRef @ContextRef, LLVMMemoryBufferRef @MemBuf, out LLVMModuleProviderRef @OutMP, out IntPtr @OutMessage);
public bool Equals(LLVMContextRef other) => this.Pointer == other.Pointer;
public static extern uint GetMDKindIDInContext(LLVMContextRef @C, [MarshalAs(UnmanagedType.LPStr)] string @Name, uint @SLen);
public static extern LLVMValueRef MDStringInContext(LLVMContextRef @C, [MarshalAs(UnmanagedType.LPStr)] string @Str, uint @SLen);
public static extern LLVMTypeRef HalfTypeInContext(LLVMContextRef @C);
public static extern LLVMBool ParseIRInContext(LLVMContextRef @ContextRef, LLVMMemoryBufferRef @MemBuf, out LLVMModuleRef @OutM, out IntPtr @OutMessage);
public static extern LLVMBasicBlockRef InsertBasicBlockInContext(LLVMContextRef @C, LLVMBasicBlockRef @BB, [MarshalAs(UnmanagedType.LPStr)] string @Name);
public static extern LLVMTypeRef StructCreateNamed(LLVMContextRef @C, [MarshalAs(UnmanagedType.LPStr)] string @Name);
public static LLVMValueRef ConstStructInContext(LLVMContextRef C, LLVMValueRef[] ConstantVals, bool Packed) { if (ConstantVals.Length == 0) { LLVMValueRef dummy; return ConstStructInContext(C, out dummy, 0, Packed); } return ConstStructInContext(C, out ConstantVals[0], (uint)ConstantVals.Length, Packed); }
public static extern LLVMTypeRef VoidTypeInContext(LLVMContextRef @C);
public static LLVMTypeRef StructTypeInContext(LLVMContextRef C, LLVMTypeRef[] ElementTypes, bool Packed) { if (ElementTypes.Length == 0) { LLVMTypeRef dummy; return StructTypeInContext(C, out dummy, 0, Packed); } return StructTypeInContext(C, out ElementTypes[0], (uint)ElementTypes.Length, Packed); }
public static extern LLVMTypeRef Int8TypeInContext(LLVMContextRef @C);
public LLVMContext() { Handle = LLVMContextRef.Create(); }
public static LLVMValueRef MDNodeInContext(LLVMContextRef C, LLVMValueRef[] Vals) { if (Vals.Length == 0) { LLVMValueRef dummy; return MDNodeInContext(C, out dummy, 0); } return MDNodeInContext(C, out Vals[0], (uint)Vals.Length); }
public static extern LLVMTypeRef IntPtrTypeForASInContext(LLVMContextRef @C, LLVMTargetDataRef @TD, uint @AS);
public Module(string moduleId, LLVMContextRef context) { this.instance = LLVM.ModuleCreateWithNameInContext(moduleId, context); }
public static extern LLVMTypeRef IntPtrTypeInContext(LLVMContextRef @C, LLVMTargetDataRef @TD);
public static LLVMAttributeRef CreateStringAttribute(LLVMContextRef C, string Kind, string Value) { return(CreateStringAttribute(C, Kind, Kind == null ? 0 : (uint)Kind.Length, Value, Value == null ? 0 : (uint)Value.Length)); }
public static extern LLVMMetadataRef MDString2(LLVMContextRef @C, [MarshalAs(UnmanagedType.LPStr)] string @Str, uint @SLen);
public static extern LLVMTypeRef IntTypeInContext(LLVMContextRef @C, uint @NumBits);
public static extern LLVMMetadataRef TemporaryMDNode(LLVMContextRef @C, out LLVMMetadataRef @MDs, uint @Count);
public static extern LLVMTypeRef LabelTypeInContext(LLVMContextRef @C);
public IRBuilder(LLVMContextRef context) { this.instance = LLVM.CreateBuilderInContext(context); }